Remove the in-tree versin of FLTK. Maintaining such a copy is way too
much work, and it's constantly out of sync. Let's document what the
main developers (ie Cendio) are using instead. 



git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4951 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/BUILDING.txt b/BUILDING.txt
index 85b434e..f5ed717 100644
--- a/BUILDING.txt
+++ b/BUILDING.txt
@@ -9,6 +9,10 @@
 
 -- CMake (http://www.cmake.org) v2.8 or later
 
+-- FLTK 1.3.0 snapshot
+   * Must be patched to get full functionality
+   * See "Building FLTK" below.
+
 -- If building TLS support:
    * GnuTLS and its dependencies (libgcrypt, libtasn1, libgpg-error)
 
@@ -76,6 +80,60 @@
 -- See "Building Java Support" below.
 
 
+=============
+Building FLTK
+=============
+
+Currently, TigerVNC requires functionality that is not yet included in the
+upstream version of FLTK.  Thus, it will be necessary to build FLTK from
+source.  To do this:
+
+1. Check out FLTK 1.3.0r9619 using Subversion:
+$ svn co http://svn.easysw.com/public/fltk/fltk/branches/branch-1.3 -r 9619 fltk-1.3.0r9619
+
+2. For full functionality, apply these patches:
+
+Support horizontal mouse wheel
+http://www.fltk.org/str.php?L2644
+
+Incorrect resize handling
+http://fltk.org/str.php?L2859
+
+Export dead key information from FLTK to the apps
+http://www.fltk.org/str.php?L2599
+
+Notify applications of changes to the clipboard
+http://www.fltk.org/str.php?L2636
+
+Ability to convert a Fl_Pixmap to a Fl_RGB_Image
+http://www.fltk.org/str.php?L2659
+
+Support for custom cursors
+http://www.fltk.org/str.php?L2660
+
+Improve modality interaction with WM
+http://www.fltk.org/str.php?L2802
+
+Window icons
+http://www.fltk.org/str.php?L2816
+
+Multihead
+http://fltk.org/str.php?L2860
+
+
+3. Use CMake to build FLTK using the same procedures described below for
+   building TigerVNC.  The recipes in the "Build Recipes" section also apply.
+
+4. (optional) Use 'make install' to install FLTK into a directory of your
+   choosing.
+
+5. When building TigerVNC, set the FLTK_FLUID_EXECUTABLE CMake variable to the
+   location of the fluid executable that was built in Step 3 or installed in
+   Step 4.  This gives CMake a hint as to where to find the FLTK library.
+6. If you did not install FLTK, then set the FLTK_INCLUDE_DIR CMake variable to
+   the location of the FLTK source directory.
+
+
 ==================
 Out-of-Tree Builds
 ==================
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c375314..6177107 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -296,46 +296,6 @@
   set(CMAKE_REQUIRED_LIBRARIES)
 endif()
 
-option(USE_INCLUDED_FLTK
-  "Force the use of the FLTK library bundled with the TigerVNC source")
-if(NOT FLTK_FOUND OR NOT HAVE_FLTK_DEAD_KEYS OR NOT HAVE_FLTK_CLIPBOARD
-  OR NOT HAVE_FLTK_MEDIAKEYS OR NOT HAVE_FLTK_FULLSCREEN
-  OR NOT HAVE_FLTK_CURSOR OR NOT HAVE_FLTK_ICONS)
-  set(USE_INCLUDED_FLTK 1)
-endif()
-if(USE_INCLUDED_FLTK)
-  # Check that we have the proper dependencies
-  if(UNIX AND NOT APPLE)
-    if(NOT X11_Xft_FOUND)
-      message(FATAL_ERROR "Xft headers/libraries not found (needed by FLTK.)")
-    endif()
-    if(NOT X11_Xinerama_FOUND)
-      message(FATAL_ERROR "Xinerama headers/libraries not found (needed by FLTK.)")
-    endif()
-    if(NOT X11_Xfixes_FOUND)
-      message(FATAL_ERROR "Xfixes headers/libraries not found (needed by FLTK.)")
-    endif()
-    if(NOT X11_Xcursor_FOUND)
-      message(FATAL_ERROR "Xcursor headers/libraries not found (needed by FLTK.)")
-    endif()
-  endif()
-
-  set(HAVE_FLTK_DEAD_KEYS 1)
-  set(HAVE_FLTK_CLIPBOARD 1)
-  set(HAVE_FLTK_MEDIAKEYS 1)
-  set(HAVE_FLTK_FULLSCREEN 1)
-  set(HAVE_FLTK_CURSOR 1)
-  set(HAVE_FLTK_ICONS 1)
-  set(FLTK_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/common/fltk)
-  set(FLTK_LIBRARIES)
-  if(APPLE)
-    set(FLTK_LIBRARIES "-framework Carbon -framework Cocoa -framework ApplicationServices")
-  elseif(NOT WIN32)
-    set(FLTK_LIBRARIES "-ldl")
-  endif()
-  message(STATUS "Using included FLTK library")
-endif()
-
 # Check for GNUTLS library
 option(ENABLE_GNUTLS "Enable protocol encryption and advanced authentication" ON)
 if(ENABLE_GNUTLS)
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index fd22455..a645aa5 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -5,10 +5,6 @@
   set(ZLIB_LIBRARIES zlib)
 endif()
 
-if(USE_INCLUDED_FLTK)
-  add_subdirectory(fltk)
-endif()
-
 add_subdirectory(os)
 add_subdirectory(rdr)
 add_subdirectory(network)
diff --git a/common/fltk/ANNOUNCEMENT b/common/fltk/ANNOUNCEMENT
deleted file mode 100644
index b3660f2..0000000
--- a/common/fltk/ANNOUNCEMENT
+++ /dev/null
@@ -1,2 +0,0 @@
-The initial FLTK 1.3 is based on the final 1.1.8.
-
diff --git a/common/fltk/CHANGES b/common/fltk/CHANGES
deleted file mode 100644
index 35b81b3..0000000
--- a/common/fltk/CHANGES
+++ /dev/null
@@ -1,3638 +0,0 @@
-
-CHANGES IN FLTK 1.3.0
-
-	  New Features
-
-	- Added UTF-8 Unicode support throughout FLTK and Fluid
-	- Added Fl_Tree widget for hierarchical views
-	- Added Fl_Table widget for widget layout
-	- Added Fl_Native_Filechooser as a widget and global options
-	- Added printing support (Fl_Printer class and friends) for native
-	  printing on Windows and Mac OS X, PostScript printing on X11
-	  with CUPS or lp, and PostScript file output on all platforms
-	- Added basic Fl_Device abstraction layer for all drawing functions
-	- Moved OS X code base to the more modern Cocoa toolkit thanks
-	  to the awesome work of Manolo Gouy (STR #2221)
-
-	  API and ABI compatibility to FLTK 1.1.x
-
-	- All strings are expected to be in UTF-8 Unicode encoding
-	- Replaced Fl_Scroll::position(int,int) with scroll_to(int,int)
-	  to avoid overriding Fl_Widget::position(int,int) (STR #1303)
-	- Although FLTK 1.3 maintains source code compatibility as good
-	  as possible, the binary interface changed considerably.
-	- Updated the bundled libpng to v1.5.1 (released Feb  3, 2011)
-	- Updated the bundled libjpeg to v8c   (released Jan 16, 2011)
-	- Updated the bundled zlib to v1.2.5   (released Apr 19, 2010)
-
-	  API enhancements and changes
-
-	- Changed font index to 32 bit
-	- Changed font size to 32 bit
-        - Changed widget coordinates to 32 bit
-	- Corrected const methods of Fl_Text_{Buffer|Display|Selection}
-	  to be declared const, corrected an Fl_Text_Buffer attrib. typo
-	- All draw() methods of widgets are now protected (STR #2142).
-	- Changed Fl_Group::clip_children() to public (STR #2017)
-	- Changed socket library to winsock2 (ws2_32.dll) instead of 
-	  wsock32.dll for Windows. The dll is now loaded dynamically only 
-	  if/when needed.	  
-	- Changed hide() and show() methods. They are now virtual from 
-	  Fl_Widget.
-	- Added new label and image alignments (STR #2269)
-	- Added global UI options (STR #2471)
-	- Added class Fl_Widget_Tracker to simplify safe handling of widget
-	  deletion in callbacks. This is used in Fl_Widget::do_callback()
-	  to prevent accessing widgets after deletion in the callback.
-	- Added sorting to Fl_Browser_ (STR #2113)
-	- Added new method client_area() for easier positioning of children
-	  in Fl_Tabs (STR #2480)
-	- Added interface to set color chooser mode (STR #2407)
-	- Added Fl_Menu_::find_item by callback
-	- Added loading jpeg images from memory
-        - Added support for shortcuts for Fl_Input_, Fl_Value_Input, and 
-	  Fl_Text_Display derived widgets (STR #1770)
-        - Added Fl_Menu_ methods: insert(), find_index(), clear_submenu()
-	- Hotspot behavior of fl_message() and other common dialogs is now
-	  optional (STR #2561).
-	- Common dialogs like fl_message() and fl_ask() can now have a window
-	  title (STR #2562).
-
-	  IDE support and command line build options
-
-	- FLTK now supports Apple Xcode 3, MS VisualC 2008, and
-	  MS VisualC 2010. MS VisualC 6 support is maintained as a
-	  compatibility base for VisualC.net, etc. . FLTK continues
-	  to support configure/make and improved CMake build files.
-	- Added step by step README's for MSWindows, OS X, and four
-	  Linux distros.
-	- Added "ide" subdirectory for all IDE support files
-	- Added template to generate new projects with Xcode.
-	- Added --enable-cairo and --enable-cairoext  configure options.
-	- redesigned CMake files (STR #2317).
-	- The new configure option --enable-x11 (lowercase 'x') enables
-	  Cygwin builds under Windows (with --enable-cygwin) to use X11
-	  instead of GDI drawing (STR #2147, #2183) and is ignored otherwise.
-	- Changed "fltk-config --post foo" to create an application
-	  bundle rather than attaching a resource fork.
-	- Changed default for configure option --with-links for common
-	  misspellings on case sensitive file systems like Unix/Linux.
-	  The new default is --without-links; use --with-links on
-	  Unix/Linux only if you need the links (e.g. lowercase '.h')
-
-	  Fluid
-
-	- Added argument-less constructor in Fluid Widget Class
-	- Added jpeg support to Fluid image() element
-	- Added binary data type to Fluid
-	- Empty functions in Fluid no longer create an
-	  implementation (STR #2259)
-	- Fixed internationalisation of menus using Fluid (STR #2246)
-	- Fixed menu item counting issue in Fluid (STR #2322)
-	- Fixed lost top item in Fluid's tree browser (STR #2233)
-	- Fixed Fluid dependency on X11 (STR #2261)
-	- Fixed Fluid textcolor output (STR #1992)
-	- Fixed wrong default value of Fl_Spinner in Fluid (STR #1991)
-
-	  Documentation
-
-	- Added documentation for event delivery (STR #1983)
-	- Added Fl_Scroll::bbox() documentation (STR #1893)
-	- Updated documentation for Fl_Input_
-	- Updated Copyright dates to 2010 (STR #2036)
-	- Updated mirror sites in documentation (STR #2220)
-	- Fixed documentation for Fl_Progress (STR #2209)
-	- Fixed documentation (added missing COMCTL32.LIB dependency)
-
-	  Other Improvements
-
-	- Added drag'n'drop support for Fl_Text_*
-	- Added visual feedback for button shortcuts (STR #2372)
-	- Added callback when double-clicking file in a file chooser
-	  (STR #2346)
-	- Added alternative Xft font names (STR #2215)
-	- Added mouse!=0 check in Fl_Glut_Window::handle (STR #2381)	
-	- Added indexing to Fl_Preferences
-	- Added OS X cursor control to Fl_Input (STR #2169)
-	- Added menu shortcut alignment for OS X
-	- Added drop box to UTF-8 test that will show the UTF-8 encoding
-	  for the first dropped character
-	- Added flexible gap size for text buffer (STR #2046)
-	- Added clarification to Fl_GL_Window mode function (STR #1945)
-	- Added alternative text input awareness on OS X 
-	- Improved handling of composed keys in OS X 10.5 and up
-	- Improved stability of fl_read_image (STR #2021)
-	- Much faster fl_read_image() for Windows (STR #2387).
-	- Improved support for faulty X11 clients (STR #2385)
-	- Integrated default menu into Demo test app	
-	- Replaced _WIN32 symbols that had come with UTF-8 and the
-	  new Fl_Table widget with WIN32
-	- Widgets now remove stale entries from the default callback
-	  queue when they are deleted (STR #2302)
-	- Managing all Widget flags in a single location now (STR #2161)
-	- File chooser preview now recognizes UTF-8 encoded 
-	  text files (STR #2218)
-	- Setting a default font for Xft (STR #2216)
-	- Restructured the unittest application
-	- Fl_Preferences.H now doesn't include windows.h any more
-	  (Windows only, STR #2173).
-	- Fl_Window::draw() now doesn't reset its x/y-coordinates to 0
-	  anymore before drawing itself and its children.
-	- Fl_Help_View handles HTML2 font color specification (STR #890)
-	- Widgets now remove themselves from their parent group (if any),
-	  when destroyed (STR #1894)
-	- Changed Fl_Group and Fl_Scroll to resize themselves before
-	  resizing their children (STR #2032)
-
-	  Bug Fixes
-
-	- Fixed potential crash in fl_xid() on Linux (STR #2635)
-	- Fixed keyboard navigation in fl_choice() (STR #2591)
-	- Fixed alpha blending under X11 when line data size != 0 (STR #2606)
-	- Fixed Fl_Tabs selection border drawing, if tabs are at the bottom
-	  of the widget (STR #2480)
-	- Fixed Compiling with mingw-w64 (STR #2308).
-	- Fixed crashes when detecting illegal UTF-8 sequences
-	  in Fl_Text_* widgets (STR #2348)
-	- Fixed Fl_Text_Display Tabulator calculations (STR #2450)
-	- Fixed file access code to use UTF-8 strings (STR #2440)
-	- Fixed ARM Unicode cross compilation issue (STR #2432)
-	- Fixed xclass support for Fl_Window (STR #2053)
-	- Fixed Caps Lock handling in X11/XIM (STR #2366)
-	- Fixed handling of missing fonts in Xft (STR #2355)
-	- Fixed OpenGL hide/show issue in OS X (STR #2260)
-	- Fixed File Chooser preview hang if a device was choosen
-	- Fixed blinking of selection when the mouse was dragged 
-	  outside of the Fl_Text_* widget
-	- Fixed Unicode support for Fl_Text_* widgets
-	- Fixed menu and shortcut handling (STR #2243)
-	- Fixed fltk-config to give --libs on one line (STR #2408)
-	- Fixed outside label redraw damage areas (STR #2436)
-	- Fixed compile errors when HAVE_LIBJPEG was not defined 
-	  (STR #2382)
-	- Fixed special handling for ISO back-tab keycode (STR #2369)
-	- Fixed static allocation in Fl_Tabs (STR #2370)
-	- Fixed Fl_Widget::measure_label() to const (STR #2406)
-	- Fixed unbalanced Windows OleInitialize/OleUnitialize calls
-	  when loading/unloading the FLTK dll (STR #2417)
-	- Fixed X11/XDBE double buffering (STR #2152, #2197)
-	- Fixed menu and tooltip window animation bug under X11 (compiz)
-	  by setting an appropriate window type (STR #2082)
-	- Fixed max. fd calculation, if USE_POLL is enabled (STR #2324)
-	- Fixed clipping for offscreen rendering (OSX, STR #2330)
-	- Fixed possibility of wrong flags() in Fl_Window::iconlabel()
-	  (STR #2161)
-	- Fixed Scrollbar events when max is less than min (STR #2283)
-	- Fixed crash in test/Editor when freeing buffer 
-	  too soon (STR #2294) 
-	- Fixed Fl_Preferences Cygwin wide character bug (STR #2164)
-	- Fixed sorting in Fl_Browser - last item would not 
-	  be sorted (STR #2300)
-	- Fixed window levels in OS X Cocoa (STR #2316)
-	- Fixed a buffer overflow in fl_utf8from_mb() (STR #2279)
-	- Fixed a Windows GDI leak when testing alpha blending capabilities
-	- Fixed crashes for recursive common dialogs (STR #1986, #2150)
-	- Fixed a name conflict with new (VS 2008 Express) winsock2.h
-	  versions and another conflict that produced compile errors
-	  with VS 2008 Express (STR #2301)
-	- Fixed all color related calls to Fl_Color type (STR #2208)
-	- Fixed Fl_Choice contrast with light-on-dark settings (STR #2219)
-	- Fixed X server "lock", if a modal dialog window is opened
-	  while a menu is active (STR #1986)
-	- Fixed Windows compile bug with "#define USE_COLORMAP 0"
-	  (STR #2241)
-	- Fixed glibc 2.10 compiler problems (Fedora 11 and others)
-	  with scandir() and strchr() (STR #2222)
-	- Fixed OpenGL shared context handling (STR #2135)
-	- Fixed gray-scale images with alpha channel (STR #2105)
-	- Fixed unexpected shortcut behavior for Win32 (STR #2199)
-	- Fixed fl_draw_image to obey the alpha channel (OS X only)
-	- Fix for multiple popups, when dragging and calling fl_alert()
-	  and friends from the callback (STR #2159)
-	- Fixed control key keycodes with modifiers on OS X
-	- Fixed bad system menu handling in OS X (STR #2153)
-	- Fixed File Input mouse pointer dragging (STR #2181)
-	- Fixed 'del' keycode on OS X
-	- Fixed OS X support for sending and receiving dnd data as UTF-8
-	- Fixed Copy/Paste operations with UTF-8, UTF-16 support and
-	  fltk1.1 compatibility. (STR #2104, 2121).
-	- Fixed fl_set_spot() for Windows (STR #2101)
-	- Fixed callback that would not be called when shortcut was used 
-	  with radio and toggle buttons in default FL_RELEASE mode.
-	- Fixed a problem with TrackMouseEvent() (Windows only) that would
-	  generate wrong FL_LEAVE events with subwindows. TrackMouseEvent
-	  is now enabled by default (it was disabled for GNU compilers).
-	  It can be disabled by defining NO_TRACK_MOUSE.
-	  Improved test/subwindow.cxx (STR #2079)
-	- Fixed menu position close to screen border (STR #2057)
-	- Fixed adding an idle handler during a draw() call (STR #1950)
-	- Fixed first modifier key event (STR #1952)
-	- Fixed Fl_Scroll inside Fl_Scroll (STR #265)
-
-	  Removed features
-
-	- Removed Watcom compiler support because it was introduced in
-	  1.1.6 as a partial solution and never completed.
-	- Removed an XForms compatibility "feature" that prevented the
-	  down array of Fl_Menu_Button from drawing (STR #2141).
-	- Removed support for gcc 2.x (or older)
-	- Removed redundant Fl_Group casts
-
-CHANGES IN FLTK 1.1.9
-
-	- Improved color contrast in secondary selection blocks
-	  of Fl_Text_Display (STR #1917)
-	- Fixed regression in callback handling (STR #1918)
-	- Fixed wrong relative path when absolute path has a 
-	  trailing slash in fl_filename_relative (STR #1920)
-	- Fixed multiple selection of files and directories in
-	  Fl_File_Chooser (STR #1913)
-	- Fixed MSWindows crash when selecting umlauts
-	  in Fl_Help_View (STR #1912)
-
-
-CHANGES IN FLTK 1.1.8
-
-	- Documentation fixes  (STR #1454, STR #1455, STR #1456,
-	  STR #1457, STR #1458, STR #1460, STR #1481, STR #1578,
-	  STR #1639, STR #1645, STR #1644, STR #1792, STR #1793,
-	  STR #1742, STR #1777, STR #1794, STR #1827, STR #1843,
-	  STR #1796, STR #1815, STR #1726, STR #1753, STR #1855,
-	  STR #1862, STR #1867, STR #1874, STR #1888)
-	- Fixed library path in Makefile (STR #1885)
-	- Fixed image read for partial regions on X11 
-	  (STR #1716)
-	- Fixed KDE/Gnome icon paths (STR #1795)
-	- Fixed Tab key to wrap around menu bars (STR #1877)
-	- Fixed possible timer leak in Scrollbar (STR #1880)
-	- Added documentation about the potential limitations
-	  of Fl::grab on newer operating systems (STR #1747)
-	- Fixed lockout when mixing popups and alerts
-	  (STR # 1869)
-	- Fixed recursion crash in event handling (STR #1873)
-	- Fixed missing return code in 'fltk-config' (STR #1875)
-	- Fixed inconsistencies with CHANGED flags (STR #1719)
-	- Fixed message sent to hidden widgets (STR #1849)
-	- Fixed width calculation in Fl_Help_View (STR #1868)
-	- Fixed offset bug in OS X pixmap code (STR #1856)
-	- Fixed potential buffer overrun 
-	  in Fl_Preferences (STR #1853)
-	- Fixed method attributes in consecutive class
-	  declarations in FLUID (STR #1741)
-	- FLUID checks for seperately declared callbacks to 
-	  avoid a bogus "extern" declaration (STR #1776)
-	- Added "protected" class memebrs in FLUID
-	- Double-clicking a widget in a FLUID layout will show 
-	  the item in the widget browser
-	- Fixed color highlighting in Text_Display
-	- Fixed 16 bit PNM image support (STR #1847)
-	- Fixed exposure event on zero size windows (STR #1824)
-	- Fixed overlay offset for OS X Quartz (STR #1729)
-	- gl_font() support for Xft+X11 (STR #1809)
-	- Fl_Gl_Window::mode() needed to hide and show the window
-	  when toggling stereo mode (STR #1846)
-	- Fl_Gl_Window::show() did not work reliably on Mac OS X
-	  (STR #1707)
-	- Added Fl_Group::clip_children() methods to support
-	  automatic clipping of child widget drawing (STR #1844)
-	- Fl_Browser_ and friends now support FL_WHEN_ENTER_KEY
-	  for both Enter/Return and double-clicks (STR #1818)
-	- Fl_Help_View did not release the images it used (STR
-	  #1817)
-	- Shared libraries would not build on 64-bit Linux
-	  systems with an existing non-PIC FLTK installation
-	  (STR #1791)
-	- Fl_Browser::hide() and Fl_Browser::show() did not
-	  correctly update the scrollbar (STR #1724)
-	- The configure script now shows a summry of the
-	  configuration results (STR #1810)
-	- "fltk-config --use-* --libs" did not list all of the
-	  dependent libraries (STR #1799)
-	- Hiding a nested window on WIN32 caused 100% CPU (STR #1748)
-	- Changing the window size in FLUID would not mark the 
-	  project as modified (STR #1751)
-	- Fixed fl_filename_isdir for "/"-path (STR #1761)
-	- Fixed Fl_Chart drawing (STR #1756)
-	- Fixed mapping of subwindows with unmapped parent
-	  windows (STR #1706)
-	- Fixed rendering of grayscale images with alpha
-	  channel (STR #1703)
-	- Fixed occasional incomplete refresh (STR #1681)
-	- Improved fl_down, fl_frame, added fl_box (STR #1678)
-	- Fixed selection of submenu items in 
-	  input_choice (STR #1676)
-	- Fixed calculation of stride for image scaling and
-	  color manipulation (STR #1673)
-	- Made -O3 the default optimization on Cygwin/Mingw since
-	  -Os currently creates bad code (STR #1656)
-	- OSF/Tru64 now uses 'install-sh' instead of 'install' to
-	  accomodate for a missing '-d' option (STR #1632)
-	- New option in Fluid project settings to translate all
-	  shortcut modifiers from FL_META or FL_CTRL to FL_COMMAND
-	- Made icon size fixed (50x50) in fl_message etc. (STR #1626)
-	- Fixed selection of first word in Fl_Help_View
-	- Fixed endless loop in Fl_Text_Display (STR #1655)
-	- Allowing shortcuts in Tabs (STR #1652)
-	- Fixed Makefile "make clean" (STR #1642,
-	  STR #1643, STR #1641)
-	- The sample RPM spec file now enables large file support
-	  and threading support (STR #1603)
-	- Changed minimum contrast between background and text to 
-	  99 and added more weight to the blue component to improve
-	  readability for certain color combinations (STR #1625)
-	- Fixed VCNet OpenGL project file (STR #1617)
-	- Fixed scrolling of clipped areas in MSWindows (STR
-	  #1601)
-	- Fixed clipping in OS X Quartz offscreen buffers (STR
-	  #1595)
-	- Now flush file chooser preferences after every change to
-	  avoid data loss (STR #1609)
-	- The Fl_File_Chooser constructor now saves and restores the
-	  current group (STR #1611)
-	- Added Fl::awake(fn*,void*) to set a handler for thread
-	  messages (STR #1536)
-	- Added "mute sound" option to Sudoku game.
-	- Updated the bundled zlib to v1.2.3.
-	- Updated the bundled libpng to v1.2.16.
-	- "make install" now uses the install command (or the
-	  included install-sh script) to copy files to the
-	  install directories, to ensure that permissions are
-	  correct.
-	- Fixed DLL generation via MingW/Cygwin (STR #1546)
-	- FLUID incorrectly opened the display when generating
-	  source code for Fl_Help_View widgets (STR #1318)
-	- Fl_Double_Window did not always show the scheme
-	  background image.
-	- Fixed first window behavior in OS X (STR #1548)
-	- Fixed calculation of character widths for OS X
-	  Quartz rendering (no STR)
-	- Fixed OS X mouse click handling (STR #1504)
-	- Added missing GLUT functions so that FLTK can be used
-	  as a fairly complete C++ replacement for the original
-	  GLUT library (STR #1522)
-	- Fl::awake() could block on X11 and OSX (STR #1537)
-	- Updated recursive mutex code to run on platforms other
-	  than Linux and to do a run-time check to determine
-	  whether they are supported by the kernel (STR #1575)
-	- WIN32 did check callbacks after the event processing instead of
-	  before as documented (STR #1535)
-	- Fl_File_Chooser now hides the window before doing a callback
-	  when the user clicks on the OK button (STR #1565)
-	- Fixed indentation of nested HTML elements (STR #1549)
-	- Made layout of Fl_Help_Dialog consistent with other
-	  help windows and web browsers.
-	- Improved GTK+ schemed round box (STR #1531)
-	- Fluid avoids writing unsupported combinations of the 
-	  "when()" flags (STR #1501)
-	- Fl_Browser_ would allow keyboard callbacks even though
-	  "when()" was set to "never" (STR #1501)
-	- Added automated little helpers to Sudoku 
-	- Added example code for Wizard with the
-	  Tabs demo (STR #1564)
-	- Optimized Fl_Tabs drawing for speed (STR #1520)
-	- OS X resource fork now obsolete (STR #1453)
-	- Added chapter 10 about multithreading (STR #1532, 
-	  1533)
-	- OS X system menu bar top level attribute support 
-	  improved (STR #1505)
-	- Fixed Quartz image drawing bug (STR #1438)
-	- Fixed Quartz fl_read_image
-	- Overlay drawing is now avoiding XOR mode (STR #1438) 
-	- Fixed Scroll crash in Fluid Live Mode (STR #1524) 
-	- Fixed mousewheel event propagation (STR #1521) 
-	- Fixed drawing issues of a tile in a scroll (STR #1507) 
-	- Fixed dismissing buttons in menu bars (STR #1494) 
-	- Making a child group visible in a Fl_Tabs or Fl_Wizard
-	  group now shows that tab or pane.
-	- Added fl_open_uri() function as proposed on
-	  fltk.development.
-	- Added Fl::has_check() which previously was prototyped
-	  and documented, but not implemented (STR #1542)
-	- Enabled Fl::add_check() on OS X (STR #1534)
-	- Documented tooltip inheritance (STR #1467)
-	- Better event mouse handling fixing detached menus and
-	  sticky tooltips (STR #1463, STR #449)
-	- Added Fl::scrollbar_size() methods that are used by all
-	  of the scrollbar-using widgets (STR #1500)
-	- fl_read_image() was broken on Intel-based Macs (STR
-	  #1490)
-	- Fl_Progress was using the wrong width to calculate 
-	  progress (STR #1492)
-	- Fl::x(), Fl::y(), Fl::w(), and Fl::h() did not report
-	  the desktop work area on X11 (STR #1482)
-	- Shortcut events could be sent to the wrong window (STR
-	  #1451)
-	- Fl_Spinner did not handle the arrow keys properly (STR
-	  #1476)
-	- Fl_File_Browser did not calculate the width of
-	  directory items correctly (STR #1469, STR #1470)
-	- Fl_Pack incorrectly started widgets at an offset of 1/2
-	  the spacing value.
-	- FLUID did not generate correct window class code if
-	  the class name was not a standard FLTK window class.
-	- FLUID incorrectly included <FL/Fl_classname.H> for
-	  widget classes that were not subclassed from a standard
-	  FLTK widget class.
-	- The demo master test program now supports scheme
-	  selection and all demos use it (STR #1459)
-	- fl_arc() and fl_pie() did not draw properly on WIN32
-	  when the start and end points were identical (STR
-	  #1461)
-	- Fl_Input and Fl_Text_Editor now hide the mouse pointer
-	  when typing into them (STR #1466)
-	- Implemented alpha blending for Quartz, WIN32, and X11
-	- Check buttons did not redraw properly with box() set to
-	  FL_NO_BOX (STR #1440)
-	- Added the Bluecurve-inspired scheme "gtk+".
-	- Updated documentation (STR #1420, STR #1421)
-	- Fixed font caching issue (STR #1415)
-	- Fixed crash in fl_file_chooser (STR #1410)
-	- Fixed Fluid hotspot bug (STR #1416)
-	- Fixed image copy code (STR #1412)
-	- Fixed latin-to-roman text conversion (STR #1411)
-	- Fixed Cygwin timeout for "select" calls (STR #1151)
-	- Improved Mac OS X subwindow handling (STR #1402)
-	- Fixed more inconsistencies between fl_draw and
-	  fl_measure (STR #1408)
-	- Fixed fl_measure which mistook a trailing '@@' for a
-	  symbol (STR #1406)
-	- Fixed GLUT behavior on window creation (STR #1403)
-	- Fixed OS X bug that would hide tooltips before they
-	  were shown (STR #1392)
-	- Fixed Fl_Tabs tooltip reappearing (STR #1324)
-	- Added a new demo game called "Block Attack!"
-	- Updated the Sudoku game to show a notice about Hard and
-	  Impossible puzzles having multiple solutions which are
-	  not a bug or error (STR #1361)
-	- Fixed filechooser to behave as documented when file
-	  pattern changes (STR #1359)
-	- Completed the global function index and added an
-	  alphabetical list of all methods (STR #1319)
-	- Avoiding problems with some platforms that don't 
-	  implement hypot() (STR #1366)
-	- Fixed floating point value formatting for Fl_Spinner
-	  (STR #1331)
-	- Fixed Fl_Positioner callback when released (STR #1387)
-	- Fixed WIN32 zero size window issue (STR #1387)
-	- Fixed Sudoku window positioning (STR #1398)
-	- Fluid Code Declarations can now handle C++ style
-	  comments (STR #1383)
-	- Fixed uninitialized data in OS X and WIN32 timeout
-	  functions (STR #1374).
-	- Fixed speed issues when measuring text on OS X with
-	  Quartz (STR #1386).
-	- Fixed focus issues on OS X (STR #1377)
-	- Optional precision argument when storing floats or 
-	  doubles in a Preferences file (STR #1381)
-	- Fixed callback not called when using arrow keys in
-	  Fl_Slider (STR #1333)
-	- Changing the shortcut of a widget in fluid now marks the
-	  document as dirty (STR #1382)
-	- Fl_Text_Editor now correctly handles middle mouse
-	  clicks (STR #1384)
-	- Added some GLUT4 functions (STR #1370)
-	- Added "context_changed()" function for OpenGL windows
-	  which allows efficient texture loading (STR #1372)
-	- Added missing "const" to GLUT call (STR #1371)
-	- Fixed stray FL_RELEASE events after clicking system
-	  areas on OS X (STR #1376)
-	- FLUID now only writes definitions of "o" and "w"
-	  variables as needed, reducing the number of "variable
-	  is shadowed" warnings from GCC.
-	- Added access to Xft font pointer (STR #1328)
-	- Fixed endianness in OS X mouse cursor graphics (STR
-	  #1348)
-	- Fixed crash on mixed use of keyboard and mouse for
-	  Fl_Menu_Button (STR #1356)
-	- Fixed Fl_Window::visible() and shown() for OS X
-	  (STR #1341)
-	- Fixed Fl_Window::copy_label() losing copy (STR #1332)
-	- Documentation fixes (STR #1336, STR #1329, STR #1339,
-	  STR #1340)
-	- Added support for floating point Fl_Spinner in the
-	  API, documentation, and Fluid (STR #1331)
-	- Repeat button now cancels timeout if it should get 
-	  deactivated during a callback (STR #1330)
-	- Added support for assigning Fl_Menu_Items to array 
-	  variables in Fluid (STR #1280)
-	- Added --with-archflags configure option to allow
-	  passing of specific architecture-selection options to
-	  the compiler and linker.
-	- Fixed WIN32 window stacking bug (STR #1296)
-	- Fixed wrong code generated by FLUID for Scrollbars (STR
-	  #1287)
-	- Loading a file would not update the Widget Properties
-	  dialog in FLUID (STR #1326)
-	- Fixed key compose sequences for shifted keys (STR
-	  #1194)
-	- Added text selection and copy to Fl_Help_View.
-	- Fixed position of popup menu titles (STR #1322)
-	- Showing any window will disable the current tooltip
-	  so it won't pop over menus (STR #1321)
-	- Updated documentation to reflect limitation of 
-	  Fl::delete_widget() (STR #1306)
-	- Fixed line wrapping in Fl_Text_Display (STR #1227)
-	- New function Fl::event_original_key() returns key code
-	  before NumLock handling.
-	- Many OS X Quartz fixes (STR #1310, etc.)
-	- Fixed shortcut and default focus for message dialogs
-	  (STR #1298)
-	- Fixed focus issues (STR #1286, STR #1289, STR #1296)
-	- Fixed window resizing in OS X (STR #1297)
-	- In FLUID, declarations starting with the keyword
-	  'typedef', 'class', or 'struct' are now treated
-	  correctly if inside a class (STR #1283)
-	- Tabs now show the correct tooltip (STR #1282)
-	- Included fltk.spec in configure.in (STR #1274)
-	- Fixed insufficiently invalidated cache 
-	  in Fl_Browser (STR #1265)
-	- Attempt to fix multi monitor issues (STR #1153)
-	- Fixed warnings when compiling w/Cygwin (STR #1152)
-	- Fixed missing reset of flag in FLUID (STR #1187)
-	- Fixed maximizing in OS X (STR #1221)
-	- Fixed 'make distclean' to remove binaries inside
-	  MacOS app packages (STR #1169)
-	- FLUID Code Viewer is now truly a viewer, not a text
-	  editor because edited text can not be saved.
-	- Fl_Spinner is now fully supported by FLUID (STR #1158)
-	- Fixed usage of deleted object after menu pulldown
-	  (STR #1162)
-	- Calling fl_font(0, 0) under Xft would access a NULL
-	  pointer (STR #1205)
-	- Setting a new value in Fl_Input_ wil now actually move
-	  cursor to the end of the input field as documented
-	  (STR #1161)
-	- FLUID crashed on WIN32 with international characters
-	  (STR #1176)
-	- Fl_Check_Browser did not allow the user to toggle the
-	  check boxes (STR #1232)
-	- Fl_Help_View crashed on WIN32 with international
-	  characters (STR #1228)
-	- Fl::run() no longer clears resources on WIN32 (STR
-	  #1231)
-	- Fl::add_timeout() leaked resources on OSX (STR #1233)
-	- Accented characters could not be entered on OSX (STR
-	  #1195)
-	- The caret key lookup was missing for OS X
-	- FLUID didn't handle loading .fl files with
-	  international characters properly with all compilers
-	  (STR #1150)
-	- Fl_Spinner's minimum() and maximum() "get" methods were
-	  misspelled (STR #1146)
-	- The largefile support changes in 1.1.7 broke binary
-	  compability for fl_filename_list(); you must now use
-	  "--enable-largefile" when configuring to get large file
-	  support, and the large file support definitions are
-	  added to the output of "fltk-config --cflags" (STR
-	  #1159)
-
-
-CHANGES IN FLTK 1.1.7
-
-	- Documentation fixes (STR #571, STR #648, STR #692, STR
-	  #730, STR #744, STR #745, STR #931, STR #942, STR #960,
-	  STR #969)
-	- Various menu widget fixes (STR #1140, STR #1143, STR
-	  #1144)
-	- The threads demo would display negative prime numbers
-	  on MacOS X; this appears to be a MacOS X bug, but we
-	  added a workaround to "fix" this (STR #1138)
-	- Fl::dnd() now sets the content type of the drag to
-	  "text/uri-list" when it sees the dragged text is
-	  composed of URIs.
-	- Fixed keyboard shortcut handling in FLUID and shortcut
-	  labeling in FLTK (STR #1129)
-	- Fixed include path for CMake build (STR #1123)
-	- Fixed unnecessary delay in WIN32 event handling 
-	  (STR #1104)
-	- Fixed handling of Ctrl-C in Fl_Text_Display (STR #1122)
-	- OS X Quartz version now draw a nice resize control (STR
-	  #1099)
-	- FLTK now enables large file support when available (STR
-	  #1087)
-	- Fl_Clock_Output depended on a time value that was the
-	  same as an unsigned long, which is incorrect for WIN64
-	  and VC++ 2005 (STR #1079)
-	- Fl_Text_Display::wrap_mode() would crash if no buffer
-	  was associated with the widget (STR #1069)
-	- Updated the default label and text colors of all widgets
-	  to use FL_FOREGROUND_COLOR instead of FL_BLACK (STR
-	  #1052)
-	- Fl::set_fonts() now works with Xft (STR #1012)
-	- Fl_Value_Input now uses the screen-absolute position
-	  instead of the window-relative position when dragging
-	  the value; this avoids some jumping conditions (STR
-	  #1037)
-	- Menus now pop up fully inside the screen if possible
-	  (STR #973)
-	- Fixed illegal access in Preferences (STR #1025)
-	- Fixed x-offset problem in Help_Widget (STR #998)
-	- Clipboard will persist if owner window is hidden (STR
-	  #1019)
-	- Fixed handling of Win32 Device Contexts (STR #1007)
-	- Fixed C++ style comments in C files (STR #997)
-	- Fixed signedness of scanf() argument (STR #996)
-	- Fixed cross-compiling problem (STR #995).
-	- FLUID now knows if a static callback is already
-	  declared in a class and won't declare it 'extern' (STR
-	  #776)
-	- Some actions in FLUID would not set the  "changed" flag
-	  (STR #984, STR #999)
-	- fl_filename_list now always appends a forward slash to
-	  directory names (STR #874)
-	- Multiline Input will update right if a space character is
-	  inserted in word wrap mode (STR #981)
-	- FLUID group labels redraw correctly (STR #959)
-	- FLUID now updates color of Fl_Tabs children (STR #979)
-	- FLUID now supports 'size_range()' (STR #851)
-	- FLUID selection boxes now synchronised (STR #964)
-	- fl_filename_list() now recognizes pathnames without
-	  trailing  slash as directions (STR #854)
-	- Fl_Text_Display now auto-scrolls in all 
-	  directions (STR #915)
-	- Borderless windows will not show in the taskbar anymore
-	  on X11 (STR #933)
-	- Fixed event_text() field on FL_DND_* event on 
-	  OS X and WIN32 (STR #968)
-	- The fltk-config utility now supports "--cc" and "--cxx"
-	  options to get the C and C++ compilers that were used
-	  to compile FLTK (STR #868)
-	- Fl_Valuator-derived widgets could show more digits than
-	  were necessary (STR #971)
-	- Fl_GIF_Image did not handle images with an incorrect
-	  number of data bits (STR #914)
-	- Fixed some plastic drawing artifacts (STR #906)
-	- Fl_Help_View now draws the box outside the scrollbars,
-	  like the other scrollable widgets (STR #871)
-	- The fltk-config script now handles invocation via a
-	  symlink (STR #869)
-	- Updated WIN32 cut/paste code to consistently handle DOS
-	  text (STR #961)
-	- Added shared library support for Cygwin and MingW (STR
-	  #893)
-	- Fl_File_Chooser did not implement the user_data()
-	  methods (STR #970)
-	- Compilation could fail if a previous installation of
-	  FLTK was in the same (non-standard) directory as an
-	  image library (STR #926)
-	- Fixed OSX compilation problems with non-HFS filesystems
-	  (STR #972)
-	- Problems with CMake on MinGW have been solved, thanks
-	  to Mr. "fltk.x0", who submitted the patch. (STR #863)
-	- Fixed memory leak in Fl_Check_Browser reported by
-	  "miguel2i". (STR #967)
-	- Fl_File_Input could draw in the wrong window (STR #958)
-	- WIN32: Internal WM_PAINT message now ignored (STR #831)
-	- Added Windows support for Fl_Window::xclass() (STR #848)
-	- Floating point input field allows characters from
-	  current locale (STR #903)
-	- Fixed integration of Fl_Input_Choice into FLUID (STR
-	  #879)
-	- New windows touching the right screen border would be 
-	  positioned all the way to the left (STR #898)
-	- Made pie drawing size for WIN32 and OS X the same as
-	  X11 (STR #905)
-	- Fixed OS X issue with OpenGL windows inside of Tabs
-	  (STR #602)
-	- FLUID Code Editor would occasionally not draw the last
-	  character in the buffer (STR #798)
-	- FLUID Declaration private flag fixed (STR #799)
-	- FLUID overlay now shows a seperate bounding box of
-	  selected items with correct handles and a dotted
-	  boundig box for all  labels (STR #790)
-	- Fixed left overhang of large chracters in Fl_Input_
-	  (STR #941)
-	- Fixed button resizing in File Chooser (STR #884)
-	- Fixed FLUID redraw issue (STR #912)
-	- Added 32bit BMP Image file format support (STR #918)
-	- Value Sliders would not receive focus when clicked on
-	  (STR #911)
-	- Added redraw of some widgets to show focus change (STR
-	  #910)
-	- Fl::set_font would not clear 'pretty' name (STR #902)
-	- Fixed unescaped '@' in fonts demo (STR #867)
-	- FLUID should not open the Display connection anymore if
-	  creating code only (STR #904)
-	- Improved hidden copy / ctor implementation (STR #860)
-	- Increased matrix stack depth and added over/underflow
-	  error (STR #924)
-	- Reverted Mac Carbon Clipping simplification that broke
-	  subwindow clipping (STR #908, SVN r4386)
-	- Fixed bitmap scaling code
-	- Fixed tiny memory leak (STR #878)
-	- Fixed hang on corrupt jpeg (STR #915)
-	- Fixed static allocation of font buffer in demo (STR #909)
-	- Added symbols 'refresh', 'reload', 'undo', and 'redo'.
-	- Fixed focus loss on Fl_Window:resize()
-	- Fl::delete_widget would hang fl_wait after deleting the
-	  window (STR #679)
-	- Fl::paste would sometimes not recoginze external 
-	  changes of the clipboard (STR #722)
-	- Clipping fixes for OSX
-	- Removed attempt to find items via 
-	  Fl_Menu_::find_item() in linked submenus
-	- FLUID interactive window resizing fixes (STR #873, 791)
-	- FLUID panel resize and alignment fixes (STR #891)
-	- Fl_Window::show(argc, argv) now sets the scheme before
-	  showing the window; this should eliminate any
-	  flickering between the standard and plastic schemes on
-	  startup (STR #886)
-	- Selected tabs are now drawn slightly larger than
-	  unselected tabs so they stand out more (STR #882)
-	- Round Plastic boxes now draw round (STR #841)
-	- FL_PLASTIC_DOWN_BOX drew with artifacts (STR #852)
-	- Changed initializations on WIN32 (STR #862)
-	- Fl_Preferences::getUserdataPath() didn't work for
-	  sub-groups (STR #872)
-	- Fixed some redraw issues on Windows XP.
-	- FLUID didn't set the initial size of widgets properly
-	  (STR #850)
-	- Fl_Tabs would steal focus away from its children on a
-	  window focus change (STR #870)
-	- filename_relative() now converts the current directory
-	  to forward slashes as needed on WIN32 (STR #816)
-	- Fl_File_Chooser::value() and ::directory() now handle
-	  paths with backslashes on WIN32 (STR #811)
-	- Added the standard rgb.txt file from X11 to the test
-	  directory, allowing all platforms to try the colbrowser
-	  demo (STR #843)
-	- Resizing of OpenGL subwindows was broken on OSX (STR #804)
-	- The fltk-config script now supports running from a
-	  source directory (STR #840)
-	- Fl_Browser_ didn't update the position properly when an
-	  item was deleted (STR #839)
-	- fl_contrast() now compares the luminosity of each color
-	  (STR #837)
-	- Fl_Input_ crashed on some platforms when wrapping
-	  international text characters (STR #836)
-	- Fixed some BMP images loading bugs (STR #825)
-	- Fl_File_Chooser now returns directory names with a
-	  trailing slash to avoid problems with relative
-	  filenames (STR #819)
-	- Fl_Help_View now supports the FONT and U elements (STR
-	  #815)
-	- OpenGL windows that were completely off-screen caused
-	  problems with some graphics cards on WIN32 (STR #831)
-	- Multiple screen support didn't work on Windows NT and
-	  95 (STR #821)
-	- Fl_Scrollbar didn't compute the correct knob size when
-	  using the "nice" types (STR #845)
-	- fl_draw() would segfault on WIN32 if no font was set;
-	  it now uses the default font (STR #828)
-	- Fl_Browser_ was calling the callback multiple times for
-	  a single selection change with FL_WHEN_CHANGED (STR
-	  #834)
-	- Added "filenew", "fileopen", "filesave", "filesaveas",
-	  and "fileprint" symbols with standard toolbar
-	  symbology.
-	- Updated Fl_Tabs to check the contrast of the label
-	  color against the tab background, and to highlight the
-	  top 5 lines of the tab pane with the selection color so
-	  that selected tabs stand out more.
-	- The example programs can now compile separate from the
-	  FLTK source distribution (STR #809)
-	- The example programs are now installed with the
-	  documentation (STR #809)
-	- Fixed the drawing of the Fl_Browser_ selection box (STR
-	  #786)
-	- Dropped Codewarrier project files and support.
-	- The FLTK string functions are now compiled in on all
-	  systems (STR #774)
-	- Fixed symbol demo label bug (STR #777)
-	- Fixed position of menu titles (STR #795)
-	- Added missing Fl_Window::copy_label() method.
-	- Fixed wrong tooltip in FLUID (STR #784)
-	- Added zlib path to FLUID (STR #783)
-	- Menus and other pop-up windows now obey screen
-	  boundaries on multi-screen displays (STR #781)
-	- Fl_Chart would draw outside its bounding box (STR #780)
-	- Added Fl::screen_count() and Fl::screen_xywh() APIs to
-	  support multi-screen displays.
-	- FLUID now supports direct creation of widget classes.
-	- Fl_File_Chooser now correctly handles multiple
-	  selections that are a mix of files and directories.
-	- Fl_File_Chooser no longer resets the type() when
-	  choosing a single file, and it now works when selecting
-	  multiple directories (STR #747)
-	- Fl_File_Icon::load_system_icons() now only loads 16x16
-	  and 32x32 icon images to improve startup performance.
-	- Pressing Enter in the file chooser when selecting a
-	  directory will choose that directory if it is currently
-	  shown (STR #746)
-	- Added a fl_file_chooser_ok_label() function to set the
-	  "OK" button label for the fl_file_chooser() and
-	  fl_dir_chooser() functions.
-	- Added Fl_File_Chooser::ok_label() methods to set the
-	  "OK" button label.
-	- The fl_ask() function is now deprecated since it does
-	  not conform to the FLTK Human Interface Guidelines.
-	- The Fl_File_Chooser window now properly resizes its
-	  controls (STR #766)
-	- The Fl_Help_Dialog window now properly resizes its
-	  controls (STR #768)
-	- The Fl_File_Chooser favorites window is now resizable
-	  (STR #770)
-	- Now provide FL_PLASTIC_ROUND_UP/DOWN_BOX box types
-	  which are used by the plastic scheme.
-	- FLUID windows that are resized through the widget panel
-	  now remain resizable by the window manager.
-	- Increased the size of the background image used by
-	  the plastic scheme to reduce the CPU load of redraws
-	  (STR #769)
-	- Fixed a syntax highlighting bug in the editor demo.
-	- Fl_Progress now contrasts the label color with the bar
-	  color, so labels will be readable at all times.
-	- fl_read_image() didn't use the right red, green, and
-	  blue masks on XFree86.
-	- Fixed Quickdraw drawing of 3 and 4 sided polygons (STR
-	  #765)
-	- Fixed fl_message() code so that it does not get
-	  accidentaly addded to the current group (STR #253)
-	- FLUID now highlights code in the widget callback and
-	  code editors.
-	- FLUID now supports printing of windows.
-	- Fixed inactive drawing of border, embossed, and
-	  engraved box types.
-	- Added Fl_Spinner widget (another combination of
-	  existing widgets in a header file)
-	- FLUID now provides support for UI templates.
-	- fl_not_clipped() incorrectly used the current window
-	  dimensions for gross clipping, which interfered with
-	  off-screen rendering.
-	- Fl_Window::draw() and Fl_Window::iconlabel() could leak
-	  memory if copy_label() was used on the window.
-	- fl_shortcut_label() now shows letter shortcuts in
-	  uppercase, e.g. "Ctrl+N" instead of "Ctrl+n" to be
-	  consistent with other toolkits.
-	- FLUID now provides unlimited undo/redo support.
-	- FLUID now provides an option to choose which scheme
-	  (default, none, plastic) to display.
-	- Fixed scheme background issue with windows in FLUID.
-	- In FLUID, new widgets are now created with the ideal
-	  size by default, and menu bars are positioned to use
-	  the entire width of the window.
-	- Added Layout/Widget Size submenu to select default
-	  label and text size (Tiny, Small, and Normal).
-	- Added Edit/Duplicate command to FLUID to duplicate the
-	  current selection.
-	- FLUID now tracks the current state of the widget bin
-	  and overlays.
-	- Now fill the widget image paths with relative
-	  filenames.
-	- Fixed frame drawing of Fl_Text_Display (STR #762)
-	- Fl_Clock_Output::value() did not return the previously
-	  set value (STR #748)
-	- Added comment type to FLUID. This is useful for
-	  generating copyright notices in the source and header
-	  files.
-	- Fl_Valuator would not format text output with decimal 
-	  point when the step value was fractional, but above 1.
-	- fl_filename_relative() didn't compare drive letters in
-	  a case-insensitive way (STR #741)
-	- Fixed menu item width calculations with symbols (STR
-	  #740)
-	- The keyboard shortcut handling code did not handle
-	  8-bit characters properly (STR #731)
-	- Fl_JPEG_Image could still crash an app with a corrupt
-	  JPEG file (STR #739)
-	- Using the layout alignment controls on a menu widget
-	  would cause FLUID to crash (STR #742)
-	- Added QNX bug workaround for menu handling (STR #704)
-	- Added Greg Ercolano's simple Fl_Input_Choice widget
-	  which is a combination of the Fl_Input and
-	  Fl_Menu_Button widgets (STR #650)
-	- Fl_Multiline_Input now scrolls the full height of the
-	  widget instead of 5 lines when the user presses PageUp
-	  or PageDown (STR #727)
-	- CMake build fixes (STR #724)
-	- Fl_Browser::swap() didn't handle redraws properly when
-	  the swapped lines had different heights (STR #729)
-	- FL_MOUSEWHEEL events are now sent first to the widget
-	  under the mouse pointer and then to the first widget
-	  which accepts them. This is similar to the way
-	  shortcut events are handled and is consistent with the
-	  way the mouse wheel is handled by other toolkits.
-	- Fl::wait() could block on WIN32 if the window was
-	  deleted via Fl::delete_widget() (STR #679)
-	- Fl_Preferences::RootNode did not find the user's home
-	  directory on some non-US versions of Windows (STR
-	  #720)
-	- Fl_Window::hide() didn't delete the current clipping
-	  region on WIN32, causing a GDI resource leak in some
-	  situations (STR #723)
-	- Removed a few warnings when compiling on OS X
-	- Fl_Menu now draws the arrow more like other toolkits
-	  and 2.0 (STR #651)
-	- Fixed a VC++ compiler error in Fl_JPEG_Image.cxx (STR
-	  #676)
-	- FL_SHADOW_BOX/FRAME drew outside of the bounding box
-	  (STR #694)
-	- Fl_Widget::copy_label(NULL) didn't work (STR #707)
-	- Fl_Choice now allows click selection like
-	  Fl_Menu_Button and Fl_Menubar (STR #706)
-	- Updated cmake support (STR #645)
-	- Fl_Check_Browser didn't draw properly when inactive
-	  (STR #681)
-	- Removed some redundant code in Fl_Group::handle() (STR
-	  #669)
-	- The file chooser didn't always deactivate the OK
-	  button when necessary (STR #653)
-	- Image drawing on OSX changed the current drawing
-	  colors (STR #662)
-	- Fixed some compiler errors on WIN32 (STR #647, STR
-	  #726)
-	- FLUID didn't update the widget panel X/Y/W/H values
-	  when moving the selected window (STR #701)
-	- FLUID didn't use the label type constant names for
-	  menu items, causing them to be drawn using the normal
-	  label type (STR #668)
-	- Fl_File_Chooser was slow with large directories (STR
-	  #654)
-	- FLUID didn't add xclass() calls to windows (STR #718)
-	- The X11 DND code did not correctly select a text
-	  format for incoming data (STR #711)
-	- Fixes to Fl_JPEG_Image error handler.
-	- Fl_Menu::popup() and ::pulldown() would crash an
-	  application if a callback created widgets before they
-	  returned (STR #685)
-	- Fl_Double_Window would cause a full redraw, even if
-	  only small parts of the UI were changed on Mac OS X.
-	- Fl_JPEG_Image did not correctly handle errors reported
-	  by the JPEG library (STR #652)
-	- Fl_Menu now draws sub-menu arrows like other toolkits
-	  and FLTK 2.0 (STR #651)
-	- Fixed a compiler warning in Fl_Window.H (STR #641)
-	- Tooltips disabled shortcut processing (STR #643)
-	- Fl::event_number() didn't always match the value sent
-	  to the handle() method (STR #634)
-	- Fl_Shared_Image::reload() didn't set the image_
-	  pointer properly in all cases (STR #632)
-	- Fl_Help_View::topline() incorrectly set the changed()
-	  flag (STR #631)
-	- Fl_Choice::value() now supports NULL or -1 to deselect
-	  the current item (STR #637)
-	- More VC++ 6 project file fixes (STR #638)
-	- Added missing Watcom makefile in the test directory
-	  (STR #636)
-	- Fl_Text_Display::word_left would hang if the cursor
-	  was at position 0 (STR #635)
-
-
-CHANGES IN FLTK 1.1.6
-
-	- Documentation updates (STR #552, STR #608)
-	- Added the 2.0 Fl_Widget::copy_label() method to
-	  allow FLTK 1.x applications to have their label
-	  strings managed by FLTK (STR #630)
-	- Added Fl::delete_widget() method to safely delete
-	  widgets in callback methods (STR #629)
-	- Fl_Widget::damage(uchar,int,int,int,int) didn't clip
-	  the bounding box properly (STR #626)
-	- Windows could appear on the wrong screen on OSX (STR
-	  #628)
-	- Fl_Double_Window produced an error on resize with X11
-	- FLUID didn't display menu items using images properly
-	  (STR #564)
-	- Fl_Sys_Menu_Bar didn't compile on case-sensitive
-	  file-systems (STR #622)
-	- FLUID didn't handle default function parameters
-	  properly (STR #579)
-	- Moving or resizing widgets in FLUID didn't always
-	  update the widget panel (STR #600)
-	- FLTK windows could appear off-screen on X11 (STR #586)
-	- The configure script did not support
-	  --disable-localfoo to completely disable image file
-	  support (STR #582)
-	- The Visual C++ 6.0 project files still listed the old
-	  JPEG, PNG, and ZLIB library names (STR #577)
-	- Fixed the scandir() conditional code for HP-UX 11i
-	  (STR #585)
-	- Fl_Text_Display didn't support CTRL/CMD-A/C (STR #601)
-	- Watcom fixes (STR #581, STR #584, STR #594, STR #595,
-	  STR #623, STR #627)
-	- Fixed library include order when building DSOs on
-	  MacOS X (STR #596)
-	- fl_xid() could cause a WIN32 application to crash (STR
-	  #560, STR #576, STR #618)
-	- Fl_Browser::remove_() removed the item from the list
-	  before computing the item height, which caused
-	  problems with some programs (STR #613)
-
-
-CHANGES IN FLTK 1.1.5
-
-	- Documentation updates (STR #568, STR #570)
-	- Shortcuts were incorrectly underlined in multi-line
-	  labels (STR #566)
-	- More CMake updates (STR #499)
-	- The Watcom C++ compiler needed a small change (STR
-	  #567)
-	- Added DESTDIR support and now remove all man pages for
-	  the "uninstall" target (STR #545)
-	- Fix PNG drawing on buggy WIN32 graphics cards (STR
-	  #548)
-	- The configure script didn't propagate the CPPFLAGS
-	  environment variable (STR #549)
-	- The numpad keys didn't work properly on WIN32 (STR
-	  #502)
-	- fl_input() and friends now set the input focus to the
-	  text field when the dialog is shown (STR #553)
-	- Fixed background color mixup when drawing Fl_Choice
-	  menus (STR #544)
-	- Fixed MingW makefiles (STR #550)
-	- More VC++ project file tweaking (STR #559)
-	- Fl_PNG_Image didn't use the png_set_trns_to_alpha
-	  function when available (STR #547)
-	- The FL_UNFOCUS event wasn't always sent when switching
-	  tabs (STR #558)
-
-
-CHANGES IN FLTK 1.1.5rc3
-
-	- Documentation updates (STR #505, STR #513)
-	- Updated PNG library source to 1.2.7.
-	- Updated ZLIB library source to 1.2.1.
-	- Fixed VC++ project file problems (STR #476, STR #478,
-	  STR #520, STR #527, STR #537)
-	- Now look for 8 bits of alpha when the developer has
-	  requested FL_RGB8 (STR #541)
-	- The last line in an Fl_Help_View widget was not
-	  aligned properly (STR #536)
-	- The "search" symbol looked like a Q (STR #536)
-	- Changed Fl_Help_View::get_color() to use a lookup
-	  table to avoid serious Borland C++ 5.5 compiler bugs
-	  (STR #533)
-	- Fixed Watcom compiler warnings with FL/Fl_Widget.H
-	  (STR #540)
-	- The image class copy() methods did not always make a
-	  separate copy of the image data (STR #539)
-	- Fixed an edge case in fl_old_shortcut() that could
-	  cause it to read beyond then end of the shortcut
-	  string (used for XForms named shortcuts)
-	- Added (unsupported) CMake files (STR #499)
-	- Tooltips would not reappear on the same widget, and
-	  the initial tooltip delay was not used after a tooltip
-	  was shown (STR #465)
-	- Fixed a compile problem with the Linux 2.6 threading
-	  support (STR #483)
-	- Fixed problems with 2-byte Xpm files on 64-bit
-	  platforms (STR #525)
-	- FLTK didn't handle the ReparentNotify event on X11
-	  (STR #524)
-	- The old source file "fl_set_gray.cxx" is not needed
-	  (STR #516)
-	- Fl_Text_Display still called delete[] instead of
-	  free() in one place (STR #503)
-	- The symbol test program did not handle the @+ symbol
-	  properly (STR #490)
-	- Fl_File_Chooser didn't correctly call isprint() and
-	  isspace() when checking to see if the current file was
-	  text that can be previewed (STR #517)
-	- FLUID didn't compile with Borland C++ due to a
-	  compiler bug (STR #496)
-	- Fl_Positioner did not handle reversed min and max
-	  values (STR #510)
-	- fl_descent(), fl_height(), and fl_width() would crash
-	  a program if you didn't call fl_font() first; they now
-	  return -1 if no font is set (STR #500)
-	- Added test/unittests to verify pixel drawing and 
-	  alignment across platforms
-	- Fl_Menu_::find_item() didn't determine the menu path
-	  properly (STR #481)
-	- The build system now installs image library header
-	  files in FL/images/filename.h so that FLTK programs
-	  will use the same header files as the FLTK image
-	  libraries.
-	- The build system now creates image libraries named
-	  "libfltk_name.a" instead of "libname.a" to avoid
-	  clobbering an existing installed library (STR #480)
-
-
-CHANGES IN FLTK 1.1.5rc2
-
-	- Documentation updates (STR #365, STR #399, STR #407,
-	  STR #412, STR #414, STR #452, STR #462)
-	- Fl_Text_Display did not handle drawing of overlapping
-	  text (italic next to plain, etc.) properly (STR #381)
-	- All of the core widgets now consistently set changed()
-	  before calling the callback function for a change in
-	  value; this allows programs to check the changed()
-	  state in a callback to see why they are being called
-	  (STR #475)
-	- Fl_File_Chooser did not handle some cases for filename
-	  completion (STR #376)
-	- Fl_Help_View didn't properly compute the default
-	  maximum width of the page properly, resulting in
-	  non-wrapped text in table cells (STR #464)
-	- Fl_Text_Editor no longer tries to emulate the Emacs
-	  CTRL-A shortcut to move to the first column, since
-	  there is a key for that and the widget does not
-	  emulate any other Emacs keys (STR #421)
-	- Fl_File_Chooser always disabled the OK button when the
-	  user pressed DELETE or BACKSPACE (STR #397)
-	- Added Fl_Browser::swap() methods (STR #459)
-	- Fl_Counter didn't use a thin down box for the text
-	  field if the box type was set to FL_THIN_UP_BOX (STR
-	  #467)
-	- Fl_Help_View now resets the scrollbars if they go
-	  outside the current view (STR #464)
-	- fl_dir_chooser() did not show the previous selection
-	  as documented (STR #443)
-	- Fl_Text_Display used delete[] instead of free() in
-	  some places (STR #466)
-	- FLTK now includes copies of the PNG, JPEG, and ZLIB
-	  libraries for platforms that do not have them (STR
-	  #441)
-	- The fltk-config script did not include the
-	  "-mno-cygwin" option under CygWin (STR #434)
-	- Fl_Help_View::find() did not check for a NULL value
-	  (STR #442)
-	- Added search symbol to the search field of
-	  Fl_Help_Dialog (STR #417)
-	- Added two new symbols, @search and @FLTK, which can be
-	  used in labels.
-	- MacOS X: fixed NumLock mixup, added support for
-	  FL_Menu and FL_Delete keys on external (PC) keyboards
-	  (STR #445)
-	- Fl_File_Icon::draw() did not support drawing of complex
-	  polygons in icon descriptions (STR #474)
-	- The configure script now offers options for JPEG, PNG,
-	  and ZLIB libraries (STR #416)
-	- The first menu item in a list would not go invisible 
-	  (STR #406)
-	- Fl_Text_Buffer::replace() now range checks its input
-	  (STR #385)
-	- FLTK now builds with the current release of MinGW (STR
-	  #325, STR #401, STR #402)
-	- FLTK now honors the numlock key state (STR #369)
-	- The Fl_Text_Display widget did not redraw selections
-	  when focus changed (STR #390)
-	- The plastic background image is now less contrasty
-	  (STR #394)
-	- Fl_Scroll now uses a full redraw when the scheme is
-	  set to plastic and the box type is a frame (STR #205)
-	- Fl_Window::resize() did not work properly with KDE 3.2
-	  (STR #356)
-	- FLTK didn't delete font bitmaps when the last OpenGL
-	  window was deleted, preventing future text from
-	  displaying (STR #310)
-	- FLUID didn't include a full initialization record for
-	  the trailing NULL menu items (STR #375)
-	- Fl_Browser::item_width() did not properly handle
-	  format modifiers (STR #372)
-	- Fl_Browser::item_height() did not handle columns
-	  properly (STR #371)
-	- Fl_Gl_Window's on WIN32 now prefer accelerated pixel
-	  formats over generic formats (STR #382)
-	- Fl_Window::resize() did not work on some systems if
-	  the window was not shown (STR #373)
-	- FLUID did not write the user_data type if the
-	  user_data field was empty (STR #374)
-	- The value(const Fl_Menu_Item*) method was not
-	  implemented for Fl_Choice (STR #366)
-        - Fl_Pack didn't draw child widget labels the same way
-          as Fl_Group, causing display problems (STR #360)
-        - fl_read_image() didn't work when reading from an
-          offscreen buffer with some X11 servers (STR #364)
-
-
-CHANGES IN FLTK 1.1.5rc1
-
-	- Documentation updates (STR #186, STR #245, STR #250,
-	  STR #277, STR #281, STR #328, STR #338)
-	- fl_scroll() did not handle scrolling from off-screen on
-	  WIN32 (STR #315)
-	- Fl_File_Chooser did not allow manual entry of a drive
-	  letter (STR #339)
-	- Fl_Menu now uses the boxtype to redraw the menu
-	  background (STR #204)
-	- Fl_Scroll now shows the background image when a framed
-	  box type is used and the Fl_Scroll is a direct
-	  decendent of a window (STR #205)
-	- Added a new_directory_tooltip string pointer to allow
-	  localization of the file chooser's new directory
-	  button (STR #340)
-	- Added Fl_Menu_::find_item() method (STR #316)
-	- The Fl_Widget copy operator definitions were not
-	  conditionally compiled properly (STR #329)
-	- FLUID's Layout functionality did not move child
-	  widgets when laying out group widgets (STR #319)
-	- FLUID's Layout->Center In Group functionality did not
-	  properly handle widgets that were children of a
-	  Fl_Window widget (STR #318)
-	- The Fl_Text_Display destructor did not remove the
-	  predelete callback associated with the current buffer
-	  (STR #332)
-	- Fixed several bugs in the MacOS X Fl::add_fd()
-	  handling (STR #333, STR #337)
-	- The Fl_Text_Display widget did not display selections
-	  set by the application (STR #322)
-	- FLUID crashed if you did layout with a window widget
-	  (STR #317)
-	- Fl_Scroll::clear() didn't remove the child widget from
-	  the Fl_Scroll widget (STR #327)
-	- Fl_Value_Slider::draw_bg() didn't always apply the
-	  clipping rectangle (STR #235)
-	- fl_filename_relative() returned the wrong string if
-	  the absolute pathname was equal to the current working
-	  directory (STR #224)
-	- Fl_Help_Dialog didn't correctly restore the scroll
-	  position when going forward/back in the link history
-	  if the file changed (STR #218)
-	- glutGetModifiers() did not mask off extra state bits,
-	  confusing some GLUT-based applications (STR #213)
-	- Fixed mouse capture problems on MacOS X (STR #209, STR
-	  #229)
-	- Fl_Sys_Menu_Bar is now built into the library for
-	  MacOS X (STR #229)
-	- Fl_Menu_ now provides item_pathname() methods to get
-	  the "pathname" of a menu item, e.g. "File/Quit" (STR
-	  #283)
-	- Fl_Text_Display now provides cursor_color() methods to
-	  get and set the cursor color (STR #271)
-	- Fl_Scroll didn't honor FL_NO_BOX (STR #305)
-	- FLUID declaration blocks didn't support public/private
-	  definitions (STR #301)
-	- Fl_Preferences incorrectly created the preferences
-	  directory before necessary (STR #247)
-	- The WIN32 project files still defined the (obsolete)
-	  FL_STATIC constant (STR #279)
-	- Fl_Text_Display::buffer() did not support NULL values,
-	  making it impossible to clean up text buffers from a
-	  subclass (STR #295)
-	- Fl_Text_Display did not support a NULL
-	  unfinishedStyleCB function (STR #241)
-	- Fl::background2() incorrectly marked the foreground
-	  color as initialized (STR #255)
-	- Fixed the X11 CTRL + "-" detection code to properly
-	  track the state of the CTRL key (STR #264)
-	- Fl_File_Icon::load_system_icons() didn't support KDE
-	  3.x (STR #299)
-	- WIN32's scandir() emulation did not allocate enough
-	  memory for directory names (STR #263)
-	- Fl::compose() did not handle special keys like
-	  backspace properly (STR #293)
-	- Fl_Choice did not clip its text when drawing using the
-	  plastic scheme (STR #287)
-	- Fl_Group incorrectly mapped the emacs CTRL keys to
-	  keyboard navigation (STR #228)
-	- Fl_File_Browser::load() didn't handle a NULL directory
-	  name (STR #266)
-	- 64-bit library fixes (STR #261)
-	- The Fl_Valuator::format() function did not limit the
-	  size of the number buffer (STR #268)
-	- The keypad Enter key works as the normal Enter/Return
-	  key in common widgets (STR #191)
-	- Fixed some OS/2-specific build problems (STR #185, STR
-	  #197)
-	- Calling Fl_Text_Display::buffer() with the same buffer
-	  would cause an application to lockup (STR #196)
-	- Some of the widgets could crash an application if the
-	  cursor was changed after a window was deleted (STR
-	  #181)
-	- The Fl_Gl_Window WIN32 pixel format code did not
-	  choose the pixel format with the largest depth buffer
-	  (STR #175)
-	- The configure script didn't leave space between the
-	  CFLAGS/CXXFLAGS and X_CFLAGS variables (STR #174)
-	- The Fl_JPEG_Image and Fl_PNG_Image classes did not
-	  trap errors from the corresponding image libraries
-	  (STR #168)
-	- Added "--with-links" configure option to control
-	  whether symlinks are created for the FLTK header files
-	  (STR #164)
-	- Added new hoverdelay() to Fl_Tooltip to control how
-	  quickly recent tooltips appear (STR #126)
-	- FLUID now sets the size range when a window is shown.
-	  This seems to be necessary with some window managers
-	  (STR #166)
-
-
-CHANGES IN FLTK 1.1.4
-
-	- The fl_read_image() function was not implemented on
-	  OSX (STR #161)
-	- VC++ 7.1 didn't like how the copy operators were
-	  disabled for the Fl_Widget class; now include inline
-	  code which will never be used but makes VC++ happy
-	  (STR #156)
-	- Fixed an IRIX compile problem caused by a missing
-	  #include (STR #157)
-	- FLUID didn't write color/selection_color() calls using
-	  the symbolic names when possible, nor did it cast
-	  integer colors to Fl_Color (STR #146)
-	- Fl_File_Chooser was very close for multiple file
-	  selection in large directories (STR #140)
-	- Fl_Text_Display/Editor did not disable the current
-	  selection when focus was shifted to another widget
-	  (STR #131)
-	- Fl_Choice didn't use the normal focus box when the
-	  plastic scheme was in use (STR #129)
-	- Fl_Text_Editor didn't use selection_color()
-	  consistently (STR #130)
-	- The fltk_forms, fltk_gl, and fltk_images DSO's and
-	  HP-UX shared libraries are now linked against the fltk
-	  shared library to provide complete dependency
-	  resolution (STR #118)
-	- The configure.in file did not work with autoconf 2.57.
-	- FLUID didn't redraw widgets when changing the X, Y, W,
-	  or H values in the widget panel (STR #120)
-	- Fl_Window::show(argc, argv) wasn't calling
-	  Fl::get_system_colors() as documented (STR #119)
-	- DSO (shared library) building wasn't quite right for
-	  some platforms (STR #118)
-	- OSX: some changes to make ProjectBuilder compiles
-	  possible.
-	- OSX: FLTK would not know where a window was positioned
-	  by the OS. As a result, popup menus could open at 
-	  wrong positions.
-
-
-CHANGES IN FLTK 1.1.4rc2
-
-	- Fl_Window::show(argc,argv) incorrectly opened the
-	  display prior to parsing the arguments; this prevented
-	  the "-display foo" option from working (STR #111)
-	- Images were not clipped properly on MacOS X (STR #114)
-	- Fl::reload_scheme() and Fl::scheme("foo") incorrectly
-	  called Fl::get_system_colors().  This prevented an
-	  application from setting its own color preferences
-	  (STR #115)
-	- The 'Enter' key event on OS X would not set
-	  Fl::e_text.
-	- Changed behaviour of FLUID to always paste into
-	  a selected group (STR #88)
-	- Menuitem now changes font, even if fontsize
-	  is not set (STR #110)
-	- Swapped shortcut labels in OS X (STR #86)
-	- Non-square Fl_Dial would calculate angle from user
-	  input wrong (STR #101)
-	- Updated documentatiopn of fl_draw (STR #94)
-	  and Fl_Menu_::add() (STR #99)
-	- FLUID collapse triangle events were not offset by
-          horizontal scroll (STR #106)
-	- QuitAppleEvent now correctly returns from Fl::run()
-          instead of just exiting (STR #87)
-	- Hiding the first created OpenGL context was not
-	  possible. FLTK now manages a list of contexts (STR #77)
-	- FLUID didn't keep the double/single buffer type for
-	  windows.
-	- FLTK didn't work with Xft2.
-	- OSX window resizing didn't work (STR #64)
-	- Fixed MacOS X shared library generation (STR #51)
-	- Several widgets defined their own size() method but
-	  didn't provide an inline method that mapped to the
-	  Fl_Widget::size() method (STR #62)
-	- Fl_Scroll didn't provide its own clear() method, so
-	  calling clear() on a Fl_Scroll widget would also
-	  destroy the scrollbars (STR #75)
-	- Fl::event_text() was sometimes initialized to NULL
-	  instead of an empty string (STR #70)
-	- fl_draw() didn't properly handle a trailing escaped
-	  "@" character (STR #84)
-	- Added documentation for all forms of
-	  Fl_Widget::damage() (STR #61)
-	- Fl_Double_Window now has a type() value of
-	  FL_DOUBLE_WINDOW, to allow double-buffered windows to
-	  process redraws properly on WIN32 (STR #46)
-	- Added FL_DAMAGE_USER1 and FL_DAMAGE_USER2 damage bits
-	  for use by widget developers (STR #57)
-	- Fl_Help_View didn't support numeric character entities
-	  (STR #66)
-	- Menu shortcuts didn't use the Mac key names under
-	  MacOS X (STR #71)
-	- CodeWarrior Mac OS X updated to work with current
-	  CW8.3 (STR #34)
-	- Apple-C/X/V/Z didn't work in the Fl_Input widget due
-	  to a bad mapping to control keys (STR #79)
-	- Added the OSX-specific fl_open_callback() function to
-	  handle Open Documents messages from the Finder (STR
-	  #80)
-	- The configure script contained erroneous whitespace in
-	  various tests which caused errors on some platforms
-	  (STR #60)
-	- The fltk-config script still supported the deprecated
-	  --prefix and --exec-prefix options; dropped them since
-	  they serve no useful purpose and would never have
-	  worked for the intended purpose anyways... (STR #56)
-	- fl_filename_list returned 0 on Win32 if no directory
-	  existed (STR #54)
-	- Pressing 'home' after the last letter in a Text_Editor
-	  would move the cursor to pos 0 (STR #39)
-	- Fl::get_key(x) would mix up Ctrl and Meta on OS X (STR
-	  #55)
-	- The configure script used the wrong dynamic library
-	  linking command for OSX (STR #51)
-	- The Fl_Text_Editor widget did not set changed() nor
-	  did it call the widget's callback function for
-	  FL_WHEN_CHANGED when processing characters that
-	  Fl::compose() handles (STR #52)
-
-
-CHANGES IN FLTK 1.1.4rc1
-
-	- The file chooser did not reset the click count when
-	  changing directories; if you clicked on a file in the
-	  same position after changing directories with a
-	  double-click, the chooser treated it as a triple
-	  click (STR #27)
-	- Symbols with outlines did not get drawn inactive.
-	- The Fl_Help_View widget now provides a find() method
-	  to search for text within the page.
-	- The Fl_Help_Dialog widget now provides a search box
-	  for entering text to search for.
-	- The default font encoding on OSX did not match the
-	  default on WIN32 or X11.
-	- Menu items were not drawn using the font specified in
-	  the Fl_Menu_Item structure (STR #30)
-	- Long menus that were aligned such that the top of an
-	  item was exactly at the top of the screen would not
-	  scroll (STR #33)
-	- The OS issues appendix incorrectly stated that MacOS
-	  8.6 and 9 were supported; they are not (STR #28)
-	- Fixed handling of nested double-buffered windows (STR
-	  #1)
-	- Showing a subwindow inside a hidden window would crash
-	  the application (STR #23)
-	- OSX users couldn't enter some special chars when using
-	  some foreign key layouts (STR #32)
-	- Hiding subwindows on OSX would hide the parent window
-	  (STR #22)
-	- Added thin plastic box types.
-	- Fl_Pack ignored the box() setting and cleared any
-	  unused areas to the widget color; it now only does so
-	  if the box() is set to something other than FL_NO_BOX.
-	- Updated the Fl_Tabs widget to offset the first tab by
-	  the box dx value to avoid visual errors.
-	- Updated the plastic up box to draw only a single
-	  border frame instead of the old double one for
-	  improved appearance.
-	- Updated the default background color on OSX to provide
-	  better contrast.
-	- Fl_Text_Display and friends now look for the next
-	  non-punctuation/space character for word boundaries
-	  (STR #26)
-	- gl_font() didn't work properly for X11 when Xft was
-	  used (STR #12)
-	- Fl_File_Browser incorrectly included "." on WIN32 (STR
-	  #9)
-	- Include shellapi.h instead of ShellAPI.h in the WIN32
-	  drag-n-drop code in order to work with the MingW cross
-	  compiler (STR #6)
-	- The cursor was not properly restored when doing
-	  drag-n-drop on X11 (STR #4)
-	- Fl::remove_fd() didn't recalculate the highest file
-	  descriptor properly (STR #20)
-	- Fl_Preferences::deleteGroup() didn't work properly
-	  (STR #13)
-	- Fixed the fl_show_file_selector() function - it was
-	  copying using the wrong string size (STR #14)
-	- fl_font() and fl_size() were not implemented on MacOS
-	  X.
-	- Sorted the icon menu bar in FLUID.
-	- Fixed minor memory access complaints from Valgrind
-	- Compiling src/flstring.h on OS X with BSD header would
-	  fail.
-	- Fl_Text_Editor didn't scroll the buffer when the user
-	  pressed Ctrl+End or Ctrl+Home.
-	- Fl_Text_Editor didn't show its cursor when the mouse
-	  was moved inside the window.
-	- FLUID now uses an Fl_Text_Display widget for command
-	  output, which allows you to copy and paste text from
-	  command output into other windows.
-	- Fl_Gl_Window could cause a bus error on MacOS X if the
-	  parent window was not yet shown.
-	- FLUID could crash after displaying a syntax error
-	  dialog for the callback code.
-	- FLUID would reset the callback code if you opened the
-	  widget panel for multiple widgets.
-	- Added a NULL check to Fl_Text_Display (SF Bug #706921).
-	- The fltk-config script placed the LDFLAGS at the wrong
-	  place in the linker options.
-	- Fl_Text_Display didn't draw the outer box in the right
-	  dimensions, so it was invisible.
-	- Fl_Help_Dialog used the same color for links as for
-	  the background, causing links to be invisible on pages
-	  without a background color set.
-
-
-CHANGES IN FLTK 1.1.3
-
-	- Documentation updates.
-	- FLTK now ignores KeyRelease events when X11 sends them
-	  for repeating keys.
-	- FLUID now supports up to two additional qualifiers
-	  before a class name (FL_EXPORT, etc.) to aide in
-	  developing DLL interfaces for WIN32.
-	- Additional NULL checks in Fl_Button,
-	  fl_draw_boxtype(), Fl_File_Chooser, and
-	  Fl_Window::hotspot().
-	- The Fl_Preferences header file needed to FL_EXPORT all
-	  of the nested classes for WIN32.
-	- Fl_Double_Window couldn't be nested on WIN32. [SF Bug
-	  #658219]
-	- Fl_Slider didn't call the callback function when the
-	  user changed the value using the keyboard and the
-	  "when" condition was FL_WHEN_RELEASE. [SF Bug #647072]
-	- Lines with less than 2 unique vertices and polygons
-	  with less the 3 unique vertices were not drawn
-	  properly. [SF Bug #647067]
-	- The size_range() values were not honored under MacOS
-	  X. [SF Bug #647074]
-	- OpenGL windows didn't resize correctly on MacOS X.
-          [SF Bug #667855]
-	- The menus incorrectly used the overlay visual when one
-	  or more menu items contained an image. [SF Bug #653846]
-	- Changed some error messages to use Fl::error() instead
-	  of fprintf()...
-	- Fl_Text_Buffer and Fl_Text_Display used free to free
-	  memory that was allocated using the new operator.
-	- Tweeked the plastic scheme under MacOSX to better
-	  match the colors.
-	- The Fl_Image.H always included the x.H header file,
-	  which included many system headers that could
-	  interfere with normal GUI applications.  It now uses
-	  the corresponding based types for the image id and
-	  mask to avoid this.
-	- The FLUID widget panel wasn't sorted, so keyboard
-	  navigation was strange. [SF Bug #647069]
-	- Fl_Scroll didn't compute the location of labels to the
-	  right or below when determining the area to erase.
-	- Added backward-compatibility macro for
-	  filename_setext().
-	- Fl_Bitmap::copy(), Fl_Pixmap::copy(), and
-	  Fl_RGB_Image::copy() all could overflow the source
-	  image when scaling the image.
-	- Double/triple clicks in Fl_Input fields didn't copy
-	  the expanded selection to the clipboard.
-	- Fl_Glut_Window and Fl_Gl_Window didn't always initialize
-	  the OpenGL context on MacOS.
-
-
-CHANGES IN FLTK 1.1.2
-
-	- Fl_Menu_Bar now supports drawing vertical dividers
-	  between menu items and submenus in the menu bar.
-	- Fl_File_Chooser::value() didn't return NULL when the
-	  user clicked Cancel while selecting a directory.  This
-	  bug also affected fl_dir_chooser().
-	- Fl_Menu_::add(const char *) used too small a menu item
-	  label buffer and didn't do bounds checking.
-	- Eliminate some compiler warnings with CodeWarrier
-	  under WIN32 (Paul Chambers)
-	- Fl_Gl_Window widgets did not resize properly under
-	  MacOS X.
-	- The cursor could be set for the wrong window in the
-	  text widgets.
-	- Fl_Check_Browser didn't provide const char * add
-	  methods as documented.
-	- Fl_Check_Browser didn't draw the same style of check
-	  marks at the other widgets.
-	- Fl_Button, Fl_Choice, and Fl_Menu_Button incorrectly
-	  activated the button/menu when the spacebar was
-	  pressed in conjunction with shift, control, alt, or
-	  meta.
-	- FLTK should now compile with Xft 2.0.
-	- Some versions of Tru64 4.0 have snprintf and
-	  vnsprintf, but don't have the prototypes for those
-	  functions.
-	- FLTK had trouble doing character composition with some
-	  keyboard layouts under X11 (in particular, Belgian).
-	- Fl_Text_Editor would cause a segfault if the user
-	  pressed CTRL-V (paste) without having any data in the
-	  clipboard...
-	- The tab key moved backwards in menus instead of
-	  forwards.  Shift-tab still moves backwards.
-	- The redraw_label() method didn't damage the parent
-	  window when the label was outside the widget's
-	  bounding box.
-	- Added a "draw_children()" method to Fl_Group to make
-	  subclassing Fl_Group with a custom draw() function
-	  easier.
-	- Fl_Text_Editor now supports basic undo functionality.
-	- FLUID now uses Fl_Text_Editor widgets for all
-	  multi-line code fields.
-	- Added new widget bin and icons to FLUID.
-	- FLUID would try running multiple commands in parallel,
-	  even though it wasn't capable of handling it.
-	- FLUID didn't generate code for some attributes when
-	  using custom/named widget classes.
-	- Added a new FL_COMMAND state bit which maps to FL_CTRL
-	  on X11 and WIN32 and FL_META on MacOS.
-	- MacOS keyboard modifiers mapping corrections. Cmd and
-	  Control are no longer swapped, event_key and event_text
-	  return (mostly) the same values as on other platforms.
-	- The Fl_Tabs widget should no longer be a focus hog;
-	  previously it would take focus from child widgets.
-	- The file chooser now activates the OK button when
-	  opening a directory in directory selection mode.
-	- Fixed a bug in the file chooser when entering an
-	  absolute path.
-	- Back-ported some FLTK 2.0 tooltip changes to eliminate
-	  erroneous tooltip display.
-	- MacOS windows were resizable, even when size_range
-	  would not allow for resizing.
-	- Fl_Text_Editor now supports Shift+Delete, Ctrl+Insert,
-	  and Shift+Insert for cut, copy, and paste,
-	  respectively.
-	- Fl_Text_Display didn't restore the mouse pointer when
-	  hidden.
-	- Fl::arg() now ignores the MacOS X -psn_N_NNNNN option.
-	- Added another change to the WIN32 redraw handling for
-	  the MingW compilers.
-	- Fl_File_Chooser didn't handle WIN32 home directories
-	  that used backslashes instead of forward slashes.
-	- Fl_Text_Display didn't limit the resize height to 1
-	  line.
-	- Fl_Scrollbar widgets incorrectly took keyboard focus
-	  when clicked on. This caused widgets such as
-	  Fl_Text_Display to hide the cursor when you scrolled
-	  the text.
-
-
-CHANGES IN FLTK 1.1.1
-
-	- Fl_Text_Display didn't always show the cursor.
-	- Fl_Tabs now only redraws the tabs themselves when
-	  making focus changes.  This reduces flicker in tabbed
-	  interfaces.
-	- The WIN32 redraw handler now correctly merges the FLTK
-	  and Windows redraw regions.
-	- The Fl_Text_* widgets use the C++ bool type, which is
-	  not supported by older C++ compilers.  Added a
-	  configure check and workaround code for this.
-	- Fl_X::set_xid() didn't initialize the backbuffer_bad
-	  element that was used with XDBE.
-	- Fl_Shared_Image::uncache() was not implemented.
-	- Fl::set_font() didn't 0-initialize all font descriptor
-	  data.
-	- Some OpenGL implementations don't support single-
-	  buffered visuals. The Fl_Gl_Window class now emulates
-	  single-buffered windows using double-buffered
-	  windows.
-	- Added a workaround for a compiler bug in Borland C++
-	  that prevented Fl_Help_View.cxx from compiling.
-	- Checkmarks didn't scale properly; copied the 2.0 check
-	  mark code over.
-	- Replaced several memcpy's with memmove's for
-	  portability (memmove allows for overlapping copies,
-	  memcpy does not)
-	- Bug #621737: Fl_Bitmap::copy(), Fl_Pixmap::copy(), and
-	  Fl_RGB_Image::copy() now range-check the new width and
-	  height to make sure they are positive integers.
-	- Bug #621740: the WIN32 port needed to handle WM_MOUSELEAVE events
-	  in order to avoid problems with tooltips.
-	- Fl_PNM_Image didn't set the "alloc" flag for the data,
-	  which could lead to a memory leak.
-	- fl_filename_match() was inconsistently doing case-
-	  insensitive matching.
-	- Fl_Button redraw fix for bug #620979 (focus boxes and
-	  check buttons).
-	- Fl_Text_Display fix for bug #620633 (crash on
-	  redisplay).
-	- Fl_Output now calls its callback when the user clicks
-	  or drags in the widget.
-	- Shortcuts now cause buttons to take focus when visible
-	  focus is enabled.
-	- fl_filename_relative() didn't check that the path was
-	  absolute under WIN32.
-	- fl_filename_relative() didn't check that the path was
-	  on the current drive under WIN32.
-	- The Fl_BMP_Image class now handles 16-bit BMP files
-	  and BMP files with a transparency mask.
-	- The fltk-config script didn't add the required include
-	  path, if any, when compiling a program.
-	- Added a license clarification that the FLTK manual is
-	  covered by the same license as FLTK itself.
-	- Fl_Check_Browser wasn't documented.
-	- Fl_Preferences::Node::addChild(), deleteEntry(), and
-	  remove() didn't set the "dirty" flag.
-	- The "no change" button didn't work in the FLUID widget
-	  panel.
-	- Vertical scrollbars did not draw the arrows inactive
-	  when the scrollbar was inactive.
-
-
-CHANGES IN FLTK 1.1.0
-
-	- Documentation updates.
-	- Added a Fl_Widget::redraw_label() method which flags a
-	  redraw of the appropriate area.  This helps to
-	  eliminate flicker when updating the value of a widget.
-	- Fl_Wizard::value() now resets the mouse cursor to the
-	  window's default cursor.
-	- Fl_File_Chooser::type() didn't enable/disable the new
-	  directory button correctly.
-	- Fl_Preferences::entryExists() did not work properly.
-	- FLUID's image file chooser pattern was incorrect.
-	- Fl_File_Icon::load_system_icons() now detects KDE
-	  icons in /opt/kde, /usr/local, and /usr automatically,
-	  and supports the KDEDIR environment variable as well.
-	- Submenus now display to the left of the parent menu if
-	  they won't fit to the right.  Previously they would
-	  display right on top of the parent menu...
-	- Fl_Menu_:add() didn't handle a trailing "\" character
-	  gracefully.
-	- Clicking/dragging the middle mouse button in a
-	  scrollbar now moves directly to that scroll position,
-	  matching the behavior of other toolkits.
-	- Added some more range checking to the Fl_Text_Display
-	  widget.
-	- The editor demo did not correctly update the style
-	  (syntax highlighting) information.
-
-
-CHANGES IN FLTK 1.1.0rc7
-
-	- Updated the Fl_Text_Buffer and Fl_Text_Display classes
-	  to be based on NEdit 5.3 (patch from George Garvey).
-	- Fixed a problem with Fl::wait(0.0) on MacOS X 10.2;
-	  this affected the fractals demo and other OpenGL
-	  applications.
-	- Fl_Glut_Window now takes keyboard focus and handles
-	  shortcut events.
-	- The MacOS X implementation of fl_ready() now checks
-	  the event queue for events.
-	- Fl_PNM_Image now supports the XV/GIMP thumbnail format
-	  (P7).
-	- Fl_Preferences would not find groups inside the root 
-	  group.
-	- Small bug fixes for Fl_Chart, Fl_Scrollbar, Fl_Tabs,
-	  and FLUID from Matthew Morrise.
-	- Fl_Chart didn't have its own destructor, so data in
-	  the chart wasn't freed.
-	- Fl_Menu_Button no longer responds to focus or keyboard
-	  events when box() is FL_NO_BOX.
-	- FLTK convenience dialogs put the buttons in the wrong
-	  order.
-	- Fl_BMP_Image didn't load 4-bit BMP files properly.
-	- Minor tweeks to the WIN32 DLL support.
-	- Fl_Text_Display::resize() could go into an infinite
-	  loop if the buffer is emptied.
-	- Fl::handle() didn't pass FL_RELEASE events to the
-	  grab() widget if pushed() was set (for proper menu
-	  handling...)
-	- DND events were being sent to the target window
-	  instead of the target widget under WIN32.
-	- The newest Cygwin needs the same scandir() handling as
-	  HP-UX.
-	- FLUID didn't register the image formats in the
-	  fltk_images library, and had some other image
-	  management problems.
-	- Fixed one more redraw bug in Fl_Browser_ where we
-	  weren't using the box function to erase empty space in
-	  the list.
-	- Fl_Text_Display::buffer() now calls resize() to show
-	  the buffer.
-	- Fl_Help_View didn't support HTML comments.
-	- Fl_Help_View didn't include the extra cellpadding when
-	  handling colspan attributes in cells.
-	- Fl_Help_View didn't support table alignment.
-
-
-CHANGES IN FLTK 1.1.0rc6
-
-	- Documentation updates.
-	- Fl::handle() didn't apply the modal tests for
-	  FL_RELEASE events, which caused Fl_Tabs to allow users
-	  to change tabs even when a modal window was open.
-	- Fl_Browser_, Fl_Input_, Fl_Slider now use the box
-	  function to erase the background.  This fixes some
-	  long-standing redraw problems.
-	- More snprintf/strlcpy/strlcat changes where needed.
-	- Fl::get_font_name() would leak 128 bytes.
-	- Eliminated most of the "shadowed" variables to avoid
-	  potential problems with using the wrong copy of "foo"
-	  in a class method.
-	- Moved Fl_BMP_Image, Fl_GIF_Image, and Fl_PNM_Image to
-	  the fltk_images library, so the only image formats
-	  that are supported by the core library are XBM and XPM
-	  files.  This reduces the size of the FLTK core library
-	  by about 16k...
-	- The Fl_Text_Display::resize() method was incorrectly
-	  flagged as protected.
-	- Fixed some memory/initialization bugs in
-	  Fl_File_Chooser that valgrind caught.
-	- The PNG library png_read_destroy() is deprecated and
-	  does not free all of the memory allocated by
-	  png_create_read_struct(). This caused a memory leak in
-	  FLTK apps that loaded PNG images.
-	- Added uncache() method to Fl_Image and friends.
-	- Added image() methods to Fl_Menu_Item.
-	- Added default_cursor() method and data to Fl_Window.
-	- Fl_Group would send FL_ENTER events before FL_LEAVE
-	  events, causing problems with adjacent widgets.
-	- Fixed filename problems with Fl_File_Chooser -
-	  changing the filename field directly or choosing files
-	  from the root directory could yield interesting
-	  filenames.
-	- Fl_Input_ could crash if it received an empty paste
-	  event.
-	- The mouse pointer now changes to the I beam
-	  (FL_CURSOR_INSERT) when moved over an input field or
-	  text widget.
-	- "make install" didn't automatically (re)compile the
-	  FLUID executable.
-	- Added an Fl::get_boxtype() method to get the current
-	  drawing function for a specific box type.
-	- Fl_Output and Fl_Multiline_Output didn't prevent
-	  middle-mouse pastes.
-	- Fl_JPEG_Image didn't compile out-of-the-box with Cygwin
-	  due to a bug in the Cygwin JPEG library headers.
-	- Fl_BMP_Image still didn't work with some old BMP files.
-	- "make distclean" didn't really clean out everything.
-	- Tweeked the look of the check button with a patch from
-	  Albrecht Schlosser.
-
-
-CHANGES IN FLTK 1.1.0rc5
-
-	- Added "wrap" type bit to Fl_Input_, so you can now
-	  have a multiline text field that wraps text.
-	- Setting the value() of an output text field no longer
-	  selects the text in it.
-	- Output text fields now show a caret for the cursor
-	  instead of the vertical bar.
-	- The newButton and previewButton widgets are now public
-	  members of the Fl_File_Chooser class.  This allows
-	  developers to disable or hide the "new directory" and
-	  "preview" buttons as desired.
-	- Added new visible focus flag bit and methods to
-	  Fl_Widget, so it is now possible to do both global and
-	  per-widget keyboard focus control.
-	- Removed extra 3 pixel border around input fields.
-	- No longer quote characters from 0x80 to 0x9f in input
-	  fields.
-	- Improved speed of Fl_Browser_::display() method with
-	  large lists (patch from Stephen Davies.)
-	- Fl_Help_View didn't properly handle NULL from the link
-	  callback (the original filename/directory name were
-	  not preserved...)
-	- Fl_Help_View didn't use the boxtype border values when
-	  clipping the page that was displayed.
-	- Added first steps to CodeWarrior/OS_X support (see
-	  fltk-1.1.x/CodeWarrior/OS_X.sit)
-	- Cleaned up the WIN32 export definitions for some of
-	  the widget classes.
-	- Fixed a filename completion bug when changing
-	  directories.
-	- Fl_File_Chooser::value() would return directories with
-	  a trailing slash, but would not accept a directory
-	  without a trailing slash.
-	- When installing shared libraries, FLUID is now linked
-	  against the shared libraries.
-	- MacOS: missing compile rule for .dylib files.
-	- Fl_Group::current(), Fl_Group::begin(), and
-	  Fl_Group::end() are no longer inlined so that they are
-	  properly exported in DLLs under WIN32.  Similar
-	  changes for all static inline methods in other
-	  classes.
-	- MacOS: support for Mac system menu (Fl_Sys_Menu_Bar)
-	- MacOS: wait(0) would not handle all pending events
-	- Added new makeinclude file for MingW using GCC 3.1.x.
-	- Fl_Choice::value(n) didn't range check "n".
-	- The MingW and OS/2 makeinclude files didn't have the
-	  new fltk_images library definitions.
-	- Fl_Text_Editor didn't scroll the text in the widget
-	  when dragging text.
-	- Config header file changes for Borland C++.
-	- FLTK didn't provide a Fl::remove_handler() method.
-
-
-CHANGES IN FLTK 1.1.0rc4
-
-	- Added new filter_value() methods to Fl_File_Chooser to
-	  get and set the current file filters.
-	- Added support for custom filters to Fl_File_Chooser.
-	- Added Borland C++ Builder IDE project files from
-	  Alexey Parshin.
-	- Resource leak fixes under WIN32 from Ori Berger.
-	- Now register a WIN32 message for thread messages.
-	- Fl_Window didn't initialize the min and max window
-	  size fields.
-	- The JPEG and PNG image classes have been moved to the
-	  fltk_images library, a la FLTK 2.0.  You can register
-	  all image file formats provided in fltk_images using
-	  the new fl_register_images() function.
-	- Fl_XBM_Image didn't correctly load XBM files.
-	- MacOS: Added Greg Ercolano's file descriptor support.
-	- MacOS: Fixed text width bug.
-	- A change in fl_fix_focus() broken click-focus in FLWM.
-	- Cygwin with -mnocygwin didn't like the FL/math.h
-	  header file.
-	- Fl_Browser_ cleared the click count unnecessarily.
-	- MacOS: Pixmap draw fix, gl_font implemented
-	  FL_FOCUS fix, window type fix for modal and nonmodal
-	  windows, glut uninitialised 'display' proc fix
-	- Now support FLTK_1_0_COMPAT symbol to define
-	  compatibility macros for the old FLTK 1.0.x function
-	  names to the 1.1.x names.
-	- Now translate the window coordinates when a window is
-	  shown, moved, or resized.  This should fix the "menus
-	  showing up at the wrong position" bug under XFree86.
-	- Fixed some more problems with the Fl_BMP_Image file
-	  loader.
-	- BC++ fixes.
-	- The pixmap_browser demo didn't check for a NULL image
-	  pointer.
-	- Fl_File_Icon::find() now uses fl_filename_isdir()
-	  under WIN32 to check for directories.
-	- Fl_File_Chooser's preview code called refcount()
-	  on the deleted image's object.
-	- Fixed another problem with the Fl_BMP_Image loader.
-	- The fl_file_chooser() callback was being called with a
-	  NULL filename.
-	- Documented that fl_push_clip() is preferred over
-	  fl_clip(), with a corresponding source change.
-	- Minor changes to the MacOS X event handling code.
-	- Added syntax highlighting example code to the editor
-	  test program.
-	- Fl_Text_Display didn't range check style buffer
-	  values.
-	- Added "dark" color constants (FL_DARK_RED, etc.)
-	- The MacOS font code was missing definitions for
-	  fl_font_ and fl_size_.
-
-
-CHANGES IN FLTK 1.1.0rc3
-
-	- Documentation updates.
-	- New file chooser from design contest.
-	- Did some testing with Valgrind and fixed some memory
-	  problems in Fl_Help_View::Fl_HelpView,
-	  Fl_Menu_::remove(), Fl_Text_Display::draw_vline(), and
-	  resizeform() (convenience dialogs).
-	- Fixed some redraw() bugs, and now redraw portions of
-	  the parent widget when the label appears outside the
-	  widget.
-	- The boolean (char) value methods in Fl_Preferences
-	  have been removed since some C++ compilers can't
-	  handle char and int value methods with the same name.
-	- Added fl_read_image() function.
-	- Fixed Fl_Valuator::format() so that the correct format
-	  type is used when step == 1.0.
-	- Fl_Help_View didn't support the TT markup.
-	- Fl_Shared_Image used a double-pointer to the image
-	  handler functions, which was unnecessary and
-	  unintuitive.
-	- Fl_PNM_Image didn't load the height of the image
-	  properly.
-	- Fl_BMP_Image, Fl_JPEG_Image, Fl_PNG_Image, and
-	  Fl_Shared_Image didn't delete image data that was
-	  allocated.
-	- Enabled the OpenGL and threads demos when compiling
-	  for MingW.
-	- Fl_File_Input didn't update the directory buttons if a
-	  callback was registered with the widget.
-	- The file chooser would return the last selected
-	  file(s) when cancel was pressed.
-	- The file chooser limited the resizing of the chooser
-	  window unnecessarily.
-	- Fixed WM_PAINT handling under WIN32.
-	- Minor tweeks to MingW and OS/2 config headers.
-	- Fl_Value_Input now correctly determines if step()
-	  specifies an integer value.
-	- Fl_Help_View didn't add links inside PRE elements.
-	- OS/2 build fixes from Alexander Mai.
-	- Now use strlcat() instead of strncat() which could
-	  cause buffer overflows.
-	- Now use of strlcpy() instead of strncpy() to simplify
-	  the code.
-	- Drag-n-drop under WIN32 now shows a [+] cursor instead
-	  of the link cursor.
-	- Fixed widget width tooltip and default argument
-	  handling code in FLUID.
-	- Fixed colors used when drawing antialiased text using
-	  Xft.
-	- Fl_Preferences::makePath() now uses access() instead
-	  of stat() when checking to see if the destination
-	  directory already exists.
-	- Fl_BMP_Image now supports older BMP files with the 12
-	  byte header.
-	- Optimized the redrawing of tabs and radio/check
-	  buttons when the keyboard focus changes.
-	- More tooltip fixes.
-	- DND text operations would loop under X11.
-
-
-CHANGES IN FLTK 1.1.0rc2
-
-	- Portability fixes.
-	- Backported 2.0 tooltip changes.
-	- Several of the valuators did not support tooltips.
-	- The last menu item in a menu didn't pick up on font
-	  changes.
-	- FLUID now properly handles default argument parameters
-	  properly.
-	- Fixed WM_PAINT handling under WIN32 - didn't validate
-	  the correct region that was drawn.
-	- Fl_Multiline_Output would insert the enter key.
-	- Fl_File_Browser didn't clip items to the column width.
-	- Fl_Window::draw() cleared the window label but didn't
-	  restore it, so windows could lose their titles.
-	- Eliminated multiple definitions of dirent structure
-	  when compiling under WIN32.
-	- Adjusted the size of the circle that is drawn inside
-	  radio buttons to scale better for larger labels.
-	- FLUID was opening the display when it shouldn't have.
-	- Fl_File_Chooser.cxx defined the file chooser functions
-	  again; they should only be defined in the header file.
-	- Wide arcs would draw with "teeth".
-	- The preferences demo included Fl/Fl_Preferences.H
-	  instead of FL/Fl_Preferences.H.
-
-
-CHANGES IN FLTK 1.1.0rc1
-
-	- The fl_file_chooser() and fl_dir_chooser() functions
-	  now support an optional "relative" argument to get
-	  relative pathnames; the default is to return absolute
-	  pathnames.
-	- The backspace and delete keys now work as expected in
-	  the file chooser when doing filename completion.
-	- FLUID now supports running shell commands.
-	- New Fl_File_Input widget that shows directory
-	  separators with filename in input field.
-	- The Fl_File_Chooser dialog now shows the absolute path
-	  in the filename field using the Fl_File_Input widget.
-	- FLUID now keeps track of grid, tooltip, and other
-	  GUI options, along with the last 10 files opened.
-	- Tooltip windows would show up in the task bar under
-	  WIN32.
-	- Now append trailing slash to directory names in names
-	  in WIN32 version of scandir().  This takes care of a
-	  file chooser performance problem with large
-	  directories.
-	- Added Fl_Preferences class from Matthias Melcher,
-	  including binary data support.
-	- FLUID now recognizes the "using" keyword in
-	  declarations.
-	- fl_file_chooser() didn't highlight the requested file
-	  the second time the file chooser dialog was shown.
-	- Fixed rendering of Fl_Light_Button with the plastic
-	  scheme.
-	- Fixed a bug in the MacOS font enumeration code.
-	- Now show a "locked" icon next to static/private
-	  elements in FLUID, and "unlocked" icon next to
-	  global/public elements.
-	- Implemented Fl_Menu_Item image labels using older
-	  1.0.x labeltype method.
-	- Updated the PNG library check to support both png.h
-	  and libpng/png.h.
-	- Fixed a recursion bug in tooltips that was causing
-	  random crashes.
-	- fl_file_chooser() could cause a segfault when passed a
-	  NULL filename parameter in some situations.
-	- Added a "-g" option to fltk-config to support quick
-	  compiling with debugging enabled.
-	- Fixed redraw problem with Fl_Input and anti-aliased
-	  text.
-	- Added threading support for MacOS X and Darwin.
-	- The filesystem list in the file chooser now works under
-	  MacOS X and Darwin.
-	- The fl_msg structure now contains all data passed to
-	  the WndProc function under WIN32.
-	- Fixed some window focus/positioning problems under
-	  MacOS X.
-	- Added fl_create_alphamask() function to create an alpha
-	  mask from 8-bit data; currently this always generates a
-	  1-bit screen-door bitmask, however in the future it will
-	  allow us to generate N-bit masks as needed by various
-	  OS's.
-	- Fl_File_Browser::load() didn't properly show drives
-	  when compiled in Cygwin mode.
-	- Now pass correctly pass keyboard and mouse events to
-	  widget under tooltip as needed...
-	- Added new Fl::dnd_text_ops() methods to enable/disable
-	  drag-and-drop text operations.
-	- Fl_Input now supports clicking inside a selection to
-	  set the new text position when drag-and-drop is
-	  enabled.
-	- Added support of X resources for scheme, dnd_text_ops,
-	  tooltips, and visible_focus...
-	- Fixed some case problems in includes for the MacOS X
-	  code.
-	- Fl_Widget::handle() returned 1 for FL_ENTER and
-	  FL_LEAVE events, which caused some compatibility
-	  problems with 1.0 code.
-	- Fl_Box::handle() now returns 1 for FL_ENTER and
-	  FL_LEAVE events so that tooltips will work with Fl_Box
-	  widgets.
-	- Some source files still defined strcasecmp and
-	  strncasecmp under WIN32.
-	- Some source files still used the "false" and "true"
-	  C++ keywords, even though several of our "supported"
-	  C++ compilers don't support them.  Using 0 and 1 until
-	  FLTK 2.0 (which uses the bool type instead of int for
-	  any boolean values...)
-	- Minor Fl_Color revamping, so that color constants map
-	  to the color cube and FL_FOREGROUND_COLOR,
-	  FL_BACKGROUND_COLOR, FL_BACKGROUND2_COLOR,
-	  FL_INACTIVE_COLOR, and FL_SELECTION_COLOR map to the
-	  user-defined colors.
-
-
-CHANGES IN FLTK 1.1.0b13
-
-	- Fixed a bug in the Xft support in Fl_Window::hide()
-	  (the config header wasn't included, so the Xft code
-	  wasn't getting called)
-	- Xdbe support must now be enabled explicitly using
-	  --enable-xdbe due to inconsistent bugs in XFree86 and
-	  others.
-	- Windows resized by a program would revert to their
-	  original size when moved under WIN32.
-	- Cygwin can only compile the new WIN32 drag-n-drop code
-	  using GCC 3.x.
-	- Tooltips now appear for inactive and output widgets.
-	- Tooltips no longer steal keyboard events other than
-	  ESCape.
-	- Tooltips are no longer delayed when moving between
-	  adjacent widgets.
-	- fl_beep(FL_BEEP_DEFAULT) now uses the PC speaker under
-	  Windows (0xFFFFFFFF) rather than an event sound.
-	- The configure script didn't include the -mwindows or
-	  -DWIN32 compiler options in the output of fltk-config
-	  when using the Cygwin tools.
-	- Fl_Output didn't take input focus when needed, so it
-	  was unable to support CTRL-C for copying text in the
-	  field and did not unhighlight selections when the
-	  widget lost focus.
-	- The fl_filename_name() function didn't handle a NULL
-	  input string.
-	- The input field used by the fl_input() and
-	  fl_password() functions was resized too small in
-	  1.1.0b12.
-	- Added casts in fl_set_fonts_win32.cxx for VC++ 5.0.
-	- Fl_File_Icon::find() did not check the basename of a
-	  filename for a match; this caused matches for a
-	  specific filename (e.g. "fluid") to fail.
-	- The Fl_Shared_Image class now supports additional
-	  image handling functions - this allows you to support
-	  additional image file formats transparently.
-
-
-CHANGES IN FLTK 1.1.0b12
-
-	- Documentation updates.
-	- Fl_Choice didn't clip the current value properly - it
-	  wasn't accounting for the box border width.
-	- The forms compatibility functions are now placed in a
-	  "fltk_forms" library to match FLTK 2.0.
-	- Renamed down() and frame() to fl_down() and
-	  fl_frame(), filename_xyz() to fl_filename_xyz(), and
-	  all of the define_FL_FOO() functions for the custom
-	  boxtypes to fl_define_FL_FOO() to avoid namespace
-	  clashes.
-	- Stereo OpenGL support (patch from Stuart Levy)
-	- All of the convenience functions defined in fl_ask.H
-	  now resize the widgets and dialog window as needed for
-	  the labels and prompt.
-	- Backported FLTK 2.0 dual cut/paste buffer code.
-	- Added support for Xft library to provide anti-aliased
-	  text on X11.
-	- Fl_Help_View didn't keep track of the background color
-	  of cells properly.
-	- Fl_Browser::item_width() didn't compute the width of
-	  the item properly when column_widths() was set.
-	- Fl_Button didn't check to see if the widget could
-	  accept focus before taking input focus.
-	- Fl_Help_View didn't preserve target names (e.g.
-	  "filename.html#target") when following links.
-	- Drag-and-drop support for MacOS.
-	- Updated MacOS issues documentation.
-
-
-CHANGES IN FLTK 1.1.0b11
-
-	- Now conditionally use the WIN32 TrackMouseEvent API
-	  (default is no...)
-	- Fixed a table rendering bug in the Fl_Help_View
-	  widget.
-	- The fltk-config script now recognizes all common C++
-	  extensions.
-	- The menu code was using overlay visuals when the
-	  scheme was set to "plastic".
-	- Fixed some drawing problems with Fl_Light_Button and
-	  its subclasses.
-	- Fixed a minor event propagation bug in Fl_Group that
-	  caused mousewheel events to be passed to scrollbars
-	  that were not visible.
-	- The fl_file_chooser() function did not preserve the
-	  old file/directory like the old file chooser did.
-	- The prototypes for fl_input() and fl_password() did
-	  not default the "default value" to NULL.
-	- Fl_Tabs now draws tabs using the selection_color() of
-	  the child groups; this allows the tabs to be colored
-	  separately from the body.  Selected tabs are a mix of
-	  the Fl_Tabs selection_color() and the child group's
-	  selection_color().
-	- Fl_Tabs didn't include images in the measurement of
-	  the tabs if no label text was defined.
-	- The WIN32 code didn't return 0 from the window
-	  procedure after handling WM_PAINT messages.
-	- fl_draw() would incorrectly test the clipping of
-	  labels the lay outside the bounding box.
-	- filename_relative() didn't always return the correct
-	  relative path.
-	- Updated the test makefile to work with more versions
-	  of "make".
-	- Added new "--with-optim" configure option to set the
-	  optimization flags to use when compiling FLTK.
-	- The fltk-config script no longer reports the
-	  optimization flags that were used to compile FLTK.
-	- Initial port of FLTK 2.0 drag-and-drop support.
-
-
-CHANGES IN FLTK 1.1.0b10
-
-	- Fixed the new WIN32 TrackMouseEvent code.
-	- Fixed the VC++ project files to link against
-	  comctl32.lib.
-
-
-CHANGES IN FLTK 1.1.0b9
-
-	- Better FL_LEAVE event handling for WIN32.
-	- The alpha mask was bit-reversed.
-	- Fl::scheme() applied the scheme tile image to overlay
-	  and menu windows, which caused problems when the
-	  overlay planes were in use.
-	- Fixed Fl::event_button() value when hiding tooltip on
-	  some systems.
-	- Added Fl_BMP_Image class to support loading of Windows
-	  bitmap (BMP) files.
-	- The shiny demo didn't work on some systems (no
-	  single-buffered OpenGL visual), and the new box types
-	  were reset when show(argc, argv) was called.
-	- Fl::scheme() didn't update windows that were not
-	  shown.
-	- The fractals demo would get far ahead of the UI with
-	  some Linux OpenGL drivers.  Now use glFinish() instead
-	  of glFlush() so we are at most 1 frame ahead.
-	- The fractals demo Y axis controls were backwards for
-	  the "flying" mode.
-	- MacOS: cleaned up src/Fl_mac.cxx
-	- MacOS: fixed Fl::wait(0.0), fixed Cmd-Q handling
-	- Update CygWin support for Fl::add_fd().
-	- Update the plastic scheme to not override the default
-	  colors - move the color code to the MacOS-specific
-	  code.  Also updates the tile image colormap to match
-	  the current background color.
-	- Add fl_parse_color() to X11 as well, removing a bunch
-	  of conditional code and providing a common interface
-	  for looking up color values.
-	- Fixed the make problems in the test directory - some
-	  make programs had trouble handling the recursive
-	  dependencies on the FLUID files...
-	- Now use rint() to round floating-point coordinates.
-	- Demo cleanup - made sure they all worked with schemes.
-	- Fl_Tabs no longer clears the unused area of the tab
-	  bar.
-	- Added show(argc, argv) method to Fl_Help_Dialog.
-	- MacOS: implemented cut/copy/paste.
-	- MacOS: improved keyboard handling, fixed keyboard
-	  focus handling, fixed get_key, modified 'keyboard'
-	  demo to show second mouse wheel and additional keys
-	  'help' and FL_NK+'='
-
-
-CHANGES IN FLTK 1.1.0b8
-
-	- OS/2 build fixes.
-	- fl_draw() didn't ignore symbol escapes properly for
-	  the browsers...
-	- New Fl::scheme() methods from FLTK 2.0; currently only
-	  the standard ("") and plastic ("plastic") methods are
-	  supported.  Schemes can be set on the command-line
-	  ("-scheme plastic") or using the FLTK_SCHEME
-	  environment variable.
-	- MacOS: fixed iBook keyboard handling, moved 
-	  remaining message handling to Carbon, added mouse
-	  capture support, added timer support, added overlay
-	  support, fixed double-buffering side effects.
-	- The configure script wasn't using the -fpermissive or
-	  -fno-exceptions options with GCC.
-	- Fl_JPEG_Image and friends didn't set the depth if the
-	  image file couldn't be loaded; since Fl_RGB_Image
-	  didn't check for this, it could fail when displaying
-	  or copying these images.
-	- filename_absolute() did not always free its temporary
-	  buffer.
-	- filename_relative() did not do a case-insensitive
-	  comparison under MacOS, OS/2, and Windows.
-	- filename_isdir() didn't properly handle "D:L" under
-	  WIN32.
-	- Fl_Shared_Image::get() did not check to see if the
-	  image could not be loaded.
-	- Fl_Help_View didn't clear the line array in the
-	  Fl_Help_Block structure; this causes erratic
-	  formatting for some pages.
-	- The font and size members of Fl_Help_Block were never
-	  used.
-	- The threading functions (Fl::lock() and friends) were
-	  not exported under WIN32.
-	- The Fl_Text_Display destructor deleted the scrollbars
-	  twice...
-	- Fl_Help_View didn't reset the horizontal scroll
-	  position when showing a new page.
-	- Fl_Pack now allows any child widget to be the
-	  resizable() widget, not just the last one.
-	- MacOS: opaque window resizing, all events except 
-	  Mac menus are now handled using Carbon, window 
-	  activation fixed, GL_SWAP_TYPE default changed to 
-	  make gl_overlay work.
-	- Fl_Help_View::resize() didn't resize the horizontal
-	  scrollbar.
-	- MacOS: list all fonts, fixed clipping and mouse
-	  pointer bugs.
-	- The Fl_File_Chooser widget now uses hotspot() to
-	  position the dialog under the mouse pointer prior to
-	  showing it.
-	- Added a configure check for *BSD - use -pthread option
-	  instead of -lpthread.
-	- Fl_Text_Display could get in an infinite loop when
-	  redrawing a portion of the screen.  Added a check for
-	  the return value from fl_clip_box() so that the
-	  correct bounding box is used.
-	- Removed the Fl_Mutex and Fl_Signal_Mutex classes from
-	  the threads example, since they weren't being used
-	  and apparently are not very portable.
-	- Fl_Help_View now ignores links when the link callback
-	  returns NULL, and displays a sensible error message
-	  when an unhandled URI scheme is used (e.g. http:,
-	  ftp:)
-	- Fl_File_Icon::load_system_icons() no longer complains
-	  about missing icon files, just files that exist but
-	  can't be loaded.
-	- FLUID didn't list the plastic box and frame types.
-	- Now hide the tooltip window whenever a window is
-	  hidden.  Otherwise a tooltip window could keep an
-	  application running.
-	- Updated FLUID to only append a trailing semicolon to
-	  code lines in a callback (so "#include" and friends
-	  will work...)
-	- The Fl_Color_Chooser widget now supports keyboard
-	  navigation.
-	- Fixed button and valuator widgets to call Fl::focus()
-	  instead of take_focus().
-	- Tweeked the radio button drawing code for better
-	  circles with different boxtypes.
-	- The Fl_File_Chooser widget did not provide a shown()
-	  method, and fl_file_chooser() and fl_dir_chooser() did
-	  not wait on shown(); this would cause them to return
-	  prematurely if you switched desktops/workspaces.
-	- Cosmetic changes to plastic boxtypes.  Now look much
-	  better for large areas and the buttons now have a much
-	  greater "3D" feeling to them.
-	- Added new Fl::draw_box_active() method so that
-	  boxtypes can find out if the widget they are drawing
-	  for is active or not.
-	- Fl_Button and its subclasses did not redraw the parent
-	  when the boxtype was FL_NO_BOX and they lost keyboard
-	  focus (the parent redraw clears the focus box.)
-	- Fixed the example program makefile - wasn't building
-	  the mandelbrot and shiny demos right.
-	- Fl::set_font(Fl_Font, Fl_Font) was not implemented.
-	- Fixed the documentation Makefile commands; was not
-	  using the fltk.book file for some reason...
-
-
-CHANGES IN FLTK 1.1.0b7
-
-	- More documentation updates...
-	- Mac OS X support works 95%
-	- The Fl_Window::hotspot() off-screen avoidance code was
-	  commented out.
-	- Mac OS X uses mostly Carbon event handling to support
-	  Mousewheel, three buttons, all modifier keys, etc.
-	- Updated paragraph 4 of the FLTK license exceptions;
-	  there was some question about the requirement to show
-	  that a program uses FLTK, which is required by section
-	  6 of the LGPL. The new exemption specifies that
-	  inclusion of the FLTK license is not required, just a
-	  statement that the program uses FLTK.
-	- Fl_Button::handle() was calling take_focus() for both
-	  FL_PUSH and FL_DRAG.
-	- File and memory fixes for Fl_GIF_Image, Fl_PNG_Image,
-	  Fl_PNM_Image, Fl_Shared_Image, Fl_Tiled_Image, and
-	  Fl_XBM_Image.
-	- filename_match() didn't handle backslashes properly
-	  under WIN32, and didn't use a case-insensitive
-	  comparison under MacOS X.
-	- The Fl class was missing access methods for the
-	  FL_MOUSEWHEEL event values - Fl::event_dx() and
-	  Fl::event_dy().
-	- The default help string didn't include the -nokbd
-	  option.
-	- "make uninstall" didn't uninstall the static OpenGL
-	  widget library.
-	- Mac cursor shapes added...
-	- Fl_Text_Display would lockup when all text was
-	  deleted; for example, when running the editor
-	  demo, you couldn't load a second file.
-	- Added Fl::lock() and friends from FLTK 2.0 to
-	  support multi-threaded applications; see the
-	  "threads" demo for an example of this.
-	- Fl_Check_Button and Fl_Round_Button now use the
-	  FL_NO_BOX box type to show the background of the
-	  parent widget.
-	- Tweeked the plastic boxtype code to draw with the
-	  right shading for narrow, but horizontal buttons.
-	- Fl_Progress now shades the bounding box instead of
-	  drawing a polygon inside it.
-	- Fl::warning() under WIN32 defaults to no action. This
-	  avoids warning dialogs when an image file cannot be
-	  loaded.
-	- Some Win32 drivers would draw into wrong buffers
-	  after OpenGL mode change
-	- The file chooser would cause a segfault if you
-	  clicked in an empty area of the file list.
-	- Fl_File_Icon::labeltype() would cause a segfault
-	  if the value pointer was NULL.
-	- Fl_File_Icon::load_image() could cause segfaults
-	  (NULL data and incrementing the data pointer too
-	  often.)
-	- Fl_File_Icon::load_image() now handles 2-byte
-	  per color XPM files.
-	- Some Win32 drivers would draw into wrong buffers
-	  after OpenGL mode change.
-	- Message handling and Resources for MacOS port.
-	- Fl_Help_View could get in an infinitely loop when
-	  determining the maximum width of the page; this
-	  was due to a bug in the get_length() method with
-	  percentages (100% width would cause the bug.)
-	- Don't need -lgdi32 for CygWin, since -mwindows
-	  does this for us.
-	- The WIN32 event handler did not properly handle
-	  WM_SYNCPAINT messages.
-	- Fl_Tabs now uses the boxtype exclusively to draw
-	  both the tabs and surrounding box, so alternate
-	  box types actually work and the look is a little
-	  nicer.
-	- Fixed the drawing of large areas with the new
-	  plastic boxtypes.
-	- Updated the Visual C++ demo projects to use FLUID
-	  to generate the GUI files as needed.
-	- The demo program didn't load the right menu file
-	  when compiled for debugging under WIN32.
-	- Added plastic box types to forms demo.
-	- Added mousewheel to keyboard demo.
-	- The Fl_Text_Editor widget caused an infinite loop
-	  when it received keyboard focus.
-	- filename_isdir() didn't properly handle drive letters
-	  properly; WIN32 needs a trailing slash for drive
-	  letters by themselves, but cannot have a trailing
-	  slash for directory names, go figure...
-	- The Fl_Text_Buffer and Fl_Text_Display classes did not
-	  initialize all of their members.
-	- fl_normal_label() had a totally redundant set of
-	  if/else tests, which the new code handles all from
-	  fl_draw().
-	- The Fl_File_Chooser dialog contained two hotspots.
-	- The fl_draw_pixmap() function didn't free the 2-byte
-	  color lookup table properly (delete instead of
-	  delete[]).
-	- fl_draw() reset the text color under WIN32, causing
-	  bitmaps to draw incorrectly.
-	- Fl::get_font_sizes() is now implemented under WIN32.
-	- Fl_Text_Display now uses the same default colors for
-	  selection and text as Fl_Input_ and friends.
-	- Changed the default line scrolling in Fl_Text_Display
-	  to 3 lines for the mouse wheel and scrollbar arrows.
-
-
-CHANGES IN FLTK 1.1.0b6
-
-	- Documentation updates...
-	- The configure script now works within the CygWin
-	  environment.
-	- Tooltips are now enabled by default, but are not
-	  re-enabled when calling the Fl_Widget::tooltip()
-	  method.
-	- Added new Fl::version() method to get the current
-	  FLTK library version (for shared libraries/DLLs)
-	- Added new Fl::event() method to get the current
-	  event that is being processed.
-	- Added new fl_beep() function to do audible
-	  notifications of various types.
-	- Added new Fl_GIF_Image, Fl_JPEG_Image, Fl_PNG_Image,
-	  Fl_PNM_Image, Fl_XBM_Image, and Fl_XPM_Image classes.
-	- Added new Fl_Shared_Image class, a la FLTK 2.0.
-	- Added new Fl_Tiled_Image class for tiled backgrounds.
-	- Added new copy(), desaturate(), inactive(), and
-	  color_average() methods to the Fl_Image classes.
-	- Added a horizontal scrollbar to the Fl_Help_View
-	  widget.
-	- Added new FL_PLASTIC_{UP/DOWN}_{BOX/FRAME} boxtypes
-	  for a more "modern" look (sort of a cross between KDE
-	  2.2 and Aqua.)
-	- Fl_Float_Input and Fl_Int_Input no longer accept
-	  pasted text that is not a floating point or integer
-	  value.  Pasted numbers now replace text in these
-	  widgets.
-	- Implemented the Fl_File_Icon::load_png() method.
-	- The Fl_File_Icon::load_system_icons() method now
-	  supports KDE 2.x icons.
-	- Fixed PNG support in Fl_Help_View.
-	- Removed the "Microsoft" mode button from the menubar
-	  demo.
-	- The browser demo now makes sure that the input field
-	  contains a number.
-	- The Fl_Browser::make_visible() method now range checks
-	  the input.
-	- Updated the fl_draw() and fl_measure() methods to
-	  accept an optional draw_symbols argument, which
-	  controls whether symbols are drawn in the text.
-	- Added new Fl::visible_focus() methods to control
-	  whether the focus box is drawn.
-	- The focus box is now drawn using the contrast color.
-	- Fl_Repeat_Button didn't accept keyboard focus.
-	- Added new Fl::visible_focus() method and standard
-	  "-kbd" and "-nokbd" options in Fl::args() processing
-	  to control whether keyboard focus is shown and handled
-	  by non-text widgets.
-	- The wrong tooltip could be shown if the user moved the
-	  mouse over adjacent widgets with tooltips.
-	- The drop-down button on Fl_Choice widgets was not
-	  limited in width.
-	- Tooltips could appear off the screen.
-	- Mouse wheel events are now sent to the focus widget
-	  first, then to any other interested widget.
-	- The Fl_RGB_Image class now supports images with an
-	  alpha channel.  Images are currently drawn using
-	  "screen door" transparency...  See the "image" demo
-	  for an example.
-	- Added new fl_create_bitmask() and fl_delete_bitmask()
-	  functions that create bitmap objects for masking and
-	  bitmap drawing.
-	- Was sending FL_RELEASE events for buttons 4 and 5
-	  under X11, which are only for FL_MOUSEWHEEL.
-	- Fl_Help_View now supports the EM and STRONG elements.
-	- Didn't do callbacks when changing tabs via keyboard.
-	- FLUID didn't write tooltip strings to the message
-	  catalog file.
-	- Fl_File_Icon now uses Fl_Shared_Image to load icon
-	  images; the load_png() and load_xpm() methods have
-	  been replaced by a single load_image() method.
-	- Fl_File_Icon::load_system_icons() now does a better
-	  job of finding KDE icons.
-	- Now use Fl::warning() and Fl::error() in place of
-	  printf's in some of the newer widgets.
-	- The default behavior of Fl::error() is now to display
-	  an error but not to exit; Fl::fatal() still exits.
-	- FLUID now uses the Fl_Shared_Image class, so FLUID-
-	  generated GUIs can embed any of the supported image
-	  file formats.
-	- New filename_relative() function to convert an
-	  absolute filename to a relative one.
-	- Updated the filename_absolute(), filename_expand(),
-	  and filename_setext() functions to take the
-	  destination string size, with inline functions for the
-	  old FL_PATH_MAX size.
-	- fl_file_chooser() and fl_dir_chooser() now return a
-	  relative path.
-	- Fl_Help_View now supports all ampersand escapes.
-
-
-CHANGES IN FLTK 1.1.0b5
-
-	**** NOTE: DUE TO CHANGES IN THE WIDGET CLASSES,  ****
-	****       YOU MUST RECOMPILE ALL SOURCE FILES    ****
-	****       THAT USE FLTK!!!                       ****
-
-	- All FLTK color values are now 32-bits and support
-	  both the legacy 8-bit color values as well as 24-bit
-	  RGB values (0xRRGGBB00 for 24-bit RGB, 0x000000II
-	  for indexed color).
-	- Fl::set_boxtype() and fl_internal_boxtype() now keep
-	  track of when a boxtype is changed; this allows you to
-	  override the "special" boxtypes without references to
-	  those boxtypes causing them to be reset.
-	- Fl_Help_Func now takes a Fl_Widget pointer as well as
-	  a pathname.
-	- Added code to support FL_KEYUP events.
-	- Focus did not return to the Fl_Text_Display and Editor
-	  widgets when scrolling and then clicking inside the
-	  editor window.
-	- Now set the line size of the vertical scrollbar in the
-	  text editor to 1.
-	- The symbols demo didn't show the strings needed to
-	  show the corresponding symbol (the label string was
-	  not quoted...)
-	- FLTK should now compile with Cygwin cleanly.
-	- Shortcut changes were not being saved by FLUID.
-	- FLUID didn't write the deimage() static data.
-
-
-CHANGES IN FLTK 1.1.0b4
-
-	**** NOTE: DUE TO CHANGES IN THE FL_WIDGET CLASS, ****
-	****       YOU MUST RECOMPILE ALL SOURCE FILES    ****
-	****       THAT USE FLTK!!!                       ****
-
-	- Updated the flags_ member of Fl_Widget to be an
-	  integer instead of uchar, to support the new
-	  FL_OVERRIDE flag for Fl_Window.
-
-	- The parent() method of Fl_Widget now uses pointers to
-	  Fl_Group instead of Fl_Widget.
-
-	- Fl_Window now provides the FLTK 2.0 "override()" and
-	  "set_override()" methods for windows.
-
-	- Added a configure check (and warning) for GCC 3.0.x.
-
-	- Updated the configure script to check for the
-	  png_set_tRNS_to_alpha() function.
-
-	- Updated the config.h files for all platforms for the
-	  image and FLTK documentation defines.
-
-	- Updated the makeinclude files for all platforms to
-	  match the current makeinclude.in file.
-
-	- FLUID would crash if you cleared an image for a
-	  widget.
-
-	- Fl_Help_View::add_image() did not initialize the image
-	  member of the base (unscaled) image.
-
-	- Fl_Help_View didn't support A elements with both a
-	  NAME and HREF attribute - the HREF was ignored.
-
-	- Miscellaneous compile warning fixes.
-
-	- Tooltips were being reset by Fl::belowmouse(), which
-	  caused problems with the FLUID main window (flashing
-	  tooltip windows and serious problems with KDE 2.2)
-
-	- The editor demo had the save and discard button
-	  actions reversed.
-
-	- The Fl_Help_View widget now uses
-	  png_destroy_read_struct() if the older
-	  png_read_destroy() function is not available.
-
-	- The WIN32 DLL library now includes the OpenGL widgets.
-	  This is a simpler solution for the export/import
-	  dillemma under WIN32, as OpenGL and non-OpenGL symbols
-	  need to be exported at different times with the
-	  separate library scheme.  Since OpenGL is standard
-	  under Windows, this is less of a problem than under
-	  UNIX...
-
-
-CHANGES IN FLTK 1.1.0b3
-
-	- The top-level makefile did not include the makeinclude
-	  file, causing the fltk-config installation commands to
-	  fail.
-
-	- The fl_file_chooser.cxx source file conflicted with
-	  Fl_File_Chooser.cxx under Windows.  Similarly, the
-	  fl_file_chooser.H header file conflicts with the
-	  Fl_File_Chooser.H header file.
-
-	- Now save and restore the GDI pen object when
-	  responding to WIN32 paint messages.
-
-	- Documentation updates from A. Suatoni.
-
-
-CHANGES IN FLTK 1.1.0b2
-
-	- New fltk-config script.
-
-	- Fixed image/text label handling; in b1 the label
-	  needed a non-blank text string to display the image. 
-	  This bug also caused all sorts of crashes and display
-	  problems.
-
-	- Added new filetype() method to Fl_FileBrowser to allow
-	  for file or directory browsing.
-
-	- Fixed the drawing of the focus box around
-	  Fl_Return_Button.
-
-	- Fixed menu item measurement bug (wasn't initializing
-	  image pointers to 0...)
-
-	- Radio and checkbox menu items now draw with the new
-	  style (round radio buttons with dots and square check
-	  buttons with check marks.)
-
-	- Improved the appearance of Fl_Check_Button.
-
-	- Improved the Fl_HelpView table formatting code; now
-	  dynamically sizes the table columns, and supports
-	  COLSPAN.
-
-	- The FLUID keyboard shortcuts now work as expected
-	  (CTRL-C copies, SHIFT-CTRL-C writes code, etc.)
-
-	- The FLTK_DOCDIR environment variable can now be
-	  used to tell FLUID where to find the on-line
-	  documentation files.
-
-	- FLUID now supports image labels in addition to text
-	  labels + text over image alignment.
-
-	- FLUID now supports tooltips.
-
-	- The widget panel in FLUID is now tabbed, a la FLTK
-	  2.0.
-
-	- The FLUID pixmap destructor tried to free 1 too many
-	  lines of image data.
-
-	- FLUID now provides on-line help.
-
-	- Changed Fl_FileXYZ to Fl_File_XYZ.
-
-	- Changed Fl_HelpXYZ to Fl_Help_XYZ.
-
-	- Tooltip fixes for Fl_Browser_, Fl_Choice, and Fl_Input_.
-
-	- Added tooltips to FLUID, help dialog, and file chooser.
-
-	- Now load system icons in FLUID.
-
-
-CHANGES IN FLTK 1.1.0b1
-
-	- Added new image() and deimage() methods to support
-	  image + text labels more easily.
-
-	- Added new alignment bit FL_ALIGN_TEXT_OVER_IMAGE.
-
-	- Added tooltip support using Jacques Tremblay's tooltip
-	  patch.
-
-	- Added keyboard navigation to all widgets.
-
-	- Added support for mouse wheels using the new
-	  FL_MOUSEWHEEL event type.  Get the mouse wheel
-	  movement values from Fl::e_dx (horizontal) and
-	  Fl::e_dy (vertical).
-
-	- Added the Fl_Check_Browser, Fl_FileBrowser,
-	  Fl_FileChooser, Fl_FileIcon, Fl_HelpDialog,
-	  Fl_HelpView, Fl_Progress, and Fl_Wizard widgets from
-	  the bazaar.
-
-	- Added 2.0 Fl_Text_Display and Fl_Text_Editor widgets
-	  based on NEdit.
-
-	- The Fl_Choice widget now looks more line a combo box
-	  than a Motif option menu.
-
-	- Moved the OpenGL widgets into a separate library
-	  called fltkgl - this eliminates shared library
-	  dependencies on OpenGL when no OpenGL functionality is
-	  used/required.
-
-	- FLUID now supports the new Fl_CheckBrowser,
-	  Fl_FileBrowser, Fl_FileIcon, Fl_HelpView,
-	  Fl_Text_Display, Fl_Text_Editor, and Fl_Wizard
-	  widgets.
-
-	- Updated configure stuff to support shared libraries
-	  under AIX (link to -lfltk_s)
-
-	- Symbol labels can now contain regular text.
-
-	- FLUID now supports relative filenames for the source
-	  and header files you generate.
-
-	- Fl_Menu_Item::add() didn't use the flags that were
-	  passed in.
-
-	- Fixed a bug in Fl_Scrollbar - clicking in the "trough"
-	  of the scrollbar would move the scroller in the wrong
-	  direction.
-
-	- Made the Forms pixmap parameter const to match the
-	  Fl_Pixmap.H definitions.
-
-	- Changed the Fl_Pixmap constructor to use the explicit
-	  keyword which should work for all C++ compilers.
-
-	- Fl_Menu_add of a menu item with the same name as an
-	  existing submenu title would mess up by replacing that
-	  menu title, it now adds a new item.
-
-	- Fl_Menu::add() of text starting with '/' to a menu is
-	  assummed to be a filename. So "/foo/bar" creates a
-	  single menu item. You can also put filenames into
-	  submenus by doing "submenu//foo/bar", this will create
-	  a submenu called "submenu" with an item "/foo/bar".
-	  Menu items starting with "\_" will insert an item
-	  starting with '_' rather than a divider line. These
-	  changes make the menus compatable with fltk 2.0.
-
-	- Another little fix for the BoXX OpenGL overlays.
-
-	- Fl_Gl_Window no longer blanks the mouse pointer on
-	  WIN32 unless an OpenGL overlay is being used.  This
-	  should make non-overlay displays faster when a cursor
-	  is set.
-
-
-CHANGES SINCE FLTK 1.0.10
-
-	- CHANGED THE DEFAULT RUN-TIME LINKING TO "MULTITHREADED
-	  DLL". You'll need to change your project settings to
-	  use this as well or you'll get errors.
-
-	- Added new --disable-gl option to configure script.
-
-	- Added new const const pointer versions of pixmap
-	  functions to eliminate an annoying pointer warning
-	  message that was generated by the Sun and other C++
-	  compilers.
-
-	- Eliminated all "var hides class::var" warnings.
-
-	- Eliminated all "string literal converted to char *"
-	  warnings.
-
-	- OS/2 updates from Alexander Mai.
-
-	- Tidied up the HTML documentation to be more standards
-	  compliant.
-
-	- Compiling with -DBOXX_BUGS will work around some
-	  problems with the newest X drivers that BoXX delivers,
-	  the problems all affect use of Overlays for normal X
-	  drawing and OpenGL drawing. Normal compilation is
-	  unchanged.
-
-	- The file chooser buttons use user_data() rather than
-	  the label to decide what to do, allowing the label to
-	  be somewhat cleaner.
-
-	- Selection color on X changed to blue, to match what
-	  happens on Windows now.
-
-	- Added support for AIX (static library only).
-
-	- Added support for SunOS 4.x
-
-	- Now process WIN32 WM_ACTIVATEAPP message to reset the
-	  key and button states in Fl::e_state.
-
-	- Fl_has_idle only tested N-1 callbacks and missed one.
-
-	- Restored WM_SYNCPAINT handling under WIN32; this fixed
-	  a refresh bug under some versions of Windows.
-
-	- Check for OpenGL headers before checking to see if
-	  OpenGL is supported.  This should eliminate compile
-	  errors due to missing non-FLTK header files...
-
-	- Add -D_INCLUDE_POSIX_SOURCE option when compiling with
-	  the HP compilers.
-
-	- Replaced remaining _WIN32 symbols with WIN32
-
-	- Removed reference to unused GL/glu.h header file, which is missing on
-	  some Linux systems.
-
-	- Fl_Gl_Window has a new method to allow you to get and set the context:
-
-	      void Fl_Gl_Window::context(void*, int destroy = 0)
-	      void* Fl_Gl_Window::context() const;
-
-	  Return or set a pointer to the GLContext that this window is
-	  using. This is a system-dependent structure, but it is portable to
-	  copy the context from one window to another. You can also set it to
-	  NULL, which will force FLTK to recreate the context the next time
-	  make_current() is called, this is useful for getting around bugs in
-	  OpenGL implementations.
-
-	  If destroy_flag is true the context will be destroyed by fltk when
-	  the window is destroyed, or when the mode() is changed, or the next
-	  time context(x) is called.
-
-	- Some cleanup of Fl_Gl_Choice to move most of the system dependent
-	  #ifdefs into Fl_Gl_Choice.cxx.
-
-	- Fl_Gl_Window does not set drawbuffer(BACKBUFFER) for
-	  single-buffered windows.
-
-	- Fl_Input::replace(...) correctly updates the display
-	  if the replaced region does not include the mark,
-	  point, or selected region.
-
-	- Added Fl::add_check(...), Fl::remove_check, and
-	  Fl::has_check. These are similar to idle callbacks but
-	  are only called just before it waits for new events.
-	  They can be used to watch for changes in global state
-	  and respond to them.
-
-	- "accu-timer": some changes to repeat_timeout that seem
-	  to make it accurate on Unix and WIN32 at speeds up to
-	  500000 timeouts/second (and 700000 on Linux), and
-	  within about .001% as accurate as the system clock.
-
-	- Fix to Fl_Valuator::step() by Guillermo Andrade.
-
-	- Fixed the FLUID write-menu bug introduced in 1.0.10
-
-	- Fl::flush() now calls GdiFlush() under WIN32 to
-	  ensure that all graphics are drawn.
-
-	- fl_curve() now uses a much better algorithim to figure
-	  out how many pieces to cut the curve into.
-
-	- FLUID now uses GetTempPath() under WIN32 to determine
-	  where to store the clipboard.
-
-	- Right-ctrl does not delete selected text in Fl_Input,
-	  until you type a composed character.
-
-	- Added simple FLTK and FLUID manual pages.
-
-	- Fl_Gl_Window leaked memory under WIN32.
-
-	- The colbrowser demo was missing an include file when
-	  compiled under OS/2.
-
-
-CHANGES SINCE FLTK 1.0.9
-
-	- Added a strcasecmp() function to FLUID; AIX doesn't
-	  have it.
-
-	- Bug #115509: Fl_Scroll not repainting background.
-
-	- Updated the configure script and makeinclude.in file
-	  to work with the Sun PRO compilers.
-
-	- Disabled the WIN32 async socket select code by default:
-	  it doesn't seem to work anymore...
-
-	- Fl::below_mouse() was incorrectly clearing e_is_click;
-	  this prevented any double-clicks from getting
-	  through...
-
-	- No longer clear Fl::keysym on every event, this makes
-	  better back compatability and fixes Win2000
-
-	- FLUID now restores which tab in an Fl_Tabs was
-	  selected when loads .fl files.
-
-	- Hack to fix the annoying "raise another application
-	  when a modal window is closed" problem on WIN32.
-
-	- Fl_Tabs now draws the background behind the tabs.
-
-	- Fl::set_fonts() on WIN32 fixed to work before the
-	  first window is shown.
-
-	- CUA function keys, code submitted by George Yohng
-	  <yohng@drivex.dosware.8m.com>
-
-	- Another attempt to get glut.h to work on WIN32.
-
-	- Fl_Menu_::add() ignores '&' signs when comparing menu
-	  items, so you don't have to make the shortcuts the
-	  same all the time.
-
-	- Fixed bit-flipping patterns in WIN32 bitmap code.
-
-	- Fixed size of data written by gif images to .C files
-
-	- Menu titles and buttons in the menubar can be images
-	  (allows it to be used as a toolbar)
-
-	- Reads selectBackground from the xrdb database to set
-	  the selection color. Adding this to your .Xdefaults
-	  will make fltk and Motif programs look much more
-	  Windoze-like:
-
-	      *selectForeground: white
-	      *selectBackground: #000080
-
-	- FL_WHEN_RELEASE on Fl_Input will now do the callback
-	  when the input field is hidden, for instance when it
-	  is on a tab and the user switches to another tab.
-
-	- Fl_Gl_Window with an overlay on X always resized any
-	  child windows even if you turned resizable() off
-	  because it turned it back on to resize the overlay
-	  window. This patch avoids changing resizable().
-
-	- Fix so multiple Fl::add_idle() calls works
-
-	- The input focus got messed up if you called
-	  Fl_Tabs::value(x) and there was something that took
-	  focus on an earlier tab.
-
-	- Removed some (not all) of the warnings when compiled
-	  with -Wwrite-strings, this should also get similar
-	  warnings Solaris produces.
-
-	- Made Fl_Browser not hide the Fl_Widget::show() method
-
-	- Changes & additions for OS/2 from Alexander Mai
-
-	- Patch from Mike Lindner to make the turning on/off of
-	  scrollbars on Fl_Scroll smarter.
-
-	- Added missing FL_EXPORT for Fl_Valuator::format()
-
-	- Shortcuts for "buttons" in a Fl_Menu_Bar work again.
-
-	- Fix for cut/paste support and Xdnd.
-
-	- Shortcuts for submenu titles in a menubar pop up the
-	  submenu (rather than calling the callback)
-
-	- Added documentation for GL_SWAP_TYPE
-
-	- Buttons with box(FL_NO_BOX) did not draw.  Apparently
-	  they did in older versions of fltk, I restored this.
-	  (bug 108771)
-
-	- Removed 8-bit colormap drawing code that was not doing
-	  anything in fl_draw_image due to the colormap
-	  allocation changes.  I also made fl_color(r,g,b)
-	  actually allocate the requested color rather than the
-	  nearest fltk color-cube color (this is only done for
-	  the first color that maps to a given entry in the fltk
-	  color cube), the result is that pixmaps with a small
-	  number of colors are drawn much more accurately. The
-	  resulting code seems to produce better images and is a
-	  good deal smaller!
-
-	- Fixed makeinclude.in so CFLAGS are used for c source
-	  code instead of CXXFLAGS. (bug 108694)
-
-	- Better fix for gif files suggested by pauly (bug
-	  108770)
-
-	- Performance of Fl_Gl_Window may be improved on some
-	  types of OpenGL implementations, in particular MESA
-	  or other software emulators, by setting the
-	  GL_SWAP_TYPE environment variable.  This variable
-	  declares what is in the back buffer after you do a
-	  swapbuffers:
-
-	      setenv GL_SWAP_TYPE COPY
-
-	      This indicates that the back buffer is copied to
-	      the front buffer, and still contains it's old
-	      data. This is true of many hardware
-	      implementations.  Setting this will speed up
-	      emulation of overlays, and widgets that can do
-	      partial update can take advantage of this as
-	      damage() will not be cleared to -1.
-
-	      setenv GL_SWAP_TYPE NODAMAGE
-
-	      This indicates that nothing changes the back
-	      buffer except drawing into it.  This is true of
-	      MESA and Win32 software emulation and perhaps some
-	      hardware emulation on systems with lots of memory.
-
-	  All other values for GL_SWAP_TYPE, and not setting
-	  the variable, cause fltk to assumme that the back
-	  buffer must be completely redrawn after a swap.
-
-	  This is easily tested by running the gl_overlay demo
-	  program and seeing if the display is correct when
-	  you drag another window over it or if you drag the
-	  window off the screen and back on. You have to exit
-	  and run the program again for it to see any changes
-	  to the environment variable.
-
-	- Optimized colormap usage on 8-bit displays with
-	  images. New code only allocates colors as they are
-	  needed (still converts indexed images to full RGB and
-	  dithers, tho...)
-
-	- Fixed .gif files in FLUID, they were broken by the fix
-	  for large .xpm files in version 1.0.9.
-
-	- Fix for OpenGL hardware overlays with the transparent
-	  index != 0. Tested on the brand new HP Linux
-	  Workstations, this is the only bug encountered.  Both
-	  X and OpenGL hardware overlay works perfectly on
-	  these, though configue may not enable it by
-	  default...)
-
-	- Fl_Choice and all other Fl_Menu_ subclasses draw the
-	  items using textcolor() as the default color of the
-	  text.
-
-	- Fix suggested by Stuart Levy to fix scrolling when
-	  deleting items from the browser.
-
-	- Replaced the -$(MAKEFLAGS) with $(MFLAGS) as per the
-	  gmake documenation.  Apperntly this works with other
-	  make programs and MAKEFLAGS is passed invisibly by
-	  gmake, though the documenation is not too clear...
-
-
-CHANGES SINCE FLTK 1.0.8
-
-	- More documentation fixes.
-	- GLUT_STROKE_*_ROMAN in glut.h are defined as 0,1 on
-	  WIN32 to match the glut header files there.
-	- Added Fl::has_timeout() and Fl::has_idle() functions.
-	- Added new Fl::repeat_timeout() method that
-	  measures time from when the last timeout was called. 
-	  This has slightly less overhead and allows accurate
-	  spacing of timeouts.
-	- More Cygwin changes
-	- FLUID could crash with identifiers with trailing
-	  whitespace.
-	- Fixed the XPM loading code in FLUID to handle files
-	  longer than 2048 lines.
-	- Added a bunch of missing FL_EXTERN's to glut.h to
-	  eliminate GLUT linking errors under WIN32.
-	- Fix for sliders so that clicking on one with a small
-	  (or zero) slider_size will not move the slider.
-	- fl_shortcut.cxx didn't export fl_old_shortcut() in the
-	  WIN32 DLL.
-	- Fixed xpaint link in the documentation.
-	- Included Fl_Input word-wrap fixes from Alexander Rabi
-	  Beels. This will not affect things much because
-	  word-wrap is normally disabled.
-	- Patch from Stuart Levy so the *last* widget in an
-	  Fl_Pack may be resizable.  This should be compatable
-	  because resizable didn't do anything before so there
-	  was no reason to set it.
-	- Cleaned up the timeout and Fl::wait() code.  The new
-	  code calls the clock function less than half as much,
-	  which results in a noticable performance improvement
-	  in some apps.
-	- Fl::wait(time) with a time greater than the system can
-	  handle (24.855 days on NT, the same on some Unix
-	  systems) will now act as though the time is infinity. 
-	  Before it would do unpredictable things.
-	- "USE_POLL" now compiles and works, although it is
-	  disabled by default. poll() is an alternative to the
-	  UNIX select() call which is available on some version
-	  of UNIX and may be faster depending on the platform;
-	  try it by editing config.h.
-	- The WIN32 USE_ASYNC_SELECT code now does translation
-	  and dispatching of the select events; this makes
-	  Windows a lot happier.
-	- Added a check for an open display in Fl::wait() so
-	  that you don't need an open window under X to call it.
-
-	  [changes in snapshot 2]
-
-	- fl_old_shortcut() wasn't being exported in the WIN32 DLL
-	  project.
-	- Updated Cygwin and Mingw makefiles.
-	- Updated the BC++ project file.
-	- You can no longer insert control chars into Fl_Int/Float_Input.
-	- Fl_Multiline_Input now resets the horizontal position when
-	  focus is changed; this caused problems when multiple multiline
-	  widgets were used in an application.
-	- All handle() methods are now public, and all draw() methods are
-	  now protected in FLTK widgets.
-	- More fixes to the OpenGL overlay code on win32.  This now
-	  seems to work quite reliably on several different pieces of
-	  hardware. Apparently doing SetLayerPaletteEntries with a
-	  palette larger than the overlay size caused the drivers to
-	  screw up in unpredictable ways. Also SwapBuffers swapped both
-	  the overlay and main window, which is not what fltk's
-	  interface wanted, this was easy to fix however.
-	- Patch for full scrollbars so that clicking on them does not
-	  move anything.
-	- Documentation fixes.
-	- Better horizontal scrolling of Fl_Input when cursor is near
-	  the end of the line.
-	- Fl_Input::value(x) selects all text.
-	- Fl_Output and Fl_Multiline_Output would scroll to the end
-	  of the text.
-	- filename_isdir() now drops any trailing slash from the
-	  filename (needed for Windows)
-	- Added return type for main() function in line_style demo.
-	- Running FLUID with the "-cs" option writes the I18N message
-	  file.
-	- The WIN32 version of XParseGeometry() didn't initialize some
-	  variables.  This caused a compiler warning but did not affect
-	  the actual code.
-
-	  [changes in snapshot 1]
-
-	- EMail changes - fltk-bugs@easysw.com now officially
-	  fltk-bugs@fltk.org.
-	- The FLTK DLL project file didn't include fl_compose.cxx
-	- Dropped the GCC -fno-rtti option since it caused problems
-	  with existing programs.
-	- Moved the .fl rules back to the test directory.
-	- Fixed some makefile and spec file problems.
-	- Fixed hardware overlays.  The problem was the new
-	  fl_clipped() code, which tests against the current window
-	  size.  The hardware overlay code did not set the current
-	  window when drawing the overlay.  I needed hardware overlay
-	  for DD's code, I'm not sure if these fixes are good enough to
-	  enable this in our general release.  Hardware overlay still
-	  only works on SGI Irix.
-	- Some patches to turn off the MSVC++ -Oa (assumme no aliasing)
-	  optimization flag.  Suprisingly this only broke a few parts
-	  of fltk, or at least these are the only ones I found.
-	- Does not unmap child windows when the main window is
-	  iconized.  This reduces flashing when the window is
-	  deiconized.
-	- Fl::key() is set to zero by all events except key down/up. 
-	  This will allow you to reliably test if an event or callback
-	  was produced by a keystroke.  Fixes the bug posted about
-	  stopping Escape from closing the window.
-	- User defined cursors on OpenGL windows slowed down NT a
-	  *LOT*.  Some attempts to fix this by turning off the cursor
-	  while drawing the window.
-	- Filename completion in the file chooser works better on NT. 
-	  Typing TAB fixes the case of everything you typed to match
-	  the shortest name that can be completed.
-
-
-CHANGES SINCE FLTK 1.0.7
-
-	- Many documentation changes/fixes/improvements.
-	- FLUID didn't save Fl_Double_Window's as
-	  double-buffered windows.
-	- Fl_Menu_ text color is used if Fl_Menu_Item text color
-	  is not set.
-	- Added Fl::first_window(window) method to change the
-	  "top" window that is used when showing modal windows.
-	  By default it is the window the user last
-	  clicked/typed in.
-	- The Fl_Menu::global() handler now uses the current top
-	  window instead of the menu bar for modal stuff.
-	- Added fl_line_style() function to set the line style. 
-	  Note that user-defined line styles ONLY WORK UNDER X11
-	  and Windows NT/2000. Windows 95/98 do, however,
-	  support the "standard" line styles.
-	- Fl::wait() does not return immediately when no windows
-	- XForms keyboard shortcuts using hex keycode constants
-	  now work.
-	- Updated the configure script for *BSD and to turn off
-	  exceptions and RTTI in the FLTK library itself (does
-	  not affect applications which use these things)
-	- FLUID now supports I18N using the POSIX or GNU
-	  mechanisms.
-	- Fixed definition of glutBitmapWidth to match header
-	  file.
-	- Does not turn visible() on when a window is iconized()
-	  or if a modal window is shown and it's parent is
-	  iconized.  This allows the code "while (w->visible()
-	  && w->damage()) Fl::check();" to reliably wait for the
-	  window to be mapped and drawn the first time.
-	- Setting box(FL_NO_BOX) on a button makes it an
-	  invisible overlay
-	- FL_NORMAL_SIZE is now a global variable so you can
-	  change the default text size prior to creating your
-	  widgets.
-	- Menus now draw properly with a box type of
-	  FL_FLAT_BOX.
-	- Cygwin fixes to compile in POSIX mode.
-	- Fl_Value_Input callback can call value() or
-	  destructor.
-	- OpenGL overlays now work under Windows NT!
-	- Fl_Slider and Fl_Scrollbar could cause a divide by
-	  zero.
-	- Clicking in an Fl_Input field no longer selects the
-	  whole field, it just moves the text cursor.
-	- Tru64 UNIX fixes for filename_list()
-	- Fl_Browser now draws itself properly when deactivated.
-	- FLUID GUIs now use Courier font for all code input.
-	- The FLUID OK and Cancel buttons are now all shown in
-	  the same order in all windows.
-	- Fixes to compile under GCC 2.95.2
-	- Fixed the BC5 project files.
-	- FL_LEFT_MOUSE and friends are now in
-	  <FL/Enumerations.H>
-	- Fixes for fake OpenGL overlay code under WIN32.
-	- Message windows are now resizeable.
-	- On WIN32 non_modal (but not modal) windows have the
-	  close and size boxes.
-	- Fl_Button and friends didn't honor the
-	  FL_WHEN_NOT_CHANGED condition.
-	- Disabled XDBE on all platforms.
-	- XGetDefault patch from James Roth
-	- New fl_open_display(Display *) function to allow FLTK
-	  to share a display connection with another toolkit
-	  (like Xt, GTK, etc.)
-	- Shortcut labels for special keys should now display
-	  properly under WIN32.
-	- fl_set_fonts() did not reuse fonts.
-	- Fixed shortcut problem under WIN32 when the focus
-	  window changes.
-	- "dead" keys should now work under X11.
-	- Fixes to make FLTK compile with GCC 2.95.2
-	- FL_SHORTCUT fix for I18N.
-	- Fixed cut/paste problems under WIN32
-	- FLUID now produces correct code for nested class
-	  destructors.
-	- Nested windows should now redraw properly under WIN32.
-	- "table" is now static in fl_cursor.cxx
-	- Fl_Chart used the textcolor() and not the color() for
-	  horizontal bar charts.
-	- Now set the input hint for TWM and TWM-derived window
-	  managers.
-	- Now look for TrueColor visual if FLTK is compiled with
-	  USE_COLORMAP == 0.
-	- Fl_Scrollbar could generate a divide-by-0 error if the
-	  min and max values were the same.
-	- Fl_Menu_::remove() now removes whole submenus if
-	  needed.
-	- Scrollbar buttons now draw themselves pushed in as
-	  needed.
-	- Fixed the gl_overlay demo (and gl overlays in general)
-	  when they are faked with no hardware and the window is
-	  resized.
-	- Selections weren't shown in Fl_Browser widgets when an
-	  item used the @B (background) format.
-	- Windows can now be resized by the program under X11
-	  for more window managers.
-	- OS/2 makeinclude updates.
-	- Added Fl.H required by an inline function in
-	  Fl_Repeat_Button.H
-	- Fl_add_idle adds new functions to the end of the queue
-	  ring, rather than the start, so they are executed in
-	  the order added, and a callback that adds itself does
-	  not prevent others from being called.
-	- FLUID lets you type in code that starts with '#' for
-	  cpp directives.
-	- XBell() could be called before the X11 display was
-	  opened, causing a segfault.
-	- Fixed Fl_Gl_Window::ortho() - Borland C++ doesn't
-	  define GLint to "int", but instead to "long"...
-	- Fixed Fl_Browser scrollbars within an Fl_Scroll
-	  widget.
-	- Fl_Output (and non-focused Fl_Input) now scroll in
-	  response to position()
-	- Fl_Input now does not scroll horizontally if the
-	  entire string will fit in the widget.
-	- Fl_Scrollbar didn't push the right arrow buttons when
-	  you clicked outside the scroller.
-	- Now use WSAAsyncSelect() for better socket performance
-	  with Fl::add_fd()
-
-
-CHANGES SINCE FLTK 1.0.6
-
-	- Fixed Fl_Input_ bug under WIN32 - no longer stop accepting input
-	  when one of the "Windows" keys is pressed.
-	- Now call TranslateEvent for all events under WIN32.
-	- Fixes for OpenBSD and NetBSD
-	- The FL_CURSOR_HAND cursor now uses the IDC_HAND cursor instead of
-	  IDC_UPARROW under Windows 98 and 2000.
-	- Fl_Scrollbar now does a page-up/down when you click outside the
-	  scroller.
-	- Fl_Window::show(0, NULL) causes core dump
-	- Fixed a compile-time error in fl_call_main.c for Borland C++.
-	- "fluid -c filename.fl" would try to open an X display if the
-	  FLUID file contained an Fl_Browser widget.
-	- Fl_Browser now correctly measures items with @C or @B color
-	  formatting commands.
-	- Fixed a bitmap drawing bug for WIN32 (bit reversal table was wrong)
-	- fl_xyz() dialogs now set a title in the title bar.
-	- fl_alert() sounds the bell under X11.
-	- fl_xyz() dialogs now call MessageBeep() under WIN32.
-	- Fl_Browser_ didn't draw the selection box with the inactive color
-	  when the browser wasn't activated.
-	- Fl_Browser now responds to FL_KEYBOARD as well as FL_SHORTCUT.  If
-	  you subclass it to accept focus then keyboard navigation will work.
-	- Fl_Tile and Fl_Tabs do their callback when the user changes their
-	  display.
-	- Made some of the private methods of Fl_Browser protected.
-	- Now set win_gravity correctly, this helps some X
-	  window managers that use it position the window where
-	  FLTK wants it to be.
-	- 0-width browsers crashed.
-	- Minor change: if the X window manager does not do
-	  anything else with windows that don't have their
-	  position specified, the windows appear centered in the
-	  screen, rather than in the top-left corner.  This
-	  happened with modal windows under Irix 4Dwm.  This
-	  also causes windows to be centered when no window
-	  manager is running, which might be useful for
-	  installation gui programs?
-	- Clicking in an Fl_Input field the first time selects the entire
-	  field.
-	- Clicking the middle mouse button in an Fl_Input field now inserts
-	  the text at the indicated position instead of the cursor position.
-	- Drag-selecting text in an Fl_Input field now copies the text
-	  automatically.
-	- Fl::flush() no longer calls the draw() method for invisible windows.
-	- Calling deactivate() on an invisible widget could cause an
-	  infinite loop in some obscure cases.
-	- Added #pragma's for SGI C++ compilers - the 6.{23} X headers had
-	  errors in them.
-	- Fl_Gl_Window::ortho() changed so that text and images
-	  are not erased if the origin is off the left/bottom of the
-	  window.
-	- Small change to Fl_Input so that a click that gives it
-	  the focus also selects all the text.
-	- Fixed a slider drawing problem.
-	- You can now add/delete children of Fl_Tabs widgets whether or
-	  not they are visible.
-	- Now embed woff options for SGI C++ compilers (gets rid of X11
-	  header warnings)
-	- draw_pixmap used a cast that the Digital UNIX C++ compiler didn't
-	  like.
-	- The GLUT function key constants were off by one.
-	- The XPM reading code didn't handle RGB colors other than #rrggbb.
-
-
-CHANGES SINCE FLTK 1.0.5
-
-    - Fl_win32.cxx defined WM_MOUSE_LEAVE instead of WM_MOUSELEAVE.
-    - Fl_get_key_win32.cxx needed to include <ctype.h>
-    - gl_draw_pixmap.cxx needed a pointer cast for ANSI C++.
-    - Fl_Repeat_Button didn't always delete its timeout.
-    - Now keep track of the current OpenGL context; this provides
-      significant performance improvements for OpenGL applications
-      with a single context.
-
-
-CHANGES SINCE FLTK 1.0.4
-
-    - Fl_Roller didn't handle a width and height of 0.
-    - filename_list() fix for FreeBSD.
-    - Fixed RPM install docos - needed "--install" option...
-    - Fl_Browser_ wouldn't draw the vertical scrollbar right away if it
-      added a horizontal one which covered the last line.
-    - Fl_Tabs problems - single-character labels don't show up (problem in
-      measure_tabs() or measure_label() methods?), and doesn't clear top
-      tab area before drawing tabs.
-    - Fl_Browser needs a destructor.
-    - fl_draw_label() quoted characters between 0x80 and 0xa0, which
-      caused problems for some programs using the WinANSI character set.
-    - FLUID didn't handle declared class destructors.
-    - Fixed another WIN32 cut/paste bug.
-    - Fl_Tabs didn't work properly when there was only 1 tab.
-    - Fl_Menu::add() didn't delete the old array.
-    - Fl_Repeat_Button didn't delete its timeout when disabled.
-    - fl_draw() would crash if no font was set (now defaults to
-      a 14-pixel Helvetica font)
-    - Can't forward declare classes; need to check for "class ", "struct ",
-      "union ", etc.  See Bill's message
-    - Added #pragma around xlib.h for IRIX
-    - FL_KEYBOARD events have the correct x/y when sent to child X
-      windows. Note that if you worked around this bug by adjusting the
-      x/y yourself you will have to change your code. In addition all
-      events have the correct x/y when sent to the grab() widget.  And
-      the code to do all this was simplified a lot.
-    - The XPM code didn't handle named colors with spaces in the names.
-    - Pressing ESCape closed the window with pointer focus, even if there
-      was a modal window open (now closes the modal window).
-    - FLUID no longer produces trigraphs accidentally in the image data.
-    - FLUID uses string constant concatenation to produce shorter image
-      data.
-    - The Fl_Group deletion code crashed if there was exactly one child
-      widget.
-    - Simulated overlays in single-buffered Fl_Gl_Windows now draw
-      correctly (though very slowly as it requires the entire window to
-      be redrawn to erase the overlay).  This fix ported our Digital
-      Domain programs better to systems with no overlay hardware.
-    - Added support for extern "C" declarations in FLUID.
-    - Added Fl_Pack support to FLUID.
-    - Fixed the order of #include's in FLUID generated header files.
-    - Fixed detection of vsnprintf and snprintf under HP-UX 10.20 once
-      and for all.
-    - The checkers demo did not compile with GCC 2.95
-    - FLUID didn't output virtual destructors properly.
-    - Added inline "make_visible()" method to Fl_Browser.
-    - Fl::wait() now returns immediately if any timeouts are
-      called.
-    - 16-bit XPM files are now properly handled.
-    - Fl_Window::resize() was missing FL_EXPORT (caused problems
-      with Windows DLLs)
-    - FLUID was writing extern declarations twice.
-    - New FLUID arrow key functionality: arrows move by one pixel, shift+arrow
-      resizes, ctrl+arrow steps by grid
-
-
-CHANGES SINCE FLTK 1.0.3
-
-    - Documentation updates
-    - Fl_Browser::bottomline(size) didn't scroll to the bottom
-      if the second-to-last line was visible.
-    - fl_wait() didn't poll FDs properly for WIN32.
-    - Fixed DLL definitions for BC++.
-    - FLUID now handles nested classes properly.
-    - The "connect" demo now does a wait() for the PPP process
-      so that you aren't left with a lot of zombie processes.
-    - Fixed the FLTK colormap to use FF instead of F4 for full
-      intensity values.
-    - Minor change to scrollbar drawing code to match other
-      toolkits.
-    - New selections would cancel themselves out in WIN32.
-    - The header file links were broken in the IRIX
-      distributions.
-    - fl_elapsed() now always uses GetClockTick() for WIN32.
-    - fl_display is now initialized to GetModuleHandle(NULL) -
-      this fixes problems people had with Cygwin and MingW32.
-    - WinMain() is no longer compiled in with Cygwin and
-      MingW32; it wasn't being used for those compilers anyways.
-    - Added Solaris compiler options to configure script.
-    - Fl_Value_Input wouldn't update properly if you set the
-      value from a callback.
-    - Fl_Tile wouldn't resize if the resizeable widget was the
-      last child.
-    - Was missing #include <ctype.h> and #include <stdlib.h> in
-      several files, which caused problems on some platforms.
-    - Fixed another case where Fl_Browser_ could get in an
-      infinite resizing loop.
-    - Fl_win32.cxx now includes <FL/filename.H> to export missing
-      DLL symbols.
-    - FLUID didn't handle member functions that include the
-      scope operator.
-    - Fl_Chart was dividing by 0 if there were no data samples
-      or if they were all the same (min == max).
-
-
-CHANGES SINCE FLTK 1.0.2
-
-    - XDBE is now enabled for IRIX 6.[234] as well as 6.5.
-    - FLUID didn't write the when() condition properly.
-    - Tab/space/backtab/backspace can be used to navigate
-      through menus.
-    - Changed $(DSONAME) in the src/Makefile to "libfltk.so.1
-      libfltk.sl.1".
-    - Fl_Browser could read past the end of the string when
-      computing the item height.
-    - Fl_Browser could get in an infinite loop when checking to
-      see if scrollbars needed to be displayed.
-    - FLUID now honors the return type of the outermost widget. 
-      This was a problem when substituting Fl_Group in an
-      Fl_Window widget.
-    - Fl_Menu_::copy() wasn't allocating a power of 2 for the
-      array size.
-    - FLWM would crash if fl_xmousewin was deleted.
-    - The fast_slow demo now uses output widgets.
-    - Timers under WIN32 were unreliable.
-
-
-CHANGES SINCE FLTK 1.0.1
-
-    - Documentation updates
-    - The Visual C++ project files didn't include fl_add_idle.cxx.
-    - LIBRARY/DSO name inconsistencies in src/Makefile.
-    - src/Makefile didn't clean the DSO.
-    - The valuator demo now has only a single callback.
-    - The code looked for HAVE_SYS_SELECT_H, but the
-      config file uses HAVE_SYS_SELECT.
-    - Fl_Image redraw not quite right under X11 or WIN32
-    - Problems with timeouts & cube demo under WIN32
-    - FLUID problems with inline functions.
-    - Documentation fixes...
-    - Fl_Browser::item_height() didn't handle blank lines or
-      non-default fonts properly.
-    - FL/math.h didn't have #ifndef...#define...#endif guards
-      against multiple inclusion...
-    - Fl_Menu_::copy() fix - didn't allocate power of 2...
-    - Fl::damage() now remains true until all windows are actually
-      redrawn.
-    - Fl_Widget destructor, hide(), and deactivate() methods no longer
-      send FL_LEAVE, FL_RELEASE, or FL_UNFOCUS events to the widget
-      (which could cause applications to crash).
-    - FLUID now outputs symbolic names for align() and when().
-    - Fixed select() to use maxfd + 1 instead of maxfd.
-    - Added "Fl::remove_fd(fd, when)" function so you can remove the
-      read and write callbacks separately.
-    - The Fl::add_fd() and Fl::add_timeout() arrays are now dynamically
-      allocated.
-    - FLUID didn't always turn the FL_SUBMENU flag on for submenu titles.
-    - The "extra code" in FLUID now is placed before the "o->end()" call
-      for Fl_Group and its derived classes.
-    - You can now set a FL_Window widget's class in FLUID to Fl_Group to
-      generate a function or class that builds part of a GUI (i.e. no window).
-    - FLUID now displays "Save file before exiting?" with the standard yes,
-      no, and cancel buttons rather than "Discard changes?".
-    - Fl_Menu_::add() now works with any type of menu, even one set with
-      the menu() method.
-    - The keypad keys were not always decoded properly under X11.
-    - Some pointers were not being turned off when widgets were deleted,
-      which caused some applications (like FLWM) to crash.
-
-
-CHANGES SINCE FLTK 1.0
-
-    - Documentation fixes.
-    - Fl::check() didn't return the correct value, breaking a number
-      of applications.
-    - Fixed FLUID bug that caused styles patch to crash when you delete
-      a menu item.
-    - Updated valuators demo to put the values in the gui box.
-    - Fl_Browser_::item_height() didn't always compute the correct
-      value.
-    - Fixed the alignment of Fl_Choice text.
-    - Fixes for OS/2.
-    - Fl_Menu_Item::clear() didn't clear value.
-    - Added some changes to make FLTK work with Borland C++.
-    - ANSI C++ fixes.
-    - Plugged a memory leak in the fractal demo.
-    - Fl::add_timeout() didn't work under WIN32 with small values.
-    - The configure script and makefiles now define DSONAME and
-      use the static library for all example programs.    
diff --git a/common/fltk/CMake/posixScandir.cxx b/common/fltk/CMake/posixScandir.cxx
deleted file mode 100644
index ea57e9c..0000000
--- a/common/fltk/CMake/posixScandir.cxx
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#include <dirent.h>
-
-int func (const char *d, dirent ***list, void *sort) {
-  int n = scandir(d, list, 0, (int(*)(const dirent **, const dirent **))sort);
-}
-
-int main() {
-  return 0;
-}
diff --git a/common/fltk/CMakeLists.txt b/common/fltk/CMakeLists.txt
deleted file mode 100644
index 5d1d476..0000000
--- a/common/fltk/CMakeLists.txt
+++ /dev/null
@@ -1,258 +0,0 @@
-#
-# "$Id: CMakeLists.txt 8198 2011-01-06 10:24:58Z manolo $"
-#
-# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
-# Written by Andy Cedilnik and Julien Jomier
-#
-# Copyright 1998-2010 by Bill Spitzak and others.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA.
-#
-# Please report all bugs and problems on the following page:
-#
-#     http:#www.fltk.org/str.php
-#
-
-#######################################################################
-# basic setup
-#######################################################################
-project(FLTK)
-cmake_minimum_required(VERSION 2.6)
-
-# The FLTK version
-set(FLTK_VERSION_MAJOR "1")
-set(FLTK_VERSION_MINOR "3")
-set(FLTK_VERSION_PATCH "0")
-set(FLTK_VERSION "${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}")
-set(FLTK_VERSION_FULL "${FLTK_VERSION}.${FLTK_VERSION_PATCH}")
-
-# Search for modules in the FLTK source dir first
-set(CMAKE_MODULE_PATH "${FLTK_SOURCE_DIR}/CMake")
-
-include_directories(BEFORE ${FLTK_BINARY_DIR} ${FLTK_SOURCE_DIR})
-
-#######################################################################
-# platform dependent information
-#######################################################################
-
-include(TestBigEndian)
-TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
-
-if(APPLE)
-   set(__APPLE_QUARTZ__ 1)
-   set(HAVE_STRTOLL 1)
-   set(HAVE_STRCASECMP 1)
-   set(HAVE_DIRENT_H 1)
-endif(APPLE)
-
-if(WIN32)
-   if(MSVC)
-      add_definitions(-DWIN32_LEAN_AND_MEAN)
-      add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-   endif(MSVC)
-endif(WIN32)
-
-#######################################################################
-# size of ints
-include(CheckTypeSize)
-
-CHECK_TYPE_SIZE(short SIZEOF_SHORT)
-CHECK_TYPE_SIZE(int   SIZEOF_INT)
-CHECK_TYPE_SIZE(long  SIZEOF_LONG)
-CHECK_TYPE_SIZE("long long"  HAVE_LONG_LONG)
-
-if(${SIZEOF_SHORT} MATCHES "^2$")
-   set(U16 "unsigned short")
-endif(${SIZEOF_SHORT} MATCHES "^2$")
-
-if(${SIZEOF_INT} MATCHES "^4$")
-   set(U32 "unsigned")
-else()
-   if(${SIZEOF_LONG} MATCHES "^4$")
-      set(U32 "unsigned long")
-   endif(${SIZEOF_LONG} MATCHES "^4$")
-endif(${SIZEOF_INT} MATCHES "^4$")
-
-if(${SIZEOF_INT} MATCHES "^8$")
-   set(U64 "unsigned")
-else()
-   if(${SIZEOF_LONG} MATCHES "^8$")
-      set(U64 "unsigned long")
-   endif(${SIZEOF_LONG} MATCHES "^8$")
-endif(${SIZEOF_INT} MATCHES "^8$")
-
-#######################################################################
-# check for headers, libraries and functions
-#######################################################################
-# headers
-find_file(HAVE_DIRENT_H dirent.h)
-find_file(HAVE_FREETYPE_H freetype.h PATH_SUFFIXES freetype2)
-find_file(HAVE_LOCALE_H locale.h)
-find_file(HAVE_NDIR_H ndir.h)
-find_file(HAVE_PTHREAD_H pthread.h)
-find_file(HAVE_SYS_DIR_H sys/dir.h)
-find_file(HAVE_SYS_NDIR_H sys/ndir.h)
-find_file(HAVE_SYS_SELECT_H sys/select.h)
-find_file(HAVE_SYS_STDTYPES_H sys/stdtypes.h)
-
-mark_as_advanced(HAVE_FREETYPE_H)
-mark_as_advanced(HAVE_SYS_DIR_H)
-mark_as_advanced(HAVE_SYS_NDIR_H HAVE_SYS_SELECT_H)
-mark_as_advanced(HAVE_SYS_STDTYPES_H)
-
-# where to find freetype headers
-find_path(FREETYPE_PATH freetype/config/ftheader.h PATH_SUFFIXES freetype2)
-if(FREETYPE_PATH)
-   include_directories(${FREETYPE_PATH})
-endif(FREETYPE_PATH)
-mark_as_advanced(FREETYPE_PATH)
-
-#######################################################################
-# functions
-include(CheckFunctionExists)
-
-if(HAVE_DLFCN_H)
-   set(CMAKE_REQUIRED_LIBRARIES dl)
-endif(HAVE_DLFCN_H)
-CHECK_FUNCTION_EXISTS(dlsym                  HAVE_DLSYM)
-
-CHECK_FUNCTION_EXISTS(localeconv             HAVE_LOCALECONV)
-
-CHECK_FUNCTION_EXISTS(scandir                HAVE_SCANDIR)
-CHECK_FUNCTION_EXISTS(snprintf               HAVE_SNPRINTF)
-
-CHECK_FUNCTION_EXISTS(strlcat                HAVE_STRLCAT)
-CHECK_FUNCTION_EXISTS(strlcpy                HAVE_STRLCPY)
-CHECK_FUNCTION_EXISTS(strtoll                HAVE_STRTOLL)
-CHECK_FUNCTION_EXISTS(vsnprintf              HAVE_VSNPRINTF)
-
-set(CMAKE_REQUIRED_LIBRARIES)
-
-if(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
-   set(MSG "POSIX compatible scandir")
-   message(STATUS "Looking for ${MSG}")
-   try_compile(V
-      ${FLTK_BINARY_DIR}
-      ${FLTK_SOURCE_DIR}/CMake/posixScandir.cxx
-      )
-   if(V)
-      message(STATUS "${MSG} - found")
-      set(HAVE_SCANDIR_POSIX 1 CACHE INTERNAL "")
-   else()
-      message(STATUS "${MSG} - not found")
-      set(HAVE_SCANDIR_POSIX HAVE_SCANDIR_POSIX-NOTFOUND)
-   endif(V)
-endif(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
-mark_as_advanced(HAVE_SCANDIR_POSIX)
-
-#######################################################################
-# options
-#######################################################################
-if(APPLE)
-   option(OPTION_APPLE_X11 "use X11" OFF)
-endif(APPLE)
-
-if(NOT APPLE OR OPTION_APPLE_X11)
-   include(FindX11)
-   if(X11_FOUND)
-      set(USE_X11 1)
-   endif(X11_FOUND)
-endif(NOT APPLE OR OPTION_APPLE_X11)
-
-#######################################################################
-option(OPTION_USE_POLL "use poll if available" OFF)
-
-if(OPTION_USE_POLL)
-   CHECK_FUNCTION_EXISTS(poll USE_POLL)
-endif(OPTION_USE_POLL)
-
-#######################################################################
-option(OPTION_USE_THREADS "use multi-threading" ON)
-
-if(OPTION_USE_THREADS)
-   include(FindThreads)
-endif(OPTION_USE_THREADS)
-
-if(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
-   add_definitions("-D_THREAD_SAFE -D_REENTRANT")
-   set(USE_THREADS 1)
-   set(FLTK_THREADS_FOUND TRUE)
-else()
-   set(FLTK_THREADS_FOUND FALSE)
-endif(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
-
-if(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
-   set(HAVE_PTHREAD 1)
-   set(FLTK_PTHREADS_FOUND TRUE)
-else()
-   set(HAVE_PTHREAD 0)
-   set(HAVE_PTHREAD_H 0)
-   set(FLTK_PTHREADS_FOUND FALSE)
-endif(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
-
-#######################################################################
-if(X11_Xinerama_FOUND)
-   option(OPTION_USE_XINERAMA "use lib Xinerama" ON)
-endif(X11_Xinerama_FOUND)
-
-if(OPTION_USE_XINERAMA)
-   set(HAVE_XINERAMA ${X11_Xinerama_FOUND})
-   include_directories(${X11_Xinerama_INCLUDE_PATH})
-   set(FLTK_XINERAMA_FOUND TRUE)
-else()
-   set(FLTK_XINERAMA_FOUND FALSE)
-endif(OPTION_USE_XINERAMA)
-
-#######################################################################
-if(X11_Xft_FOUND)
-   option(OPTION_USE_XFT "use lib Xft" ON)
-endif(X11_Xft_FOUND)
-
-if(OPTION_USE_XFT)
-   set(USE_XFT X11_Xft_FOUND)
-   set(FLTK_XFT_FOUND TRUE)
-else()
-   set(FLTK_XFT_FOUND FALSE)
-endif(OPTION_USE_XFT)
-
-#######################################################################
-if(X11_Xfixes_FOUND)
-   option(OPTION_USE_XFIXES "use lib Xfixes" ON)
-endif(X11_Xfixes_FOUND)
-
-if(OPTION_USE_XFIXES)
-   set(HAVE_XFIXES ${X11_Xfixes_FOUND})
-endif(OPTION_USE_XFIXES)
-
-#######################################################################
-if(X11_Xcursor_FOUND)
-   option(OPTION_USE_XCURSOR "use lib Xcursor" ON)
-endif(X11_Xcursor_FOUND)
-
-if(OPTION_USE_XCURSOR)
-   set(HAVE_XCURSOR ${X11_Xcursor_FOUND})
-endif(OPTION_USE_XCURSOR)
-
-#######################################################################
-
-add_subdirectory(src)
-
-# generate config.h
-configure_file(
-   "${FLTK_SOURCE_DIR}/configh.cmake.in"
-   "${FLTK_BINARY_DIR}/config.h"
-   @ONLY
-)
diff --git a/common/fltk/COPYING b/common/fltk/COPYING
deleted file mode 100644
index 9542075..0000000
--- a/common/fltk/COPYING
+++ /dev/null
@@ -1,530 +0,0 @@
-                             FLTK License
-                           December 11, 2001
-
-The FLTK library and included programs are provided under the terms
-of the GNU Library General Public License (LGPL) with the following
-exceptions:
-
-    1. Modifications to the FLTK configure script, config
-       header file, and makefiles by themselves to support
-       a specific platform do not constitute a modified or
-       derivative work.
-
-      The authors do request that such modifications be
-      contributed to the FLTK project - send all contributions
-      through the "Software Trouble Report" on the following page:
- 
-           http://www.fltk.org/str.php
-
-    2. Widgets that are subclassed from FLTK widgets do not
-       constitute a derivative work.
-
-    3. Static linking of applications and widgets to the
-       FLTK library does not constitute a derivative work
-       and does not require the author to provide source
-       code for the application or widget, use the shared
-       FLTK libraries, or link their applications or
-       widgets against a user-supplied version of FLTK.
-
-       If you link the application or widget to a modified
-       version of FLTK, then the changes to FLTK must be
-       provided under the terms of the LGPL in sections
-       1, 2, and 4.
-
-    4. You do not have to provide a copy of the FLTK license
-       with programs that are linked to the FLTK library, nor
-       do you have to identify the FLTK license in your
-       program or documentation as required by section 6
-       of the LGPL.
-
-       However, programs must still identify their use of FLTK.
-       The following example statement can be included in user
-       documentation to satisfy this requirement:
-
-           [program/widget] is based in part on the work of
-           the FLTK project (http://www.fltk.org).
-
------------------------------------------------------------------------
-
-		  GNU LIBRARY GENERAL PUBLIC LICENSE
-			 Version 2, June 1991
-
-	  Copyright (C) 1991 Free Software Foundation, Inc.
-       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-     Everyone is permitted to copy and distribute verbatim copies
-      of this license document, but changing it is not allowed.
-
-    [This is the first released version of the library GPL.  It is
-   numbered 2 because it goes with version 2 of the ordinary GPL.]
-
-			       Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it.  You can use it for
-your libraries, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library.  If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software.  To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-  Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs.  This
-license, the GNU Library General Public License, applies to certain
-designated libraries.  This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
-  The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it.  Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program.  However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
-  Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries.  We
-concluded that weaker conditions might promote sharing better.
-
-  However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves.  This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them.  (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.)  The hope is that this
-will lead to faster development of free libraries.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, while the latter only
-works together with the library.
-
-  Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
-		  GNU LIBRARY GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License").  Each licensee is
-addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    c) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    d) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-     Appendix: How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public
-    License along with this library; if not, write to the Free
-    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/common/fltk/CREDITS b/common/fltk/CREDITS
deleted file mode 100644
index 60f26c1..0000000
--- a/common/fltk/CREDITS
+++ /dev/null
@@ -1,62 +0,0 @@
-CREDITS - Fast Light Tool Kit (FLTK) Version 1.3.0
---------------------------------------------------
-
-    This file lists the people responsible for the toolkit you
-    are now using.  If you've looking for your name in lights
-    but we've forgotten you here, please use the report on the
-    following page, and we'll update this file accordingly:
-
-        http://www.fltk.org/str.php
-
-
-CORE DEVELOPERS
-
-    The following people do the day-to-day development of FLTK:
-
-	Fabien Costantini (fabien67@users.sf.net)
-	Craig P. Earls
-	Curtis Edwards (trilec@users.sourceforge.net)
-	Gustavo Hime (hime@users.sourceforge.net)
-	Talbot Hughes
-	Robert Kesterson (robertk@users.sourceforge.net)
-	Matthias Melcher (mm@robowerk.com)
-	James Dean Palmer (jamespalmer@users.sourceforge.net)
-	Vincent Penne (vincentp@users.sourceforge.net)
-	Bill Spitzak (spitzak@users.sourceforge.net)
-	Michael Sweet (easysw@users.sourceforge.net)
-	Carl Thompson (clip@users.sourceforge.net)
-	Nafees Bin Zafar (nafees@users.sourceforge.net)
-
-
-OTHER CONTRIBUTORS
-
-    The following people have contributed fixes or enhancements
-    for FLTK:
-
-	Teun Burgers
-	Paul Chambers
-	Stephen Davies
-	Yuri D'Elia
-	Domingo Alvarez Duarte
-	Greg Ercolano
-	Yuri Fedorchenko
-	George Garvey
-	Duncan Gibson
-	Manolo Gouy
-	Mikael Hultgren
-	Stuart Levy
-	Howard Lightstone
-	Mike Lindner
-	Alexander Mai
-	Pierre Ossman
-	Alexander Rabi
-	James Roth
-	Albrecht Schlosser
-	Andrea Suatoni
-	Michael Surette
-	Paul Sydney
-	Aaron Ucko
-	Emanuele Vicentini
-	Josef Vitu
-	Jim Wilson
-	Ken Yarnall
diff --git a/common/fltk/FL/Enumerations.H b/common/fltk/FL/Enumerations.H
deleted file mode 100644
index 219d623..0000000
--- a/common/fltk/FL/Enumerations.H
+++ /dev/null
@@ -1,965 +0,0 @@
-//
-// "$Id: Enumerations.H 8710 2011-05-21 21:55:59Z manolo $"
-//
-// Enumerations for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-    This file contains type definitions and general enumerations.
- */
-
-#ifndef Fl_Enumerations_H
-#define Fl_Enumerations_H
-
-#  include "Fl_Export.H"
-#  include "fl_types.h"
-
-/** \name Version Numbers
-
-    FLTK defines some constants to help the programmer to
-    find out, for which FLTK version a program is compiled.
-    
-    The following constants are defined:
- */
-/*@{*/
-
-/**
-   The major release version of this FLTK library.
-   \sa FL_VERSION
- */
-#define FL_MAJOR_VERSION	1
-
-/**
-   The minor release version for this library.
-
-   FLTK remains mostly source-code compatible between minor version changes.
- */
-#define FL_MINOR_VERSION	3
-
-/**
-   The patch version for this library.
-
-   FLTK remains binary compatible between patches.
- */
-#define FL_PATCH_VERSION	0
-
-/**
-    The FLTK version number as a \em double.
-
-    FL_VERSION is a double that describes the major and minor version numbers.
-    Version 1.1 is actually stored as 1.01 to allow for more than 9 minor
-    releases.
-
-    The FL_MAJOR_VERSION, FL_MINOR_VERSION, and FL_PATCH_VERSION constants
-    give the integral values for the major, minor, and patch releases
-    respectively.
- */
-#define FL_VERSION		((double)FL_MAJOR_VERSION + \
-				 (double)FL_MINOR_VERSION * 0.01 + \
-				 (double)FL_PATCH_VERSION * 0.0001)
-
-/*@}*/	// group: Version Numbers
-
-/**
-    Every time a user moves the mouse pointer, clicks a button,
-    or presses a key, an event is generated and sent to your
-    application. Events can also come from other programs like the
-    window manager.
-   
-    Events are identified by the integer argument passed to the 
-    Fl_Widget::handle() virtual method. Other information about the 
-    most recent event is stored in static locations and acquired  by 
-    calling the Fl::event_*() methods. This static information remains 
-    valid until the next event is read from the window system, so it 
-    is ok to look at it outside of the handle() method.
-
-    \sa Fl::event_text(), Fl::event_key(), class Fl::
- */
-enum Fl_Event {	// events
-  /** No event. */
-  FL_NO_EVENT		= 0,
-
-  /** A mouse button has gone down with the mouse pointing at this
-      widget. You can find out what button by calling Fl::event_button(). 
-      You find out the mouse position by calling Fl::event_x() and
-      Fl::event_y().
-
-      A widget indicates that it "wants" the mouse click by returning non-zero 
-      from its Fl_Widget::handle() method. It will then become the 
-      Fl::pushed() widget and will get FL_DRAG and the matching FL_RELEASE events.  
-      If Fl_Widget::handle() returns zero then FLTK will try sending the FL_PUSH 
-      to another widget. 
-   */
-  FL_PUSH		= 1,
-
-  /** A mouse button has been released. You can find out what button by 
-      calling Fl::event_button().
-
-      In order to receive the FL_RELEASE event, the widget must return 
-      non-zero when handling FL_PUSH.
-   */
-  FL_RELEASE		= 2,
-
-  /** The mouse has been moved to point at this widget.  This can
-      be used for highlighting feedback.  If a widget wants to
-      highlight or otherwise track the mouse, it indicates this by
-      returning non-zero from its handle() method. It then
-      becomes the Fl::belowmouse() widget and will receive 
-      FL_MOVE and FL_LEAVE events.
-   */
-  FL_ENTER		= 3,
-
-  /** The mouse has moved out of the widget.
-      In order to receive the FL_LEAVE event, the widget must 
-      return non-zero when handling FL_ENTER.
-   */
-  FL_LEAVE		= 4,
-
-  /** The mouse has moved with a button held down. The current button state 
-      is in Fl::event_state(). The mouse position is in Fl::event_x() and 
-      Fl::event_y().
-
-      In order to receive FL_DRAG events, the widget must return non-zero 
-      when handling FL_PUSH.
-   */
-  FL_DRAG		= 5,
-
-  /** This indicates an <I>attempt</I> to give a widget the keyboard focus.
-
-      If a widget wants the focus, it should change itself to display the 
-      fact that it has the focus, and return non-zero from its handle() method.
-      It then becomes the Fl::focus() widget and gets FL_KEYDOWN, FL_KEYUP, 
-      and FL_UNFOCUS events.
-
-      The focus will change either because the window manager changed which 
-      window gets the focus, or because the user tried to navigate using tab, 
-      arrows, or other keys. You can check Fl::event_key() to figure out why 
-      it moved. For navigation it will be the key pressed and for interaction 
-      with the window manager it will be zero.
-   */
-  FL_FOCUS		= 6,
-  
-  /** This event is sent to the previous Fl::focus() widget when another 
-      widget gets the focus or the window loses focus.
-   */
-  FL_UNFOCUS		= 7,
-
-  /** A key was pressed (FL_KEYDOWN) or released (FL_KEYUP). 
-      Fl_KEYBOARD is a synonym for FL_KEYDOWN.
-      The key can be found in Fl::event_key().
-      The text that the key should insert can be found with Fl::event_text() 
-      and its length is in Fl::event_length(). If you use the key handle()
-      should return 1. If you return zero then FLTK assumes you ignored the 
-      key and will then attempt to send it to a parent widget. If none of 
-      them want it, it will change the event into a FL_SHORTCUT event.
-
-      To receive FL_KEYBOARD events you must also respond to the FL_FOCUS
-      and FL_UNFOCUS events.
-
-      If you are writing a text-editing widget you may also want to call 
-      the Fl::compose() function to translate individual keystrokes into 
-      non-ASCII characters.
-
-      FL_KEYUP events are sent to the widget that currently has focus. This 
-      is not necessarily the same widget that received the corresponding 
-      FL_KEYDOWN event because focus may have changed between events.
-   */
-  FL_KEYDOWN		= 8,
-
-  /** Equivalent to FL_KEYDOWN.
-      \see FL_KEYDOWN
-   */
-  FL_KEYBOARD		= 8,
- 
-  /** Key release event.
-      \see FL_KEYDOWN
-   */
-  FL_KEYUP		= 9,
-
-  /** The user clicked the close button of a window.
-      This event is used internally only to trigger the callback of
-      Fl_Window derived classed. The default callback closes the 
-      window calling Fl_Window::hide().
-   */
-  FL_CLOSE		= 10,
-
-  /** The mouse has moved without any mouse buttons held down. 
-      This event is sent to the Fl::belowmouse() widget.
-
-      In order to receive FL_MOVE events, the widget must return 
-      non-zero when handling FL_ENTER.
-   */
-  FL_MOVE		= 11,
-
-  /** If the Fl::focus() widget is zero or ignores an FL_KEYBOARD
-      event then FLTK tries sending this event to every widget it 
-      can, until one of them returns non-zero. FL_SHORTCUT is first 
-      sent to the Fl::belowmouse() widget, then its parents and siblings, 
-      and eventually to every widget in the window, trying to find an 
-      object that returns non-zero. FLTK tries really hard to not to ignore 
-      any keystrokes!
-
-      You can also make "global" shortcuts by using Fl::add_handler(). A 
-      global shortcut will work no matter what windows are displayed or 
-      which one has the focus.
-   */
-  FL_SHORTCUT		= 12,
-
-  /** This widget is no longer active, due to Fl_Widget::deactivate() 
-      being called on it or one of its parents. Fl_Widget::active() may 
-      still be true after this, the widget is only active if Fl_Widget::active()
-      is true on it and all its parents (use Fl_Widget::active_r() to check this).
-   */
-  FL_DEACTIVATE		= 13,
-
-  /** This widget is now active, due to Fl_Widget::activate() being 
-      called on it or one of its parents.
-   */
-  FL_ACTIVATE		= 14,
-
-  /** This widget is no longer visible, due to Fl_Widget::hide() being 
-      called on it or one of its parents, or due to a parent window being 
-      minimized.  Fl_Widget::visible() may still be true after this, but the 
-      widget is visible only if visible() is true for it and all its 
-      parents (use Fl_Widget::visible_r() to check this).
-   */
-  FL_HIDE		= 15,
-
-  /** This widget is visible again, due to Fl_Widget::show() being called on 
-      it or one of its parents, or due to a parent window being restored. 
-      Child Fl_Windows respond to this by actually creating the window if not 
-      done already, so if you subclass a window, be sure to pass FL_SHOW 
-      to the base class Fl_Widget::handle() method!
-   */
-  FL_SHOW		= 16,
-
-  /** You should get this event some time after you call Fl::paste(). 
-      The contents of Fl::event_text() is the text to insert and the number 
-      of characters is in Fl::event_length().
-   */
-  FL_PASTE		= 17,
-
-  /** The Fl::selection_owner() will get this event before the selection is 
-      moved to another widget. This indicates that some other widget or program 
-      has claimed the selection. Motif programs used this to clear the selection 
-      indication. Most modern programs ignore this.
-   */
-  FL_SELECTIONCLEAR	= 18,
-
-  /** The user has moved the mouse wheel. The Fl::event_dx() and Fl::event_dy()
-      methods can be used to find the amount to scroll horizontally and vertically.
-   */
-  FL_MOUSEWHEEL		= 19,
-
-  /** The mouse has been moved to point at this widget. A widget that is 
-      interested in receiving drag'n'drop data must return 1 to receive 
-      FL_DND_DRAG, FL_DND_LEAVE and FL_DND_RELEASE events.
-   */
-  FL_DND_ENTER		= 20,
-
-  /** The mouse has been moved inside a widget while dragging data.  A 
-      widget that is interested in receiving drag'n'drop data should 
-      indicate the possible drop position.
-   */
-  FL_DND_DRAG		= 21,
-
-  /** The mouse has moved out of the widget.
-   */
-  FL_DND_LEAVE		= 22,
-
-  /** The user has released the mouse button dropping data into the widget. 
-      If the widget returns 1, it will receive the data in the immediately 
-      following FL_PASTE event.
-   */
-  FL_DND_RELEASE	= 23,
-
-  /** The fullscreen state of the window has changed
-   */
-  FL_FULLSCREEN         = 24
-
-};
-
-/** \name When Conditions */
-/*@{*/
-/** These constants determine when a callback is performed.
-
-    \sa Fl_Widget::when();
-    \todo doxygen comments for values are incomplete and maybe wrong or unclear
- */
-enum Fl_When { // Fl_Widget::when():
-  FL_WHEN_NEVER		= 0,	///< Never call the callback
-  FL_WHEN_CHANGED	= 1,	///< Do the callback only when the widget value changes
-  FL_WHEN_NOT_CHANGED	= 2,	///< Do the callback whenever the user interacts with the widget
-  FL_WHEN_RELEASE	= 4,	///< Do the callback when the button or key is released and the value changes
-  FL_WHEN_RELEASE_ALWAYS= 6,	///< Do the callback when the button or key is released, even if the value doesn't change
-  FL_WHEN_ENTER_KEY	= 8,	///< Do the callback when the user presses the ENTER key and the value changes
-  FL_WHEN_ENTER_KEY_ALWAYS=10,	///< Do the callback when the user presses the ENTER key, even if the value doesn't change
-  FL_WHEN_ENTER_KEY_CHANGED=11	///< ?
-};
-
-/*@}*/		// group: When Conditions
-
-/** \name Mouse and Keyboard Events
-
-	This and the following constants define the non-ASCII keys on the
-	keyboard for FL_KEYBOARD and FL_SHORTCUT events.
-
-	\todo	FL_Button and FL_key... constants could be structured better
-		(use an enum or some doxygen grouping ?)
-  
-	\sa	Fl::event_key() and Fl::get_key(int) (use ascii letters for all other keys):
- */
-
-/*@{*/
-
-// FIXME: These codes collide with valid Unicode keys
-
-#define FL_Button	0xfee8	///< A mouse button; use Fl_Button + n for mouse button n.
-#define FL_BackSpace	0xff08	///< The backspace key.
-#define FL_Tab		0xff09	///< The tab key.
-#define FL_Enter	0xff0d	///< The enter key. 
-#define FL_Pause	0xff13	///< The pause key.
-#define FL_Scroll_Lock	0xff14	///< The scroll lock key.
-#define FL_Escape	0xff1b	///< The escape key.
-#define FL_Home		0xff50	///< The home key.
-#define FL_Left		0xff51	///< The left arrow key.
-#define FL_Up		0xff52	///< The up arrow key.
-#define FL_Right	0xff53	///< The right arrow key.
-#define FL_Down		0xff54	///< The down arrow key.
-#define FL_Page_Up	0xff55	///< The page-up key.
-#define FL_Page_Down	0xff56	///< The page-down key.
-#define FL_End		0xff57	///< The end key.
-#define FL_Print	0xff61	///< The print (or print-screen) key.
-#define FL_Insert	0xff63	///< The insert key. 
-#define FL_Menu		0xff67	///< The menu key.
-#define FL_Help		0xff68	///< The 'help' key on Mac keyboards
-#define FL_Num_Lock	0xff7f	///< The num lock key.
-#define FL_KP		0xff80	///< One of the keypad numbers; use FL_KP + n for number n.
-#define FL_KP_Enter	0xff8d	///< The enter key on the keypad, same as Fl_KP+'\\r'.
-#define FL_KP_Last	0xffbd	///< The last keypad key; use to range-check keypad.
-#define FL_F		0xffbd	///< One of the function keys; use FL_F + n for function key n.
-#define FL_F_Last	0xffe0	///< The last function key; use to range-check function keys.
-#define FL_Shift_L	0xffe1	///< The lefthand shift key.
-#define FL_Shift_R	0xffe2	///< The righthand shift key.
-#define FL_Control_L	0xffe3	///< The lefthand control key.
-#define FL_Control_R	0xffe4	///< The righthand control key.
-#define FL_Caps_Lock	0xffe5	///< The caps lock key.
-#define FL_Meta_L	0xffe7	///< The left meta/Windows key.
-#define FL_Meta_R	0xffe8	///< The right meta/Windows key.
-#define FL_Alt_L	0xffe9	///< The left alt key.
-#define FL_Alt_R	0xffea	///< The right alt key. 
-#define FL_Delete	0xffff	///< The delete key.
-
-// These use the Private Use Area (PUA) of the Basic Multilingual Plane
-// of Unicode. Guaranteed not to conflict with a proper Unicode character.
-
-// These primarily map to the XFree86 keysym range
-#define FL_Volume_Down  0xEF11   /* Volume control down        */
-#define FL_Volume_Mute  0xEF12   /* Mute sound from the system */
-#define FL_Volume_Up    0xEF13   /* Volume control up          */
-#define FL_Media_Play   0xEF14   /* Start playing of audio     */
-#define FL_Media_Stop   0xEF15   /* Stop playing audio         */
-#define FL_Media_Prev   0xEF16   /* Previous track             */
-#define FL_Media_Next   0xEF17   /* Next track                 */
-#define FL_Home_Page    0xEF18   /* Display user's home page   */
-#define FL_Mail         0xEF19   /* Invoke user's mail program */
-#define FL_Search       0xEF1B   /* Search                     */
-#define FL_Back         0xEF26   /* Like back on a browser     */
-#define FL_Forward      0xEF27   /* Like forward on a browser  */
-#define FL_Stop         0xEF28   /* Stop current operation     */
-#define FL_Refresh      0xEF29   /* Refresh the page           */
-#define FL_Sleep        0xEF2F   /* Put system to sleep        */
-#define FL_Favorites    0xEF30   /* Show favorite locations    */
-
-/*@}*/	// group: Mouse and Keyboard Events
-
-/** \name Mouse Buttons
-
-	These constants define the button numbers for FL_PUSH and FL_RELEASE events.
-	
-	\sa Fl::event_button()
-*/
-
-/*@{*/
-
-#define FL_LEFT_MOUSE	1	///< The left mouse button
-#define FL_MIDDLE_MOUSE	2	///< The middle mouse button
-#define FL_RIGHT_MOUSE	3	///< The right mouse button
-
-/*@}*/		// group: Mouse Buttons
-
-
-/** \name	Event States
-
-	The following constants define bits in the Fl::event_state() value.
-*/
-
-/*@{*/		// group: Event States
-
-// FIXME: it would be nice to have the modifiers in the upper 8 bit so that
-//        a unicode ke (24bit) can be sent as an unsigned with the modifiers.
-
-#define FL_SHIFT	0x00010000	///< One of the shift keys is down
-#define FL_CAPS_LOCK	0x00020000	///< The caps lock is on
-#define FL_CTRL		0x00040000	///< One of the ctrl keys is down
-#define FL_ALT		0x00080000	///< One of the alt keys is down
-#define FL_NUM_LOCK	0x00100000	///< The num lock is on
-					// most X servers do this?
-#define FL_META		0x00400000	///< One of the meta/Windows keys is down
-					// correct for XFree86
-#define FL_SCROLL_LOCK	0x00800000	///< The scroll lock is on
-					// correct for XFree86
-#define FL_BUTTON1	0x01000000	///< Mouse button 1 is pushed
-#define FL_BUTTON2	0x02000000	///< Mouse button 2 is pushed
-#define FL_BUTTON3	0x04000000	///< Mouse button 3 is pushed
-#define FL_BUTTONS	0x7f000000	///< Any mouse button is pushed
-#define FL_BUTTON(n)	(0x00800000<<(n)) ///< Mouse button n (n > 0) is pushed
-
-#define FL_KEY_MASK 0x0000ffff		///< All keys are 16 bit for now 
-					//   FIXME: Unicode needs 24 bits!
-
-#ifdef __APPLE__
-#  define FL_COMMAND	FL_META		///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X
-#  define FL_CONTROL 	FL_CTRL		///< An alias for FL_META on WIN32 and X11, or FL_CTRL on MacOS X
-#else
-#  define FL_COMMAND	FL_CTRL		///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X
-#  define FL_CONTROL	FL_META		///< An alias for FL_META on WIN32 and X11, or FL_CTRL on MacOS X
-#endif // __APPLE__
-
-/*@}*/		// group: Event States
-
-/** \name Box Types
-    \brief FLTK standard box types
-    
-    This enum defines the standard box types included with FLTK.
-    
-    FL_NO_BOX means nothing is drawn at all, so whatever is already 
-    on the screen remains. The FL_..._FRAME types only draw their edges, 
-    leaving the interior unchanged. The blue color in Figure 1 
-    is the area that is not drawn by the frame types.
-    
-    \image html boxtypes.png "Figure 1: FLTK standard box types"
-    \image latex boxtypes.png "FLTK standard box types" width=10cm
-    \todo	Description of boxtypes is incomplete.
-    		See below for the defined enum Fl_Boxtype.
-		\see src/Fl_get_system_colors.cxx
-*/
-/*@{*/
-enum Fl_Boxtype { // boxtypes (if you change these you must fix fl_boxtype.C):
-
-  FL_NO_BOX = 0,		///< nothing is drawn at all, this box is invisible
-  FL_FLAT_BOX,			///< a flat box
-  FL_UP_BOX,			///< see figure 1
-  FL_DOWN_BOX,			///< see figure 1
-  FL_UP_FRAME,			///< see figure 1
-  FL_DOWN_FRAME,		///< see figure 1
-  FL_THIN_UP_BOX,		///< see figure 1
-  FL_THIN_DOWN_BOX,		///< see figure 1
-  FL_THIN_UP_FRAME,		///< see figure 1
-  FL_THIN_DOWN_FRAME,		///< see figure 1
-  FL_ENGRAVED_BOX,		///< see figure 1
-  FL_EMBOSSED_BOX,		///< see figure 1
-  FL_ENGRAVED_FRAME,		///< see figure 1
-  FL_EMBOSSED_FRAME,		///< see figure 1
-  FL_BORDER_BOX,		///< see figure 1
-  _FL_SHADOW_BOX,		///< see figure 1
-  FL_BORDER_FRAME,		///< see figure 1
-  _FL_SHADOW_FRAME,		///< see figure 1
-  _FL_ROUNDED_BOX,		///< see figure 1
-  _FL_RSHADOW_BOX,		///< see figure 1
-  _FL_ROUNDED_FRAME,		///< see figure 1
-  _FL_RFLAT_BOX,		///< see figure 1
-  _FL_ROUND_UP_BOX,		///< see figure 1
-  _FL_ROUND_DOWN_BOX,		///< see figure 1
-  _FL_DIAMOND_UP_BOX,		///< see figure 1
-  _FL_DIAMOND_DOWN_BOX,		///< see figure 1
-  _FL_OVAL_BOX,			///< see figure 1
-  _FL_OSHADOW_BOX,		///< see figure 1
-  _FL_OVAL_FRAME,		///< see figure 1
-  _FL_OFLAT_BOX,		///< see figure 1
-  _FL_PLASTIC_UP_BOX,		///< plastic version of FL_UP_BOX
-  _FL_PLASTIC_DOWN_BOX,		///< plastic version of FL_DOWN_BOX
-  _FL_PLASTIC_UP_FRAME,		///< plastic version of FL_UP_FRAME
-  _FL_PLASTIC_DOWN_FRAME,	///< plastic version of FL_DOWN_FRAME
-  _FL_PLASTIC_THIN_UP_BOX,	///< plastic version of FL_THIN_UP_BOX
-  _FL_PLASTIC_THIN_DOWN_BOX,	///< plastic version of FL_THIN_DOWN_BOX
-  _FL_PLASTIC_ROUND_UP_BOX,	///< plastic version of FL_ROUND_UP_BOX
-  _FL_PLASTIC_ROUND_DOWN_BOX,	///< plastic version of FL_ROUND_DOWN_BOX
-  _FL_GTK_UP_BOX,		///< gtk+ version of FL_UP_BOX
-  _FL_GTK_DOWN_BOX,		///< gtk+ version of FL_DOWN_BOX
-  _FL_GTK_UP_FRAME,		///< gtk+ version of FL_UP_FRAME
-  _FL_GTK_DOWN_FRAME,		///< gtk+ version of FL_DOWN_RAME
-  _FL_GTK_THIN_UP_BOX,		///< gtk+ version of FL_THIN_UP_BOX
-  _FL_GTK_THIN_DOWN_BOX,	///< gtk+ version of FL_THIN_DOWN_BOX
-  _FL_GTK_THIN_UP_FRAME,	///< gtk+ version of FL_UP_FRAME
-  _FL_GTK_THIN_DOWN_FRAME,	///< gtk+ version of FL_THIN_DOWN_FRAME
-  _FL_GTK_ROUND_UP_BOX,		///< gtk+ version of FL_ROUND_UP_BOX
-  _FL_GTK_ROUND_DOWN_BOX,	///< gtk+ version of FL_ROUND_DOWN_BOX
-  FL_FREE_BOXTYPE		///< the first free box type for creation of new box types
-};
-extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUND_UP_BOX();
-#define FL_ROUND_UP_BOX fl_define_FL_ROUND_UP_BOX()
-#define FL_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_ROUND_UP_BOX()+1)
-extern FL_EXPORT Fl_Boxtype fl_define_FL_SHADOW_BOX();
-#define FL_SHADOW_BOX fl_define_FL_SHADOW_BOX()
-#define FL_SHADOW_FRAME (Fl_Boxtype)(fl_define_FL_SHADOW_BOX()+2)
-extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUNDED_BOX();
-#define FL_ROUNDED_BOX fl_define_FL_ROUNDED_BOX()
-#define FL_ROUNDED_FRAME (Fl_Boxtype)(fl_define_FL_ROUNDED_BOX()+2)
-extern FL_EXPORT Fl_Boxtype fl_define_FL_RFLAT_BOX();
-#define FL_RFLAT_BOX fl_define_FL_RFLAT_BOX()
-extern FL_EXPORT Fl_Boxtype fl_define_FL_RSHADOW_BOX();
-#define FL_RSHADOW_BOX fl_define_FL_RSHADOW_BOX()
-extern FL_EXPORT Fl_Boxtype fl_define_FL_DIAMOND_BOX();
-#define FL_DIAMOND_UP_BOX fl_define_FL_DIAMOND_BOX()
-#define FL_DIAMOND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_DIAMOND_BOX()+1)
-extern FL_EXPORT Fl_Boxtype fl_define_FL_OVAL_BOX();
-#define FL_OVAL_BOX fl_define_FL_OVAL_BOX()
-#define FL_OSHADOW_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+1)
-#define FL_OVAL_FRAME (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+2)
-#define FL_OFLAT_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+3)
-
-extern FL_EXPORT Fl_Boxtype fl_define_FL_PLASTIC_UP_BOX();
-#define FL_PLASTIC_UP_BOX fl_define_FL_PLASTIC_UP_BOX()
-#define FL_PLASTIC_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+1)
-#define FL_PLASTIC_UP_FRAME (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+2)
-#define FL_PLASTIC_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+3)
-#define FL_PLASTIC_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+4)
-#define FL_PLASTIC_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+5)
-#define FL_PLASTIC_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+6)
-#define FL_PLASTIC_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+7)
-
-extern FL_EXPORT Fl_Boxtype fl_define_FL_GTK_UP_BOX();
-#define FL_GTK_UP_BOX fl_define_FL_GTK_UP_BOX()
-#define FL_GTK_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+1)
-#define FL_GTK_UP_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+2)
-#define FL_GTK_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+3)
-#define FL_GTK_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+4)
-#define FL_GTK_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+5)
-#define FL_GTK_THIN_UP_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+6)
-#define FL_GTK_THIN_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+7)
-#define FL_GTK_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+8)
-#define FL_GTK_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+9)
-
-// conversions of box types to other boxtypes:
-/**
-  Get the filled version of a frame.
-  If no filled version of a given frame exists, the behavior of this function
-  is undefined and some random box or frame is returned.
- */
-inline Fl_Boxtype fl_box(Fl_Boxtype b) {
-  return (Fl_Boxtype)((b<FL_UP_BOX||b%4>1)?b:(b-2));
-}
-/**
-  Get the "pressed" or "down" version of a box.
-  If no "down" version of a given box exists, the behavior of this function
-  is undefined and some random box or frame is returned.
- */
-inline Fl_Boxtype fl_down(Fl_Boxtype b) {
-  return (Fl_Boxtype)((b<FL_UP_BOX)?b:(b|1));
-}
-/**
-  Get the unfilled, frame only version of a box.
-  If no frame version of a given box exists, the behavior of this function
-  is undefined and some random box or frame is returned.
- */
-inline Fl_Boxtype fl_frame(Fl_Boxtype b) {
-  return (Fl_Boxtype)((b%4<2)?b:(b+2));
-}
-
-// back-compatibility box types:
-#define FL_FRAME FL_ENGRAVED_FRAME
-#define FL_FRAME_BOX FL_ENGRAVED_BOX
-#define FL_CIRCLE_BOX FL_ROUND_DOWN_BOX
-#define FL_DIAMOND_BOX FL_DIAMOND_DOWN_BOX
-
-/*@}*/	// group: Box Types
-
-/**
-   The labeltype() method sets the type of the label.
-   
-   The following standard label types are included:
-   
-   \todo	The doxygen comments are incomplete, and some labeltypes
-   		are starting with an underscore. Also, there are three
-		external functions undocumented (yet):
-		  - fl_define_FL_SHADOW_LABEL()
-		  - fl_define_FL_ENGRAVED_LABEL()
-		  - fl_define_FL_EMBOSSED_LABEL()
-*/
-enum Fl_Labeltype {	// labeltypes:
-  FL_NORMAL_LABEL	= 0,	///< draws the text (0)
-  FL_NO_LABEL,			///< does nothing
-  _FL_SHADOW_LABEL,		///< draws a drop shadow under the text
-  _FL_ENGRAVED_LABEL,		///< draws edges as though the text is engraved
-  _FL_EMBOSSED_LABEL,		///< draws edges as though the text is raised
-  _FL_MULTI_LABEL,		///< ?
-  _FL_ICON_LABEL,		///< draws the icon associated with the text
-  _FL_IMAGE_LABEL,		///< ?
-
-  FL_FREE_LABELTYPE		///< first free labeltype to use for creating own labeltypes
-};
-
-/** 
-  Sets the current label type and return its corresponding Fl_Labeltype value. 
-  @{
-*/
-#define FL_SYMBOL_LABEL FL_NORMAL_LABEL
-extern Fl_Labeltype FL_EXPORT fl_define_FL_SHADOW_LABEL();
-#define FL_SHADOW_LABEL fl_define_FL_SHADOW_LABEL()
-extern Fl_Labeltype FL_EXPORT fl_define_FL_ENGRAVED_LABEL();
-#define FL_ENGRAVED_LABEL fl_define_FL_ENGRAVED_LABEL()
-extern Fl_Labeltype FL_EXPORT fl_define_FL_EMBOSSED_LABEL();
-#define FL_EMBOSSED_LABEL fl_define_FL_EMBOSSED_LABEL()
-/** @} */
-
-/** \name Alignment Flags 
-    Flags to control the label alignment. 
-    This controls how the label is displayed next to or inside the widget. 
-    The default value is FL_ALIGN_CENTER for most widgets, which centers the label
-    inside the widget.
-
-    Flags can be or'd to achieve a combination of alignments.
-
-    \code
-    Outside alignments:
-               TOP_LEFT        TOP       TOP_RIGHT
-       LEFT_TOP+---------------------------------+RIGHT_TOP
-               |                                 |
-           LEFT|                                 |RIGHT
-               |                                 |
-    LEFT_BOTTOM+---------------------------------+RIGHT_BOTTOM
-               BOTTOM_RIGHT   BOTTOM   BOTTOM_LEFT
-
-    Inside alignments:
-               +---------------------------------+
-               |TOP_LEFT       TOP      TOP_RIGHT|
-               |                                 |
-               |LEFT                        RIGHT|
-               |                                 |
-               |BOTTOM_RIGHT  BOTTOM  BOTTOM_LEFT|
-               +---------------------------------+
-    \endcode
-    \see #FL_ALIGN_CENTER, etc.
- */
-/*@{*/
-/** FLTK type for alignment control */
-typedef unsigned Fl_Align;
-  /** Align the label horizontally in the middle. */
-const Fl_Align FL_ALIGN_CENTER		= (Fl_Align)0;
-  /** Align the label at the top of the widget. Inside labels appear below the top,
-      outside labels are drawn on top of the widget. */
-const Fl_Align FL_ALIGN_TOP		= (Fl_Align)1;
-  /** Align the label at the bottom of the widget. */
-const Fl_Align FL_ALIGN_BOTTOM		= (Fl_Align)2;
-  /** Align the label at the left of the widget. Inside labels appear left-justified
-      starting at the left side of the widget, outside labels are right-justified and
-      drawn to the left of the widget. */
-const Fl_Align FL_ALIGN_LEFT		= (Fl_Align)4;
-  /** Align the label to the right of the widget. */
-const Fl_Align FL_ALIGN_RIGHT		= (Fl_Align)8;
-  /** Draw the label inside of the widget. */
-const Fl_Align FL_ALIGN_INSIDE		= (Fl_Align)16;
-  /** If the label contains an image, draw the text on top of the image. */
-const Fl_Align FL_ALIGN_TEXT_OVER_IMAGE	= (Fl_Align)0x0020;
-  /** If the label contains an image, draw the text below the image. */
-const Fl_Align FL_ALIGN_IMAGE_OVER_TEXT	= (Fl_Align)0x0000;
-  /** All parts of the label that are lager than the widget will not be drawn . */
-const Fl_Align FL_ALIGN_CLIP		= (Fl_Align)64;
-  /** Wrap text that does not fit the width of the widget. */
-const Fl_Align FL_ALIGN_WRAP		= (Fl_Align)128;
-  /** If the label contains an image, draw the text to the right of the image. */
-const Fl_Align FL_ALIGN_IMAGE_NEXT_TO_TEXT = (Fl_Align)0x0100;
-  /** If the label contains an image, draw the text to the left of the image. */
-const Fl_Align FL_ALIGN_TEXT_NEXT_TO_IMAGE = (Fl_Align)0x0120;
-/** If the label contains an image, draw the image or deimage in the background. */
-const Fl_Align FL_ALIGN_IMAGE_BACKDROP  = (Fl_Align)0x0200;
-const Fl_Align FL_ALIGN_TOP_LEFT	= FL_ALIGN_TOP | FL_ALIGN_LEFT;
-const Fl_Align FL_ALIGN_TOP_RIGHT	= FL_ALIGN_TOP | FL_ALIGN_RIGHT;
-const Fl_Align FL_ALIGN_BOTTOM_LEFT	= FL_ALIGN_BOTTOM | FL_ALIGN_LEFT;
-const Fl_Align FL_ALIGN_BOTTOM_RIGHT	= FL_ALIGN_BOTTOM | FL_ALIGN_RIGHT;
-const Fl_Align FL_ALIGN_LEFT_TOP	= 0x0007; // magic value
-const Fl_Align FL_ALIGN_RIGHT_TOP	= 0x000b; // magic value
-const Fl_Align FL_ALIGN_LEFT_BOTTOM	= 0x000d; // magic value
-const Fl_Align FL_ALIGN_RIGHT_BOTTOM	= 0x000e; // magic value
-const Fl_Align FL_ALIGN_NOWRAP		= (Fl_Align)0; // for back compatibility
-const Fl_Align FL_ALIGN_POSITION_MASK   = 0x000f; // left, right, top, bottom
-const Fl_Align FL_ALIGN_IMAGE_MASK      = 0x0320; // l/r, t/b, backdrop
-/*@}*/
-
-
-/** \name Font Numbers
-    The following constants define the standard FLTK fonts:
- */
-/*@{*/
-/** A font number is an index into the internal font table. */
-typedef int Fl_Font;
-
-const Fl_Font FL_HELVETICA              = 0;	///< Helvetica (or Arial) normal (0)
-const Fl_Font FL_HELVETICA_BOLD         = 1;	///< Helvetica (or Arial) bold
-const Fl_Font FL_HELVETICA_ITALIC       = 2;	///< Helvetica (or Arial) oblique
-const Fl_Font FL_HELVETICA_BOLD_ITALIC  = 3;	///< Helvetica (or Arial) bold-oblique
-const Fl_Font FL_COURIER                = 4;	///< Courier normal
-const Fl_Font FL_COURIER_BOLD           = 5;	///< Courier bold 
-const Fl_Font FL_COURIER_ITALIC         = 6;	///< Courier italic
-const Fl_Font FL_COURIER_BOLD_ITALIC    = 7;	///< Courier bold-italic
-const Fl_Font FL_TIMES                  = 8;	///< Times roman
-const Fl_Font FL_TIMES_BOLD             = 9;	///< Times roman bold
-const Fl_Font FL_TIMES_ITALIC           = 10;	///< Times roman italic
-const Fl_Font FL_TIMES_BOLD_ITALIC      = 11;	///< Times roman bold-italic
-const Fl_Font FL_SYMBOL                 = 12;	///< Standard symbol font
-const Fl_Font FL_SCREEN                 = 13;	///< Default monospaced screen font
-const Fl_Font FL_SCREEN_BOLD            = 14;	///< Default monospaced bold screen font
-const Fl_Font FL_ZAPF_DINGBATS          = 15;	///< Zapf-dingbats font
-
-const Fl_Font FL_FREE_FONT              = 16;	///< first one to allocate
-const Fl_Font FL_BOLD                   = 1;	///< add this to helvetica, courier, or times
-const Fl_Font FL_ITALIC                 = 2;	///< add this to helvetica, courier, or times
-const Fl_Font FL_BOLD_ITALIC            = 3;	///< add this to helvetica, courier, or times
-
-/*@}*/
-
-/** Size of a font in pixels.
-    This is the approximate height of a font in pixels.
- */
-typedef int Fl_Fontsize;
-
-extern FL_EXPORT Fl_Fontsize FL_NORMAL_SIZE;	///< normal font size
-
-/** \name Colors 
-    The Fl_Color type holds an FLTK color value.
-
-    Colors are either 8-bit indexes into a virtual colormap
-    or 24-bit RGB color values.
-
-    Color indices occupy the lower 8 bits of the value, while
-    RGB colors occupy the upper 24 bits, for a byte organization of RGBI.
-
-<pre>
- Fl_Color => 0xrrggbbii
-                | | | |
-                | | | +--- index between 0 and 255
-                | | +----- blue color component (8 bit)
-                | +------- green component (8 bit)
-                +--------- red component (8 bit)
- </pre>
-
-    A color can have either an index or an rgb value. Colors with rgb set 
-    and an index >0 are reserved for special use.
-
- */
-/*@{*/
-/** an FLTK color value */
-typedef unsigned int Fl_Color;
-
-// Standard colors. These are used as default colors in widgets and altered as necessary
-const Fl_Color FL_FOREGROUND_COLOR  = 0;	///< the default foreground color (0) used for labels and text
-const Fl_Color FL_BACKGROUND2_COLOR = 7;	///< the default background color for text, list, and valuator widgets
-const Fl_Color FL_INACTIVE_COLOR    = 8;	///< the inactive foreground color
-const Fl_Color FL_SELECTION_COLOR   = 15;	///< the default selection/highlight color
-
-  // boxtypes generally limit themselves to these colors so
-  // the whole ramp is not allocated:
-
-const Fl_Color FL_GRAY0   = 32;			// 'A'
-const Fl_Color FL_DARK3   = 39;			// 'H'
-const Fl_Color FL_DARK2   = 45;			// 'N'
-const Fl_Color FL_DARK1   = 47;			// 'P'
-const Fl_Color FL_BACKGROUND_COLOR  = 49;	// 'R' default background color
-const Fl_Color FL_LIGHT1  = 50;			// 'S'
-const Fl_Color FL_LIGHT2  = 52;			// 'U'
-const Fl_Color FL_LIGHT3  = 54;			// 'W'
-
-  // FLTK provides a 5x8x5 color cube that is used with colormap visuals
-
-const Fl_Color FL_BLACK   = 56;
-const Fl_Color FL_RED     = 88;
-const Fl_Color FL_GREEN   = 63;
-const Fl_Color FL_YELLOW  = 95;
-const Fl_Color FL_BLUE    = 216;
-const Fl_Color FL_MAGENTA = 248;
-const Fl_Color FL_CYAN    = 223;
-const Fl_Color FL_DARK_RED = 72;
-
-const Fl_Color FL_DARK_GREEN    = 60;
-const Fl_Color FL_DARK_YELLOW   = 76;
-const Fl_Color FL_DARK_BLUE     = 136;
-const Fl_Color FL_DARK_MAGENTA  = 152;
-const Fl_Color FL_DARK_CYAN     = 140;
-
-const Fl_Color FL_WHITE         = 255;
-
-
-#define FL_FREE_COLOR     (Fl_Color)16
-#define FL_NUM_FREE_COLOR 16
-#define FL_GRAY_RAMP      (Fl_Color)32
-#define FL_NUM_GRAY       24
-#define FL_GRAY           FL_BACKGROUND_COLOR
-#define FL_COLOR_CUBE     (Fl_Color)56
-#define FL_NUM_RED        5
-#define FL_NUM_GREEN      8
-#define FL_NUM_BLUE       5
-
-FL_EXPORT Fl_Color fl_inactive(Fl_Color c);
-
-FL_EXPORT Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg);
-
-FL_EXPORT Fl_Color fl_color_average(Fl_Color c1, Fl_Color c2, float weight);
-
-/** Returns a lighter version of the specified color. */
-inline Fl_Color fl_lighter(Fl_Color c) { return fl_color_average(c, FL_WHITE, .67f); }
-
-/** Returns a darker version of the specified color. */
-inline Fl_Color fl_darker(Fl_Color c) { return fl_color_average(c, FL_BLACK, .67f); }
-
-/** Returns the 24-bit color value closest to \p r, \p g, \p b. */
-inline Fl_Color fl_rgb_color(uchar r, uchar g, uchar b) {
-  if (!r && !g && !b) return FL_BLACK;
-  else return (Fl_Color)(((((r << 8) | g) << 8) | b) << 8);
-}
-
-/** Returns the 24-bit color value closest to \p g (grayscale). */
-inline Fl_Color fl_rgb_color(uchar g) {
-  if (!g) return FL_BLACK;
-  else return (Fl_Color)(((((g << 8) | g) << 8) | g) << 8);
-}
-
-/** Returns a gray color value from black (i == 0) to white (i == FL_NUM_GRAY - 1). 
-    FL_NUM_GRAY is defined to be 24 in the current FLTK release. 
-    To get the closest FLTK gray value to an 8-bit grayscale color 'I' use:
-
- \code 
-   fl_gray_ramp(I * (FL_NUM_GRAY - 1) / 255)
- \endcode
-*/ 
-inline Fl_Color fl_gray_ramp(int i) {return (Fl_Color)(i+FL_GRAY_RAMP);}
-
-/** Returns a color out of the color cube.
-
-  \p r must be in the range 0 to FL_NUM_RED (5) minus 1, 
-  \p g must be in the range 0 to FL_NUM_GREEN (8) minus 1,
-  \p b must be in the range 0 to FL_NUM_BLUE (5) minus 1.
-
-  To get the closest color to a 8-bit set of R,G,B values use:
-
-  \code
-    fl_color_cube(R * (FL_NUM_RED - 1) / 255,
-       G * (FL_NUM_GREEN - 1) / 255,
-       B * (FL_NUM_BLUE - 1) / 255);
-  \endcode
- */
-inline Fl_Color fl_color_cube(int r, int g, int b) {
-  return (Fl_Color)((b*FL_NUM_RED + r) * FL_NUM_GREEN + g + FL_COLOR_CUBE);}
-
-/*@}*/		// group: Colors  
-
-/** \name Cursors */
-/*@{*/
-
-/** The following constants define the mouse cursors that are available in FLTK.
-
-    Cursors are provided by the system when available, or bitmaps built into
-    FLTK as a fallback.
-
-    \todo enum Fl_Cursor needs maybe an image.
-*/
-enum Fl_Cursor {
-  FL_CURSOR_DEFAULT = 0,    /**< the default cursor, usually an arrow. */
-  FL_CURSOR_ARROW   = 1,    /**< an arrow pointer. */
-  FL_CURSOR_CROSS   = 2,    /**< crosshair. */
-  FL_CURSOR_WAIT    = 3,    /**< busy indicator (e.g. hourglass). */
-  FL_CURSOR_INSERT  = 4,    /**< I-beam. */
-  FL_CURSOR_HAND    = 5,    /**< pointing hand. */
-  FL_CURSOR_HELP    = 6,    /**< question mark pointer. */
-  FL_CURSOR_MOVE    = 7,    /**< 4-pointed arrow or hand. */
-
-  /* Resize indicators */
-  FL_CURSOR_NS      = 101,  /**< up/down resize. */
-  FL_CURSOR_WE      = 102,  /**< left/right resize. */
-  FL_CURSOR_NWSE    = 103,  /**< diagonal resize. */
-  FL_CURSOR_NESW    = 104,  /**< diagonal resize. */
-  FL_CURSOR_NE      = 110,  /**< upwards, right resize. */
-  FL_CURSOR_N       = 111,  /**< upwards resize. */
-  FL_CURSOR_NW      = 112,  /**< upwards, left resize. */
-  FL_CURSOR_E       = 113,  /**< leftwards resize. */
-  FL_CURSOR_W       = 114,  /**< rightwards resize. */
-  FL_CURSOR_SE      = 115,  /**< downwards, right resize. */
-  FL_CURSOR_S       = 116,  /**< downwards resize. */
-  FL_CURSOR_SW      = 117,  /**< downwards, left resize. */
-
-  FL_CURSOR_NONE    = 255,  /**< invisible. */
-};
-/*@}*/		// group: Cursors  
-
-/** FD "when" conditions */
-enum { // values for "when" passed to Fl::add_fd()
-  FL_READ   = 1, /**< Call the callback when there is data to be read. */
-  FL_WRITE  = 4, /**< Call the callback when data can be written without blocking. */
-  FL_EXCEPT = 8  /**< Call the callback if an exception occurs on the file. */
-};
-
-/** visual types and Fl_Gl_Window::mode() (values match Glut) */
-enum Fl_Mode { 
-  FL_RGB	= 0,
-  FL_INDEX	= 1,
-  FL_SINGLE	= 0,
-  FL_DOUBLE	= 2,
-  FL_ACCUM	= 4,
-  FL_ALPHA	= 8,
-  FL_DEPTH	= 16,
-  FL_STENCIL	= 32,
-  FL_RGB8	= 64,
-  FL_MULTISAMPLE= 128,
-  FL_STEREO     = 256,
-  FL_FAKE_SINGLE = 512	// Fake single buffered windows using double-buffer
-};
-
-// image alpha blending
-
-#define FL_IMAGE_WITH_ALPHA 0x40000000
-
-/** Damage masks */
-enum Fl_Damage {
-  FL_DAMAGE_CHILD    = 0x01, /**< A child needs to be redrawn. */
-  FL_DAMAGE_EXPOSE   = 0x02, /**< The window was exposed. */
-  FL_DAMAGE_SCROLL   = 0x04, /**< The Fl_Scroll widget was scrolled. */
-  FL_DAMAGE_OVERLAY  = 0x08, /**< The overlay planes need to be redrawn. */
-  FL_DAMAGE_USER1    = 0x10, /**< First user-defined damage bit. */
-  FL_DAMAGE_USER2    = 0x20, /**< Second user-defined damage bit. */
-  FL_DAMAGE_ALL      = 0x80  /**< Everything needs to be redrawn. */
-};
-
-// FLTK 1.0.x compatibility definitions...
-#  ifdef FLTK_1_0_COMPAT
-#    define contrast	fl_contrast
-#    define down	fl_down
-#    define frame	fl_frame
-#    define inactive	fl_inactive
-#  endif // FLTK_1_0_COMPAT
-
-#endif
-
-//
-// End of "$Id: Enumerations.H 8710 2011-05-21 21:55:59Z manolo $".
-//
diff --git a/common/fltk/FL/Fl.H b/common/fltk/FL/Fl.H
deleted file mode 100644
index e00735f..0000000
--- a/common/fltk/FL/Fl.H
+++ /dev/null
@@ -1,1190 +0,0 @@
-//
-// "$Id: Fl.H 8724 2011-05-23 18:01:29Z manolo $"
-//
-// Main header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-    Fl static class.
- */
-
-#ifndef Fl_H
-#  define Fl_H
-
-#ifdef FLTK_HAVE_CAIRO
-# include <FL/Fl_Cairo.H>
-#endif
-
-#  include "fl_utf8.h"
-#  include "Enumerations.H"
-#  ifndef Fl_Object
-#    define Fl_Object Fl_Widget	/**< for back compatibility - use Fl_Widget! */
-#  endif
-
-#  ifdef check
-#    undef check
-#  endif
-
-
-class Fl_Widget;
-class Fl_Window;
-class Fl_Image;
-struct Fl_Label;
-
-
-/** \defgroup  callback_functions Callback function typedefs
- \brief Typedefs defined in <FL/Fl.H> for callback or handler functions passed as function parameters.
-
-    FLTK uses callback functions as parameters for some function calls, e.g. to
-    set up global event handlers (Fl::add_handler()), to add a timeout handler
-    (Fl::add_timeout()), and many more.
-
-    The typedefs defined in this group describe the function parameters used to set
-    up or clear the callback functions and should also be referenced to define the
-    callback function to handle such events in the user's code.
-
-    \see Fl::add_handler(), Fl::add_timeout(), Fl::repeat_timeout(),
-	 Fl::remove_timeout() and others
-  @{ */
-
-/** Signature of some label drawing functions passed as parameters */
-typedef void (Fl_Label_Draw_F)(const Fl_Label *label, int x, int y, int w, int h, Fl_Align align);
-
-/** Signature of some label measurement functions passed as parameters */
-typedef void (Fl_Label_Measure_F)(const Fl_Label *label, int &width, int &height);
-
-/** Signature of some box drawing functions passed as parameters */
-typedef void (Fl_Box_Draw_F)(int x, int y, int w, int h, Fl_Color color);
-
-/** Signature of some timeout callback functions passed as parameters */
-typedef void (*Fl_Timeout_Handler)(void *data);
-
-/** Signature of some wakeup callback functions passed as parameters */
-typedef void (*Fl_Awake_Handler)(void *data);
-
-/** Signature of add_idle callback functions passed as parameters */
-typedef void (*Fl_Idle_Handler)(void *data);
-
-/** Signature of set_idle callback functions passed as parameters */
-typedef void (*Fl_Old_Idle_Handler)();
-
-/** Signature of add_fd functions passed as parameters */
-typedef void (*Fl_FD_Handler)(int fd, void *data);
-
-/** Signature of add_handler functions passed as parameters */
-typedef int (*Fl_Event_Handler)(int event);
-
-/** Signature of set_abort functions passed as parameters */
-typedef void (*Fl_Abort_Handler)(const char *format,...);
-
-/** Signature of set_atclose functions passed as parameters */
-typedef void (*Fl_Atclose_Handler)(Fl_Window *window, void *data);
-
-/** Signature of args functions passed as parameters */
-typedef int (*Fl_Args_Handler)(int argc, char **argv, int &i);
-
-/** Signature of event_dispatch functions passed as parameters.
-    \see Fl::event_dispatch(Fl_Event_Dispatch) */
-typedef int (*Fl_Event_Dispatch)(int event, Fl_Window *w);
-
-/** Signature of add_clipboard_notify functions passed as parameters */
-typedef void (*Fl_Clipboard_Notify_Handler)(int source, void *data);
-
-/** @} */ /* group callback_functions */
-
-
-/**
-  The Fl is the FLTK global (static) class containing
-  state information and global methods for the current application.
-*/
-class FL_EXPORT Fl {
-  Fl() {}; // no constructor!
-  
-public: // should be private!
-#ifndef FL_DOXYGEN
-  static int e_number;
-  static int e_x;
-  static int e_y;
-  static int e_x_root;
-  static int e_y_root;
-  static int e_dx;
-  static int e_dy;
-  static int e_state;
-  static int e_clicks;
-  static int e_is_click;
-  static int e_keysym;
-  static char* e_text;
-  static int e_length;
-  static Fl_Event_Dispatch e_dispatch;
-  static Fl_Widget* belowmouse_;
-  static Fl_Widget* pushed_;
-  static Fl_Widget* focus_;
-  static int damage_;
-  static Fl_Widget* selection_owner_;
-  static Fl_Window* modal_;
-  static Fl_Window* grab_;
-  static int compose_state;
-#endif
-  /**
-    If true then flush() will do something.
-  */
-  static void damage(int d) {damage_ = d;}
-  
-public:
-  /** Enumerator for global FLTK options.
-      These options can be set system wide, per user, or for the running
-      application only.
-      \see Fl::option(Fl_Option, bool)
-      \see Fl::option(Fl_Option)
-  */
-  typedef enum {
-      /// When switched on, moving the text cursor beyond the start or end of
-      /// a text in a text widget will change focus to the next text widget.
-      /// When switched off, the cursor will stop at the end of the text.
-      /// Pressing Tab or Ctrl-Tab will advance the keyboard focus.
-    OPTION_ARROW_FOCUS = 0,
-      // When switched on, FLTK will use the file chooser dialog that comes 
-      // with your operating system whenever possible. When switched off, FLTK
-      // will present its own file chooser.
-      // \todo implement me
-    // OPTION_NATIVE_FILECHOOSER,
-      // When Filechooser Preview is enabled, the FLTK or native file chooser
-      // will show a preview of a selected file (if possible) before the user
-      // decides to choose the file.
-      // \todo implement me
-    //OPTION_FILECHOOSER_PREVIEW,
-      /// If visible focus is switched on, FLTK will draw a dotted rectangle 
-      /// inside the widget that will receive the next keystroke. If switched
-      /// off, no such indicator will be drawn and keyboard navigation
-      /// is disabled.
-    OPTION_VISIBLE_FOCUS,
-      /// If text drag-and-drop is enabled, the user can select and drag text
-      /// from any text widget. If disabled, no dragging is possible, however
-      /// dropping text from other applications still works.
-    OPTION_DND_TEXT,
-      /// If tooltips are enabled, hovering the mouse over a widget with a 
-      /// tooltip text will open a little tooltip window until the mouse leaves
-      /// the widget. If disabled, no tooltip is shown.
-    OPTION_SHOW_TOOLTIPS,
-      // don't change this, leave it always as the last element
-      /// For internal use only.
-    OPTION_LAST
-  } Fl_Option;
-
-private:  
-  static unsigned char options_[OPTION_LAST];
-  static unsigned char options_read_;
-  
-public:  
-  /*
-   Return a global setting for all FLTK applications, possibly overridden
-   by a setting specifically for this application.
-   */
-  static bool option(Fl_Option opt);
-  
-  /*
-   Override an option while the application is running.
-   */
-  static void option(Fl_Option opt, bool val);
-  
-  /**
-    The currently executing idle callback function: DO NOT USE THIS DIRECTLY!
-    
-    This is now used as part of a higher level system allowing multiple
-    idle callback functions to be called.
-    \see add_idle(), remove_idle()
-  */
-  static void (*idle)();
-
-#ifndef FL_DOXYGEN
-  static Fl_Awake_Handler *awake_ring_;
-  static void **awake_data_;
-  static int awake_ring_size_;
-  static int awake_ring_head_;
-  static int awake_ring_tail_;
-  static const char* scheme_;
-  static Fl_Image* scheme_bg_;
-
-  static int e_original_keysym; // late addition
-  static int scrollbar_size_;
-#endif
-
-
-  static int add_awake_handler_(Fl_Awake_Handler, void*);
-  static int get_awake_handler_(Fl_Awake_Handler&, void*&);
-
-public:
-
-  // API version number
-  static double version();
-
-  // argument parsers:
-  static int arg(int argc, char **argv, int& i);
-  static int args(int argc, char **argv, int& i, Fl_Args_Handler cb = 0);
-  static void args(int argc, char **argv);
-  /**
-    Usage string displayed if Fl::args() detects an invalid argument.
-    This may be changed to point to customized text at run-time.
-  */
-  static const char* const help;
-
-  // things called by initialization:
-  static void display(const char*);
-  static int visual(int);
-  /**
-    This does the same thing as Fl::visual(int) but also requires OpenGL
-    drawing to work. This <I>must</I> be done if you want to draw in
-    normal windows with OpenGL with gl_start() and gl_end().
-    It may be useful to call this so your X windows use the same visual
-    as an Fl_Gl_Window, which on some servers will reduce colormap flashing.
-
-    See Fl_Gl_Window for a list of additional values for the argument.
-  */
-  static int gl_visual(int, int *alist=0); // platform dependent
-  static void own_colormap();
-  static void get_system_colors();
-  static void foreground(uchar, uchar, uchar);
-  static void background(uchar, uchar, uchar);
-  static void background2(uchar, uchar, uchar);
-
-  // schemes:
-  static int scheme(const char*);
-  /** See void scheme(const char *name) */
-  static const char* scheme() {return scheme_;}
-  /** 
-    Called by scheme according to scheme name. 
-    Loads or reloads the current scheme selection. 
-    See void scheme(const char *name) 
-  */
-  static int reload_scheme(); // platform dependent
-  static int scrollbar_size();
-  static void scrollbar_size(int W);
-
-  // execution:
-  static int wait();
-  static double wait(double time);
-  static int check();
-  static int ready();
-  static int run();
-  static Fl_Widget* readqueue();
-  /**
-  Adds a one-shot timeout callback.  The function will be called by
-  Fl::wait() at <i>t</i> seconds after this function is called.
-  The optional void* argument is passed to the callback.
-  
-  You can have multiple timeout callbacks. To remove a timeout
-  callback use Fl::remove_timeout().
-  
-  If you need more accurate, repeated timeouts, use Fl::repeat_timeout() to
-  reschedule the subsequent timeouts.
-  
-  The following code will print "TICK" each second on
-  stdout with a fair degree of accuracy:
-  
-  \code
-     void callback(void*) {
-       puts("TICK");
-       Fl::repeat_timeout(1.0, callback);
-     }
-  
-     int main() {
-       Fl::add_timeout(1.0, callback);
-       return Fl::run();
-     }
-  \endcode
-  */
-  static void add_timeout(double t, Fl_Timeout_Handler,void* = 0); // platform dependent
-  /**
-  Repeats a timeout callback from the expiration of the
-  previous timeout, allowing for more accurate timing. You may only call
-  this method inside a timeout callback.
-  
-  The following code will print "TICK" each second on
-  stdout with a fair degree of accuracy:
-  
-  \code
-     void callback(void*) {
-       puts("TICK");
-       Fl::repeat_timeout(1.0, callback);
-     }
-  
-     int main() {
-       Fl::add_timeout(1.0, callback);
-       return Fl::run();
-     }
-  \endcode
-  */
-  static void repeat_timeout(double t, Fl_Timeout_Handler, void* = 0); // platform dependent
-  static int  has_timeout(Fl_Timeout_Handler, void* = 0);
-  static void remove_timeout(Fl_Timeout_Handler, void* = 0);
-  static void add_check(Fl_Timeout_Handler, void* = 0);
-  static int  has_check(Fl_Timeout_Handler, void* = 0);
-  static void remove_check(Fl_Timeout_Handler, void* = 0);
-  /**
-    Adds file descriptor fd to listen to.
-    
-    When the fd becomes ready for reading Fl::wait() will call the
-    callback and then return. The callback is passed the fd and the
-    arbitrary void* argument.
-    
-    The second version takes a when bitfield, with the bits
-    FL_READ, FL_WRITE, and FL_EXCEPT defined,
-    to indicate when the callback should be done.
-    
-    There can only be one callback of each type for a file descriptor. 
-    Fl::remove_fd() gets rid of <I>all</I> the callbacks for a given
-    file descriptor.
-    
-    Under UNIX <I>any</I> file descriptor can be monitored (files,
-    devices, pipes, sockets, etc.). Due to limitations in Microsoft Windows,
-    WIN32 applications can only monitor sockets.
-  */
-  static void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0); // platform dependent
-  /** See void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0) */
-  static void add_fd(int fd, Fl_FD_Handler cb, void* = 0); // platform dependent
-  /** Removes a file descriptor handler. */
-  static void remove_fd(int, int when); // platform dependent
-  /** Removes a file descriptor handler. */
-  static void remove_fd(int); // platform dependent
-
-  static void add_idle(Fl_Idle_Handler cb, void* data = 0);
-  static int  has_idle(Fl_Idle_Handler cb, void* data = 0);
-  static void remove_idle(Fl_Idle_Handler cb, void* data = 0);
-  /** If true then flush() will do something. */
-  static int damage() {return damage_;}
-  static void redraw();
-  static void flush();
-  /** \addtogroup group_comdlg
-    @{ */
-  /**
-  FLTK calls Fl::warning() to output a warning message.
-  
-  The default version on Windows returns \e without printing a warning
-  message, because Windows programs normally don't have stderr (a console
-  window) enabled.
-
-  The default version on all other platforms prints the warning message to stderr.
-
-  You can override the behavior by setting the function pointer to your
-  own routine.
-
-  Fl::warning() means that there was a recoverable problem, the display may
-  be messed up, but the user can probably keep working - all X protocol
-  errors call this, for example. The default implementation returns after
-  displaying the message.
-   \note \#include <FL/Fl.H>
-  */
-  static void (*warning)(const char*, ...);
-  /**
-  FLTK calls Fl::error() to output a normal error message.
-  
-  The default version on Windows displays the error message in a MessageBox window.
-
-  The default version on all other platforms prints the error message to stderr.
-
-  You can override the behavior by setting the function pointer to your
-  own routine.
-
-  Fl::error() means there is a recoverable error such as the inability to read
-  an image file. The default implementation returns after displaying the message.
-   \note \#include <FL/Fl.H>
-  */
-  static void (*error)(const char*, ...);
-  /**
-  FLTK calls Fl::fatal() to output a fatal error message.
-  
-  The default version on Windows displays the error message in a MessageBox window.
-
-  The default version on all other platforms prints the error message to stderr.
-  
-  You can override the behavior by setting the function pointer to your
-  own routine.
-
-  Fl::fatal() must not return, as FLTK is in an unusable state, however your
-  version may be able to use longjmp or an exception to continue, as long as
-  it does not call FLTK again. The default implementation exits with status 1
-  after displaying the message.
-   \note \#include <FL/Fl.H>
-  */
-  static void (*fatal)(const char*, ...);
-  /** @} */
-
-  /** \defgroup  fl_windows Windows handling functions
-      \brief Windows and standard dialogs handling declared in <FL/Fl.H>
-    @{ */
-  static Fl_Window* first_window();
-  static void first_window(Fl_Window*);
-  static Fl_Window* next_window(const Fl_Window*);
-
-  /**
-    Returns the top-most modal() window currently shown.
-
-    This is the most recently shown() window with modal() true, or NULL
-    if there are no modal() windows shown().
-    The modal() window has its handle() method called
-    for all events, and no other windows will have handle()
-    called (grab() overrides this).
-  */
-  static Fl_Window* modal() {return modal_;}
-  /** Returns the window that currently receives all events.
-   
-   \return The window that currently receives all events,
-   or NULL if event grabbing is currently OFF.
-  */
-  static Fl_Window* grab() {return grab_;}
-  /** Selects the window to grab.  
-   This is used when pop-up menu systems are active.
-   
-   Send all events to the passed window no matter where the pointer or
-   focus is (including in other programs). The window <I>does not have
-   to be shown()</I> , this lets the handle() method of a
-   "dummy" window override all event handling and allows you to
-   map and unmap a complex set of windows (under both X and WIN32
-   <I>some</I> window must be mapped because the system interface needs a
-   window id).
-   
-   If grab() is on it will also affect show() of windows by doing
-   system-specific operations (on X it turns on override-redirect).
-   These are designed to make menus popup reliably
-   and faster on the system.
-   
-   To turn off grabbing do Fl::grab(0).
-   
-   <I>Be careful that your program does not enter an infinite loop
-   while grab() is on.  On X this will lock up your screen!</I>
-   To avoid this potential lockup, all newer operating systems seem to 
-   limit mouse pointer grabbing to the time during which a mouse button 
-   is held down. Some OS's may not support grabbing at all.
-   */
-  static void grab(Fl_Window*); // platform dependent
-  /** @} */
-
-  /** \defgroup fl_events Events handling functions
-	Fl class events handling API declared in <FL/Fl.H>
-	@{
-  */
-  // event information:
-  /**
-    Returns the last event that was processed. This can be used
-    to determine if a callback is being done in response to a
-    keypress, mouse click, etc.
-  */
-  static int event()		{return e_number;}
-  /**
-    Returns the mouse position of the event relative to the Fl_Window
-    it was passed to.
-  */
-  static int event_x()	{return e_x;}
-  /**
-    Returns the mouse position of the event relative to the Fl_Window
-    it was passed to.
-  */
-  static int event_y()	{return e_y;}
-  /**
-    Returns the mouse position on the screen of the event.  To find the
-    absolute position of an Fl_Window on the screen, use the
-    difference between event_x_root(),event_y_root() and 
-    event_x(),event_y().
-  */
-  static int event_x_root()	{return e_x_root;}
-  /**
-    Returns the mouse position on the screen of the event.  To find the
-    absolute position of an Fl_Window on the screen, use the
-    difference between event_x_root(),event_y_root() and 
-    event_x(),event_y().
-  */
-  static int event_y_root()	{return e_y_root;}
-  /**
-    Returns the current horizontal mouse scrolling associated with the
-    FL_MOUSEWHEEL event. Right is positive.
-  */
-  static int event_dx()	{return e_dx;}
-  /**
-    Returns the current vertical mouse scrolling associated with the
-    FL_MOUSEWHEEL event. Down is positive.
-  */
-  static int event_dy()	{return e_dy;}
-  /**
-    Return where the mouse is on the screen by doing a round-trip query to
-    the server.  You should use Fl::event_x_root() and 
-    Fl::event_y_root() if possible, but this is necessary if you are
-    not sure if a mouse event has been processed recently (such as to
-    position your first window).  If the display is not open, this will
-    open it.
-  */
-  static void get_mouse(int &,int &); // platform dependent
-  /**
-    Returns non zero if we had a double click event.
-    \retval Non-zero if the most recent FL_PUSH or FL_KEYBOARD was a "double click".  
-    \retval  N-1 for  N clicks. 
-    A double click is counted if the same button is pressed
-    again while event_is_click() is true.
-    
-   */
-  static int event_clicks()	{return e_clicks;}
-  /**
-    Manually sets the number returned by Fl::event_clicks().  
-    This can be used to set it to zero so that
-    later code does not think an item was double-clicked.
-    \param[in] i corresponds to no double-click if 0, i+1 mouse clicks otherwise
-    \see int event_clicks()
-  */
-  static void event_clicks(int i) {e_clicks = i;}
-  /**
-  Returns non-zero if the mouse has not moved far enough
-  and not enough time has passed since the last FL_PUSH or 
-  FL_KEYBOARD event for it to be considered a "drag" rather than a
-  "click".  You can test this on FL_DRAG, FL_RELEASE,
-  and FL_MOVE events.  
-  */
-  static int event_is_click()	{return e_is_click;}
-  /**
-   Clears the value returned by Fl::event_is_click().  
-   Useful to prevent the <I>next</I>
-   click from being counted as a double-click or to make a popup menu
-   pick an item with a single click.  Don't pass non-zero to this. 
-  */
-  static void event_is_click(int i) {e_is_click = i;}
-  /**
-    Gets which particular mouse button caused the current event. 
-    This returns garbage if the most recent event was not a FL_PUSH or FL_RELEASE event.
-    \retval FL_LEFT_MOUSE \retval FL_MIDDLE_MOUSE \retval FL_RIGHT_MOUSE.
-    \see Fl::event_buttons()
-  */
-  static int event_button()	{return e_keysym-FL_Button;}
-  /**
-    This is a bitfield of what shift states were on and what mouse buttons
-    were held down during the most recent event. The second version
-    returns non-zero if any of the passed bits are turned on.
-    The legal bits are:
-    
-    \li FL_SHIFT
-    \li FL_CAPS_LOCK
-    \li FL_CTRL
-    \li FL_ALT
-    \li FL_NUM_LOCK
-    \li FL_META
-    \li FL_SCROLL_LOCK
-    \li FL_BUTTON1
-    \li FL_BUTTON2
-    \li FL_BUTTON3
-    
-    X servers do not agree on shift states, and FL_NUM_LOCK, FL_META, and
-    FL_SCROLL_LOCK may not work. The values were selected to match the
-    XFree86 server on Linux. In addition there is a bug in the way X works
-    so that the shift state is not correctly reported until the first event
-    <I>after</I> the shift key is pressed or released.
-  */
-  static int event_state()	{return e_state;}
-  /** See int event_state() */
-  static int event_state(int i) {return e_state&i;}
-  /**
-    Gets which key on the keyboard was last pushed.
-
-    The returned integer 'key code' is not necessarily a text
-    equivalent for the keystroke. For instance: if someone presses '5' on the 
-    numeric keypad with numlock on, Fl::event_key() may return the 'key code'
-    for this key, and NOT the character '5'. To always get the '5', use Fl::event_text() instead.
-    
-    \returns an integer 'key code', or 0 if the last event was not a key press or release.
-    \see int event_key(int), event_text(), compose(int&).
-  */
-  static int event_key()	{return e_keysym;}
-  /**
-    Returns the keycode of the last key event, regardless of the NumLock state.
-      
-    If NumLock is deactivated, FLTK translates events from the 
-    numeric keypad into the corresponding arrow key events. 
-    event_key() returns the translated key code, whereas
-    event_original_key() returns the keycode before NumLock translation.
-  */
-  static int event_original_key(){return e_original_keysym;}
-  /** 
-    Returns true if the given \p key was held
-    down (or pressed) <I>during</I> the last event.  This is constant until
-    the next event is read from the server.
-    
-    Fl::get_key(int) returns true if the given key is held down <I>now</I>.
-    Under X this requires a round-trip to the server and is <I>much</I>
-    slower than Fl::event_key(int).
-    
-    Keys are identified by the <I>unshifted</I> values. FLTK defines a
-    set of symbols that should work on most modern machines for every key
-    on the keyboard:
-    
-    \li All keys on the main keyboard producing a printable ASCII
-	character use the value of that ASCII character (as though shift,
-	ctrl, and caps lock were not on). The space bar is 32.
-    \li All keys on the numeric keypad producing a printable ASCII
-	character use the value of that ASCII character plus FL_KP.
-	The highest possible value is FL_KP_Last so you can
-	range-check to see if something is  on the keypad.
-    \li All numbered function keys use the number on the function key plus 
-	FL_F.  The highest possible number is FL_F_Last, so you
-	can range-check a value.
-    \li Buttons on the mouse are considered keys, and use the button
-	number (where the left button is 1) plus FL_Button.
-    \li All other keys on the keypad have a symbol: FL_Escape,
-	FL_BackSpace, FL_Tab, FL_Enter, FL_Print, FL_Scroll_Lock, FL_Pause,
-	FL_Insert, FL_Home, FL_Page_Up, FL_Delete, FL_End, FL_Page_Down,
-	FL_Left, FL_Up, FL_Right, FL_Down, FL_Shift_L, FL_Shift_R,
-	FL_Control_L, FL_Control_R, FL_Caps_Lock, FL_Alt_L, FL_Alt_R,
-	FL_Meta_L, FL_Meta_R, FL_Menu, FL_Num_Lock, FL_KP_Enter.  Be
-	careful not to confuse these with the very similar, but all-caps,
-	symbols used by Fl::event_state().
-
-    On X Fl::get_key(FL_Button+n) does not work.
-    
-    On WIN32 Fl::get_key(FL_KP_Enter) and Fl::event_key(FL_KP_Enter) do not work.
-  */
-  static int event_key(int key);
-  /** 
-    Returns true if the given \p key is held down <I>now</I>.  
-    Under X this requires a round-trip to the server and is <I>much</I>
-    slower than Fl::event_key(int). \see event_key(int)
-  */
-  static int get_key(int key); // platform dependent
-  /** 
-    Returns the text associated with the current event, including FL_PASTE or FL_DND_RELEASE events.
-    This can be used in response to FL_KEYUP, FL_KEYDOWN, FL_PASTE, FL_DND_RELEASE.
-
-    When responding to FL_KEYUP/FL_KEYDOWN, use this function instead of Fl::event_key()
-    to get the text equivalent of keystrokes suitable for inserting into strings 
-    and text widgets.
-
-    The returned string is guaranteed to be be NULL terminated.
-    However, see Fl::event_length() for the actual length of the string,
-    in case the string itself contains NULLs that are part of the text data.
-
-    \returns A NULL terminated text string equivalent of the last keystroke.
-   */
-  static const char* event_text() {return e_text;}
-  /**
-    Returns the length of the text in Fl::event_text(). There
-    will always be a nul at this position in the text. However there may
-    be a nul before that if the keystroke translates to a nul character or
-    you paste a nul character.
-  */
-  static int event_length() {return e_length;}
-
-  static int compose(int &del);
-  static void compose_reset();
-  static int event_inside(int,int,int,int);
-  static int event_inside(const Fl_Widget*);
-  static int test_shortcut(Fl_Shortcut);
-
-  // event destinations:
-  static int handle(int, Fl_Window*);
-  static int handle_(int, Fl_Window*);
-  /**  Gets the widget that is below the mouse. 
-       \see  belowmouse(Fl_Widget*) */
-  static Fl_Widget* belowmouse() {return belowmouse_;}
-  static void belowmouse(Fl_Widget*);
-  /** Gets the widget that is being pushed.
-      \see void pushed(Fl_Widget*) */
-  static Fl_Widget* pushed()	{return pushed_;}
-  static void pushed(Fl_Widget*);
-  /** Gets the current Fl::focus() widget. \sa Fl::focus(Fl_Widget*) */
-  static Fl_Widget* focus()	{return focus_;}
-  static void focus(Fl_Widget*);
-  static void add_handler(Fl_Event_Handler h);
-  static void remove_handler(Fl_Event_Handler h);
-  static void event_dispatch(Fl_Event_Dispatch d);
-  static Fl_Event_Dispatch event_dispatch();
-  /** @} */
-
-  /** \defgroup  fl_clipboard  Selection & Clipboard functions
-	FLTK global copy/cut/paste functions declared in <FL/Fl.H>
-   @{ */
-  // cut/paste:
-  /**
-  Copies the data pointed to by \p stuff to the selection buffer 
-  (\p destination is 0) or
-  the clipboard (\p destination is 1); \p len is the number of relevant
-  bytes in \p stuff.
-  The selection buffer is used for
-  middle-mouse pastes and for drag-and-drop selections. The 
-  clipboard is used for traditional copy/cut/paste operations.
-  */
-  static void copy(const char* stuff, int len, int destination = 0); // platform dependent
-  /**
-  Pastes the data from the selection buffer (\p source is 0) or the clipboard 
-  (\p source is 1) into \p receiver.  
-  Set things up so the receiver widget will be called with an FL_PASTE event some
-  time in the future with the data from the specified \p source in Fl::event_text()
-  and the number of characters in Fl::event_length().
-  The receiver
-  should be prepared to be called \e directly by this, or for
-  it to happen \e later, or possibly <i>not at all</i>.  This
-  allows the window system to take as long as necessary to retrieve
-  the paste buffer (or even to screw up completely) without complex
-  and error-prone synchronization code in FLTK.
-   
-  The selection buffer is used for middle-mouse pastes and for 
-  drag-and-drop selections. The clipboard is used for traditional 
-  copy/cut/paste operations.
-  */
-  static void paste(Fl_Widget &receiver, int source /*=0*/); // platform dependent
-  /**
-  FLTK will call the registered callback whenever there is a change to the
-  selection buffer or the clipboard. The source argument indicates which
-  of the two has changed. Only changes by other applications are reported.
-  \note Some systems require polling to monitor the clipboard and may
-  therefore have some delay in detecting changes.
-  */
-  static void add_clipboard_notify(Fl_Clipboard_Notify_Handler h, void *data);
-  /**
-  Stop calling the specified callback when there are changes to the selection
-  buffer or the clipboard.
-  */
-  static void remove_clipboard_notify(Fl_Clipboard_Notify_Handler h);
-  /**
-    Initiate a Drag And Drop operation. The selection buffer should be
-    filled with relevant data before calling this method. FLTK will
-    then initiate the system wide drag and drop handling. Dropped data
-    will be marked as <i>text</i>.
-   
-    Create a selection first using:
-    Fl::copy(const char *stuff, int len, 0)
-  */
-  static int dnd(); // platform dependent
-
-  // These are for back-compatibility only:
-  /**  back-compatibility only: Gets the widget owning the current selection  
-       \see Fl_Widget* selection_owner(Fl_Widget*) */
-  static Fl_Widget* selection_owner() {return selection_owner_;}
-  static void selection_owner(Fl_Widget*);
-  static void selection(Fl_Widget &owner, const char*, int len);
-  static void paste(Fl_Widget &receiver);
-/** @} */
-/** \defgroup  fl_screen  Screen functions
-	fl global screen functions declared in <FL/Fl.H>
-     @{ */
-  // screen size:
-  /** Returns the origin of the current screen work area, where 0 indicates the left side of the screen. */
-  static int x(); // platform dependent
-  /** Returns the origin of the current screen work area, where 0 indicates the top edge of the screen. */
-  static int y(); // platform dependent
-  /** Returns the width of the screen work area in pixels. */
-  static int w(); // platform dependent
-  /** Returns the height of the screen work area in pixels. */
-  static int h(); // platform dependent
-
-  // multi-head support:
-  static int screen_count();
-  /** 
-      Gets the bounding box of a screen that contains the mouse pointer.
-      \param[out]  X,Y,W,H the corresponding screen bounding box
-      \see void screen_xywh(int &x, int &y, int &w, int &h, int mx, int my) 
-  */
-  static void screen_xywh(int &X, int &Y, int &W, int &H) {
-    screen_xywh(X, Y, W, H, e_x_root, e_y_root);
-  }
-  static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my);
-  static void screen_xywh(int &X, int &Y, int &W, int &H, int n); 
-  static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh);
-  static void screen_dpi(float &h, float &v, int n=0);
-
-  /**   @} */
-
-  /** \defgroup  fl_attributes  Color & Font functions
-	fl global color, font functions.
-   These functions are declared in <FL/Fl.H> or <FL/fl_draw.H>. 
-     @{ */
- 
-  // color map:
-  static void	set_color(Fl_Color, uchar, uchar, uchar);
-  /**
-    Sets an entry in the fl_color index table. You can set it to any
-    8-bit RGB color. The color is not allocated until fl_color(i) is used.
-  */
-  static void	set_color(Fl_Color i, unsigned c); // platform dependent
-  static unsigned get_color(Fl_Color i);
-  static void	get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue);
-  /**
-    Frees the specified color from the colormap, if applicable.
-    If overlay is non-zero then the color is freed from the
-    overlay colormap.
-  */
-  static void	free_color(Fl_Color i, int overlay = 0); // platform dependent
-
-  // fonts:
-  static const char* get_font(Fl_Font);
-  /**
-    Get a human-readable string describing the family of this face.  This
-    is useful if you are presenting a choice to the user.  There is no
-    guarantee that each face has a different name.  The return value points
-    to a static buffer that is overwritten each call.
-    
-    The integer pointed to by \p attributes (if the pointer is not
-    zero) is set to zero, FL_BOLD or FL_ITALIC or 
-    FL_BOLD | FL_ITALIC.  To locate a "family" of fonts, search
-    forward and back for a set with non-zero attributes, these faces along
-    with the face with a zero attribute before them constitute a family.
-  */
-  static const char* get_font_name(Fl_Font, int* attributes = 0);
-  /**
-    Return an array of sizes in \p sizep.  The return value is the
-    length of this array.  The sizes are sorted from smallest to largest
-    and indicate what sizes can be given to fl_font() that will
-    be matched exactly (fl_font() will pick the closest size for
-    other sizes).  A zero in the first location of the array indicates a
-    scalable font, where any size works, although the array may list sizes
-    that work "better" than others.  Warning: the returned array
-    points at a static buffer that is overwritten each call.  Under X this
-    will open the display.
-  */
-  static int get_font_sizes(Fl_Font, int*& sizep);
-  static void set_font(Fl_Font, const char*);
-  static void set_font(Fl_Font, Fl_Font);
-  /**
-    FLTK will open the display, and add every fonts on the server to the
-    face table.  It will attempt to put "families" of faces together, so
-    that the normal one is first, followed by bold, italic, and bold
-    italic.
-    
-    The optional argument is a string to describe the set of fonts to
-    add.  Passing NULL will select only fonts that have the
-    ISO8859-1 character set (and are thus usable by normal text).  Passing
-    "-*" will select all fonts with any encoding as long as they have
-    normal X font names with dashes in them.  Passing "*" will list every
-    font that exists (on X this may produce some strange output).  Other
-    values may be useful but are system dependent.  With WIN32 NULL
-    selects fonts with ISO8859-1 encoding and non-NULL selects
-    all fonts.
-    
-    The return value is how many faces are in the table after this is done.
-  */
-  static Fl_Font set_fonts(const char* = 0); // platform dependent
-
-  /**   @} */
- /** \defgroup  fl_drawings  Drawing functions
-  FLTK global graphics and GUI drawing functions.
-  These functions are declared in <FL/fl_draw.H>, 
-  and in <FL/x.H> for offscreen buffer-related ones.
-     @{ */
-  // <Hack to re-order the 'Drawing functions' group>
- /** @} */
-
-  // labeltypes:
-  static void set_labeltype(Fl_Labeltype,Fl_Label_Draw_F*,Fl_Label_Measure_F*);
-  /** Sets the functions to call to draw and measure a specific labeltype. */
-  static void set_labeltype(Fl_Labeltype, Fl_Labeltype from); // is it defined ?
-
-  // boxtypes:
-  static Fl_Box_Draw_F *get_boxtype(Fl_Boxtype);
-  static void set_boxtype(Fl_Boxtype, Fl_Box_Draw_F*,uchar,uchar,uchar,uchar);
-  static void set_boxtype(Fl_Boxtype, Fl_Boxtype from);
-  static int box_dx(Fl_Boxtype);
-  static int box_dy(Fl_Boxtype);
-  static int box_dw(Fl_Boxtype);
-  static int box_dh(Fl_Boxtype);
-  static int draw_box_active();
-
-  // back compatibility:
-  /** \addtogroup fl_windows 
-    @{ */
-  /** For back compatibility, sets the void Fl::fatal handler callback */
-  static void set_abort(Fl_Abort_Handler f) {fatal = f;}
-  static void (*atclose)(Fl_Window*,void*);
-  static void default_atclose(Fl_Window*,void*);
-  /** For back compatibility, sets the Fl::atclose handler callback. You
-      can now simply change the callback for the window instead.
-      \see Fl_Window::callback(Fl_Callback*) */
-  static void set_atclose(Fl_Atclose_Handler f) {atclose = f;}
-  /**   @} */
-
-  /** \addtogroup fl_events 
-    @{ */
-  /** Returns non-zero if the Shift key is pressed. */
-  static int event_shift() {return e_state&FL_SHIFT;}
-  /** Returns non-zero if the Control key is pressed. */
-  static int event_ctrl() {return e_state&FL_CTRL;}
-  /** Returns non-zero if the FL_COMMAND key is pressed, either FL_CTRL or on OSX FL_META. */
-  static int event_command() {return e_state&FL_COMMAND;}
-  /** Returns non-zero if the Alt key is pressed. */
-  static int event_alt() {return e_state&FL_ALT;}
-  /**
-    Returns the mouse buttons state bits; if non-zero, then at least one
-    button is pressed now.  This function returns the button state at the 
-    time of the event. During an FL_RELEASE event, the state 
-    of the released button will be 0. To find out, which button 
-    caused an FL_RELEASE event, you can use Fl::event_button() instead.
-    \return a bit mask value like { [FL_BUTTON1] | [FL_BUTTON2] | [FL_BUTTON3] }
-  */
-  static int event_buttons() {return e_state&0x7f000000;}
-  /**
-    Returns non-zero if mouse button 1 is currently held down.
-    For more details, see Fl::event_buttons().
-  */
-  static int event_button1() {return e_state&FL_BUTTON1;}
-  /**
-    Returns non-zero if button 2 is currently held down.
-    For more details, see Fl::event_buttons().
-  */
-  static int event_button2() {return e_state&FL_BUTTON2;}
-  /**
-    Returns non-zero if button 3 is currently held down.
-    For more details, see Fl::event_buttons().
-  */
-  static int event_button3() {return e_state&FL_BUTTON3;}
-  /**   @} */
-
-  /**
-    Sets an idle callback.
-
-    \deprecated This method is obsolete - use the add_idle() method instead.
-  */
-  static void set_idle(Fl_Old_Idle_Handler cb) {idle = cb;}
-  /** See grab(Fl_Window*) */
-  static void grab(Fl_Window& win) {grab(&win);}
-  /** Releases the current grabbed window, equals grab(0).
-  \deprecated Use Fl::grab(0) instead.
-  \see grab(Fl_Window*) */
-  static void release() {grab(0);}
-
-  // Visible focus methods...
-  /**
-    Gets or sets the visible keyboard focus on buttons and other
-    non-text widgets. The default mode is to enable keyboard focus
-    for all widgets.
-  */
-  static void visible_focus(int v) { option(OPTION_VISIBLE_FOCUS, (v!=0)); }
-  /**
-    Gets or sets the visible keyboard focus on buttons and other
-    non-text widgets. The default mode is to enable keyboard focus
-    for all widgets.
-  */
-  static int  visible_focus() { return option(OPTION_VISIBLE_FOCUS); }
-
-  // Drag-n-drop text operation methods...
-  /**
-    Gets or sets whether drag and drop text operations are supported.
-    This specifically affects whether selected text can
-    be dragged from text fields or dragged within a text field as a
-    cut/paste shortcut.
-  */
-  static void dnd_text_ops(int v) { option(OPTION_DND_TEXT, (v!=0)); }
-  /**
-    Gets or sets whether drag and drop text operations are
-    supported. This specifically affects whether selected text can
-    be dragged from text fields or dragged within a text field as a
-    cut/paste shortcut.
-  */
-  static int  dnd_text_ops() { return option(OPTION_DND_TEXT); }
-  /** \defgroup fl_multithread Multithreading support functions
-	fl multithreading support functions declared in <FL/Fl.H>
-   @{ */
-
-  // Multithreading support:
-  static int lock();
-  static void unlock();
-  static void awake(void* message = 0);
-  /** See void awake(void* message=0). */
-  static int awake(Fl_Awake_Handler cb, void* message = 0);
-  /**
-    The thread_message() method returns the last message
-    that was sent from a child by the awake() method.
-    
-    See also: \ref advanced_multithreading
-  */
-  static void* thread_message(); // platform dependent
-  /** @} */
-
-  /** \defgroup fl_del_widget Safe widget deletion support functions
-
-    These functions, declared in <FL/Fl.H>, support deletion of widgets inside callbacks.
-
-    Fl::delete_widget() should be called when deleting widgets
-    or complete widget trees (Fl_Group, Fl_Window, ...) inside
-    callbacks.
-
-    The other functions are intended for internal use. The preferred
-    way to use them is by using the helper class Fl_Widget_Tracker.
-
-    The following is to show how it works ...
-
-    There are three groups of related methods:
-
-      -# scheduled widget deletion
-	- Fl::delete_widget() schedules widgets for deletion
-	- Fl::do_widget_deletion() deletes all scheduled widgets
-      -# widget watch list ("smart pointers")
-	- Fl::watch_widget_pointer() adds a widget pointer to the watch list
-	- Fl::release_widget_pointer() removes a widget pointer from the watch list
-	- Fl::clear_widget_pointer() clears a widget pointer \e in the watch list
-      -# the class Fl_Widget_Tracker:
-	- the constructor calls Fl::watch_widget_pointer()
-	- the destructor calls Fl::release_widget_pointer()
-	- the access methods can be used to test, if a widget has been deleted
-	  \see Fl_Widget_Tracker.
-
-   @{ */
-  // Widget deletion:
-  static void delete_widget(Fl_Widget *w);
-  static void do_widget_deletion();
-  static void watch_widget_pointer(Fl_Widget *&w);
-  static void release_widget_pointer(Fl_Widget *&w);
-  static void clear_widget_pointer(Fl_Widget const *w);
-  /** @} */
-
-#ifdef FLTK_HAVE_CAIRO
-  /** \defgroup group_cairo Cairo support functions and classes 
-      @{ 
-  */
-public:
-  // Cairo support API
-  static cairo_t * cairo_make_current(Fl_Window* w);
-   /** when FLTK_HAVE_CAIRO is defined and cairo_autolink_context() is true, 
-      any current window dc is linked to a current context.
-      This is not the default, because it may not be necessary
-      to add cairo support to all fltk supported windows.
-      When you wish to associate a cairo context in this mode,
-      you need to call explicitly in your draw() overridden method,
-      FL::cairo_make_current(Fl_Window*). This will create a cairo context
-      but only for this Window. 
-      Still in custom cairo application it is possible to handle 
-      completely this process automatically by setting \p alink to true.
-      In this last case, you don't need anymore to call Fl::cairo_make_current().
-      You can use Fl::cairo_cc() to get the current cairo context anytime.
-     \note Only available when configure has the --enable-cairo option
-  */
-  static void cairo_autolink_context(bool alink) {cairo_state_.autolink(alink);}
-  /** 
-    Gets the current autolink mode for cairo support.
-    \retval false if no cairo context autolink is made for each window. 
-    \retval true if any fltk window is attached a cairo context when it 
-    is current. \see void cairo_autolink_context(bool alink) 
-    \note Only available when configure has the --enable-cairo option
- */
-  static bool cairo_autolink_context() {return cairo_state_.autolink();}
-  /** Gets the current cairo context linked with a fltk window. */
-  static cairo_t * cairo_cc() { return cairo_state_.cc(); }
-  /** Sets the current cairo context to \p c.
-      Set \p own to true if you want fltk to handle this cc deletion.
-     \note Only available when configure has the --enable-cairo option
-*/
-  static void cairo_cc(cairo_t * c, bool own=false){ cairo_state_.cc(c, own); } 
-
-private:
-  static cairo_t * cairo_make_current(void* gc);
-  static cairo_t * cairo_make_current(void* gc, int W, int H);
-  static Fl_Cairo_State cairo_state_;
-public:
-  /** @} */ 
-
-#endif // FLTK_HAVE_CAIRO
-
-};
-
-/**
-  This class should be used to control safe widget deletion.
-
-  You can use an Fl_Widget_Tracker object to watch another widget, if you
-  need to know, if this widget has been deleted during a callback.
-
-  This simplifies the use of the "safe widget deletion" methods
-  Fl::watch_widget_pointer() and Fl::release_widget_pointer() and
-  makes their use more reliable, because the destructor autmatically
-  releases the widget pointer from the widget watch list.
-
-  It is intended to be used as an automatic (local/stack) variable,
-  such that the automatic destructor is called when the object's
-  scope is left. This ensures that no stale widget pointers are
-  left in the widget watch list (see example below).
-  
-  You can also create Fl_Widget_Tracker objects with \c new, but then it
-  is your responsibility to delete the object (and thus remove the
-  widget pointer from the watch list) when it is not needed any more.
-
-  Example:
-
-  \code
-    int MyClass::handle (int event) {
-
-      if (...) {
-	Fl_Widget_Tracker wp(this);	// watch myself
-	do_callback();			// call the callback
-
-	if (wp.deleted()) return 1;	// exit, if deleted
-
-	// Now we are sure that the widget has not been deleted.
-	// It is safe to access the widget
-
-	clear_changed();		// access the widget
-      }
-    }
-  \endcode
-
-*/
-class FL_EXPORT Fl_Widget_Tracker {
-
-  Fl_Widget* wp_;
-
-public:
-
-  Fl_Widget_Tracker(Fl_Widget *wi);
-  ~Fl_Widget_Tracker();
-
-  /**
-    Returns a pointer to the watched widget.
-
-    This pointer is \c NULL, if the widget has been deleted.
-  */
-  Fl_Widget *widget() {return wp_;}
-
-  /**
-    Returns 1, if the watched widget has been deleted.
-
-    This is a convenience method. You can also use something like
-
-    <tt>  if (wp.widget() == 0) // ...</tt>
-
-    where \p wp is an Fl_Widget_Tracker object.
-  */
-  int deleted() {return wp_ == 0;}
-
-  /**
-    Returns 1, if the watched widget exists (has not been deleted).
-
-    This is a convenience method. You can also use something like
-
-    <tt>  if (wp.widget() != 0) // ...</tt>
-
-    where \p wp is an Fl_Widget_Tracker object.
-  */
-  int exists()  {return wp_ != 0;}
-
-};
-
- /** \defgroup  fl_unicode  Unicode and UTF-8 functions
-	fl global Unicode and UTF-8 handling functions declared in <FL/fl_utf8.h>
-     @{ */
- /** @} */
-
-#endif // !Fl_H
-
-//
-// End of "$Id: Fl.H 8724 2011-05-23 18:01:29Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_Adjuster.H b/common/fltk/FL/Fl_Adjuster.H
deleted file mode 100644
index d0c6617..0000000
--- a/common/fltk/FL/Fl_Adjuster.H
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// "$Id: Fl_Adjuster.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Adjuster widget header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Adjuster widget . */
-
-// 3-button "slider", made for Nuke
-
-#ifndef Fl_Adjuster_H
-#define Fl_Adjuster_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-/**
-  The Fl_Adjuster widget was stolen from Prisms, and has proven
-  to be very useful for values that need a large dynamic range.
-  \image html adjuster1.png 
-  \image latex adjuster1.png "Fl_Adjuster" width=4cm
-  <P>When you  press a button and drag to the right the value increases.
-  When you drag  to the left it decreases.  The largest button adjusts by
-  100 *  step(), the next by 10 * step() and that
-  smallest button  by step().  Clicking on the buttons
-  increments by 10 times the  amount dragging by a pixel does. Shift +
-  click decrements by 10 times  the amount.
-*/
-class FL_EXPORT Fl_Adjuster : public Fl_Valuator {
-  int drag;
-  int ix;
-  int soft_;
-protected:
-  void draw();
-  int handle(int);
-  void value_damage();
-public:
-  Fl_Adjuster(int X,int Y,int W,int H,const char *l=0);
-  /**
-    If "soft" is turned on, the user is allowed to drag the value outside
-    the range.  If they drag the value to one of the ends, let go, then
-    grab again and continue to drag, they can get to any value.  Default is
-    one.
-  */
-  void soft(int s) {soft_ = s;}
-  /**
-    If "soft" is turned on, the user is allowed to drag the value outside
-    the range.  If they drag the value to one of the ends, let go, then
-    grab again and continue to drag, they can get to any value.  Default is
-    one.
-  */
-  int soft() const {return soft_;}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Adjuster.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_BMP_Image.H b/common/fltk/FL/Fl_BMP_Image.H
deleted file mode 100644
index 2204dc0..0000000
--- a/common/fltk/FL/Fl_BMP_Image.H
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// "$Id: Fl_BMP_Image.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// BMP image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_BMP_Image widget . */
-
-#ifndef Fl_BMP_Image_H
-#define Fl_BMP_Image_H
-#  include "Fl_Image.H"
-
-/**
-  The Fl_BMP_Image class supports loading, caching,
-  and drawing of Windows Bitmap (BMP) image files.
-*/
-class FL_EXPORT Fl_BMP_Image : public Fl_RGB_Image {
-
-  public:
-
-  Fl_BMP_Image(const char* filename);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_BMP_Image.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Bitmap.H b/common/fltk/FL/Fl_Bitmap.H
deleted file mode 100644
index 35256c7..0000000
--- a/common/fltk/FL/Fl_Bitmap.H
+++ /dev/null
@@ -1,85 +0,0 @@
-//
-// "$Id: Fl_Bitmap.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Bitmap header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Bitmap widget . */
-
-#ifndef Fl_Bitmap_H
-#define Fl_Bitmap_H
-#  include "Fl_Image.H"
-
-class Fl_Widget;
-struct Fl_Menu_Item;
-
-/**
-  The Fl_Bitmap class supports caching and drawing of mono-color
-  (bitmap) images. Images are drawn using the current color.
-*/
-class FL_EXPORT Fl_Bitmap : public Fl_Image {
-  friend class Fl_Quartz_Graphics_Driver;
-  friend class Fl_GDI_Graphics_Driver;
-  friend class Fl_Xlib_Graphics_Driver;
-public:
-
-  /** pointer to raw bitmap data */
-  const uchar *array;
-  /** Non-zero if array points to bitmap data allocated internally */
-  int alloc_array;
-  
-  private:
-
-#if defined(__APPLE__) || defined(WIN32)
-  /** for internal use */
-  void *id_;
-#else
-  /** for internal use */
-  unsigned id_;
-#endif // __APPLE__ || WIN32
-
-  public:
-
-  /** The constructors create a new bitmap from the specified bitmap data */
-  Fl_Bitmap(const uchar *bits, int W, int H) :
-    Fl_Image(W,H,0), array(bits), alloc_array(0), id_(0) {data((const char **)&array, 1);}
-  /** The constructors create a new bitmap from the specified bitmap data */
-  Fl_Bitmap(const char *bits, int W, int H) :
-    Fl_Image(W,H,0), array((const uchar *)bits), alloc_array(0), id_(0) {data((const char **)&array, 1);}
-  virtual ~Fl_Bitmap();
-  virtual Fl_Image *copy(int W, int H);
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
-  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
-  virtual void label(Fl_Widget*w);
-  virtual void label(Fl_Menu_Item*m);
-  virtual void uncache();
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Bitmap.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Box.H b/common/fltk/FL/Fl_Box.H
deleted file mode 100644
index 9de875d..0000000
--- a/common/fltk/FL/Fl_Box.H
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// "$Id: Fl_Box.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Box header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Box widget . */
-
-#ifndef Fl_Box_H
-#define Fl_Box_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-/**
-  This widget simply draws its box, and possibly it's label.  Putting it
-  before some other widgets and making it big enough to surround them
-  will let you draw a frame around them.
-*/
-class FL_EXPORT Fl_Box : public Fl_Widget {
-protected:
-  void draw();
-public:
-  /**
-    - The first constructor sets box() to FL_NO_BOX, which
-    means it is invisible. However such widgets are useful as placeholders
-    or Fl_Group::resizable()
-    values.  To change the box to something visible, use box(n).
-    - The second form of the constructor sets the box to the specified box
-    type.
-    <P>The destructor removes the box.
-  */
-    Fl_Box(int X, int Y, int W, int H, const char *l=0)
-	: Fl_Widget(X,Y,W,H,l) {}
-  /**    See Fl_Box::Fl_Box(int x, int y, int w, int h, const char * = 0)   */
-    Fl_Box(Fl_Boxtype b, int X, int Y, int W, int H, const char *l)
-	: Fl_Widget(X,Y,W,H,l) {box(b);}
-
-  virtual int handle(int);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Box.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Browser.H b/common/fltk/FL/Fl_Browser.H
deleted file mode 100644
index b7cc065..0000000
--- a/common/fltk/FL/Fl_Browser.H
+++ /dev/null
@@ -1,324 +0,0 @@
-//
-// "$Id: Fl_Browser.H 8623 2011-04-24 17:09:41Z AlbrechtS $"
-//
-// Browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Browser widget . */
-
-// Forms-compatible browser.  Probably useful for other
-// lists of textual data.  Notice that the line numbers
-// start from 1, and 0 means "no line".
-
-#ifndef Fl_Browser_H
-#define Fl_Browser_H
-
-#include "Fl_Browser_.H"
-#include "Fl_Image.H"
-
-struct FL_BLINE;
-
-/**
-  The Fl_Browser widget displays a scrolling list of text
-  lines, and manages all the storage for the text.  This is not a text
-  editor or spreadsheet!  But it is useful for showing a vertical list of
-  named objects to the user.
-  
-  Each line in the browser is identified by number. <I>The numbers
-  start at one</I> (this is so that zero can be reserved for "no line" in
-  the selective browsers). <I>Unless otherwise noted, the methods do not
-  check to see if the passed line number is in range and legal.  It must
-  always be greater than zero and &lt;= size().</I>
-
-  Each line contains a null-terminated string of text and a void *
-  data pointer.  The text string is displayed, the void *
-  pointer can be used by the callbacks to reference the object the text
-  describes.
-
-  The base class does nothing when the user clicks on it.  The
-  subclasses 
-  Fl_Select_Browser, 
-  Fl_Hold_Browser, and 
-  Fl_Multi_Browser react to user clicks to select lines in
-  the browser and do callbacks.
-
-  The base class
-  Fl_Browser_ provides the scrolling and selection mechanisms of
-  this and all the subclasses, but the dimensions and appearance of each
-  item are determined by the subclass. You can use Fl_Browser_
-  to display information other than text, or text that is dynamically
-  produced from your own data structures. If you find that loading the
-  browser is a lot of work or is inefficient, you may want to make a
-  subclass of Fl_Browser_.
-
-  Some common coding patterns used for working with Fl_Browser:
-  \code
-      // How to loop through all the items in the browser
-      for ( int t=1; t<=browser->size(); t++ ) {       // index 1 based..!
-	  printf("item #%d, label='%s'\n", t, browser->text(t));
-      }
-  \endcode
-
-  Note: If you are <I>subclassing</I> Fl_Browser, it's more efficient
-  to use the protected methods item_first() and item_next(), since
-  Fl_Browser internally uses linked lists to manage the browser's items.
-  For more info, see find_item(int).
-*/
-class FL_EXPORT Fl_Browser : public Fl_Browser_ {
-
-  FL_BLINE *first;		// the array of lines
-  FL_BLINE *last;
-  FL_BLINE *cache;
-  int cacheline;		// line number of cache
-  int lines;                	// Number of lines
-  int full_height_;
-  const int* column_widths_;
-  char format_char_;		// alternative to @-sign
-  char column_char_;		// alternative to tab
-
-protected:
-
-  // required routines for Fl_Browser_ subclass:
-  void* item_first() const ;
-  void* item_next(void* item) const ;
-  void* item_prev(void* item) const ;
-  void* item_last()const ;
-  int item_selected(void* item) const ;
-  void item_select(void* item, int val);
-  int item_height(void* item) const ;
-  int item_width(void* item) const ;
-  void item_draw(void* item, int X, int Y, int W, int H) const ;
-  int full_height() const ;
-  int incr_height() const ;
-  const char *item_text(void *item) const;
-  /** Swap the items \p a and \p b.
-      You must call redraw() to make any changes visible.
-      \param[in] a,b the items to be swapped.
-      \see swap(int,int), item_swap()
-   */
-  void item_swap(void *a, void *b) { swap((FL_BLINE*)a, (FL_BLINE*)b); }
-  /** Return the item at specified \p line.
-      \param[in] line The line of the item to return. (1 based)
-      \returns The item, or NULL if line out of range.
-      \see item_at(), find_line(), lineno()
-   */
-  void *item_at(int line) const { return (void*)find_line(line); }
-
-  FL_BLINE* find_line(int line) const ;
-  FL_BLINE* _remove(int line) ;
-  void insert(int line, FL_BLINE* item);
-  int lineno(void *item) const ;
-  void swap(FL_BLINE *a, FL_BLINE *b);
-
-public:
-
-  void remove(int line);
-  void add(const char* newtext, void* d = 0);
-  void insert(int line, const char* newtext, void* d = 0);
-  void move(int to, int from);
-  int  load(const char* filename);
-  void swap(int a, int b);
-  void clear();
-
-  /**
-    Returns how many lines are in the browser.
-    The last line number is equal to this.
-    Returns 0 if browser is empty.
-  */
-  int size() const { return lines; }
-  void size(int W, int H) { Fl_Widget::size(W, H); }
-
-  int topline() const ;
-  /** For internal use only? */
-  enum Fl_Line_Position { TOP, BOTTOM, MIDDLE };
-  void lineposition(int line, Fl_Line_Position pos);
-  /**
-    Scrolls the browser so the top item in the browser
-    is showing the specified \p line.
-    \param[in] line The line to be displayed at the top.
-    \see topline(), middleline(), bottomline(), displayed(), lineposition()
-   */
-  void topline(int line) { lineposition(line, TOP); }
-  /**
-    Scrolls the browser so the bottom item in the browser
-    is showing the specified \p line.
-    \param[in] line The line to be displayed at the bottom.
-    \see topline(), middleline(), bottomline(), displayed(), lineposition()
-   */
-  void bottomline(int line) { lineposition(line, BOTTOM); }
-  /**
-    Scrolls the browser so the middle item in the browser
-    is showing the specified \p line.
-    \param[in] line The line to be displayed in the middle.
-    \see topline(), middleline(), bottomline(), displayed(), lineposition()
-   */
-  void middleline(int line) { lineposition(line, MIDDLE); }
-
-  int select(int line, int val=1);
-  int selected(int line) const ;
-  void show(int line);
-  /** Shows the entire Fl_Browser widget -- opposite of hide(). */
-  void show() { Fl_Widget::show(); }
-  void hide(int line);
-  /** Hides the entire Fl_Browser widget -- opposite of show(). */
-  void hide() { Fl_Widget::hide(); }
-  int visible(int line) const ;
-
-  int value() const ;
-  /**
-    Sets the browser's value(), which selects the specified \p line.
-    This is the same as calling select(line).
-    \see select(), selected(), value(), item_select(), item_selected()
-   */
-  void value(int line) { select(line); }
-  const char* text(int line) const ;
-  void text(int line, const char* newtext);
-  void* data(int line) const ;
-  void data(int line, void* d);
-
-  Fl_Browser(int X, int Y, int W, int H, const char *L = 0);
-  /**
-    The destructor deletes all list items and destroys the browser.
-   */
-  ~Fl_Browser() { clear(); }
-
-  /**
-    Gets the current format code prefix character, which by default is '\@'.
-    A string of formatting codes at the start of each column are stripped off
-    and used to modify how the rest of the line is printed:
-    
-    \li <tt>'\@.'</tt> Print rest of line, don't look for more '\@' signs
-    \li <tt>'\@\@'</tt> Print rest of line starting with '\@'
-    \li <tt>'\@l'</tt> Use a LARGE (24 point) font
-    \li <tt>'\@m'</tt> Use a medium large (18 point) font
-    \li <tt>'\@s'</tt> Use a <SMALL>small</SMALL> (11 point) font
-    \li <tt>'\@b'</tt> Use a <B>bold</B> font (adds FL_BOLD to font)
-    \li <tt>'\@i'</tt> Use an <I>italic</I> font (adds FL_ITALIC to font)
-    \li <tt>'\@f' or '\@t'</tt> Use a fixed-pitch
-    font (sets font to FL_COURIER)
-    \li <tt>'\@c'</tt> Center the line horizontally
-    \li <tt>'\@r'</tt> Right-justify the text
-    \li <tt>'\@B0', '\@B1', ... '\@B255'</tt> Fill the backgound with
-    fl_color(n)
-    \li <tt>'\@C0', '\@C1', ... '\@C255'</tt> Use fl_color(n) to draw the text
-    \li <tt>'\@F0', '\@F1', ...</tt> Use fl_font(n) to draw the text
-    \li <tt>'\@S1', '\@S2', ...</tt> Use point size n to draw the text
-    \li <tt>'\@u' or '\@_'</tt> Underline the text.
-    \li <tt>'\@-'</tt> draw an engraved line through the middle.
-
-    Notice that the '\@.' command can be used to reliably
-    terminate the parsing.  To print a random string in a random color, use 
-    <tt>sprintf("@C%d@.%s", color, string)</tt> and it will work even if the
-    string starts with a digit or has the format character in it.
-  */
-  char format_char() const { return format_char_; }
-  /**
-    Sets the current format code prefix character to \p c.
-    The default prefix is '\@'.  Set the prefix to 0 to disable formatting.
-    \see format_char() for list of '\@' codes
-  */
-  void format_char(char c) { format_char_ = c; }
-  /**
-    Gets the current column separator character.
-    The default is '\\t' (tab).
-    \see column_char(), column_widths()
-  */
-  char column_char() const { return column_char_; }
-  /**
-    Sets the column separator to c.
-    This will only have an effect if you also set column_widths().
-    The default is '\\t' (tab).
-    \see column_char(), column_widths()
-  */
-  void column_char(char c) { column_char_ = c; }
-  /**
-    Gets the current column width array.
-    This array is zero-terminated and specifies the widths in pixels of
-    each column. The text is split at each column_char() and each part is
-    formatted into it's own column.  After the last column any remaining
-    text is formatted into the space between the last column and the
-    right edge of the browser, even if the text contains instances of
-    column_char() .  The default value is a one-element array of just
-    a zero, which means there are no columns.
-
-    Example:
-    \code
-  Fl_Browser *b = new Fl_Browser(..);
-  int widths[] = { 50, 50, 50, 70, 70, 40, 40, 70, 70, 50, 0 };  // widths for each column
-  b->column_widths(widths); // assign array to widget
-  b->column_char('\t');     // use tab as the column character
-  b->add("USER\tPID\tCPU\tMEM\tVSZ\tRSS\tTTY\tSTAT\tSTART\tTIME\tCOMMAND");
-  b->add("root\t2888\t0.0\t0.0\t1352\t0\ttty3\tSW\tAug15\t0:00\t@b@f/sbin/mingetty tty3");
-  b->add("root\t13115\t0.0\t0.0\t1352\t0\ttty2\tSW\tAug30\t0:00\t@b@f/sbin/mingetty tty2");
-  [..]
-    \endcode
-    \see column_char(), column_widths()
-  */
-  const int* column_widths() const { return column_widths_; }
-  /**
-    Sets the current array to \p arr.  Make sure the last entry is zero.
-    \see column_char(), column_widths()
-  */
-  void column_widths(const int* arr) { column_widths_ = arr; }
-
-  /**
-    Returns non-zero if \p line has been scrolled to a position where it is being displayed.
-    Checks to see if the item's vertical position is within the top and bottom
-    edges of the display window. This does NOT take into account the hide()/show()
-    status of the widget or item.
-    \param[in] line The line to be checked
-    \returns 1 if visible, 0 if not visible.
-    \see topline(), middleline(), bottomline(), displayed(), lineposition()
-  */
-  int displayed(int line) const { return Fl_Browser_::displayed(find_line(line)); }
-
-  /**
-    Make the item at the specified \p line visible().
-    Functionally similar to show(int line).
-    If \p line is out of range, redisplay top or bottom of list as appropriate.
-    \param[in] line The line to be made visible.
-    \see show(int), hide(int), display(), visible(), make_visible()
-  */
-  void make_visible(int line) {
-    if (line < 1) Fl_Browser_::display(find_line(1));
-    else if (line > lines) Fl_Browser_::display(find_line(lines));
-    else Fl_Browser_::display(find_line(line));
-  }
-
-  // icon support
-  void icon(int line, Fl_Image* icon);
-  Fl_Image* icon(int line) const;
-  void remove_icon(int line);
-
-  /** For back compatibility only. */
-  void replace(int a, const char* b) { text(a, b); }
-  void display(int line, int val=1);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Browser.H 8623 2011-04-24 17:09:41Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Browser_.H b/common/fltk/FL/Fl_Browser_.H
deleted file mode 100644
index 5bcf7e1..0000000
--- a/common/fltk/FL/Fl_Browser_.H
+++ /dev/null
@@ -1,378 +0,0 @@
-//
-// "$Id: Fl_Browser_.H 8275 2011-01-13 22:07:31Z manolo $"
-//
-// Common browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Browser_ widget . */
-
-// Yes, I know this should be a template...
-
-#ifndef Fl_Browser__H
-#define Fl_Browser__H
-
-#ifndef Fl_Group_H
-#include "Fl_Group.H"
-#endif
-#include "Fl_Scrollbar.H"
-#include <FL/Fl.H>		// Fl::scrollbar_size()
-
-#define FL_NORMAL_BROWSER	0	/**< type() of Fl_Browser */
-#define FL_SELECT_BROWSER	1	/**< type() of FL_Select_Browser */
-#define FL_HOLD_BROWSER		2	/**< type() of Fl_Hold_Browser */
-#define FL_MULTI_BROWSER	3	/**< type() of Fl_Multi_Browser */
-
-#define FL_SORT_ASCENDING	0	/**< sort browser items in ascending alphabetic order. */
-#define FL_SORT_DESCENDING	1	/**< sort in descending order */
-
-/**
-  This is the base class for browsers.  To be useful it must be
-  subclassed and several virtual functions defined.  The Forms-compatible
-  browser and the file chooser's browser are subclassed off of this.
-
-  This has been designed so that the subclass has complete control
-  over the storage of the data, although because next() and 
-  prev() functions are used to index, it works best as a linked list
-  or as a large block of characters in which the line breaks must be
-  searched for.
-
-  A great deal of work has been done so that the "height" of a data
-  object does not need to be determined until it is drawn.  This is
-  useful if actually figuring out the size of an object requires
-  accessing image data or doing stat() on a file or doing some
-  other slow operation.
-*/
-class FL_EXPORT Fl_Browser_ : public Fl_Group {
-  int position_;	// where user wants it scrolled to
-  int real_position_;	// the current vertical scrolling position
-  int hposition_;	// where user wants it panned to
-  int real_hposition_;	// the current horizontal scrolling position
-  int offset_;		// how far down top_ item the real_position is
-  int max_width;	// widest object seen so far
-  uchar has_scrollbar_;	// which scrollbars are enabled
-  Fl_Font textfont_;
-  Fl_Fontsize textsize_;
-  Fl_Color textcolor_;
-  void* top_;		// which item scrolling position is in
-  void* selection_;	// which is selected (except for FL_MULTI_BROWSER)
-  void *redraw1,*redraw2; // minimal update pointers
-  void* max_width_item;	// which item has max_width_
-  int scrollbar_size_;	// size of scrollbar trough
-
-  void update_top();
-
-protected:
-
-  // All of the following must be supplied by the subclass:
-  /**
-    This method must be provided by the subclass 
-    to return the first item in the list.
-    \see item_first(), item_next(), item_last(), item_prev()
-   */
-  virtual void *item_first() const = 0;
-  /**
-    This method must be provided by the subclass
-    to return the item in the list after \p item.
-    \see item_first(), item_next(), item_last(), item_prev()
-   */
-  virtual void *item_next(void *item) const = 0;
-  /**
-    This method must be provided by the subclass
-    to return the item in the list before \p item.
-    \see item_first(), item_next(), item_last(), item_prev()
-   */
-  virtual void *item_prev(void *item) const = 0;
-  /**
-    This method must be provided by the subclass
-    to return the last item in the list.
-    \see item_first(), item_next(), item_last(), item_prev()
-   */
-  virtual void *item_last() const { return 0L; }
-  /** 
-    This method must be provided by the subclass to return 
-    the height of \p item in pixels.
-    Allow for two additional pixels for the list selection box.
-    \param[in] item The item whose height is returned.
-    \returns The height of the specified \p item in pixels.
-    \see item_height(), item_width(), item_quick_height()
-  */
-  virtual int item_height(void *item) const = 0;
-  /**
-    This method must be provided by the subclass to return the width of the
-    \p item in pixels.  Allow for two additional pixels for the list
-    selection box.
-    \param[in] item The item whose width is returned.
-    \returns The width of the item in pixels.
-  */
-  virtual int item_width(void *item) const = 0;
-  virtual int item_quick_height(void *item) const ;
-  /**
-    This method must be provided by the subclass to draw the \p item
-    in the area indicated by \p X, \p Y, \p W, \p H.
-  */
-  virtual void item_draw(void *item,int X,int Y,int W,int H) const = 0;
-  /**
-    This optional method returns a string (label) that may be used for sorting. 
-    \param[in] item The item whose label text is returned.
-    \returns The item's text label. (Can be NULL if blank)
-   */
-  virtual const char *item_text(void *item) const { (void)item; return 0L; }
-  /**
-    This optional method should be provided by the subclass 
-    to efficiently swap browser items \p a and \p b, such as for sorting.
-    \param[in] a,b The two items to be swapped.
-   */
-  virtual void item_swap(void *a,void *b) { (void)a; (void)b; }
-  /**
-    This method must be provided by the subclass 
-    to return the item for the specified \p index. 
-    \param[in] index The \p index of the item to be returned
-    \returns The item at the specified \p index.
-   */
-  virtual void *item_at(int index) const { (void)index; return 0L; }
-  // you don't have to provide these but it may help speed it up:
-  virtual int full_width() const ;	// current width of all items
-  virtual int full_height() const ;	// current height of all items
-  virtual int incr_height() const ;	// average height of an item
-  // These only need to be done by subclass if you want a multi-browser:
-  virtual void item_select(void *item,int val=1);
-  virtual int item_selected(void *item) const ;
-
-  // things the subclass may want to call:
-  /**
-    Returns the item that appears at the top of the list.
-   */
-  void *top() const { return top_; }
-  /**
-    Returns the item currently selected, or NULL if there is no selection.
-    
-    For multiple selection browsers this call returns the currently focused item,
-    even if it is not selected. To find all selected items, call 
-    Fl_Multi_Browser::selected() for every item in question.
-  */
-  void *selection() const { return selection_; }
-  void new_list(); // completely clobber all data, as though list replaced
-  void deleting(void *item); // get rid of any pointers to item
-  void replacing(void *a,void *b); // change a pointers to b
-  void swapping(void *a,void *b); // exchange pointers a and b
-  void inserting(void *a,void *b); // insert b near a
-  int displayed(void *item) const ; // true if this item is visible
-  void redraw_line(void *item); // minimal update, no change in size
-  /**
-    This method will cause the entire list to be redrawn.
-    \see redraw_lines(), redraw_line()
-   */
-  void redraw_lines() { damage(FL_DAMAGE_SCROLL); } // redraw all of them
-  void bbox(int &X,int &Y,int &W,int &H) const;
-  int leftedge() const;	// x position after scrollbar & border
-  void *find_item(int ypos); // item under mouse
-  
-  void draw();
-  Fl_Browser_(int X,int Y,int W,int H,const char *L=0);
-
-public:
-
-  /**
-    Vertical scrollbar. Public, so that it can be accessed directly.
-   */
-  Fl_Scrollbar scrollbar;
-  /**
-    Horizontal scrollbar. Public, so that it can be accessed directly.
-   */
-  Fl_Scrollbar hscrollbar;
-
-  int handle(int event);
-  void resize(int X,int Y,int W,int H);
-
-  int select(void *item,int val=1,int docallbacks=0);
-  int select_only(void *item,int docallbacks=0);
-  int deselect(int docallbacks=0);
-  /**
-    Gets the vertical scroll position of the list as a pixel position \p pos.
-    The position returned is how many pixels of the list are scrolled off the top edge
-    of the screen.  Example: A position of '3' indicates the top 3 pixels of 
-    the list are scrolled off the top edge of the screen.
-    \see position(), hposition()
-  */
-  int position() const { return position_; }
-  void position(int pos); // scroll to here
-  /**
-    Gets the horizontal scroll position of the list as a pixel position \p pos.
-    The position returned is how many pixels of the list are scrolled off the left edge
-    of the screen. Example: A position of '18' indicates the left 18 pixels of
-    the list are scrolled off the left edge of the screen.
-    \see position(), hposition()
-  */
-  int hposition() const { return hposition_; }
-  void hposition(int); // pan to here
-  void display(void *item); // scroll so this item is shown
-
-  /**
-    Values for has_scrollbar().
-   */
-  /** Anonymous enum bit flags for has_scrollbar().
-     -  bit 0: horizontal
-     -  bit 1: vertical
-     -  bit 2: 'always' (to be combined with bits 0 and 1)
-     -  bit 3-31: reserved for future use
-   */
-  enum { // values for has_scrollbar()
-    HORIZONTAL = 1,		///< Only show horizontal scrollbar.
-    VERTICAL = 2,		///< Only show vertical scrollbar.
-    BOTH = 3,			///< Show both scrollbars. (default)
-    ALWAYS_ON = 4,		///< Specified scrollbar(s) should 'always' be shown (to be used with HORIZONTAL/VERTICAL)
-    HORIZONTAL_ALWAYS = 5,	///< Horizontal scrollbar always on.
-    VERTICAL_ALWAYS = 6,	///< Vertical scrollbar always on.
-    BOTH_ALWAYS = 7		///< Both scrollbars always on.
-  };
-  /**
-    Returns the current scrollbar mode, see Fl_Browser_::has_scrollbar(uchar)
-   */
-  uchar has_scrollbar() const { return has_scrollbar_; }
-  /**
-    Sets whether the widget should have scrollbars or not (default Fl_Browser_::BOTH).
-    By default you can scroll in both directions, and the scrollbars
-    disappear if the data will fit in the widget.  
-    has_scrollbar() changes this based on the value of \p mode:
-  
-    - 0 - No scrollbars.
-
-    - Fl_Browser_::HORIZONTAL - Only a horizontal scrollbar.
-
-    - Fl_Browser_::VERTICAL - Only a vertical scrollbar.
-
-    - Fl_Browser_::BOTH - The default is both scrollbars.
-
-    - Fl_Browser_::HORIZONTAL_ALWAYS - Horizontal scrollbar always on,
-      vertical always off.
-
-    - Fl_Browser_::VERTICAL_ALWAYS - Vertical scrollbar always on,
-      horizontal always off.
-
-    - Fl_Browser_::BOTH_ALWAYS - Both always on.
-  */
-  void has_scrollbar(uchar mode) { has_scrollbar_ = mode; }
-
-  /**
-    Gets the default text font for the lines in the browser.
-    \see textfont(), textsize(), textcolor()
-  */
-  Fl_Font textfont() const { return textfont_; }
-  /**
-    Sets the default text font for the lines in the browser to \p font.
-  */
-  void textfont(Fl_Font font) { textfont_ = font; }
-
-  /**
-    Gets the default text size (in pixels) for the lines in the browser.
-  */
-  Fl_Fontsize textsize() const { return textsize_; }
-  /**
-    Sets the default text size (in pixels) for the lines in the browser to \p size.
-  */
-  void textsize(Fl_Fontsize size) { textsize_ = size; }
-
-  /**
-    Gets the default text color for the lines in the browser.
-  */
-  Fl_Color textcolor() const { return textcolor_; }
-  /**
-    Sets the default text color for the lines in the browser to color \p col.
-  */
-  void textcolor(Fl_Color col) { textcolor_ = col; }
-
-  /**
-    Gets the current size of the scrollbars' troughs, in pixels.
-
-    If this value is zero (default), this widget will use the 
-    Fl::scrollbar_size() value as the scrollbar's width.
-  
-    \returns Scrollbar size in pixels, or 0 if the global Fl::scrollsize() is being used.
-    \see Fl::scrollbar_size(int)
-  */
-  int scrollbar_size() const {
-      return(scrollbar_size_);
-  }
-  /**
-    Sets the pixel size of the scrollbars' troughs to the \p size, in pixels.
-
-    Normally you should not need this method, and should use
-    Fl::scrollbar_size(int) instead to manage the size of ALL 
-    your widgets' scrollbars. This ensures your application 
-    has a consistent UI, is the default behavior, and is normally
-    what you want.
-
-    Only use THIS method if you really need to override the global
-    scrollbar size. The need for this should be rare.
-    
-    Setting \p size to the special value of 0 causes the widget to
-    track the global Fl::scrollbar_size(), which is the default.
-    
-    \param[in] size Sets the scrollbar size in pixels.\n
-                    If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
-    \see Fl::scrollbar_size()
-  */
-  void scrollbar_size(int size) {
-      scrollbar_size_ = size;
-  }   
-  /**
-    This method has been deprecated, existing for backwards compatibility only.
-    Use scrollbar_size() instead.
-    This method always returns the global value Fl::scrollbar_size().
-    \returns Always returns the global value Fl::scrollbar_size().
-    \todo This method should eventually be removed in 1.4+
-  */
-  int scrollbar_width() const {
-      return(Fl::scrollbar_size());
-  }
-  /**
-    This method has been deprecated, existing for backwards compatibility only.
-    Use scrollbar_size(int) instead.
-    This method sets the global Fl::scrollbar_size(), and forces this
-    instance of the widget to use it.
-    \todo This method should eventually be removed in 1.4+
-  */
-  void scrollbar_width(int width) {
-      Fl::scrollbar_size(width);
-      scrollbar_size_ = 0;
-  }
-  /**
-    Moves the vertical scrollbar to the righthand side of the list.
-    For back compatibility.
-  */
-  void scrollbar_right() { scrollbar.align(FL_ALIGN_RIGHT); }
-  /**
-    Moves the vertical scrollbar to the lefthand side of the list.
-    For back compatibility.
-  */
-  void scrollbar_left() { scrollbar.align(FL_ALIGN_LEFT); }
-  void sort(int flags=0);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Browser_.H 8275 2011-01-13 22:07:31Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_Button.H b/common/fltk/FL/Fl_Button.H
deleted file mode 100644
index 39050dc..0000000
--- a/common/fltk/FL/Fl_Button.H
+++ /dev/null
@@ -1,180 +0,0 @@
-//
-// "$Id: Fl_Button.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Button widget . */
-
-#ifndef Fl_Button_H
-#define Fl_Button_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-// values for type()
-#define FL_NORMAL_BUTTON	0   /**< value() will be set to 1 during the press of the button and 
-                                         reverts back to 0 when the button is released */
-#define FL_TOGGLE_BUTTON	1   ///< value() toggles between 0 and 1 at every click of the button
-#define FL_RADIO_BUTTON		(FL_RESERVED_TYPE+2) /**< is set to 1 at button press, and all other
-				         buttons in the same group with <tt>type() == FL_RADIO_BUTTON</tt>
-				         are set to zero.*/
-#define FL_HIDDEN_BUTTON	3   ///< for Forms compatibility
-
-extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);
-
-class Fl_Widget_Tracker;
-
-/**
-  \class Fl_Button
-  \brief Buttons generate callbacks when they are clicked by the user.
-  
-  You control exactly when and how by changing the values for type() and
-  when().  Buttons can also generate callbacks in response to \c FL_SHORTCUT
-  events.  The button can either have an explicit shortcut(int s) value or a
-  letter shortcut can be indicated in the label() with an '\&' character
-  before it.  For the label shortcut it does not matter if \e Alt is held
-  down, but if you have an input field in the same window, the user will have
-  to hold down the \e Alt key so that the input field does not eat the event
-  first as an \c FL_KEYBOARD event.
-
-  \todo Refactor the doxygen comments for Fl_Button type() documentation.
-
-  For an Fl_Button object, the type() call returns one of:
-  \li \c FL_NORMAL_BUTTON (0): value() remains unchanged after button press.
-  \li \c FL_TOGGLE_BUTTON: value() is inverted after button press.
-  \li \c FL_RADIO_BUTTON: value() is set to 1 after button press, and all other
-         buttons in the current group with <tt>type() == FL_RADIO_BUTTON</tt>
-	 are set to zero.
-
-  \todo Refactor the doxygen comments for Fl_Button when() documentation.
-
-  For an Fl_Button object, the following when() values are useful, the default
-  being \c FL_WHEN_RELEASE:
-  \li \c 0: The callback is not done, instead changed() is turned on.
-  \li \c FL_WHEN_RELEASE: The callback is done after the user successfully
-         clicks the button, or when a shortcut is typed.
-  \li \c FL_WHEN_CHANGED: The callback is done each time the value() changes
-         (when the user pushes and releases the button, and as the mouse is
-	 dragged around in and out of the button).
-*/
-class FL_EXPORT Fl_Button : public Fl_Widget {
-
-  int shortcut_;
-  char value_;
-  char oldval;
-  uchar down_box_;
-
-protected:
-
-  static Fl_Widget_Tracker *key_release_tracker;
-  static void key_release_timeout(void*);
-  void simulate_key_action();
-  
-  virtual void draw();
-
-public:
-
-  virtual int handle(int);
-
-  Fl_Button(int X, int Y, int W, int H, const char *L = 0);
-
-  int value(int v);
-
-  /**
-    Returns the current value of the button (0 or 1).
-   */
-  char value() const {return value_;}
-
-  /**
-    Same as \c value(1).
-    \see value(int v)
-   */
-  int set() {return value(1);}
-
-  /**
-    Same as \c value(0).
-    \see value(int v)
-   */
-  int clear() {return value(0);}
-
-  void setonly(); // this should only be called on FL_RADIO_BUTTONs
-
-  /**
-    Returns the current shortcut key for the button.
-    \retval int
-   */
-  int shortcut() const {return shortcut_;}
-
-  /**
-    Sets the shortcut key to \c s.
-    Setting this overrides the use of '\&' in the label().
-    The value is a bitwise OR of a key and a set of shift flags, for example:
-    <tt>FL_ALT | 'a'</tt>, or
-    <tt>FL_ALT | (FL_F + 10)</tt>, or just
-    <tt>'a'</tt>.
-    A value of 0 disables the shortcut.
-
-    The key can be any value returned by Fl::event_key(), but will usually be
-    an ASCII letter.  Use a lower-case letter unless you require the shift key
-    to be held down.
-
-    The shift flags can be any set of values accepted by Fl::event_state().
-    If the bit is on, that shift key must be pushed.  Meta, Alt, Ctrl, and
-    Shift must be off if they are not in the shift flags (zero for the other
-    bits indicates a "don't care" setting).
-    \param[in] s bitwise OR of key and shift flags
-   */
-  void shortcut(int s) {shortcut_ = s;}
-
-  /**
-    Returns the current down box type, which is drawn when value() is non-zero.
-    \retval Fl_Boxtype
-   */
-  Fl_Boxtype down_box() const {return (Fl_Boxtype)down_box_;}
-
-  /**
-    Sets the down box type. The default value of 0 causes FLTK to figure out
-    the correct matching down version of box().
-    \param[in] b down box type
-   */
-  void down_box(Fl_Boxtype b) {down_box_ = b;}
-
-  /// (for backwards compatibility)
-  void shortcut(const char *s) {shortcut(fl_old_shortcut(s));}
-
-  /// (for backwards compatibility)
-  Fl_Color down_color() const {return selection_color();}
-
-  /// (for backwards compatibility)
-  void down_color(unsigned c) {selection_color(c);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Button.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Cairo.H b/common/fltk/FL/Fl_Cairo.H
deleted file mode 100644
index 4f3b523..0000000
--- a/common/fltk/FL/Fl_Cairo.H
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-// "$Id: Fl_Cairo.H 8198 2011-01-06 10:24:58Z manolo $"
-//
-// Main header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-    Handling transparently platform dependent cairo include files 
-*/
-
-#ifndef FL_CAIRO_H
-# define FL_CAIRO_H
-# ifdef FLTK_HAVE_CAIRO
-
-// Cairo is currently supported for the following platforms:
-// Win32, Apple Quartz, X11
-
-# include <FL/Fl_Export.H>
-
-# if defined(USE_X11) // X11
-#  include <cairo-xlib.h>
-# elif defined(WIN32)
-#  include <cairo-win32.h>
-# elif defined(__APPLE_QUARTZ__)
-#  include <cairo-quartz.h>
-# else
-#  error Cairo is not supported on that platform.
-# endif
-
-/** 
-   \addtogroup group_cairo
-   @{
-*/
-
-/** 
-   Contains all the necessary info on the current cairo context.
-   A private internal & unique corresponding object is created to
-   permit cairo context state handling while keeping it opaque.
-   For internal use only.
-   \note Only available when configure has the --enable-cairo option
-*/
-class FL_EXPORT Fl_Cairo_State {
-public:
-  Fl_Cairo_State() : cc_(0), own_cc_(false), autolink_(false), window_(0), gc_(0) {}
-
-    // access attributes
-    cairo_t* cc() const {return cc_;}		 ///< Gets the current cairo context
-    bool autolink() const {return autolink_;}	 ///< Gets the autolink option. See Fl::cairo_autolink_context(bool)
-    /** Sets the current cairo context, \p own indicates cc deletion is handle externally by user */
-    void cc(cairo_t* c, bool own=true)  {	 
-	if (cc_ && own_cc_) cairo_destroy(cc_); 
-	cc_=c;
-	if (!cc_) window_=0;
-	own_cc_=own;
-    }
-    void  autolink(bool b);                     ///< Sets the autolink option, only available with --enable-cairoext
-    void  window(void* w)  {window_=w;}		///< Sets the window \p w to keep track on
-    void* window() const {return window_;}	///< Gets the last window attached to a cc
-    void  gc(void* c)  {gc_=c;}		        ///< Sets the gc \p c to keep track on
-    void* gc() const {return gc_;}		///< Gets the last gc attached to a cc
-
-private:
-    cairo_t * cc_;	 // contains the unique autoupdated cairo context
-    bool own_cc_;	 // indicates whether we must delete the cc, useful for internal cleanup
-    bool autolink_;	 // true by default, permits to prevent the automatic cairo mapping on fltk windows for custom cairo implementations
-    void* window_, *gc_; // for keeping track internally of last win+gc treated
-};
-
-/** @} */
-
-# endif // FLTK_HAVE_CAIRO
-#endif // FL_CAIRO_H
-
-//
-// End of "$Id: Fl_Cairo.H 8198 2011-01-06 10:24:58Z manolo $" .
-//
diff --git a/common/fltk/FL/Fl_Cairo_Window.H b/common/fltk/FL/Fl_Cairo_Window.H
deleted file mode 100644
index e8bc75c..0000000
--- a/common/fltk/FL/Fl_Cairo_Window.H
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// "$Id: Fl_Cairo_Window.H 8198 2011-01-06 10:24:58Z manolo $"
-//
-// Main header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-    Fl_Cairo_Window Handling transparently a fltk window incorporte a cairo draw callback.
-*/
-
-#ifndef FL_CAIRO_WINDOW_H
-# define FL_CAIRO_WINDOW_H
-# ifdef FLTK_HAVE_CAIRO
-
-// Cairo is currently supported for the following platforms:
-// Win32, Apple Quartz, X11
-#  include <FL/Fl.H>
-#  include <FL/Fl_Double_Window.H>
-
-/** 
-   \addtogroup group_cairo
-   @{
-*/
-
-/**
-   This defines a pre-configured cairo fltk window.
-   This class overloads the virtual draw() method for you,
-   so that the only thing you have to do is to provide your cairo code.
-   All cairo context handling is achieved transparently.
-   \note You can alternatively define your custom cairo fltk window,
-   and thus at least override the draw() method to provide custom cairo
-   support. In this case you will probably use Fl::cairo_make_current(Fl_Window*)
-   to attach a context to your window. You should do it only when your window is 
-   the current window. \see Fl_Window::current()
-*/
-class FL_EXPORT Fl_Cairo_Window : public Fl_Double_Window {
-
-public:
-  Fl_Cairo_Window(int w, int h) : Fl_Double_Window(w,h),draw_cb_(0) {}
-
-protected:
-  /** Overloaded to provide cairo callback support */
-  void draw() {
-    Fl_Double_Window::draw();
-    // manual method ? if yes explicitly get a cairo_context here
-    if (!Fl::cairo_autolink_context()) 
-      Fl::cairo_make_current(this); 
-    if (draw_cb_) draw_cb_(this, Fl::cairo_cc());
-  }
-
-public:
-  /** This defines the cairo draw callback prototype that you must further */
-  typedef void (*cairo_draw_cb) (Fl_Cairo_Window* self, cairo_t* def);
-  /** 
-    You must provide a draw callback which will implement your cairo rendering.
-    This method will permit you to set your cairo callback to \p cb.
-  */
-  void set_draw_cb(cairo_draw_cb  cb){draw_cb_=cb;}
-private:
-    cairo_draw_cb draw_cb_;
-};
-
-
-/** @} */
-
-# endif // FLTK_HAVE_CAIRO
-#endif // FL_CAIRO_WINDOW_H
-
-//
-// End of "$Id: Fl_Cairo_Window.H 8198 2011-01-06 10:24:58Z manolo $" .
-//
diff --git a/common/fltk/FL/Fl_Chart.H b/common/fltk/FL/Fl_Chart.H
deleted file mode 100644
index 97bd8ee..0000000
--- a/common/fltk/FL/Fl_Chart.H
+++ /dev/null
@@ -1,160 +0,0 @@
-//
-// "$Id: Fl_Chart.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Forms chart header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Chart widget . */
-
-#ifndef Fl_Chart_H
-#define Fl_Chart_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-// values for type()
-#define FL_BAR_CHART		0	/**< type() for Bar Chart variant */
-#define FL_HORBAR_CHART		1	/**< type() for Horizontal Bar Chart variant */
-#define FL_LINE_CHART		2	/**< type() for Line Chart variant */
-#define FL_FILL_CHART		3	/**< type() for Fill Line Chart variant */
-#define FL_SPIKE_CHART		4	/**< type() for Spike Chart variant */
-#define FL_PIE_CHART		5	/**< type() for Pie Chart variant */
-#define FL_SPECIALPIE_CHART	6	/**< type() for Special Pie Chart variant */
-
-#define FL_FILLED_CHART  FL_FILL_CHART	/**< for compatibility */
-
-#define FL_CHART_MAX		128	/**< max entries per chart */
-#define FL_CHART_LABEL_MAX	18	/**< max label length for entry */
-
-/** For internal use only */
-struct FL_CHART_ENTRY {
-   float val;				/**< For internal use only. */
-   unsigned col;			/**< For internal use only. */
-   char str[FL_CHART_LABEL_MAX+1];	/**< For internal use only. */
-};
-
-/**
-  \class Fl_Chart
-  \brief Fl_Chart displays simple charts.
-  It is provided for Forms compatibility.
-
-  \image html charts.png  
-  \image latex charts.png  "Fl_Chart" width=10cm
-  \todo Refactor Fl_Chart::type() information.
-
-  The type of an Fl_Chart object can be set using type(uchar t) to:
-  \li \c FL_BAR_CHART: Each sample value is drawn as a vertical bar.
-  \li \c FL_FILLED_CHART: The chart is filled from the bottom of the graph
-         to the sample values.
-  \li \c FL_HORBAR_CHART: Each sample value is drawn as a horizontal bar.
-  \li \c FL_LINE_CHART: The chart is drawn as a polyline with vertices at
-         each sample value.
-  \li \c FL_PIE_CHART: A pie chart is drawn with each sample value being
-         drawn as a proportionate slice in the circle.
-  \li \c FL_SPECIALPIE_CHART: Like \c FL_PIE_CHART, but the first slice is
-         separated from the pie.
-  \li \c FL_SPIKE_CHART: Each sample value is drawn as a vertical line.
- */
-class FL_EXPORT Fl_Chart : public Fl_Widget {
-    int numb;
-    int maxnumb;
-    int sizenumb;
-    FL_CHART_ENTRY *entries;
-    double min,max;
-    uchar autosize_;
-    Fl_Font textfont_;
-    Fl_Fontsize textsize_;
-    Fl_Color textcolor_;
-protected:
-    void draw();
-public:
-    Fl_Chart(int X, int Y, int W, int H, const char *L = 0);
-
-    ~Fl_Chart();
-
-    void clear();
-
-    void add(double val, const char *str = 0, unsigned col = 0);
-
-    void insert(int ind, double val, const char *str = 0, unsigned col = 0);
-
-    void replace(int ind, double val, const char *str = 0, unsigned col = 0);
-
-    /**
-      Gets the lower and upper bounds of the chart values.
-      \param[out] a, b are set to lower, upper
-     */
-    void bounds(double *a,double *b) const {*a = min; *b = max;}
-
-    void bounds(double a,double b);
-
-    /**
-      Returns the number of data values in the chart.
-     */
-    int size() const {return numb;}
-
-    void size(int W, int H) { Fl_Widget::size(W, H); }
-
-    /**
-      Gets the maximum number of data values for a chart.
-     */
-    int maxsize() const {return maxnumb;}
-
-    void maxsize(int m);
-
-    /** Gets the chart's text font */
-    Fl_Font textfont() const {return textfont_;}
-    /** Sets the chart's text font to \p s. */
-    void textfont(Fl_Font s) {textfont_ = s;}
-
-    /** Gets the chart's text size */
-    Fl_Fontsize textsize() const {return textsize_;}
-    /** gets the chart's text size to \p s. */
-    void textsize(Fl_Fontsize s) {textsize_ = s;}
-
-    /** Gets the chart's text color */
-    Fl_Color textcolor() const {return textcolor_;}
-    /** gets the chart's text color to \p n. */
-    void textcolor(Fl_Color n) {textcolor_ = n;}
-
-    /**
-      Get whether the chart will automatically adjust the bounds of the chart.
-      \returns non-zero if auto-sizing is enabled and zero if disabled.
-     */
-    uchar autosize() const {return autosize_;}
-
-    /**
-      Set whether the chart will automatically adjust the bounds of the chart.
-      \param[in] n non-zero to enable automatic resizing, zero to disable.
-     */
-    void autosize(uchar n) {autosize_ = n;}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Chart.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Check_Browser.H b/common/fltk/FL/Fl_Check_Browser.H
deleted file mode 100644
index 57cd961..0000000
--- a/common/fltk/FL/Fl_Check_Browser.H
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// "$Id: Fl_Check_Browser.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Fl_Check_Browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Check_Browser widget . */
-
-#ifndef Fl_Check_Browser_H
-#define Fl_Check_Browser_H
-
-#include "Fl.H"
-#include "Fl_Browser_.H"
-
-/**
-  The Fl_Check_Browser widget displays a scrolling list of text
-  lines that may be selected and/or checked by the user.
-*/
-class FL_EXPORT Fl_Check_Browser : public Fl_Browser_ {
-  /* required routines for Fl_Browser_ subclass: */
-
-  void *item_first() const;
-  void *item_next(void *) const;
-  void *item_prev(void *) const;
-  int item_height(void *) const;
-  int item_width(void *) const;
-  void item_draw(void *, int, int, int, int) const;
-  void item_select(void *, int);
-  int item_selected(void *) const;
-
-  /* private data */
-
-  public: // IRIX 5.3 C++ compiler doesn't support private structures...
-
-#ifndef FL_DOXYGEN
-  /** For internal use only. */
-  struct cb_item {
-	  cb_item *next;	/**< For internal use only. */
-	  cb_item *prev;	/**< For internal use only. */
-	  char checked;		/**< For internal use only. */
-	  char selected;	/**< For internal use only. */
-	  char *text;		/**< For internal use only. */
-  };
-#endif // !FL_DOXYGEN
-
-  private:
-
-  cb_item *first;
-  cb_item *last;
-  cb_item *cache;
-  int cached_item;
-  int nitems_;
-  int nchecked_;
-  cb_item *find_item(int) const;
-  int lineno(cb_item *) const;
-
-  public:
-
-  Fl_Check_Browser(int x, int y, int w, int h, const char *l = 0);
-   /** The destructor deletes all list items and destroys the browser. */
-  ~Fl_Check_Browser() { clear(); }
-  int add(char *s);               // add an (unchecked) item
-  int add(char *s, int b);        // add an item and set checked
-				  // both return the new nitems()
-  int remove(int item);           // delete an item. Returns nitems()
-
-  // inline const char * methods to avoid breaking binary compatibility...
-   /** See int Fl_Check_Browser::add(char *s) */
-  int add(const char *s) { return add((char *)s); }
-  /** See int Fl_Check_Browser::add(char *s) */
-  int add(const char *s, int b) { return add((char *)s, b); }
-
-  void clear();                   // delete all items
-  /**
-    Returns how many lines are in the browser.  The last line number is equal to
-    this.
-  */
-  int nitems() const { return nitems_; }
-  /**    Returns how many items are currently checked.  */
-  int nchecked() const { return nchecked_; }
-  int checked(int item) const;
-  void checked(int item, int b);
-  /**    Equivalent to Fl_Check_Browser::checked(item, 1).  */
-  void set_checked(int item) { checked(item, 1); }
-  void check_all();
-  void check_none();
-  int value() const;              // currently selected item
-  char *text(int item) const;     // returns pointer to internal buffer
-
-  protected:
-
-  int handle(int);
-};
-
-#endif // Fl_Check_Browser_H
-
-//
-// End of "$Id: Fl_Check_Browser.H 7903 2010-11-28 21:06:39Z matt $".
-//
-
diff --git a/common/fltk/FL/Fl_Check_Button.H b/common/fltk/FL/Fl_Check_Button.H
deleted file mode 100644
index 67fb013..0000000
--- a/common/fltk/FL/Fl_Check_Button.H
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// "$Id: Fl_Check_Button.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Check button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Check_Button widget . */
-
-#ifndef Fl_Check_Button_H
-#define Fl_Check_Button_H
-
-#include "Fl_Light_Button.H"
-
-/**
-  \class Fl_Check_Button
-  \brief A button with an "checkmark" to show its status.
-
-  \image html Fl_Check_Button.png
-  \image latex Fl_Check_Button.png  "Fl_Check_Button" width=4cm
-  Buttons generate callbacks when they are clicked by the user. You control
-  exactly when and how by changing the values for type() and when().
-
-  The Fl_Check_Button subclass displays its "ON" state by showing a "checkmark"
-  rather than drawing itself pushed in.
-  
-  \todo Refactor Fl_Check_Button doxygen comments (add color() info etc?)
-  \todo Generate Fl_Check_Button.gif with visible checkmark.
- */
-class FL_EXPORT Fl_Check_Button : public Fl_Light_Button {
-public:
-  Fl_Check_Button(int X, int Y, int W, int H, const char *L = 0);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Check_Button.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Choice.H b/common/fltk/FL/Fl_Choice.H
deleted file mode 100644
index 006364f..0000000
--- a/common/fltk/FL/Fl_Choice.H
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// "$Id: Fl_Choice.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Choice header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Choice widget . */
-
-#ifndef Fl_Choice_H
-#define Fl_Choice_H
-
-#include "Fl_Menu_.H"
-
-/**
-  \class Fl_Choice
-  \brief A button that is used to pop up a menu.
-
-  This is a button that, when pushed, pops up a menu (or hierarchy of menus)
-  defined by an array of Fl_Menu_Item objects.
-  Motif calls this an OptionButton.
-
-  The only difference between this and a Fl_Menu_Button is that the name of
-  the most recent chosen menu item is displayed inside the box, while the
-  label is displayed outside the box. However, since the use of this is most
-  often to control a single variable rather than do individual callbacks,
-  some of the Fl_Menu_Button methods are redescribed here in those terms.
-
-  When the user picks an item off the menu the value() is set to that item
-  and then the item's callback is done with the menu_button as the
-  \c Fl_Widget* argument. If the item does not have a callback the
-  menu_button's callback is done instead.
-
-  All three mouse buttons pop up the menu. The Forms behavior of the first
-  two buttons to increment/decrement the choice is not implemented.  This
-  could be added with a subclass, however.
-
-  The menu will also pop up in response to shortcuts indicated by putting
-  a '\&' character in the label().  See Fl_Button::shortcut(int s) for a
-  description of this.
-
-  Typing the shortcut() of any of the items will do exactly the same as when
-  you pick the item with the mouse.  The '\&' character in item names are
-  only looked at when the menu is popped up, however.
-
-  \image html choice.png
-  \image latex choice.png  "Fl_Choice" width=4cm
-  \todo Refactor the doxygen comments for Fl_Choice changed() documentation.
-
-  \li <tt>int Fl_Widget::changed() const</tt>
-      This value is true the user picks a different value. <em>It is turned
-      off by value() and just before doing a callback (the callback can turn
-      it back on if desired).</em>
-  \li <tt>void Fl_Widget::set_changed()</tt>
-      This method sets the changed() flag.
-  \li <tt>void Fl_Widget::clear_changed()</tt>
-      This method clears the changed() flag.
-  \li <tt>Fl_Boxtype Fl_Choice::down_box() const</tt>
-      Gets the current down box, which is used when the menu is popped up.
-      The default down box type is \c FL_DOWN_BOX.
-  \li <tt>void Fl_Choice::down_box(Fl_Boxtype b)</tt>
-      Sets the current down box type to \p b.
- */
-class FL_EXPORT Fl_Choice : public Fl_Menu_ {
-protected:
-  void draw();
-public:
-  int handle(int);
-
-  Fl_Choice(int X, int Y, int W, int H, const char *L = 0);
-
-  /**
-    Gets the index of the last item chosen by the user.
-    The index is zero initially.
-   */
-  int value() const {return Fl_Menu_::value();}
-
-  int value(int v);
-
-  int value(const Fl_Menu_Item* v);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Choice.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Clock.H b/common/fltk/FL/Fl_Clock.H
deleted file mode 100644
index 0b631a8..0000000
--- a/common/fltk/FL/Fl_Clock.H
+++ /dev/null
@@ -1,137 +0,0 @@
-//
-// "$Id: Fl_Clock.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Clock header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Clock, Fl_Clock_Output widgets . */
-
-#ifndef Fl_Clock_H
-#define Fl_Clock_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-// values for type:
-#define FL_SQUARE_CLOCK		0	/**< type() of Square Clock variant */
-#define FL_ROUND_CLOCK		1	/**< type() of Round Clock variant */
-#define FL_ANALOG_CLOCK FL_SQUARE_CLOCK	/**< An analog clock is square */
-#define FL_DIGITAL_CLOCK FL_SQUARE_CLOCK /**< Not yet implemented */
-
-// fabien: Please keep the horizontal formatting of both images in class desc, 
-// don't lose vert. space for nothing!
-
-/**
-  \class Fl_Clock_Output
-  \brief This widget can be used to display a program-supplied time.
-  
-  The time shown on the clock is not updated. To display the current time,
-  use Fl_Clock instead.
-
-  \htmlonly <BR>  <table align=CENTER border=1 cellpadding=5 >  
-  <caption align=bottom>type() FL_SQUARE_CLOCK and FL_ROUND_CLOCK </caption> <TR><TD> \endhtmlonly
-  \image html clock.png  
-  \htmlonly </TD> <TD> \endhtmlonly
-  \image html round_clock.png 
-  \htmlonly </TD> </TR> </table> \endhtmlonly
-  \image latex clock.png "FL_SQUARE_CLOCK type" width=4cm
-  \image latex round_clock.png "FL_ROUND_CLOCK type" width=4cm
- */
-class FL_EXPORT Fl_Clock_Output : public Fl_Widget {
-  int hour_, minute_, second_;
-  ulong value_;
-  void drawhands(Fl_Color,Fl_Color); // part of draw
-protected:
-  void draw();
-  void draw(int X, int Y, int W, int H);
-public:
-
-  Fl_Clock_Output(int X, int Y, int W, int H, const char *L = 0);
-
-  void value(ulong v);	// set to this Unix time
-  
-  void value(int H, int m, int s);
-
-  /**
-    Returns the displayed time.
-    Returns the time in seconds since the UNIX epoch (January 1, 1970).
-    \see value(ulong)
-   */
-  ulong value() const {return value_;}
-
-  /**
-    Returns the displayed hour (0 to 23).
-    \see value(), minute(), second()
-   */
-  int hour() const {return hour_;}
-
-  /**
-    Returns the displayed minute (0 to 59).
-    \see value(), hour(), second()
-   */
-  int minute() const {return minute_;}
-
-  /**
-    Returns the displayed second (0 to 60, 60=leap second).
-    \see value(), hour(), minute()
-   */
-  int second() const {return second_;}
-};
-
-// a Fl_Clock displays the current time always by using a timeout:
-
-/**
-  \class Fl_Clock
-  \brief This widget provides a round analog clock display.
-
-  Fl_Clock is provided for Forms compatibility. 
-  It installs a 1-second timeout callback using Fl::add_timeout().
-  You can choose the rounded or square type of the clock with type(), see below.
-  \htmlonly <BR>  <table align=CENTER border=1 cellpadding=5 >  
-  <caption align=bottom>type() FL_SQUARE_CLOCK and FL_ROUND_CLOCK </caption> <TR><TD> \endhtmlonly
-  \image html clock.png  
-  \htmlonly </TD> <TD> \endhtmlonly
-  \image html round_clock.png 
-  \htmlonly </TD> </TR> </table> \endhtmlonly
-  \image latex clock.png "FL_SQUARE_CLOCK type" width=4cm  
-  \image latex round_clock.png "FL_ROUND_CLOCK type" width=4cm
- */
-class FL_EXPORT Fl_Clock : public Fl_Clock_Output {
-public:
-  int handle(int);
-
-  Fl_Clock(int X, int Y, int W, int H,  const char *L = 0);
-  
-  Fl_Clock(uchar t, int X, int Y, int W, int H, const char *L);
-  
-  ~Fl_Clock();
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Clock.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Color_Chooser.H b/common/fltk/FL/Fl_Color_Chooser.H
deleted file mode 100644
index 180ee00..0000000
--- a/common/fltk/FL/Fl_Color_Chooser.H
+++ /dev/null
@@ -1,199 +0,0 @@
-//
-// "$Id: Fl_Color_Chooser.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Color chooser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   Fl_Color_Chooser widget . */
-
-// The color chooser object and the color chooser popup.  The popup
-// is just a window containing a single color chooser and some boxes
-// to indicate the current and cancelled color.
-
-#ifndef Fl_Color_Chooser_H
-#define Fl_Color_Chooser_H
-
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Value_Input.H>
-
-#ifndef FL_DOXYGEN
-
-/** For internal use only */
-class FL_EXPORT Flcc_HueBox : public Fl_Widget {
-  int px, py;
-protected:
-  void draw();
-  int handle_key(int);
-public:
-  int handle(int);
-  Flcc_HueBox(int X, int Y, int W, int H) : Fl_Widget(X,Y,W,H) {
-  px = py = 0;}
-};
-
-/** For internal use only */
-class FL_EXPORT Flcc_ValueBox : public Fl_Widget {
-  int py;
-protected:
-  void draw();
-  int handle_key(int);
-public:
-  int handle(int);
-  Flcc_ValueBox(int X, int Y, int W, int H) : Fl_Widget(X,Y,W,H) {
-  py = 0;}
-};
-
-/** For internal use only */
-class FL_EXPORT Flcc_Value_Input : public Fl_Value_Input {
-public:
-  int format(char*);
-  Flcc_Value_Input(int X, int Y, int W, int H) : Fl_Value_Input(X,Y,W,H) {}
-};
-
-#endif // !FL_DOXYGEN
-
-/** \addtogroup group_comdlg 
-    @{ */
-
-/**
-  \class Fl_Color_Chooser
-  \brief The Fl_Color_Chooser widget provides a standard RGB color chooser.
-
-  \image html fl_color_chooser.jpg
-  \image latex fl_color_chooser.jpg "fl_color_chooser()" width=5cm
-
-  You can place any number of the widgets into a panel of your own design.
-  The diagram shows the widget as part of a color chooser dialog created by
-  the fl_color_chooser() function. The Fl_Color_Chooser widget contains the
-  hue box, value slider, and rgb input fields from the above diagram (it
-  does not have the color chips or the Cancel or OK buttons).
-  The callback is done every time the user changes the rgb value. It is not
-  done if they move the hue control in a way that produces the \e same rgb
-  value, such as when saturation or value is zero.
-
-  The fl_color_chooser() function pops up a window to let the user pick an
-  arbitrary RGB color. They can pick the hue and saturation in the "hue box"
-  on the left (hold down CTRL to just change the saturation), and the
-  brightness using the vertical slider. Or they can type the 8-bit numbers
-  into the RGB Fl_Value_Input fields, or drag the mouse across them to adjust
-  them.  The pull-down menu lets the user set the input fields to show RGB,
-  HSV, or 8-bit RGB (0 to 255).
-
-  fl_color_chooser() returns non-zero if the user picks ok, and updates the
-  RGB values.  If the user picks cancel or closes the window this returns
-  zero and leaves RGB unchanged.
-
-  If you use the color chooser on an 8-bit screen, it will allocate all the
-  available colors, leaving you no space to exactly represent the color the
-  user picks! You can however use fl_rectf() to fill a region with a simulated
-  color using dithering.
- */
-/** @} */
-class FL_EXPORT Fl_Color_Chooser : public Fl_Group {
-  Flcc_HueBox huebox;
-  Flcc_ValueBox valuebox;
-  Fl_Choice choice;
-  Flcc_Value_Input rvalue;
-  Flcc_Value_Input gvalue;
-  Flcc_Value_Input bvalue;
-  Fl_Box resize_box;
-  double hue_, saturation_, value_;
-  double r_, g_, b_;
-  void set_valuators();
-  static void rgb_cb(Fl_Widget*, void*);
-  static void mode_cb(Fl_Widget*, void*);
-public:
-  
-  /** 
-   Returns which Fl_Color_Chooser variant is currently active 
-   \return color modes are rgb(0), byte(1), hex(2), or hsv(3)   
-   */
-  int mode() {return choice.value();}
-  
-  /** 
-   Set which Fl_Color_Chooser variant is currently active 
-   \param[in] newMode color modes are rgb(0), byte(1), hex(2), or hsv(3)   
-   */
-  void mode(int newMode);
-  
-  /**
-    Returns the current hue.
-    0 <= hue < 6. Zero is red, one is yellow, two is green, etc.
-    <em>This value is convenient for the internal calculations - some other
-    systems consider hue to run from zero to one, or from 0 to 360.</em>
-   */
-  double hue() const {return hue_;}
-
-  /**
-    Returns the saturation.
-    0 <= saturation <= 1.
-   */
-  double saturation() const {return saturation_;}
-
-  /**
-    Returns the value/brightness.
-    0 <= value <= 1.
-   */
-  double value() const {return value_;}
-
-  /**
-    Returns the current red value.
-    0 <= r <= 1.
-   */
-  double r() const {return r_;}
-
-  /**
-    Returns the current green value.
-    0 <= g <= 1.
-   */
-  double g() const {return g_;}
-
-  /**
-    Returns the current blue value.
-    0 <= b <= 1.
-   */
-  double b() const {return b_;}
-
-  int hsv(double H, double S, double V);
-
-  int rgb(double R, double G, double B);
-
-  static void hsv2rgb(double H, double S, double V, double& R, double& G, double& B);
-
-  static void rgb2hsv(double R, double G, double B, double& H, double& S, double& V);
-
-  Fl_Color_Chooser(int X, int Y, int W, int H, const char *L = 0);
-};
-
-FL_EXPORT int fl_color_chooser(const char* name, double& r, double& g, double& b, int m=-1);
-FL_EXPORT int fl_color_chooser(const char* name, uchar& r, uchar& g, uchar& b, int m=-1);
-
-#endif
-
-//
-// End of "$Id: Fl_Color_Chooser.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Counter.H b/common/fltk/FL/Fl_Counter.H
deleted file mode 100644
index 419715b..0000000
--- a/common/fltk/FL/Fl_Counter.H
+++ /dev/null
@@ -1,124 +0,0 @@
-//
-// "$Id: Fl_Counter.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Counter header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Counter widget . */
-
-// A numerical value with up/down step buttons.  From Forms.
-
-#ifndef Fl_Counter_H
-#define Fl_Counter_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-// values for type():
-#define FL_NORMAL_COUNTER	0	/**< type() for counter with fast buttons */
-#define FL_SIMPLE_COUNTER	1	/**< type() for counter without fast buttons */
-
-/**
-  Controls a single floating point value with button (or keyboard) arrows.
-  Double arrows buttons achieve larger steps than simple arrows.
-  \see Fl_Spinner for value input with vertical step arrows.
-  <P align=center>\image html counter.png</P>
-  \image latex counter.png "Fl_Counter" width=4cm
-
-  \todo Refactor the doxygen comments for Fl_Counter type() documentation.
-
-  The type of an Fl_Counter object can be set using type(uchar t) to:
-  \li \c FL_NORMAL_COUNTER: Displays a counter with 4 arrow buttons.
-  \li \c FL_SIMPLE_COUNTER: Displays a counter with only 2 arrow buttons.
-*/
-class FL_EXPORT Fl_Counter : public Fl_Valuator {
-
-  Fl_Font textfont_;
-  Fl_Fontsize textsize_;
-  Fl_Color textcolor_;
-  double lstep_;
-  uchar mouseobj;
-  static void repeat_callback(void *);
-  int calc_mouseobj();
-  void increment_cb();
-
-protected:
-
-  void draw();
-
-public:
-
-  int handle(int);
-
-  Fl_Counter(int X, int Y, int W, int H, const char* L = 0);
-  ~Fl_Counter();
-
-  /**
-    Sets the increment for the large step buttons.
-    The default value is 1.0.
-    \param[in] a large step increment.
-  */
-  void lstep(double a) {lstep_ = a;}
-
-  /**
-    Sets the increments for the normal and large step buttons.
-    \param[in] a, b normal and large step increments.
-  */
-  void step(double a,double b) {Fl_Valuator::step(a); lstep_ = b;}
-
-  /**
-    Sets the increment for the normal step buttons.
-    \param[in] a normal step increment.
-  */
-  void step(double a) {Fl_Valuator::step(a);}
-
-  /**
-    Returns the increment for normal step buttons.
-   */
-  double step() const {return Fl_Valuator::step();}
-
-  /** Gets the text font */
-  Fl_Font textfont() const {return textfont_;}
-  /** Sets the text font to \p s */
-  void textfont(Fl_Font s) {textfont_ = s;}
-
-  /** Gets the font size */
-  Fl_Fontsize textsize() const {return textsize_;}
-  /** Sets the font size to \p s */
-  void textsize(Fl_Fontsize s) {textsize_ = s;}
-
-  /** Gets the font color */
-  Fl_Color textcolor() const {return textcolor_;}
-  /** Sets the font color to \p s */
-  void textcolor(Fl_Color s) {textcolor_ = s;}
-
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Counter.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Device.H b/common/fltk/FL/Fl_Device.H
deleted file mode 100644
index 5b96dc8..0000000
--- a/common/fltk/FL/Fl_Device.H
+++ /dev/null
@@ -1,558 +0,0 @@
-//
-// "$Id: Fl_Device.H 8529 2011-03-23 12:49:30Z AlbrechtS $"
-//
-// Definition of classes Fl_Device, Fl_Graphics_Driver, Fl_Surface_Device, Fl_Display_Device
-// for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-/** \file Fl_Device.H 
- \brief declaration of classes Fl_Device, Fl_Graphics_Driver, Fl_Surface_Device, 
- Fl_Display_Device, Fl_Device_Plugin.
-*/
-
-#ifndef Fl_Device_H
-#define Fl_Device_H
-
-#include <FL/x.H>
-#include <FL/Fl_Plugin.H>
-#include <FL/Fl_Image.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_RGB_Image.H>
-
-class Fl_Graphics_Driver;
-class Fl_Font_Descriptor;
-/** \brief Points to the driver that currently receives all graphics requests */
-FL_EXPORT extern Fl_Graphics_Driver *fl_graphics_driver;
-
-/**
- signature of image generation callback function.
- \param[in]  data  user data passed to function
- \param[in]  x,y,w position and width of scan line in image
- \param[out] buf   buffer for generated image data. You must copy \p w
- pixels from scanline \p y, starting at pixel \p x
- to this buffer.
- */
-typedef void (*Fl_Draw_Image_Cb)(void* data,int x,int y,int w,uchar* buf);
-
-// typedef what the x,y fields in a point are:
-#ifdef WIN32
-typedef int COORD_T;
-#  define XPOINT XPoint
-#elif defined(__APPLE__)
-typedef float COORD_T;
-typedef struct { float x; float y; } QPoint;
-#  define XPOINT QPoint
-extern float fl_quartz_line_width_;
-#else
-typedef short COORD_T;
-#  define XPOINT XPoint
-#endif
-
-/**
- \brief All graphical output devices and all graphics systems.
- */
-class FL_EXPORT Fl_Device {
-public:
-  /** A string that identifies each subclass of Fl_Device.
-     Function class_name() applied to a device of this class returns this string.
-   */
-  static const char *class_id;
-  /** 
-   Returns the name of the class of this object. 
-   The class of an instance of an Fl_Device subclass can be checked with code such as:
-   \code
-   if ( instance->class_name() == Fl_Printer::class_id ) { ... }
-   \endcode
-   */
-  virtual const char *class_name() {return class_id;};
-  /** 
-   Virtual destructor.
-   
-   The destructor of Fl_Device must be virtual to make the destructors of
-   derived classes being called correctly on destruction.
-   */
-  virtual ~Fl_Device() {};
-};
-
-#define FL_REGION_STACK_SIZE 10
-#define FL_MATRIX_STACK_SIZE 32
-/**
- \brief A virtual class subclassed for each graphics driver FLTK uses.
- *
- The virtual methods of this class are those that a graphics driver should implement to
- support all of FLTK drawing functions.
- <br> The public API for drawing operations is functionally presented in \ref drawing and as function lists
- in the \ref fl_drawings and \ref fl_attributes modules. 
-  */
-class FL_EXPORT Fl_Graphics_Driver : public Fl_Device {
-public:
-  /** A 2D coordinate transformation matrix
-   */
-  struct matrix {double a, b, c, d, x, y;};
-private:
-  static const matrix m0;
-  Fl_Font font_; // current font
-  Fl_Fontsize size_; // current font size
-  Fl_Color color_; // current color
-  enum {LINE, LOOP, POLYGON, POINT_};
-  int sptr;
-  static const int matrix_stack_size = FL_MATRIX_STACK_SIZE;
-  matrix stack[FL_MATRIX_STACK_SIZE];
-  matrix m;
-  int n, p_size, gap_;
-  XPOINT *p;
-  int what;
-  int fl_clip_state_number;
-  int rstackptr;
-  static const int region_stack_max = FL_REGION_STACK_SIZE - 1;
-  Fl_Region rstack[FL_REGION_STACK_SIZE];
-#ifdef WIN32
-  int numcount;
-  int counts[20];
-#endif
-  Fl_Font_Descriptor *font_descriptor_;
-  void transformed_vertex0(COORD_T x, COORD_T y);
-  void fixloop();
-  
-protected:
-/*  ** \brief red color for background and/or mixing if device does not support masking or alpha *
-  uchar bg_r_; 
-  ** \brief green color for background and/or mixing if device does not support masking or alpha *
-  uchar bg_g_; 
-  ** \brief blue color for background and/or mixing if device does not support masking or alpha *
-  uchar bg_b_; */
-  friend class Fl_Pixmap;
-  friend class Fl_Bitmap;
-  friend class Fl_RGB_Image;
-  friend void fl_rect(int x, int y, int w, int h);
-  friend void fl_rectf(int x, int y, int w, int h);
-  friend void fl_line_style(int style, int width, char* dashes);
-  friend void fl_xyline(int x, int y, int x1);
-  friend void fl_xyline(int x, int y, int x1, int y2);
-  friend void fl_xyline(int x, int y, int x1, int y2, int x3);
-  friend void fl_yxline(int x, int y, int y1);
-  friend void fl_yxline(int x, int y, int y1, int x2);
-  friend void fl_yxline(int x, int y, int y1, int x2, int y3);
-  friend void fl_line(int x, int y, int x1, int y1);
-  friend void fl_line(int x, int y, int x1, int y1, int x2, int y2);
-  friend void fl_draw(const char *str, int n, int x, int y);
-#ifdef __APPLE__
-  friend void fl_draw(const char *str, int n, float x, float y);
-#endif
-  friend void fl_draw(int angle, const char *str, int n, int x, int y);
-  friend void fl_rtl_draw(const char *str, int n, int x, int y);
-  friend void fl_font(Fl_Font face, Fl_Fontsize size);
-  friend void fl_color(Fl_Color c);
-  friend void fl_color(uchar r, uchar g, uchar b);
-  friend void fl_point(int x, int y);
-  friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2);
-  friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2);
-  friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  friend void fl_begin_points();
-  friend void fl_begin_line();
-  friend void fl_begin_loop();
-  friend void fl_begin_polygon();
-  friend void fl_vertex(double x, double y);
-  friend void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
-  friend void fl_circle(double x, double y, double r);
-  friend void fl_arc(double x, double y, double r, double start, double end);
-  friend void fl_arc(int x, int y, int w, int h, double a1, double a2);
-  friend void fl_pie(int x, int y, int w, int h, double a1, double a2);
-  friend void fl_end_points();
-  friend void fl_end_line();
-  friend void fl_end_loop();
-  friend void fl_end_polygon();
-  friend void fl_transformed_vertex(double xf, double yf);
-  friend void fl_push_clip(int x, int y, int w, int h);
-  friend int fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
-  friend int fl_not_clipped(int x, int y, int w, int h);
-  friend void fl_push_no_clip();
-  friend void fl_pop_clip();
-  friend void fl_begin_complex_polygon();
-  friend void fl_gap();
-  friend void fl_end_complex_polygon();
-  friend void fl_push_matrix();
-  friend void fl_pop_matrix();
-  friend void fl_mult_matrix(double a, double b, double c, double d, double x, double y);
-  friend void fl_scale(double x, double y);
-  friend void fl_scale(double x);
-  friend void fl_translate(double x, double y);
-  friend void fl_rotate(double d);
-  friend double fl_transform_x(double x, double y);
-  friend double fl_transform_y(double x, double y);
-  friend double fl_transform_dx(double x, double y);
-  friend double fl_transform_dy(double x, double y);
-  friend Fl_Region fl_clip_region();
-  friend void fl_clip_region(Fl_Region r);
-  friend void fl_restore_clip();
-  
-  friend void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L);
-  friend void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L);
-  friend void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
-  friend FL_EXPORT void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
-  friend FL_EXPORT void gl_start();
-
-  matrix *fl_matrix; /**< Points to the current coordinate transformation matrix */
-
-  /** \brief The constructor. */
-  Fl_Graphics_Driver();
-  /** \brief see fl_rect(int x, int y, int w, int h). */
-  virtual void rect(int x, int y, int w, int h);
-  /** \brief see fl_rectf(int x, int y, int w, int h). */
-  virtual void rectf(int x, int y, int w, int h);
-  /** \brief see fl_line_style(int style, int width, char* dashes). */
-  virtual void line_style(int style, int width=0, char* dashes=0);
-  /** \brief see fl_xyline(int x, int y, int x1). */
-  virtual void xyline(int x, int y, int x1);
-  /** \brief see fl_xyline(int x, int y, int x1, int y2). */
-  virtual void xyline(int x, int y, int x1, int y2);
-  /** \brief see fl_xyline(int x, int y, int x1, int y2, int x3). */
-  virtual void xyline(int x, int y, int x1, int y2, int x3);
-  /** \brief see fl_yxline(int x, int y, int y1). */
-  virtual void yxline(int x, int y, int y1);
-  /** \brief see fl_yxline(int x, int y, int y1, int x2). */
-  virtual void yxline(int x, int y, int y1, int x2);
-  /** \brief see fl_yxline(int x, int y, int y1, int x2, int y3). */
-  virtual void yxline(int x, int y, int y1, int x2, int y3);
-  /** \brief see fl_line(int x, int y, int x1, int y1). */
-  virtual void line(int x, int y, int x1, int y1);
-  /** \brief see fl_line(int x, int y, int x1, int y1, int x2, int y2). */
-  virtual void line(int x, int y, int x1, int y1, int x2, int y2);
-  /** \brief see fl_draw(const char *str, int n, int x, int y). */
-  virtual void draw(const char *str, int n, int x, int y) = 0;
-#ifdef __APPLE__
-  virtual void draw(const char *str, int n, float x, float y) = 0;
-#endif
-  /** \brief see fl_draw(int angle, const char *str, int n, int x, int y). */
-  virtual void draw(int angle, const char *str, int n, int x, int y) = 0;
-  /** \brief see fl_rtl_draw(const char *str, int n, int x, int y). */
-  virtual void rtl_draw(const char *str, int n, int x, int y) = 0;
-  /** \brief see fl_color(Fl_Color c). */
-  virtual void color(Fl_Color c) {color_ = c;}
-  /** \brief see fl_color(uchar r, uchar g, uchar b). */
-  virtual void color(uchar r, uchar g, uchar b) = 0;
-  /** \brief see fl_point(int x, int y). */
-  virtual void point(int x, int y);
-  /** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2). */
-  virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2);
-  /** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
-  virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  /** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2). */
-  virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
-  /** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
-  virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  /** \brief see fl_begin_points(). */
-  virtual void begin_points();
-  /** \brief see fl_begin_line(). */
-  virtual void begin_line();
-  /** \brief see fl_begin_loop(). */
-  virtual void begin_loop();
-  /** \brief see fl_begin_polygon(). */
-  virtual void begin_polygon();
-  /** \brief see fl_vertex(double x, double y). */
-  virtual void vertex(double x, double y);
-  /** \brief see fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3). */
-  virtual void curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
-  /** \brief see fl_circle(double x, double y, double r). */
-  virtual void circle(double x, double y, double r);
-  /** \brief see fl_arc(double x, double y, double r, double start, double end). */
-  virtual void arc(double x, double y, double r, double start, double end);
-  /** \brief see fl_arc(int x, int y, int w, int h, double a1, double a2). */
-  virtual void arc(int x, int y, int w, int h, double a1, double a2);
-  /** \brief see fl_pie(int x, int y, int w, int h, double a1, double a2). */
-  virtual void pie(int x, int y, int w, int h, double a1, double a2);
-  /** \brief see fl_end_points(). */
-  virtual void end_points();
-  /** \brief see fl_end_line(). */
-  virtual void end_line();
-  /** \brief see fl_end_loop(). */
-  virtual void end_loop();
-  /** \brief see fl_end_polygon(). */
-  virtual void end_polygon();
-  /** \brief see fl_begin_complex_polygon(). */
-  virtual void begin_complex_polygon();
-  /** \brief see fl_gap(). */
-  virtual void gap();
-  /** \brief see fl_end_complex_polygon(). */
-  virtual void end_complex_polygon();
-  /** \brief see fl_transformed_vertex(double xf, double yf). */
-  virtual void transformed_vertex(double xf, double yf);
-  /** \brief see fl_push_clip(int x, int y, int w, int h). */
-  virtual void push_clip(int x, int y, int w, int h);
-  /** \brief see fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H). */
-  virtual int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
-  /** \brief see fl_not_clipped(int x, int y, int w, int h). */
-  virtual int not_clipped(int x, int y, int w, int h);
-  /** \brief see fl_push_no_clip(). */
-  virtual void push_no_clip();
-  /** \brief see fl_pop_clip(). */
-  virtual void pop_clip();
-    
-  /** \brief see fl_push_matrix(). */
-  void push_matrix();
-  /** \brief see fl_pop_matrix(). */
-  void pop_matrix();
-  /** \brief see fl_mult_matrix(double a, double b, double c, double d, double x, double y). */
-  void mult_matrix(double a, double b, double c, double d, double x, double y);
-  /** \brief see fl_scale(double x, double y). */
-  inline void scale(double x, double y) { mult_matrix(x,0,0,y,0,0); }
-  /** \brief see fl_scale(double x). */
-  inline void scale(double x) { mult_matrix(x,0,0,x,0,0); }
-  /** \brief see fl_translate(double x, double y). */
-  inline void translate(double x,double y) { mult_matrix(1,0,0,1,x,y); }
-  /** \brief see fl_rotate(double d). */
-  void rotate(double d);
-  /** \brief see fl_transform_x(double x, double y). */
-  double transform_x(double x, double y);
-  /** \brief see fl_transform_y(double x, double y). */
-  double transform_y(double x, double y);
-  /** \brief see fl_transform_dx(double x, double y). */
-  double transform_dx(double x, double y);
-  /** \brief see fl_transform_dy(double x, double y). */
-  double transform_dy(double x, double y);
-  /** \brief see fl_clip_region(). */
-  Fl_Region clip_region();
-  /** \brief see fl_clip_region(Fl_Region r). */
-  void clip_region(Fl_Region r);
-  /** \brief see fl_restore_clip(). */
-  void restore_clip();
-  
-  // Images
-  /** \brief see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L). */
-  virtual   void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0) = 0;
-  /** \brief see fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L). */
-  virtual   void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0) = 0;
-  /** \brief see fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D). */
-  virtual   void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3) = 0;
-  /** \brief see fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D). */
-  virtual   void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1) = 0;
-  // Image classes
-  /** \brief Draws an Fl_RGB_Image object to the device. 
-   *
-   Specifies a bounding box for the image, with the origin (upper left-hand corner) of 
-   the image offset by the cx and cy arguments.
-   */
-  virtual   void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy) = 0;
-  /** \brief Draws an Fl_Pixmap object to the device. 
-   *
-   Specifies a bounding box for the image, with the origin (upper left-hand corner) of 
-   the image offset by the cx and cy arguments.
-   */
-  virtual   void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy) = 0;
-  /** \brief Draws an Fl_Bitmap object to the device. 
-   *
-   Specifies a bounding box for the image, with the origin (upper left-hand corner) of 
-   the image offset by the cx and cy arguments.
-   */
-  virtual void draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) = 0;
-    
-public:
-  static const char *class_id;
-  virtual const char *class_name() {return class_id;};
-  /** \brief see fl_font(Fl_Font face, Fl_Fontsize size). */
-  virtual void font(Fl_Font face, Fl_Fontsize size) {font_ = face; size_ = size;}
-  /** \brief see fl_font(void). */
-  Fl_Font font() {return font_; }
-  /** \brief see fl_size(). */
-  Fl_Fontsize size() {return size_; }
-  /** \brief see fl_width(const char *str, int n). */
-  virtual double width(const char *str, int n) = 0;
-  /** \brief see fl_width(unsigned int n). */
-  virtual inline double width(unsigned int c) { char ch = (char)c; return width(&ch, 1); }
-  /** \brief see fl_text_extents(const char*, int n, int& dx, int& dy, int& w, int& h). */
-  virtual void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
-  /** \brief see fl_height(). */
-  virtual int height() = 0;
-  /** \brief see fl_descent(). */
-  virtual int descent() = 0;
-  /** \brief see fl_color(void). */
-  Fl_Color color() {return color_;}
-  /** Returns a pointer to the current Fl_Font_Descriptor for the graphics driver */
-  inline Fl_Font_Descriptor *font_descriptor() { return font_descriptor_;}
-  /** Sets the current Fl_Font_Descriptor for the graphics driver */
-  inline void font_descriptor(Fl_Font_Descriptor *d) { font_descriptor_ = d;}
-  /** \brief The destructor */
-  virtual ~Fl_Graphics_Driver() {};
-};
-
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-/**
- \brief The Mac OS X-specific graphics class.
- *
- This class is implemented only on the Mac OS X platform.
- */
-class FL_EXPORT Fl_Quartz_Graphics_Driver : public Fl_Graphics_Driver {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  void color(Fl_Color c);
-  void color(uchar r, uchar g, uchar b);
-  void draw(const char* str, int n, int x, int y);
-#ifdef __APPLE__
-  void draw(const char *str, int n, float x, float y);
-#endif
-  void draw(int angle, const char *str, int n, int x, int y);
-  void rtl_draw(const char* str, int n, int x, int y);
-  void font(Fl_Font face, Fl_Fontsize size);
-  void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
-  void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
-  void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
-  void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
-  double width(const char *str, int n);
-  double width(unsigned int c);
-  void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
-  int height();
-  int descent();
-};
-#endif
-#if defined(WIN32) || defined(FL_DOXYGEN)
-/**
- \brief The MSWindows-specific graphics class.
- *
- This class is implemented only on the MSWindows platform.
- */
-class FL_EXPORT Fl_GDI_Graphics_Driver : public Fl_Graphics_Driver {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  void color(Fl_Color c);
-  void color(uchar r, uchar g, uchar b);
-  void draw(const char* str, int n, int x, int y);
-  void draw(int angle, const char *str, int n, int x, int y);
-  void rtl_draw(const char* str, int n, int x, int y);
-  void font(Fl_Font face, Fl_Fontsize size);
-  void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
-  void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
-  void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
-  void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
-  double width(const char *str, int n);
-  double width(unsigned int c);
-  void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
-  int height();
-  int descent();
-};
-#endif
-#if !(defined(__APPLE__) || defined(WIN32))
-/**
- \brief The Xlib-specific graphics class.
- *
- This class is implemented only on the Xlib platform.
- */
-class Fl_Xlib_Graphics_Driver : public Fl_Graphics_Driver {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  void color(Fl_Color c);
-  void color(uchar r, uchar g, uchar b);
-  void draw(const char* str, int n, int x, int y);
-  void draw(int angle, const char *str, int n, int x, int y);
-  void rtl_draw(const char* str, int n, int x, int y);
-  void font(Fl_Font face, Fl_Fontsize size);
-  void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
-  void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
-  void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
-  void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
-  double width(const char *str, int n);
-  double width(unsigned int c);
-  void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
-  int height();
-  int descent();
-};
-#endif
-
-/**
- \brief A surface that's susceptible to receive graphical output.
- */
-class FL_EXPORT Fl_Surface_Device : public Fl_Device {
-  /** \brief The graphics driver in use by this surface. */
-  Fl_Graphics_Driver *_driver;
-  static Fl_Surface_Device *_surface; // the surface that currently receives graphics output
-protected:
-  /** \brief Constructor that sets the graphics driver to use for the created surface. */
-  Fl_Surface_Device(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver; };
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  virtual void set_current(void);
-  /** \brief Sets the graphics driver of this drawing surface. */
-  inline void driver(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver;};
-  /** \brief Returns the graphics driver of this drawing surface. */
-  inline Fl_Graphics_Driver *driver() {return _driver; };
-  /** \brief the surface that currently receives graphics output */
-  static inline Fl_Surface_Device *surface() {return _surface; }; 
-  /** \brief The destructor. */
-  virtual ~Fl_Surface_Device() {}
-};
-
-/**
- \brief A display to which the computer can draw.
- */
-class FL_EXPORT Fl_Display_Device : public Fl_Surface_Device {
-  static Fl_Display_Device *_display; // the platform display device
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  /** \brief A constructor that sets the graphics driver used by the display */
-  Fl_Display_Device(Fl_Graphics_Driver *graphics_driver);
-  /** Returns the platform display device. */
-  static inline Fl_Display_Device *display_device() {return _display;};
-};
-
-/**
- This plugin socket allows the integration of new device drivers for special
- window or screen types. It is currently used to provide an automated printing
- service for OpenGL windows, if linked with fltk_gl.
- */
-class FL_EXPORT Fl_Device_Plugin : public Fl_Plugin {
-public:
-  /** \brief The constructor */
-  Fl_Device_Plugin(const char *name)
-  : Fl_Plugin(klass(), name) { }
-  /** \brief Returns the class name */
-  virtual const char *klass() { return "fltk:device"; }
-  /** \brief Returns the plugin name */
-  virtual const char *name() = 0;
-  /** \brief Prints a widget 
-   \param w the widget
-   \param x,y offsets where to print relatively to coordinates origin
-   \param height height of the current drawing area
-   */
-  virtual int print(Fl_Widget* w, int x, int y, int height) = 0;
-};
-
-#endif // Fl_Device_H
-
-//
-// End of "$Id: Fl_Device.H 8529 2011-03-23 12:49:30Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Dial.H b/common/fltk/FL/Fl_Dial.H
deleted file mode 100644
index 96de59f..0000000
--- a/common/fltk/FL/Fl_Dial.H
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-// "$Id: Fl_Dial.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Dial header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Dial widget . */
-
-#ifndef Fl_Dial_H
-#define Fl_Dial_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-// values for type():
-#define FL_NORMAL_DIAL	0	/**< type() for dial variant with dot */
-#define FL_LINE_DIAL	1	/**< type() for dial variant with line */
-#define FL_FILL_DIAL	2	/**< type() for dial variant with filled arc */
-
-/**
-  The Fl_Dial widget provides a circular dial to control a
-  single floating point value.
-  <P ALIGN=CENTER>\image html dial.png 
-  \image latex dial.png "Fl_Dial" width=4cm
-  Use type() to set the type of the dial to:
-  <UL>
-  <LI>FL_NORMAL_DIAL - Draws a normal dial with a knob. </LI>
-  <LI>FL_LINE_DIAL - Draws a dial with a line. </LI>
-  <LI>FL_FILL_DIAL - Draws a dial with a filled arc. </LI>
-  </UL>
-
-*/
-class FL_EXPORT Fl_Dial : public Fl_Valuator {
-
-  short a1,a2;
-
-protected:
-
-  // these allow subclasses to put the dial in a smaller area:
-  void draw(int X, int Y, int W, int H);
-  int handle(int event, int X, int Y, int W, int H);
-  void draw();
-
-public:
-
-  int handle(int);
-  /**
-    Creates a new Fl_Dial widget using the given position, size,
-    and label string. The default type is FL_NORMAL_DIAL.
-  */
-  Fl_Dial(int x,int y,int w,int h, const char *l = 0);
-  /** 
-     Sets Or gets the angles used for the minimum and maximum values.  The default
-     values are 45 and 315 (0 degrees is straight down and the angles
-     progress clockwise).  Normally angle1 is less than angle2, but if you
-     reverse them the dial moves counter-clockwise.
-  */
-  short angle1() const {return a1;}
-  /** See short angle1() const */
-  void angle1(short a) {a1 = a;}
-  /** See short angle1() const */
-  short angle2() const {return a2;}
-  /** See short angle1() const */
-  void angle2(short a) {a2 = a;}
-  /** See short angle1() const */
-  void angles(short a, short b) {a1 = a; a2 = b;}
-
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Dial.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Double_Window.H b/common/fltk/FL/Fl_Double_Window.H
deleted file mode 100644
index 20ab25b..0000000
--- a/common/fltk/FL/Fl_Double_Window.H
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-// "$Id: Fl_Double_Window.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Double-buffered window header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Double_Window widget . */
-
-#ifndef Fl_Double_Window_H
-#define Fl_Double_Window_H
-
-#include "Fl_Window.H"
-
-/**
-  The Fl_Double_Window provides a double-buffered window.
-  If possible this will use the X double buffering extension (Xdbe).  If
-  not, it will draw the window data into an off-screen pixmap, and then
-  copy it to the on-screen window.
-  <P>It is highly recommended that you put the following code before the
-  first show() of <I>any</I> window in your program: </P>
-  \code
-  Fl::visual(FL_DOUBLE|FL_INDEX)
-  \endcode
-  This makes sure you can use Xdbe on servers where double buffering
-  does not exist for every visual.
-*/
-class FL_EXPORT Fl_Double_Window : public Fl_Window {
-protected:
-  void flush(int eraseoverlay);
-  /**
-    Force double buffering, even if the OS already buffers windows
-    (overlays need that on MacOS and Windows2000)
-  */
-  char force_doublebuffering_;
-public:
-  void show();
-  void show(int a, char **b) {Fl_Window::show(a,b);}
-  void flush();
-  void resize(int,int,int,int);
-  void hide();
-  ~Fl_Double_Window();
-  /**
-    Creates a new Fl_Double_Window widget using the given
-    position, size, and label (title) string.
-  */
-  Fl_Double_Window(int W, int H, const char *l = 0) 
-    : Fl_Window(W,H,l), force_doublebuffering_(0) { type(FL_DOUBLE_WINDOW); }
-   /**
-    See  Fl_Double_Window::Fl_Double_Window(int w, int h, const char *label = 0)
-  */
-  Fl_Double_Window(int X, int Y, int W, int H, const char *l = 0)
-    : Fl_Window(X,Y,W,H,l), force_doublebuffering_(0) { type(FL_DOUBLE_WINDOW); }
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Double_Window.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Export.H b/common/fltk/FL/Fl_Export.H
deleted file mode 100644
index 875a278..0000000
--- a/common/fltk/FL/Fl_Export.H
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * "$Id: Fl_Export.H 7903 2010-11-28 21:06:39Z matt $"
- *
- * WIN32 DLL export .
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#ifndef Fl_Export_H
-#  define Fl_Export_H
-
-/*
- * The following is only used when building DLLs under WIN32...
- */
-
-#  if defined(FL_DLL)
-#    ifdef FL_LIBRARY
-#      define FL_EXPORT	__declspec(dllexport)
-#    else
-#      define FL_EXPORT	__declspec(dllimport)
-#    endif /* FL_LIBRARY */
-#  else
-#    define FL_EXPORT
-#  endif /* FL_DLL */
-
-#endif /* !Fl_Export_H */
-
-/*
- * End of "$Id: Fl_Export.H 7903 2010-11-28 21:06:39Z matt $".
- */
diff --git a/common/fltk/FL/Fl_File_Browser.H b/common/fltk/FL/Fl_File_Browser.H
deleted file mode 100644
index cc7fc96..0000000
--- a/common/fltk/FL/Fl_File_Browser.H
+++ /dev/null
@@ -1,120 +0,0 @@
-//
-// "$Id: Fl_File_Browser.H 8306 2011-01-24 17:04:22Z matt $"
-//
-// FileBrowser definitions.
-//
-// Copyright 1999-2010 by Michael Sweet.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_File_Browser widget . */
-
-//
-// Include necessary header files...
-//
-
-#ifndef _Fl_File_Browser_H_
-#  define _Fl_File_Browser_H_
-
-#  include "Fl_Browser.H"
-#  include "Fl_File_Icon.H"
-#  include "filename.H"
-
-
-//
-// Fl_File_Browser class...
-//
-
-/** The Fl_File_Browser widget displays a list of filenames, optionally with file-specific icons. */
-class FL_EXPORT Fl_File_Browser : public Fl_Browser {
-  
-  int		filetype_;
-  const char	*directory_;
-  uchar		iconsize_;
-  const char	*pattern_;
-
-  int		full_height() const;
-  int		item_height(void *) const;
-  int		item_width(void *) const;
-  void		item_draw(void *, int, int, int, int) const;
-  int		incr_height() const { return (item_height(0)); }
-
-public:
-  enum { FILES, DIRECTORIES };
-
-  /**
-    The constructor creates the Fl_File_Browser widget at the specified position and size.
-    The destructor destroys the widget and frees all memory that has been allocated.
-  */
-  Fl_File_Browser(int, int, int, int, const char * = 0);
-
-  /**    Sets or gets the size of the icons. The default size is 20 pixels.  */
-  uchar		iconsize() const { return (iconsize_); };
-  /**    Sets or gets the size of the icons. The default size is 20 pixels.  */
-  void		iconsize(uchar s) { iconsize_ = s; redraw(); };
-
-  /**
-    Sets or gets the filename filter. The pattern matching uses
-    the fl_filename_match()
-    function in FLTK.
-  */
-  void	filter(const char *pattern);
-  /**
-    Sets or gets the filename filter. The pattern matching uses
-    the fl_filename_match()
-    function in FLTK.
-  */
-  const char	*filter() const { return (pattern_); };
-
-  /**
-    Loads the specified directory into the browser. If icons have been
-    loaded then the correct icon is associated with each file in the list.
-    
-    <P>The sort argument specifies a sort function to be used with
-    fl_filename_list().
-  */
-  int		load(const char *directory, Fl_File_Sort_F *sort = fl_numericsort);
-
-  Fl_Fontsize  textsize() const { return Fl_Browser::textsize(); };
-  void		textsize(Fl_Fontsize s) { Fl_Browser::textsize(s); iconsize_ = (uchar)(3 * s / 2); };
-
-  /**
-    Sets or gets the file browser type, FILES or
-    DIRECTORIES. When set to FILES, both
-    files and directories are shown. Otherwise only directories are
-    shown.
-  */
-  int		filetype() const { return (filetype_); };
-  /**
-    Sets or gets the file browser type, FILES or
-    DIRECTORIES. When set to FILES, both
-    files and directories are shown. Otherwise only directories are
-    shown.
-  */
-  void		filetype(int t) { filetype_ = t; };
-};
-
-#endif // !_Fl_File_Browser_H_
-
-//
-// End of "$Id: Fl_File_Browser.H 8306 2011-01-24 17:04:22Z matt $".
-//
diff --git a/common/fltk/FL/Fl_File_Chooser.H b/common/fltk/FL/Fl_File_Chooser.H
deleted file mode 100644
index 3816621..0000000
--- a/common/fltk/FL/Fl_File_Chooser.H
+++ /dev/null
@@ -1,247 +0,0 @@
-//
-// "$Id: Fl_File_Chooser.H 8786 2011-06-07 11:41:36Z manolo $"
-//
-// Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef Fl_File_Chooser_H
-#define Fl_File_Chooser_H
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Tile.H>
-#include <FL/Fl_File_Browser.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_File_Input.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/fl_ask.H>
-
-class FL_EXPORT Fl_File_Chooser {
-public:
-  enum { SINGLE = 0, MULTI = 1, CREATE = 2, DIRECTORY = 4 }; 
-private:
-  static Fl_Preferences prefs_; 
-  void (*callback_)(Fl_File_Chooser*, void *); 
-  void *data_; 
-  char directory_[FL_PATH_MAX]; 
-  char pattern_[FL_PATH_MAX]; 
-  char preview_text_[2048]; 
-  int type_; 
-  void favoritesButtonCB(); 
-  void favoritesCB(Fl_Widget *w); 
-  void fileListCB(); 
-  void fileNameCB(); 
-  void newdir(); 
-  static void previewCB(Fl_File_Chooser *fc); 
-  void showChoiceCB(); 
-  void update_favorites(); 
-  void update_preview(); 
-public:
-  Fl_File_Chooser(const char *d, const char *p, int t, const char *title);
-private:
-  Fl_Double_Window *window;
-  void cb_window_i(Fl_Double_Window*, void*);
-  static void cb_window(Fl_Double_Window*, void*);
-  Fl_Choice *showChoice;
-  void cb_showChoice_i(Fl_Choice*, void*);
-  static void cb_showChoice(Fl_Choice*, void*);
-  Fl_Menu_Button *favoritesButton;
-  void cb_favoritesButton_i(Fl_Menu_Button*, void*);
-  static void cb_favoritesButton(Fl_Menu_Button*, void*);
-public:
-  Fl_Button *newButton;
-private:
-  void cb_newButton_i(Fl_Button*, void*);
-  static void cb_newButton(Fl_Button*, void*);
-  void cb__i(Fl_Tile*, void*);
-  static void cb_(Fl_Tile*, void*);
-  Fl_File_Browser *fileList;
-  void cb_fileList_i(Fl_File_Browser*, void*);
-  static void cb_fileList(Fl_File_Browser*, void*);
-  Fl_Box *previewBox;
-public:
-  Fl_Check_Button *previewButton;
-private:
-  void cb_previewButton_i(Fl_Check_Button*, void*);
-  static void cb_previewButton(Fl_Check_Button*, void*);
-public:
-  Fl_Check_Button *showHiddenButton;
-private:
-  void cb_showHiddenButton_i(Fl_Check_Button*, void*);
-  static void cb_showHiddenButton(Fl_Check_Button*, void*);
-  Fl_File_Input *fileName;
-  void cb_fileName_i(Fl_File_Input*, void*);
-  static void cb_fileName(Fl_File_Input*, void*);
-  Fl_Return_Button *okButton;
-  void cb_okButton_i(Fl_Return_Button*, void*);
-  static void cb_okButton(Fl_Return_Button*, void*);
-  Fl_Button *cancelButton;
-  void cb_cancelButton_i(Fl_Button*, void*);
-  static void cb_cancelButton(Fl_Button*, void*);
-  Fl_Double_Window *favWindow;
-  Fl_File_Browser *favList;
-  void cb_favList_i(Fl_File_Browser*, void*);
-  static void cb_favList(Fl_File_Browser*, void*);
-  Fl_Button *favUpButton;
-  void cb_favUpButton_i(Fl_Button*, void*);
-  static void cb_favUpButton(Fl_Button*, void*);
-  Fl_Button *favDeleteButton;
-  void cb_favDeleteButton_i(Fl_Button*, void*);
-  static void cb_favDeleteButton(Fl_Button*, void*);
-  Fl_Button *favDownButton;
-  void cb_favDownButton_i(Fl_Button*, void*);
-  static void cb_favDownButton(Fl_Button*, void*);
-  Fl_Button *favCancelButton;
-  void cb_favCancelButton_i(Fl_Button*, void*);
-  static void cb_favCancelButton(Fl_Button*, void*);
-  Fl_Return_Button *favOkButton;
-  void cb_favOkButton_i(Fl_Return_Button*, void*);
-  static void cb_favOkButton(Fl_Return_Button*, void*);
-public:
-  ~Fl_File_Chooser();
-  void callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0);
-  void color(Fl_Color c);
-  Fl_Color color();
-  int count(); 
-  void directory(const char *d); 
-  char * directory();
-  void filter(const char *p); 
-  const char * filter();
-  int filter_value();
-  void filter_value(int f);
-  void hide();
-  void iconsize(uchar s);
-  uchar iconsize();
-  void label(const char *l);
-  const char * label();
-  void ok_label(const char *l);
-  const char * ok_label();
-  void preview(int e); 
-  int preview() const { return previewButton->value(); }; 
-private:
-  void showHidden(int e); 
-  void remove_hidden_files(); 
-public:
-  void rescan(); 
-  void rescan_keep_filename(); 
-  void show(); 
-  int shown();
-  void textcolor(Fl_Color c);
-  Fl_Color textcolor();
-  void textfont(Fl_Font f);
-  Fl_Font textfont();
-  void textsize(Fl_Fontsize s);
-  Fl_Fontsize textsize();
-  void type(int t);
-  int type();
-  void * user_data() const;
-  void user_data(void *d);
-  const char *value(int f = 1); 
-  void value(const char *filename); 
-  int visible();
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *add_favorites_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *all_files_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *custom_filter_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *existing_file_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *favorites_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *filename_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *filesystems_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *manage_favorites_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *new_directory_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *new_directory_tooltip; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *preview_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *save_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *show_label; 
-  /**
-     [standard text may be customized at run-time]
-  */
-  static const char *hidden_label; 
-  /**
-     the sort function that is used when loading
-     the contents of a directory.
-  */
-  static Fl_File_Sort_F *sort; 
-private:
-  Fl_Widget* ext_group; 
-public:
-  Fl_Widget* add_extra(Fl_Widget* gr);
-};
-FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname,int relative=0);
-FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname,int relative=0);
-FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*));
-FL_EXPORT void fl_file_chooser_ok_label(const char*l);
-#endif
-
-//
-// End of "$Id: Fl_File_Chooser.H 8786 2011-06-07 11:41:36Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_File_Icon.H b/common/fltk/FL/Fl_File_Icon.H
deleted file mode 100644
index 7e67f02..0000000
--- a/common/fltk/FL/Fl_File_Icon.H
+++ /dev/null
@@ -1,168 +0,0 @@
-//
-// "$Id: Fl_File_Icon.H 8306 2011-01-24 17:04:22Z matt $"
-//
-// Fl_File_Icon definitions.
-//
-// Copyright 1999-2010 by Michael Sweet.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_File_Icon widget . */
-
-//
-// Include necessary header files...
-//
-
-#ifndef _Fl_Fl_File_Icon_H_
-#  define _Fl_Fl_File_Icon_H_
-
-#  include "Fl.H"
-
-
-//
-// Special color value for the icon color.
-//
-
-#  define FL_ICON_COLOR (Fl_Color)0xffffffff	/**< icon color [background?]*/
-
-
-//
-// Fl_File_Icon class...
-//
-
-/** 
-  The Fl_File_Icon class manages icon images that can be used 
-  as labels in other widgets and as icons in the FileBrowser widget.
-*/
-class FL_EXPORT Fl_File_Icon {			//// Icon data
-
-  static Fl_File_Icon *first_;	// Pointer to first icon/filetype
-  Fl_File_Icon	*next_;		// Pointer to next icon/filetype
-  const char	*pattern_;	// Pattern string
-  int		type_;		// Match only if directory or file?
-  int		num_data_;	// Number of data elements
-  int		alloc_data_;	// Number of allocated elements
-  short		*data_;		// Icon data
-
-  public:
-
-  enum				// File types
-  {
-    ANY,			// Any kind of file
-    PLAIN,			// Only plain files
-    FIFO,			// Only named pipes
-    DEVICE,			// Only character and block devices
-    LINK,			// Only symbolic links
-    DIRECTORY			// Only directories
-  };
-
-  enum				// Data opcodes
-  {
-    END,			// End of primitive/icon
-    COLOR,			// Followed by color value (2 shorts)
-    LINE,			// Start of line
-    CLOSEDLINE,			// Start of closed line
-    POLYGON,			// Start of polygon
-    OUTLINEPOLYGON,		// Followed by outline color (2 shorts)
-    VERTEX			// Followed by scaled X,Y
-  };
-
-  Fl_File_Icon(const char *p, int t, int nd = 0, short *d = 0);
-  ~Fl_File_Icon();
-
-  short		*add(short d);
-
-  /**
-    Adds a color value to the icon array, returning a pointer to it.
-    \param[in] c color value
-  */
-  short		*add_color(Fl_Color c)
-		{ short *d = add((short)COLOR); add((short)(c >> 16)); add((short)c); return (d); }
-
-  /**
-    Adds a vertex value to the icon array, returning a pointer to it.
-    The integer version accepts coordinates from 0 to 10000.
-    The origin (0.0) is in the lower-lefthand corner of the icon.
-    \param[in] x, y vertex coordinates
-  */
-  short		*add_vertex(int x, int y)
-		{ short *d = add((short)VERTEX); add((short)x); add((short)y); return (d); }
-
-  /**
-    Adds a vertex value to the icon array, returning a pointer to it.
-    The floating point version goes from 0.0 to 1.0.
-    The origin (0.0) is in the lower-lefthand corner of the icon.
-    \param[in] x, y vertex coordinates
-  */
-  short		*add_vertex(float x, float y)
-		{ short *d = add((short)VERTEX); add((short)(x * 10000.0));
-		  add((short)(y * 10000.0)); return (d); }
-
-  /** Clears all icon data from the icon.*/
-  void		clear() { num_data_ = 0; }
-
-  void		draw(int x, int y, int w, int h, Fl_Color ic, int active = 1);
-
-  void		label(Fl_Widget *w);
-
-  static void	labeltype(const Fl_Label *o, int x, int y, int w, int h, Fl_Align a);
-  void		load(const char *f);
-  int		load_fti(const char *fti);
-  int		load_image(const char *i);
-
-  /** Returns next file icon object. See Fl_File_Icon::first() */
-  Fl_File_Icon	*next() { return (next_); }
-
-  /** Returns the filename matching pattern for the icon.*/
-  const char	*pattern() { return (pattern_); }
-
-  /**  Returns the number of words of data used by the icon.*/
-  int		size() { return (num_data_); }
-
-  /**
-    Returns the filetype associated with the icon, which can be one of the
-    following:
-  
-    \li Fl_File_Icon::ANY, any kind of file.
-    \li Fl_File_Icon::PLAIN, plain files.
-    \li Fl_File_Icon::FIFO, named pipes.
-    \li Fl_File_Icon::DEVICE, character and block devices.
-    \li Fl_File_Icon::LINK, symbolic links.
-    \li Fl_File_Icon::DIRECTORY, directories.
-  */
-  int		type() { return (type_); }
-
-  /**  Returns the data array for the icon.*/
-  short		*value() { return (data_); }
-
-  static Fl_File_Icon *find(const char *filename, int filetype = ANY);
-
-  /** Returns a pointer to the first icon in the list.*/
-  static Fl_File_Icon *first() { return (first_); }
-  static void	load_system_icons(void);
-};
-
-#endif // !_Fl_Fl_File_Icon_H_
-
-//
-// End of "$Id: Fl_File_Icon.H 8306 2011-01-24 17:04:22Z matt $".
-//
diff --git a/common/fltk/FL/Fl_File_Input.H b/common/fltk/FL/Fl_File_Input.H
deleted file mode 100644
index e3d27fa..0000000
--- a/common/fltk/FL/Fl_File_Input.H
+++ /dev/null
@@ -1,106 +0,0 @@
-//
-// "$Id: Fl_File_Input.H 8712 2011-05-22 09:45:40Z AlbrechtS $"
-//
-// File_Input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Original version Copyright 1998 by Curtis Edwards.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_File_Input widget . */
-
-#ifndef Fl_File_Input_H
-#  define Fl_File_Input_H
-
-#  include <FL/Fl_Input.H>
-
-/**
-  \class Fl_File_Input
-  \brief This widget displays a pathname in a text input field.
-
-  A navigation bar located above the input field allows the user to
-  navigate upward in the directory tree.
-  You may want to handle FL_WHEN_CHANGED events for tracking text changes
-  and also FL_WHEN_RELEASE for button release when changing to parent dir.
-  FL_WHEN_RELEASE callback won't be called if the directory clicked
-  is the same as the current one.
-
-  <P align=CENTER> \image html Fl_File_Input.png </P> 
-  \image latex Fl_File_Input.png "Fl_File_Input"  width=6cm
-
-  \note As all Fl_Input derived objects, Fl_File_Input may call its callback
-  when losing focus (see FL_UNFOCUS) to update its state like its cursor shape.
-  One resulting side effect is that you should call clear_changed() early in your callback
-  to avoid reentrant calls if you plan to show another window or dialog box in the callback.
-*/
-class FL_EXPORT Fl_File_Input : public Fl_Input {
-  
-  Fl_Color	errorcolor_;
-  char		ok_entry_;
-  uchar		down_box_;
-  short		buttons_[200];
-  short		pressed_;
-
-  void		draw_buttons();
-  int		handle_button(int event);
-  void		update_buttons();
-
-public:
-
-  Fl_File_Input(int X, int Y, int W, int H, const char *L=0);
-
-  virtual int handle(int event);
-
-protected:
-  virtual void draw();
-
-public:
-  /** Gets the box type used for the navigation bar. */
-  Fl_Boxtype	down_box() const { return (Fl_Boxtype)down_box_; }
-  /** Sets the box type to use for the navigation bar.  */
-  void		down_box(Fl_Boxtype b) { down_box_ = b; }
-
-  /**
-    Gets the current error color.
-    \todo Better docs for Fl_File_Input::errorcolor() - is it even used?
-  */
-  Fl_Color	errorcolor() const { return errorcolor_; }
-  /** Sets the current error color to \p c */
-  void		errorcolor(Fl_Color c) { errorcolor_ = c; }
-
-  int	value(const char *str);
-  int	value(const char *str, int len);
-
-  /**
-    Returns the current value, which is a pointer to an internal buffer
-    and is valid only until the next event is handled.
-  */
-  const char	*value() { return Fl_Input_::value(); }
-};
-
-#endif // !Fl_File_Input_H
-
-
-//
-// End of "$Id: Fl_File_Input.H 8712 2011-05-22 09:45:40Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Fill_Dial.H b/common/fltk/FL/Fl_Fill_Dial.H
deleted file mode 100644
index e3b8444..0000000
--- a/common/fltk/FL/Fl_Fill_Dial.H
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// "$Id: Fl_Fill_Dial.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Filled dial header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Fill_Dial widget . */
-
-#ifndef Fl_Fill_Dial_H
-#define Fl_Fill_Dial_H
-
-#include "Fl_Dial.H"
-
-/** Draws a dial with a filled arc */
-class FL_EXPORT Fl_Fill_Dial : public Fl_Dial {
-public:
-    /** Creates a filled dial, also setting its type to FL_FILL_DIAL. */
-    Fl_Fill_Dial(int x,int y,int w,int h, const char *l = 0)
-	: Fl_Dial(x,y,w,h,l) {type(FL_FILL_DIAL);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Fill_Dial.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Fill_Slider.H b/common/fltk/FL/Fl_Fill_Slider.H
deleted file mode 100644
index 05e22b1..0000000
--- a/common/fltk/FL/Fl_Fill_Slider.H
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// "$Id: Fl_Fill_Slider.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Filled slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Fill_Slider widget . */
-
-#ifndef Fl_Fill_Slider_H
-#define Fl_Fill_Slider_H
-
-#include "Fl_Slider.H"
-/** Widget that draws a filled horizontal  slider,  useful as a progress or value meter*/
-class FL_EXPORT Fl_Fill_Slider : public Fl_Slider {
-public:
-    /** Creates the slider from its position,size and optional title. */
-    Fl_Fill_Slider(int x,int y,int w,int h,const char *l=0)
-	: Fl_Slider(x,y,w,h,l) {type(FL_VERT_FILL_SLIDER);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Fill_Slider.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Float_Input.H b/common/fltk/FL/Fl_Float_Input.H
deleted file mode 100644
index f774dd3..0000000
--- a/common/fltk/FL/Fl_Float_Input.H
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-// "$Id: Fl_Float_Input.H 8726 2011-05-23 18:32:47Z AlbrechtS $"
-//
-// Floating point input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Float_Input widget . */
-
-
-#ifndef Fl_Float_Input_H
-#define Fl_Float_Input_H
-
-#include "Fl_Input.H"
-
-/**
-  The Fl_Float_Input class is a subclass of Fl_Input
-  that only allows the user to type floating point numbers (sign,
-  digits, decimal point, more digits, 'E' or 'e', sign, digits).
-*/
-class FL_EXPORT Fl_Float_Input : public Fl_Input {
-public:
-  /**
-    Creates a new Fl_Float_Input widget using the given position,
-    size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-#if defined(FL_DLL)	// implementation in src/Fl_Input.cxx
-  Fl_Float_Input(int X,int Y,int W,int H,const char *l = 0);
-#else
-  Fl_Float_Input(int X,int Y,int W,int H,const char *l = 0)
-    : Fl_Input(X,Y,W,H,l) {type(FL_FLOAT_INPUT);}
-#endif
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Float_Input.H 8726 2011-05-23 18:32:47Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_FormsBitmap.H b/common/fltk/FL/Fl_FormsBitmap.H
deleted file mode 100644
index 5558262..0000000
--- a/common/fltk/FL/Fl_FormsBitmap.H
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// "$Id: Fl_FormsBitmap.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Forms bitmap header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_FormsBitmap widget . */
-
-#ifndef Fl_FormsBitmap_H
-#define Fl_FormsBitmap_H
-
-#include "Fl_Bitmap.H"
-
-/** 
-    Forms compatibility Bitmap Image Widget
-*/
-class FL_EXPORT Fl_FormsBitmap : public Fl_Widget {
-    Fl_Bitmap *b;
-protected:
-    void draw();
-public:
-    Fl_FormsBitmap(Fl_Boxtype, int, int, int, int, const char * = 0);
-    void set(int W, int H, const uchar *bits);
-    /** Sets a new bitmap. */
-    void bitmap(Fl_Bitmap *B) {b = B;}
-    /** Gets a the current associated Fl_Bitmap objects. */
-    Fl_Bitmap *bitmap() const {return b;}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_FormsBitmap.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_FormsPixmap.H b/common/fltk/FL/Fl_FormsPixmap.H
deleted file mode 100644
index 1eb01de..0000000
--- a/common/fltk/FL/Fl_FormsPixmap.H
+++ /dev/null
@@ -1,63 +0,0 @@
-//
-// "$Id: Fl_FormsPixmap.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Forms pixmap header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_FormsPixmap widget . */
-
-#ifndef Fl_FormsPixmap_H
-#define Fl_FormsPixmap_H
-
-#include "Fl_Pixmap.H"
-
-/**
-  \class Fl_FormsPixmap
-  \brief Forms pixmap drawing routines
-*/
-class FL_EXPORT Fl_FormsPixmap : public Fl_Widget {
-    Fl_Pixmap *b;
-protected:
-    void draw();
-public:
-    Fl_FormsPixmap(Fl_Boxtype t, int X, int Y, int W, int H, const char *L= 0);
-
-    void set(/*const*/char * const * bits);
-
-    /**
-      Set the internal pixmap pointer to an existing pixmap.
-      \param[in] B existing pixmap
-    */
-    void Pixmap(Fl_Pixmap *B) {b = B;}
-
-    /** Get the internal pixmap pointer. */
-    Fl_Pixmap *Pixmap() const {return b;}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_FormsPixmap.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Free.H b/common/fltk/FL/Fl_Free.H
deleted file mode 100644
index 367443c..0000000
--- a/common/fltk/FL/Fl_Free.H
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// "$Id: Fl_Free.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Forms free header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Free widget . */
-
-#ifndef Fl_Free_H
-#define Fl_Free_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-#define FL_NORMAL_FREE		1 /**< normal event handling */
-#define FL_SLEEPING_FREE	2 /**< deactivate event handling */
-#define FL_INPUT_FREE		3 /**< accepts FL_FOCUS events */
-#define FL_CONTINUOUS_FREE	4 /**< repeated timeout handling */
-#define FL_ALL_FREE		5 /**< FL_INPUT_FREE and FL_CONTINOUS_FREE */
-
-/** appropriate signature for handle function */
-typedef int (*FL_HANDLEPTR)(Fl_Widget *, int , float, float, char);
-
-/**
-  Emulation of the Forms "free" widget.
-  
-  This emulation allows the free demo to run, and appears to be useful for
-  porting programs written in Forms which use the free widget or make
-  subclasses of the Forms widgets.
-
-  There are five types of free, which determine when the handle function
-  is called:
-  
-  \li \c FL_NORMAL_FREE      normal event handling.
-  \li \c FL_SLEEPING_FREE    deactivates event handling (widget is inactive).
-  \li \c FL_INPUT_FREE       accepts FL_FOCUS events.
-  \li \c FL_CONTINUOUS_FREE  sets a timeout callback 100 times a second and
-                             provides an FL_STEP event. This has obvious
-			     detrimental effects on machine performance.
-  \li \c FL_ALL_FREE         same as FL_INPUT_FREE and FL_CONTINUOUS_FREE.
- 
-*/
-class FL_EXPORT Fl_Free : public Fl_Widget {
-    FL_HANDLEPTR hfunc;
-    static void step(void *);
-protected:
-    void draw();
-public:
-    int handle(int e);
-  Fl_Free(uchar t,int X,int Y,int W,int H,const char *L,FL_HANDLEPTR hdl);
-  ~Fl_Free();
-};
-
-// old event names for compatibility:
-#define FL_MOUSE	FL_DRAG /**< for backward compatibility */
-#define FL_DRAW		100     /**< for backward compatibility [UNUSED]*/
-#define FL_STEP		101     /**< for backward compatibility */
-#define FL_FREEMEM	102     /**< for backward compatibility [UNUSED]*/
-#define FL_FREEZE	103     /**< for backward compatibility [UNUSED]*/
-#define FL_THAW		104     /**< for backward compatibility [UNUSED]*/
-
-#endif
-
-//
-// End of "$Id: Fl_Free.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_GIF_Image.H b/common/fltk/FL/Fl_GIF_Image.H
deleted file mode 100644
index 69f055b..0000000
--- a/common/fltk/FL/Fl_GIF_Image.H
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// "$Id: Fl_GIF_Image.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// GIF image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_GIF_Image widget . */
-
-#ifndef Fl_GIF_Image_H
-#define Fl_GIF_Image_H
-#  include "Fl_Pixmap.H"
-
-/**
-  The Fl_GIF_Image class supports loading, caching,
-  and drawing of Compuserve GIF<SUP>SM</SUP> images. The class
-  loads the first image and supports transparency.
-*/
-class FL_EXPORT Fl_GIF_Image : public Fl_Pixmap {
-
-  public:
-
-  Fl_GIF_Image(const char* filename);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_GIF_Image.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Gl_Window.H b/common/fltk/FL/Fl_Gl_Window.H
deleted file mode 100644
index 02c5eb8..0000000
--- a/common/fltk/FL/Fl_Gl_Window.H
+++ /dev/null
@@ -1,240 +0,0 @@
-//
-// "$Id: Fl_Gl_Window.H 8157 2011-01-01 14:01:53Z AlbrechtS $"
-//
-// OpenGL header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Gl_Window widget . */
-
-#ifndef Fl_Gl_Window_H
-#define Fl_Gl_Window_H
-
-#include "Fl_Window.H"
-
-#ifndef GLContext
-/**
-  Opaque pointer type to hide system specific implementation.
-*/
-typedef void* GLContext; // actually a GLXContext or HGLDC
-#endif
-
-class Fl_Gl_Choice; // structure to hold result of glXChooseVisual
-
-/**
-  The Fl_Gl_Window widget sets things up so OpenGL works.
-  
-  It also keeps an OpenGL "context" for that window, so that changes to the
-  lighting and projection may be reused between redraws. Fl_Gl_Window
-  also flushes the OpenGL streams and swaps buffers after draw() returns.
-
-  OpenGL hardware typically provides some overlay bit planes, which
-  are very useful for drawing UI controls atop your 3D graphics.  If the
-  overlay hardware is not provided, FLTK tries to simulate the overlay.
-  This works pretty well if your graphics are double buffered, but not
-  very well for single-buffered.
-
-  Please note that the FLTK drawing and clipping functions
-  will not work inside an Fl_Gl_Window. All drawing
-  should be done using OpenGL calls exclusively.
-  Even though Fl_Gl_Window is derived from Fl_Group, 
-  it is not useful to add other FLTK Widgets as children,
-  unless those widgets are modified to draw using OpenGL calls.
-*/
-class FL_EXPORT Fl_Gl_Window : public Fl_Window {
-
-  int mode_;
-  const int *alist;
-  Fl_Gl_Choice *g;
-  GLContext context_;
-  char valid_f_;
-  char damage1_; // damage() of back buffer
-  virtual void draw_overlay();
-  void init();
-
-  void *overlay;
-  void make_overlay();
-  friend class _Fl_Gl_Overlay;
-
-  static int can_do(int, const int *);
-  int mode(int, const int *);
-
-public:
-
-  void show();
-  void show(int a, char **b) {Fl_Window::show(a,b);}
-  void flush();
-  void hide();
-  void resize(int,int,int,int);
-  int handle(int);
-  
-  /**
-    Is turned off when FLTK creates a new context for this window or 
-    when the window resizes, and is turned on \e after draw() is called.
-    You can use this inside your draw() method to avoid unnecessarily
-    initializing the OpenGL context. Just do this:
-    \code
-    void mywindow::draw() {
-     if (!valid()) {
-       glViewport(0,0,w(),h());
-       glFrustum(...);
-       ...other initialization...
-     }
-     if (!context_valid()) {
-       ...load textures, etc. ...
-     }
-     ... draw your geometry here ...
-    }
-    \endcode
-    
-    You can turn valid() on by calling valid(1).  You
-    should only do this after fixing the transformation inside a draw()
-    or after make_current().  This is done automatically after 
-    draw() returns.
-  */
-  char valid() const {return valid_f_ & 1;}
-  /**
-    See char Fl_Gl_Window::valid() const 
-  */
-  void valid(char v) {if (v) valid_f_ |= 1; else valid_f_ &= 0xfe;}
-  void invalidate();
-
-  /**
-    Will only be set if the 
-    OpenGL context is created or recreated. It differs from
-    Fl_Gl_Window::valid() which is also set whenever the context
-    changes size.
-  */
-  char context_valid() const {return valid_f_ & 2;}
-  /**
-    See char Fl_Gl_Window::context_valid() const 
-  */
-  void context_valid(char v) {if (v) valid_f_ |= 2; else valid_f_ &= 0xfd;}
-
-  /**  Returns non-zero if the hardware supports the given or current OpenGL mode. */
-  static int can_do(int m) {return can_do(m,0);}
-  /**  Returns non-zero if the hardware supports the given or current OpenGL mode. */
-  static int can_do(const int *m) {return can_do(0, m);}
-  /**  Returns non-zero if the hardware supports the given or current OpenGL mode. */
-  int can_do() {return can_do(mode_,alist);}
-  /**
-    Set or change the OpenGL capabilites of the window.  The value can be
-    any of the following OR'd together:
-
-    - \c FL_RGB - RGB color (not indexed)
-    - \c FL_RGB8 - RGB color with at least 8 bits of each color
-    - \c FL_INDEX - Indexed mode
-    - \c FL_SINGLE - not double buffered
-    - \c FL_DOUBLE - double buffered
-    - \c FL_ACCUM - accumulation buffer
-    - \c FL_ALPHA - alpha channel in color
-    - \c FL_DEPTH - depth buffer
-    - \c FL_STENCIL - stencil buffer
-    - \c FL_MULTISAMPLE - multisample antialiasing
-
-    FL_RGB and FL_SINGLE have a value of zero, so they
-    are "on" unless you give FL_INDEX or FL_DOUBLE.
-
-    If the desired combination cannot be done, FLTK will try turning off 
-    FL_MULTISAMPLE.  If this also fails the show() will call 
-    Fl::error() and not show the window.
-
-    You can change the mode while the window is displayed.  This is most
-    useful for turning double-buffering on and off.  Under X this will
-    cause the old X window to be destroyed and a new one to be created.  If
-    this is a top-level window this will unfortunately also cause the
-    window to blink, raise to the top, and be de-iconized, and the xid()
-    will change, possibly breaking other code.  It is best to make the GL
-    window a child of another window if you wish to do this!
-
-    mode() must not be called within draw() since it
-    changes the current context.
-  */
-  Fl_Mode mode() const {return (Fl_Mode)mode_;}
-  /** See Fl_Mode mode() const */
-  int mode(int a) {return mode(a,0);}
-  /** See Fl_Mode mode() const */
-  int mode(const int *a) {return mode(0, a);}
-  /** void See void context(void* v, int destroy_flag) */
-  void* context() const {return context_;}
-  void context(void*, int destroy_flag = 0);
-  void make_current();
-  void swap_buffers();
-  void ortho();
-
-  /**
-    Returns true if the hardware overlay is possible.  If this is false,
-    FLTK will try to simulate the overlay, with significant loss of update
-    speed.  Calling this will cause FLTK to open the display.
-  */
-  int can_do_overlay();
-  /**
-    This method causes draw_overlay() to be called at a later time.
-    Initially the overlay is clear. If you want the window to display
-    something in the overlay when it first appears, you must call this
-    immediately after you show() your window.
-  */
-  void redraw_overlay();
-  void hide_overlay();
-  /**
-    The make_overlay_current() method selects the OpenGL context
-    for the widget's overlay.  It is called automatically prior to the 
-    draw_overlay() method being called and can also be used to
-    implement feedback and/or selection within the handle()
-    method.
-  */
-  void make_overlay_current();
-
-  // Note: Doxygen docs in Fl_Widget.H to avoid redundancy.
-  virtual Fl_Gl_Window* as_gl_window() {return this;}
-  
-  ~Fl_Gl_Window();
-  /**
-    Creates a new Fl_Gl_Window widget using the given size, and label string. 
-    The default boxtype is FL_NO_BOX. The default mode is FL_RGB|FL_DOUBLE|FL_DEPTH.
-  */
-  Fl_Gl_Window(int W, int H, const char *l=0) : Fl_Window(W,H,l) {init();}
-  /**
-    Creates a new Fl_Gl_Window widget using the given position,
-    size, and label string. The default boxtype is FL_NO_BOX. The
-    default mode is FL_RGB|FL_DOUBLE|FL_DEPTH.
-  */
-
-  Fl_Gl_Window(int X, int Y, int W, int H, const char *l=0)
-    : Fl_Window(X,Y,W,H,l) {init();}
-
-protected:
-  /**
-    Draws the Fl_Gl_Window.
-
-    You \e \b must override the draw() method.
-  */
-  virtual void draw();
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Gl_Window.H 8157 2011-01-01 14:01:53Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Group.H b/common/fltk/FL/Fl_Group.H
deleted file mode 100644
index 0056e10..0000000
--- a/common/fltk/FL/Fl_Group.H
+++ /dev/null
@@ -1,230 +0,0 @@
-//
-// "$Id: Fl_Group.H 8157 2011-01-01 14:01:53Z AlbrechtS $"
-//
-// Group header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Group, Fl_End classes . */
-
-#ifndef Fl_Group_H
-#define Fl_Group_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-/**
-  The Fl_Group class is the FLTK container widget. It maintains
-  an array of child widgets. These children can themselves be any widget
-  including Fl_Group. The most important subclass of Fl_Group
-  is Fl_Window, however groups can also be used to control radio buttons 
-  or to enforce resize behavior.
-*/
-class FL_EXPORT Fl_Group : public Fl_Widget {
-
-  Fl_Widget** array_;
-  Fl_Widget* savedfocus_;
-  Fl_Widget* resizable_;
-  int children_;
-  int *sizes_; // remembered initial sizes of children
-
-  int navigation(int);
-  static Fl_Group *current_;
- 
-  // unimplemented copy ctor and assignment operator
-  Fl_Group(const Fl_Group&);
-  Fl_Group& operator=(const Fl_Group&);
-
-protected:
-  void draw();
-  void draw_child(Fl_Widget& widget) const;
-  void draw_children();
-  void draw_outside_label(const Fl_Widget& widget) const ;
-  void update_child(Fl_Widget& widget) const;
-  int  *sizes();
-
-public:
-
-  int handle(int);
-  void begin();
-  void end();
-  static Fl_Group *current();
-  static void current(Fl_Group *g);
-
-  /**
-    Returns how many child widgets the group has.
-  */
-  int children() const {return children_;}
-  /**
-    Returns array()[n].  <i>No range checking is done!</i>
-  */
-  Fl_Widget* child(int n) const {return array()[n];}
-  int find(const Fl_Widget*) const;
-  /**
-    See int Fl_Group::find(const Fl_Widget *w) const 
-  */
-  int find(const Fl_Widget& o) const {return find(&o);}
-  Fl_Widget* const* array() const;
-
-  void resize(int,int,int,int);
-  /**
-    Creates a new Fl_Group widget using the given position, size,
-    and label string. The default boxtype is FL_NO_BOX.
-  */
-  Fl_Group(int,int,int,int, const char * = 0);
-  virtual ~Fl_Group();
-  void add(Fl_Widget&);
-  /**
-    See void Fl_Group::add(Fl_Widget &w) 
-  */
-  void add(Fl_Widget* o) {add(*o);}
-  void insert(Fl_Widget&, int i);
-  /**
-    This does insert(w, find(before)).  This will append the
-    widget if \p before is not in the group.
-  */
-  void insert(Fl_Widget& o, Fl_Widget* before) {insert(o,find(before));}
-  void remove(int index);
-  void remove(Fl_Widget&);
-  /**
-    Removes the widget \p o from the group.
-    \sa void remove(Fl_Widget&)
-  */
-  void remove(Fl_Widget* o) {remove(*o);}
-  void clear();
-
-  /**
-    See void Fl_Group::resizable(Fl_Widget *box) 
-  */
-  void resizable(Fl_Widget& o) {resizable_ = &o;}
-  /**
-    The resizable widget defines the resizing box for the group. When the
-    group is resized it calculates a new size and position for all of its
-    children. Widgets that are horizontally or vertically inside the
-    dimensions of the box are scaled to the new size. Widgets outside the
-    box are moved.
-
-    In these examples the gray area is the resizable:
-
-    \image html resizebox1.png
-    
-    \image html resizebox2.png
-    
-    \image latex resizebox1.png "before resize"  width=4cm
-    
-    \image latex resizebox2.png "after resize"   width=4cm
-
-    The resizable may be set to the group itself, in which case all the
-    contents are resized. This is the default value for Fl_Group,
-    although NULL is the default for Fl_Window and Fl_Pack.
-
-    If the resizable is NULL then all widgets remain a fixed size
-    and distance from the top-left corner.
-
-    It is possible to achieve any type of resize behavior by using an
-    invisible Fl_Box as the resizable and/or by using a hierarchy
-    of child Fl_Group's.
-  */
-  void resizable(Fl_Widget* o) {resizable_ = o;}
-  /**
-    See void Fl_Group::resizable(Fl_Widget *box) 
-  */
-  Fl_Widget* resizable() const {return resizable_;}
-  /**
-    Adds a widget to the group and makes it the resizable widget.
-  */
-  void add_resizable(Fl_Widget& o) {resizable_ = &o; add(o);}
-  void init_sizes();
-
-  /**
-    Controls whether the group widget clips the drawing of
-    child widgets to its bounding box.
-    
-    Set \p c to 1 if you want to clip the child widgets to the
-    bounding box.
-
-    The default is to not clip (0) the drawing of child widgets.
-  */
-  void clip_children(int c) { if (c) set_flag(CLIP_CHILDREN); else clear_flag(CLIP_CHILDREN); }
-  /**
-    Returns the current clipping mode.
-
-    \return true, if clipping is enabled, false otherwise.
-
-    \see void Fl_Group::clip_children(int c)
-  */
-  unsigned int clip_children() { return (flags() & CLIP_CHILDREN) != 0; }
-
-  // Note: Doxygen docs in Fl_Widget.H to avoid redundancy.
-  virtual Fl_Group* as_group() { return this; }
-
-  // back compatibility functions:
-
-  /**
-    \deprecated This is for backwards compatibility only. You should use
-    \e W->%take_focus() instead.
-    \sa Fl_Widget::take_focus();
-  */
-  void focus(Fl_Widget* W) {W->take_focus();}
-
-  /** This is for forms compatibility only */
-  Fl_Widget* & _ddfdesign_kludge() {return resizable_;}
-
-  /** This is for forms compatibility only */
-  void forms_end();
-};
-
-// dummy class used to end child groups in constructors for complex
-// subclasses of Fl_Group:
-/**
-  This is a dummy class that allows you to end a Fl_Group in a constructor list of a
-  class:
-  \code 
-   class MyClass {
-   Fl_Group group;
-   Fl_Button button_in_group;
-   Fl_End end;
-   Fl_Button button_outside_group;
-   MyClass();
-  };
-  MyClass::MyClass() :
-   group(10,10,100,100),
-   button_in_group(20,20,60,30),
-   end(),
-   button_outside_group(10,120,60,30)
-  {} 
-  \endcode
-*/
-class FL_EXPORT Fl_End {
-public:
-  /** All it does is calling Fl_Group::current()->end() */
-  Fl_End() {Fl_Group::current()->end();}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Group.H 8157 2011-01-01 14:01:53Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Help_Dialog.H b/common/fltk/FL/Fl_Help_Dialog.H
deleted file mode 100644
index 7cb2aef..0000000
--- a/common/fltk/FL/Fl_Help_Dialog.H
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// "$Id: Fl_Help_Dialog.H 8063 2010-12-19 21:20:10Z matt $"
-//
-// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Help_Dialog widget . */
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0108
-
-#ifndef Fl_Help_Dialog_H
-#define Fl_Help_Dialog_H
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Help_View.H>
-
-class FL_EXPORT Fl_Help_Dialog {
-  int index_; 
-  int max_; 
-  int line_[100];                 // FIXME: we must remove those static numbers
-  char file_[100][FL_PATH_MAX];   // FIXME: we must remove those static numbers
-  int find_pos_; 
-public:
-  Fl_Help_Dialog();
-private:
-  Fl_Double_Window *window_;
-  Fl_Button *back_;
-  void cb_back__i(Fl_Button*, void*);
-  static void cb_back_(Fl_Button*, void*);
-  Fl_Button *forward_;
-  void cb_forward__i(Fl_Button*, void*);
-  static void cb_forward_(Fl_Button*, void*);
-  Fl_Button *smaller_;
-  void cb_smaller__i(Fl_Button*, void*);
-  static void cb_smaller_(Fl_Button*, void*);
-  Fl_Button *larger_;
-  void cb_larger__i(Fl_Button*, void*);
-  static void cb_larger_(Fl_Button*, void*);
-  Fl_Input *find_;
-  void cb_find__i(Fl_Input*, void*);
-  static void cb_find_(Fl_Input*, void*);
-  Fl_Help_View *view_;
-  void cb_view__i(Fl_Help_View*, void*);
-  static void cb_view_(Fl_Help_View*, void*);
-public:
-  ~Fl_Help_Dialog();
-  int h();
-  void hide();
-  void load(const char *f);
-  void position(int xx, int yy);
-  void resize(int xx, int yy, int ww, int hh);
-  void show();
-  void show(int argc, char **argv);
-  void textsize(Fl_Fontsize s);
-  Fl_Fontsize textsize();
-  void topline(const char *n);
-  void topline(int n);
-  void value(const char *f);
-  const char * value() const;
-  int visible();
-  int w();
-  int x();
-  int y();
-};
-#endif
-
-//
-// End of "$Id: Fl_Help_Dialog.H 8063 2010-12-19 21:20:10Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Help_View.H b/common/fltk/FL/Fl_Help_View.H
deleted file mode 100644
index c0ee66d..0000000
--- a/common/fltk/FL/Fl_Help_View.H
+++ /dev/null
@@ -1,396 +0,0 @@
-//
-// "$Id: Fl_Help_View.H 8306 2011-01-24 17:04:22Z matt $"
-//
-// Help Viewer widget definitions.
-//
-// Copyright 1997-2010 by Easy Software Products.
-// Image support by Matthias Melcher, Copyright 2000-2009.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Help_View widget . */
-
-#ifndef Fl_Help_View_H
-#  define Fl_Help_View_H
-
-//
-// Include necessary header files...
-//
-
-#  include <stdio.h>
-#  include "Fl.H"
-#  include "Fl_Group.H"
-#  include "Fl_Scrollbar.H"
-#  include "fl_draw.H"
-#  include "Fl_Shared_Image.H"
-#  include "filename.H"
-
-
-//
-// Fl_Help_Func type - link callback function for files...
-//
-
-
-typedef const char *(Fl_Help_Func)(Fl_Widget *, const char *);
-
-
-//
-// Fl_Help_Block structure...
-//
-
-struct Fl_Help_Block {
-  const char	*start,		// Start of text
-		*end;		// End of text
-  uchar		border;		// Draw border?
-  Fl_Color	bgcolor;	// Background color
-  int		x,		// Indentation/starting X coordinate
-		y,		// Starting Y coordinate
-		w,		// Width
-		h;		// Height
-  int		line[32];	// Left starting position for each line
-};
-
-//
-// Fl_Help_Link structure...
-//
-/** Definition of a link for the html viewer. */
-struct Fl_Help_Link {
-  char		filename[192],	///< Reference filename
-		name[32];	///< Link target (blank if none)
-  int		x,		///< X offset of link text
-		y,		///< Y offset of link text
-		w,		///< Width of link text
-		h;		///< Height of link text
-};
-
-/*
- * Fl_Help_View font stack opaque implementation
- */
-
-/** Fl_Help_View font stack element definition. */
-struct FL_EXPORT Fl_Help_Font_Style {
-  Fl_Font      f;  ///< Font
-  Fl_Fontsize  s;  ///< Font Size
-  Fl_Color     c;  ///< Font Color
-  void get(Fl_Font &afont, Fl_Fontsize &asize, Fl_Color &acolor) {afont=f; asize=s; acolor=c;} ///< Gets current font attributes
-  void set(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {f=afont; s=asize; c=acolor;} ///< Sets current font attributes
-  Fl_Help_Font_Style(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {set(afont, asize, acolor);}
-  Fl_Help_Font_Style(){} // For in table use
-};
-
-/** Fl_Help_View font stack definition. */
-const size_t MAX_FL_HELP_FS_ELTS = 100;
-
-struct FL_EXPORT Fl_Help_Font_Stack {
-  /** font stack construction, initialize attributes. */
-  Fl_Help_Font_Stack() {
-    nfonts_ = 0;
-  }
-
-  void init(Fl_Font f, Fl_Fontsize s, Fl_Color c) { 
-    nfonts_ = 0;
-    elts_[nfonts_].set(f, s, c);
-    fl_font(f, s); 
-    fl_color(c);
-  }
-  /** Gets the top (current) element on the stack. */
-  void top(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { elts_[nfonts_].get(f, s, c); }
-  /** Pushes the font style triplet on the stack, also calls fl_font() & fl_color() adequately */
-  void push(Fl_Font f, Fl_Fontsize s, Fl_Color c) { 
-    if (nfonts_ <  MAX_FL_HELP_FS_ELTS-1) nfonts_ ++;
-    elts_[nfonts_].set(f, s, c);
-    fl_font(f, s); fl_color(c); 
-  }
-  /** Pops from the stack the font style triplet and calls fl_font() & fl_color() adequately */
-  void pop(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { 
-    if (nfonts_ > 0) nfonts_ --;
-    top(f, s, c);
-    fl_font(f, s); fl_color(c);
-  }
-  /** Gets the current count of font style elements in the stack. */
-  size_t count() const {return nfonts_;} // Gets the current number of fonts in the stack
-
-protected:
-  size_t nfonts_;		///< current number of fonts in stack
-  Fl_Help_Font_Style elts_[100]; ///< font elements
-};
-
-/** Fl_Help_Target structure */
-
-struct Fl_Help_Target {
-  char		name[32];	///< Target name
-  int		y;		///< Y offset of target
-};
-
-/**
-  The Fl_Help_View widget displays HTML text. Most HTML 2.0
-  elements are supported, as well as a primitive implementation of tables.
-  GIF, JPEG, and PNG images are displayed inline.
-
-  Supported HTML tags:
-     - A: HREF/NAME
-     - B
-     - BODY: BGCOLOR/TEXT/LINK
-     - BR
-     - CENTER
-     - CODE
-     - DD
-     - DL
-     - DT
-     - EM
-     - FONT: COLOR/SIZE/FACE=(helvetica/arial/sans/times/serif/symbol/courier)
-     - H1/H2/H3/H4/H5/H6
-     - HEAD
-     - HR
-     - I
-     - IMG: SRC/WIDTH/HEIGHT/ALT
-     - KBD
-     - LI
-     - OL
-     - P
-     - PRE
-     - STRONG
-     - TABLE: TH/TD/TR/BORDER/BGCOLOR/COLSPAN/ALIGN=CENTER|RIGHT|LEFT
-     - TITLE
-     - TT
-     - U
-     - UL
-     - VAR
-
-  Supported color names:
-     - black,red,green,yellow,blue,magenta,fuchsia,cyan,aqua,white,gray,grey,lime,maroon,navy,olive,purple,silver,teal.
-
-  Supported urls:
-     - Internal: file:
-     - External: http: ftp: https: ipp: mailto: news:
-
-  Quoted char names:
-     - Aacute aacute Acirc acirc acute AElig aelig Agrave agrave amp Aring aring Atilde atilde Auml auml
-     - brvbar bull
-     - Ccedil ccedil cedil cent copy curren
-     - deg divide
-     - Eacute eacute Ecirc ecirc Egrave egrave ETH eth Euml euml euro
-     - frac12 frac14 frac34
-     - gt
-     - Iacute iacute Icirc icirc iexcl Igrave igrave iquest Iuml iuml
-     - laquo lt
-     - macr micro middot
-     - nbsp not Ntilde ntilde
-     - Oacute oacute Ocirc ocirc Ograve ograve ordf ordm Oslash oslash Otilde otilde Ouml ouml
-     - para premil plusmn pound
-     - quot
-     - raquo reg
-     - sect shy sup1 sup2 sup3 szlig
-     - THORN thorn times trade
-     - Uacute uacute Ucirc ucirc Ugrave ugrave uml Uuml uuml
-     - Yacute yacute
-     - yen Yuml yuml
-
-*/
-class FL_EXPORT Fl_Help_View : public Fl_Group {	// Help viewer widget
-  
-  enum { RIGHT = -1, CENTER, LEFT };	///< Alignments
-
-  char		title_[1024];		///< Title string
-  Fl_Color	defcolor_,		///< Default text color
-		bgcolor_,		///< Background color
-		textcolor_,		///< Text color
-		linkcolor_;		///< Link color
-  Fl_Font       textfont_;		///< Default font for text
-  Fl_Fontsize  textsize_;		///< Default font size
-  const char	*value_;		///< HTML text value
-  Fl_Help_Font_Stack fstack_;		///< font stack management
-  int		nblocks_,		///< Number of blocks/paragraphs
-		ablocks_;		///< Allocated blocks
-  Fl_Help_Block	*blocks_;		///< Blocks
-
-  Fl_Help_Func	*link_;			///< Link transform function
-
-  int		nlinks_,		///< Number of links
-		alinks_;		///< Allocated links
-  Fl_Help_Link	*links_;		///< Links
-
-  int		ntargets_,		///< Number of targets
-		atargets_;		///< Allocated targets
-  Fl_Help_Target *targets_;		///< Targets
-
-  char		directory_[FL_PATH_MAX];///< Directory for current file
-  char		filename_[FL_PATH_MAX];	///< Current filename
-  int		topline_,		///< Top line in document
-		leftline_,		///< Lefthand position
-		size_,			///< Total document length
-		hsize_,			///< Maximum document width
-  		scrollbar_size_;	///< Size for both scrollbars
-  Fl_Scrollbar	scrollbar_,		///< Vertical scrollbar for document
-		hscrollbar_;		///< Horizontal scrollbar
-
-  static int    selection_first;
-  static int    selection_last;
-  static int    selection_push_first;
-  static int    selection_push_last;
-  static int    selection_drag_first;
-  static int    selection_drag_last;
-  static int    selected;
-  static int    draw_mode;
-  static int    mouse_x;
-  static int    mouse_y;
-  static int    current_pos;
-  static Fl_Help_View *current_view;
-  static Fl_Color hv_selection_color;
-  static Fl_Color hv_selection_text_color;
-
-
-  void initfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { f = textfont_; s = textsize_; c = textcolor_; fstack_.init(f, s, c); }
-  void pushfont(Fl_Font f, Fl_Fontsize s) {fstack_.push(f, s, textcolor_);}
-  void pushfont(Fl_Font f, Fl_Fontsize s, Fl_Color c) {fstack_.push(f, s, c);}
-  void popfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) {fstack_.pop(f, s, c);}
-
-  Fl_Help_Block	*add_block(const char *s, int xx, int yy, int ww, int hh, uchar border = 0);
-  void		add_link(const char *n, int xx, int yy, int ww, int hh);
-  void		add_target(const char *n, int yy);
-  static int	compare_targets(const Fl_Help_Target *t0, const Fl_Help_Target *t1);
-  int		do_align(Fl_Help_Block *block, int line, int xx, int a, int &l);
-  void		draw();
-  void		format();
-  void		format_table(int *table_width, int *columns, const char *table);
-  void		free_data();
-  int		get_align(const char *p, int a);
-  const char	*get_attr(const char *p, const char *n, char *buf, int bufsize);
-  Fl_Color	get_color(const char *n, Fl_Color c);
-  Fl_Shared_Image *get_image(const char *name, int W, int H);
-  int		get_length(const char *l);
-  int		handle(int);
-
-  void          hv_draw(const char *t, int x, int y);
-  char          begin_selection();
-  char          extend_selection();
-  void          end_selection(int c=0);
-  void          clear_global_selection();
-  Fl_Help_Link  *find_link(int, int);
-  void          follow_link(Fl_Help_Link*);
-
-public:
-
-  Fl_Help_View(int xx, int yy, int ww, int hh, const char *l = 0);
-  ~Fl_Help_View();
-  /** Returns the current directory for the text in the buffer. */
-  const char	*directory() const { if (directory_[0]) return (directory_);
-  					else return ((const char *)0); }
-  /** Returns the current filename for the text in the buffer. */
-  const char	*filename() const { if (filename_[0]) return (filename_);
-  					else return ((const char *)0); }
-  int		find(const char *s, int p = 0);
-  /**
-    This method assigns a callback function to use when a link is
-    followed or a file is loaded (via Fl_Help_View::load()) that
-    requires a different file or path.
-    
-    The callback function receives a pointer to the Fl_Help_View
-    widget and the URI or full pathname for the file in question.
-    It must return a pathname that can be opened as a local file or NULL:
-    
-    \code
-    const char *fn(Fl_Widget *w, const char *uri);
-    \endcode
-    
-    The link function can be used to retrieve remote or virtual
-    documents, returning a temporary file that contains the actual
-    data. If the link function returns NULL, the value of
-    the Fl_Help_View widget will remain unchanged.
-    
-    If the link callback cannot handle the URI scheme, it should
-    return the uri value unchanged or set the value() of the widget
-    before returning NULL.
-  */
-  void		link(Fl_Help_Func *fn) { link_ = fn; }
-  int		load(const char *f);
-  void		resize(int,int,int,int);
-  /** Gets the size of the help view. */
-  int		size() const { return (size_); }
-  void		size(int W, int H) { Fl_Widget::size(W, H); }
-  /** Sets the default text color. */
-  void		textcolor(Fl_Color c) { if (textcolor_ == defcolor_) textcolor_ = c; defcolor_ = c; }
-  /** Returns the current default text color. */
-  Fl_Color	textcolor() const { return (defcolor_); }
-  /** Sets the default text font. */
-  void		textfont(Fl_Font f) { textfont_ = f; format(); }
-  /** Returns the current default text font. */
-  Fl_Font       textfont() const { return (textfont_); }
-  /** Sets the default text size. */
-  void		textsize(Fl_Fontsize s) { textsize_ = s; format(); }
-  /** Gets the default text size. */
-  Fl_Fontsize  textsize() const { return (textsize_); }
-  /** Returns the current document title, or NULL if there is no title. */
-  const char	*title() { return (title_); }
-  void		topline(const char *n);
-  void		topline(int);
-  /** Returns the current top line in pixels. */
-  int		topline() const { return (topline_); }
-  void		leftline(int);
-  /** Gets the left position in pixels. */
-  int		leftline() const { return (leftline_); }
-  void		value(const char *val);
-  /** Returns the current buffer contents. */
-  const char	*value() const { return (value_); }
-  void          clear_selection();
-  void          select_all();
-  /**
-    Gets the current size of the scrollbars' troughs, in pixels.
-
-    If this value is zero (default), this widget will use the 
-    Fl::scrollbar_size() value as the scrollbar's width.
-  
-    \returns Scrollbar size in pixels, or 0 if the global Fl::scrollbar_size() is being used.
-    \see Fl::scrollbar_size(int)
-  */
-  int scrollbar_size() const {
-      return(scrollbar_size_);
-  }
-  /**
-    Sets the pixel size of the scrollbars' troughs to the \p size, in pixels.
-
-    Normally you should not need this method, and should use
-    Fl::scrollbar_size(int) instead to manage the size of ALL 
-    your widgets' scrollbars. This ensures your application 
-    has a consistent UI, is the default behavior, and is normally
-    what you want.
-
-    Only use THIS method if you really need to override the global
-    scrollbar size. The need for this should be rare.
-    
-    Setting \p size to the special value of 0 causes the widget to
-    track the global Fl::scrollbar_size(), which is the default.
-    
-    \param[in] size Sets the scrollbar size in pixels.\n
-                    If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
-    \see Fl::scrollbar_size()
-  */
-  void scrollbar_size(int size) {
-      scrollbar_size_ = size;
-  }   
-};
-
-#endif // !Fl_Help_View_H
-
-//
-// End of "$Id: Fl_Help_View.H 8306 2011-01-24 17:04:22Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Hold_Browser.H b/common/fltk/FL/Fl_Hold_Browser.H
deleted file mode 100644
index 37d05b5..0000000
--- a/common/fltk/FL/Fl_Hold_Browser.H
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// "$Id: Fl_Hold_Browser.H 8736 2011-05-24 20:00:56Z AlbrechtS $"
-//
-// Hold browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Hold_Browser widget . */
-
-#ifndef Fl_Hold_Browser_H
-#define Fl_Hold_Browser_H
-
-#include "Fl_Browser.H"
-
-/**
-  The Fl_Hold_Browser is a subclass of Fl_Browser
-  which lets the user select a single item, or no items by clicking on
-  the empty space.  As long as the mouse button is held down the item
-  pointed to by it is highlighted, and this highlighting remains on when
-  the mouse button is released. Normally the callback is done when the
-  user releases the mouse, but you can change this with when().
-  <P>See Fl_Browser for methods to add and remove lines from the browser.
-*/
-class FL_EXPORT Fl_Hold_Browser : public Fl_Browser {
-public:
-  /**
-    Creates a new Fl_Hold_Browser widget using the given
-    position, size, and label string. The default boxtype is FL_DOWN_BOX.
-    The constructor specializes Fl_Browser() by setting the type to FL_HOLD_BROWSER.
-    The destructor destroys the widget and frees all memory that has been allocated.
- */
-#if defined(FL_DLL)	// implementation in src/Fl_Browser.cxx
-  Fl_Hold_Browser(int X,int Y,int W,int H,const char *L=0);
-#else
-  Fl_Hold_Browser(int X,int Y,int W,int H,const char *L=0)
-	: Fl_Browser(X,Y,W,H,L) {type(FL_HOLD_BROWSER);}
-#endif
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Hold_Browser.H 8736 2011-05-24 20:00:56Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Hor_Fill_Slider.H b/common/fltk/FL/Fl_Hor_Fill_Slider.H
deleted file mode 100644
index 3c5a063..0000000
--- a/common/fltk/FL/Fl_Hor_Fill_Slider.H
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// "$Id: Fl_Hor_Fill_Slider.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Horizontal fill slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Hor_Fill_Slider widget . */
-
-#ifndef Fl_Hor_Fill_Slider_H
-#define Fl_Hor_Fill_Slider_H
-
-#include "Fl_Slider.H"
-
-class FL_EXPORT Fl_Hor_Fill_Slider : public Fl_Slider {
-public:
-    Fl_Hor_Fill_Slider(int x,int y,int w,int h,const char *l=0)
-	: Fl_Slider(x,y,w,h,l) {type(FL_HOR_FILL_SLIDER);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Hor_Fill_Slider.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Hor_Nice_Slider.H b/common/fltk/FL/Fl_Hor_Nice_Slider.H
deleted file mode 100644
index 1305a54..0000000
--- a/common/fltk/FL/Fl_Hor_Nice_Slider.H
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// "$Id: Fl_Hor_Nice_Slider.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Horizontal "nice" slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Hor_Nice_Slider widget . */
-
-#ifndef Fl_Hor_Nice_Slider_H
-#define Fl_Hor_Nice_Slider_H
-
-#include "Fl_Slider.H"
-
-class FL_EXPORT Fl_Hor_Nice_Slider : public Fl_Slider {
-public:
-    Fl_Hor_Nice_Slider(int x,int y,int w,int h,const char *l=0)
-	: Fl_Slider(x,y,w,h,l) {type(FL_HOR_NICE_SLIDER); box(FL_FLAT_BOX);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Hor_Nice_Slider.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Hor_Slider.H b/common/fltk/FL/Fl_Hor_Slider.H
deleted file mode 100644
index 82a88cb..0000000
--- a/common/fltk/FL/Fl_Hor_Slider.H
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// "$Id: Fl_Hor_Slider.H 8726 2011-05-23 18:32:47Z AlbrechtS $"
-//
-// Horizontal slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Hor_Slider widget . */
-
-#ifndef Fl_Hor_Slider_H
-#define Fl_Hor_Slider_H
-
-#include "Fl_Slider.H"
-
-/** Horizontal Slider class.
-
-  \see class Fl_Slider.
-*/
-class FL_EXPORT Fl_Hor_Slider : public Fl_Slider {
-public:
-
-  /**
-    Creates a new Fl_Hor_Slider widget using the given position,
-    size, and label string.
-  */
-
-#if defined(FL_DLL)	// implementation in src/Fl_Slider.cxx
-  Fl_Hor_Slider(int X,int Y,int W,int H,const char *l=0);
-#else
-  Fl_Hor_Slider(int X,int Y,int W,int H,const char *l=0)
-    : Fl_Slider(X,Y,W,H,l) { type(FL_HOR_SLIDER); }
-#endif
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Hor_Slider.H 8726 2011-05-23 18:32:47Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Hor_Value_Slider.H b/common/fltk/FL/Fl_Hor_Value_Slider.H
deleted file mode 100644
index 2999448..0000000
--- a/common/fltk/FL/Fl_Hor_Value_Slider.H
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// "$Id: Fl_Hor_Value_Slider.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Horizontal value slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Hor_Value_Slider widget . */
-
-#ifndef Fl_Hor_Value_Slider_H
-#define Fl_Hor_Value_Slider_H
-
-#include "Fl_Value_Slider.H"
-
-class FL_EXPORT Fl_Hor_Value_Slider : public Fl_Value_Slider {
-public:
-    Fl_Hor_Value_Slider(int X,int Y,int W,int H,const char *l=0)
-	: Fl_Value_Slider(X,Y,W,H,l) {type(FL_HOR_SLIDER);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Hor_Value_Slider.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Image.H b/common/fltk/FL/Fl_Image.H
deleted file mode 100644
index 8be991a..0000000
--- a/common/fltk/FL/Fl_Image.H
+++ /dev/null
@@ -1,217 +0,0 @@
-//
-// "$Id: Fl_Image.H 8338 2011-01-30 09:24:40Z manolo $"
-//
-// Image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Image, Fl_RGB_Image classes . */
-
-#ifndef Fl_Image_H
-#  define Fl_Image_H
-
-#  include "Enumerations.H"
-
-class Fl_Widget;
-class Fl_Pixmap;
-struct Fl_Menu_Item;
-struct Fl_Label;
-
-/**
-  Fl_Image is the base class used for caching and
-  drawing all kinds of images in FLTK. This class keeps track of
-  common image data such as the pixels, colormap, width, height,
-  and depth. Virtual methods are used to provide type-specific
-  image handling.</P>
-  
-  <P>Since the Fl_Image class does not support image
-  drawing by itself, calling the draw() method results in
-  a box with an X in it being drawn instead.
-*/
-class FL_EXPORT Fl_Image {
-  int w_, h_, d_, ld_, count_;
-  const char * const *data_;
-
-  // Forbid use of copy contructor and assign operator
-  Fl_Image & operator=(const Fl_Image &);
-  Fl_Image(const Fl_Image &);
-
-  protected:
-
-  /**
-    Sets the current image width in pixels.
-  */
-  void w(int W) {w_ = W;}
-  /**
-    Sets the current image height in pixels.
-  */
-  void h(int H) {h_ = H;}
-  /**
-    Sets the current image depth.
-  */
-  void d(int D) {d_ = D;}
-  /**
-   Sets the current line data size in bytes.
-   */
-  void ld(int LD) {ld_ = LD;}
-  /** 
-   Sets the current array pointer and count of pointers in the array.
-   */
-  void data(const char * const *p, int c) {data_ = p; count_ = c;}
-  void draw_empty(int X, int Y);
-
-  static void labeltype(const Fl_Label *lo, int lx, int ly, int lw, int lh, Fl_Align la);
-  static void measure(const Fl_Label *lo, int &lw, int &lh);
-
-  public:
-
-  /** 
-   Returns the current image width in pixels.
-  */
-  int w() const {return w_;}
-  /**     Returns the current image height in pixels.
-   */
-  int h() const {return h_;}
-  /**
-    Returns the current image depth. 
-   The return value will be 0 for bitmaps, 1 for
-    pixmaps, and 1 to 4 for color images.</P>
-  */
-  int d() const {return d_;}
-  /**
-    Returns the current line data size in bytes. 
-    Line data is extra data that is included
-    after each line of color image data and is normally not present.
-  */
-  int ld() const {return ld_;}
-  /**
-    The count() method returns the number of data values
-    associated with the image. The value will be 0 for images with
-    no associated data, 1 for bitmap and color images, and greater
-    than 2 for pixmap images.
-  */
-  int count() const {return count_;}
-  /**
-    Returns a pointer to the current image data array. 
-    Use the count() method to find the size of the data array.
-  */
-  const char * const *data() const {return data_;}
-  
-  /**
-    The constructor creates an empty image with the specified
-    width, height, and depth. The width and height are in pixels.
-    The depth is 0 for bitmaps, 1 for pixmap (colormap) images, and
-    1 to 4 for color images.
-  */
-  Fl_Image(int W, int H, int D) {w_ = W; h_ = H; d_ = D; ld_ = 0; count_ = 0; data_ = 0;}
-  virtual ~Fl_Image();
-  virtual Fl_Image *copy(int W, int H);
-  /**
-    The copy() method creates a copy of the specified
-    image. If the width and height are provided, the image is
-    resized to the specified size. The image should be deleted (or in
-    the case of Fl_Shared_Image, released) when you are done
-    with it.
-  */
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void color_average(Fl_Color c, float i);
-  /**
-    The inactive() method calls
-    color_average(FL_BACKGROUND_COLOR, 0.33f) to produce 
-    an image that appears grayed out. <I>This method does not 
-    alter the original image data.</I>
-  */
-  void inactive() { color_average(FL_GRAY, .33f); }
-  virtual void desaturate();
-  virtual void label(Fl_Widget*w);
-  virtual void label(Fl_Menu_Item*m);
-  /**
-    Draws the image with a bounding box. 
-    This form specifies
-    a bounding box for the image, with the origin
-    (upper-lefthand corner) of the image offset by the cx
-    and cy arguments.
-  */
-  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0); // platform dependent
-  /**
-    Draws the image. 
-    This form specifies the upper-lefthand corner of the image.
-  */
-  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);} // platform dependent
-  virtual void uncache();
-};
-
-/**
-  The Fl_RGB_Image class supports caching and drawing
-  of full-color images with 1 to 4 channels of color information.
-  Images with an even number of channels are assumed to contain
-  alpha information, which is used to blend the image with the
-  contents of the screen.</P>
-  
-  <P>Fl_RGB_Image is defined in
-  &lt;FL/Fl_Image.H&gt;, however for compatibility reasons
-  &lt;FL/Fl_RGB_Image.H&gt; should be included.
-*/
-class FL_EXPORT Fl_RGB_Image : public Fl_Image {
-  friend class Fl_Quartz_Graphics_Driver;
-  friend class Fl_GDI_Graphics_Driver;
-  friend class Fl_Xlib_Graphics_Driver;
-public:
-
-  const uchar *array;
-  int alloc_array; // Non-zero if array was allocated
-
-  private:
-
-#if defined(__APPLE__) || defined(WIN32)
-  void *id_; // for internal use
-  void *mask_; // for internal use (mask bitmap)
-#else
-  unsigned id_; // for internal use
-  unsigned mask_; // for internal use (mask bitmap)
-#endif // __APPLE__ || WIN32
-
-  public:
-
-/**  The constructor creates a new image from the specified data. */
-  Fl_RGB_Image(const uchar *bits, int W, int H, int D=3, int LD=0) :
-    Fl_Image(W,H,D), array(bits), alloc_array(0), id_(0), mask_(0) {data((const char **)&array, 1); ld(LD);}
-  Fl_RGB_Image(const Fl_Pixmap *pxm, Fl_Color bg=FL_GRAY);
-  virtual ~Fl_RGB_Image();
-  virtual Fl_Image *copy(int W, int H);
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void color_average(Fl_Color c, float i);
-  virtual void desaturate();
-  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
-  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
-  virtual void label(Fl_Widget*w);
-  virtual void label(Fl_Menu_Item*m);
-  virtual void uncache();
-};
-
-#endif // !Fl_Image_H
-
-//
-// End of "$Id: Fl_Image.H 8338 2011-01-30 09:24:40Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_Input.H b/common/fltk/FL/Fl_Input.H
deleted file mode 100644
index 3f6c49e..0000000
--- a/common/fltk/FL/Fl_Input.H
+++ /dev/null
@@ -1,277 +0,0 @@
-//
-// "$Id: Fl_Input.H 8111 2010-12-23 08:13:18Z manolo $"
-//
-// Input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Input widget . */
-
-#ifndef Fl_Input_H
-#define Fl_Input_H
-
-#include "Fl_Input_.H"
-
-/**
-  This is the FLTK text input widget. It displays a single line
-  of text and lets the user edit it. Normally it is drawn with an
-  inset box and a white background. The text may contain any
-  characters, and will correctly display any UTF text, using
-  ^X notation for unprintable control characters. It assumes the
-  font can draw any characters of the used scripts, which is true
-  for standard fonts under MSWindows and Mac OS X.
-  Characters can be input using the keyboard or the character palette/map.
-  Character composition is done using dead keys and/or a compose
-  key as defined by the operating system.
-  <P>
-  <TABLE WIDTH=90% BORDER=1 SUMMARY="Fl_Input keyboard and mouse bindings.">
-    <CAPTION ALIGN=TOP>Fl_Input keyboard and mouse bindings.</CAPTION>
-    <TR><TD NOWRAP="NOWRAP" WIDTH="1%">
-      <B>Mouse button 1</B> 
-    </TD><TD>
-      Moves the cursor to this point. 
-      Drag selects characters. 
-      Double click selects words. 
-      Triple click selects all line.
-      Shift+click extends the selection.
-      When you select text it is automatically copied to the selection buffer.
-    </TD></TR><TR><TD NOWRAP="NOWRAP">
-      <B>Mouse button 2</B> 
-    </TD><TD>
-      Insert the selection buffer at the point clicked.
-      You can also select a region and replace it with the selection buffer
-      by selecting the region with mouse button 2.
-    </TD></TR><TR><TD NOWRAP="NOWRAP">
-      <B>Mouse button 3</B>
-    </TD><TD>
-      Currently acts like button 1.
-    </TD></TR><TR><TD NOWRAP="NOWRAP">
-      <B>Backspace</B>
-    </TD><TD>
-      Deletes one character to the left, or deletes the selected region.
-    </TD></TR><TR><TD NOWRAP="NOWRAP">
-      <B>Delete</B>
-    </TD><TD>
-      Deletes one character to the right, or deletes the selected region.
-      Combine with Shift for equivalent of ^X (copy+cut).
-    </TD></TR><TR><TD NOWRAP="NOWRAP">
-      <B>Enter</b>
-    </TD><TD>
-      May cause the callback, see when().
-  </TD></TR></TABLE>
-
-  <P>
-
-  <TABLE WIDTH="90%" BORDER="1" SUMMARY="Fl_Input platform specific keyboard bindings.">
-    <CAPTION ALIGN=TOP>Fl_Input platform specific keyboard bindings.</CAPTION>
-  <TR>
-    <TD NOWRAP="NOWRAP" WIDTH="1%"><B> Windows/Linux </B></TD>
-    <TD NOWRAP="NOWRAP" WIDTH="1%"><B> Mac </B></TD>
-    <TD NOWRAP="NOWRAP"           ><B> Function </B></TD>
-
-  </TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^A </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-A </B></TD>
-    <TD>
-      <B>Selects all text in the widget.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^C </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-C </B></TD>
-    <TD>
-      <B>Copy the current selection to the clipboard.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^I </B></TD>
-    <TD NOWRAP="NOWRAP"><B> ^I </B></TD>
-    <TD>
-      <B>Insert a tab.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^J </B></TD>
-    <TD NOWRAP="NOWRAP"><B> ^J </B></TD>
-    <TD>
-      <B>Insert a Line Feed.</B> <BR>
-      (Similar to literal 'Enter' character)
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^L </B></TD>
-    <TD NOWRAP="NOWRAP"><B> ^L </B></TD>
-    <TD>
-      <B>Insert a Form Feed.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^M </B></TD>
-    <TD NOWRAP="NOWRAP"><B> ^M </B></TD>
-    <TD>
-      <B>Insert a Carriage Return.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^V,<BR>Shift-Insert </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-V </B></TD>
-    <TD>
-      <B>Paste the clipboard.</B> <BR>
-      (Macs keyboards don't have "Insert" keys, 
-      but if they did, Shift-Insert would work)
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^X,<BR>Shift-Delete </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-X,<BR>Shift-Delete </B></TD>
-    <TD>
-      <B>Cut.</B> <BR>
-      Copy the selection to the clipboard and delete it.
-      (If there's no selection, Shift-Delete acts like Delete)
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^Z </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-Z </B></TD>
-    <TD>
-      <B>Undo.</B> <BR>
-      This is a single-level undo mechanism, but all adjacent 
-      deletions and insertions are concatenated into a single "undo".
-      Often this will undo a lot more than you expected. 
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Shift-^Z </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Shift-Command-Z </B></TD>
-    <TD>
-      <B>Redo.</B> <BR>
-      Currently same behavior as ^Z. 
-      Reserved for future multilevel undo/redo.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Arrow Keys </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Arrow Keys </B></TD>
-    <TD>
-      <B>Standard cursor movement.</B> <BR>
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Home </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-Up,<BR>Command-Left </B></TD>
-    <TD>
-      <B>Move to start of line.</B> <BR>
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> End </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-Down,<BR>Command-Right </B></TD>
-    <TD>
-      <B>Move to end of line.</B> <BR>
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B>Ctrl-Home</B></TD>
-    <TD NOWRAP="NOWRAP"><B>Command-Up,<BR>Command-PgUp,<BR>Ctrl-Left</B></TD>
-    <TD>
-      <B>Move to top of document/field.</B> <BR>
-      In single line input, moves to start of line.
-      In multiline input, moves to start of top line.
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Ctrl-End </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-End,<BR>Command-PgDn,<BR>Ctrl-Right</B></TD>
-    <TD>
-      <B>Move to bottom of document/field.</B> <BR>
-      In single line input, moves to end of line.
-      In multiline input, moves to end of last line.
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Ctrl-Left </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Alt-Left </B></TD>
-    <TD>
-      <B>Word left.</B> <BR>
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Ctrl-Right </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Alt-Right </B></TD>
-    <TD>
-      <B>Word right.</B> <BR>
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Ctrl-Backspace </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Alt-Backspace </B></TD>
-    <TD>
-      <B>Delete word left.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Ctrl-Delete </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Alt-Delete </B></TD>
-    <TD>
-      <B>Delete word right.</B>
-
-  </TD></TR></TABLE>
-  */
-class FL_EXPORT Fl_Input : public Fl_Input_ {
-  int handle_key();
-  int shift_position(int p);
-  int shift_up_down_position(int p);
-  void handle_mouse(int keepmark=0);
-
-  // Private keyboard functions
-  int kf_lines_up(int repeat_num);
-  int kf_lines_down(int repeat_num);
-  int kf_page_up();
-  int kf_page_down();
-  int kf_insert_toggle();
-  int kf_delete_word_right();
-  int kf_delete_word_left();
-  int kf_delete_sol();
-  int kf_delete_eol();
-  int kf_delete_char_right();
-  int kf_delete_char_left();
-  int kf_move_sol();
-  int kf_move_eol();
-  int kf_clear_eol();
-  int kf_move_char_left();
-  int kf_move_char_right();
-  int kf_move_word_left();
-  int kf_move_word_right();
-  int kf_move_up_and_sol();
-  int kf_move_down_and_eol();
-  int kf_top();
-  int kf_bottom();
-  int kf_select_all();
-  int kf_undo();
-  int kf_redo();
-  int kf_copy();
-  int kf_paste();
-  int kf_copy_cut();
-
-protected:
-  void draw();
-public:
-  int handle(int);
-  Fl_Input(int,int,int,int,const char * = 0);
-};
-
-#endif 
-
-//
-// End of "$Id: Fl_Input.H 8111 2010-12-23 08:13:18Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_Input_.H b/common/fltk/FL/Fl_Input_.H
deleted file mode 100644
index 1638436..0000000
--- a/common/fltk/FL/Fl_Input_.H
+++ /dev/null
@@ -1,497 +0,0 @@
-//
-// "$Id: Fl_Input_.H 8068 2010-12-20 07:48:59Z greg.ercolano $"
-//
-// Input base class header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Input_ widget . */
-
-#ifndef Fl_Input__H
-#define Fl_Input__H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-#define FL_NORMAL_INPUT		0
-#define FL_FLOAT_INPUT		1
-#define FL_INT_INPUT		2
-#define FL_HIDDEN_INPUT		3
-#define FL_MULTILINE_INPUT	4
-#define FL_SECRET_INPUT		5
-#define FL_INPUT_TYPE		7
-#define FL_INPUT_READONLY	8
-#define FL_NORMAL_OUTPUT	(FL_NORMAL_INPUT | FL_INPUT_READONLY)
-#define FL_MULTILINE_OUTPUT	(FL_MULTILINE_INPUT | FL_INPUT_READONLY)
-#define FL_INPUT_WRAP		16
-#define FL_MULTILINE_INPUT_WRAP	(FL_MULTILINE_INPUT | FL_INPUT_WRAP)
-#define FL_MULTILINE_OUTPUT_WRAP (FL_MULTILINE_INPUT | FL_INPUT_READONLY | FL_INPUT_WRAP)
-
-/**
-  This class provides a low-overhead text input field.
-
-  This is a virtual base class below Fl_Input. It has all
-  the same interfaces, but lacks the handle() and
-  draw() method. You may want to subclass it if you are
-  one of those people who likes to change how the editing keys
-  work. It may also be useful for adding scrollbars
-  to the input field.
-
-  This can act like any of the subclasses of Fl_Input, by
-  setting type() to one of the following values:
-
-  \code
-  #define FL_NORMAL_INPUT	   0
-  #define FL_FLOAT_INPUT	   1
-  #define FL_INT_INPUT		   2
-  #define FL_MULTILINE_INPUT	   4
-  #define FL_SECRET_INPUT	   5
-  #define FL_INPUT_TYPE		   7
-  #define FL_INPUT_READONLY	   8
-  #define FL_NORMAL_OUTPUT	   (FL_NORMAL_INPUT | FL_INPUT_READONLY)
-  #define FL_MULTILINE_OUTPUT	   (FL_MULTILINE_INPUT | FL_INPUT_READONLY)
-  #define FL_INPUT_WRAP		   16
-  #define FL_MULTILINE_INPUT_WRAP  (FL_MULTILINE_INPUT | FL_INPUT_WRAP)
-  #define FL_MULTILINE_OUTPUT_WRAP (FL_MULTILINE_INPUT | FL_INPUT_READONLY | FL_INPUT_WRAP)
-  \endcode
-
-  All variables that represent an index into a text buffer are byte-oriented,
-  not character oriented. Since UTF-8 characters can be up to six bytes long,
-  simply incrementing such an index will not reliably advance to the next character
-  in the text buffer.
-
-  Indices and pointers into the text buffer should always point at a 7 bit ASCII
-  character or the beginning of a UTF-8 character sequence. Behavior for false
-  UTF-8 sequences and pointers into the middle of a sequence are undefined.
-
-  \see Fl_Text_Display, Fl_Text_Editor for more powerful text handling widgets
-
-  \internal
-  When porting this widget from ASCII to UTF-8, previously legal pointers into
-  the text of this widget can become illegal by pointing into the middle of
-  a UTF-8 sequence. This is not a big problem for Fl_Input_ because all code
-  in this module is quite tolerant. It could be problematic though when deriving
-  from this class because no feedback for illegal pointers is given. Additionally,
-  a careless "copy" call can put partial UTF-8 sequences into the clipboard.
-
-  None of these issues should be disastrous. Nevertheless, we should
-  discuss how FLTK should handle false UTF-8 sequences and pointers.
-*/
-class FL_EXPORT Fl_Input_ : public Fl_Widget {
-
-  /** \internal Storage for the text field. */
-  const char* value_;
-
-  /** \internal Buffer memory for expanded text. \see expand() */
-  char* buffer;
-
-  /** \internal Size of text in bytes in the \p value_ field. */
-  int size_;
-
-  /** \internal \todo Please document me! */
-  int bufsize;
-  
-  /** \internal Position of the cursor in the document. */
-  int position_;
-
-  /** \internal Position of the other end of the selected text. If \p position_ equals 
-      \p mark_, no text is selected */
-  int mark_;
-
-  /** \internal Behavior of Tab key in multiline input widget. 
-      If enabled (default) Tab causes focus nav, otherwise Tab is inserted 
-      as a character. */
-  int tab_nav_;
-
-  /** \internal Offset to text origin within widget bounds */
-  int xscroll_, yscroll_;
-
-  /** \internal Minimal update pointer. Display requires redraw from here to the end
-      of the buffer. */
-  int mu_p;
-
-  /** \internal Maximum size of buffer. \todo Is this really needed? */
-  int maximum_size_;
-
-  /** \internal Shortcut key that will fetch focus for this widget. */
-  int shortcut_;
-
-  /** \internal This is set if no text but only the cursor needs updating. */
-  uchar erase_cursor_only;
-
-  /** \internal The font used for the entire text. */
-  Fl_Font textfont_;
-
-  /** \internal Height of the font used for the entire text. */
-  Fl_Fontsize textsize_;
-
-  /** \internal color of the entire text */
-  Fl_Color textcolor_;
-
-  /** \internal color of the text cursor */
-  Fl_Color cursor_color_;
-
-  /** \internal Horizontal cursor position in pixels while moving up or down. */
-  static double up_down_pos;
-
-  /** \internal Flag to remember last cursor move. */
-  static int was_up_down;
-
-  /* Convert a given text segment into the text that will be rendered on screen. */
-  const char* expand(const char*, char*) const;
-
-  /* Calculates the width in pixels of part of a text buffer. */
-  double expandpos(const char*, const char*, const char*, int*) const;
-
-  /* Mark a range of characters for update. */
-  void minimal_update(int, int);
-
-  /* Mark a range of characters for update. */
-  void minimal_update(int p);
-
-  /* Copy the value from a possibly static entry into the internal buffer. */
-  void put_in_buffer(int newsize);
-
-  /* Set the current font and font size. */
-  void setfont() const;
-
-protected:
-
-  /* Find the start of a word. */
-  int word_start(int i) const;
-
-  /* Find the end of a word. */
-  int word_end(int i) const;
-
-  /* Find the start of a line. */
-  int line_start(int i) const;
-  
-  /* Find the end of a line. */
-  int line_end(int i) const;
-
-  /* Draw the text in the passed bounding box. */
-  void drawtext(int, int, int, int);
-
-  /* Move the cursor to the column given by up_down_pos. */
-  int up_down_position(int, int keepmark=0);
-
-  /* Handle mouse clicks and mouse moves. */
-  void handle_mouse(int, int, int, int, int keepmark=0);
-
-  /* Handle all kinds of text field related events. */
-  int handletext(int e, int, int, int, int);
-
-  /* Check the when() field and do a callback if indicated. */
-  void maybe_do_callback();
-
-  /** \internal Horizontal offset of text to left edge of widget. */
-  int xscroll() const {return xscroll_;}
-
-  /** \internal Vertical offset of text to top edge of widget. */
-  int yscroll() const {return yscroll_;}
-  void yscroll(int y) { yscroll_ = y; damage(FL_DAMAGE_EXPOSE);}
-
-  /* Return the number of lines displayed on a single page.  */
-  int linesPerPage();
-
-public:
-
-  /* Change the size of the widget. */
-  void resize(int, int, int, int);
-
-  /* Constructor */
-  Fl_Input_(int, int, int, int, const char* = 0);
-
-  /* Destructor */
-  ~Fl_Input_();
-
-  /* Changes the widget text. */
-  int value(const char*);
-
-  /* Changes the widget text. */
-  int value(const char*, int);
-
-  /* Changes the widget text. */
-  int static_value(const char*);
-
-  /* Changes the widget text. */
-  int static_value(const char*, int);
-
-  /**
-      Returns the text displayed in the widget.
-
-      This function returns the current value, which is a pointer
-      to the internal buffer and is valid only until the next event is
-      handled.
-  
-      \return pointer to an internal buffer - do not free() this    
-      \see Fl_Input_::value(const char*)
-  */
-  const char* value() const {return value_;}
-
-  /* Returns the character at index \p i. */
-  Fl_Char index(int i) const;
-
-  /**
-    Returns the number of bytes in value(). 
-  
-    This may be greater than <tt>strlen(value())</tt> if there are 
-    \c nul characters in the text.
-
-    \return number of bytes in the text
-  */
-  int size() const {return size_;}
-
-  /** Sets the width and height of this widget.
-    \param [in] W, H new width and height
-    \see Fl_Widget::size(int, int) */
-  void size(int W, int H) { Fl_Widget::size(W, H); }
-
-  /** Gets the maximum length of the input field.  
-    \todo It is not clear if this function is actually required */
-  int maximum_size() const {return maximum_size_;}
-
-  /** Sets the maximum length of the input field. 
-    \todo It is not clear if this function is actually required */
-  void maximum_size(int m) {maximum_size_ = m;}
-
-  /** Gets the position of the text cursor.
-    \return the cursor position as an index
-    \see position(int, int)
-  */
-  int position() const {return position_;}
-
-  /** Gets the current selection mark. 
-    \return index into the text */
-  int mark() const {return mark_;}
-
-  /* Sets the index for the cursor and mark. */
-  int position(int p, int m);
-
-  /** Set the cursor position and mark.
-    position(n) is the same as <tt>position(n, n)</tt>.
-    \param p new index for cursor and mark
-    \return 0 if no positions changed
-    \see position(int, int), position(), mark(int)
-  */
-  int position(int p) {return position(p, p);}
-
-  /** Sets the current selection mark. 
-    mark(n) is the same as <tt>position(position(),n)</tt>.
-    \param m new index of the mark 
-    \return 0 if the mark did not change
-    \see position(), position(int, int) */
-  int mark(int m) {return position(position(), m);}
-
-  /* Deletes text from b to e and inserts the new string text. */
-  int replace(int, int, const char*, int=0);
-
-  /**
-    Deletes the current selection.
-
-    This function deletes the currently selected text
-    \e without storing it in the clipboard. To use the clipboard,
-    you may call copy() first or copy_cuts() after
-    this call.
-
-    \return 0 if no data was copied
-  */
-  int cut() {return replace(position(), mark(), 0);}
-
-  /**
-    Deletes the next \p n bytes rounded to characters before or after the cursor.
-
-    This function deletes the currently selected text
-    \e without storing it in the clipboard. To use the clipboard,
-    you may call copy() first or copy_cuts() after
-    this call.
-
-    \param n number of bytes rounded to full characters and clamped to the buffer.
-           A negative number will cut characters to the left of the cursor.
-    \return 0 if no data was copied
-  */
-  int cut(int n) {return replace(position(), position()+n, 0);}
-
-  /**
-    Deletes all characters between index \p a and \p b.
-
-    This function deletes the currently selected text
-    \e without storing it in the clipboard. To use the clipboard,
-    you may call copy() first or copy_cuts() after
-    this call.
-
-    \param a, b range of bytes rounded to full characters and clamped to the buffer
-    \return 0 if no data was copied
-  */
-  int cut(int a, int b) {return replace(a, b, 0);}
-
-  /**
-    Inserts text at the cursor position.
-
-    This function inserts the string in \p t at the cursor
-    position() and moves the new position and mark to
-    the end of the inserted text.
-
-    \param [in] t text that will be inserted
-    \param [in] l length of text, or 0 if the string is terminated by \c nul.
-    \return 0 if no text was inserted
-  */
-  int insert(const char* t, int l=0){return replace(position_, mark_, t, l);}
-
-  /* Put the current selection into the clipboard. */
-  int copy(int clipboard);
-
-  /* Undo previous changes to the text buffer. */
-  int undo();
-
-  /* Copy the yank buffer to the clipboard. */
-  int copy_cuts();
-
-  /** Return the shortcut key associated with this widget.
-    \return shortcut keystroke
-    \see Fl_Button::shortcut() */
-  int shortcut() const {return shortcut_;}
-
-  /** 
-    Sets the shortcut key associated with this widget.
-    Pressing the shortcut key gives text editing focus to this widget.
-    \param [in] s new shortcut keystroke 
-    \see Fl_Button::shortcut() 
-  */
-  void shortcut(int s) {shortcut_ = s;}
-
-  /** Gets the font of the text in the input field.
-    \return the current Fl_Font index */
-  Fl_Font textfont() const {return textfont_;}
-
-  /** Sets the font of the text in the input field.
-    The text font defaults to \c FL_HELVETICA.
-    \param [in] s the new text font */
-  void textfont(Fl_Font s) {textfont_ = s;}
-
-  /** Gets the size of the text in the input field.
-    \return the text height in pixels */
-  Fl_Fontsize textsize() const {return textsize_;}
-
-  /** Sets the size of the text in the input field.
-    The text height defaults to \c FL_NORMAL_SIZE.
-    \param [in] s the new font height in pixel units */
-  void textsize(Fl_Fontsize s) {textsize_ = s;}
-
-  /** Gets the color of the text in the input field.
-    \return the text color
-    \see textcolor(Fl_Color) */
-  Fl_Color textcolor() const {return textcolor_;}
-
-  /** Sets the color of the text in the input field.
-    The text color defaults to \c FL_FOREGROUND_COLOR.
-    \param [in] n new text color
-    \see textcolor() */
-  void textcolor(Fl_Color n) {textcolor_ = n;}
-
-  /** Gets the color of the cursor.  
-    \return the current cursor color */
-  Fl_Color cursor_color() const {return cursor_color_;}
-
-  /** Sets the color of the cursor.  
-    The default color for the cursor is \c FL_BLACK.
-    \param [in] n the new cursor color */
-  void cursor_color(Fl_Color n) {cursor_color_ = n;}
-
-  /** Gets the input field type. 
-    \return the current input type */
-  int input_type() const {return type() & FL_INPUT_TYPE; }
-
-  /** Sets the input field type. 
-    A redraw() is required to reformat the input field.
-    \param [in] t new input type */
-  void input_type(int t) { type((uchar)(t | readonly())); }
-
-  /** Gets the read-only state of the input field.  
-    \return non-zero if this widget is read-only */
-  int readonly() const { return type() & FL_INPUT_READONLY; }
-
-  /** Sets the read-only state of the input field.  
-    \param [in] b if \p b is 0, the text in this widget can be edited by the user */
-  void readonly(int b) { if (b) type((uchar)(type() | FL_INPUT_READONLY));
-                         else type((uchar)(type() & ~FL_INPUT_READONLY)); }
-
-  /**
-    Gets  the word wrapping state of the input field. 
-    Word wrap is only functional with multi-line input fields.
-  */
-  int wrap() const { return type() & FL_INPUT_WRAP; }
-
-  /**
-    Sets the word wrapping state of the input field. 
-    Word wrap is only functional with multi-line input fields.
-  */
-  void wrap(int b) { if (b) type((uchar)(type() | FL_INPUT_WRAP));
-                         else type((uchar)(type() & ~FL_INPUT_WRAP)); }
-
-  /**
-    Sets whether the Tab key does focus navigation, 
-    or inserts tab characters into Fl_Multiline_Input.
-
-    By default this flag is enabled to provide the 'normal' behavior 
-    most users expect; Tab navigates focus to the next widget. 
-    To inserting an actual Tab character, users can use Ctrl-I
-    or copy/paste.
-
-    Disabling this flag gives the old FLTK behavior where Tab
-    inserts a tab character into the text field, in which case
-    only the mouse can be used to navigate to the next field.
-
-    History: This flag was provided for backwards support of FLTK's old 1.1.x
-    behavior where Tab inserts a tab character instead of navigating 
-    focus to the next widget. This behavior was unique to Fl_Multiline_Input. 
-    With the advent of Fl_Text_Editor, this old behavior has been deprecated.
-
-    \param [in] val If \p val is 1, Tab advances focus (default).<BR>
-                    If \p val is 0, Tab inserts a tab character (old FLTK behavior).
-  */
-  void tab_nav(int val) {
-    tab_nav_ = val;
-  }
-
-  /**
-    Gets whether the Tab key causes focus navigation in multiline input fields or not.
-
-    If enabled (default), hitting Tab causes focus navigation to the next widget.
-
-    If disabled, hitting Tab inserts a tab character into the text field.
-    \returns 1 if Tab advances focus (default), 0 if Tab inserts tab characters.
-    \see tab_nav(int)
-  */
-  int tab_nav() const {
-    return tab_nav_;
-  }
-};
-
-#endif 
-
-//
-// End of "$Id: Fl_Input_.H 8068 2010-12-20 07:48:59Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Input_Choice.H b/common/fltk/FL/Fl_Input_Choice.H
deleted file mode 100644
index 843e749..0000000
--- a/common/fltk/FL/Fl_Input_Choice.H
+++ /dev/null
@@ -1,222 +0,0 @@
-//
-// "$Id: Fl_Input_Choice.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// An input/chooser widget.
-//            ______________  ____
-//           |              || __ |
-//           | input area   || \/ |
-//           |______________||____|
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Input_Choice widget . */
-
-
-
-#ifndef Fl_Input_Choice_H
-#define Fl_Input_Choice_H
-
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/fl_draw.H>
-#include <string.h>
-
-/**
-  A combination of the input widget and a menu button.
-  The user can either type into the input area, or use the
-  menu button chooser on the right, which loads the input area
-  with predefined text.  Normally it is drawn with an inset box 
-  and a white background. 
-  <P>
-  The application can directly access both the input and menu
-  widgets directly, using the menubutton()
-  and input() accessor methods.
-*/
-class FL_EXPORT Fl_Input_Choice : public Fl_Group {
-  // Private class to handle slightly 'special' behavior of menu button
-  class InputMenuButton : public Fl_Menu_Button {
-    void draw() {
-      draw_box(FL_UP_BOX, color());
-      fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor()));
-      int xc = x()+w()/2, yc=y()+h()/2;
-      fl_polygon(xc-5,yc-3,xc+5,yc-3,xc,yc+3);
-      if (Fl::focus() == this) draw_focus();
-    }
-  public:
-    InputMenuButton(int x,int y,int w,int h,const char*l=0) : 
-	Fl_Menu_Button(x,y,w,h,l) { box(FL_UP_BOX); }
-  };
-
-  Fl_Input *inp_;
-  InputMenuButton *menu_;
-
-  static void menu_cb(Fl_Widget*, void *data) { 
-    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
-    Fl_Widget_Tracker wp(o);
-    const Fl_Menu_Item *item = o->menubutton()->mvalue();
-    if (item && item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER)) return;	// ignore submenus
-    if (!strcmp(o->inp_->value(), o->menu_->text()))
-    {
-      o->Fl_Widget::clear_changed();
-      if (o->when() & FL_WHEN_NOT_CHANGED)
-	o->do_callback();
-    }
-    else
-    {
-      o->inp_->value(o->menu_->text());
-      o->inp_->set_changed();
-      o->Fl_Widget::set_changed();
-      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
-	o->do_callback();
-    }
-    
-    if (wp.deleted()) return;
-
-    if (o->callback() != default_callback)
-    {
-      o->Fl_Widget::clear_changed();
-      o->inp_->clear_changed();
-    }
-  }
-
-  static void inp_cb(Fl_Widget*, void *data) { 
-    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
-    Fl_Widget_Tracker wp(o);
-    if (o->inp_->changed()) {
-      o->Fl_Widget::set_changed();
-      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
-	o->do_callback();
-    } else {
-      o->Fl_Widget::clear_changed();
-      if (o->when() & FL_WHEN_NOT_CHANGED)
-	o->do_callback();
-    }
-    
-    if (wp.deleted()) return;
-
-    if (o->callback() != default_callback)
-      o->Fl_Widget::clear_changed();
-  }
-
-  // Custom resize behavior -- input stretches, menu button doesn't
-  inline int inp_x() { return(x() + Fl::box_dx(box())); }
-  inline int inp_y() { return(y() + Fl::box_dy(box())); }
-  inline int inp_w() { return(w() - Fl::box_dw(box()) - 20); }
-  inline int inp_h() { return(h() - Fl::box_dh(box())); }
-
-  inline int menu_x() { return(x() + w() - 20 - Fl::box_dx(box())); }
-  inline int menu_y() { return(y() + Fl::box_dy(box())); }
-  inline int menu_w() { return(20); }
-  inline int menu_h() { return(h() - Fl::box_dh(box())); }
-
-public:
-  /**
-    Creates a new Fl_Input_Choice widget using the given position, size,
-    and label string.
-  <P> Inherited destructor Destroys the widget and any value associated with it.
-  */
-  Fl_Input_Choice (int x,int y,int w,int h,const char*l=0) : Fl_Group(x,y,w,h,l) {
-    Fl_Group::box(FL_DOWN_BOX);
-    align(FL_ALIGN_LEFT);				// default like Fl_Input
-    inp_ = new Fl_Input(inp_x(), inp_y(),
-			inp_w(), inp_h());
-    inp_->callback(inp_cb, (void*)this);
-    inp_->box(FL_FLAT_BOX);		// cosmetic
-    inp_->when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED);
-    menu_ = new InputMenuButton(menu_x(), menu_y(),
-				menu_w(), menu_h());
-    menu_->callback(menu_cb, (void*)this);
-    menu_->box(FL_FLAT_BOX);				// cosmetic
-    end();
-  }
-  
-  /** Adds an item to the menu.*/
-  void add(const char *s) { menu_->add(s);  }
-  int changed() const { return inp_->changed() | Fl_Widget::changed();}
-  void clear_changed() { 
-    inp_->clear_changed();
-    Fl_Widget::clear_changed();
-  }
-  void set_changed() { 
-    inp_->set_changed();
-    // no need to call Fl_Widget::set_changed()
-  }
-  /** Removes all items from the menu. */
-  void clear() { menu_->clear(); }
-  /** Gets the box type of the menu button */
-  Fl_Boxtype down_box() const { return (menu_->down_box()); }
-  /** Sets the box type of the menu button */
-  void down_box(Fl_Boxtype b) { menu_->down_box(b); }
-  /** Gets the Fl_Menu_Item array used for the menu. */
-  const Fl_Menu_Item *menu() { return (menu_->menu()); }
-  /** Sets the Fl_Menu_Item array used for the menu. */
-  void menu(const Fl_Menu_Item *m) { menu_->menu(m); }
-  void resize(int X, int Y, int W, int H) {
-    Fl_Group::resize(X,Y,W,H);
-    inp_->resize(inp_x(), inp_y(), inp_w(), inp_h());
-    menu_->resize(menu_x(), menu_y(), menu_w(), menu_h());
-  }
-  /** Gets the encapsulated input text color attributes */
-  Fl_Color textcolor() const { return (inp_->textcolor());}
-  /** Sets the encapsulated input text color attributes */
-  void textcolor(Fl_Color c) { inp_->textcolor(c);}
-  /** Gets the encapsulated input text font  attributes */
-  Fl_Font textfont() const { return (inp_->textfont());}
-  /** Sets the encapsulated input text font attributes */
-  void textfont(Fl_Font f) { inp_->textfont(f);}
-  /** Gets the encapsulated input size attributes */
-  Fl_Fontsize textsize() const { return (inp_->textsize()); }
-  /** Sets the encapsulated input size attributes */
-  void textsize(Fl_Fontsize s) { inp_->textsize(s); }
-  /** See void Fl_Input_Choice::value(const char *s)  */
-  const char* value() const { return (inp_->value()); }
-  /**
-    Sets or returns the input widget's current contents. The
-    second form sets the contents using the index into the menu
-    which you can set as an integer.  Setting the value effectively
-    'chooses' this menu item, and sets it as the new input text,
-    deleting the previous text.
-  */
-  void value(const char *val) { inp_->value(val); }
-  /**    See void Fl_Input_Choice::value(const char *s)  */
-  void value(int val) {
-    menu_->value(val);
-    inp_->value(menu_->text(val));
-  }
-  /**    Returns a reference to the internal Fl_Menu_Button widget.  */
-  Fl_Menu_Button *menubutton() { return menu_; }
-  /**
-    Returns a reference to the internal Fl_Input widget.</p>
-  */
-  Fl_Input *input() { return inp_; }
-};
-
-#endif // !Fl_Input_Choice_H
-
-//
-// End of "$Id: Fl_Input_Choice.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Int_Input.H b/common/fltk/FL/Fl_Int_Input.H
deleted file mode 100644
index 9bc9477..0000000
--- a/common/fltk/FL/Fl_Int_Input.H
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// "$Id: Fl_Int_Input.H 8726 2011-05-23 18:32:47Z AlbrechtS $"
-//
-// Integer input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Int_Input widget . */
-
-#ifndef Fl_Int_Input_H
-#define Fl_Int_Input_H
-
-#include "Fl_Input.H"
-
-/**
-  The Fl_Int_Input class is a subclass of Fl_Input that only allows
-  the user to type decimal digits (or hex numbers of the form 0xaef).
-*/
-class FL_EXPORT Fl_Int_Input : public Fl_Input {
-public:
-  /**
-    Creates a new Fl_Int_Input widget using the given position,
-    size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-
-#if defined(FL_DLL)	// implementation in src/Fl_Input.cxx
-  Fl_Int_Input(int X,int Y,int W,int H,const char *l = 0);
-#else
-  Fl_Int_Input(int X,int Y,int W,int H,const char *l = 0)
-      : Fl_Input(X,Y,W,H,l) {type(FL_INT_INPUT);}
-#endif
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Int_Input.H 8726 2011-05-23 18:32:47Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_JPEG_Image.H b/common/fltk/FL/Fl_JPEG_Image.H
deleted file mode 100644
index 06f3a4c..0000000
--- a/common/fltk/FL/Fl_JPEG_Image.H
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// "$Id: Fl_JPEG_Image.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// JPEG image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_JPEG_Image class . */
-
-#ifndef Fl_JPEG_Image_H
-#define Fl_JPEG_Image_H
-#  include "Fl_Image.H"
-
-/**
-  The Fl_JPEG_Image class supports loading, caching,
-  and drawing of Joint Photographic Experts Group (JPEG) File
-  Interchange Format (JFIF) images. The class supports grayscale
-  and color (RGB) JPEG image files.
-*/
-class FL_EXPORT Fl_JPEG_Image : public Fl_RGB_Image {
-
-public:
-
-  Fl_JPEG_Image(const char *filename);
-  Fl_JPEG_Image(const char *name, const unsigned char *data);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_JPEG_Image.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Light_Button.H b/common/fltk/FL/Fl_Light_Button.H
deleted file mode 100644
index a5786c2..0000000
--- a/common/fltk/FL/Fl_Light_Button.H
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// "$Id: Fl_Light_Button.H 8178 2011-01-04 14:09:37Z manolo $"
-//
-// Lighted button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Light_Button widget . */
-
-#ifndef Fl_Light_Button_H
-#define Fl_Light_Button_H
-
-#include "Fl_Button.H"
-
-/**
-  This subclass displays the "on" state by turning on a light, 
-  rather than drawing pushed in.  The shape of the  "light" 
-  is initially set to FL_DOWN_BOX.  The color of the light when
-  on is controlled with selection_color(), which defaults to FL_YELLOW.
-
-  Buttons generate callbacks when they are clicked by the user.  You
-  control exactly when and how by changing the values for type() and when().
-  <P ALIGN=CENTER>\image html Fl_Light_Button.png</P> 
-  \image latex Fl_Light_Button.png "Fl_Light_Button" width=4cm
-*/
-class FL_EXPORT Fl_Light_Button : public Fl_Button {
-protected:
-    virtual void draw();
-public:
-    virtual int handle(int);
-    Fl_Light_Button(int x,int y,int w,int h,const char *l = 0);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Light_Button.H 8178 2011-01-04 14:09:37Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_Line_Dial.H b/common/fltk/FL/Fl_Line_Dial.H
deleted file mode 100644
index ade856c..0000000
--- a/common/fltk/FL/Fl_Line_Dial.H
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// "$Id: Fl_Line_Dial.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Line dial header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Line_Dial widget . */
-
-#ifndef Fl_Line_Dial_H
-#define Fl_Line_Dial_H
-
-#include "Fl_Dial.H"
-
-class FL_EXPORT Fl_Line_Dial : public Fl_Dial {
-public:
-    Fl_Line_Dial(int x,int y,int w,int h, const char *l = 0)
-	: Fl_Dial(x,y,w,h,l) {type(FL_LINE_DIAL);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Line_Dial.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Menu.H b/common/fltk/FL/Fl_Menu.H
deleted file mode 100644
index a35dd4a..0000000
--- a/common/fltk/FL/Fl_Menu.H
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// "$Id: Fl_Menu.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Old menu header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// this include file is for back compatibility only
-#include "Fl_Menu_Item.H"
-
-//
-// End of "$Id: Fl_Menu.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Menu_.H b/common/fltk/FL/Fl_Menu_.H
deleted file mode 100644
index 278ad8c..0000000
--- a/common/fltk/FL/Fl_Menu_.H
+++ /dev/null
@@ -1,168 +0,0 @@
-//
-// "$Id: Fl_Menu_.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Menu base class header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Menu_ widget . */
-
-#ifndef Fl_Menu__H
-#define Fl_Menu__H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-#include "Fl_Menu_Item.H"
-
-/**
-  Base class of all widgets that have a menu in FLTK.
-  Currently FLTK provides you with 
-  Fl_Menu_Button, Fl_Menu_Bar, and Fl_Choice.
-  
-  <P>The class contains a pointer to an array of structures of type  Fl_Menu_Item.  The
-  array may either be supplied directly by the user program, or it may
-  be "private": a dynamically allocated array managed by the Fl_Menu_.
-*/
-class FL_EXPORT Fl_Menu_ : public Fl_Widget {
-
-  Fl_Menu_Item *menu_;
-  const Fl_Menu_Item *value_;
-
-protected:
-
-  uchar alloc;			// flag indicates if menu_ is a dynamic copy (=1) or not (=0)
-  uchar down_box_;
-  Fl_Font textfont_;
-  Fl_Fontsize textsize_;
-  Fl_Color textcolor_;
-
-public:
-  Fl_Menu_(int,int,int,int,const char * =0);
-  ~Fl_Menu_();
-
-  int item_pathname(char *name, int namelen, const Fl_Menu_Item *finditem=0) const;
-  const Fl_Menu_Item* picked(const Fl_Menu_Item*);
-  const Fl_Menu_Item* find_item(const char *name);
-  const Fl_Menu_Item* find_item(Fl_Callback*);
-  int find_index(const char *name) const;
-  int find_index(const Fl_Menu_Item *item) const;
-  int find_index(Fl_Callback *cb) const;
-
-  /**
-    Returns the menu item with the entered shortcut (key value).
-
-    This searches the complete menu() for a shortcut that matches the
-    entered key value.  It must be called for a FL_KEYBOARD or FL_SHORTCUT
-    event.
-
-    If a match is found, the menu's callback will be called.
-
-    \return matched Fl_Menu_Item or NULL.
-  */
-  const Fl_Menu_Item* test_shortcut() {return picked(menu()->test_shortcut());}
-  void global();
-
-  /**
-    Returns a pointer to the array of Fl_Menu_Items.  This will either be
-    the value passed to menu(value) or the private copy.
-  */  
-  const Fl_Menu_Item *menu() const {return menu_;}
-  void menu(const Fl_Menu_Item *m);
-  void copy(const Fl_Menu_Item *m, void* user_data = 0);
-  int insert(int index, const char*, int shortcut, Fl_Callback*, void* = 0, int = 0);
-  int  add(const char*, int shortcut, Fl_Callback*, void* = 0, int = 0);
-  /** See int Fl_Menu_::add(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0) */
-  int  add(const char* a, const char* b, Fl_Callback* c, void* d = 0, int e = 0) {
-      return add(a,fl_old_shortcut(b),c,d,e);
-  }
-  /** See int Fl_Menu_::insert(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0) */
-  int insert(int index, const char* a, const char* b, Fl_Callback* c, void* d = 0, int e = 0) {
-      return insert(index,a,fl_old_shortcut(b),c,d,e);
-  }
-  int  add(const char *);
-  int  size() const ;
-  void size(int W, int H) { Fl_Widget::size(W, H); }
-  void clear();
-  int clear_submenu(int index);
-  void replace(int,const char *);
-  void remove(int);
- /** Changes the shortcut of item i to n.  */
-  void shortcut(int i, int s) {menu_[i].shortcut(s);}
-  /** Sets the flags of item i.  For a list of the flags, see Fl_Menu_Item.  */
-  void mode(int i,int fl) {menu_[i].flags = fl;}
-  /** Gets the flags of item i.  For a list of the flags, see Fl_Menu_Item.  */
-  int  mode(int i) const {return menu_[i].flags;}
-
-  /** Returns a pointer to the last menu item that was picked.  */
-  const Fl_Menu_Item *mvalue() const {return value_;}
-  /** Returns the index into menu() of the last item chosen by the user.  It is zero initially. */
-  int value() const {return value_ ? (int)(value_-menu_) : -1;}
-  int value(const Fl_Menu_Item*);
-  /**
-    The value is the index into menu() of the last item chosen by
-    the user.  It is zero initially.  You can set it as an integer, or set
-    it with a pointer to a menu item.  The set routines return non-zero if
-    the new value is different than the old one.
-  */
-  int value(int i) {return value(menu_+i);}
-  /** Returns the title of the last item chosen.  */
-  const char *text() const {return value_ ? value_->text : 0;}
-  /** Returns the title of item i.  */
-  const char *text(int i) const {return menu_[i].text;}
-
-  /** Gets the current font of menu item labels.  */
-  Fl_Font textfont() const {return textfont_;}
-  /**  Sets the current font of menu item labels.  */
-  void textfont(Fl_Font c) {textfont_=c;}
-  /**  Gets the font size of menu item labels.  */
-  Fl_Fontsize textsize() const {return textsize_;}
-  /**  Sets the font size of menu item labels.  */
-  void textsize(Fl_Fontsize c) {textsize_=c;}
-  /** Get the current color of menu item labels.  */
-  Fl_Color textcolor() const {return textcolor_;}
-  /** Sets the current color of menu item labels. */
-  void textcolor(Fl_Color c) {textcolor_=c;}
-
-  /**
-    This box type is used to surround the currently-selected items in the
-    menus.  If this is FL_NO_BOX then it acts like 
-    FL_THIN_UP_BOX and selection_color() acts like 
-    FL_WHITE, for back compatibility.    
-  */
-  Fl_Boxtype down_box() const {return (Fl_Boxtype)down_box_;}
-  /**    See Fl_Boxtype Fl_Menu_::down_box() const   */
-  void down_box(Fl_Boxtype b) {down_box_ = b;}
-
-  /** For back compatibility, same as selection_color() */
-  Fl_Color down_color() const {return selection_color();}
-  /** For back compatibility, same as selection_color() */
-  void down_color(unsigned c) {selection_color(c);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Menu_.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Menu_Bar.H b/common/fltk/FL/Fl_Menu_Bar.H
deleted file mode 100644
index 5e522f6..0000000
--- a/common/fltk/FL/Fl_Menu_Bar.H
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// "$Id: Fl_Menu_Bar.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Menu bar header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Menu_Bar widget . */
-
-#ifndef Fl_Menu_Bar_H
-#define Fl_Menu_Bar_H
-
-#include "Fl_Menu_.H"
-
-/**
-  This widget provides a standard menubar interface.  Usually you will
-  put this widget along the top edge of your window.  The height of the
-  widget should be 30 for the menu titles to draw correctly with the
-  default font.
-  <P>The items on the bar and the menus they bring up are defined by a
-  single Fl_Menu_Item
-  array.  Because a Fl_Menu_Item array defines a hierarchy, the
-  top level menu defines the items in the menubar, while the submenus
-  define the pull-down menus. Sub-sub menus and lower pop up to the right
-  of the submenus. </P>
-  <P ALIGN=CENTER>\image html  menubar.png</P>
-  \image latex  menubar.png " menubar" width=12cm
-  <P>If there is an item in the top menu that is not a title of a
-  submenu, then it acts like a "button" in the menubar.  Clicking on it
-  will pick it. </P>
-  <P>When the user picks an item off the menu, the item's callback is
-  done with the menubar as the Fl_Widget* argument.  If the item
-  does not have a callback the menubar's callback is done instead. </P>
-  <P>Submenus will also pop up in response to shortcuts indicated by
-  putting a '&' character in the name field of the menu item. If you put a
-  '&' character in a top-level "button" then the shortcut picks it.  The
-  '&' character in submenus is ignored until the menu is popped up. </P>
-  <P>Typing the shortcut() of any of the menu items will cause
-  callbacks exactly the same as when you pick the item with the mouse.
-*/
-class FL_EXPORT Fl_Menu_Bar : public Fl_Menu_ {
-protected:
-    void draw();
-public:
-    int handle(int);
-  /**
-      Creates a new Fl_Menu_Bar widget using the given position,
-    size, and label string. The default boxtype is FL_UP_BOX.
-    <P>The constructor sets menu() to NULL.  See 
-    Fl_Menu_ for the methods to set or change the menu. </P>
-    <P>labelsize(), labelfont(), and labelcolor()
-    are used to control how the menubar items are drawn.  They are
-    initialized from the Fl_Menu static variables, but you can
-    change them if desired. </P>
-    <P>label() is ignored unless you change align() to
-    put it outside the menubar.
-    <P>The destructor removes the Fl_Menu_Bar widget and all of its
-    menu items.
-  */
-    Fl_Menu_Bar(int X, int Y, int W, int H,const char *l=0)
-      : Fl_Menu_(X,Y,W,H,l) {}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Menu_Bar.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Menu_Button.H b/common/fltk/FL/Fl_Menu_Button.H
deleted file mode 100644
index a5ff5d8..0000000
--- a/common/fltk/FL/Fl_Menu_Button.H
+++ /dev/null
@@ -1,86 +0,0 @@
-//
-// "$Id: Fl_Menu_Button.H 8016 2010-12-12 11:19:12Z manolo $"
-//
-// Menu button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Menu_Button widget . */
-
-#ifndef Fl_Menu_Button_H
-#define Fl_Menu_Button_H
-
-#include "Fl_Menu_.H"
-
-/**
-  This is a button that when pushed pops up a menu (or hierarchy of
-  menus) defined by an array of 
-  Fl_Menu_Item objects.
-  <P ALIGN=CENTER>\image html  menu_button.png</P>
-  \image latex  menu_button.png " menu_button" width=5cm
-  <P>Normally any mouse button will pop up a menu and it is lined up
-  below the button as shown in the picture.  However an Fl_Menu_Button
-  may also control a pop-up menu.  This is done by setting the type().
-  If type() is zero a normal menu button is produced. 
-  If it is nonzero then this is a pop-up menu. The bits in type() indicate 
-  what mouse buttons pop up the menu (see Fl_Menu_Button::popup_buttons). </P>
-  <P>The menu will also pop up in response to shortcuts indicated by
-  putting a '&' character in the label(). </P>
-  <P>Typing the shortcut() of any of the menu items will cause
-  callbacks exactly the same as when you pick the item with the mouse.
-  The '&' character in menu item names are only looked at when the menu is
-  popped up, however. </P>
-  <P>When the user picks an item off the menu, the item's callback is
-  done with the menu_button as the Fl_Widget* argument.  If the
-  item does not have a callback the menu_button's callback is done
-  instead.
-*/
-class FL_EXPORT Fl_Menu_Button : public Fl_Menu_ {
-protected:
-  void draw();
-public:
-  /**
-   \brief indicate what mouse buttons pop up the menu.
-   
-   Values for type() used to indicate what mouse buttons pop up the menu. 
-   Fl_Menu_Button::POPUP3 is usually what you want.
-   */  
-  enum popup_buttons {POPUP1 = 1, /**< pops up with the mouse 1st button. */
-    POPUP2,  /**< pops up with the mouse 2nd button. */
-    POPUP12, /**< pops up with the mouse 1st or 2nd buttons. */
-    POPUP3,   /**< pops up with the mouse 3rd button. */
-    POPUP13,  /**< pops up with the mouse 1st or 3rd buttons. */
-    POPUP23,  /**< pops up with the mouse 2nd or 3rd buttons. */
-    POPUP123 /**< pops up with any mouse button. */
-  };
-  int handle(int);
-  const Fl_Menu_Item* popup();
-  Fl_Menu_Button(int,int,int,int,const char * =0);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Menu_Button.H 8016 2010-12-12 11:19:12Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_Menu_Item.H b/common/fltk/FL/Fl_Menu_Item.H
deleted file mode 100644
index 4d58699..0000000
--- a/common/fltk/FL/Fl_Menu_Item.H
+++ /dev/null
@@ -1,443 +0,0 @@
-//
-// "$Id: Fl_Menu_Item.H 7983 2010-12-09 00:04:06Z AlbrechtS $"
-//
-// Menu item header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Menu_Item_H
-#define Fl_Menu_Item_H
-
-#  include "Fl_Widget.H"
-#  include "Fl_Image.H"
-
-#  if defined(__APPLE__) && defined(check)
-#    undef check
-#  endif
-
-enum { // values for flags:
-  FL_MENU_INACTIVE = 1,		///< Deactivate menu item (gray out)
-  FL_MENU_TOGGLE= 2,		///< Item is a checkbox toggle (shows checkbox for on/off state)
-  FL_MENU_VALUE = 4,		///< The on/off state for checkbox/radio buttons (if set, state is 'on')
-  FL_MENU_RADIO = 8,		///< Item is a radio button (one checkbox of many can be on)
-  FL_MENU_INVISIBLE = 0x10,	///< Item will not show up (shortcut will work)
-  FL_SUBMENU_POINTER = 0x20,	///< Indicates user_data() is a pointer to another menu array
-  FL_SUBMENU = 0x40,		///< This item is a submenu to other items
-  FL_MENU_DIVIDER = 0x80,	///< Creates divider line below this item. Also ends a group of radio buttons.
-  FL_MENU_HORIZONTAL = 0x100	///< ??? -- reserved
-};
-
-extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);
-
-class Fl_Menu_;
-
-/**
-  The Fl_Menu_Item structure defines a single menu item that
-  is used by the Fl_Menu_ class.  
-  \code
-  struct Fl_Menu_Item {
-   const char*		text;     // label()
-   ulong		shortcut_;
-   Fl_Callback*		callback_;
-   void*		user_data_;
-   int			flags;
-   uchar		labeltype_;
-   uchar		labelfont_;
-   uchar		labelsize_;
-   uchar		labelcolor_;
-  };
-  
-  enum { // values for flags:
-   FL_MENU_INACTIVE	= 1,      // Deactivate menu item (gray out)
-   FL_MENU_TOGGLE	= 2,      // Item is a checkbox toggle (shows checkbox for on/off state)
-   FL_MENU_VALUE	= 4,      // The on/off state for checkbox/radio buttons (if set, state is 'on')
-   FL_MENU_RADIO	= 8,      // Item is a radio button (one checkbox of many can be on)
-   FL_MENU_INVISIBLE	= 0x10,   // Item will not show up (shortcut will work)
-   FL_SUBMENU_POINTER	= 0x20,   // Indicates user_data() is a pointer to another menu array
-   FL_SUBMENU		= 0x40,   // This item is a submenu to other items
-   FL_MENU_DIVIDER	= 0x80,   // Creates divider line below this item. Also ends a group of radio buttons.
-   FL_MENU_HORIZONTAL	= 0x100   // ??? -- reserved
-  };
-  \endcode
-  Typically menu items are statically defined; for example:
-  \code
-  Fl_Menu_Item popup[] = {
-   {"&alpha",   FL_ALT+'a', the_cb, (void*)1},
-   {"&beta",    FL_ALT+'b', the_cb, (void*)2},
-   {"gamma",    FL_ALT+'c', the_cb, (void*)3, FL_MENU_DIVIDER},
-   {"&strange",  0,   strange_cb},
-   {"&charm",    0,   charm_cb},
-   {"&truth",    0,   truth_cb},
-   {"b&eauty",   0,   beauty_cb},
-   {"sub&menu",  0,   0, 0, FL_SUBMENU},
-   {"one"},
-   {"two"},
-   {"three"},
-   {0},
-   {"inactive", FL_ALT+'i', 0, 0, FL_MENU_INACTIVE|FL_MENU_DIVIDER},
-   {"invisible",FL_ALT+'i', 0, 0, FL_MENU_INVISIBLE},
-   {"check",    FL_ALT+'i', 0, 0, FL_MENU_TOGGLE|FL_MENU_VALUE},
-   {"box",      FL_ALT+'i', 0, 0, FL_MENU_TOGGLE},
-   {0}};
-  \endcode
-  produces:
-
-  \image html   menu.png
-  \image latex  menu.png "menu" width=10cm
-
-  A submenu title is identified by the bit FL_SUBMENU in the 
-  flags field, and ends with a label() that is NULL.
-  You can nest menus to any depth.  A pointer to the first item in the
-  submenu can be treated as an Fl_Menu array itself.  It is also
-  possible to make separate submenu arrays with FL_SUBMENU_POINTER flags.
-
-  You should use the method functions to access structure members and
-  not access them directly to avoid compatibility problems with future
-  releases of FLTK.
-*/
-struct FL_EXPORT Fl_Menu_Item {
-  const char *text;	    ///< menu item text, returned by label()
-  int shortcut_;	    ///< menu item shortcut
-  Fl_Callback *callback_;   ///< menu item callback
-  void *user_data_;	    ///< menu item user_data for the menu's callback
-  int flags;		    ///< menu item flags like FL_MENU_TOGGLE, FL_MENU_RADIO
-  uchar labeltype_;	    ///< how the menu item text looks like
-  Fl_Font labelfont_;	    ///< which font for this menu item text
-  Fl_Fontsize labelsize_;   ///< size of menu item text
-  Fl_Color labelcolor_;	    ///< menu item text color
-
-  // advance N items, skipping submenus:
-  const Fl_Menu_Item *next(int=1) const;
-
-  /**
-    Advances a pointer by n items through a menu array, skipping
-    the contents of submenus and invisible items. There are two calls so
-    that you can advance through const and non-const data.
-  */
-  Fl_Menu_Item *next(int i=1) {
-    return (Fl_Menu_Item*)(((const Fl_Menu_Item*)this)->next(i));}
-
-  /** Returns the first menu item, same as next(0). */
-  const Fl_Menu_Item *first() const { return next(0); }
-
-  /** Returns the first menu item, same as next(0). */
-  Fl_Menu_Item *first() { return next(0); }
-
-  // methods on menu items:
-  /**
-    Returns the title of the item.
-    A NULL here indicates the end of the menu (or of a submenu).
-    A '&' in the item will print an underscore under the next letter,
-    and if the menu is popped up that letter will be a "shortcut" to pick
-    that item.  To get a real '&' put two in a row.
-  */
-  const char* label() const {return text;}
-
-  /**    See const char* Fl_Menu_Item::label() const   */
-  void label(const char* a) {text=a;}
-
-  /**    See const char* Fl_Menu_Item::label() const   */
-  void label(Fl_Labeltype a,const char* b) {labeltype_ = a; text = b;}
-
-  /**
-    Returns the menu item's labeltype.
-    A labeltype identifies a routine that draws the label of the
-    widget.  This can be used for special effects such as emboss, or to use
-    the label() pointer as another form of data such as a bitmap.
-    The value FL_NORMAL_LABEL prints the label as text.
-  */
-  Fl_Labeltype labeltype() const {return (Fl_Labeltype)labeltype_;}
-
-  /**
-    Sets the menu item's labeltype.
-    A labeltype identifies a routine that draws the label of the
-    widget.  This can be used for special effects such as emboss, or to use
-    the label() pointer as another form of data such as a bitmap.
-    The value FL_NORMAL_LABEL prints the label as text.
-  */
-  void labeltype(Fl_Labeltype a) {labeltype_ = a;}
-
-  /**
-    Gets the menu item's label color.
-    This color is passed to the labeltype routine, and is typically the
-    color of the label text.  This defaults to FL_BLACK.  If this
-    color is not black fltk will \b not use overlay bitplanes to draw
-    the menu - this is so that images put in the menu draw correctly.
-  */
-  Fl_Color labelcolor() const {return labelcolor_;}
-
-  /**
-    Sets the menu item's label color.
-    \see Fl_Color Fl_Menu_Item::labelcolor() const
-  */
-  void labelcolor(Fl_Color a) {labelcolor_ = a;}
-  /**
-    Gets the menu item's label font.
-    Fonts are identified by small 8-bit indexes into a table. See the
-    enumeration list for predefined fonts. The default value is a
-    Helvetica font. The function Fl::set_font() can define new fonts.
-  */
-  Fl_Font labelfont() const {return labelfont_;}
-
-  /**
-    Sets the menu item's label font.
-    Fonts are identified by small 8-bit indexes into a table. See the
-    enumeration list for predefined fonts. The default value is a
-    Helvetica font.  The function Fl::set_font() can define new fonts.
-  */
-  void labelfont(Fl_Font a) {labelfont_ = a;}
-
-  /** Gets the label font pixel size/height. */
-  Fl_Fontsize labelsize() const {return labelsize_;}
-
-  /** Sets the label font pixel size/height.*/
-  void labelsize(Fl_Fontsize a) {labelsize_ = a;}
-
-  /**
-    Returns the callback function that is set for the menu item.
-    Each item has space for a callback function and an argument for that
-    function. Due to back compatibility, the Fl_Menu_Item itself
-    is not passed to the callback, instead you have to get it by calling
-    ((Fl_Menu_*)w)->mvalue() where w is the widget argument.
-  */
-  Fl_Callback_p callback() const {return callback_;}
-
-  /**
-    Sets the menu item's callback function and userdata() argument.
-    \see Fl_Callback_p Fl_MenuItem::callback() const
-  */
-  void callback(Fl_Callback* c, void* p) {callback_=c; user_data_=p;}
-
-  /**
-    Sets the menu item's callback function.
-    This method does not set the userdata() argument.
-    \see Fl_Callback_p Fl_MenuItem::callback() const
-   */
-  void callback(Fl_Callback* c) {callback_=c;}
-
-  /**
-    Sets the menu item's callback function.
-    This method does not set the userdata() argument.
-    \see Fl_Callback_p Fl_MenuItem::callback() const
-   */
-  void callback(Fl_Callback0*c) {callback_=(Fl_Callback*)c;}
-
-  /**
-    Sets the menu item's callback function and userdata() argument.
-    This method does not set the userdata() argument.
-    The argument \p is cast to void* and stored as the userdata()
-    for the menu item's callback function.
-    \see Fl_Callback_p Fl_MenuItem::callback() const
-   */
-  void callback(Fl_Callback1*c, long p=0) {callback_=(Fl_Callback*)c; user_data_=(void*)p;}
-
-  /**
-    Gets the user_data() argument that is sent to the callback function.
-  */
-  void* user_data() const {return user_data_;}
-  /**
-    Sets the user_data() argument that is sent to the callback function.
-  */
-  void user_data(void* v) {user_data_ = v;}
-  /**
-    Gets the user_data() argument that is sent to the callback function.
-    For convenience you can also define the callback as taking a long
-    argument.  This method casts the stored userdata() argument to long
-    and returns it as a \e long value.
-  */
-  long argument() const {return (long)(fl_intptr_t)user_data_;}
-  /**
-    Sets the user_data() argument that is sent to the callback function.
-    For convenience you can also define the callback as taking a long
-    argument.  This method casts the given argument \p v to void*
-    and stores it in the menu item's userdata() member.
-    This may not be portable to some machines.
-  */
-  void argument(long v) {user_data_ = (void*)v;}
-
-  /** Gets what key combination shortcut will trigger the menu item. */
-  int shortcut() const {return shortcut_;}
-
-  /**
-    Sets exactly what key combination will trigger the menu item.  The
-    value is a logical 'or' of a key and a set of shift flags, for instance 
-    FL_ALT+'a' or FL_ALT+FL_F+10 or just 'a'.  A value of
-    zero disables the shortcut.
-
-    The key can be any value returned by Fl::event_key(), but will usually 
-    be an ASCII letter. Use a lower-case letter unless you require the shift 
-    key to be held down.
-
-    The shift flags can be any set of values accepted by Fl::event_state().
-    If the bit is on that shift key must be pushed.  Meta, Alt, Ctrl, 
-    and Shift must be off if they are not in the shift flags (zero for the 
-    other bits indicates a "don't care" setting).
-  */
-  void shortcut(int s) {shortcut_ = s;}
-  /**
-    Returns true if either FL_SUBMENU or FL_SUBMENU_POINTER
-    is on in the flags. FL_SUBMENU indicates an embedded submenu
-    that goes from the next item through the next one with a NULL
-    label(). FL_SUBMENU_POINTER indicates that user_data()
-    is a pointer to another menu array.
-  */
-  int submenu() const {return flags&(FL_SUBMENU|FL_SUBMENU_POINTER);}
-  /**
-    Returns true if a checkbox will be drawn next to this item.
-    This is true if FL_MENU_TOGGLE or FL_MENU_RADIO is set in the flags.
-  */
-  int checkbox() const {return flags&FL_MENU_TOGGLE;}
-  /**
-    Returns true if this item is a radio item.
-    When a radio button is selected all "adjacent" radio buttons are
-    turned off.  A set of radio items is delimited by an item that has
-    radio() false, or by an item with FL_MENU_DIVIDER turned on.
-  */
-  int radio() const {return flags&FL_MENU_RADIO;}
-  /** Returns the current value of the check or radio item. */
-  int value() const {return flags&FL_MENU_VALUE;}
-  /**
-    Turns the check or radio item "on" for the menu item. Note that this
-    does not turn off any adjacent radio items like set_only() does.
-  */
-  void set() {flags |= FL_MENU_VALUE;}
-
-  /** Turns the check or radio item "off" for the menu item. */
-  void clear() {flags &= ~FL_MENU_VALUE;}
-
-  void setonly();
-
-  /** Gets the visibility of an item. */
-  int visible() const {return !(flags&FL_MENU_INVISIBLE);}
-
-  /** Makes an item visible in the menu. */
-  void show() {flags &= ~FL_MENU_INVISIBLE;}
-
-  /** Hides an item in the menu. */
-  void hide() {flags |= FL_MENU_INVISIBLE;}
-
-  /** Gets whether or not the item can be picked. */
-  int active() const {return !(flags&FL_MENU_INACTIVE);}
-
-  /** Allows a menu item to be picked. */
-  void activate() {flags &= ~FL_MENU_INACTIVE;}
-  /**
-    Prevents a menu item from being picked. Note that this will also cause
-    the menu item to appear grayed-out.
-  */
-  void deactivate() {flags |= FL_MENU_INACTIVE;}
-  /** Returns non 0 if FL_INACTIVE and FL_INVISIBLE are cleared, 0 otherwise. */
-  int activevisible() const {return !(flags & (FL_MENU_INACTIVE|FL_MENU_INVISIBLE));}
-
-  // compatibility for FLUID so it can set the image of a menu item...
-
-  /** compatibility api for FLUID, same as a->label(this) */
-  void image(Fl_Image* a) {a->label(this);}
-
-  /** compatibility api for FLUID, same as a.label(this) */
-  void image(Fl_Image& a) {a.label(this);}
-
-  // used by menubar:
-  int measure(int* h, const Fl_Menu_*) const;
-  void draw(int x, int y, int w, int h, const Fl_Menu_*, int t=0) const;
-
-  // popup menus without using an Fl_Menu_ widget:
-  const Fl_Menu_Item* popup(
-    int X, int Y,
-    const char *title = 0,
-    const Fl_Menu_Item* picked=0,
-    const Fl_Menu_* = 0) const;
-  const Fl_Menu_Item* pulldown(
-    int X, int Y, int W, int H,
-    const Fl_Menu_Item* picked = 0,
-    const Fl_Menu_* = 0,
-    const Fl_Menu_Item* title = 0,
-    int menubar=0) const;
-  const Fl_Menu_Item* test_shortcut() const;
-  const Fl_Menu_Item* find_shortcut(int *ip=0, const bool require_alt = false) const;
-
-  /**
-    Calls the Fl_Menu_Item item's callback, and provides the Fl_Widget argument.
-    The callback is called with the stored user_data() as its second argument.
-    You must first check that callback() is non-zero before calling this.
-  */
-  void do_callback(Fl_Widget* o) const {callback_(o, user_data_);}
-
-  /**
-    Calls the Fl_Menu_Item item's callback, and provides the Fl_Widget argument.
-    This call overrides the callback's second argument with the given value \p arg.
-    You must first check that callback() is non-zero before calling this.
-  */
-  void do_callback(Fl_Widget* o,void* arg) const {callback_(o, arg);}
-
-  /**
-    Calls the Fl_Menu_Item item's callback, and provides the Fl_Widget argument.
-    This call overrides the callback's second argument with the
-    given value \p arg. long \p arg is cast to void* when calling
-    the callback.
-    You must first check that callback() is non-zero before calling this.
-  */
-  void do_callback(Fl_Widget* o,long arg) const {callback_(o, (void*)arg);}
-
-  // back-compatibility, do not use:
-
-  /** back compatibility only \deprecated. */
-  int checked() const {return flags&FL_MENU_VALUE;}
-
-  /** back compatibility only \deprecated. */
-  void check() {flags |= FL_MENU_VALUE;}
-
-  /** back compatibility only \deprecated. */
-  void uncheck() {flags &= ~FL_MENU_VALUE;}
-
-  int insert(int,const char*,int,Fl_Callback*,void* =0, int =0);
-  int add(const char*, int shortcut, Fl_Callback*, void* =0, int = 0);
-
-  /** See int add(const char*, int shortcut, Fl_Callback*, void*, int) */
-  int add(const char*a, const char* b, Fl_Callback* c,
-	  void* d = 0, int e = 0) {
-    return add(a,fl_old_shortcut(b),c,d,e);}
-
-  int size() const ;
-};
-
-typedef Fl_Menu_Item Fl_Menu; // back compatibility
-
-enum {	// back-compatibility enum:
-  FL_PUP_NONE	= 0,
-  FL_PUP_GREY	= FL_MENU_INACTIVE,
-  FL_PUP_GRAY	= FL_MENU_INACTIVE,
-  FL_MENU_BOX	= FL_MENU_TOGGLE,
-  FL_PUP_BOX	= FL_MENU_TOGGLE,
-  FL_MENU_CHECK	= FL_MENU_VALUE,
-  FL_PUP_CHECK	= FL_MENU_VALUE,
-  FL_PUP_RADIO	= FL_MENU_RADIO,
-  FL_PUP_INVISIBLE = FL_MENU_INVISIBLE,
-  FL_PUP_SUBMENU = FL_SUBMENU_POINTER
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Menu_Item.H 7983 2010-12-09 00:04:06Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Menu_Window.H b/common/fltk/FL/Fl_Menu_Window.H
deleted file mode 100644
index cca5a97..0000000
--- a/common/fltk/FL/Fl_Menu_Window.H
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// "$Id: Fl_Menu_Window.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Menu window header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Menu_Window widget . */
-
-#ifndef Fl_Menu_Window_H
-#define Fl_Menu_Window_H
-
-#include "Fl_Single_Window.H"
-
-/**
-  The Fl_Menu_Window widget is a window type used for menus. By
-  default the window is drawn in the hardware overlay planes if they are
-  available so that the menu don't force the rest of the window to
-  redraw.
-*/
-class FL_EXPORT Fl_Menu_Window : public Fl_Single_Window {
-public:
-  void show();
-  void erase();
-  void flush();
-  void hide();
-  /** Tells if hardware overlay mode is set */
-  unsigned int overlay() {return !(flags()&NO_OVERLAY);}
-  /** Tells FLTK to use hardware overlay planes if they are available.  */
-  void set_overlay() {clear_flag(NO_OVERLAY);}
-  /** Tells FLTK to use normal drawing planes instead of overlay planes.
-      This is usually necessary if your menu contains multi-color pixmaps. */
-  void clear_overlay() {set_flag(NO_OVERLAY);}
-  ~Fl_Menu_Window();
-  /** Creates a new Fl_Menu_Window widget using the given size, and label string. */
-  Fl_Menu_Window(int W, int H, const char *l = 0)
-    : Fl_Single_Window(W,H,l) { image(0); }
-  /** Creates a new Fl_Menu_Window widget using the given position, size, and label string. */
-  Fl_Menu_Window(int X, int Y, int W, int H, const char *l = 0)
-    : Fl_Single_Window(X,Y,W,H,l) { image(0); }
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Menu_Window.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Multi_Browser.H b/common/fltk/FL/Fl_Multi_Browser.H
deleted file mode 100644
index 6a86611..0000000
--- a/common/fltk/FL/Fl_Multi_Browser.H
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// "$Id: Fl_Multi_Browser.H 8736 2011-05-24 20:00:56Z AlbrechtS $"
-//
-// Multi browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Multi_Browser widget . */
-
-#ifndef Fl_Multi_Browser_H
-#define Fl_Multi_Browser_H
-
-#include "Fl_Browser.H"
-
-/**
-  The Fl_Multi_Browser class is a subclass of Fl_Browser
-  which lets the user select any set of the lines.  The user interface
-  is Macintosh style: clicking an item turns off all the others and
-  selects that one, dragging selects all the items the mouse moves over,
-  and shift + click toggles the items. This is different then how forms
-  did it.  Normally the callback is done when the user releases the
-  mouse, but you can change this with when().
-  <P>See Fl_Browser for methods to add and remove lines from the browser.
-*/
-class FL_EXPORT Fl_Multi_Browser : public Fl_Browser {
-public:
-  /**
-      Creates a new Fl_Multi_Browser widget using the given
-    position, size, and label string. The default boxtype is FL_DOWN_BOX.
-    The constructor specializes Fl_Browser() by setting the type to FL_MULTI_BROWSER.
-    The destructor destroys the widget and frees all memory that has been allocated.
-  */
-#if defined(FL_DLL)	// implementation in src/Fl_Browser.cxx
-    Fl_Multi_Browser(int X,int Y,int W,int H,const char *L=0);
-#else
-    Fl_Multi_Browser(int X,int Y,int W,int H,const char *L=0)
-	: Fl_Browser(X,Y,W,H,L) {type(FL_MULTI_BROWSER);}
-#endif
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Multi_Browser.H 8736 2011-05-24 20:00:56Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Multi_Label.H b/common/fltk/FL/Fl_Multi_Label.H
deleted file mode 100644
index 0b160d1..0000000
--- a/common/fltk/FL/Fl_Multi_Label.H
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// "$Id: Fl_Multi_Label.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Multi-label header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Multi_Label_H
-#define Fl_Multi_Label_H
-
-class Fl_Widget;
-struct Fl_Menu_Item;
-
-struct FL_EXPORT Fl_Multi_Label {
-  const char* labela;
-  const char* labelb;
-  uchar typea;
-  uchar typeb;
-  void label(Fl_Widget*);
-  void label(Fl_Menu_Item*);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Multi_Label.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Multiline_Input.H b/common/fltk/FL/Fl_Multiline_Input.H
deleted file mode 100644
index a22bfaa..0000000
--- a/common/fltk/FL/Fl_Multiline_Input.H
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-// "$Id: Fl_Multiline_Input.H 8726 2011-05-23 18:32:47Z AlbrechtS $"
-//
-// Multiline input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Multiline_Input widget . */
-
-
-#ifndef Fl_Multiline_Input_H
-#define Fl_Multiline_Input_H
-
-#include "Fl_Input.H"
-
-/**
-  This input field displays '\n' characters as new lines rather than ^J,
-  and accepts the Return, Tab, and up and down arrow keys.  This is for
-  editing multiline text.
-
-  This is far from the nirvana of text editors, and is probably only
-  good for small bits of text, 10 lines at most. Note that this widget
-  does not support scrollbars or per-character color control.
-
-  If you are presenting large amounts of text and need scrollbars
-  or full color control of characters, you probably want Fl_Text_Editor
-  instead.
-
-  In FLTK 1.3.x, the default behavior of the 'Tab' key was changed
-  to support consistent focus navigation. To get the older FLTK 1.1.x
-  behavior, set Fl_Input_::tab_nav() to 0. Newer programs should consider using
-  Fl_Text_Editor.
-*/
-class FL_EXPORT Fl_Multiline_Input : public Fl_Input {
-public:
-  /**
-    Creates a new Fl_Multiline_Input widget using the given
-    position, size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-#if defined(FL_DLL)	// implementation in src/Fl_Input.cxx
-  Fl_Multiline_Input(int X,int Y,int W,int H,const char *l = 0);
-#else
-  Fl_Multiline_Input(int X,int Y,int W,int H,const char *l = 0)
-    : Fl_Input(X,Y,W,H,l) {type(FL_MULTILINE_INPUT);}
-#endif
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Multiline_Input.H 8726 2011-05-23 18:32:47Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Multiline_Output.H b/common/fltk/FL/Fl_Multiline_Output.H
deleted file mode 100644
index 087d6ed..0000000
--- a/common/fltk/FL/Fl_Multiline_Output.H
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// "$Id: Fl_Multiline_Output.H 8726 2011-05-23 18:32:47Z AlbrechtS $"
-//
-// Multi line output header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Multiline_Output widget . */
-
-#ifndef Fl_Multiline_Output_H
-#define Fl_Multiline_Output_H
-
-#include "Fl_Output.H"
-
-/**
-  This widget is a subclass of Fl_Output that displays multiple
-  lines of text. It also displays tab characters as whitespace to the
-  next column.
-
-  Note that this widget does not support scrollbars, or per-character
-  color control.
-
-  If you are presenting large amounts of read-only text 
-  and need scrollbars, or full color control of characters,
-  then use Fl_Text_Display. If you want to display HTML text,
-  use Fl_Help_View.
-*/
-class FL_EXPORT Fl_Multiline_Output : public Fl_Output {
-public:
-
-  /**
-    Creates a new Fl_Multiline_Output widget using the given position,
-    size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-#if defined(FL_DLL)	// implementation in src/Fl_Input.cxx
-  Fl_Multiline_Output(int X,int Y,int W,int H,const char *l = 0);
-#else
-  Fl_Multiline_Output(int X,int Y,int W,int H,const char *l = 0)
-    : Fl_Output(X,Y,W,H,l) {type(FL_MULTILINE_OUTPUT);}
-#endif
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Multiline_Output.H 8726 2011-05-23 18:32:47Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Native_File_Chooser.H b/common/fltk/FL/Fl_Native_File_Chooser.H
deleted file mode 100644
index ad76c68..0000000
--- a/common/fltk/FL/Fl_Native_File_Chooser.H
+++ /dev/null
@@ -1,305 +0,0 @@
-//
-// "$Id: Fl_Native_File_Chooser.H 8380 2011-02-06 10:07:28Z manolo $"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   Fl_Native_File_Chooser widget. */
-
-/**
-  \class Fl_Native_File_Chooser
-
-  This class lets an FLTK application easily and consistently access 
-  the operating system's native file chooser. Some operating systems 
-  have very complex and specific file choosers that many users want 
-  access to specifically, instead of FLTK's default file chooser(s). 
-
-  In cases where there is no native file browser, FLTK's own file browser
-  is used instead.
-
-  To use this widget correctly, use the following include in your code:
-  \code
-  #include <FL/Fl_Native_File_Chooser.H>
-  \endcode
-  Do not include the other Fl_Native_File_Choser_XXX.H files in your code;
-  those are platform specific files that will be included automatically
-  depending on your build platform.
-
-  The following example shows how to pick a single file:
-  \code
-  // Create and post the local native file chooser
-  #include <FL/Fl_Native_File_Chooser.H>
-  [..]
-  Fl_Native_File_Chooser fnfc;
-  fnfc.title("Pick a file");
-  fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
-  fnfc.filter("Text\t*.txt\n"
-              "C Files\t*.{cxx,h,c}");
-  fnfc.directory("/var/tmp");           // default directory to use
-  // Show native chooser
-  switch ( fnfc.show() ) {
-    case -1: printf("ERROR: %s\n", fnfc.errmsg());    break;  // ERROR
-    case  1: printf("CANCEL\n");                      break;  // CANCEL
-    default: printf("PICKED: %s\n", fnfc.filename()); break;  // FILE CHOSEN
-  }
-  \endcode
-
-  <B>Platform Specific Caveats</B>
-
-  - Under X windows, it's best if you call Fl_File_Icon::load_system_icons()
-    at the start of main(), to enable the nicer looking file browser widgets.
-    Use the static public attributes of class Fl_File_Chooser to localize
-    the browser.
-  - Some operating systems support certain OS specific options; see 
-    Fl_Native_File_Chooser::options() for a list.
-
-  \image html Fl_Native_File_Chooser.png "The Fl_Native_File_Chooser on different platforms."
-  \image latex Fl_Native_File_Chooser.png "The Fl_Native_File_Chooser on different platforms" width=14cm
-
-*/
-#ifndef FL_NATIVE_FILE_CHOOSER_H
-#define FL_NATIVE_FILE_CHOOSER_H
-
-/* \file
- Fl_Native_File_Chooser widget. */
-
-// Use Windows' chooser
-#ifdef WIN32
-// #define _WIN32_WINNT	0x0501	// needed for OPENFILENAME's 'FlagsEx'
-#include <stdio.h>
-#include <stdlib.h>		// malloc
-#include <windows.h>
-#include <commdlg.h>		// OPENFILENAME, GetOpenFileName()
-#include <shlobj.h>		// BROWSEINFO, SHBrowseForFolder()
-#endif
-
-// Use Apple's chooser
-#ifdef __APPLE__
-#include <FL/filename.H>
-#define MAXFILTERS	80
-#endif
-
-// All else falls back to FLTK's own chooser
-#if ! defined(__APPLE__) && !defined(WIN32)
-#include <FL/Fl_File_Chooser.H>
-#include <unistd.h>		// _POSIX_NAME_MAX
-#endif
-
-
-/**
- This class lets an FLTK application easily and consistently access 
- the operating system's native file chooser. Some operating systems 
- have very complex and specific file choosers that many users want 
- access to specifically, instead of FLTK's default file chooser(s). 
- 
- In cases where there is no native file browser, FLTK's own file browser
- is used instead.
- 
- To use this widget, use the following include in your code:
- \code
- #include <FL/Fl_Native_File_Chooser.H>
- \endcode
- 
- The following example shows how to pick a single file:
- \code
- // Create and post the local native file chooser
- #include <FL/Fl_Native_File_Chooser.H>
- [..]
- Fl_Native_File_Chooser fnfc;
- fnfc.title("Pick a file");
- fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
- fnfc.filter("Text\t*.txt\n"
-             "C Files\t*.{cxx,h,c}");
- fnfc.directory("/var/tmp");           // default directory to use
- // Show native chooser
- switch ( fnfc.show() ) {
-   case -1: printf("ERROR: %s\n", fnfc.errmsg());    break;  // ERROR
-   case  1: printf("CANCEL\n");                      break;  // CANCEL
-   default: printf("PICKED: %s\n", fnfc.filename()); break;  // FILE CHOSEN
- }
- \endcode
- 
- <B>Platform Specific Caveats</B>
- 
- - Under X windows, it's best if you call Fl_File_Icon::load_system_icons()
- at the start of main(), to enable the nicer looking file browser widgets.
- Use the static public attributes of class Fl_File_Chooser to localize
- the browser.
- - Some operating systems support certain OS specific options; see 
- Fl_Native_File_Chooser::options() for a list.
- 
- \image html Fl_Native_File_Chooser.png "The Fl_Native_File_Chooser on different platforms."
- \image latex Fl_Native_File_Chooser.png "The Fl_Native_File_Chooser on different platforms" width=14cm
- 
- */
-class FL_EXPORT Fl_Native_File_Chooser {
-public:
-  enum Type {
-    BROWSE_FILE = 0,			///< browse files (lets user choose one file)
-    BROWSE_DIRECTORY,			///< browse directories (lets user choose one directory)
-    BROWSE_MULTI_FILE,			///< browse files (lets user choose multiple files)
-    BROWSE_MULTI_DIRECTORY,		///< browse directories (lets user choose multiple directories)
-    BROWSE_SAVE_FILE,			///< browse to save a file
-    BROWSE_SAVE_DIRECTORY		///< browse to save a directory
-  };
-  enum Option {
-    NO_OPTIONS     = 0x0000,		///< no options enabled
-    SAVEAS_CONFIRM = 0x0001,		///< Show native 'Save As' overwrite confirm dialog (if supported)
-    NEW_FOLDER     = 0x0002,		///< Show 'New Folder' icon (if supported)
-    PREVIEW        = 0x0004		///< enable preview mode
-  };
-  /** Localizable message */
-  static const char *file_exists_message;
-  
-public:
-  Fl_Native_File_Chooser(int val=BROWSE_FILE);
-  ~Fl_Native_File_Chooser();
-  
-  // Public methods
-  void type(int);
-  int type() const;
-  void options(int);
-  int options() const;
-  int count() const;
-  const char *filename() const;
-  const char *filename(int i) const;
-  void directory(const char *val);
-  const char *directory() const;
-  void title(const char *);
-  const char* title() const;
-  const char *filter() const;
-  void filter(const char *);
-  int filters() const;
-  void filter_value(int i);
-  int filter_value() const;
-  void preset_file(const char*);
-  const char* preset_file() const;
-  const char *errmsg() const;
-  int show();
-  
-#ifdef WIN32
-private:
-  int  _btype;			// kind-of browser to show()
-  int  _options;		// general options
-  OPENFILENAMEW _ofn;		// GetOpenFileName() & GetSaveFileName() struct
-  BROWSEINFO   _binf;		// SHBrowseForFolder() struct
-  char  **_pathnames;		// array of pathnames
-  int     _tpathnames;		// total pathnames
-  char   *_directory;		// default pathname to use
-  char   *_title;		// title for window
-  char   *_filter;		// user-side search filter
-  char   *_parsedfilt;		// filter parsed for Windows dialog
-  int     _nfilters;		// number of filters parse_filter counted
-  char   *_preset_file;		// the file to preselect
-  char   *_errmsg;		// error message
-  
-  // Private methods
-  void errmsg(const char *msg);
-  
-  void clear_pathnames();
-  void set_single_pathname(const char *s);
-  void add_pathname(const char *s);
-  
-  void FreePIDL(ITEMIDLIST *pidl);
-  void ClearOFN();
-  void ClearBINF();
-  void Win2Unix(char *s);
-  void Unix2Win(char *s);
-  int showfile();
-  static int CALLBACK Dir_CB(HWND win, UINT msg, LPARAM param, LPARAM data);
-  int showdir();
-  
-  void parse_filter(const char *);
-  void clear_filters();
-  void add_filter(const char *, const char *);
-#endif
-
-#ifdef __APPLE__
-private:
-  int             _btype;		// kind-of browser to show()
-  int             _options;		// general options
-  void 	         *_panel;
-  char          **_pathnames;		// array of pathnames
-  int             _tpathnames;	        // total pathnames
-  char           *_directory;		// default pathname to use
-  char           *_title;		// title for window
-  char           *_preset_file;	        // the 'save as' filename
-  
-  char           *_filter;		// user-side search filter, eg:
-					// C Files\t*.[ch]\nText Files\t*.txt"
-  
-  char           *_filt_names;		// filter names (tab delimited)
-					// eg. "C Files\tText Files"
-  
-  char           *_filt_patt[MAXFILTERS];
-  // array of filter patterns, eg:
-  //     _filt_patt[0]="*.{cxx,h}"
-  //     _filt_patt[1]="*.txt"
-  
-  int             _filt_total;		// parse_filter() # of filters loaded
-  int             _filt_value;		// index of the selected filter
-  char           *_errmsg;		// error message
-  
-  // Private methods
-  void errmsg(const char *msg);
-  void clear_pathnames();
-  void set_single_pathname(const char *s);
-  int get_saveas_basename(void);
-  void clear_filters();
-  void add_filter(const char *, const char *);
-  void parse_filter(const char *from);
-  int post();
-#endif
-
-#if ! defined(__APPLE__) && !defined(WIN32)
-private:
-  int   _btype;			// kind-of browser to show()
-  int   _options;		// general options
-  int   _nfilters;
-  char *_filter;		// user supplied filter
-  char *_parsedfilt;		// parsed filter
-  int   _filtvalue;		// selected filter
-  char *_preset_file;
-  char *_prevvalue;		// Returned filename
-  char *_directory;
-  char *_errmsg;		// error message
-  Fl_File_Chooser *_file_chooser;
-  
-  // Private methods
-  void errmsg(const char *msg);
-  int type_fl_file(int);
-  void parse_filter();
-  void keeplocation();
-  int exist_dialog();
-#endif
-};
-
-
-#endif /*FL_NATIVE_FILE_CHOOSER_H*/
-
-//
-// End of "$Id: Fl_Native_File_Chooser.H 8380 2011-02-06 10:07:28Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_Nice_Slider.H b/common/fltk/FL/Fl_Nice_Slider.H
deleted file mode 100644
index 591a833..0000000
--- a/common/fltk/FL/Fl_Nice_Slider.H
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// "$Id: Fl_Nice_Slider.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// "Nice" slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Nice_Slider widget . */
-
-#ifndef Fl_Nice_Slider_H
-#define Fl_Nice_Slider_H
-
-#include "Fl_Slider.H"
-
-class FL_EXPORT Fl_Nice_Slider : public Fl_Slider {
-public:
-    Fl_Nice_Slider(int x,int y,int w,int h,const char *l=0)
-	: Fl_Slider(x,y,w,h,l) {type(FL_VERT_NICE_SLIDER); box(FL_FLAT_BOX);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Nice_Slider.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Object.H b/common/fltk/FL/Fl_Object.H
deleted file mode 100644
index c743999..0000000
--- a/common/fltk/FL/Fl_Object.H
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-// "$Id: Fl_Object.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Old Fl_Object header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This file is provided for back compatibility only.  Please use Fl_Widget
-#ifndef Fl_Object
-#define Fl_Object Fl_Widget
-#endif
-#include "Fl_Widget.H"
-
-//
-// End of "$Id: Fl_Object.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Output.H b/common/fltk/FL/Fl_Output.H
deleted file mode 100644
index 51cc034..0000000
--- a/common/fltk/FL/Fl_Output.H
+++ /dev/null
@@ -1,77 +0,0 @@
-//
-// "$Id: Fl_Output.H 8726 2011-05-23 18:32:47Z AlbrechtS $"
-//
-// Output header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Output widget . */
-
-#ifndef Fl_Output_H
-#define Fl_Output_H
-
-#include "Fl_Input.H"
-/**
-  This widget displays a piece of text.
-  
-  When you set the value() , Fl_Output does a strcpy() to its own storage,
-  which is useful for program-generated values.  The user may select
-  portions of the text using the mouse and paste the contents into other
-  fields or programs.
-
-  <P align=CENTER>\image html text.png</P>
-  \image latex text.png "Fl_Output" width=8cm
-
-  There is a single subclass, Fl_Multiline_Output, which allows you to
-  display multiple lines of text. Fl_Multiline_Output does not provide
-  scroll bars. If a more complete text editing widget is needed, use
-  Fl_Text_Display instead.
-
-  The text may contain any characters except \\0, and will correctly
-  display anything, using ^X notation for unprintable control characters
-  and \\nnn notation for unprintable characters with the high bit set. It
-  assumes the font can draw any characters in the ISO-Latin1 character set.
-*/
-class FL_EXPORT Fl_Output : public Fl_Input {
-public:
-  /**
-    Creates a new Fl_Output widget using the given position,
-    size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-
-#if defined(FL_DLL)	// implementation in src/Fl_Input.cxx
-    Fl_Output(int X,int Y,int W,int H, const char *l = 0);
-#else
-    Fl_Output(int X,int Y,int W,int H, const char *l = 0)
-    : Fl_Input(X, Y, W, H, l) {type(FL_NORMAL_OUTPUT);}
-#endif
-};
-
-#endif 
-
-//
-// End of "$Id: Fl_Output.H 8726 2011-05-23 18:32:47Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Overlay_Window.H b/common/fltk/FL/Fl_Overlay_Window.H
deleted file mode 100644
index 918b671..0000000
--- a/common/fltk/FL/Fl_Overlay_Window.H
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// "$Id: Fl_Overlay_Window.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Overlay window header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Overlay_Window class . */
-
-#ifndef Fl_Overlay_Window_H
-#define Fl_Overlay_Window_H
-
-#include "Fl_Double_Window.H"
-
-/**
-  This window provides double buffering and also the ability to draw the
-  "overlay" which is another picture placed on top of the main image. The
-  overlay is designed to be a rapidly-changing but simple graphic such as
-  a mouse selection box. Fl_Overlay_Window uses the overlay
-  planes provided by your graphics hardware if they are available.
-  <P>If no hardware support is found the overlay is simulated by drawing
-  directly into the on-screen copy of the double-buffered window, and
-  "erased" by copying the backbuffer over it again.  This means the
-  overlay will blink if you change the image in the window.
-*/
-class FL_EXPORT Fl_Overlay_Window : public Fl_Double_Window {
-  friend class _Fl_Overlay;
-  virtual void draw_overlay() = 0;
-  Fl_Window *overlay_;
-public:
-  void show();
-  void flush();
-  void hide();
-  void resize(int,int,int,int);
-  ~Fl_Overlay_Window();
-  int can_do_overlay();
-  void redraw_overlay();
-  /**
-    Creates a new Fl_Overlay_Window widget using the given
-    position, size, and label (title) string. If the 
-    positions (x,y) are not given, then the window manager
-    will choose them.
-  */
-  Fl_Overlay_Window(int W, int H, const char *l=0)
-    : Fl_Double_Window(W,H,l) {overlay_ = 0; force_doublebuffering_=1; image(0); }
-   /**
-    See Fl_Overlay_Window::Fl_Overlay_Window(int W, int H, const char *l=0)
-  */
- Fl_Overlay_Window(int X, int Y, int W, int H, const char *l=0)
-    : Fl_Double_Window(X,Y,W,H,l) {overlay_ = 0; force_doublebuffering_=1; image(0); }
-  void show(int a, char **b) {Fl_Double_Window::show(a,b);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Overlay_Window.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_PNG_Image.H b/common/fltk/FL/Fl_PNG_Image.H
deleted file mode 100644
index 995b801..0000000
--- a/common/fltk/FL/Fl_PNG_Image.H
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// "$Id: Fl_PNG_Image.H 8287 2011-01-17 20:51:12Z manolo $"
-//
-// PNG image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_PNG_Image class . */
-
-#ifndef Fl_PNG_Image_H
-#define Fl_PNG_Image_H
-#  include "Fl_Image.H"
-
-/**
-  The Fl_PNG_Image class supports loading, caching,
-  and drawing of Portable Network Graphics (PNG) image files. The
-  class loads colormapped and full-color images and handles color-
-  and alpha-based transparency.
-*/
-class FL_EXPORT Fl_PNG_Image : public Fl_RGB_Image {
-
-public:
-
-  Fl_PNG_Image(const char* filename);
-  Fl_PNG_Image (const char *name_png, const unsigned char *buffer, int datasize);
-private:
-  void load_png_(const char *name_png, const unsigned char *buffer_png, int datasize);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_PNG_Image.H 8287 2011-01-17 20:51:12Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_PNM_Image.H b/common/fltk/FL/Fl_PNM_Image.H
deleted file mode 100644
index 739fc07..0000000
--- a/common/fltk/FL/Fl_PNM_Image.H
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// "$Id: Fl_PNM_Image.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// PNM image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_PNM_Image class . */
-
-#ifndef Fl_PNM_Image_H
-#define Fl_PNM_Image_H
-#  include "Fl_Image.H"
-
-/**
-  The Fl_PNM_Image class supports loading, caching,
-  and drawing of Portable Anymap (PNM, PBM, PGM, PPM) image files. The class
-  loads bitmap, grayscale, and full-color images in both ASCII and
-  binary formats.
-*/
-class FL_EXPORT Fl_PNM_Image : public Fl_RGB_Image {
-
-  public:
-
-  Fl_PNM_Image(const char* filename);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_PNM_Image.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Pack.H b/common/fltk/FL/Fl_Pack.H
deleted file mode 100644
index 4ff3ae4..0000000
--- a/common/fltk/FL/Fl_Pack.H
+++ /dev/null
@@ -1,84 +0,0 @@
-//
-// "$Id: Fl_Pack.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Pack header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Pack widget . */
-
-#ifndef Fl_Pack_H
-#define Fl_Pack_H
-
-#include <FL/Fl_Group.H>
-
-/**
-  This widget was designed to add the functionality of compressing and
-  aligning widgets.
-  <P>If type() is Fl_Pack::HORIZONTAL all the children are
-  resized to the height of the Fl_Pack, and are moved next to
-  each other horizontally. If type() is not Fl_Pack::HORIZONTAL
-  then the children are resized to the width and are stacked below each
-  other.  Then the Fl_Pack resizes itself to surround the child
-  widgets.
-  <P>This widget is needed for the Fl_Tabs.
-  In addition you may want to put the Fl_Pack inside an 
-  Fl_Scroll.
-
-  <P>The resizable for Fl_Pack is set to NULL by default.</p>
-  <P>See also: Fl_Group::resizable()
-*/
-class FL_EXPORT Fl_Pack : public Fl_Group {
-  int spacing_;
-
-public:
-  enum { // values for type(int)
-    VERTICAL = 0,
-    HORIZONTAL = 1
-  };
-
-protected:
-  void draw();
-
-public:
-  Fl_Pack(int x,int y,int w ,int h,const char *l = 0);
-  /**
-    Gets the number of extra pixels of blank space that are added
-    between the children.
-  */
-  int spacing() const {return spacing_;}
-  /**
-    Sets the number of extra pixels of blank space that are added
-    between the children.
-  */
-  void spacing(int i) {spacing_ = i;}
-  /** Same as Fl_Group::type() */
-  uchar horizontal() const {return type();}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Pack.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Paged_Device.H b/common/fltk/FL/Fl_Paged_Device.H
deleted file mode 100644
index f65da3a..0000000
--- a/common/fltk/FL/Fl_Paged_Device.H
+++ /dev/null
@@ -1,153 +0,0 @@
-//
-// "$Id: Fl_Paged_Device.H 8699 2011-05-20 16:39:06Z manolo $"
-//
-// Printing support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file Fl_Paged_Device.H 
- \brief declaration of class Fl_Paged_Device.
- */
-
-#ifndef Fl_Paged_Device_H
-#define Fl_Paged_Device_H
-
-#include <FL/Fl_Device.H>
-#include <FL/Fl_Window.H>
-
-/** \brief Number of elements in enum Page_Format */
-#define NO_PAGE_FORMATS 30 /* MSVC6 compilation fix */
-
-/**
- \brief Represents page-structured drawing surfaces.
- *
- This class has no public constructor: don't instantiate it; use Fl_Printer 
- or Fl_PostScript_File_Device instead.
- */
-class FL_EXPORT Fl_Paged_Device : public Fl_Surface_Device {
-public:
-  /**
-   \brief Possible page formats.
-   
-   All paper formats with pre-defined width and height.
-   */
-  enum Page_Format {
-    A0 = 0, /**<  A0 format */
-    A1,
-    A2,
-    A3,
-    A4, /**<  A4 format */
-    A5,
-    A6,
-    A7,
-    A8,
-    A9,
-    B0,
-    B1,
-    B2,
-    B3,
-    B4,
-    B5,
-    B6,
-    B7,
-    B8,
-    B9,
-    B10,
-    C5E,
-    DLE,
-    EXECUTIVE,
-    FOLIO,
-    LEDGER,
-    LEGAL,
-    LETTER, /**<  Letter format */
-    TABLOID,
-    ENVELOPE,
-    MEDIA = 0x1000
-  };
-  /**
-   \brief Possible page layouts.
-   */
-  enum Page_Layout {
-    PORTRAIT = 0,  /**< Portrait orientation */
-    LANDSCAPE = 0x100,   /**< Landscape orientation */
-    REVERSED = 0x200,  /**< Reversed orientation */
-    ORIENTATION = 0x300 /**<  orientation */
-  };
-
-  /** \brief width, height and name of a page format
- */
-  typedef struct {
-    /** \brief width in points */
-    int width; 
-    /** \brief height in points */
-    int height; 
-    /** \brief format name */
-    const char *name; 
-  } page_format;
-  /** \brief width, height and name of all elements of the enum \ref Page_Format.
-   */
-  static const page_format page_formats[NO_PAGE_FORMATS];  
-private:
-  void traverse(Fl_Widget *widget); // finds subwindows of widget and prints them
-protected:
-  /** \brief horizontal offset to the origin of graphics coordinates */
-  int x_offset;
-  /** \brief vertical offset to the origin of graphics coordinates */
-  int y_offset;
-  /** \brief The constructor */
-  Fl_Paged_Device() : Fl_Surface_Device(NULL) {};
-  /** \brief The destructor */
-  virtual ~Fl_Paged_Device() {};
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  virtual int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
-  virtual int start_page(void);
-  virtual int printable_rect(int *w, int *h);
-  virtual void margins(int *left, int *top, int *right, int *bottom);
-  virtual void origin(int x, int y);
-  virtual void origin(int *x, int *y);
-  virtual void scale(float scale_x, float scale_y = 0.);
-  virtual void rotate(float angle);
-  virtual void translate(int x, int y);
-  virtual void untranslate(void);
-  virtual void print_widget(Fl_Widget* widget, int delta_x = 0, int delta_y = 0);
-  /** Prints a window with its title bar and frame if any.
-   
-   \p x_offset and \p y_offset are optional coordinates of where to position the window top left.
-   Equivalent to print_widget() if \p win is a subwindow or has no border.
-   Use Fl_Window::decorated_w() and Fl_Window::decorated_h() to get the size of the
-   printed window.
-   */
-  void print_window(Fl_Window *win, int x_offset = 0, int y_offset = 0);
-  virtual void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0);
-  virtual int end_page (void);
-  virtual void end_job (void);
-};
-
-#endif // Fl_Paged_Device_H
-
-//
-// End of "$Id: Fl_Paged_Device.H 8699 2011-05-20 16:39:06Z manolo $"
-//
-
diff --git a/common/fltk/FL/Fl_Pixmap.H b/common/fltk/FL/Fl_Pixmap.H
deleted file mode 100644
index bc6438b..0000000
--- a/common/fltk/FL/Fl_Pixmap.H
+++ /dev/null
@@ -1,99 +0,0 @@
-//
-// "$Id: Fl_Pixmap.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Pixmap header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Pixmap widget . */
-
-#ifndef Fl_Pixmap_H
-#define Fl_Pixmap_H
-#  include "Fl_Image.H"
-
-class Fl_Widget;
-struct Fl_Menu_Item;
-
-// Older C++ compilers don't support the explicit keyword... :(
-#  if defined(__sgi) && !defined(_COMPILER_VERSION)
-#    define explicit
-#  endif // __sgi && !_COMPILER_VERSION
-
-/**
-  The Fl_Pixmap class supports caching and drawing of colormap
-  (pixmap) images, including transparency.
-*/
-class FL_EXPORT Fl_Pixmap : public Fl_Image {
-  friend class Fl_Quartz_Graphics_Driver;
-  friend class Fl_GDI_Graphics_Driver;
-  friend class Fl_Xlib_Graphics_Driver;
-  void copy_data();
-  void delete_data();
-  void set_data(const char * const *p);
-
-  protected:
-
-  void measure();
-
-  public:
-
-  int alloc_data; // Non-zero if data was allocated
-  
-  private:
-
-#if defined(__APPLE__) || defined(WIN32)
-  void *id_; // for internal use
-  void *mask_; // for internal use (mask bitmap)
-#else
-  unsigned id_; // for internal use
-  unsigned mask_; // for internal use (mask bitmap)
-#endif // __APPLE__ || WIN32
-  
-  public:
-
-  /**    The constructors create a new pixmap from the specified XPM data.  */
-  explicit Fl_Pixmap(char * const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
-  /**    The constructors create a new pixmap from the specified XPM data.  */
-  explicit Fl_Pixmap(uchar* const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
-  /**    The constructors create a new pixmap from the specified XPM data.  */
-  explicit Fl_Pixmap(const char * const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
-  /**    The constructors create a new pixmap from the specified XPM data.  */
-  explicit Fl_Pixmap(const uchar* const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
-  virtual ~Fl_Pixmap();
-  virtual Fl_Image *copy(int W, int H);
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void color_average(Fl_Color c, float i);
-  virtual void desaturate();
-  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
-  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
-  virtual void label(Fl_Widget*w);
-  virtual void label(Fl_Menu_Item*m);
-  virtual void uncache();
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Pixmap.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Plugin.H b/common/fltk/FL/Fl_Plugin.H
deleted file mode 100644
index 62da3a2..0000000
--- a/common/fltk/FL/Fl_Plugin.H
+++ /dev/null
@@ -1,104 +0,0 @@
-//
-// "$Id: Fl_Plugin.H 6995 2010-01-12 08:48:55Z matt $"
-//
-// A Plugin system for FLTK, implemented in Fl_Preferences.cxx.
-//
-// Copyright 2002-2010 by Matthias Melcher.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Plugin class . */
-
-#ifndef Fl_Plugin_H
-#  define Fl_Plugin_H
-
-#  include "Fl_Preferences.H"
-
-
-/**
- \brief Fl_Plugin allows link-time and run-time integration of binary modules.
- 
- Fl_Plugin and Fl_Plugin_Manager provide a small and simple solution for
- linking C++ classes at run-time, or optionally linking modules at compile
- time without the need to change the main application.
-
- Fl_Plugin_Manager uses static initialisation to create the plugin interface
- early during startup. Plugins are stored in a temporary database, organized
- in classes.
- 
- Plugins should derive a new class from Fl_Plugin as a base:
- \code
- class My_Plugin : public Fl_Plugin {
- public:
-   My_Plugin() : Fl_Plugin("effects", "blur") { }
-   void do_something(...);
- };
- My_Plugin blur_plugin();
- \endcode
- 
- Plugins can be put into modules and either linked before distribution, or loaded
- from dynamically linkable files. An Fl_Plugin_Manager is used to list and 
- access all currently loaded plugins.
- \code
- Fl_Plugin_Manager mgr("effects");
- int i, n = mgr.plugins();
- for (i=0; i<n; i++) {
-   My_Plugin *pin = (My_Plugin*)mgr.plugin(i);
-   pin->do_something();
- }
- \endcode
- */
-class FL_EXPORT Fl_Plugin  {
-  Fl_Preferences::ID id;
-public:
-  Fl_Plugin(const char *klass, const char *name);
-  virtual ~Fl_Plugin();
-};
-
-
-/**
- \brief Fl_Plugin_Manager manages link-time and run-time plugin binaries.
- \see Fl_Plugin
- */
-class FL_EXPORT Fl_Plugin_Manager : public Fl_Preferences {
-public:
-  Fl_Plugin_Manager(const char *klass);
-  ~Fl_Plugin_Manager();
-  
-  /** \brief Return the number of plugins in the klass.
-   */
-  int plugins() { return groups(); }
-  Fl_Plugin *plugin(int index);
-  Fl_Plugin *plugin(const char *name);
-  Fl_Preferences::ID addPlugin(const char *name, Fl_Plugin *plugin);
-  
-  static void removePlugin(Fl_Preferences::ID id);
-  static int load(const char *filename);
-  static int loadAll(const char *filepath, const char *pattern=0);
-};
-
-
-#endif // !Fl_Preferences_H
-
-//
-// End of "$Id: Fl_Preferences.H 6995 2010-01-12 08:48:55Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Positioner.H b/common/fltk/FL/Fl_Positioner.H
deleted file mode 100644
index c8b31a6..0000000
--- a/common/fltk/FL/Fl_Positioner.H
+++ /dev/null
@@ -1,103 +0,0 @@
-//
-// "$Id: Fl_Positioner.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Positioner header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Positioner widget . */
-
-#ifndef Fl_Positioner_H
-#define Fl_Positioner_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-/**
-  This class is provided for Forms compatibility.  It provides 2D input.
-  It would be useful if this could be put atop another widget so that the
-  crosshairs are on top, but this is not implemented.  The color of the
-  crosshairs is selection_color().
-  <P ALIGN=CENTER>\image html  positioner.png </P> 
-  \image latex  positioner.png " Fl_Positioner" width=4cm
-*/
-class FL_EXPORT Fl_Positioner : public Fl_Widget {
-
-  double xmin, ymin;
-  double xmax, ymax;
-  double xvalue_, yvalue_;
-  double xstep_, ystep_;
-
-protected:
-
-  // these allow subclasses to put the dial in a smaller area:
-  void draw(int, int, int, int);
-  int handle(int, int, int, int, int);
-  void draw();
-
-public:
-
-  int handle(int);
-  /**
-    Creates a new Fl_Positioner widget using the given position,
-    size, and label string. The default boxtype is FL_NO_BOX.
-  */
-  Fl_Positioner(int x,int y,int w,int h, const char *l=0);
-  /** Gets the X axis coordinate.*/
-  double xvalue() const {return xvalue_;}
-  /** Gets the Y axis coordinate.*/
-  double yvalue() const {return yvalue_;}
-  int xvalue(double);
-  int yvalue(double);
-  int value(double,double);
-  void xbounds(double, double);
-  /** Gets the X axis minimum */
-  double xminimum() const {return xmin;}
-  /** Same as xbounds(a, xmaximum()) */
-  void xminimum(double a) {xbounds(a,xmax);}
-  /** Gets the X axis maximum */
-  double xmaximum() const {return xmax;}
-  /** Same as xbounds(xminimum(), a) */
-  void xmaximum(double a) {xbounds(xmin,a);}
-  void ybounds(double, double);
-  /** Gets the Y axis minimum */
-  double yminimum() const {return ymin;}
-  /** Same as ybounds(a, ymaximum()) */
-  void yminimum(double a) {ybounds(a, ymax);}
-  /** Gets the Y axis maximum */
-  double ymaximum() const {return ymax;}
-  /** Same as ybounds(ymininimum(), a) */
-  void ymaximum(double a) {ybounds(ymin, a);}
-  /** Sets the stepping value for the X axis.*/
-  void xstep(double a) {xstep_ = a;}
-  /** Sets the stepping value for the Y axis.*/
-  void ystep(double a) {ystep_ = a;}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Positioner.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_PostScript.H b/common/fltk/FL/Fl_PostScript.H
deleted file mode 100644
index fe1ee01..0000000
--- a/common/fltk/FL/Fl_PostScript.H
+++ /dev/null
@@ -1,253 +0,0 @@
-//
-// "$Id: Fl_PostScript.H 8699 2011-05-20 16:39:06Z manolo $"
-//
-// Support for graphics output to PostScript file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-/** \file Fl_PostScript.H 
- \brief declaration of classes Fl_PostScript_Graphics_Driver, Fl_PostScript_File_Device.
- */
-
-
-#ifndef Fl_PostScript_H
-#define Fl_PostScript_H
-
-#include <FL/Fl_Paged_Device.H>
-#include <FL/fl_draw.H>
-
-/**
- \brief PostScript graphical backend.
- *
- PostScript text uses vectorial fonts for the latin alphabet (exactly: all unicode
- characters between U+0020 and U+017F, that is, ASCII, Latin-1 Supplement and Latin Extended-A charts)
- plus a few other characters:
- <table>
- <tr> <th>Char</th><th>Codepoint</th><th>Name</th>  <th>Char</th><th>Codepoint</th><th>Name</th> <th>Char</th><th>Codepoint</th><th>Name</th></tr>
- <tr><td>ƒ</td><td>U+0192</td><td>florin</td><td>‚</td><td>U+201A</td><td>quotesinglbase</td><td>™</td><td>U+2122</td><td>trademark</td></tr>
- <tr><td>ˆ</td><td>U+02C6</td><td>circumflex</td><td>“</td><td>U+201C</td><td>quotedblleft</td><td>∂</td><td>U+2202</td><td>partialdiff</td></tr>
- <tr><td>ˇ</td><td>U+02C7</td><td>caron</td><td>”</td><td>U+201D</td><td>quotedblright</td><td>Δ</td><td>U+2206</td><td>Delta</td></tr>
- <tr><td>˘</td><td>U+02D8</td><td>breve</td><td>„</td><td>U+201E</td><td>quotedblbase</td><td>∑</td><td>U+2211</td><td>summation</td></tr>
- <tr><td>˙</td><td>U+02D9</td><td>dotaccent</td><td>†</td><td>U+2020</td><td>dagger</td><td>√</td><td>U+221A</td><td>radical</td></tr>
- <tr><td>˚</td><td>U+02DA</td><td>ring</td><td>‡</td><td>U+2021</td><td>daggerdbl</td><td>∞</td><td>U+221E</td><td>infinity</td></tr>
- <tr><td>˛</td><td>U+02DB</td><td>ogonek</td><td>•</td><td>U+2022</td><td>bullet</td><td>≠</td><td>U+2260</td><td>notequal</td></tr>
- <tr><td>˜</td><td>U+02DC</td><td>tilde</td><td>…</td><td>U+2026</td><td>ellipsis</td><td>≤</td><td>U+2264</td><td>lessequal</td></tr>
- <tr><td>˝</td><td>U+02DD</td><td>hungarumlaut</td><td>‰</td><td>U+2030</td><td>perthousand</td><td>≥</td><td>U+2265</td><td>greaterequal</td></tr>
- <tr><td>–</td><td>U+2013</td><td>endash</td><td>‹</td><td>U+2039</td><td>guilsinglleft</td><td>◊</td><td>U+25CA</td><td>lozenge</td></tr>
- <tr><td>—</td><td>U+2014</td><td>emdash</td><td>›</td><td>U+203A</td><td>guilsinglright</td><td>fi</td><td>U+FB01</td><td>fi</td></tr>
- <tr><td>‘</td><td>U+2018</td><td>quoteleft</td><td>/</td><td>U+2044</td><td>fraction</td><td>fl</td><td>U+FB02</td><td>fl</td></tr>
- <tr><td>’</td><td>U+2019</td><td>quoteright</td><td>€</td><td>U+20AC</td><td>Euro</td><td></td><td>U+F8FF</td><td>apple (Mac OS only)</td></tr>
- </table>
- <br> All other unicode characters are output as a bitmap.
- <br> FLTK standard fonts are output using PostScript standard fonts: Helvetica, Courier, 
- Times (and their bold, oblique, italic variants).
- */
-class FL_EXPORT Fl_PostScript_Graphics_Driver : public Fl_Graphics_Driver {
-public: 
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_PostScript_Graphics_Driver();
-#ifndef FL_DOXYGEN
-  enum SHAPE{NONE=0, LINE, LOOP, POLYGON, POINTS};
-  
-class Clip {
-  public:
-    int x, y, w, h;
-    Clip *prev;
-  };
-  Clip * clip_;
-  
-  int lang_level_;
-  int gap_;
-  int pages_;
-  
-  double width_;
-  double height_;
-  
-  int shape_;
-  int linewidth_;// need for clipping, lang level 1-2
-  int linestyle_;//
-  int interpolate_; //interpolation of images
-  unsigned char cr_,cg_,cb_;
-  char  linedash_[256];//should be enough
-  void concat();  // transform ror scalable dradings...
-  void reconcat(); //invert
-  void recover(); //recovers the state after grestore (such as line styles...)
-  void reset();
-  
-  uchar * mask;
-  int mx; // width of mask;
-  int my; // mask lines
-  //Fl_Color bg_;
-  int (*close_cmd_)(FILE *);
-  int page_policy_;
-  int nPages;
-  int orientation_;
-  
-  float scale_x;
-  float scale_y;
-  float angle;
-  int left_margin;
-  int top_margin;
- 
-  FILE *output;
-  double pw_, ph_;
-  
-  uchar bg_r, bg_g, bg_b;
-  int start_postscript (int pagecount, enum Fl_Paged_Device::Page_Format format, enum Fl_Paged_Device::Page_Layout layout);
-  /*  int alpha_mask(const uchar * data, int w, int h, int D, int LD=0);
-   */
-  void transformed_draw(const char* s, int n, double x, double y); //precise text placing
-  void transformed_draw(const char* s, double x, double y);
-  int alpha_mask(const uchar * data, int w, int h, int D, int LD=0);
-  
-  enum Fl_Paged_Device::Page_Format page_format_;
-  char *ps_filename_;
- 
-  void page_policy(int p);
-  int page_policy(){return page_policy_;};
-  void close_command( int (*cmd)(FILE *)){close_cmd_=cmd;};
-  FILE * file() {return output;};
-  //void orientation (int o);
-  //Fl_PostScript_Graphics_Driver(FILE *o, int lang_level, int pages = 0); // ps (also multi-page) constructor
-  //Fl_PostScript_Graphics_Driver(FILE *o, int lang_level, int x, int y, int w, int h); //eps constructor
-  void interpolate(int i){interpolate_=i;};
-  int interpolate(){return interpolate_;}
-  
-  void page(double pw, double ph, int media = 0);
-  void page(int format);
-#endif // FL_DOXYGEN
-  
-  // implementation of drawing methods
-  void color(Fl_Color c);
-  void color(uchar r, uchar g, uchar b);
-  
-  void push_clip(int x, int y, int w, int h);
-  int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
-  int not_clipped(int x, int y, int w, int h);
-  void push_no_clip();
-  void pop_clip();
-  
-  void line_style(int style, int width=0, char* dashes=0);
-  
-  void rect(int x, int y, int w, int h);
-  void rectf(int x, int y, int w, int h);
-  
-  void xyline(int x, int y, int x1);
-  void xyline(int x, int y, int x1, int y2);
-  void xyline(int x, int y, int x1, int y2, int x3);
-  
-  void yxline(int x, int y, int y1);
-  void yxline(int x, int y, int y1, int x2);
-  void yxline(int x, int y, int y1, int x2, int y3);
-  
-  void line(int x1, int y1, int x2, int y2);
-  void line(int x1, int y1, int x2, int y2, int x3, int y3);  
-  
-  void loop(int x0, int y0, int x1, int y1, int x2, int y2);
-  void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
-  void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  void point(int x, int y);
-  
-  void begin_points();
-  void begin_line();
-  void begin_loop();
-  void begin_polygon();
-  void vertex(double x, double y);
-  void curve(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3);
-  void circle(double x, double y, double r);
-  void arc(double x, double y, double r, double start, double a);
-  void arc(int x, int y, int w, int h, double a1, double a2);
-  void pie(int x, int y, int w, int h, double a1, double a2);
-  void end_points();
-  void end_line();
-  void end_loop();
-  void end_polygon();
-  void begin_complex_polygon(){begin_polygon();};
-  void gap(){gap_=1;};
-  void end_complex_polygon(){end_polygon();};
-  void transformed_vertex(double x, double y);
-    
-  void draw_image(const uchar* d, int x,int y,int w,int h, int delta=3, int ldelta=0);
-  void draw_image_mono(const uchar* d, int x,int y,int w,int h, int delta=1, int ld=0);
-  void draw_image(Fl_Draw_Image_Cb call, void* data, int x,int y, int w, int h, int delta=3);
-  void draw_image_mono(Fl_Draw_Image_Cb call, void* data, int x,int y, int w, int h, int delta=1);
-      
-  void draw(const char* s, int n, int x, int y) {transformed_draw(s,n,x,y); };
-#ifdef __APPLE__
-  void draw(const char* s, int n, float x, float y) {transformed_draw(s,n,x,y); };
-#endif
-  void draw(int angle, const char *str, int n, int x, int y);
-  void rtl_draw(const char* s, int n, int x, int y);
-  void font(int face, int size);
-  double width(const char *, int);
-  void text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h);
-  int height();
-  int descent();
-  void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_Bitmap * bitmap,int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy);
-  ~Fl_PostScript_Graphics_Driver();
-};
-
-/**
- \brief To send graphical output to a PostScript file.
- */
-class FL_EXPORT Fl_PostScript_File_Device : public Fl_Paged_Device {
-#ifdef __APPLE__
-  Fl_CGContextRef gc;
-#endif
-protected:
-  Fl_PostScript_Graphics_Driver *driver();
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_PostScript_File_Device();
-  ~Fl_PostScript_File_Device();
-  int start_job(int pagecount, enum Fl_Paged_Device::Page_Format format = Fl_Paged_Device::A4, 
-		enum Fl_Paged_Device::Page_Layout layout = Fl_Paged_Device::PORTRAIT);
-  int start_job(FILE *ps_output, int pagecount, enum Fl_Paged_Device::Page_Format format = Fl_Paged_Device::A4, 
-		enum Fl_Paged_Device::Page_Layout layout = Fl_Paged_Device::PORTRAIT);
-  int start_page (void);
-  int printable_rect(int *w, int *h);
-  void margins(int *left, int *top, int *right, int *bottom);
-  void origin(int *x, int *y);
-  void origin(int x, int y);
-  void scale (float scale_x, float scale_y = 0.);
-  void rotate(float angle);
-  void translate(int x, int y);
-  void untranslate(void);
-  int end_page (void);    
-  void end_job(void);
-#ifdef __APPLE__
-  void set_current() { fl_gc = gc; Fl_Paged_Device::set_current(); }
-#endif
-  
-  static const char *file_chooser_title; 
-};
-
-#endif // Fl_PostScript_H
-
-//
-// End of "$Id: Fl_PostScript.H 8699 2011-05-20 16:39:06Z manolo $"
-//
diff --git a/common/fltk/FL/Fl_Preferences.H b/common/fltk/FL/Fl_Preferences.H
deleted file mode 100644
index 8fa3f04..0000000
--- a/common/fltk/FL/Fl_Preferences.H
+++ /dev/null
@@ -1,276 +0,0 @@
-//
-// "$Id: Fl_Preferences.H 7949 2010-12-05 00:38:16Z greg.ercolano $"
-//
-// Preferences .
-//
-// Copyright 2002-2010 by Matthias Melcher.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Preferences class . */
-
-#ifndef Fl_Preferences_H
-#  define Fl_Preferences_H
-
-#  include <stdio.h>
-#  include "Fl_Export.H" 
-
-/**
-   \brief Fl_Preferences provides methods to store user
-   settings between application starts. 
-
-   It is similar to the
-   Registry on WIN32 and Preferences on MacOS, and provides a
-   simple configuration mechanism for UNIX.
-   
-   Fl_Preferences uses a hierarchy to store data. It
-   bundles similar data into groups and manages entries into those
-   groups as name/value pairs.
-   
-   Preferences are stored in text files that can be edited
-   manually. The file format is easy to read and relatively
-   forgiving. Preferences files are the same on all platforms. User
-   comments in preference files are preserved. Filenames are unique
-   for each application by using a vendor/application naming
-   scheme. The user must provide default values for all entries to
-   ensure proper operation should preferences be corrupted or not
-   yet exist.
-   
-   Entries can be of any length. However, the size of each
-   preferences file should be kept small for performance
-   reasons. One application can have multiple preferences files.
-   Extensive binary data however should be stored in separate
-   files: see getUserdataPath().
- 
-   \note Starting with FLTK 1.3, preference databases are expected to 
-   be in utf8 encoding. Previous databases were stored in the 
-   current chracter set or code page which renders them incompatible
-   for text entries using international characters.
- */
-class FL_EXPORT Fl_Preferences {
-
-public: 
-  /**
-     Define the scope of the preferences.
-   */
-  enum Root { 
-    SYSTEM=0,   ///< Preferences are used system-wide
-    USER        ///< Preferences apply only to the current user
-  };
-  
-  /**
-   Every Fl_Preferences-Group has a uniqe ID.
-   
-   ID's can be retrieved from an Fl_Preferences-Group and can then be used
-   to create more Fl_Preference references to the same data set, as long as the 
-   database remains open.
-   */
-  typedef void *ID;
-  
-  static const char *newUUID();
-
-  Fl_Preferences( Root root, const char *vendor, const char *application );
-  Fl_Preferences( const char *path, const char *vendor, const char *application );
-  Fl_Preferences( Fl_Preferences &parent, const char *group );
-  Fl_Preferences( Fl_Preferences *parent, const char *group );
-  Fl_Preferences( Fl_Preferences &parent, int groupIndex );
-  Fl_Preferences( Fl_Preferences *parent, int groupIndex );
-  Fl_Preferences(const Fl_Preferences&);
-  Fl_Preferences( ID id );
-  virtual ~Fl_Preferences();
-  
-  /** Return an ID that can later be reused to open more references to this dataset.
-   */
-  ID id() { return (ID)node; }
-  
-  /** Remove the group with this ID from a database.
-   */
-  static char remove(ID id_) { return ((Node*)id_)->remove(); }
-
-  /** Return the name of this entry.
-   */
-  const char *name() { return node->name(); }
-  
-  /** Return the the full path to this entry.
-   */
-  const char *path() { return node->path(); }
-  
-  int groups();
-  const char *group( int num_group );
-  char groupExists( const char *key );
-  char deleteGroup( const char *group );
-  char deleteAllGroups();
-
-  int entries();
-  const char *entry( int index );
-  char entryExists( const char *key );
-  char deleteEntry( const char *entry );
-  char deleteAllEntries();
-  
-  char clear();
-
-  char set( const char *entry, int value );
-  char set( const char *entry, float value );
-  char set( const char *entry, float value, int precision );
-  char set( const char *entry, double value );
-  char set( const char *entry, double value, int precision );
-  char set( const char *entry, const char *value );
-  char set( const char *entry, const void *value, int size ); 
-  
-  char get( const char *entry, int &value, int defaultValue );
-  char get( const char *entry, float &value,  float defaultValue );
-  char get( const char *entry, double &value, double defaultValue );
-  char get( const char *entry, char *&value,  const char *defaultValue );
-  char get( const char *entry, char *value,   const char *defaultValue, int maxSize );
-  char get( const char *entry, void *&value,  const void *defaultValue, int defaultSize );
-  char get( const char *entry, void *value,   const void *defaultValue, int defaultSize, int maxSize );
-
-  int size( const char *entry );
-
-  char getUserdataPath( char *path, int pathlen );
-
-  void flush();
-
-  // char export( const char *filename, Type fileFormat );
-  // char import( const char *filename );
-  
-  /**
-     'Name' provides a simple method to create numerical or more complex 
-     procedural names for entries and groups on the fly.
-     
-     Example: prefs.set(Fl_Preferences::Name("File%d",i),file[i]);. 
-    
-     See test/preferences.cxx as a sample for writing arrays into preferences.<p>
-     'Name' is actually implemented as a class inside Fl_Preferences. It casts
-     into const char* and gets automatically destroyed after the enclosing call
-     ends.
-   */
-  class FL_EXPORT Name {
-
-    char *data_;
-
-  public: 
-    Name( unsigned int n );
-    Name( const char *format, ... );
-
-    /**
-       Return the Name as a "C" string.
-       \internal
-     */
-    operator const char *() { return data_; }
-    ~Name();
-  };
-
-  /** \internal An entry associates a preference name to its corresponding value */
-  struct Entry {
-    char *name, *value;
-  };
-
-private: 
-  Fl_Preferences() : node(0), rootNode(0) { }
-  Fl_Preferences &operator=(const Fl_Preferences&);
-
-  static char nameBuffer[128];
-  static char uuidBuffer[40];
-  static Fl_Preferences *runtimePrefs;
-
-  class RootNode;
-  
-  class FL_EXPORT Node {	// a node contains a list to all its entries 
-            			// and all means to manage the tree structure
-    Node *child_, *next_;
-    union { 			// these two are mutually exclusive
-      Node *parent_;   		// top_ bit clear
-      RootNode *root_; 		// top_ bit set
-    };
-    char *path_;
-    Entry *entry_;
-    int nEntry_, NEntry_;
-    unsigned char dirty_:1;
-    unsigned char top_:1;
-    unsigned char indexed_:1;
-    // indexing routines
-    Node **index_;
-    int nIndex_, NIndex_;
-    void createIndex();
-    void updateIndex();
-    void deleteIndex();
-  public:
-    static int lastEntrySet;
-  public:
-    Node( const char *path );
-    ~Node();
-    // node methods
-    int write( FILE *f );
-    const char *name();
-    const char *path() { return path_; }
-    Node *find( const char *path );
-    Node *search( const char *path, int offset=0 );
-    Node *childNode( int ix );
-    Node *addChild( const char *path );
-    void setParent( Node *parent );
-    Node *parent() { return top_?0L:parent_; }
-    void setRoot(RootNode *r) { root_ = r; top_ = 1; }
-    RootNode *findRoot();
-    char remove();
-    char dirty();
-    void deleteAllChildren();
-    // entry methods
-    int nChildren();
-    const char *child( int ix );
-    void set( const char *name, const char *value );
-    void set( const char *line );
-    void add( const char *line );
-    const char *get( const char *name );
-    int getEntry( const char *name );
-    char deleteEntry( const char *name );
-    void deleteAllEntries();
-    int nEntry() { return nEntry_; }
-    Entry &entry(int i) { return entry_[i]; }
-  };
-  friend class Node;
-
-  class FL_EXPORT RootNode {		// the root node manages file paths and basic reading and writing
-    Fl_Preferences *prefs_;
-    char *filename_;
-    char *vendor_, *application_;
-  public:
-    RootNode( Fl_Preferences *, Root root, const char *vendor, const char *application );
-    RootNode( Fl_Preferences *, const char *path, const char *vendor, const char *application );
-    RootNode( Fl_Preferences * );
-    ~RootNode();
-    int read();
-    int write();
-    char getPath( char *path, int pathlen );
-  };
-  friend class RootNode;
-
-protected:
-  Node *node;
-  RootNode *rootNode;
-};
-
-#endif // !Fl_Preferences_H
-
-//
-// End of "$Id: Fl_Preferences.H 7949 2010-12-05 00:38:16Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Printer.H b/common/fltk/FL/Fl_Printer.H
deleted file mode 100644
index 6e8d0ef..0000000
--- a/common/fltk/FL/Fl_Printer.H
+++ /dev/null
@@ -1,214 +0,0 @@
-//
-// "$Id: Fl_Printer.H 8699 2011-05-20 16:39:06Z manolo $"
-//
-// Printing support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-/** \file Fl_Printer.H 
- \brief declaration of classes Fl_Printer, Fl_System_Printer and Fl_PostScript_Printer.
- */
-
-#ifndef Fl_Printer_H
-#define Fl_Printer_H
-
-#include <FL/x.H>
-#include <FL/Fl_Paged_Device.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_RGB_Image.H>
-#include <FL/Fl_Bitmap.H>
-#include <stdio.h>
-#if !(defined(__APPLE__) || defined(WIN32))
-#include <FL/Fl_PostScript.H>
-#elif defined(WIN32)
-#include <commdlg.h>
-#endif
-
-#if defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN)
-/**
- Print support under MSWindows and Mac OS.
-
- Class Fl_System_Printer is implemented only on the MSWindows and Mac OS platforms.
- It has no public constructor.
- Use Fl_Printer instead that is cross-platform and has the same API.
- */
-class Fl_System_Printer : public Fl_Paged_Device {
-  friend class Fl_Printer;
-private:
-  /** \brief the printer's graphics context, if there's one, NULL otherwise */
-  void *gc; 
-  void set_current(void);
-#ifdef __APPLE__
-  float scale_x;
-  float scale_y;
-  float angle; // rotation angle in radians
-  Fl_PMPrintSession  printSession;
-  Fl_PMPageFormat    pageFormat;
-  Fl_PMPrintSettings printSettings;
-#elif defined(WIN32)
-  int   abortPrint;
-  PRINTDLG      pd;
-  HDC           hPr;
-  int           prerr;
-  int left_margin;
-  int top_margin;
-  void absolute_printable_rect(int *x, int *y, int *w, int *h);
-#endif
-protected:
-  /** \brief The constructor */
-  Fl_System_Printer(void);
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
-  int start_page (void);
-  int printable_rect(int *w, int *h);
-  void margins(int *left, int *top, int *right, int *bottom);
-  void origin(int *x, int *y);
-  void origin(int x, int y);
-  void scale (float scale_x, float scale_y = 0.);
-  void rotate(float angle);
-  void translate(int x, int y);
-  void untranslate(void);
-  int end_page (void);
-  void end_job (void);
-  /** \brief The destructor */
-  ~Fl_System_Printer(void);
-}; // class Fl_System_Printer
-
-#endif
-  
-#if !(defined(__APPLE__) || defined(WIN32) )
-/**
- Print support under Unix/Linux.
- 
- Class Fl_PostScript_Printer is implemented only on the Unix/Linux platform.
- It has no public constructor.
- Use Fl_Printer instead that is cross-platform and has the same API.
- */
-class Fl_PostScript_Printer : public Fl_PostScript_File_Device {
-  friend class Fl_Printer;
-protected:
-  /** The constructor */
-  Fl_PostScript_Printer(void) {};
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  int start_job(int pages, int *firstpage = NULL, int *lastpage = NULL);
-};
-
-#endif
-
-/**
- * \brief OS-independent print support.
- *
- Fl_Printer allows to use all FLTK drawing, color, text, and clip functions, and to have them operate
- on printed page(s). There are two main, non exclusive, ways to use it.
- <ul><li>Print any widget (standard, custom, Fl_Window, Fl_Gl_Window) as it appears 
- on screen, with optional translation, scaling and rotation. This is done by calling print_widget() 
- or print_window_part().
- <li>Use a series of FLTK graphics commands (e.g., font, text, lines, colors, clip, image) to
- compose a page appropriately shaped for printing. 
- </ul>
- In both cases, begin by start_job(), start_page(), printable_rect() and origin() calls
- and finish by end_page() and end_job() calls.
- <p><b>Platform specifics</b>
- <ul>
- <li>Unix/Linux platforms:
- Class Fl_RGB_Image prints but loses its transparency if it has one.
- See class Fl_PostScript_Graphics_Driver for a description of how UTF-8 strings appear in print.
- Use the static public attributes of this class to set the print dialog to other languages 
- than English. For example, the "Printer:" dialog item Fl_Printer::dialog_printer can be set to French with:
- \code
- Fl_Printer::dialog_printer = "Imprimante:";
- \endcode
- before creation of the Fl_Printer object.
- Use Fl_PostScript_File_Device::file_chooser_title to customize the title of the file chooser dialog that opens
- when using the "Print To File" option of the print dialog. 
- <li>MSWindows platform: Transparent Fl_RGB_Image 's don't print with exact transparency on most printers.
- Fl_RGB_Image 's don't rotate() well.
- A workaround is to use the print_window_part() call. 
- <li>Mac OS X platform: all graphics requests print as on display.
- </ul>
- */
-class FL_EXPORT Fl_Printer : public Fl_Paged_Device {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  /** \brief The constructor */
-  Fl_Printer(void);
-  int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
-  int start_page(void);
-  int printable_rect(int *w, int *h);
-  void margins(int *left, int *top, int *right, int *bottom);
-  void origin(int *x, int *y);
-  void origin(int x, int y);
-  void scale(float scale_x, float scale_y = 0.);
-  void rotate(float angle);
-  void translate(int x, int y);
-  void untranslate(void);
-  int end_page (void);
-  void end_job (void);
-  void print_widget(Fl_Widget* widget, int delta_x=0, int delta_y=0);
-  void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x=0, int delta_y=0);
-  void set_current(void);
-  Fl_Graphics_Driver* driver(void);
-  /** \brief The destructor */
-  ~Fl_Printer(void);
- 
-  /** \name These attributes are effective under the Xlib platform only.
-   \{
-   */  
-  static const char *dialog_title; 
-  static const char *dialog_printer; 
-  static const char *dialog_range; 
-  static const char *dialog_copies; 
-  static const char *dialog_all; 
-  static const char *dialog_pages;
-  static const char *dialog_from;
-  static const char *dialog_to;
-  static const char *dialog_properties;
-  static const char *dialog_copyNo;
-  static const char *dialog_print_button;
-  static const char *dialog_cancel_button;
-  static const char *dialog_print_to_file;
-  static const char *property_title;
-  static const char *property_pagesize;
-  static const char *property_mode;
-  static const char *property_use;
-  static const char *property_save;
-  static const char *property_cancel;
-  /** \} */ 
-private:
-#if defined(WIN32) || defined(__APPLE__)
-  Fl_System_Printer *printer;
-#else
-  Fl_PostScript_Printer *printer;
-#endif
-};
-
-#endif // Fl_Printer_H
-
-//
-// End of "$Id: Fl_Printer.H 8699 2011-05-20 16:39:06Z manolo $"
-//
diff --git a/common/fltk/FL/Fl_Progress.H b/common/fltk/FL/Fl_Progress.H
deleted file mode 100644
index ce506d5..0000000
--- a/common/fltk/FL/Fl_Progress.H
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-// "$Id: Fl_Progress.H 8306 2011-01-24 17:04:22Z matt $"
-//
-// Progress bar widget definitions.
-//
-// Copyright 2000-2010 by Michael Sweet.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Progress widget . */
-
-#ifndef _Fl_Progress_H_
-#  define _Fl_Progress_H_
-
-//
-// Include necessary headers.
-//
-
-#include "Fl_Widget.H"
-
-
-//
-// Progress class...
-//
-/**
-    Displays a progress bar for the user.
-*/
-class FL_EXPORT Fl_Progress : public Fl_Widget {
-  
-  float	value_,
-	minimum_,
-	maximum_;
-
-  protected:
-
-  virtual void draw();
-
-  public:
-
-  Fl_Progress(int x, int y, int w, int h, const char *l = 0);
-
-  /** Sets the maximum value in the progress widget.  */
-  void	maximum(float v) { maximum_ = v; redraw(); }
-  /** Gets the maximum value in the progress widget.  */
-  float	maximum() const { return (maximum_); }
-
-  /** Sets the minimum value in the progress widget.  */
-  void	minimum(float v) { minimum_ = v; redraw(); }
-  /** Gets the minimum value in the progress widget.  */
-  float	minimum() const { return (minimum_); }
-
-  /** Sets the current value in the progress widget.  */
-  void	value(float v) { value_ = v; redraw(); }
-  /** Gets the current value in the progress widget.  */
-  float	value() const { return (value_); }
-};
-
-#endif // !_Fl_Progress_H_
-
-//
-// End of "$Id: Fl_Progress.H 8306 2011-01-24 17:04:22Z matt $".
-//
diff --git a/common/fltk/FL/Fl_RGB_Image.H b/common/fltk/FL/Fl_RGB_Image.H
deleted file mode 100644
index bf1285e..0000000
--- a/common/fltk/FL/Fl_RGB_Image.H
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// "$Id: Fl_RGB_Image.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// RGB Image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_RGB_Image_H
-# define Fl_RGB_Image_H
-# include "Fl_Image.H"
-#endif // !Fl_RGB_Image_H
-
-//
-// End of "$Id: Fl_RGB_Image.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Radio_Button.H b/common/fltk/FL/Fl_Radio_Button.H
deleted file mode 100644
index 979e330..0000000
--- a/common/fltk/FL/Fl_Radio_Button.H
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// "$Id: Fl_Radio_Button.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Radio button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Radio_Button widget . */
-
-#ifndef Fl_Radio_Button_H
-#define Fl_Radio_Button_H
-
-#include "Fl_Button.H"
-
-class FL_EXPORT Fl_Radio_Button : public Fl_Button {
-public:
-    Fl_Radio_Button(int x,int y,int w,int h,const char *l=0)
-	: Fl_Button(x,y,w,h,l) {type(FL_RADIO_BUTTON);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Radio_Button.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Radio_Light_Button.H b/common/fltk/FL/Fl_Radio_Light_Button.H
deleted file mode 100644
index 6286dbd..0000000
--- a/common/fltk/FL/Fl_Radio_Light_Button.H
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// "$Id: Fl_Radio_Light_Button.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Radio light button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Radio_Light_Button widget . */
-
-#ifndef Fl_Radio_Light_Button_H
-#define Fl_Radio_Light_Button_H
-
-#include "Fl_Light_Button.H"
-
-class FL_EXPORT Fl_Radio_Light_Button : public Fl_Light_Button {
-public:
-    Fl_Radio_Light_Button(int X,int Y,int W,int H,const char *l=0)
-	: Fl_Light_Button(X,Y,W,H,l) {type(FL_RADIO_BUTTON);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Radio_Light_Button.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Radio_Round_Button.H b/common/fltk/FL/Fl_Radio_Round_Button.H
deleted file mode 100644
index b1505af..0000000
--- a/common/fltk/FL/Fl_Radio_Round_Button.H
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// "$Id: Fl_Radio_Round_Button.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Radio round button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Radio_Round_Button widget . */
-
-#ifndef Fl_Radio_Round_Button_H
-#define Fl_Radio_Round_Button_H
-
-#include "Fl_Round_Button.H"
-
-class FL_EXPORT Fl_Radio_Round_Button : public Fl_Round_Button {
-public:
-    Fl_Radio_Round_Button(int x,int y,int w,int h,const char *l=0)
-	: Fl_Round_Button(x,y,w,h,l) {type(FL_RADIO_BUTTON);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Radio_Round_Button.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Repeat_Button.H b/common/fltk/FL/Fl_Repeat_Button.H
deleted file mode 100644
index dc6d42e..0000000
--- a/common/fltk/FL/Fl_Repeat_Button.H
+++ /dev/null
@@ -1,63 +0,0 @@
-//
-// "$Id: Fl_Repeat_Button.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Repeat button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Repeat_Button widget . */
-
-#ifndef Fl_Repeat_Button_H
-#define Fl_Repeat_Button_H
-#include "Fl.H"
-#include "Fl_Button.H"
-
-/**
-  The Fl_Repeat_Button is a subclass of Fl_Button that
-  generates a callback when it is pressed and then repeatedly generates
-  callbacks as long as it is held down.  The speed of the repeat is fixed
-  and depends on the implementation.
-*/
-class FL_EXPORT Fl_Repeat_Button : public Fl_Button {
-  static void repeat_callback(void *);
-public:
-  int handle(int);
-  /**
-    Creates a new Fl_Repeat_Button widget using the given
-    position, size, and label string. The default boxtype is FL_UP_BOX.
-    Deletes the button.
-  */
-  Fl_Repeat_Button(int X,int Y,int W,int H,const char *l=0)
-    : Fl_Button(X,Y,W,H,l) {}
-  void deactivate() {
-    Fl::remove_timeout(repeat_callback,this);
-    Fl_Button::deactivate();
-  }
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Repeat_Button.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Return_Button.H b/common/fltk/FL/Fl_Return_Button.H
deleted file mode 100644
index eb8d6c4..0000000
--- a/common/fltk/FL/Fl_Return_Button.H
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// "$Id: Fl_Return_Button.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Return button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Return_Button widget . */
-
-#ifndef Fl_Return_Button_H
-#define Fl_Return_Button_H
-#include "Fl_Button.H"
-
-/**
-  The Fl_Return_Button is a subclass of Fl_Button that
-  generates a callback when it is pressed or when the user presses the
-  Enter key.  A carriage-return symbol is drawn next to the button label.
-  <P ALIGN=CENTER>\image html Fl_Return_Button.png 
-  \image latex Fl_Return_Button.png "Fl_Return_Button" width=4cm
-*/
-class FL_EXPORT Fl_Return_Button : public Fl_Button {
-protected:
-  void draw();
-public:
-  int handle(int);
-  /**
-    Creates a new Fl_Return_Button widget using the given
-    position, size, and label string. The default boxtype is FL_UP_BOX.
-    <P> The inherited destructor deletes the button.
-  */
-  Fl_Return_Button(int X, int Y, int W, int H,const char *l=0)
-    : Fl_Button(X,Y,W,H,l) {}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Return_Button.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Roller.H b/common/fltk/FL/Fl_Roller.H
deleted file mode 100644
index a22d643..0000000
--- a/common/fltk/FL/Fl_Roller.H
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// "$Id: Fl_Roller.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Roller header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Roller widget . */
-
-#ifndef Fl_Roller_H
-#define Fl_Roller_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-/**
-  The Fl_Roller widget is a "dolly" control commonly used to
-  move 3D objects.
-  <P ALIGN=CENTER>\image html Fl_Roller.png 
-  \image latex Fl_Roller.png "Fl_Roller" width=4cm
-*/
-class FL_EXPORT Fl_Roller : public Fl_Valuator {
-protected:
-  void draw();
-public:
-  int handle(int);
-  Fl_Roller(int X,int Y,int W,int H,const char* L=0);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Roller.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Round_Button.H b/common/fltk/FL/Fl_Round_Button.H
deleted file mode 100644
index f11123e..0000000
--- a/common/fltk/FL/Fl_Round_Button.H
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// "$Id: Fl_Round_Button.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Round button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Round_Button widget . */
-
-#ifndef Fl_Round_Button_H
-#define Fl_Round_Button_H
-
-#include "Fl_Light_Button.H"
-
-/**
-  Buttons generate callbacks when they are clicked by the user.  You
-  control exactly when and how by changing the values for type()
-  and when().
-  <P ALIGN=CENTER>\image html Fl_Round_Button.png</P> 
-  \image latex  Fl_Round_Button.png " Fl_Round_Button" width=4cm
-  <P>The Fl_Round_Button subclass display the "on" state by
-  turning on a light, rather than drawing pushed in.  The shape of the
-  "light" is initially set to FL_ROUND_DOWN_BOX.  The color of the light
-  when on is controlled with selection_color(), which defaults to
-  FL_RED.
-*/
-class FL_EXPORT Fl_Round_Button : public Fl_Light_Button {
-public:
-  Fl_Round_Button(int x,int y,int w,int h,const char *l = 0);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Round_Button.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Round_Clock.H b/common/fltk/FL/Fl_Round_Clock.H
deleted file mode 100644
index 2d420ba..0000000
--- a/common/fltk/FL/Fl_Round_Clock.H
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// "$Id: Fl_Round_Clock.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Round clock header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Round_Clock widget . */
-
-#ifndef Fl_Round_Clock_H
-#define Fl_Round_Clock_H
-
-#include "Fl_Clock.H"
-
-/** A clock widget of type FL_ROUND_CLOCK. Has no box. */
-class FL_EXPORT Fl_Round_Clock : public Fl_Clock {
-public:
-    /** Creates the clock widget, setting his type and box. */
-    Fl_Round_Clock(int x,int y,int w,int h, const char *l = 0)
-	: Fl_Clock(x,y,w,h,l) {type(FL_ROUND_CLOCK); box(FL_NO_BOX);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Round_Clock.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Scroll.H b/common/fltk/FL/Fl_Scroll.H
deleted file mode 100644
index c649497..0000000
--- a/common/fltk/FL/Fl_Scroll.H
+++ /dev/null
@@ -1,199 +0,0 @@
-//
-// "$Id: Fl_Scroll.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Scroll header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Scroll widget . */
-
-#ifndef Fl_Scroll_H
-#define Fl_Scroll_H
-
-#include "Fl_Group.H"
-#include "Fl_Scrollbar.H"
-
-/**
-  This container widget lets you maneuver around a set of widgets much
-  larger than your window.  If the child widgets are larger than the size
-  of this object then scrollbars will appear so that you can scroll over
-  to them:
-  \image html Fl_Scroll.png
-  \image latex  Fl_Scroll.png "Fl_Scroll" width=4cm
-
-  If all of the child widgets are packed together into a solid
-  rectangle then you want to set box() to FL_NO_BOX or
-  one of the _FRAME types. This will result in the best output.
-  However, if the child widgets are a sparse arrangement you must
-  set box() to a real _BOX type. This can result in some
-  blinking during redrawing, but that can be solved by using a 
-  Fl_Double_Window.
-
-  By default you can scroll in both directions, and the scrollbars
-  disappear if the data will fit in the area of the scroll. 
-
-  Use Fl_Scroll::type() to change this as follows :
-  <UL>
-  <LI>0                            - No scrollbars </LI>
-  <LI>Fl_Scroll::HORIZONTAL        - Only a horizontal scrollbar. </LI>
-  <LI>Fl_Scroll::VERTICAL          - Only a vertical scrollbar. </LI>
-  <LI>Fl_Scroll::BOTH              - The default is both scrollbars. </LI>
-  <LI>Fl_Scroll::HORIZONTAL_ALWAYS - Horizontal scrollbar always on, vertical always off. </LI>
-  <LI>Fl_Scroll::VERTICAL_ALWAYS   - Vertical scrollbar always on, horizontal always off. </LI>
-  <LI>Fl_Scroll::BOTH_ALWAYS       - Both always on. </LI>
-  </UL>
-
-  Use <B> scrollbar.align(int) ( see void Fl_Widget::align(Fl_Align) ) :</B>
-  to change what side the scrollbars are drawn on.
-
-  If the FL_ALIGN_LEFT bit is on, the vertical scrollbar is on the left.
-  If the FL_ALIGN_TOP bit is on, the horizontal scrollbar is on
-  the top. Note that only the alignment flags in scrollbar are 
-  considered. The flags in hscrollbar however are ignored.
-
-  This widget can also be used to pan around a single child widget
-  "canvas".  This child widget should be of your own class, with a 
-  draw() method that draws the contents.  The scrolling is done by
-  changing the x() and y() of the widget, so this child
-  must use the x() and y() to position its drawing.
-  To speed up drawing it should test fl_push_clip().
-
-  Another very useful child is a single Fl_Pack, which is itself a group
-  that packs its children together and changes size to surround them.
-  Filling the Fl_Pack with Fl_Tabs groups (and then putting
-  normal widgets inside those) gives you a very powerful scrolling list
-  of individually-openable panels.
-
-  Fluid lets you create these, but you can only lay out objects that
-  fit inside the Fl_Scroll without scrolling.  Be sure to leave
-  space for the scrollbars, as Fluid won't show these either.
-
-  <I>You cannot use Fl_Window as a child of this since the
-  clipping is not conveyed to it when drawn, and it will draw over the
-  scrollbars and neighboring objects.</I>
-*/
-class FL_EXPORT Fl_Scroll : public Fl_Group {
-
-  int xposition_, yposition_;
-  int oldx, oldy;
-  int scrollbar_size_;
-  static void hscrollbar_cb(Fl_Widget*, void*);
-  static void scrollbar_cb(Fl_Widget*, void*);
-  void fix_scrollbar_order();
-  static void draw_clip(void*,int,int,int,int);
-
-private:
-
-  //
-  //  Structure to manage scrollbar and widget interior sizes.
-  //
-  //  Private for now -- we'd like to expose some of this at 
-  //  some point to solve STR#1895.)
-  //
-  typedef struct {
-      int scrollsize;							// the scrollsize (global|local)
-      int innerbox_x, innerbox_y, innerbox_w, innerbox_h;		// widget's inner box (excludes scrollbars)
-      int innerchild_x, innerchild_y, innerchild_w, innerchild_h;	// widget's inner box including scrollbars
-      int child_l, child_r, child_b, child_t;				// child bounding box: left/right/bottom/top
-      int hneeded, vneeded;						// hor + ver scrollbar visibility
-      int hscroll_x, hscroll_y, hscroll_w, hscroll_h;			// hor scrollbar size/position
-      int vscroll_x, vscroll_y, vscroll_w, vscroll_h;			// ver scrollbar size/position
-      int hpos, hsize, hfirst, htotal;					// hor scrollbar values (pos/size/first/total)
-      int vpos, vsize, vfirst, vtotal;					// ver scrollbar values (pos/size/first/total)
-  } ScrollInfo;
-  void recalc_scrollbars(ScrollInfo &si);
-
-protected:
-
-  void bbox(int&,int&,int&,int&);
-  void draw();
-
-public:
-
-  Fl_Scrollbar scrollbar;
-  Fl_Scrollbar hscrollbar;
-
-  void resize(int,int,int,int);
-  int handle(int);
-
-  Fl_Scroll(int X,int Y,int W,int H,const char*l=0);
-
-  enum { // values for type()
-    HORIZONTAL = 1,
-    VERTICAL = 2,
-    BOTH = 3,
-    ALWAYS_ON = 4,
-    HORIZONTAL_ALWAYS = 5,
-    VERTICAL_ALWAYS = 6,
-    BOTH_ALWAYS = 7
-  };
-
-  /**    Gets the current horizontal scrolling position.  */
-  int xposition() const {return xposition_;}
-  /**    Gets the current vertical scrolling position.  */
-  int yposition() const {return yposition_;}
-  void scroll_to(int, int);
-  void clear();
-  /**
-    Gets the current size of the scrollbars' troughs, in pixels.
-
-    If this value is zero (default), this widget will use the 
-    Fl::scrollbar_size() value as the scrollbar's width.
-  
-    \returns Scrollbar size in pixels, or 0 if the global Fl::scrollsize() is being used.
-    \see Fl::scrollbar_size(int)
-  */
-  int scrollbar_size() const {
-      return(scrollbar_size_);
-  }
-  /**
-    Sets the pixel size of the scrollbars' troughs to the \p size, in pixels.
-
-    Normally you should not need this method, and should use
-    Fl::scrollbar_size(int) instead to manage the size of ALL 
-    your widgets' scrollbars. This ensures your application 
-    has a consistent UI, is the default behavior, and is normally
-    what you want.
-
-    Only use THIS method if you really need to override the global
-    scrollbar size. The need for this should be rare.
-    
-    Setting \p size to the special value of 0 causes the widget to
-    track the global Fl::scrollbar_size(), which is the default.
-    
-    \param[in] size Sets the scrollbar size in pixels.\n
-                    If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
-    \see Fl::scrollbar_size()
-  */
-  void scrollbar_size(int size) {
-      if ( size != scrollbar_size_ ) redraw();
-      scrollbar_size_ = size;
-  }   
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Scroll.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Scrollbar.H b/common/fltk/FL/Fl_Scrollbar.H
deleted file mode 100644
index 96aa433..0000000
--- a/common/fltk/FL/Fl_Scrollbar.H
+++ /dev/null
@@ -1,120 +0,0 @@
-//
-// "$Id: Fl_Scrollbar.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Scroll bar header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Scrollbar widget . */
-
-#ifndef Fl_Scrollbar_H
-#define Fl_Scrollbar_H
-
-#include "Fl_Slider.H"
-
-/**
-  The Fl_Scrollbar widget displays a slider with arrow buttons at
-  the ends of the scrollbar. Clicking on the arrows move up/left and
-  down/right by linesize(). Scrollbars also accept FL_SHORTCUT events:
-  the arrows move by linesize(), and vertical scrollbars take Page
-  Up/Down (they move by the page size minus linesize()) and Home/End
-  (they jump to the top or bottom).
-
-  Scrollbars have step(1) preset (they always return integers). If
-  desired you can set the step() to non-integer values. You will then
-  have to use casts to get at the floating-point versions of value()
-  from Fl_Slider.
-
-  \image html  scrollbar.png 
-  \image latex scrollbar.png "Fl_Scrollbar" width=4cm
-*/
-class FL_EXPORT Fl_Scrollbar : public Fl_Slider {
-
-  int linesize_;
-  int pushed_;
-  static void timeout_cb(void*);
-  void increment_cb();
-protected:
-  void draw();
-
-public:
-
-  Fl_Scrollbar(int X,int Y,int W,int H, const char *L = 0);
-  ~Fl_Scrollbar();
-  int handle(int);
-
-  /**
-    Gets the integer value (position) of the slider in the scrollbar.
-    You can get the floating point value with Fl_Slider::value().
-
-    \see Fl_Scrollbar::value(int p)
-    \see Fl_Scrollbar::value(int pos, int size, int first, int total)
-  */
-  int value() const {return int(Fl_Slider::value());}
-
-  /**
-    Sets the value (position) of the slider in the scrollbar.
-
-    \see Fl_Scrollbar::value()
-    \see Fl_Scrollbar::value(int pos, int size, int first, int total)
-  */
-  int value(int p) {return int(Fl_Slider::value((double)p));}
-
-  /**
-    Sets the position, size and range of the slider in the scrollbar.
-    \param[in] pos   position, first line displayed
-    \param[in] size  window size, number of lines displayed
-    \param[in] first number of first line
-    \param[in] total total number of lines
-
-    You should call this every time your window changes size, your data
-    changes size, or your scroll position changes (even if in response
-    to a callback from this scrollbar).
-    All necessary calls to redraw() are done.
-
-    Calls Fl_Slider::scrollvalue(int pos, int size, int first, int total).
-  */
-  int value(int pos, int size, int first, int total) {
-    return scrollvalue(pos, size, first, total);
-  }
-
-  /**
-    Get the size of step, in lines, that the arror keys move.
-  */
-  int linesize() const {return linesize_;}
-
-  /**
-    This number controls how big the steps are that the arrow keys do.
-    In addition page up/down move by the size last sent to value()
-    minus one linesize().  The default is 16.
-  */
-  void linesize(int i) {linesize_ = i;}
-
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Scrollbar.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Secret_Input.H b/common/fltk/FL/Fl_Secret_Input.H
deleted file mode 100644
index 2c10036..0000000
--- a/common/fltk/FL/Fl_Secret_Input.H
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// "$Id: Fl_Secret_Input.H 8726 2011-05-23 18:32:47Z AlbrechtS $"
-//
-// Secret input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Secret_Input widget . */
-
-#ifndef Fl_Secret_Input_H
-#define Fl_Secret_Input_H
-
-#include "Fl_Input.H"
-
-/**
-  The Fl_Secret_Input class is a subclass of Fl_Input that displays its
-  input as a string of placeholders. Depending on the platform this
-  placeholder is either the asterisk ('*') or the Unicode bullet
-  character (U+2022).
-
-  This subclass is usually used to receive passwords and other "secret" information.
-*/
-class FL_EXPORT Fl_Secret_Input : public Fl_Input {
-public:
-  /**
-    Creates a new Fl_Secret_Input widget using the given
-    position, size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-#if defined(FL_DLL)	// implementation in src/Fl_Input.cxx
-  Fl_Secret_Input(int X,int Y,int W,int H,const char *l = 0);
-#else
-  Fl_Secret_Input(int X,int Y,int W,int H,const char *l = 0)
-    : Fl_Input(X,Y,W,H,l) {type(FL_SECRET_INPUT);}
-#endif
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Secret_Input.H 8726 2011-05-23 18:32:47Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Select_Browser.H b/common/fltk/FL/Fl_Select_Browser.H
deleted file mode 100644
index 82e68da..0000000
--- a/common/fltk/FL/Fl_Select_Browser.H
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// "$Id: Fl_Select_Browser.H 8736 2011-05-24 20:00:56Z AlbrechtS $"
-//
-// Select browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Select_Browser widget . */
-
-#ifndef Fl_Select_Browser_H
-#define Fl_Select_Browser_H
-
-#include "Fl_Browser.H"
-
-/**
-  The class is a subclass of Fl_Browser
-  which lets the user select a single item, or no items by clicking on
-  the empty space.  As long as the mouse button is held down on an
-  unselected item it is highlighted. Normally the callback is done when the
-  user presses the mouse, but you can change this with when().
-  <P>See Fl_Browser for  methods to add and remove lines from the browser.
-*/
-class FL_EXPORT Fl_Select_Browser : public Fl_Browser {
-public:
-  /**
-    Creates a new Fl_Select_Browser widget using the given
-    position, size, and label string. The default boxtype is FL_DOWN_BOX.
-    The constructor specializes Fl_Browser() by setting the type to FL_SELECT_BROWSER.
-    The destructor destroys the widget and frees all memory that has been allocated.
-  */
-#if defined(FL_DLL)	// implementation in src/Fl_Browser.cxx
-  Fl_Select_Browser(int X,int Y,int W,int H,const char *L=0);
-#else
-  Fl_Select_Browser(int X,int Y,int W,int H,const char *L=0)
-	: Fl_Browser(X,Y,W,H,L) {type(FL_SELECT_BROWSER);}
-#endif
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Select_Browser.H 8736 2011-05-24 20:00:56Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Shared_Image.H b/common/fltk/FL/Fl_Shared_Image.H
deleted file mode 100644
index a6beb0d..0000000
--- a/common/fltk/FL/Fl_Shared_Image.H
+++ /dev/null
@@ -1,114 +0,0 @@
-//
-// "$Id: Fl_Shared_Image.H 8306 2011-01-24 17:04:22Z matt $"
-//
-// Shared image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   Fl_Shared_Image class. */
-
-#ifndef Fl_Shared_Image_H
-#  define Fl_Shared_Image_H
-
-#  include "Fl_Image.H"
-
-
-// Test function for adding new formats
-typedef Fl_Image *(*Fl_Shared_Handler)(const char *name, uchar *header,
-                                       int headerlen);
-
-// Shared images class. 
-/**
-  This class supports caching, loading,
-  and drawing of image files. Most applications will also want to
-  link against the fltk_images library and call the
-  fl_register_images()
-  function to support standard image formats such as BMP, GIF, JPEG, and PNG.
-*/
-class FL_EXPORT Fl_Shared_Image : public Fl_Image {
-  
-  friend class Fl_JPEG_Image;
-  friend class Fl_PNG_Image;
-
-protected:
-
-  static Fl_Shared_Image **images_;	// Shared images
-  static int	num_images_;		// Number of shared images
-  static int	alloc_images_;		// Allocated shared images
-  static Fl_Shared_Handler *handlers_;	// Additional format handlers
-  static int	num_handlers_;		// Number of format handlers
-  static int	alloc_handlers_;	// Allocated format handlers
-
-  const char	*name_;			// Name of image file
-  int		original_;		// Original image?
-  int		refcount_;		// Number of times this image has been used
-  Fl_Image	*image_;		// The image that is shared
-  int		alloc_image_;		// Was the image allocated?
-
-  static int	compare(Fl_Shared_Image **i0, Fl_Shared_Image **i1);
-
-  // Use get() and release() to load/delete images in memory...
-  Fl_Shared_Image();
-  Fl_Shared_Image(const char *n, Fl_Image *img = 0);
-  virtual ~Fl_Shared_Image();
-  void add();
-  void update();
-
-  public:
-  /** Returns the filename of the shared image */
-  const char	*name() { return name_; }
-  /** Returns the number of references of this shared image. When reference is below 1, the image is deleted. */
-  int		refcount() { return refcount_; }
-  void		release();
-  void		reload();
-
-  virtual Fl_Image *copy(int W, int H);
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void color_average(Fl_Color c, float i);
-  virtual void desaturate();
-  virtual void draw(int X, int Y, int W, int H, int cx, int cy);
-  void draw(int X, int Y) { draw(X, Y, w(), h(), 0, 0); }
-  virtual void uncache();
-
-  static Fl_Shared_Image *find(const char *n, int W = 0, int H = 0);
-  static Fl_Shared_Image *get(const char *n, int W = 0, int H = 0);
-  static Fl_Shared_Image **images();
-  static int		num_images();
-  static void		add_handler(Fl_Shared_Handler f);
-  static void		remove_handler(Fl_Shared_Handler f);
-};
-
-//
-// The following function is provided in the fltk_images library and
-// registers all of the "extra" image file formats that are not part
-// of the core FLTK library...
-//
-
-FL_EXPORT extern void fl_register_images();
-
-#endif // !Fl_Shared_Image_H
-
-//
-// End of "$Id: Fl_Shared_Image.H 8306 2011-01-24 17:04:22Z matt $"
-//
diff --git a/common/fltk/FL/Fl_Simple_Counter.H b/common/fltk/FL/Fl_Simple_Counter.H
deleted file mode 100644
index dbcebdb..0000000
--- a/common/fltk/FL/Fl_Simple_Counter.H
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// "$Id: Fl_Simple_Counter.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Simple counter header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Simple_Counter widget . */
-
-#ifndef Fl_Simple_Counter_H
-#define Fl_Simple_Counter_H
-
-#include "Fl_Counter.H"
-/** 
-  This widget creates a counter with only 2 arrow buttons 
-  <P align=center>\image html counter.png</P> 
-  \image latex  counter.png "Fl_Simple_Counter" width=4cm
-*/
-class FL_EXPORT Fl_Simple_Counter : public Fl_Counter {
-public:
-    Fl_Simple_Counter(int x,int y,int w,int h, const char *l = 0)
-	: Fl_Counter(x,y,w,h,l) {type(FL_SIMPLE_COUNTER);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Simple_Counter.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Single_Window.H b/common/fltk/FL/Fl_Single_Window.H
deleted file mode 100644
index 9bebc4e..0000000
--- a/common/fltk/FL/Fl_Single_Window.H
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-// "$Id: Fl_Single_Window.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Single-buffered window header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Single_Window class . */
-
-#ifndef Fl_Single_Window_H
-#define Fl_Single_Window_H
-
-#include "Fl_Window.H"
-
-/**
-  This is the same as Fl_Window.  However, it is possible that
-  some implementations will provide double-buffered windows by default.
-  This subcan be used to force single-buffering.  This may be
-  useful for modifying existing programs that use incremental update, or
-  for some types of image data, such as a movie flipbook.
-*/
-class FL_EXPORT Fl_Single_Window : public Fl_Window {
-public:
-  void show();
-  void show(int a, char **b) {Fl_Window::show(a,b);}
-  void flush();
-   /**
-    Creates a new Fl_Single_Window widget using the given
-    size, and label (title) string.
-  */
-  Fl_Single_Window(int W, int H, const char *l=0)
-    : Fl_Window(W,H,l) {}
-  /**
-    Creates a new Fl_Single_Window widget using the given
-    position, size, and label (title) string.
-  */
-  Fl_Single_Window(int X, int Y, int W, int H, const char *l=0)
-    : Fl_Window(X,Y,W,H,l) {}
-  int make_current();
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Single_Window.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Slider.H b/common/fltk/FL/Fl_Slider.H
deleted file mode 100644
index e16e2d6..0000000
--- a/common/fltk/FL/Fl_Slider.H
+++ /dev/null
@@ -1,120 +0,0 @@
-//
-// "$Id: Fl_Slider.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Slider widget . */
-
-#ifndef Fl_Slider_H
-#define Fl_Slider_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-// values for type(), lowest bit indicate horizontal:
-#define FL_VERT_SLIDER		0
-#define FL_HOR_SLIDER		1
-#define FL_VERT_FILL_SLIDER	2
-#define FL_HOR_FILL_SLIDER	3
-#define FL_VERT_NICE_SLIDER	4
-#define FL_HOR_NICE_SLIDER	5
-
-/**
-  The Fl_Slider widget contains a sliding knob inside a box. It if
-  often used as a scrollbar.  Moving the box all the way to the
-  top/left sets it to the minimum(), and to the bottom/right to the
-  maximum().  The minimum() may be greater than the maximum() to
-  reverse the slider direction.
-
-  Use void Fl_Widget::type(int) to set how the slider is drawn, 
-  which can be one of the following:
-  
-  \li FL_VERTICAL - Draws a vertical slider (this is the default).
-  \li FL_HORIZONTAL - Draws a horizontal slider.
-  \li FL_VERT_FILL_SLIDER - Draws a filled vertical slider,
-      useful as a progress or value meter.
-  \li FL_HOR_FILL_SLIDER - Draws a filled horizontal  slider,
-      useful as a progress or value meter.
-  \li FL_VERT_NICE_SLIDER - Draws a vertical slider with  a nice
-      looking control knob.
-  \li FL_HOR_NICE_SLIDER - Draws a horizontal slider with  a
-      nice looking control knob.
-
-  \image html  slider.png 
-  \image latex slider.png "Fl_Slider" width=4cm
-*/
-class FL_EXPORT Fl_Slider : public Fl_Valuator {
-
-  float slider_size_;
-  uchar slider_;
-  void _Fl_Slider();
-  void draw_bg(int, int, int, int);
-
-protected:
-
-  // these allow subclasses to put the slider in a smaller area:
-  void draw(int, int, int, int);
-  int handle(int, int, int, int, int);
-  void draw();
-
-public:
-
-  int handle(int);
-  Fl_Slider(int X,int Y,int W,int H, const char *L = 0);
-  Fl_Slider(uchar t,int X,int Y,int W,int H, const char *L);
-
-  int scrollvalue(int pos,int size,int first,int total);
-  void bounds(double a, double b);
-
-  /**
-    Get the dimensions of the moving piece of slider.
-  */
-  float slider_size() const {return slider_size_;}
-
-  /**
-    Set the dimensions of the moving piece of slider. This is
-    the fraction of the size of the entire widget. If you set this
-    to 1 then the slider cannot move.  The default value is .08.
-
-    For the "fill" sliders this is the size of the area around the
-    end that causes a drag effect rather than causing the slider to
-    jump to the mouse.
-  */
-  void slider_size(double v);
-
-  /** Gets the slider box type. */
-  Fl_Boxtype slider() const {return (Fl_Boxtype)slider_;}
-
-  /** Sets the slider box type. */
-  void slider(Fl_Boxtype c) {slider_ = c;}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Slider.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Spinner.H b/common/fltk/FL/Fl_Spinner.H
deleted file mode 100644
index 5d141bd..0000000
--- a/common/fltk/FL/Fl_Spinner.H
+++ /dev/null
@@ -1,268 +0,0 @@
-//
-// "$Id: Fl_Spinner.H 8339 2011-01-30 12:50:19Z ianmacarthur $"
-//
-// Spinner widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Spinner widget . */
-
-#ifndef Fl_Spinner_H
-#  define Fl_Spinner_H
-
-//
-// Include necessary headers...
-//
-
-#  include <FL/Enumerations.H>
-#  include <FL/Fl_Group.H>
-#  include <FL/Fl_Input.H>
-#  include <FL/Fl_Repeat_Button.H>
-#  include <stdio.h>
-#  include <stdlib.h>
-
-
-/**
-  This widget is a combination of the input
-  widget and repeat buttons. The user can either type into the
-  input area or use the buttons to change the value.
-*/
-class FL_EXPORT Fl_Spinner : public Fl_Group {
-  
-  double	value_;			// Current value
-  double	minimum_;		// Minimum value
-  double	maximum_;		// Maximum value
-  double	step_;			// Amount to add/subtract for up/down
-  const char	*format_;		// Format string
-
-  Fl_Input	input_;			// Input field for the value
-  Fl_Repeat_Button
-		up_button_,		// Up button
-		down_button_;		// Down button
-
-
-  static void	sb_cb(Fl_Widget *w, Fl_Spinner *sb) {
-		  double v;		// New value
-
-		  if (w == &(sb->input_)) {
-		    // Something changed in the input field...
-		    v = atof(sb->input_.value());
-
-		    if (v < sb->minimum_) {
-		      sb->value_ = sb->minimum_;
-		      sb->update();
-		    } else if (v > sb->maximum_) {
-		      sb->value_ = sb->maximum_;
-		      sb->update();
-		    } else sb->value_ = v;
-		  } else if (w == &(sb->up_button_)) {
-		    // Up button pressed...
-		    v = sb->value_ + sb->step_;
-
-		    if (v > sb->maximum_) sb->value_ = sb->minimum_;
-		    else sb->value_ = v;
-
-		    sb->update();
-		  } else if (w == &(sb->down_button_)) {
-		    // Down button pressed...
-		    v = sb->value_ - sb->step_;
-
-		    if (v < sb->minimum_) sb->value_ = sb->maximum_;
-		    else sb->value_ = v;
-
-		    sb->update();
-		  }
-
-		  sb->do_callback();
-		}
-  void		update() {
-		  char s[255];		// Value string
-
-                  if (format_[0]=='%'&&format_[1]=='.'&&format_[2]=='*') {  // precision argument
-                    // this code block is a simplified version of
-                    // Fl_Valuator::format() and works well (but looks ugly)
-                    int c = 0;
-                    char temp[64], *sp = temp;
-                    sprintf(temp, "%.12f", step_);
-                    while (*sp) sp++;
-                    sp--;
-                    while (sp>temp && *sp=='0') sp--;
-                    while (sp>temp && (*sp>='0' && *sp<='9')) { sp--; c++; }
-		    sprintf(s, format_, c, value_);
-                  } else {
-		    sprintf(s, format_, value_);
-                  }
-		  input_.value(s);
-		}
-
-  public:
-
-		/**
-		  Creates a new Fl_Spinner widget using the given position, size,
-		  and label string.
-		  <P>Inherited destructor Destroys the widget and any value associated with it.
-		*/
-		Fl_Spinner(int X, int Y, int W, int H, const char *L = 0)
-		  : Fl_Group(X, Y, W, H, L),
-		    input_(X, Y, W - H / 2 - 2, H),
-		    up_button_(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2, "@-42<"),
-		    down_button_(X + W - H / 2 - 2, Y + H - H / 2,
-		                 H / 2 + 2, H / 2, "@-42>") {
-		  end();
-
-		  value_   = 1.0;
-		  minimum_ = 1.0;
-		  maximum_ = 100.0;
-		  step_    = 1.0;
-		  format_  = "%g";
-
-		  align(FL_ALIGN_LEFT);
-
-		  input_.value("1");
-		  input_.type(FL_INT_INPUT);
-		  input_.when(FL_WHEN_ENTER_KEY | FL_WHEN_RELEASE);
-		  input_.callback((Fl_Callback *)sb_cb, this);
-
-		  up_button_.callback((Fl_Callback *)sb_cb, this);
-
-		  down_button_.callback((Fl_Callback *)sb_cb, this);
-		}
-
-  /** Sets or returns the format string for the value. */
-  const char	*format() { return (format_); }
-  /** Sets or returns the format string for the value. */
-  void		format(const char *f) { format_ = f; update(); }
-
-  int		handle(int event) {
-		  switch (event) {
-		    case FL_KEYDOWN :
-		    case FL_SHORTCUT :
-		      if (Fl::event_key() == FL_Up) {
-			up_button_.do_callback();
-			return 1;
-		      } else if (Fl::event_key() == FL_Down) {
-			down_button_.do_callback();
-			return 1;
-		      } else return 0;
-
-		    case FL_FOCUS :
-		      if (input_.take_focus()) return 1;
-		      else return 0;
-		  }
-
-		  return Fl_Group::handle(event);
-		}
-
-  /** Speling mistakes retained for source compatibility \deprecated */
-  double	maxinum() const { return (maximum_); }
-  /** Gets the maximum value of the widget. */
-  double	maximum() const { return (maximum_); }
-  /** Sets the maximum value of the widget. */
-  void		maximum(double m) { maximum_ = m; }
-  /** Speling mistakes retained for source compatibility \deprecated */
-  double	mininum() const { return (minimum_); }
-  /** Gets the minimum value of the widget. */
-  double	minimum() const { return (minimum_); }
-  /** Sets the minimum value of the widget. */
-  void		minimum(double m) { minimum_ = m; }
-  /** Sets the minimum and maximum values for the widget. */
-  void		range(double a, double b) { minimum_ = a; maximum_ = b; }
-  void		resize(int X, int Y, int W, int H) {
-		  Fl_Group::resize(X,Y,W,H);
-
-		  input_.resize(X, Y, W - H / 2 - 2, H);
-		  up_button_.resize(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2);
-		  down_button_.resize(X + W - H / 2 - 2, Y + H - H / 2,
-		                      H / 2 + 2, H / 2);
-		}
-  /**
-    Sets or returns the amount to change the value when the user clicks a button. 
-    Before setting step to a non-integer value, the spinner 
-    type() should be changed to floating point. 
-  */
-  double	step() const { return (step_); }
-  /** See double Fl_Spinner::step() const */
-  void		step(double s) {
-		  step_ = s;
-		  if (step_ != (int)step_) input_.type(FL_FLOAT_INPUT);
-		  else input_.type(FL_INT_INPUT);
-		  update();
-		}
-  /** Gets the color of the text in the input field. */
-  Fl_Color	textcolor() const {
-		  return (input_.textcolor());
-		}
-  /** Sets the color of the text in the input field. */
-  void		textcolor(Fl_Color c) {
-		  input_.textcolor(c);
-		}
-  /** Gets the font of the text in the input field. */
-  Fl_Font       textfont() const {
-		  return (input_.textfont());
-		}
-  /** Sets the font of the text in the input field. */
-  void		textfont(Fl_Font f) {
-		  input_.textfont(f);
-		}
-  /** Gets the size of the text in the input field. */
-  Fl_Fontsize  textsize() const {
-		  return (input_.textsize());
-		}
-  /** Sets the size of the text in the input field. */
-  void		textsize(Fl_Fontsize s) {
-		  input_.textsize(s);
-		}
-  /** Gets the numeric representation in the input field.
-   \see Fl_Spinner::type(uchar) 
-  */
-  uchar		type() const { return (input_.type()); }
-  /** Sets the numeric representation in the input field.
-   Valid values are FL_INT_INPUT and FL_FLOAT_INPUT.
-   Also changes the format() template.
-   Setting a new spinner type via a superclass pointer will not work.
-   \note  type is not a virtual function. 
-   */
-  void		type(uchar v) { 
-                  if (v==FL_FLOAT_INPUT) {
-                    format("%.*f");
-                  } else {
-                    format("%.0f");
-                  }
-                  input_.type(v); 
-                }
-  /** Gets the current value of the widget. */
-  double	value() const { return (value_); }
-  /**
-    Sets the current value of the widget.
-    Before setting value to a non-integer value, the spinner 
-    type() should be changed to floating point. 
-  */
-  void		value(double v) { value_ = v; update(); }
-};
-
-#endif // !Fl_Spinner_H
-
-//
-// End of "$Id: Fl_Spinner.H 8339 2011-01-30 12:50:19Z ianmacarthur $".
-//
diff --git a/common/fltk/FL/Fl_Sys_Menu_Bar.H b/common/fltk/FL/Fl_Sys_Menu_Bar.H
deleted file mode 100644
index da70c92..0000000
--- a/common/fltk/FL/Fl_Sys_Menu_Bar.H
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// "$Id: Fl_Sys_Menu_Bar.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// MacOS system menu bar header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Sys_Menu_Bar_H
-#define Fl_Sys_Menu_Bar_H
-
-#include "Fl_Menu_Bar.H"
-#include "x.H"
-
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-
-/**
- @brief A class to create, modify and delete menus that appear on Mac OS X in the menu bar at the top of the screen.
- *
- * On other than Mac OS X platforms, Fl_Sys_Menu_Bar is a synonym of class Fl_Menu_Bar.
- */
-class FL_EXPORT Fl_Sys_Menu_Bar : public Fl_Menu_Bar {
-protected:
-  void draw();
-public:
-  /**
-   @brief The constructor.
-   *
-   * On Mac OS X, all arguments are unused. On other platforms they are used as by Fl_Menu_Bar::Fl_Menu_Bar().
-   */
-  Fl_Sys_Menu_Bar(int x,int y,int w,int h,const char *l=0)
-      : Fl_Menu_Bar(x,y,w,h,l) {
-    deactivate();			// don't let the old area take events
-    fl_sys_menu_bar = this;
-  }
-  void menu(const Fl_Menu_Item *m);
-  int add(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0);
-  int insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data=0, int flags=0);
-  void remove(int n);
-  void replace(int rank, const char *name);
-  void clear();
-  int clear_submenu(int index);
-#if ! defined(FL_DOXYGEN)
-  enum menuOrItemOperation { itemAtIndex, setKeyEquivalent, setKeyEquivalentModifierMask, setState, initWithTitle,
-    numberOfItems, setSubmenu, setEnabled, addSeparatorItem, setTitle, removeItem, addNewItem, renameItem };
-  // function doMenuOrItemOperation is in file Fl_cocoa.mm because it contains objective-c code
-  static void *doMenuOrItemOperation( menuOrItemOperation operation, ...);
-#endif
-};
-
-#else
-
-typedef Fl_Menu_Bar Fl_Sys_Menu_Bar;
-
-#endif // defined(__APPLE__) || defined(FL_DOXYGEN)
-
-#endif // Fl_Sys_Menu_Bar_H
-
-//
-// End of "$Id: Fl_Sys_Menu_Bar.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Table.H b/common/fltk/FL/Fl_Table.H
deleted file mode 100644
index 55c06fd..0000000
--- a/common/fltk/FL/Fl_Table.H
+++ /dev/null
@@ -1,1081 +0,0 @@
-//
-// "$Id: Fl_Table.H 8301 2011-01-22 22:40:11Z AlbrechtS $"
-//
-// Fl_Table -- A table widget
-//
-// Copyright 2002 by Greg Ercolano.
-// Copyright (c) 2004 O'ksi'D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to "erco at seriss dot com".
-//
-// TODO:
-//    o Auto scroll during dragged selection
-//    o Keyboard navigation (up/down/left/right arrow)
-//
-
-#ifndef _FL_TABLE_H
-#define _FL_TABLE_H
-
-#include <sys/types.h>
-#include <string.h>		// memcpy
-#ifdef WIN32
-#include <malloc.h>		// WINDOWS: malloc/realloc
-#else /*WIN32*/
-#include <stdlib.h>		// UNIX: malloc/realloc
-#endif /*WIN32*/
-
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Scrollbar.H>
-
-/**
- A table of widgets or other content.
- 
- This is the base class for table widgets.
- 
- To be useful it must be subclassed and several virtual functions defined.
- Normally applications use widgets derived from this widget, and do not use this 
- widget directly; this widget is usually too low level to be used directly by 
- applications.
- 
- This widget does \em not handle the data in the table. The draw_cell()
- method must be overridden by a subclass to manage drawing the contents of 
- the cells.
- 
- This widget can be used in several ways:
- 
- - As a custom widget; see examples/table-simple.cxx and test/table.cxx.
-   Very optimal for even extremely large tables.
- - As a table made up of a single FLTK widget instanced all over the table,
-   simulating a numeric spreadsheet. See examples/table-spreadsheet.cxx and
-   examples/table-spreadsheet-with-keyboard-nav.cxx. Optimal for large tables.
- - As a regular container of FLTK widgets, one widget per cell.
-   See examples/table-as-container.cxx. \em Not recommended for large tables.
- 
- \image html table-simple.png
- \image latex table-simple.png "table-simple example" width=6cm
-
- \image html table-as-container.png
- \image latex table-as-container.png "table-as-container example" width=6cm
- 
- When acting as part of a custom widget, events on the cells and/or headings
- generate callbacks when they are clicked by the user. You control when events 
- are generated based on the setting for Fl_Table::when().
- 
- When acting as a container for FLTK widgets, the FLTK widgets maintain 
- themselves. Although the draw_cell() method must be overridden, its contents 
- can be very simple. See the draw_cell() code in examples/table-simple.cxx.
- 
- The following variables are available to classes deriving from Fl_Table:
- 
- \image html table-dimensions.png
- \image latex table-dimensions.png "Fl_Table Dimensions" width=6cm
- 
- <table border=0>
- <tr><td>x()/y()/w()/h()</td>
- <td>Fl_Table widget's outer dimension. The outer edge of the border of the 
- Fl_Table. (Red in the diagram above)</td></tr>
- 
- <tr><td>wix/wiy/wiw/wih</td>
- <td>Fl_Table widget's inner dimension. The inner edge of the border of the 
- Fl_Table. eg. if the Fl_Table's box() is FL_NO_BOX, these values are the same 
- as x()/y()/w()/h(). (Yellow in the diagram above)</td></tr>
- 
- <tr><td>tox/toy/tow/toh</td>
- <td>The table's outer dimension. The outer edge of the border around the cells,
- but inside the row/col headings and scrollbars. (Green in the diagram above)
- </td></tr>
- 
- <tr><td>tix/tiy/tiw/tih</td>
- <td>The table's inner dimension. The inner edge of the border around the cells,
- but inside the row/col headings and scrollbars. AKA the table's clip region. 
- eg. if the table_box() is FL_NO_BOX, these values are the same as
- tox/toyy/tow/toh. (Blue in the diagram above)
- </td></tr></table>
- 
- CORE DEVELOPERS
- 
- - Greg Ercolano : 12/16/2002 - initial implementation 12/16/02. Fl_Table, Fl_Table_Row, docs.
- - Jean-Marc Lienher : 02/22/2004 - added keyboard nav + mouse selection, and ported Fl_Table into fltk-utf8-1.1.4
- 
- OTHER CONTRIBUTORS
- 
- - Inspired by the Feb 2000 version of FLVW's Flvw_Table widget. Mucho thanks to those folks.
- - Mister Satan : 04/07/2003 - MinGW porting mods, and singleinput.cxx; a cool Fl_Input oriented spreadsheet example
- - Marek Paliwoda : 01/08/2003 - Porting mods for Borland
- - Ori Berger : 03/16/2006 - Optimizations for >500k rows/cols
- 
- LICENSE
- 
- Greg added the following license to the original distribution of Fl_Table. He 
- kindly gave his permission to integrate Fl_Table and Fl_Table_Row into FLTK,
- allowing FLTK license to apply while his widgets are part of the library.
- 
- If used on its own, this is the license that applies:
-
- \verbatim 
- Fl_Table License
- December 16, 2002
- 
- The Fl_Table library and included programs are provided under the terms
- of the GNU Library General Public License (LGPL) with the following
- exceptions:
- 
- 1. Modifications to the Fl_Table configure script, config
- header file, and makefiles by themselves to support
- a specific platform do not constitute a modified or
- derivative work.
- 
- The authors do request that such modifications be
- contributed to the Fl_Table project - send all
- contributions to "erco at seriss dot com".
- 
- 2. Widgets that are subclassed from Fl_Table widgets do not
- constitute a derivative work.
- 
- 3. Static linking of applications and widgets to the
- Fl_Table library does not constitute a derivative work
- and does not require the author to provide source
- code for the application or widget, use the shared
- Fl_Table libraries, or link their applications or
- widgets against a user-supplied version of Fl_Table.
- 
- If you link the application or widget to a modified
- version of Fl_Table, then the changes to Fl_Table must be
- provided under the terms of the LGPL in sections
- 1, 2, and 4.
- 
- 4. You do not have to provide a copy of the Fl_Table license
- with programs that are linked to the Fl_Table library, nor
- do you have to identify the Fl_Table license in your
- program or documentation as required by section 6
- of the LGPL.
- 
- However, programs must still identify their use of Fl_Table.
- The following example statement can be included in user
- documentation to satisfy this requirement:
- 
- [program/widget] is based in part on the work of
- the Fl_Table project http://seriss.com/people/erco/fltk/Fl_Table/
- \endverbatim
- 
- 
- */
-class FL_EXPORT Fl_Table : public Fl_Group {
-public:
-  /**
-   The context bit flags for Fl_Table related callbacks (eg. draw_cell(), callback(), etc)
-   */
-  enum TableContext {
-    CONTEXT_NONE       = 0,	///< no known context
-    CONTEXT_STARTPAGE  = 0x01,	///< before a page is redrawn
-    CONTEXT_ENDPAGE    = 0x02,	///< after a page is redrawn
-    CONTEXT_ROW_HEADER = 0x04,	///< in the row header
-    CONTEXT_COL_HEADER = 0x08,	///< in the col header
-    CONTEXT_CELL       = 0x10,	///< in one of the cells
-    CONTEXT_TABLE      = 0x20,	///< in a dead zone of table
-    CONTEXT_RC_RESIZE  = 0x40 	///< column or row being resized
-  };
-  
-private:
-  int _rows, _cols;	// total rows/cols
-  int _row_header_w;	// width of row header
-  int _col_header_h;	// height of column header
-  int _row_position;	// last row_position set (not necessarily == toprow!)
-  int _col_position;	// last col_position set (not necessarily == leftcol!)
-  
-  char _row_header;	// row header enabled?
-  char _col_header;	// col header enabled?
-  char _row_resize;	// row resizing enabled?
-  char _col_resize;	// col resizing enabled?
-  int _row_resize_min;	// row minimum resizing height (default=1)
-  int _col_resize_min;	// col minimum resizing width (default=1)
-  
-  // OPTIMIZATION: partial row/column redraw variables
-  int _redraw_toprow;
-  int _redraw_botrow;
-  int _redraw_leftcol;
-  int _redraw_rightcol;
-  Fl_Color _row_header_color;
-  Fl_Color _col_header_color;
-  
-  int _auto_drag;
-  int _selecting;
-  
-  // An STL-ish vector without templates
-  class FL_EXPORT IntVector {
-    int *arr;
-    unsigned int _size;
-    void init() {
-      arr = NULL;
-      _size = 0;
-    }
-    void copy(int *newarr, unsigned int newsize) {
-      size(newsize);
-      memcpy(arr, newarr, newsize * sizeof(int));
-    }
-  public:
-    IntVector() { init(); }					// CTOR
-    ~IntVector() { if ( arr ) free(arr); arr = NULL; }		// DTOR
-    IntVector(IntVector&o) { init(); copy(o.arr, o._size); }	// COPY CTOR
-    IntVector& operator=(IntVector&o) {				// ASSIGN
-      init();
-      copy(o.arr, o._size);
-      return(*this);
-    }
-    int operator[](int x) const { return(arr[x]); }
-    int& operator[](int x) { return(arr[x]); }
-    unsigned int size() { return(_size); }
-    void size(unsigned int count) {
-      if ( count != _size ) {
-        arr = (int*)realloc(arr, count * sizeof(int));
-        _size = count;
-      }
-    }
-    int pop_back() { int tmp = arr[_size-1]; _size--; return(tmp); }
-    void push_back(int val) { unsigned int x = _size; size(_size+1); arr[x] = val; }
-    int back() { return(arr[_size-1]); }
-  };
-  
-  IntVector _colwidths;			// column widths in pixels
-  IntVector _rowheights;		// row heights in pixels
-  
-  Fl_Cursor _last_cursor;		// last mouse cursor before changed to 'resize' cursor
-  
-  // EVENT CALLBACK DATA
-  TableContext _callback_context;	// event context
-  int _callback_row, _callback_col;	// event row/col
-  
-  // handle() state variables.
-  //    Put here instead of local statics in handle(), so more
-  //    than one Fl_Table can exist without crosstalk between them.
-  //
-  int _resizing_col;			// column being dragged
-  int _resizing_row;			// row being dragged
-  int _dragging_x;			// starting x position for horiz drag
-  int _dragging_y;			// starting y position for vert drag
-  int _last_row;			// last row we FL_PUSH'ed
-  
-  // Redraw single cell
-  void _redraw_cell(TableContext context, int R, int C);
-  
-  void _start_auto_drag();
-  void _stop_auto_drag();
-  void _auto_drag_cb();
-  static void _auto_drag_cb2(void *d);
-  
-protected:
-  enum ResizeFlag {
-    RESIZE_NONE      = 0,
-    RESIZE_COL_LEFT  = 1,
-    RESIZE_COL_RIGHT = 2,
-    RESIZE_ROW_ABOVE = 3,
-    RESIZE_ROW_BELOW = 4
-  };
-  
-  int table_w, table_h;				// table's virtual size (in pixels)
-  int toprow, botrow, leftcol, rightcol;	// four corners of viewable table
-  
-  // selection
-  int current_row, current_col;
-  int select_row, select_col;
-  
-  // OPTIMIZATION: Precomputed scroll positions for the toprow/leftcol
-  int toprow_scrollpos;
-  int leftcol_scrollpos;
-  
-  // Dimensions
-  int tix, tiy, tiw, tih;			// data table inner dimension xywh
-  int tox, toy, tow, toh;			// data table outer dimension xywh
-  int wix, wiy, wiw, wih;			// widget inner dimension xywh
-  
-  Fl_Scroll *table;				// container for child fltk widgets (if any)
-  Fl_Scrollbar *vscrollbar; 			// vertical scrollbar
-  Fl_Scrollbar *hscrollbar;			// horizontal scrollbar
-  
-  // Fltk
-  int handle(int e);				// fltk handle() override
-  
-  // Class maintenance
-  void recalc_dimensions();
-  void table_resized();				// table resized; recalc
-  void table_scrolled();			// table scrolled; recalc
-  void get_bounds(TableContext context,		// return x/y/w/h bounds for context
-                  int &X, int &Y, int &W, int &H);
-  void change_cursor(Fl_Cursor newcursor);	// change mouse cursor to some other shape
-  TableContext cursor2rowcol(int &R, int &C, ResizeFlag &resizeflag);
-  // find r/c given current x/y event
-  int find_cell(TableContext context,		// find cell's x/y/w/h given r/c
-                int R, int C, int &X, int &Y, int &W, int &H);
-  int row_col_clamp(TableContext context, int &R, int &C);
-  // clamp r/c to known universe
-  
-  /**
-   Subclass should override this method to handle drawing the cells.
-   
-   This method will be called whenever the table is redrawn, once per cell.
-   
-   Only cells that are completely (or partially) visible will be told to draw.
-   
-   \p context will be one of the following:
-   
-   <table border=1>
-   <tr>
-   <td>\p Fl_Table::CONTEXT_STARTPAGE</td>
-   <td>When table, or parts of the table, are about to be redrawn.<br>
-       Use to initialize static data, such as font selections.<p>
-       R/C will be zero,<br>
-       X/Y/W/H will be the dimensions of the table's entire data area.<br>
-       (Useful for locking a database before accessing; see
-       also visible_cells())</td>
-   </tr><tr>
-   <td>\p Fl_Table::CONTEXT_ENDPAGE</td>
-   <td>When table has completed being redrawn.<br>
-       R/C will be zero, X/Y/W/H dimensions of table's data area.<br>
-       (Useful for unlocking a database after accessing)</td>
-   </tr><tr>
-   <td>\p Fl_Table::CONTEXT_ROW_HEADER</td>
-   <td>Whenever a row header cell needs to be drawn.<br>
-       R will be the row number of the header being redrawn,<br>
-       C will be zero,<br>
-       X/Y/W/H will be the fltk drawing area of the row header in the window </td>
-   </tr><tr>
-   <td>\p Fl_Table::CONTEXT_COL_HEADER</td>
-   <td>Whenever a column header cell needs to be drawn.<br>
-       R will be zero, <br>
-       C will be the column number of the header being redrawn,<br>
-       X/Y/W/H will be the fltk drawing area of the column header in the window </td>
-   </tr><tr>
-   <td>\p Fl_Table::CONTEXT_CELL</td>
-   <td>Whenever a data cell in the table needs to be drawn.<br>
-       R/C will be the row/column of the cell to be drawn,<br>
-       X/Y/W/H will be the fltk drawing area of the cell in the window </td>
-   </tr><tr>
-   <td>\p Fl_Table::CONTEXT_RC_RESIZE</td>
-   <td>Whenever table or row/column is resized or scrolled,
-       either interactively or via col_width() or row_height().<br>
-       R/C/X/Y/W/H will all be zero.
-       <p> 
-       Useful for fltk containers that need to resize or move
-       the child fltk widgets.</td>
-   </tr>
-   </table>
-   
-   \p row and \p col will be set to the row and column number
-   of the cell being drawn. In the case of row headers, \p col will be \a 0.
-   In the case of column headers, \p row will be \a 0.
-   
-   <tt>x/y/w/h</tt> will be the position and dimensions of where the cell
-   should be drawn.
-   
-   In the case of custom widgets, a minimal draw_cell() override might
-   look like the following. With custom widgets it is up to the caller to handle
-   drawing everything within the dimensions of the cell, including handling the
-   selection color.  Note all clipping must be handled as well; this allows drawing
-   outside the dimensions of the cell if so desired for 'custom effects'.
-   
-   \code
-   // This is called whenever Fl_Table wants you to draw a cell
-   void MyTable::draw_cell(TableContext context, int R=0, int C=0, int X=0, int Y=0, int W=0, int H=0) {
-       static char s[40];
-       sprintf(s, "%d/%d", R, C);              // text for each cell
-       switch ( context ) {
-	   case CONTEXT_STARTPAGE:             // Fl_Table telling us its starting to draw page
-	       fl_font(FL_HELVETICA, 16);
-	       return;
-       
-	   case CONTEXT_ROW_HEADER:            // Fl_Table telling us it's draw row/col headers
-	   case CONTEXT_COL_HEADER:
-	       fl_push_clip(X, Y, W, H);
-	       {
-		   fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, color());
-		   fl_color(FL_BLACK);
-		   fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
-	       }
-	       fl_pop_clip();
-	       return;
-	   
-	   case CONTEXT_CELL:                  // Fl_Table telling us to draw cells
-	       fl_push_clip(X, Y, W, H);
-	       {
-		   // BG COLOR
-		   fl_color( row_selected(R) ? selection_color() : FL_WHITE);
-		   fl_rectf(X, Y, W, H);
-		   
-		   // TEXT
-		   fl_color(FL_BLACK);
-		   fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
-		   
-		   // BORDER
-		   fl_color(FL_LIGHT2);
-		   fl_rect(X, Y, W, H);
-	       }
-	       fl_pop_clip();
-	       return;
-	   
-       default:
-	   return;
-       }
-       //NOTREACHED
-   }
-   \endcode
-   */
-  virtual void draw_cell(TableContext context, int R=0, int C=0, 
-                         int X=0, int Y=0, int W=0, int H=0)
-  { }						// overridden by deriving class
-  
-  long row_scroll_position(int row);		// find scroll position of row (in pixels)
-  long col_scroll_position(int col);		// find scroll position of col (in pixels)
-  
-  int is_fltk_container() { 			// does table contain fltk widgets?
-    return( Fl_Group::children() > 3 );		// (ie. more than box and 2 scrollbars?)
-  }
-  
-  static void scroll_cb(Fl_Widget*,void*);	// h/v scrollbar callback
-  
-  void damage_zone(int r1, int c1, int r2, int c2, int r3 = 0, int c3 = 0);
-  
-  void redraw_range(int toprow, int botrow, int leftcol, int rightcol) {
-    if ( _redraw_toprow == -1 ) {
-      // Initialize redraw range
-      _redraw_toprow = toprow;
-      _redraw_botrow = botrow;
-      _redraw_leftcol = leftcol;
-      _redraw_rightcol = rightcol;
-    } else {
-      // Extend redraw range
-      if ( toprow < _redraw_toprow ) _redraw_toprow = toprow;
-      if ( botrow > _redraw_botrow ) _redraw_botrow = botrow;
-      if ( leftcol < _redraw_leftcol ) _redraw_leftcol = leftcol;
-      if ( rightcol > _redraw_rightcol ) _redraw_rightcol = rightcol;
-    }
-    
-    // Indicate partial redraw needed of some cells
-    damage(FL_DAMAGE_CHILD);
-  }
-  
-public:
-  /**
-   The constructor for the Fl_Table.
-   This creates an empty table with no rows or columns,
-   with headers and row/column resize behavior disabled.
-   */
-  Fl_Table(int X, int Y, int W, int H, const char *l=0);
-  
-  /**
-   The destructor for the Fl_Table.
-   Destroys the table and its associated widgets.
-   */
-  ~Fl_Table();
-  
-  /**
-   Clears the table to zero rows, zero columns.
-   Same as rows(0); cols(0);
-   \see rows(int), cols(int)
-   */
-  virtual void clear() { rows(0); cols(0); }
-  
-  // \todo: add topline(), middleline(), bottomline()
-  
-  /**
-   Sets the kind of box drawn around the data table,
-   the default being FL_NO_BOX. Changing this value will cause the table
-   to redraw.
-   */
-  inline void table_box(Fl_Boxtype val) {
-    table->box(val);
-    table_resized();
-  }
-  
-  /**
-   Returns the current box type used for the data table.
-   */
-  inline Fl_Boxtype table_box( void ) {
-    return(table->box());
-  }
-  
-  /**
-   Sets the number of rows in the table, and the table is redrawn.
-   */
-  virtual void rows(int val);			// set/get number of rows
-  
-  /**
-   Returns the number of rows in the table.
-   */
-  inline int rows() {
-    return(_rows);
-  }
-  
-  /**
-   Set the number of columns in the table and redraw.
-   */
-  virtual void cols(int val);			// set/get number of columns
-  
-  /** 
-   Get the number of columns in the table.
-   */
-  inline int cols() {
-    return(_cols);
-  }
-  
-  /**
-   Returns the range of row and column numbers for all visible 
-   and partially visible cells in the table.
-   
-   These values can be used e.g. by your draw_cell() routine during
-   CONTEXT_STARTPAGE to figure out what cells are about to be redrawn
-   for the purposes of locking the data from a database before it's drawn.
-   
-   \code
-          leftcol             rightcol
-             :                   :
-   toprow .. .-------------------.
-             |                   |
-             |  V I S I B L E    |
-             |                   |
-             |    T A B L E      |
-             |                   |
-   botrow .. '-------------------`
-   \endcode
-   
-   e.g. in a table where the visible rows are 5-20, and the
-   visible columns are 100-120, then those variables would be:
-   
-   - toprow = 5
-   - botrow = 20
-   - leftcol = 100
-   - rightcol = 120
-   */
-  inline void visible_cells(int& r1, int& r2, int& c1, int& c2) {
-    r1 = toprow;
-    r2 = botrow;
-    c1 = leftcol;
-    c2 = rightcol;
-  } 
-  
-  /**
-   Returns 1 if someone is interactively resizing a row or column.
-   You can currently call this only from within your callback().
-   */
-  int is_interactive_resize() {
-    return(_resizing_row != -1 || _resizing_col != -1);
-  } 
-  
-  /**
-   Returns the current value of this flag.
-   */
-  inline int row_resize() {
-    return(_row_resize);
-  }
-  
-  /**
-   Allows/disallows row resizing by the user.
-   1=allow interactive resizing, 0=disallow interactive resizing.
-   Since interactive resizing is done via the row headers,
-   row_header() must also be enabled to allow resizing.
-   */   
-  void row_resize(int flag) {			// enable row resizing
-    _row_resize = flag;
-  }
-  
-  /**
-   Returns the current value of this flag.
-   */
-  inline int col_resize() {
-    return(_col_resize);
-  }
-  /**
-   Allows/disallows column resizing by the user.
-   1=allow interactive resizing, 0=disallow interactive resizing.
-   Since interactive resizing is done via the column headers,
-   \p col_header() must also be enabled to allow resizing.
-   */
-  void col_resize(int flag) {			// enable col resizing
-    _col_resize = flag;
-  }
-  
-  /**
-   Sets the current column minimum resize value.
-   This is used to prevent the user from interactively resizing
-   any column to be smaller than 'pixels'. Must be a value >=1.
-   */
-  inline int col_resize_min() {			// column minimum resizing width
-    return(_col_resize_min);
-  }
-  
-  /**
-   Returns the current column minimum resize value.
-   */
-  void col_resize_min(int val) {
-    _col_resize_min = ( val < 1 ) ? 1 : val;
-  } 
-  
-  /**
-   Returns the current row minimum resize value.
-   */
-  inline int row_resize_min() {			// column minimum resizing width
-    return(_row_resize_min);
-  }
-  
-  /**
-   Sets the current row minimum resize value.
-   This is used to prevent the user from interactively resizing
-   any row to be smaller than 'pixels'. Must be a value >=1.
-   */
-  void row_resize_min(int val) {
-    _row_resize_min = ( val < 1 ) ? 1 : val;
-  }
-  
-  /**
-   Returns the value of this flag.
-   */
-  inline int row_header() {			// set/get row header enable flag
-    return(_row_header);
-  }
-  
-  /**
-   Enables/disables showing the row headers. 1=enabled, 0=disabled.
-   If changed, the table is redrawn.
-   */
-  void row_header(int flag) {
-    _row_header = flag;
-    table_resized();
-    redraw();
-  }
-  
-  /**
-   Returns if column headers are enabled or not.
-   */
-  inline int col_header() {			// set/get col header enable flag
-    return(_col_header);
-  }
-  
-  /**
-   Enable or disable column headers.
-   If changed, the table is redrawn.
-   */
-  void col_header(int flag) {
-    _col_header = flag;
-    table_resized();
-    redraw();
-  }
-  
-  /**
-   Sets the height in pixels for column headers and redraws the table.
-   */
-  inline void col_header_height(int height) {	// set/get col header height
-    _col_header_h = height;
-    table_resized();
-    redraw();
-  }
-  
-  /**
-   Gets the column header height.
-   */
-  inline int col_header_height() {
-    return(_col_header_h);
-  }
-  
-  /**
-   Sets the row header width to n and causes the screen to redraw.
-   */
-  inline void row_header_width(int width) {	// set/get row header width
-    _row_header_w = width;
-    table_resized();
-    redraw();
-  }
-  
-  /**
-   Returns the current row header width (in pixels).
-   */
-  inline int row_header_width() {
-    return(_row_header_w);
-  }
-  
-  /**
-   Sets the row header color and causes the screen to redraw.
-   */
-  inline void row_header_color(Fl_Color val) {	// set/get row header color
-    _row_header_color = val;
-    redraw();
-  }
-  
-  /**
-   Returns the current row header color.
-   */
-  inline Fl_Color row_header_color() {
-    return(_row_header_color);
-  } 
-  
-  /**
-   Sets the color for column headers and redraws the table.
-   */
-  inline void col_header_color(Fl_Color val) {	// set/get col header color
-    _col_header_color = val;
-    redraw();
-  }
-  
-  /**
-   Gets the color for column headers.
-   */
-  inline Fl_Color col_header_color() {
-    return(_col_header_color);
-  }
-  
-  /**
-   Sets the height of the specified row in pixels,
-   and the table is redrawn.
-   callback() will be invoked with CONTEXT_RC_RESIZE
-   if the row's height was actually changed, and when() is FL_WHEN_CHANGED.
-   */
-  void row_height(int row, int height);		// set/get row height
-  
-  /**
-   Returns the current height of the specified row as a value in pixels.
-   */
-  inline int row_height(int row) {
-    return((row<0 || row>=(int)_rowheights.size()) ? 0 : _rowheights[row]);
-  }
-  
-  /**
-   Sets the width of the specified column in pixels, and the table is redrawn.
-   callback() will be invoked with CONTEXT_RC_RESIZE
-   if the column's width was actually changed, and when() is FL_WHEN_CHANGED.
-   */   
-  void col_width(int col, int width);		// set/get a column's width
-  
-  /**
-   Returns the current width of the specified column in pixels.
-   */
-  inline int col_width(int col) {
-    return((col<0 || col>=(int)_colwidths.size()) ? 0 : _colwidths[col]);
-  }
-  
-  /**
-   Convenience method to set the height of all rows to the
-   same value, in pixels. The screen is redrawn.
-   */
-  void row_height_all(int height) {		// set all row/col heights
-    for ( int r=0; r<rows(); r++ ) {
-      row_height(r, height);
-    }
-  }
-  
-  /**
-   Convenience method to set the width of all columns to the
-   same value, in pixels. The screen is redrawn.
-   */
-  void col_width_all(int width) {
-    for ( int c=0; c<cols(); c++ ) {
-      col_width(c, width);
-    }
-  }
-  
-  /**
-   Sets the row scroll position to 'row', and causes the screen to redraw.
-   */
-  void row_position(int row);			// set/get table's current scroll position
-  
-  /** 
-   Sets the column scroll position to column 'col', and causes the screen to redraw.
-   */
-  void col_position(int col);
-  
-  /**
-   Returns the current row scroll position as a row number.
-   */
-  int row_position() {				// current row position
-    return(_row_position);
-  }
-  
-  /**
-   Returns the current column scroll position as a column number.
-   */
-  int col_position() {				// current col position
-    return(_col_position);
-  }
-  
-  /**
-   Sets which row should be at the top of the table,
-   scrolling as necessary, and the table is redrawn. If the table
-   cannot be scrolled that far, it is scrolled as far as possible.
-   */
-  inline void top_row(int row) {		// set/get top row (deprecated)
-    row_position(row);
-  }
-  
-  /**
-   Returns the current top row shown in the table.
-   This row may be partially obscured.
-   */
-  inline int top_row() {
-    return(row_position());
-  }
-  int is_selected(int r, int c);		// selected cell
-  void get_selection(int &row_top, int &col_left, int &row_bot, int &col_right);
-  void set_selection(int row_top, int col_left, int row_bot, int col_right);
-  int move_cursor(int R, int C);
-  
-  /**
-   Changes the size of the Fl_Table, causing it to redraw.
-   */
-  void resize(int X, int Y, int W, int H);	// fltk resize() override
-  void draw(void);				// fltk draw() override
-  
-  // This crashes sortapp() during init.
-  //  void box(Fl_Boxtype val) {
-  //    Fl_Group::box(val);
-  //    if ( table ) {
-  //      resize(x(), y(), w(), h());
-  //    }
-  //  }
-  //  Fl_Boxtype box(void) const {
-  //    return(Fl_Group::box());
-  //  }
-  
-  // Child group
-  void init_sizes() {
-    table->init_sizes();
-    table->redraw();
-  }
-  void add(Fl_Widget& w) {
-    table->add(w);
-  }
-  void add(Fl_Widget* w) {
-    table->add(w);
-  }
-  void insert(Fl_Widget& w, int n) {
-    table->insert(w,n);
-  }
-  void insert(Fl_Widget& w, Fl_Widget* w2) {
-    table->insert(w,w2);
-  }
-  void remove(Fl_Widget& w) {
-    table->remove(w);
-  }
-  void begin() {
-    table->begin();
-  }
-  void end() {
-    table->end();
-    // HACK: Avoid showing Fl_Scroll; seems to erase screen
-    //       causing unnecessary flicker, even if its box() is FL_NO_BOX.
-    //
-    if ( table->children() > 2 ) {
-      table->show();
-    } else {
-      table->hide();
-    } 
-    Fl_Group::current(Fl_Group::parent());
-  }
-  Fl_Widget * const *array() {
-    return(table->array());
-  }
-  
-  /**
-   Returns the child widget by an index.
-   
-   When using the Fl_Table as a container for FLTK widgets, this method returns 
-   the widget pointer from the internal array of widgets in the container.
-   
-   Typically used in loops, eg:
-   \code
-   for ( int i=0; i<children(); i++ ) {
-     Fl_Widget *w = child(i);
-     [..]
-   }
-   \endcode
-   */
-  Fl_Widget *child(int n) const {
-    return(table->child(n));
-  }
-  
-  /**
-   Returns the number of children in the table.
-   
-   When using the Fl_Table as a container for FLTK widgets, this method returns 
-   how many child widgets the table has.
-   
-   \see child(int)
-   */
-  int children() const {
-    return(table->children()-2);    // -2: skip Fl_Scroll's h/v scrollbar widgets
-  }
-  int find(const Fl_Widget *w) const {
-    return(table->find(w));
-  }
-  int find(const Fl_Widget &w) const {
-    return(table->find(w));
-  } 
-  // CALLBACKS
-  
-  /**
-   * Returns the current row the event occurred on.
-   *
-   * This function should only be used from within the user's callback function
-   */
-  int callback_row() {
-    return(_callback_row);
-  }
-  
-  /**
-   * Returns the current column the event occurred on.
-   *
-   * This function should only be used from within the user's callback function
-   */
-  int callback_col() {
-    return(_callback_col);
-  }
-  
-  /**
-   * Returns the current 'table context'.
-   *
-   * This function should only be used from within the user's callback function
-   */
-  TableContext callback_context() {
-    return(_callback_context);
-  }
-  
-  void do_callback(TableContext context, int row, int col) {
-    _callback_context = context;
-    _callback_row = row;
-    _callback_col = col;
-    Fl_Widget::do_callback();
-  }
-  
-#if FL_DOXYGEN
-  /**
-   The Fl_Widget::when() function is used to set a group of flags, determining
-   when the widget callback is called:
-   
-   <table border=1>
-   <tr>
-   <td>\p FL_WHEN_CHANGED</td>
-   <td>
-   callback() will be called when rows or columns are resized (interactively or 
-   via col_width() or row_height()), passing CONTEXT_RC_RESIZE via 
-   callback_context().
-   </td>
-   </tr><tr>
-   <td>\p FL_WHEN_RELEASE</td>
-   <td>
-   callback() will be called during FL_RELEASE events, such as when someone 
-   releases a mouse button somewhere on the table.
-   </td>
-   </tr>
-   </table>
-   
-   The callback() routine is sent a TableContext that indicates the context the 
-   event occurred in, such as in a cell, in a header, or elsewhere on the table.  
-   When an event occurs in a cell or header, callback_row() and 
-   callback_col() can be used to determine the row and column. The callback can 
-   also look at the regular fltk event values (ie. Fl::event() and Fl::button()) 
-   to determine what kind of event is occurring.
-   */
-  void when(Fl_When flags);
-#endif
-  
-#if FL_DOXYGEN
-  /**
-   Callbacks will be called depending on the setting of Fl_Widget::when().
-   
-   Callback functions should use the following functions to determine the 
-   context/row/column:
-   
-   * Fl_Table::callback_row() returns current row
-   * Fl_Table::callback_col() returns current column
-   * Fl_Table::callback_context() returns current table context
-   
-   callback_row() and callback_col() will be set to the row and column number the 
-   event occurred on. If someone clicked on a row header, \p col will be \a 0.  
-   If someone clicked on a column header, \p row will be \a 0.
-   
-   callback_context() will return one of the following:
-   
-   <table border=1>
-   <tr><td><tt>Fl_Table::CONTEXT_ROW_HEADER</tt></td>
-   <td>Someone clicked on a row header. Excludes resizing.</td>
-   </tr><tr>
-   <td><tt>Fl_Table::CONTEXT_COL_HEADER</tt></td>
-   <td>Someone clicked on a column header. Excludes resizing.</td>
-   </tr><tr>
-   <td><tt>Fl_Table::CONTEXT_CELL</tt></td>
-   <td>
-   Someone clicked on a cell.
-   
-   To receive callbacks for FL_RELEASE events, you must set
-   when(FL_WHEN_RELEASE).
-   </td>
-   </tr><tr>
-   <td><tt>Fl_Table::CONTEXT_RC_RESIZE</tt></td>
-   <td>
-   Someone is resizing rows/columns either interactively,
-   or via the col_width() or row_height() API.
-   
-   Use is_interactive_resize()
-   to determine interactive resizing.
-   
-   If resizing a column, R=0 and C=column being resized.
-   
-   If resizing a row, C=0 and R=row being resized.
-   
-   NOTE: To receive resize events, you must set when(FL_WHEN_CHANGED).
-   </td>
-   </tr>
-   </table>
-   
-   \code
-   class MyTable : public Fl_Table {
-     [..]
-   private:
-     // Handle events that happen on the table
-     void event_callback2() {
-       int R = callback_row(),                         // row where event occurred
-       C = callback_col();                             // column where event occurred
-       TableContext context = callback_context();      // which part of table
-       fprintf(stderr, "callback: Row=%d Col=%d Context=%d Event=%d\n",
-               R, C, (int)context, (int)Fl::event());
-     }
-   
-     // Actual static callback
-     static void event_callback(Fl_Widget*, void* data) {
-       MyTable *o = (MyTable*)data;
-       o-&gt;event_callback2();
-     }
-     
-   public:
-     // Constructor
-     MyTable() {
-       [..]
-       table.callback(&event_callback, (void*)this);   // setup callback
-       table.when(FL_WHEN_CHANGED|FL_WHEN_RELEASE);    // when to call it
-     }
-   };
-   \endcode
-   */
-  void callback(Fl_Widget*, void*);
-#endif
-};
-
-#endif /*_FL_TABLE_H*/
-
-//
-// End of "$Id: Fl_Table.H 8301 2011-01-22 22:40:11Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Table_Row.H b/common/fltk/FL/Fl_Table_Row.H
deleted file mode 100644
index f2c3f25..0000000
--- a/common/fltk/FL/Fl_Table_Row.H
+++ /dev/null
@@ -1,211 +0,0 @@
-//
-// "$Id: Fl_Table_Row.H 8301 2011-01-22 22:40:11Z AlbrechtS $"
-//
-
-#ifndef _FL_TABLE_ROW_H
-#define _FL_TABLE_ROW_H
-
-//
-// Fl_Table_Row -- A row oriented table widget
-//
-//    A class specializing in a table of rows.
-//    Handles row-specific selection behavior.
-//
-// Copyright 2002 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to "erco at seriss dot com".
-//
-//
-
-#include "Fl_Table.H"
-
-/**
- A table with row selection capabilities.
- 
- This class implements a simple table with the ability to select
- rows.  This widget is similar to an Fl_Browser with columns.  Most
- methods of importance will be found in the Fl_Table widget, such
- as Fl_Table::rows() and Fl_Table::cols().
- 
- To be useful it must be subclassed and at minimum the draw_cell()
- method must be overridden to provide the content of the cells. This widget
- does \em not manage the cell's data content; it is up to the parent
- class's draw_cell() method override to provide this.
- 
- Events on the cells and/or headings generate callbacks when they are 
- clicked by the user.  You control when events are generated based on
- the values you supply for Fl_Table::when().
- */
-class FL_EXPORT Fl_Table_Row : public Fl_Table {
-public:
-  enum TableRowSelectMode {
-    SELECT_NONE,		// no selection allowed
-    SELECT_SINGLE,		// single row selection
-    SELECT_MULTI		// multiple row selection (default)
-  }; 
-private:
-  // An STL-ish vector without templates
-  class FL_EXPORT CharVector {
-    char *arr;
-    int _size;
-    void init() {
-      arr = NULL;
-      _size = 0;
-    }
-    void copy(char *newarr, int newsize) {
-      size(newsize);
-      memcpy(arr, newarr, newsize * sizeof(char));
-    }
-  public:
-    CharVector() {				// CTOR
-      init();
-    }
-    ~CharVector() {				// DTOR
-      if ( arr ) free(arr);
-      arr = NULL;
-    }
-    CharVector(CharVector&o) {			// COPY CTOR
-      init();
-      copy(o.arr, o._size);
-    }
-    CharVector& operator=(CharVector&o) {	// ASSIGN
-      init();
-      copy(o.arr, o._size);
-      return(*this);
-    }
-    char operator[](int x) const {
-      return(arr[x]);
-    }
-    char& operator[](int x) {
-      return(arr[x]);
-    }
-    int size() {
-      return(_size);
-    }
-    void size(int count) {
-      if ( count != _size ) {
-        arr = (char*)realloc(arr, count * sizeof(char));
-        _size = count;
-      }
-    }
-    char pop_back() {
-      char tmp = arr[_size-1];
-      _size--;
-      return(tmp);
-    }
-    void push_back(char val) {
-      int x = _size;
-      size(_size+1);
-      arr[x] = val;
-    }
-    char back() {
-      return(arr[_size-1]);
-    }
-  };
-  CharVector _rowselect;		// selection flag for each row
-  
-  // handle() state variables.
-  //    Put here instead of local statics in handle(), so more
-  //    than one instance can exist without crosstalk between.
-  //
-  int _dragging_select;		// dragging out a selection?
-  int _last_row;
-  int _last_y;			// last event's Y position
-  int _last_push_x;		// last PUSH event's X position
-  int _last_push_y;		// last PUSH event's Y position
-  
-  TableRowSelectMode _selectmode;
-  
-protected:
-  int handle(int event);
-  int find_cell(TableContext context,		// find cell's x/y/w/h given r/c
-                int R, int C, int &X, int &Y, int &W, int &H) {
-    return(Fl_Table::find_cell(context, R, C, X, Y, W, H));
-  }
-  
-public:
-  /**
-   The constructor for the Fl_Table_Row.
-   This creates an empty table with no rows or columns,
-   with headers and row/column resize behavior disabled.
-   */   
-  Fl_Table_Row(int X, int Y, int W, int H, const char *l=0) : Fl_Table(X,Y,W,H,l) {
-    _dragging_select = 0;
-    _last_row        = -1;
-    _last_y          = -1;
-    _last_push_x     = -1;
-    _last_push_y     = -1;
-    _selectmode      = SELECT_MULTI;
-  }
-  
-  /**
-   The destructor for the Fl_Table_Row.
-   Destroys the table and its associated widgets.
-   */
-  ~Fl_Table_Row() { }
-  
-  void rows(int val);			// set number of rows
-  int rows() {				// get number of rows
-    return(Fl_Table::rows());
-  }
-  
-  /**
-   Sets the table selection mode.
-   
-   - \p Fl_Table_Row::SELECT_NONE - No selection allowed
-   - \p Fl_Table_Row::SELECT_SINGLE - Only single rows can be selected
-   - \p Fl_Table_Row::SELECT_MULTI - Multiple rows can be selected
-   */
-  void type(TableRowSelectMode val);	// set selection mode
-  
-  TableRowSelectMode type() const {	// get selection mode
-    return(_selectmode);
-  }
-  
-  /**
-   Checks to see if 'row' is selected. Returns 1 if selected, 0 if not. You can
-   change the selection of a row by clicking on it, or by using
-   select_row(row, flag)
-   */
-  int row_selected(int row);		// is row selected? (0=no, 1=yes, -1=range err)
-  
-  /**
-   Changes the selection state for 'row', depending on the value
-   of 'flag'.  0=deselected, 1=select, 2=toggle existing state.
-   */
-  int select_row(int row, int flag=1);	// select state for row: flag:0=off, 1=on, 2=toggle
-  // returns: 0=no change, 1=changed, -1=range err
-  
-  /**
-   This convenience function changes the selection state 
-   for \em all rows based on 'flag'. 0=deselect, 1=select, 2=toggle existing state.
-   */
-  void select_all_rows(int flag=1);	// all rows to a known state
-  
-  void clear() {
-    rows(0);		// implies clearing selection
-    cols(0);
-    Fl_Table::clear();	// clear the table
-  }
-};
-
-#endif /*_FL_TABLE_ROW_H*/
-
-//
-// End of "$Id: Fl_Table_Row.H 8301 2011-01-22 22:40:11Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Tabs.H b/common/fltk/FL/Fl_Tabs.H
deleted file mode 100644
index 66b4d3b..0000000
--- a/common/fltk/FL/Fl_Tabs.H
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// "$Id: Fl_Tabs.H 8101 2010-12-22 13:06:03Z AlbrechtS $"
-//
-// Tab header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Tabs widget . */
-
-#ifndef Fl_Tabs_H
-#define Fl_Tabs_H
-
-#include "Fl_Group.H"
-
-/**
-  The Fl_Tabs widget is the "file card tabs"
-  interface that allows you to put lots and lots of buttons and
-  switches in a panel, as popularized by many toolkits.
-  
-  \image html  tabs.png
-  \image latex tabs.png "Fl_Tabs" width=8cm
-  
-  Clicking the tab makes a child visible() by calling
-  show() on it, and all other children are made invisible
-  by calling hide() on them. Usually the children are Fl_Group widgets
-  containing several widgets themselves.
-  
-  Each child makes a card, and its label() is printed
-  on the card tab, including the label font and style.  The
-  selection color of that child is used to color the tab, while
-  the color of the child determines the background color of the pane.
-  
-  The size of the tabs is controlled by the bounding box of the
-  children (there should be some space between the children and
-  the edge of the Fl_Tabs), and the tabs may be placed
-  "inverted" on the bottom - this is determined by which
-  gap is larger. It is easiest to lay this out in fluid, using the
-  fluid browser to select each child group and resize them until
-  the tabs look the way you want them to.
-*/
-class FL_EXPORT Fl_Tabs : public Fl_Group {
-  Fl_Widget *value_;
-  Fl_Widget *push_;
-  int *tab_pos;		// array of x-offsets of tabs per child + 1
-  int *tab_width;	// array of widths of tabs per child + 1
-  int tab_count;	// array size
-  int tab_positions();	// allocate and calculate tab positions
-  void clear_tab_positions();
-  int tab_height();
-  void draw_tab(int x1, int x2, int W, int H, Fl_Widget* o, int sel=0);
-protected:
-  void redraw_tabs();
-  void draw();
-
-public:
-  int handle(int);
-  Fl_Widget *value();
-  int value(Fl_Widget *);
-  Fl_Widget *push() const {return push_;}
-  int push(Fl_Widget *);
-  Fl_Tabs(int,int,int,int,const char * = 0);
-  Fl_Widget *which(int event_x, int event_y);
-  ~Fl_Tabs();
-  void client_area(int &rx, int &ry, int &rw, int &rh, int tabh=0);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Tabs.H 8101 2010-12-22 13:06:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Text_Buffer.H b/common/fltk/FL/Fl_Text_Buffer.H
deleted file mode 100644
index 630fccb..0000000
--- a/common/fltk/FL/Fl_Text_Buffer.H
+++ /dev/null
@@ -1,781 +0,0 @@
-//
-// "$Id: Fl_Text_Buffer.H 8148 2010-12-31 22:38:03Z matt $"
-//
-// Header file for Fl_Text_Buffer class.
-//
-// Copyright 2001-2010 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
- Fl_Text_Buffer, Fl_Text_Selection widget . */
-
-#ifndef FL_TEXT_BUFFER_H
-#define FL_TEXT_BUFFER_H
-
-
-#undef ASSERT_UTF8
-
-#ifdef ASSERT_UTF8
-# include <assert.h>
-# define IS_UTF8_ALIGNED(a) if (a && *a) assert(fl_utf8len(*(a))>0);
-# define IS_UTF8_ALIGNED2(a, b) if (b>=0 && b<a->length()) assert(fl_utf8len(a->byte_at(b))>0);
-#else
-# define IS_UTF8_ALIGNED(a)
-# define IS_UTF8_ALIGNED2(a, b)
-#endif
-
-
-/*
- "character size" is the size of a UTF-8 character in bytes
- "character width" is the width of a Unicode character in pixels 
- "column" was orginally defined as a character offset from the left margin. 
- It was identical to the byte offset. In UTF-8, we have neither a byte offset 
- nor truly fixed width fonts (*). Column could be a pixel value multiplied with
- an average character width (which is a bearable approximation).
- 
- * in Unicode, there are no fixed width fonts! Even if the ASCII characters may 
-   happen to be all the same width in pixels, chinese charcaters surely are not.
-   There are plenty of exceptions, like ligatures, that make special handling of
-   "fixed" character widths a nightmare. I decided to remove all references to
-   fixed fonts and see "columns" as a multiple of the average width of a 
-   character in the main font.
-     - Matthias
- */
-
-
-/* Maximum length in characters of a tab or control character expansion
- of a single buffer character */
-#define FL_TEXT_MAX_EXP_CHAR_LEN 20
-
-#include "Fl_Export.H"
-
-
-/** 
- \class Fl_Text_Selection
- \brief This is an internal class for Fl_Text_Buffer to manage text selections.
- This class works correctly with utf-8 strings assuming that the parameters
- for all calls are on character boundaries.
- */
-class FL_EXPORT Fl_Text_Selection {
-  friend class Fl_Text_Buffer;
-  
-public:
-  
-  /**
-   \brief Set the selection range.
-   \param start byte offset to first selected character
-   \param end byte offset pointing after last selected character
-   */
-  void set(int start, int end);
-  
-  /**
-   \brief Updates a selection afer text was modified.
-   Updates an individual selection for changes in the corresponding text
-   \param pos byte offset into text buffer at which the change occured
-   \param nDeleted number of bytes deleted from the buffer
-   \param nInserted number of bytes inserted into the buffer
-   */
-  void update(int pos, int nDeleted, int nInserted);
-  
-  /**
-   \brief Return the byte offset to the first selected character.
-   \return byte offset
-   */
-  int start() const { return mStart; }
-  
-  /**
-   \brief Return the byte ofsset to the character after the last selected character.
-   \return byte offset
-   */
-  int end() const { return mEnd; }
-  
-  /**
-   \brief Returns true if any text is selected.
-   \return a non-zero number if any text has been selected, or 0
-   if no text is selected.
-   */
-  bool selected() const { return mSelected; }
-  
-  /**
-   \brief Modify the 'selected' flag.
-   \param b new flag
-   */
-  void selected(bool b) { mSelected = b; }
-  
-  /**
-   Return true if position \p pos with indentation \p dispIndex is in
-   the Fl_Text_Selection.
-   */
-  int includes(int pos) const;
-  
-  /**
-   \brief Return the positions of this selection.
-   \param start retrun byte offset to first selected character
-   \param end retrun byte offset pointing after last selected character
-   \return true if selected
-   */
-  int position(int* start, int* end) const;
-  
-protected:
-  
-  int mStart;         ///< byte offset to the first selected character
-  int mEnd;           ///< byte offset to the character after the last selected character
-  bool mSelected;     ///< this flag is set if any text is selected  
-};
-
-
-typedef void (*Fl_Text_Modify_Cb)(int pos, int nInserted, int nDeleted,
-                                  int nRestyled, const char* deletedText,
-                                  void* cbArg);
-
-
-typedef void (*Fl_Text_Predelete_Cb)(int pos, int nDeleted, void* cbArg);
-
-
-/**
- \brief This class manages unicode displayed in one or more Fl_Text_Display widgets.
- 
- All text in Fl_Text_Buffermust be encoded in UTF-8. All indices used in the 
- function calls must be aligned to the start of a UTF-8 sequence. All indices 
- and pointers returned will be aligned. All functions that return a single 
- character will return that in an unsiged int in UCS-4 encoding.
- 
- The Fl_Text_Buffer class is used by the Fl_Text_Display
- and Fl_Text_Editor to manage complex text data and is based upon the
- excellent NEdit text editor engine - see http://www.nedit.org/.
- */
-class FL_EXPORT Fl_Text_Buffer {
-public:
-
-  /**
-   Create an empty text buffer of a pre-determined size.   
-   \param requestedSize use this to avoid unnecessary re-allocation 
-    if you know exactly how much the buffer will need to hold
-   \param preferredGapSize Initial size for the buffer gap (empty space
-    in the buffer where text might be inserted
-    if the user is typing sequential chars)
-   */
-  Fl_Text_Buffer(int requestedSize = 0, int preferredGapSize = 1024);
-  
-  /** 
-   Frees a text buffer 
-   */
-  ~Fl_Text_Buffer();
-  
-  /**
-   \brief Returns the number of bytes in the buffer.
-   \return size of text in bytes
-   */
-  int length() const { return mLength; }
-  
-  /**
-   \brief Get a copy of the entire contents of the text buffer.
-   Memory is allocated to contain the returned string, which the caller 
-   must free.
-   \return newly allocated text buffer - must be free'd, text is utf8
-   */  
-  char* text() const;
-  
-  /**  
-   Replaces the entire contents of the text buffer.
-   \param text Text must be valid utf8.
-   */
-  void text(const char* text);
-  
-  /**
-   \brief Get a copy of a part of the text buffer.
-   Return a copy of the text between \p start and \p end character positions
-   from text buffer \p buf. Positions start at 0, and the range does not
-   include the character pointed to by \p end.
-   When you are done with the text, free it using the free() function.
-   \param start byte offset to first character
-   \param end byte offset after last character in range
-   \return newly allocated text buffer - must be free'd, text is utf8
-   */
-  char* text_range(int start, int end) const;
-  
-  /**
-   Returns the character at the specified position pos in the buffer.
-   Positions start at 0 
-   \param pos byte offset into buffer, pos must be at acharacter boundary
-   \return Unicode UCS-4 encoded character
-   */
-  unsigned int char_at(int pos) const;
-  
-  /**
-   Returns the raw byte at the specified position pos in the buffer.
-   Positions start at 0 
-   \param pos byte offset into buffer
-   \return unencoded raw byte
-   */
-  char byte_at(int pos) const;
-  
-  /**
-   Convert a byte offset in buffer into a memory address.
-   \param pos byte offset into buffer
-   \return byte offset converted to a memory address
-   */
-  const char *address(int pos) const
-  { return (pos < mGapStart) ? mBuf+pos : mBuf+pos+mGapEnd-mGapStart; }
-
-  /**
-   Convert a byte offset in buffer into a memory address.
-   \param pos byte offset into buffer
-   \return byte offset converted to a memory address
-   */
-  char *address(int pos)
-  { return (pos < mGapStart) ? mBuf+pos : mBuf+pos+mGapEnd-mGapStart; }
-  
-  /** 
-   Inserts null-terminated string \p text at position \p pos. 
-   \param pos insertion position as byte offset (must be utf-8 character aligned)
-   \param text utf-8 encoded and nul terminated text
-   */
-  void insert(int pos, const char* text);
-  
-  /**
-   Appends the text string to the end of the buffer.  
-   \param t utf-8 encoded and nul terminated text
-   */
-  void append(const char* t) { insert(length(), t); }
-  
-  /**
-   Deletes a range of characters in the buffer.
-   \param start byte offset to first character to be removed
-   \param end byte offset to charcatre after last character to be removed
-   */
-  void remove(int start, int end);
-  
-  /**
-   Deletes the characters between \p start and \p end, and inserts the null-terminated string \p text in their place in the buffer.
-   \param start byte offset to first character to be removed and new insert position
-   \param end byte offset to charcatre after last character to be removed
-   \param text utf-8 encoded and nul terminated text
-   */
-  void replace(int start, int end, const char *text);
-  
-  /**
-   Copies text from one buffer to this one.
-   \param fromBuf source text buffer may be the same as this
-   \param fromStart byte offset into buffer
-   \param fromEnd byte offset into buffer
-   \param toPos destination byte offset into buffer
-   */
-  void copy(Fl_Text_Buffer* fromBuf, int fromStart, int fromEnd, int toPos);
-  
-  /**
-   Undo text modification according to the undo variables or insert text 
-   from the undo buffer
-   */
-  int undo(int *cp=0);
-  
-  /** 
-   Lets the undo system know if we can undo changes 
-   */
-  void canUndo(char flag=1);
-  
-  /**
-   Inserts a file at the specified position. Returns 0 on success, 
-   non-zero on error (strerror() contains reason).  1 indicates open 
-   for read failed (no data loaded). 2 indicates error occurred 
-   while reading data (data was partially loaded).
-   File can be UTF-8 or CP1252-encoded.
-   If the input file is not UTF-8-encoded, the Fl_Text_Buffer widget will contain
-   UTF-8-transcoded data. By default, the message Fl_Text_Buffer::file_encoding_warning_message
-   will warn the user about this.
-   \see input_file_was_transcoded and transcoding_warning_action.
-   */
-  int insertfile(const char *file, int pos, int buflen = 128*1024);
-  
-  /**
-   Appends the named file to the end of the buffer. See also insertfile().
-   */
-  int appendfile(const char *file, int buflen = 128*1024)
-  { return insertfile(file, length(), buflen); }
-  
-  /** 
-   Loads a text file into the buffer. See also insertfile().
-   */
-  int loadfile(const char *file, int buflen = 128*1024)
-  { select(0, length()); remove_selection(); return appendfile(file, buflen); }
-  
-  /**
-   Writes the specified portions of the file to a file. Returns 0 on success, non-zero 
-   on error (strerror() contains reason).  1 indicates open for write failed 
-   (no data saved). 2 indicates error occurred while writing data 
-   (data was partially saved).
-   */
-  int outputfile(const char *file, int start, int end, int buflen = 128*1024);
-  
-  /** 
-   Saves a text file from the current buffer 
-   */
-  int savefile(const char *file, int buflen = 128*1024)
-  { return outputfile(file, 0, length(), buflen); }
-  
-  /**
-   Gets the tab width.  
-   */
-  int tab_distance() const { return mTabDist; }
-  
-  /**
-   Set the hardware tab distance (width) used by all displays for this buffer,
-   and used in computing offsets for rectangular selection operations.
-   */
-  void tab_distance(int tabDist);
-  
-  /**  
-   Selects a range of characters in the buffer.
-   */
-  void select(int start, int end);
-  
-  /** 
-   Returns a non 0 value if text has been selected, 0 otherwise 
-   */
-  int selected() const { return mPrimary.selected(); }
-  
-  /** 
-   Cancels any previous selection on the primary text selection object 
-   */
-  void unselect();
-  
-  /** 
-   Gets the selection position 
-   */
-  int selection_position(int* start, int* end);
-  
-  /** 
-   Returns the currently selected text. When you are done with
-   the text, free it using the free() function.
-   */
-  char* selection_text();
-
-  /**  
-   Removes the text in the primary selection.
-   */
-  void remove_selection();
-  
-  /**
-   Replaces the text in the primary selection.
-   */
-  void replace_selection(const char* text);
-  
-  /**
-   Selects a range of characters in the secondary selection.
-   */
-  void secondary_select(int start, int end);
-  
-  /** 
-   Returns a non 0 value if text has been selected in the secondary
-   text selection, 0 otherwise 
-   */
-  int secondary_selected() { return mSecondary.selected(); }
-  
-  /** 
-   Clears any selection in the secondary text selection object. 
-   */
-  void secondary_unselect();
-  
-  /** 
-   Returns the current selection in the secondary text selection object.
-   */
-  int secondary_selection_position(int* start, int* end);
-  
-  /** 
-   Returns the text in the secondary selection. When you are
-   done with the text, free it using the free() function.
-   */
-  char* secondary_selection_text();
-  
-  /**  
-   Removes the text from the buffer corresponding to the secondary text selection object.
-   */
-  void remove_secondary_selection();
-  
-  /**  
-   Replaces the text from the buffer corresponding to the secondary 
-   text selection object with the new string \p text.
-   */
-  void replace_secondary_selection(const char* text);
-  
-  /**  
-   Highlights the specified text within the buffer.
-   */
-  void highlight(int start, int end);
-  
-  /**
-   Returns the highlighted text. When you are done with the
-   text, free it using the free() function.
-   */
-  int highlight() { return mHighlight.selected(); }
-  
-  /**
-   Unhighlights text in the buffer.
-   */
-  void unhighlight();
-
-  /** 
-   Highlights the specified text between \p start and \p end within the buffer.
-   */
-  int highlight_position(int* start, int* end);
-  
-  /** 
-   Returns the highlighted text. When you are done with the
-   text, free it using the free() function.
-   */
-  char* highlight_text();
-  
-  /**
-   Adds a callback function that is called whenever the text buffer is
-   modified. The callback function is declared as follows:
-   
-   \code
-   typedef void (*Fl_Text_Modify_Cb)(int pos, int nInserted, int nDeleted,
-      int nRestyled, const char* deletedText,
-      void* cbArg);
-   \endcode
-   */
-  void add_modify_callback(Fl_Text_Modify_Cb bufModifiedCB, void* cbArg);
-  
-  /**
-   Removes a modify callback.
-   */
-  void remove_modify_callback(Fl_Text_Modify_Cb bufModifiedCB, void* cbArg);
-  
-  /**
-   Calls all modify callbacks that have been registered using
-   the add_modify_callback()
-   method.
-   */
-  void call_modify_callbacks() { call_modify_callbacks(0, 0, 0, 0, 0); }
-  
-  /** 
-   Adds a callback routine to be called before text is deleted from the buffer. 
-   */
-  void add_predelete_callback(Fl_Text_Predelete_Cb bufPredelCB, void* cbArg);
-
-  /** 
-   Removes a callback routine \p bufPreDeleteCB associated with argument \p cbArg 
-   to be called before text is deleted from the buffer. 
-   */
-  void remove_predelete_callback(Fl_Text_Predelete_Cb predelCB, void* cbArg);
-  
-  /**
-   Calls the stored pre-delete callback procedure(s) for this buffer to update 
-   the changed area(s) on the screen and any other listeners.
-   */
-  void call_predelete_callbacks() { call_predelete_callbacks(0, 0); }
-  
-  /**
-   Returns the text from the entire line containing the specified
-   character position. When you are done with the text, free it
-   using the free() function.
-   \param pos byte index into buffer
-   \return copy of utf8 text, must be free'd
-   */
-  char* line_text(int pos) const;
-  
-  /** 
-   Returns the position of the start of the line containing position \p pos. 
-   \param pos byte index into buffer
-   \return byte offset to line start
-   */
-  int line_start(int pos) const;
-  
-  /** 
-   Finds and returns the position of the end of the line containing position \p pos
-   (which is either a pointer to the newline character ending the line,
-   or a pointer to one character beyond the end of the buffer)
-   \param pos byte index into buffer
-   \return byte offset to line end
-   */
-  int line_end(int pos) const;
-
-  /** 
-   Returns the position corresponding to the start of the word 
-   \param pos byte index into buffer
-   \return byte offset to word start
-   */
-  int word_start(int pos) const;
-
-  /**  
-   Returns the position corresponding to the end of the word.
-   \param pos byte index into buffer
-   \return byte offset to word end
-   */
-  int word_end(int pos) const;
-  
-  /**
-   Count the number of displayed characters between buffer position
-   \p lineStartPos and \p targetPos. (displayed characters are the characters
-   shown on the screen to represent characters in the buffer, where tabs and
-   control characters are expanded)
-   */
-  int count_displayed_characters(int lineStartPos, int targetPos) const;
-
-  /**
-   Count forward from buffer position \p startPos in displayed characters
-   (displayed characters are the characters shown on the screen to represent
-   characters in the buffer, where tabs and control characters are expanded)
-   \param lineStartPos byte offset into buffer
-   \param nChars number of bytes that are sent to the display
-   \return byte offset in input after all output bytes are sent
-   */
-  int skip_displayed_characters(int lineStartPos, int nChars);
-  
-  /**
-   Counts the number of newlines between \p startPos and \p endPos in buffer.
-   The character at position \p endPos is not counted.
-   */
-  int count_lines(int startPos, int endPos) const;
-
-  /**
-   Finds the first character of the line \p nLines forward from \p startPos
-   in the buffer and returns its position
-   */
-  int skip_lines(int startPos, int nLines);
-  
-  /**
-   Finds and returns the position of the first character of the line \p nLines backwards
-   from \p startPos (not counting the character pointed to by \p startpos if
-   that is a newline) in the buffer.  \p nLines == 0 means find the beginning of the line
-   */
-  int rewind_lines(int startPos, int nLines);
-
-  /** 
-   Finds the next occurrence of the specified character.
-   Search forwards in buffer for character \p searchChar, starting
-   with the character \p startPos, and returning the result in \p foundPos
-   returns 1 if found, 0 if not.  (The difference between this and
-   BufSearchForward is that it's optimized for single characters.  The
-   overall performance of the text widget is dependent on its ability to
-   count lines quickly, hence searching for a single character: newline)
-   \param startPos byte offset to start position
-   \param searchChar UCS-4 character that we want to find
-   \param foundPos byte offset where the character was found
-   \return 1 if found, 0 if not
-   */
-  int findchar_forward(int startPos, unsigned searchChar, int* foundPos) const;
-  
-  /**
-   Search backwards in buffer \p buf for character \p searchChar, starting
-   with the character BEFORE \p startPos, returning the result in \p foundPos
-   returns 1 if found, 0 if not.  (The difference between this and
-   BufSearchBackward is that it's optimized for single characters.  The
-   overall performance of the text widget is dependent on its ability to
-   count lines quickly, hence searching for a single character: newline)
-   \param startPos byte offset to start position
-   \param searchChar UCS-4 character that we want to find
-   \param foundPos byte offset where the character was found
-   \return 1 if found, 0 if not
-   */
-  int findchar_backward(int startPos, unsigned int searchChar, int* foundPos) const;
-  
-  /**
-   Search forwards in buffer for string \p searchString, starting with the
-   character \p startPos, and returning the result in \p foundPos
-   returns 1 if found, 0 if not.
-   \param startPos byte offset to start position
-   \param searchString utf8 string that we want to find
-   \param foundPos byte offset where the string was found
-   \param matchCase if set, match character case
-   \return 1 if found, 0 if not
-   */
-  int search_forward(int startPos, const char* searchString, int* foundPos,
-                     int matchCase = 0) const;
-  
-  /**
-   Search backwards in buffer for string <i>searchCharssearchString</i>, starting with the
-   character BEFORE \p startPos, returning the result in \p foundPos
-   returns 1 if found, 0 if not.
-   \param startPos byte offset to start position
-   \param searchString utf8 string that we want to find
-   \param foundPos byte offset where the string was found
-   \param matchCase if set, match character case
-   \return 1 if found, 0 if not
-   */
-  int search_backward(int startPos, const char* searchString, int* foundPos,
-                      int matchCase = 0) const;
-  
-  /** 
-   Returns the primary selection.  
-   */
-  const Fl_Text_Selection* primary_selection() const { return &mPrimary; }
-  
-  /**
-   Returns the primary selection. 
-   */
-  Fl_Text_Selection* primary_selection() { return &mPrimary; }
-  
-  /**
-   Returns the secondary selection.
-   */
-  const Fl_Text_Selection* secondary_selection() const { return &mSecondary; }
-  
-  /**
-   Returns the current highlight selection.
-   */
-  const Fl_Text_Selection* highlight_selection() const { return &mHighlight; }
-  
-  /**
-   Returns the index of the previous character.
-   \param ix index to the current char
-   */
-  int prev_char(int ix) const;
-  int prev_char_clipped(int ix) const;
-  
-  /**
-   Returns the index of the next character.
-   \param ix index to the current char
-   */
-  int next_char(int ix) const;
-  int next_char_clipped(int ix) const;
-  
-  /**
-   Align an index into the buffer to the current or previous utf8 boundary.
-   */
-  int utf8_align(int) const;
-  
-  /**
-   \brief true iff the loaded file has been transcoded to UTF-8
-   */
-  int input_file_was_transcoded;
-
-  /** This message may be displayed using the fl_alert() function when a file
-   which was not UTF-8 encoded is input.
-   */
-  static const char* file_encoding_warning_message;
-  
-  /** 
-   \brief Pointer to a function called after reading a non UTF-8 encoded file.
-   
-   This function is called after reading a file if the file content
-   was transcoded to UTF-8. Its default implementation calls fl_alert()
-   with the text of \ref file_encoding_warning_message. No warning message is
-   displayed if this pointer is set to NULL. Use \ref input_file_was_transcoded
-   to be informed if file input required transcoding to UTF-8.
-   */
-  void (*transcoding_warning_action)(Fl_Text_Buffer*);
-  
-protected:
-
-  /**
-   Calls the stored modify callback procedure(s) for this buffer to update the
-   changed area(s) on the screen and any other listeners.
-   */
-  void call_modify_callbacks(int pos, int nDeleted, int nInserted,
-                             int nRestyled, const char* deletedText) const;
-  
-  /**
-   Calls the stored pre-delete callback procedure(s) for this buffer to update 
-   the changed area(s) on the screen and any other listeners.
-   */
-  void call_predelete_callbacks(int pos, int nDeleted) const;
-  
-  /**
-   Internal (non-redisplaying) version of BufInsert. Returns the length of
-   text inserted (this is just strlen(\p text), however this calculation can be
-   expensive and the length will be required by any caller who will continue
-   on to call redisplay). \p pos must be contiguous with the existing text in
-   the buffer (i.e. not past the end).
-   \return the number of bytes inserted
-   */
-  int insert_(int pos, const char* text);
-  
-  /**
-   Internal (non-redisplaying) version of BufRemove.  Removes the contents
-   of the buffer between start and end (and moves the gap to the site of
-   the delete).
-   */
-  void remove_(int start, int end);
-  
-  /**
-   Calls the stored redisplay procedure(s) for this buffer to update the
-   screen for a change in a selection.
-   */
-  void redisplay_selection(Fl_Text_Selection* oldSelection,
-                           Fl_Text_Selection* newSelection) const;
-  
-  /**
-   Move the gap to start at a new position.
-   */
-  void move_gap(int pos);
-  
-  /**
-   Reallocates the text storage in the buffer to have a gap starting at \p newGapStart
-   and a gap size of \p newGapLen, preserving the buffer's current contents.
-   */
-  void reallocate_with_gap(int newGapStart, int newGapLen);
-  
-  char* selection_text_(Fl_Text_Selection* sel) const;
-  
-  /**  
-   Removes the text from the buffer corresponding to \p sel.
-   */
-  void remove_selection_(Fl_Text_Selection* sel);
-  
-  /** 
-   Replaces the \p text in selection \p sel.
-   */
-  void replace_selection_(Fl_Text_Selection* sel, const char* text);
-  
-  /**
-   Updates all of the selections in the buffer for changes in the buffer's text
-   */
-  void update_selections(int pos, int nDeleted, int nInserted);
-  
-  Fl_Text_Selection mPrimary;     /**< highlighted areas */
-  Fl_Text_Selection mSecondary;   /**< highlighted areas */
-  Fl_Text_Selection mHighlight;   /**< highlighted areas */
-  int mLength;                    /**< length of the text in the buffer (the length
-                                   of the buffer itself must be calculated:
-                                   gapEnd - gapStart + length) */
-  char* mBuf;                     /**< allocated memory where the text is stored */
-  int mGapStart;                  /**< points to the first character of the gap */
-  int mGapEnd;                    /**< points to the first char after the gap */
-  // The hardware tab distance used by all displays for this buffer,
-  // and used in computing offsets for rectangular selection operations.
-  int mTabDist;                   /**< equiv. number of characters in a tab */
-  int mNModifyProcs;              /**< number of modify-redisplay procs attached */
-  Fl_Text_Modify_Cb *mModifyProcs;/**< procedures to call when buffer is 
-                                   modified to redisplay contents */
-  void** mCbArgs;                 /**< caller arguments for modifyProcs above */
-  int mNPredeleteProcs;           /**< number of pre-delete procs attached */
-  Fl_Text_Predelete_Cb *mPredeleteProcs; /**< procedure to call before text is deleted
-                                   from the buffer; at most one is supported. */
-  void **mPredeleteCbArgs;        /**< caller argument for pre-delete proc above */
-  int mCursorPosHint;             /**< hint for reasonable cursor position after
-                                   a buffer modification operation */
-  char mCanUndo;                  /**< if this buffer is used for attributes, it must
-                                   not do any undo calls */
-  int mPreferredGapSize;          /**< the default allocation for the text gap is 1024
-                                   bytes and should only be increased if frequent
-                                   and large changes in buffer size are expected */
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Text_Buffer.H 8148 2010-12-31 22:38:03Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Text_Display.H b/common/fltk/FL/Fl_Text_Display.H
deleted file mode 100644
index c9b91f1..0000000
--- a/common/fltk/FL/Fl_Text_Display.H
+++ /dev/null
@@ -1,480 +0,0 @@
-//
-// "$Id: Fl_Text_Display.H 8306 2011-01-24 17:04:22Z matt $"
-//
-// Header file for Fl_Text_Display class.
-//
-// Copyright 2001-2010 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
- Fl_Text_Display widget . */
-
-#ifndef FL_TEXT_DISPLAY_H
-#define FL_TEXT_DISPLAY_H
-
-#include "fl_draw.H"
-#include "Fl_Group.H"
-#include "Fl_Widget.H"
-#include "Fl_Scrollbar.H"
-#include "Fl_Text_Buffer.H"
-
-/**
- \brief Rich text display widget.
- 
- This is the FLTK text display widget. It allows the user to view multiple lines
- of text and supports highlighting and scrolling. The buffer that is displayed 
- in the widget is managed by the Fl_Text_Buffer class. A single Text Buffer
- can be displayed by multiple Text Displays.
- */
-class FL_EXPORT Fl_Text_Display: public Fl_Group {
-
-public:
-  
-  /** 
-   text display cursor shapes enumeration 
-   */
-  enum {
-    NORMAL_CURSOR,    /**< I-beam */
-    CARET_CURSOR,     /**< caret under the text */
-    DIM_CURSOR,       /**< dim I-beam */
-    BLOCK_CURSOR,     /**< unfille box under the current character */
-    HEAVY_CURSOR      /**< thick I-beam */
-  };
-  
-  /**
-   the character position is the left edge of a character, whereas 
-   the cursor is thought to be between the centers of two consecutive
-   characters.
-   */
-  enum {
-    CURSOR_POS, 
-    CHARACTER_POS
-  };
-  
-  /** 
-   drag types - they match Fl::event_clicks() so that single clicking to
-   start a collection selects by character, double clicking selects by
-   word and triple clicking selects by line.
-   */
-  enum {
-    DRAG_NONE = -2,
-    DRAG_START_DND = -1,
-    DRAG_CHAR = 0, 
-    DRAG_WORD = 1, 
-    DRAG_LINE = 2
-  };
-  
-  /**
-   wrap types - used in wrap_mode()
-   */
-  enum {
-    WRAP_NONE,      /**< don't wrap text at all */
-    WRAP_AT_COLUMN, /**< wrap text at the given text column */
-    WRAP_AT_PIXEL,  /**< wrap text at a pixel position */
-    WRAP_AT_BOUNDS  /**< wrap text so that it fits into the widget width */
-  };    
-  
-  friend void fl_text_drag_me(int pos, Fl_Text_Display* d);
-  
-  typedef void (*Unfinished_Style_Cb)(int, void *);
-  
-  /** 
-   This structure associates the color, font, andsize of a string to draw
-   with an attribute mask matching attr
-   */
-  struct Style_Table_Entry {
-    Fl_Color    color;
-    Fl_Font     font;
-    Fl_Fontsize size;
-    unsigned    attr;
-  };
-  
-  Fl_Text_Display(int X, int Y, int W, int H, const char *l = 0);
-  ~Fl_Text_Display();
-  
-  virtual int handle(int e);
-  
-  void buffer(Fl_Text_Buffer* buf);
-  
-  /**
-   Sets the current text buffer associated with the text widget.
-   Multiple text widgets can be associated with the same text buffer.
-   \param buf new text buffer
-   */
-  void buffer(Fl_Text_Buffer& buf) { buffer(&buf); }
-  
-  /**
-   Gets the current text buffer associated with the text widget.
-   Multiple text widgets can be associated with the same text buffer.
-   \return current text buffer
-   */
-  Fl_Text_Buffer* buffer() const { return mBuffer; }
-  
-  void redisplay_range(int start, int end);
-  void scroll(int topLineNum, int horizOffset);
-  void insert(const char* text);
-  void overstrike(const char* text);
-  void insert_position(int newPos);
-  
-  /** 
-   Gets the position of the text insertion cursor for text display.
-   \return insert position index into text buffer 
-   */
-  int insert_position() const { return mCursorPos; }
-  int position_to_xy(int pos, int* x, int* y) const;
-
-  int in_selection(int x, int y) const;
-  void show_insert_position();
-  
-  int move_right();
-  int move_left();
-  int move_up();  
-  int move_down();
-  int count_lines(int start, int end, bool start_pos_is_line_start) const;
-  int line_start(int pos) const;
-  int line_end(int startPos, bool startPosIsLineStart) const;
-  int skip_lines(int startPos, int nLines, bool startPosIsLineStart);
-  int rewind_lines(int startPos, int nLines);
-  void next_word(void);
-  void previous_word(void);
-  
-  void show_cursor(int b = 1);
-  
-  /**
-   Hides the text cursor.
-   */
-  void hide_cursor() { show_cursor(0); }
-  
-  void cursor_style(int style);
-  
-  /**
-   Gets the text cursor color.  
-   \return cursor color
-   */
-  Fl_Color cursor_color() const {return mCursor_color;}
-  
-  /**    
-   Sets the text cursor color.
-   \param n new cursor color
-   */
-  void cursor_color(Fl_Color n) {mCursor_color = n;}
-  
-  /**   
-   Gets the width/height of the scrollbars.
-   /return width of scrollbars
-   */
-  int scrollbar_width() const { return scrollbar_width_; }
-  
-  /**
-   Sets the width/height of the scrollbars.
-   \param W width of scrollbars
-   */
-  void scrollbar_width(int W) { scrollbar_width_ = W; }
-  
-  /**
-   Gets the scrollbar alignment type.
-   \return scrollbar alignment
-   */
-  Fl_Align scrollbar_align() const { return scrollbar_align_; }
-  
-  /**
-   Sets the scrollbar alignment type.
-   \param a new scrollbar alignment
-   */
-  void scrollbar_align(Fl_Align a) { scrollbar_align_ = a; }
-  
-  /**
-   Moves the insert position to the beginning of the current word.
-   \param pos start calculation at this index
-   \return beginning of the words
-   */
-  int word_start(int pos) const { return buffer()->word_start(pos); }
-  
-  /** 
-   Moves the insert position to the end of the current word.
-   \param pos start calculation at this index
-   \return index of first character after the end of the word
-   */
-  int word_end(int pos) const { return buffer()->word_end(pos); }
-  
-  
-  void highlight_data(Fl_Text_Buffer *styleBuffer,
-                      const Style_Table_Entry *styleTable,
-                      int nStyles, char unfinishedStyle,
-                      Unfinished_Style_Cb unfinishedHighlightCB,
-                      void *cbArg);
-  
-  int position_style(int lineStartPos, int lineLen, int lineIndex) const;
-  
-  /** 
-   \todo FIXME : get set methods pointing on shortcut_ 
-   have no effects as shortcut_ is unused in this class and derived! 
-   \return the current shortcut key
-   */
-  int shortcut() const {return shortcut_;}
-  
-  /**
-   \todo FIXME : get set methods pointing on shortcut_ 
-   have no effects as shortcut_ is unused in this class and derived! 
-   \param s the new shortcut key
-   */
-  void shortcut(int s) {shortcut_ = s;}
-  
-  /**
-   Gets the default font used when drawing text in the widget.
-   \return current text font face unless overridden by a style
-   */
-  Fl_Font textfont() const {return textfont_;}
-  
-  /**
-   Sets the default font used when drawing text in the widget.
-   \param s default text font face
-   */
-  void textfont(Fl_Font s) {textfont_ = s; mColumnScale = 0;}
-  
-  /**
-   Gets the default size of text in the widget.
-   \return current text height unless overridden by a style
-   */
-  Fl_Fontsize textsize() const {return textsize_;}
-  
-  /**
-   Sets the default size of text in the widget.
-   \param s new text size
-   */
-  void textsize(Fl_Fontsize s) {textsize_ = s; mColumnScale = 0;}
-  
-  /**
-   Gets the default color of text in the widget.
-   \return text color unless overridden by a style
-   */
-  Fl_Color textcolor() const {return textcolor_;}
-  
-  /**
-   Sets the default color of text in the widget.
-   \param n new text color
-   */
-  void textcolor(Fl_Color n) {textcolor_ = n;}
-  
-  int wrapped_column(int row, int column) const;
-  int wrapped_row(int row) const;
-  void wrap_mode(int wrap, int wrap_margin);
-  
-  virtual void resize(int X, int Y, int W, int H);
-
-  /**
-   Convert an x pixel position into a column number.
-   \param x number of pixels from the left margin
-   \return an approximate column number based on the main font
-   */
-  double x_to_col(double x) const;
-  
-  /**
-   Convert a column number into an x pixel position.
-   \param col an approximate column number based on the main font
-   \return number of pixels from the left margin to the left of an
-	   average sized character
-   */
-  double col_to_x(double col) const;
-  
-protected:
-  // Most (all?) of this stuff should only be called from resize() or
-  // draw().
-  // Anything with "vline" indicates thats it deals with currently
-  // visible lines.
-  
-  virtual void draw();
-  void draw_text(int X, int Y, int W, int H);
-  void draw_range(int start, int end);
-  void draw_cursor(int, int);
-  
-  void draw_string(int style, int x, int y, int toX, const char *string,
-                   int nChars) const;
-  
-  void draw_vline(int visLineNum, int leftClip, int rightClip,
-                  int leftCharIndex, int rightCharIndex);
-  
-  int find_x(const char *s, int len, int style, int x) const;
-  
-  enum { 
-    DRAW_LINE, 
-    FIND_INDEX,
-    FIND_INDEX_FROM_ZERO,
-    GET_WIDTH 
-  };
-  
-  int handle_vline(int mode, 
-                   int lineStart, int lineLen, int leftChar, int rightChar,
-                   int topClip, int bottomClip,
-                   int leftClip, int rightClip) const;
-  
-  void draw_line_numbers(bool clearAll);
-  
-  void clear_rect(int style, int x, int y, int width, int height) const;
-  void display_insert();
-  
-  void offset_line_starts(int newTopLineNum);
-  
-  void calc_line_starts(int startLine, int endLine);
-  
-  void update_line_starts(int pos, int charsInserted, int charsDeleted,
-                          int linesInserted, int linesDeleted, int *scrolled);
-  
-  void calc_last_char();
-  
-  int position_to_line( int pos, int* lineNum ) const;
-  double string_width(const char* string, int length, int style) const;
-  
-  static void scroll_timer_cb(void*);
-  
-  static void buffer_predelete_cb(int pos, int nDeleted, void* cbArg);
-  static void buffer_modified_cb(int pos, int nInserted, int nDeleted,
-                                 int nRestyled, const char* deletedText,
-                                 void* cbArg);
-  
-  static void h_scrollbar_cb(Fl_Scrollbar* w, Fl_Text_Display* d);
-  static void v_scrollbar_cb( Fl_Scrollbar* w, Fl_Text_Display* d);
-  void update_v_scrollbar();
-  void update_h_scrollbar();
-  int measure_vline(int visLineNum) const;
-  int longest_vline() const;
-  int empty_vlines() const;
-  int vline_length(int visLineNum) const;
-  int xy_to_position(int x, int y, int PosType = CHARACTER_POS) const;
-  
-  void xy_to_rowcol(int x, int y, int* row, int* column,
-                    int PosType = CHARACTER_POS) const;
-  void maintain_absolute_top_line_number(int state);
-  int get_absolute_top_line_number() const;
-  void absolute_top_line_number(int oldFirstChar);
-  int maintaining_absolute_top_line_number() const;
-  void reset_absolute_top_line_number();
-  int position_to_linecol(int pos, int* lineNum, int* column) const;
-  int scroll_(int topLineNum, int horizOffset);
-  
-  void extend_range_for_styles(int* start, int* end);
-  
-  void find_wrap_range(const char *deletedText, int pos, int nInserted,
-                       int nDeleted, int *modRangeStart, int *modRangeEnd,
-                       int *linesInserted, int *linesDeleted);
-  void measure_deleted_lines(int pos, int nDeleted);
-  void wrapped_line_counter(Fl_Text_Buffer *buf, int startPos, int maxPos,
-                            int maxLines, bool startPosIsLineStart,
-                            int styleBufOffset, int *retPos, int *retLines,
-                            int *retLineStart, int *retLineEnd,
-                            bool countLastLineMissingNewLine = true) const;
-  void find_line_end(int pos, bool start_pos_is_line_start, int *lineEnd,
-                     int *nextLineStart) const;
-  double measure_proportional_character(const char *s, int colNum, int pos) const;
-  int wrap_uses_character(int lineEndPos) const;
-  
-  int damage_range1_start, damage_range1_end;
-  int damage_range2_start, damage_range2_end;
-  int mCursorPos;
-  int mCursorOn;
-  int mCursorOldY;              /* Y pos. of cursor for blanking */
-  int mCursorToHint;            /* Tells the buffer modified callback
-                                 where to move the cursor, to reduce
-                                 the number of redraw calls */
-  int mCursorStyle;             /* One of enum cursorStyles above */
-  int mCursorPreferredXPos;     /* Pixel position for vert. cursor movement */
-  int mNVisibleLines;           /* # of visible (displayed) lines */
-  int mNBufferLines;            /* # of newlines in the buffer */
-  Fl_Text_Buffer* mBuffer;      /* Contains text to be displayed */
-  Fl_Text_Buffer* mStyleBuffer; /* Optional parallel buffer containing
-                                 color and font information */
-  int mFirstChar, mLastChar;    /* Buffer positions of first and last
-                                 displayed character (lastChar points
-                                 either to a newline or one character
-                                 beyond the end of the buffer) */
-  int mContinuousWrap;          /* Wrap long lines when displaying */
-  int mWrapMarginPix; 	    	/* Margin in # of pixels for
-                                 wrapping in continuousWrap mode */
-  int* mLineStarts;
-  int mTopLineNum;              /* Line number of top displayed line
-                                 of file (first line of file is 1) */
-  int mAbsTopLineNum;           /* In continuous wrap mode, the line
-                                  number of the top line if the text
-                                  were not wrapped (note that this is
-                                  only maintained as needed). */
-  int mNeedAbsTopLineNum;       /* Externally settable flag to continue
-                                 maintaining absTopLineNum even if
-                                 it isn't needed for line # display */
-  int mHorizOffset;             /* Horizontal scroll pos. in pixels */
-  int mTopLineNumHint;          /* Line number of top displayed line
-                                 of file (first line of file is 1) */
-  int mHorizOffsetHint;         /* Horizontal scroll pos. in pixels */
-  int mNStyles;                 /* Number of entries in styleTable */
-  const Style_Table_Entry *mStyleTable; /* Table of fonts and colors for
-                                         coloring/syntax-highlighting */
-  char mUnfinishedStyle;        /* Style buffer entry which triggers
-                                 on-the-fly reparsing of region */
-  Unfinished_Style_Cb mUnfinishedHighlightCB; /* Callback to parse "unfinished" */
-  /* regions */
-  void* mHighlightCBArg;        /* Arg to unfinishedHighlightCB */
-  
-  int mMaxsize;
-  
-  int mSuppressResync;          /* Suppress resynchronization of line
-                                 starts during buffer updates */
-  int mNLinesDeleted;           /* Number of lines deleted during
-                                 buffer modification (only used
-                                 when resynchronization is suppressed) */
-  int mModifyingTabDistance;    /* Whether tab distance is being
-                                 modified */
-  
-  mutable double mColumnScale; /* Width in pixels of an average character. This
-                                 value is calculated as needed (lazy eval); it 
-                                 needs to be mutable so that it can be calculated
-                                 within a method marked as "const" */
-  
-  Fl_Color mCursor_color;
-  
-  Fl_Scrollbar* mHScrollBar;
-  Fl_Scrollbar* mVScrollBar;
-  int scrollbar_width_;
-  Fl_Align scrollbar_align_;
-  int dragPos, dragType, dragging;
-  int display_insert_position_hint;
-  struct { int x, y, w, h; } text_area;
-  
-  int shortcut_;
-  
-  Fl_Font textfont_;
-  Fl_Fontsize textsize_;
-  Fl_Color textcolor_;
-  
-  // The following are not presently used from the original NEdit code,
-  // but are being put here so that future versions of Fl_Text_Display
-  // can implement line numbers without breaking binary compatibility.
-  
-  /* Line number margin and width */
-  int mLineNumLeft, mLineNumWidth;
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Text_Display.H 8306 2011-01-24 17:04:22Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Text_Editor.H b/common/fltk/FL/Fl_Text_Editor.H
deleted file mode 100644
index 40f9e6b..0000000
--- a/common/fltk/FL/Fl_Text_Editor.H
+++ /dev/null
@@ -1,141 +0,0 @@
-//
-// "$Id: Fl_Text_Editor.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Header file for Fl_Text_Editor class.
-//
-// Copyright 2001-2010 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Text_Editor widget . */
-
-
-#ifndef FL_TEXT_EDITOR_H
-#define FL_TEXT_EDITOR_H
-
-#include "Fl_Text_Display.H"
-
-// key will match in any state
-#define FL_TEXT_EDITOR_ANY_STATE  (-1L)
-
-/**
-  This is the FLTK text editor widget. It allows the user to
-  edit multiple lines of text and supports highlighting and
-  scrolling. The buffer that is displayed in the widget is managed
-  by the Fl_Text_Buffer
-  class.
-*/
-class FL_EXPORT Fl_Text_Editor : public Fl_Text_Display {
-  public:
-    /** Key function binding callback type */
-    typedef int (*Key_Func)(int key, Fl_Text_Editor* editor);
-
-    /** Simple linked list associating a key/state to a function */
-    struct Key_Binding {
-      int          key;		///< the key pressed
-      int          state;	///< the state of key modifiers
-      Key_Func     function;	///< associated function
-      Key_Binding* next;	///< next key binding in the list
-    };
-
-    Fl_Text_Editor(int X, int Y, int W, int H, const char* l = 0);
-    ~Fl_Text_Editor() { remove_all_key_bindings(); }
-    virtual int handle(int e);
-    /**
-	Sets the current insert mode; if non-zero, new text
-	is inserted before the current cursor position. Otherwise, new
-	text replaces text at the current cursor position.
-    */
-    void insert_mode(int b) { insert_mode_ = b; }
-    /**
-	Gets the current insert mode; if non-zero, new text
-	is inserted before the current cursor position. Otherwise, new
-	text replaces text at the current cursor position.
-    */
-    int insert_mode() { return insert_mode_; }
-
-    void add_key_binding(int key, int state, Key_Func f, Key_Binding** list);
-    /** Adds a key of state "state" with the function "function" */
-    void add_key_binding(int key, int state, Key_Func f)
-      { add_key_binding(key, state, f, &key_bindings); }
-    void remove_key_binding(int key, int state, Key_Binding** list);
-    /** Removes the key binding associated with the key "key" of state "state". */
-    void remove_key_binding(int key, int state)
-      { remove_key_binding(key, state, &key_bindings); }
-    void remove_all_key_bindings(Key_Binding** list);
-    /** Removes all of the key bindings associated with the text editor or list. */
-    void remove_all_key_bindings() { remove_all_key_bindings(&key_bindings); }
-    void add_default_key_bindings(Key_Binding** list);
-    Key_Func bound_key_function(int key, int state, Key_Binding* list);
-    /**  Returns the function associated with a key binding. */
-    Key_Func bound_key_function(int key, int state)
-      { return bound_key_function(key, state, key_bindings); }
-    /**  Sets the default key function for unassigned keys. */
-    void default_key_function(Key_Func f) { default_key_function_ = f; }
-
-    // functions for the built in default bindings
-    static int kf_default(int c, Fl_Text_Editor* e);
-    static int kf_ignore(int c, Fl_Text_Editor* e);
-    static int kf_backspace(int c, Fl_Text_Editor* e);
-    static int kf_enter(int c, Fl_Text_Editor* e);
-    static int kf_move(int c, Fl_Text_Editor* e);
-    static int kf_shift_move(int c, Fl_Text_Editor* e);
-    static int kf_ctrl_move(int c, Fl_Text_Editor* e);
-    static int kf_c_s_move(int c, Fl_Text_Editor* e);
-    static int kf_meta_move(int c, Fl_Text_Editor* e);
-    static int kf_m_s_move(int c, Fl_Text_Editor* e);
-    static int kf_home(int, Fl_Text_Editor* e);
-    static int kf_end(int c, Fl_Text_Editor* e);
-    static int kf_left(int c, Fl_Text_Editor* e);
-    static int kf_up(int c, Fl_Text_Editor* e);
-    static int kf_right(int c, Fl_Text_Editor* e);
-    static int kf_down(int c, Fl_Text_Editor* e);
-    static int kf_page_up(int c, Fl_Text_Editor* e);
-    static int kf_page_down(int c, Fl_Text_Editor* e);
-    static int kf_insert(int c, Fl_Text_Editor* e);
-    static int kf_delete(int c, Fl_Text_Editor* e);
-    static int kf_copy(int c, Fl_Text_Editor* e);
-    static int kf_cut(int c, Fl_Text_Editor* e);
-    static int kf_paste(int c, Fl_Text_Editor* e);
-    static int kf_select_all(int c, Fl_Text_Editor* e);
-    static int kf_undo(int c, Fl_Text_Editor* e);
-
-  protected:
-    int handle_key();
-    void maybe_do_callback();
-
-#ifndef FL_DOXYGEN
-    int insert_mode_;
-    Key_Binding* key_bindings;
-    static Key_Binding* global_key_bindings;
-    Key_Func default_key_function_;
-#endif
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Text_Editor.H 7903 2010-11-28 21:06:39Z matt $".
-//
-
diff --git a/common/fltk/FL/Fl_Tile.H b/common/fltk/FL/Fl_Tile.H
deleted file mode 100644
index c83d2ec..0000000
--- a/common/fltk/FL/Fl_Tile.H
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// "$Id: Fl_Tile.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Tile header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Tile widget . */
-
-#ifndef Fl_Tile_H
-#define Fl_Tile_H
-
-#include "Fl_Group.H"
-
-/**
-  The Fl_Tile class lets you resize the children by dragging
-  the border between them:
-  
-  <P ALIGN=CENTER>\image html Fl_Tile.png </P> 
-  \image latex  Fl_Tile.png "Fl_Tile" width=4cm
-  
-  <P>For the tiling to work correctly, the children of an 
-  Fl_Tile must cover the entire area of the widget, but not
-  overlap. This means that all children must touch each 
-  other at their edges, and no gaps can't be left inside the 
-  Fl_Tile.
-  
-  <P>Fl_Tile does not normailly draw any graphics of its own.
-  The "borders" which can be seen in the snapshot above
-  are actually part of the children. Their boxtypes have been set
-  to FL_DOWN_BOX creating the impression of 
-  "ridges" where the boxes touch. What you see are 
-  actually two adjacent FL_DOWN_BOX's drawn next to each 
-  other. All neighboring widgets share the same edge - the widget's 
-  thick borders make it appear as though the widgets aren't actually
-  touching, but they are. If the edges of adjacent widgets do not
-  touch, then it will be impossible to drag the corresponding
-  edges.</P>
-  
-  <P>Fl_Tile allows objects to be resized to zero dimensions.
-  To prevent this you can use the resizable() to limit where
-  corners can be dragged to.</P>
-  
-  <P>Even though objects can be resized to zero sizes, they must
-  initially have non-zero sizes so the Fl_Tile can figure out
-  their layout. If desired, call position() after creating the
-  children but before displaying the window to set the borders where you
-  want.
-
-  <P>Note on resizable(Fl_Widget &w) :
-  The "resizable" child widget (which should be invisible) limits where the
-  border can be dragged to.  If you don't set it, it will be possible to
-  drag the borders right to the edge, and thus resize objects on the edge
-  to zero width or height.  The resizable() widget is not
-  resized by dragging any borders. See also void Fl_Group::resizable(Fl_Widget &w)
-
-*/
-class FL_EXPORT Fl_Tile : public Fl_Group {
-public:
-  int handle(int);
-  /**
-    Creates a new Fl_Tile widget using the given position, size,
-    and label string. The default boxtype is FL_NO_BOX.
-    
-    <P>The destructor <I>also deletes all the children</I>. This allows a
-    whole tree to be deleted at once, without having to keep a pointer to
-    all the children in the user code. A kludge has been done so the 
-    Fl_Tile and all of it's children can be automatic (local)
-    variables, but you must declare the Fl_Tile <I>first</I>, so
-    that it is destroyed last.
-  */
-  Fl_Tile(int X,int Y,int W,int H,const char*l=0) : Fl_Group(X,Y,W,H,l) {}
-  void resize(int, int, int, int);
-  void position(int, int, int, int);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Tile.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Tiled_Image.H b/common/fltk/FL/Fl_Tiled_Image.H
deleted file mode 100644
index d169379..0000000
--- a/common/fltk/FL/Fl_Tiled_Image.H
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// "$Id: Fl_Tiled_Image.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Tiled image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Tiled_Image widget . */
-
-#ifndef Fl_Tiled_Image_H
-#  define Fl_Tiled_Image_H
-
-#  include "Fl_Image.H"
-
-
-/**
-  This class supports tiling of images
-  over a specified area. The source (tile) image is <B>not</B>
-  copied unless you call the color_average(),
-  desaturate(),
-  or inactive()
-  methods.
-*/
-class FL_EXPORT Fl_Tiled_Image : public Fl_Image {
-  protected:
-
-  Fl_Image	*image_;		// The image that is shared
-  int		alloc_image_;		// Did we allocate this image?
-
-  public:
-
-  Fl_Tiled_Image(Fl_Image *i, int W = 0, int H = 0);
-  virtual ~Fl_Tiled_Image();
-
-  virtual Fl_Image *copy(int W, int H);
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void color_average(Fl_Color c, float i);
-  virtual void desaturate();
-  virtual void draw(int X, int Y, int W, int H, int cx, int cy);
-  void draw(int X, int Y) { draw(X, Y, w(), h(), 0, 0); }
-  /** Gets The image that is shared */ 
-  Fl_Image *image() { return image_; }
-};
-
-#endif // !Fl_Tiled_Image_H
-
-//
-// End of "$Id: Fl_Tiled_Image.H 7903 2010-11-28 21:06:39Z matt $"
-//
diff --git a/common/fltk/FL/Fl_Timer.H b/common/fltk/FL/Fl_Timer.H
deleted file mode 100644
index 952273f..0000000
--- a/common/fltk/FL/Fl_Timer.H
+++ /dev/null
@@ -1,87 +0,0 @@
-//
-// "$Id: Fl_Timer.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Timer header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Timer widget . */
-
-#ifndef Fl_Timer_H
-#define Fl_Timer_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-// values for type():
-#define FL_NORMAL_TIMER		0
-#define FL_VALUE_TIMER		1
-#define FL_HIDDEN_TIMER		2
-
-/**
-  This is provided only to emulate the Forms Timer widget.  It works by
-  making a timeout callback every 1/5 second.  This is wasteful and
-  inaccurate if you just want something to happen a fixed time in the
-  future.  You should directly call 
-  Fl::add_timeout() instead.
-*/
-class FL_EXPORT Fl_Timer : public Fl_Widget {
-  static void stepcb(void *);
-  void step();
-  char on, direction_;
-  double delay, total;
-  long lastsec,lastusec;
-protected:
-  void draw();
-public:
-  int handle(int);
-  Fl_Timer(uchar t,int x,int y,int w,int h, const char *l);
-  ~Fl_Timer();
-  void value(double);
-  /** See void Fl_Timer::value(double)  */
-  double value() const {return delay>0.0?delay:0.0;}
-  /**
-    Gets or sets the direction of the timer.  If the direction is zero
-    then the timer will count up, otherwise it will count down from the
-    initial value().
-  */
-  char direction() const {return direction_;}
-  /**
-    Gets or sets the direction of the timer.  If the direction is zero
-    then the timer will count up, otherwise it will count down from the
-    initial value().
-  */
-  void direction(char d) {direction_ = d;}
-  /**    Gets or sets whether the timer is suspended.  */
-  char suspended() const {return !on;}
-  void suspended(char d);
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Timer.H 7903 2010-11-28 21:06:39Z matt $".
-//
-
diff --git a/common/fltk/FL/Fl_Toggle_Button.H b/common/fltk/FL/Fl_Toggle_Button.H
deleted file mode 100644
index eaf821b..0000000
--- a/common/fltk/FL/Fl_Toggle_Button.H
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// "$Id: Fl_Toggle_Button.H 8022 2010-12-12 23:21:03Z AlbrechtS $"
-//
-// Toggle button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Toggle_Button widget . */
-
-#ifndef Fl_Toggle_Button_H
-#define Fl_Toggle_Button_H
-
-#include "Fl_Button.H"
-
-/**
-  The toggle button is a push button that needs to be clicked once 
-  to toggle on, and one more time to toggle off.
-  The Fl_Toggle_Button subclass displays the "on" state by
-  drawing a pushed-in button.</P>
-  <P>Buttons generate callbacks when they are clicked by the user.  You
-  control exactly when and how by changing the values for type()
-  and when().
-*/
-class FL_EXPORT Fl_Toggle_Button : public Fl_Button {
-public:
-  /**
-    Creates a new Fl_Toggle_Button widget using the given
-    position, size, and label string.
-    <P>The inherited destructor deletes the toggle button.
-  */
-    Fl_Toggle_Button(int X,int Y,int W,int H,const char *l=0)
-	: Fl_Button(X,Y,W,H,l) {type(FL_TOGGLE_BUTTON);}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Toggle_Button.H 8022 2010-12-12 23:21:03Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Toggle_Light_Button.H b/common/fltk/FL/Fl_Toggle_Light_Button.H
deleted file mode 100644
index 8d446d8..0000000
--- a/common/fltk/FL/Fl_Toggle_Light_Button.H
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// "$Id: Fl_Toggle_Light_Button.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Toggle light button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// provided for back-compatibility only
-
-#ifndef Fl_Toggle_Light_Button
-#include "Fl_Light_Button.H"
-#define Fl_Toggle_Light_Button Fl_Light_Button
-#endif
-
-//
-// End of "$Id: Fl_Toggle_Light_Button.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Toggle_Round_Button.H b/common/fltk/FL/Fl_Toggle_Round_Button.H
deleted file mode 100644
index 3fd892b..0000000
--- a/common/fltk/FL/Fl_Toggle_Round_Button.H
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// "$Id: Fl_Toggle_Round_Button.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Toggle round button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// provided for back-compatibility only
-
-#ifndef Fl_Toggle_Round_Button
-#include "Fl_Round_Button.H"
-#define Fl_Toggle_Round_Button Fl_Round_Button
-#endif
-
-//
-// End of "$Id: Fl_Toggle_Round_Button.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Tooltip.H b/common/fltk/FL/Fl_Tooltip.H
deleted file mode 100644
index 7115379..0000000
--- a/common/fltk/FL/Fl_Tooltip.H
+++ /dev/null
@@ -1,114 +0,0 @@
-//
-// "$Id: Fl_Tooltip.H 8405 2011-02-08 20:59:46Z manolo $"
-//
-// Tooltip header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Tooltip widget . */
-
-#ifndef Fl_Tooltip_H
-#define Fl_Tooltip_H
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-
-/**
-  The Fl_Tooltip class provides tooltip support for
-  all FLTK widgets. It contains only static methods.
-*/
-class FL_EXPORT Fl_Tooltip {
-public:
-  /**    Gets the tooltip delay. The default delay is 1.0 seconds.  */
-  static float delay() { return delay_; }
-  /**    Sets the tooltip delay. The default delay is 1.0 seconds.  */
-  static void delay(float f) { delay_ = f; }
-  /**
-    Gets the tooltip hover delay, the delay between tooltips.
-    The default delay is 0.2 seconds.
-  */
-  static float hoverdelay() { return hoverdelay_; }
-  /**
-    Sets the tooltip hover delay, the delay between tooltips.
-    The default delay is 0.2 seconds.
-  */
-  static void hoverdelay(float f) { hoverdelay_ = f; }
-  /**    Returns non-zero if tooltips are enabled.  */
-  static int enabled() { return Fl::option(Fl::OPTION_SHOW_TOOLTIPS); }
-  /**    Enables tooltips on all widgets (or disables if <i>b</i> is false).  */
-  static void enable(int b = 1) { Fl::option(Fl::OPTION_SHOW_TOOLTIPS, (b!=0));}
-  /**    Same as enable(0), disables tooltips on all widgets.  */
-  static void disable() { enable(0); }
-  static void (*enter)(Fl_Widget* w);
-  static void enter_area(Fl_Widget* w, int X, int Y, int W, int H, const char* tip);
-  static void (*exit)(Fl_Widget *w);
-  /** Gets the current widget target */
-  static Fl_Widget* current() {return widget_;}
-  static void current(Fl_Widget*);
-
-  /**    Gets the typeface for the tooltip text.  */
-  static Fl_Font font() { return font_; }
-  /**    Sets the typeface for the tooltip text.  */
-  static void font(Fl_Font i) { font_ = i; }
-  /**    Gets the size of the tooltip text.  */
-  static Fl_Fontsize size() { return (size_ == -1 ? FL_NORMAL_SIZE : size_); }
-  /**    Sets the size of the tooltip text.  */
-  static void size(Fl_Fontsize s) { size_ = s; }
-  /** Gets the background color for tooltips. The default background color is a pale yellow.  */
-  static Fl_Color color() { return color_; }
-  /** Sets the background color for tooltips. The default background color is a pale yellow.  */
-  static void color(Fl_Color c) { color_ = c; }
-  /** Gets the color of the text in the tooltip. The default is  black. */
-  static Fl_Color textcolor() { return textcolor_; }
-  /** Sets the color of the text in the tooltip. The default is  black. */
-  static void textcolor(Fl_Color c) { textcolor_ = c; }
-#ifdef __APPLE__
-  // the unique tooltip window
-  static Fl_Window* current_window(void);
-#endif
-
-  // These should not be public, but Fl_Widget::tooltip() needs them...
-  // fabien: made it private with only a friend function access
-private:
-  friend void Fl_Widget::tooltip(const char *);
-  friend void Fl_Widget::copy_tooltip(const char *);
-  static void enter_(Fl_Widget* w);
-  static void exit_(Fl_Widget *w);
-  static void set_enter_exit_once_();
-
-private:
-  static float delay_; //!< delay before a tooltip is shown
-  static float hoverdelay_; //!< delay between tooltips
-  static Fl_Color color_;
-  static Fl_Color textcolor_;
-  static Fl_Font font_;
-  static Fl_Fontsize size_;
-  static Fl_Widget* widget_; //!< Keeps track of the current target widget
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Tooltip.H 8405 2011-02-08 20:59:46Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_Tree.H b/common/fltk/FL/Fl_Tree.H
deleted file mode 100644
index cce11e7..0000000
--- a/common/fltk/FL/Fl_Tree.H
+++ /dev/null
@@ -1,1016 +0,0 @@
-//
-// "$Id: Fl_Tree.H 8632 2011-05-04 02:59:50Z greg.ercolano $"
-//
-
-#ifndef FL_TREE_H
-#define FL_TREE_H
-
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Scrollbar.H>
-#include <FL/fl_draw.H>
-
-#include <FL/Fl_Tree_Item.H>
-#include <FL/Fl_Tree_Prefs.H>
-
-//////////////////////
-// FL/Fl_Tree.H
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-
-///
-/// \file
-/// \brief This file contains the definitions of the Fl_Tree class
-///
-
-/// \class Fl_Tree
-///
-/// \brief Tree widget.
-///
-///     \image html tree-simple.png "Fl_Tree example program"
-///     \image latex tree-simple.png "Fl_Tree example program" width=4cm
-///
-/// \code
-///     Fl_Tree                                         // Top level widget
-///        |--- Fl_Tree_Item                            // Items in the tree
-///        |--- Fl_Tree_Prefs                           // Preferences for the tree
-///                  |--- Fl_Tree_Connector (enum)      // Connection modes
-///                  |--- Fl_Tree_Select (enum)         // Selection modes
-///                  |--- Fl_Tree_Sort (enum)           // Sort behavior
-/// \endcode
-///
-///     Similar to Fl_Browser, Fl_Tree is a browser of Fl_Tree_Item's, which is arranged
-///     in a parented hierarchy, or 'tree'. Subtrees can be expanded or closed. Items can be
-///     added, deleted, inserted, sorted and re-ordered.
-///
-///     The tree items may also contain other FLTK widgets, like buttons, input fields,
-///     or even "custom" widgets.
-///
-///     The callback() is invoked depending on the value of when():
-///
-///         - FL_WHEN_RELEASE -- callback invoked when left mouse button is released on an item
-///         - FL_WHEN_CHANGED -- callback invoked when left mouse changes selection state
-///
-///     The simple way to define a tree:
-/// \code
-///    #include <FL/Fl_Tree.H>
-///    [..]
-///    Fl_Tree tree(X,Y,W,H);
-///    tree.begin();
-///      tree.add("Flintstones/Fred");
-///      tree.add("Flintstones/Wilma");
-///      tree.add("Flintstones/Pebbles");
-///      tree.add("Simpsons/Homer");
-///      tree.add("Simpsons/Marge");
-///      tree.add("Simpsons/Bart");
-///      tree.add("Simpsons/Lisa");
-///    tree.end();
-/// \endcode
-///     
-///     Items can be added with add(),
-///     removed with remove(),
-///     completely cleared with clear(),
-///     inserted with insert() and insert_above(),
-///     selected/deselected with select() and deselect(),
-///     open/closed with open() and closed().
-///     Children of an item can be swapped around with Fl_Tree_Item::swap_children(),
-///     sorting can be controlled when items are add()ed via sortorder().
-///     You can walk the entire tree with first() and next().
-///     You can walk selected items with first_selected_item() and
-///     next_selected_item().
-///     Items can be found by their pathname using find_item(const char*),
-///     and an item's pathname can be found with item_pathname().
-///     The selected items' colors are controlled by selection_color() (inherited from Fl_Widget).
-///
-///     The tree can have different selection behaviors controlled by selectmode().
-///
-///     FLTK widgets (including custom widgets) can be assigned to tree items via
-///     Fl_Tree_Item::widget().
-///
-///     Icons for individual items can be changed with
-///     Fl_Tree_Item::openicon(), 
-///     Fl_Tree_Item::closeicon(),
-///     Fl_Tree_Item::usericon().
-///
-///     Various default preferences can be globally manipulated via Fl_Tree_Prefs, 
-///     including colors, margins, icons, connection lines. 
-///
-///     The tree's callback() will be invoked when items change state or are open/closed.
-///     when() controls when mouse/keyboard events invoke the callback.
-///     callback_item() and callback_reason() can be used to determine the cause of the callback. eg:
-///
-/// \code
-/// void MyTreeCallback(Fl_Widget *w, void *data) {
-///   Fl_Tree      *tree = (Fl_Tree*)w;
-///   Fl_Tree_Item *item = (Fl_Tree_Item*)tree->callback_item();	// get selected item
-///   switch ( tree->callback_reason() ) {
-///     case FL_TREE_REASON_SELECTED: [..]
-///     case FL_TREE_REASON_DESELECTED: [..]
-///     case FL_TREE_REASON_OPENED: [..]
-///     case FL_TREE_REASON_CLOSED: [..]
-///   }
-/// \endcode
-///
-///     To get the item's full menu pathname, you can use Fl_Tree_Item::item_pathname(), eg:
-///
-/// \code
-///   char pathname[256] = "???";
-///   tree->item_pathname(pathname, sizeof(pathname), item);		// eg. "Parent/Child/Item"
-/// \endcode
-///
-///     To walk all the items of the tree from top to bottom:
-/// \code
-/// // Walk all the items in the tree, and print their labels
-/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) ) {
-///     printf("Item: %s\n", item->label());
-/// }
-/// \endcode
-///
-///     To recursively walk all the children of a particular item, 
-///     define a function that uses recursion:
-///     \code
-/// // Find all of the item's children and print an indented report of their labels
-/// void my_print_all_children(Fl_Tree_Item *item, int indent=0) {
-///     for ( int t=0; t<item->children(); t++ ) {
-///         printf("%*s Item: %s\n", indent, "", item->child(t)->label());
-///         my_print_all_children(item->child(t), indent+4);   // recurse
-///     }
-/// }
-///     \endcode
-///
-///     To change the default label font and color for creating new items:
-/// \code
-///  tree = new Fl_Tree(..);
-///  tree->item_labelfont(FL_COURIER);	// Use Courier font for all new items
-///  tree->item_labelfgcolor(FL_RED);	// Use red color for labels of all new items
-///  [..]
-///  // Now create the items in the tree using the above defaults.
-///  tree->add("Aaa");
-///  tree->add("Bbb");
-///  [..]
-/// \endcode
-///
-///     To change the font and color of all items in the tree:
-/// \code
-/// // Change the font and color of all items currently in the tree
-/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) ) {
-///     item->labelfont(FL_COURIER);
-///     item->labelcolor(FL_RED);
-/// }
-/// \endcode
-///
-///     The following image shows the tree's various visual elements
-///     and the methods that control them:
-///     
-///     \image html tree-elements.png
-///     \image latex tree-elements.png "Fl_Tree dimensions" width=6cm
-///
-
-/// \enum Fl_Tree_Reason
-/// The reason the callback was invoked.
-///
-enum Fl_Tree_Reason {
-  FL_TREE_REASON_NONE=0,	///< unknown reason
-  FL_TREE_REASON_SELECTED,	///< an item was selected
-  FL_TREE_REASON_DESELECTED,	///< an item was de-selected
-  FL_TREE_REASON_OPENED,	///< an item was opened
-  FL_TREE_REASON_CLOSED		///< an item was closed
-};
-
-
-class FL_EXPORT Fl_Tree : public Fl_Group {
-  Fl_Tree_Item  *_root;				// can be null!
-  Fl_Tree_Item  *_item_focus;			// item that has focus box
-  Fl_Tree_Item  *_callback_item;		// item invoked during callback (can be NULL)
-  Fl_Tree_Reason _callback_reason;		// reason for the callback
-  Fl_Tree_Prefs  _prefs;			// all the tree's settings
-  int            _scrollbar_size;		// size of scrollbar trough
-
-protected:
-  /// Vertical scrollbar
-  Fl_Scrollbar *_vscroll;
-  
-protected:
-  void item_clicked(Fl_Tree_Item* val);
-  /// Do the callback for the item, setting the item and reason
-  void do_callback_for_item(Fl_Tree_Item* item, Fl_Tree_Reason reason) {
-    callback_reason(reason);
-    callback_item(item);
-    do_callback((Fl_Widget*)this, user_data());
-  }
-  Fl_Tree_Item *next_visible_item(Fl_Tree_Item *start, int dir);
-
-public:
-  Fl_Tree(int X, int Y, int W, int H, const char *L=0);
-  ~Fl_Tree();
-  int handle(int e);
-  void draw();
-  
-  ///////////////////////
-  // root methods
-  ///////////////////////
-  
-  /// Set the label for the root item. 
-  ///
-  /// Makes an internally managed copy of 'new_label'.
-  ///
-  void root_label(const char *new_label) {
-    if ( ! _root ) return;
-    _root->label(new_label);
-  }
-  /// Returns the root item.
-  Fl_Tree_Item* root() {
-    return(_root);
-  }
-  
-  ////////////////////////////////
-  // Item creation/removal methods
-  ////////////////////////////////
-  Fl_Tree_Item *add(const char *path);
-  Fl_Tree_Item* add(Fl_Tree_Item *item, const char *name);
-  Fl_Tree_Item *insert_above(Fl_Tree_Item *above, const char *name);
-  Fl_Tree_Item* insert(Fl_Tree_Item *item, const char *name, int pos);
-  
-  /// Remove the specified \p item from the tree.
-  /// \p item may not be NULL.
-  /// If it has children, all those are removed too.
-  /// \returns 0 if done, -1 if 'item' not found.
-  ///
-  int remove(Fl_Tree_Item *item) {
-    if ( item == _root ) {
-      clear();
-    } else {
-      Fl_Tree_Item *parent = item->parent();		// find item's parent
-      if ( ! parent ) return(-1);
-      parent->remove_child(item);			// remove child + children
-    }
-    return(0);
-  } 
-  /// Clear all children from the tree.
-  /// The tree will be left completely empty.
-  ///
-  void clear() {
-    if ( ! _root ) return;
-    _root->clear_children();
-    delete _root; _root = 0;
-  } 
-  /// Clear all the children of a particular node in the tree specified by \p item.
-  /// Item may not be NULL.
-  ///
-  void clear_children(Fl_Tree_Item *item) {
-    if ( item->has_children() ) {
-      item->clear_children();
-      redraw();				// redraw only if there were children to clear
-    }
-  } 
-  
-  ////////////////////////
-  // Item lookup methods
-  ////////////////////////
-  Fl_Tree_Item *find_item(const char *path);
-  const Fl_Tree_Item *find_item(const char *path) const;
-  int item_pathname(char *pathname, int pathnamelen, const Fl_Tree_Item *item) const;
-
-  const Fl_Tree_Item *find_clicked() const;
-  
-  /// Return the item that was last clicked.
-  ///
-  /// Valid only from within the callback().
-  ///
-  /// Deprecated: use callback_item() instead.
-  ///
-  /// \returns the item clicked, or 0 if none.
-  ///          0 may also be used to indicate several items were clicked/changed.
-  ///
-  Fl_Tree_Item *item_clicked() {
-    return(_callback_item);
-  }
-  Fl_Tree_Item *first();
-  Fl_Tree_Item *next(Fl_Tree_Item *item=0);
-  Fl_Tree_Item *prev(Fl_Tree_Item *item=0);
-  Fl_Tree_Item *last();
-  Fl_Tree_Item *first_selected_item();
-  Fl_Tree_Item *next_selected_item(Fl_Tree_Item *item=0);
-
-  //////////////////////////
-  // Item open/close methods
-  //////////////////////////
-  
-  /// Open the specified 'item'.
-  /// This causes the item's children (if any) to be shown.
-  /// Handles redrawing if anything was actually changed.
-  /// Invokes the callback depending on the value of optional parameter \p docallback.
-  ///
-  /// The callback can use callback_item() and callback_reason() respectively to determine 
-  /// the item changed and the reason the callback was called.
-  ///
-  /// \param[in] item -- the item to be opened. Must not be NULL.
-  /// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-  ///     -   0 - callback() is not invoked
-  ///     -   1 - callback() is invoked if item changed,
-  ///             callback_reason() will be FL_TREE_REASON_OPENED
-  /// \returns
-  ///     -   1 -- item was opened
-  ///     -   0 -- item was already open, no change
-  ///
-  /// \see open(), close(), is_open(), is_close(), callback_item(), callback_reason()
-  ///
-  int open(Fl_Tree_Item *item, int docallback=1) {
-    if ( item->is_open() ) return(0);
-    item->open();
-    redraw();
-    if ( docallback ) {
-      do_callback_for_item(item, FL_TREE_REASON_OPENED);
-    }
-    return(1);
-  }
-  /// Opens the item specified by \p path (eg: "Parent/child/item").
-  /// This causes the item's children (if any) to be shown.
-  /// Handles redrawing if anything was actually changed.
-  /// Invokes the callback depending on the value of optional parameter \p docallback.
-  ///
-  /// Items or submenus that themselves contain slashes ('/' or '\')
-  /// should be escaped, e.g. open("Holidays/12\\/25\//2010").
-  ///
-  /// The callback can use callback_item() and callback_reason() respectively to determine 
-  /// the item changed and the reason the callback was called.
-  ///
-  /// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-  /// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-  ///     -   0 - callback() is not invoked
-  ///     -   1 - callback() is invoked if item changed,
-  ///             callback_reason() will be FL_TREE_REASON_OPENED
-  /// \returns
-  ///     -   1 -- OK: item opened
-  ///     -   0 -- OK: item was already open, no change
-  ///     -  -1 -- ERROR: item was not found
-  ///
-  /// \see open(), close(), is_open(), is_close(), callback_item(), callback_reason()
-  ///         
-  int open(const char *path, int docallback=1) {
-    Fl_Tree_Item *item = find_item(path);
-    if ( ! item ) return(-1);
-    return(open(item, docallback));
-  }
-  /// Toggle the open state of \p item.
-  /// Handles redrawing if anything was actually changed.
-  /// Invokes the callback depending on the value of optional parameter \p docallback.
-  ///
-  /// The callback can use callback_item() and callback_reason() respectively to determine 
-  /// the item changed and the reason the callback was called.
-  ///
-  /// \param[in] item -- the item whose open state is to be toggled. Must not be NULL.
-  /// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-  ///     -   0 - callback() is not invoked
-  ///     -   1 - callback() is invoked, callback_reason() will be either
-  ///             FL_TREE_REASON_OPENED or FL_TREE_REASON_CLOSED
-  ///
-  /// \see open(), close(), is_open(), is_close(), callback_item(), callback_reason()
-  ///
-  void open_toggle(Fl_Tree_Item *item, int docallback=1) {
-    if ( item->is_open() ) {
-      close(item, docallback);
-    } else {
-      open(item, docallback);
-    }
-  }
-  /// Closes the specified \p item.
-  /// Handles redrawing if anything was actually changed.
-  /// Invokes the callback depending on the value of optional parameter \p docallback.
-  ///
-  /// The callback can use callback_item() and callback_reason() respectively to determine 
-  /// the item changed and the reason the callback was called.
-  ///
-  /// \param[in] item -- the item to be closed. Must not be NULL.
-  /// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-  ///     -   0 - callback() is not invoked
-  ///     -   1 - callback() is invoked if item changed,
-  ///             callback_reason() will be FL_TREE_REASON_CLOSED
-  /// \returns
-  ///     -   1 -- item was closed
-  ///     -   0 -- item was already closed, no change
-  ///
-  /// \see open(), close(), is_open(), is_close(), callback_item(), callback_reason()
-  ///
-  int close(Fl_Tree_Item *item, int docallback=1) {
-    if ( item->is_close() ) return(0);
-    item->close();
-    redraw();
-    if ( docallback ) {
-      do_callback_for_item(item, FL_TREE_REASON_CLOSED);
-    }
-    return(1);
-  }
-  /// Closes the item specified by \p path, eg: "Parent/child/item".
-  /// Handles redrawing if anything was actually changed.
-  /// Invokes the callback depending on the value of optional parameter \p docallback.
-  ///
-  /// Items or submenus that themselves contain slashes ('/' or '\')
-  /// should be escaped, e.g. close("Holidays/12\\/25\//2010").
-  ///
-  /// The callback can use callback_item() and callback_reason() respectively to determine 
-  /// the item changed and the reason the callback was called.
-  ///
-  /// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-  /// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-  ///     -   0 - callback() is not invoked
-  ///     -   1 - callback() is invoked if item changed,
-  ///             callback_reason() will be FL_TREE_REASON_CLOSED
-  /// \returns
-  ///     -   1 -- OK: item closed
-  ///     -   0 -- OK: item was already closed, no change
-  ///     -  -1 -- ERROR: item was not found
-  ///
-  /// \see open(), close(), is_open(), is_close(), callback_item(), callback_reason()
-  ///         
-  int close(const char *path, int docallback=1) {
-    Fl_Tree_Item *item = find_item(path);
-    if ( ! item ) return(-1);
-    return(close(item, docallback));
-  }
-  /// See if \p item is open.
-  ///
-  /// Items that are 'open' are themselves not necessarily visible;
-  /// one of the item's parents might be closed.
-  ///
-  /// \param[in] item -- the item to be tested. Must not be NULL.
-  /// \returns
-  ///     -  1 : item is open
-  ///     -  0 : item is closed
-  ///
-  int is_open(Fl_Tree_Item *item) const {
-    return(item->is_open()?1:0);
-  }
-  /// See if item specified by \p path (eg: "Parent/child/item") is open.
-  ///
-  /// Items or submenus that themselves contain slashes ('/' or '\')
-  /// should be escaped, e.g. is_open("Holidays/12\\/25\//2010").
-  ///
-  /// Items that are 'open' are themselves not necessarily visible;
-  /// one of the item's parents might be closed.
-  ///
-  /// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-  /// \returns
-  ///     -    1 - OK: item is open
-  ///     -    0 - OK: item is closed
-  ///     -   -1 - ERROR: item was not found
-  ///
-  int is_open(const char *path) const {
-    const Fl_Tree_Item *item = find_item(path);
-    if ( ! item ) return(-1);
-    return(item->is_open()?1:0);
-  }
-  /// See if the specified \p item is closed.
-  ///
-  /// \param[in] item -- the item to be tested. Must not be NULL.
-  /// \returns
-  ///     -   1 : item is open
-  ///     -   0 : item is closed
-  ///
-  int is_close(Fl_Tree_Item *item) const {
-    return(item->is_close());
-  }
-  /// See if item specified by \p path (eg: "Parent/child/item") is closed.
-  ///
-  /// Items or submenus that themselves contain slashes ('/' or '\')
-  /// should be escaped, e.g. is_close("Holidays/12\\/25\//2010").
-  ///
-  /// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-  /// \returns
-  ///     -   1 - OK: item is closed
-  ///     -   0 - OK: item is open
-  ///     -  -1 - ERROR: item was not found
-  ///
-  int is_close(const char *path) const {
-    const Fl_Tree_Item *item = find_item(path);
-    if ( ! item ) return(-1);
-    return(item->is_close()?1:0);
-  }
-  
-  /// Select the specified \p item. Use 'deselect()' to de-select it.
-  /// Handles redrawing if anything was actually changed.
-  /// Invokes the callback depending on the value of optional parameter \p docallback.
-  ///
-  /// The callback can use callback_item() and callback_reason() respectively to determine 
-  /// the item changed and the reason the callback was called.
-  ///
-  /// \param[in] item -- the item to be selected. Must not be NULL.
-  /// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-  ///     -   0 - the callback() is not invoked
-  ///     -   1 - the callback() is invoked if item changed state,
-  ///             callback_reason() will be FL_TREE_REASON_SELECTED
-  /// \returns
-  ///     -   1 - item's state was changed
-  ///     -   0 - item was already selected, no change was made
-  ///
-  int select(Fl_Tree_Item *item, int docallback=1) {
-    if ( ! item->is_selected() ) {
-      item->select();
-      set_changed();
-      if ( docallback ) {
-        do_callback_for_item(item, FL_TREE_REASON_SELECTED);
-      }
-      redraw();
-      return(1);
-    }
-    return(0);
-  }
-  /// Select the item specified by \p path (eg: "Parent/child/item").
-  /// Handles redrawing if anything was actually changed.
-  /// Invokes the callback depending on the value of optional parameter \p docallback.
-  ///
-  /// Items or submenus that themselves contain slashes ('/' or '\')
-  /// should be escaped, e.g. select("Holidays/12\\/25\//2010").
-  ///
-  /// The callback can use callback_item() and callback_reason() respectively to determine 
-  /// the item changed and the reason the callback was called.
-  ///
-  /// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-  /// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-  ///     -   0 - the callback() is not invoked
-  ///     -   1 - the callback() is invoked if item changed state,
-  ///             callback_reason() will be FL_TREE_REASON_SELECTED
-  /// \returns
-  ///     -   1 : OK: item's state was changed
-  ///     -   0 : OK: item was already selected, no change was made
-  ///     -  -1 : ERROR: item was not found
-  ///
-  int select(const char *path, int docallback=1) {
-    Fl_Tree_Item *item = find_item(path);
-    if ( ! item ) return(-1);
-    return(select(item, docallback));
-  }
-  /// Toggle the select state of the specified \p item.
-  /// Handles redrawing if anything was actually changed.
-  /// Invokes the callback depending on the value of optional parameter \p docallback.
-  ///
-  /// The callback can use callback_item() and callback_reason() respectively to determine 
-  /// the item changed and the reason the callback was called.
-  ///
-  /// \param[in] item -- the item to be selected. Must not be NULL.
-  /// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-  ///     -   0 - the callback() is not invoked
-  ///     -   1 - the callback() is invoked, callback_reason() will be
-  ///             either FL_TREE_REASON_SELECTED or FL_TREE_REASON_DESELECTED
-  ///
-  void select_toggle(Fl_Tree_Item *item, int docallback=1) {
-    item->select_toggle();
-    set_changed();
-    if ( docallback ) {
-      do_callback_for_item(item, item->is_selected() ? FL_TREE_REASON_SELECTED
-                                                     : FL_TREE_REASON_DESELECTED);
-    }
-    redraw();
-  }
-  /// De-select the specified \p item.
-  /// Handles redrawing if anything was actually changed.
-  /// Invokes the callback depending on the value of optional parameter \p docallback.
-  ///
-  /// The callback can use callback_item() and callback_reason() respectively to determine 
-  /// the item changed and the reason the callback was called.
-  ///
-  /// \param[in] item -- the item to be selected. Must not be NULL.
-  /// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-  ///     -   0 - the callback() is not invoked
-  ///     -   1 - the callback() is invoked if item changed state,
-  ///             callback_reason() will be FL_TREE_REASON_DESELECTED
-  /// \returns
-  ///     -   0 - item was already deselected, no change was made
-  ///     -   1 - item's state was changed
-  ///
-  int deselect(Fl_Tree_Item *item, int docallback=1) {
-    if ( item->is_selected() ) {
-      item->deselect();
-      set_changed();
-      if ( docallback ) {
-        do_callback_for_item(item, FL_TREE_REASON_DESELECTED);
-      }
-      redraw();
-      return(1);
-    }
-    return(0);
-  }
-  /// Deselect an item specified by \p path (eg: "Parent/child/item").
-  /// Handles redrawing if anything was actually changed.
-  /// Invokes the callback depending on the value of optional parameter \p docallback.
-  ///
-  /// Items or submenus that themselves contain slashes ('/' or '\')
-  /// should be escaped, e.g. deselect("Holidays/12\\/25\//2010").
-  ///
-  /// The callback can use callback_item() and callback_reason() respectively to determine 
-  /// the item changed and the reason the callback was called.
-  ///
-  /// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-  /// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-  ///     -   0 - the callback() is not invoked
-  ///     -   1 - the callback() is invoked if item changed state,
-  ///             callback_reason() will be FL_TREE_REASON_DESELECTED
-  ///  \returns
-  ///     -   1 - OK: item's state was changed
-  ///     -   0 - OK: item was already deselected, no change was made
-  ///     -  -1 - ERROR: item was not found
-  ///
-  int deselect(const char *path, int docallback=1) {
-    Fl_Tree_Item *item = find_item(path);
-    if ( ! item ) return(-1);
-    return(deselect(item, docallback));
-  }
-  
-  int deselect_all(Fl_Tree_Item *item=0, int docallback=1);
-  int select_only(Fl_Tree_Item *selitem, int docallback=1);
-  int select_all(Fl_Tree_Item *item=0, int docallback=1);
-  void set_item_focus(Fl_Tree_Item *o);
-  
-  /// See if the specified \p item is selected.
-  ///
-  /// \param[in] item -- the item to be tested. Must not be NULL.
-  ///
-  /// \return
-  ///     -   1 : item selected
-  ///     -   0 : item deselected
-  ///
-  int is_selected(Fl_Tree_Item *item) const {
-    return(item->is_selected()?1:0);
-  }
-  /// See if item specified by \p path (eg: "Parent/child/item") is selected.
-  ///
-  /// Items or submenus that themselves contain slashes ('/' or '\')
-  /// should be escaped, e.g. is_selected("Holidays/12\\/25\//2010").
-  ///
-  /// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-  /// \returns
-  ///     -   1 : item selected
-  ///     -   0 : item deselected
-  ///     -  -1 : item was not found
-  ///
-  int is_selected(const char *path) {
-    Fl_Tree_Item *item = find_item(path);
-    if ( ! item ) return(-1);
-    return(is_selected(item));
-  }
-  /// Print the tree as 'ascii art' to stdout.
-  /// Used mainly for debugging.
-  ///
-  void show_self() {
-    if ( ! _root ) return;
-    _root->show_self();
-  }
-  
-  /////////////////////////////////
-  // Item attribute related methods
-  /////////////////////////////////
-  
-  /// Get the default label fontsize used for creating new items.
-  Fl_Fontsize item_labelsize() const {
-    return(_prefs.labelsize());
-  }
-  /// Set the default label font size used for creating new items.
-  /// To change the font size on a per-item basis, use Fl_Tree_Item::labelsize(Fl_Fontsize)
-  ///
-  void item_labelsize(Fl_Fontsize val) {
-    _prefs.labelsize(val);
-  }
-  /// Get the default font face used for creating new items.
-  Fl_Font item_labelfont() const {
-    return(_prefs.labelfont());
-  }
-  /// Set the default font face used for creating new items.
-  /// To change the font face on a per-item basis, use Fl_Tree_Item::labelfont(Fl_Font)
-  ///
-  void item_labelfont(Fl_Font val) {
-    _prefs.labelfont(val);
-  }
-  /// Get the default label foreground color used for creating new items.
-  Fl_Color item_labelfgcolor(void) const {
-    return(_prefs.labelfgcolor());
-  }
-  /// Set the default label foreground color used for creating new items.
-  /// To change the foreground color on a per-item basis, use Fl_Tree_Item::labelfgcolor(Fl_Color)
-  ///
-  void item_labelfgcolor(Fl_Color val) {
-    _prefs.labelfgcolor(val);
-  }
-  /// Get the default label background color used for creating new items.
-  Fl_Color item_labelbgcolor(void) const {
-    return(_prefs.labelbgcolor());
-  }
-  /// Set the default label background color used for creating new items.
-  /// To change the background color on a per-item basis, use Fl_Tree_Item::labelbgcolor(Fl_Color)
-  ///
-  void item_labelbgcolor(Fl_Color val) {
-    _prefs.labelbgcolor(val);
-  }
-  /// Get the connector color used for tree connection lines.
-  Fl_Color connectorcolor() const {
-    return(_prefs.connectorcolor());
-  }
-  /// Set the connector color used for tree connection lines.
-  void connectorcolor(Fl_Color val) {
-    _prefs.connectorcolor(val);
-  }
-  /// Get the amount of white space (in pixels) that should appear
-  /// between the widget's left border and the tree's contents.
-  ///
-  int marginleft() const {
-    return(_prefs.marginleft());
-  }
-  /// Set the amount of white space (in pixels) that should appear
-  /// between the widget's left border and the left side of the tree's contents.
-  ///
-  void marginleft(int val) {
-    _prefs.marginleft(val);
-    redraw();
-  }
-  /// Get the amount of white space (in pixels) that should appear
-  /// between the widget's top border and the top of the tree's contents.
-  ///
-  int margintop() const {
-    return(_prefs.margintop());
-  }
-  /// Sets the amount of white space (in pixels) that should appear
-  /// between the widget's top border and the top of the tree's contents.
-  ///
-  void margintop(int val) {
-    _prefs.margintop(val);
-    redraw();
-  }
-  /// Get the amount of white space (in pixels) that should appear
-  /// below an open child tree's contents.
-  ///
-  int openchild_marginbottom() const {
-    return(_prefs.openchild_marginbottom());
-  }
-  /// Set the amount of white space (in pixels) that should appear
-  /// below an open child tree's contents.
-  ///
-  void openchild_marginbottom(int val) {
-    _prefs.openchild_marginbottom(val);
-    redraw();
-  }
-  /// Gets the width of the horizontal connection lines (in pixels) 
-  /// that appear to the left of each tree item's label.
-  ///
-  int connectorwidth() const {
-    return(_prefs.connectorwidth());
-  }
-  /// Sets the width of the horizontal connection lines (in pixels) 
-  /// that appear to the left of each tree item's label.
-  ///
-  void connectorwidth(int val) {
-    _prefs.connectorwidth(val);
-    redraw();
-  }
-  /// Returns the Fl_Image being used as the default user icon for all
-  /// newly created items.
-  /// Returns zero if no icon has been set, which is the default.
-  ///
-  Fl_Image *usericon() const {
-    return(_prefs.usericon());
-  }
-  /// Sets the Fl_Image to be used as the default user icon for all
-  /// newly created items.
-  ///
-  /// If you want to specify user icons on a per-item basis,
-  /// use Fl_Tree_Item::usericon() instead.
-  ///
-  /// \param[in] val -- The new image to be used, or
-  ///                   zero to disable user icons.
-  ///
-  void usericon(Fl_Image *val) {
-    _prefs.usericon(val);
-    redraw();
-  }
-  /// Returns the icon to be used as the 'open' icon.
-  /// If none was set, the internal default is returned,
-  /// a simple '[+]' icon.
-  ///
-  Fl_Image *openicon() const {
-    return(_prefs.openicon());
-  }
-  /// Sets the icon to be used as the 'open' icon.
-  /// This overrides the built in default '[+]' icon.
-  ///
-  /// \param[in] val -- The new image, or zero to use the default [+] icon.
-  ///
-  void openicon(Fl_Image *val) {
-    _prefs.openicon(val);
-    redraw();
-  }
-  /// Returns the icon to be used as the 'close' icon.
-  /// If none was set, the internal default is returned,
-  /// a simple '[-]' icon.
-  ///
-  Fl_Image *closeicon() const {
-    return(_prefs.closeicon());
-  }
-  /// Sets the icon to be used as the 'close' icon.
-  /// This overrides the built in default '[-]' icon.
-  ///
-  /// \param[in] val -- The new image, or zero to use the default [-] icon.
-  ///
-  void closeicon(Fl_Image *val) {
-    _prefs.closeicon(val);
-    redraw();
-  }
-  /// Returns 1 if the collapse icon is enabled, 0 if not.
-  int showcollapse() const {
-    return(_prefs.showcollapse());
-  }
-  /// Set if we should show the collapse icon or not.
-  /// If collapse icons are disabled, the user will not be able
-  /// to interactively collapse items in the tree, unless the application
-  /// provides some other means via open() and close().
-  ///
-  /// \param[in] val 1: shows collapse icons (default),\n
-  ///                0: hides collapse icons.
-  ///
-  void showcollapse(int val) {
-    _prefs.showcollapse(val);
-    redraw();
-  }
-  /// Returns 1 if the root item is to be shown, or 0 if not.
-  int showroot() const {
-    return(_prefs.showroot());
-  }
-  /// Set if the root item should be shown or not.
-  /// \param[in] val 1 -- show the root item (default)\n
-  ///                0 -- hide the root item.
-  ///
-  void showroot(int val) {
-    _prefs.showroot(val);
-    redraw();
-  }
-  /// Returns the line drawing style for inter-connecting items.
-  Fl_Tree_Connector connectorstyle() const {
-    return(_prefs.connectorstyle());
-  }
-  /// Sets the line drawing style for inter-connecting items.
-  void connectorstyle(Fl_Tree_Connector val) {
-    _prefs.connectorstyle(val);
-    redraw();
-  }
-  /// Set the default sort order used when items are added to the tree.
-  ///     See Fl_Tree_Sort for possible values.
-  ///
-  Fl_Tree_Sort sortorder() const {
-    return(_prefs.sortorder());
-  }
-  /// Gets the sort order used to add items to the tree.
-  void sortorder(Fl_Tree_Sort val) {
-    _prefs.sortorder(val);
-    // no redraw().. only affects new add()itions
-  }
-  /// Sets the style of box used to draw selected items.
-  /// This is an fltk Fl_Boxtype.
-  /// The default is influenced by FLTK's current Fl::scheme()
-  ///
-  Fl_Boxtype selectbox() const {
-    return(_prefs.selectbox());
-  }
-  /// Gets the style of box used to draw selected items.
-  /// This is an fltk Fl_Boxtype.
-  /// The default is influenced by FLTK's current Fl::scheme()
-  ///
-  void selectbox(Fl_Boxtype val) {
-    _prefs.selectbox(val);
-    redraw();
-  }
-  /// Gets the tree's current selection mode.
-  Fl_Tree_Select selectmode() const {
-    return(_prefs.selectmode());
-  }
-  /// Sets the tree's selection mode.
-  void selectmode(Fl_Tree_Select val) {
-    _prefs.selectmode(val);
-  }
-  int displayed(Fl_Tree_Item *item);
-  void show_item(Fl_Tree_Item *item, int yoff);
-  void show_item(Fl_Tree_Item *item);
-  void show_item_bottom(Fl_Tree_Item *item);
-  void show_item_middle(Fl_Tree_Item *item);
-  void show_item_top(Fl_Tree_Item *item);
-  void display(Fl_Tree_Item *item);
-  int  vposition() const;
-  void vposition(int ypos);
-
-  /// See if widget \p w is one of the Fl_Tree widget's scrollbars.
-  /// Use this to skip over the scrollbars when walking the child() array. Example:
-  /// \code
-  /// for ( int i=0; i<tree->children(); i++ ) {    // walk children
-  ///     Fl_Widget *w= tree->child(i);
-  ///     if ( brow->is_scrollbar(w) ) continue;    // skip scrollbars
-  ///     ..do work here..
-  /// }
-  /// \endcode
-  /// \param[in] w Widget to test
-  /// \returns 1 if \p w is a scrollbar, 0 if not.
-  ///
-  int is_scrollbar(Fl_Widget *w) {
-      return( ( w == _vscroll ) ? 1 : 0 );
-  }
-  /// Gets the current size of the scrollbars' troughs, in pixels.
-  ///
-  /// If this value is zero (default), this widget will use the global
-  /// Fl::scrollbar_size() value as the scrollbar's width.
-  /// 
-  /// \returns Scrollbar size in pixels, or 0 if the global Fl::scrollsize() is being used.
-  /// \see Fl::scrollbar_size(int)
-  ///
-  int scrollbar_size() const {
-      return(_scrollbar_size);
-  }
-  /// Sets the pixel size of the scrollbars' troughs to the \p size, in pixels.
-  ///
-  /// Normally you should not need this method, and should use the global
-  /// Fl::scrollbar_size(int) instead to manage the size of ALL 
-  /// your widgets' scrollbars. This ensures your application 
-  /// has a consistent UI, is the default behavior, and is normally
-  /// what you want.
-  ///
-  /// Only use THIS method if you really need to override the global
-  /// scrollbar size. The need for this should be rare.
-  ///   
-  /// Setting \p size to the special value of 0 causes the widget to
-  /// track the global Fl::scrollbar_size(), which is the default.
-  ///   
-  /// \param[in] size Sets the scrollbar size in pixels.\n
-  ///                 If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
-  /// \see Fl::scrollbar_size()
-  ///
-  void scrollbar_size(int size) {
-      _scrollbar_size = size;
-      int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
-      if ( _vscroll->w() != scrollsize ) {
-        _vscroll->resize(x()+w()-scrollsize, h(), scrollsize, _vscroll->h());
-      }
-  }   
-
-  ///////////////////////
-  // callback related
-  ///////////////////////
-
-  /// Sets the item that was changed for this callback.
-  ///    Used internally to pass the item that invoked the callback.
-  ///
-  void callback_item(Fl_Tree_Item* item) {
-    _callback_item = item;
-  }
-  /// Gets the item that caused the callback.
-  /// The callback() can use this value to see which item changed.
-  ///
-  Fl_Tree_Item* callback_item() {
-    return(_callback_item);
-  }
-  /// Sets the reason for this callback.
-  ///    Used internally to pass the reason the callback was invoked.
-  ///
-  void callback_reason(Fl_Tree_Reason reason) {
-    _callback_reason = reason;
-  }
-  /// Gets the reason for this callback.
-  ///
-  /// The callback() can use this value to see why it was called. Example:
-  /// \code
-  ///     void MyTreeCallback(Fl_Widget *w, void *userdata) {
-  ///         Fl_Tree *tree = (Fl_Tree*)w;
-  ///         Fl_Tree_Item *item = tree->callback_item();    // the item changed (can be NULL if more than one item was changed!)
-  ///         switch ( tree->callback_reason() ) {           // reason callback was invoked
-  ///             case     FL_TREE_REASON_OPENED: ..item was opened..
-  ///             case     FL_TREE_REASON_CLOSED: ..item was closed..
-  ///             case   FL_TREE_REASON_SELECTED: ..item was selected..
-  ///             case FL_TREE_REASON_DESELECTED: ..item was deselected..
-  ///         }
-  ///     }
-  /// \endcode
-  ///
-  Fl_Tree_Reason callback_reason() const {
-    return(_callback_reason);
-  }
-
-  /// Load FLTK preferences
-  void load(class Fl_Preferences&);
-};
-
-#endif /*FL_TREE_H*/
-
-//
-// End of "$Id: Fl_Tree.H 8632 2011-05-04 02:59:50Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Tree_Item.H b/common/fltk/FL/Fl_Tree_Item.H
deleted file mode 100644
index 3c579fa..0000000
--- a/common/fltk/FL/Fl_Tree_Item.H
+++ /dev/null
@@ -1,337 +0,0 @@
-//
-// "$Id: Fl_Tree_Item.H 8340 2011-01-30 20:22:06Z greg.ercolano $"
-//
-
-#ifndef FL_TREE_ITEM_H
-#define FL_TREE_ITEM_H
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Image.H>
-#include <FL/fl_draw.H>
-
-#include <FL/Fl_Tree_Item_Array.H>
-#include <FL/Fl_Tree_Prefs.H>
-
-//////////////////////
-// FL/Fl_Tree_Item.H
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-
-///
-/// \file
-/// \brief This file contains the definitions for Fl_Tree_Item
-///
-
-/// \brief Tree item
-///
-/// This class is a single tree item, and manages all of the item's attributes.
-/// Fl_Tree_Item is used by Fl_Tree, which is comprised of many instances of Fl_Tree_Item.
-///
-/// Fl_Tree_Item is hierarchical; it dynamically manages an Fl_Tree_Item_Array of children
-/// that are themselves instances of Fl_Tree_Item. Each item can have zero or more children.
-/// When an item has children, close() and open() can be used to hide or show them.
-///
-/// Items have their own attributes; font size, face, color.
-/// Items maintain their own hierarchy of children.
-///
-/// When you make changes to items, you'll need to tell the tree to redraw()
-/// for the changes to show up.
-///
-class FL_EXPORT Fl_Tree_Item {
-  const char             *_label;		// label (memory managed)
-  Fl_Font                 _labelfont;		// label's font face
-  Fl_Fontsize             _labelsize;		// label's font size
-  Fl_Color                _labelfgcolor;	// label's fg color
-  Fl_Color                _labelbgcolor;	// label's bg color
-  char                    _open;		// item is open?
-  char                    _visible;		// item is visible?
-  char                    _active;		// item activated?
-  char                    _selected;		// item selected?
-  int                     _xywh[4];		// xywh of this widget (if visible)
-  int                     _collapse_xywh[4];	// xywh of collapse icon (if any)
-  int                     _label_xywh[4];	// xywh of label
-  Fl_Widget              *_widget;		// item's label widget (optional)
-  Fl_Image               *_usericon;		// item's user-specific icon (optional)
-  Fl_Tree_Item_Array      _children;		// array of child items
-  Fl_Tree_Item           *_parent;		// parent item (=0 if root)
-  void                   *_userdata;    	// user data that can be associated with an item
-protected:
-  void show_widgets();
-  void hide_widgets();
-  void draw_vertical_connector(int x, int y1, int y2, const Fl_Tree_Prefs &prefs);
-  void draw_horizontal_connector(int x1, int x2, int y, const Fl_Tree_Prefs &prefs);
-public:
-  Fl_Tree_Item(const Fl_Tree_Prefs &prefs);	// CTOR
-  ~Fl_Tree_Item();				// DTOR
-  Fl_Tree_Item(const Fl_Tree_Item *o);		// COPY CTOR
-  int x() const { return(_xywh[0]); }
-  int y() const { return(_xywh[1]); }
-  int w() const { return(_xywh[2]); }
-  int h() const { return(_xywh[3]); }
-  void draw(int X, int &Y, int W, Fl_Widget *tree, Fl_Tree_Item *itemfocus, const Fl_Tree_Prefs &prefs, int lastchild=1);
-  void show_self(const char *indent = "") const;
-  void label(const char *val);
-  const char *label() const;
-
-  /// Set a user-data value for the item.
-  inline void user_data( void* data ) { _userdata = data; }
-
-  /// Retrieve the user-data value that has been assigned to the item.
-  inline void* user_data() const { return _userdata; }
-  
-  /// Set item's label font face.
-  void labelfont(Fl_Font val) {
-    _labelfont = val; 
-  }
-  /// Get item's label font face.
-  Fl_Font labelfont() const {
-    return(_labelfont);
-  }
-  /// Set item's label font size.
-  void labelsize(Fl_Fontsize val) {
-    _labelsize = val; 
-  }
-  /// Get item's label font size.
-  Fl_Fontsize labelsize() const {
-    return(_labelsize);
-  }
-  /// Set item's label foreground text color.
-  void labelfgcolor(Fl_Color val) {
-    _labelfgcolor = val; 
-  }
-  /// Set item's label text color.
-  void labelcolor(Fl_Color val) {
-    _labelfgcolor = val; 
-  }
-  /// Return item's label text color.
-  Fl_Color labelcolor() const {
-    return(_labelfgcolor); 
-  }
-  /// Return item's label foreground text color.
-  Fl_Color labelfgcolor() const {
-    return(_labelfgcolor); 
-  }
-  /// Set item's label background color.
-  void labelbgcolor(Fl_Color val) {
-    _labelbgcolor = val; 
-  }
-  /// Return item's background text color.
-  Fl_Color labelbgcolor() const {
-    return(_labelbgcolor); 
-  }
-  /// Assign an FLTK widget to this item.
-  void widget(Fl_Widget *val) {
-    _widget = val; 
-  }
-  /// Return FLTK widget assigned to this item.
-  Fl_Widget *widget() const {
-    return(_widget); 
-  }
-  /// Return the number of children this item has.
-  int children() const {
-    return(_children.total()); 
-  }
-  /// Return the child item for the given 'index'.
-  Fl_Tree_Item *child(int index) {
-    return(_children[index]); 
-  }
-  /// Return the const child item for the given 'index'.
-  const Fl_Tree_Item *child(int t) const;
-  /// See if this item has children.
-  int has_children() const {
-    return(children()); 
-  }
-  int find_child(const char *name);
-  int find_child(Fl_Tree_Item *item);
-  int remove_child(Fl_Tree_Item *item);
-  int remove_child(const char *new_label);
-  void clear_children();
-  void swap_children(int ax, int bx);
-  int swap_children(Fl_Tree_Item *a, Fl_Tree_Item *b);
-  const Fl_Tree_Item *find_child_item(char **arr) const;	// const
-        Fl_Tree_Item *find_child_item(char **arr);		// non-const
-  const Fl_Tree_Item *find_item(char **arr) const;		// const
-        Fl_Tree_Item *find_item(char **arr);			// non-const
-  //////////////////
-  // Adding items
-  //////////////////
-  Fl_Tree_Item *add(const Fl_Tree_Prefs &prefs, const char *new_label);
-  Fl_Tree_Item *add(const Fl_Tree_Prefs &prefs, char **arr);
-  Fl_Tree_Item *insert(const Fl_Tree_Prefs &prefs, const char *new_label, int pos=0);
-  Fl_Tree_Item *insert_above(const Fl_Tree_Prefs &prefs, const char *new_label);
-  int depth() const;
-  Fl_Tree_Item *prev();
-  Fl_Tree_Item *next();
-  Fl_Tree_Item *next_sibling();
-  Fl_Tree_Item *prev_sibling();
-  Fl_Tree_Item *next_displayed(Fl_Tree_Prefs &prefs);
-  Fl_Tree_Item *prev_displayed(Fl_Tree_Prefs &prefs);
-  
-  /// Return the parent for this item. Returns NULL if we are the root.
-  Fl_Tree_Item *parent() {
-    return(_parent);
-  }
-  /// Return the const parent for this item. Returns NULL if we are the root.
-  const Fl_Tree_Item *parent() const {
-    return(_parent);
-  }
-  /// Set the parent for this item.
-  /// Should only be used by Fl_Tree's internals.
-  ///
-  void parent(Fl_Tree_Item *val) {
-    _parent = val;
-  }
-  //////////////////
-  // State
-  //////////////////
-  void open();
-  void close();
-  /// See if the item is 'open'.
-  int is_open() const {
-    return(_open?1:0);
-  }
-  /// See if the item is 'closed'.
-  int is_close() const {
-    return(_open?0:1);
-  }
-  /// Toggle the item's open/closed state.
-  void open_toggle() {
-    _open?close():open();
-  }
-  /// Change the item's selection state to the optionally specified 'val'.
-  /// If 'val' is not specified, the item will be selected.
-  ///
-  void select(int val=1) {
-    _selected = val;
-  }
-  /// Toggle the item's selection state.
-  void select_toggle() {
-    if ( is_selected() ) {
-      deselect();		// deselect if selected
-    } else {
-      select();		// select if deselected
-    }
-  }
-  /// Select self and all children
-  ///     Returns count of how many items were in the 'deselected' state,
-  ///     ie. how many items were "changed".
-  ///
-  int select_all() {
-    int count = 0;
-    if ( ! is_selected() ) {
-      select();
-      ++count;
-    }
-    for ( int t=0; t<children(); t++ ) {
-      count += child(t)->select_all();
-    }
-    return(count);
-  }
-  /// Disable the item's selection state.
-  void deselect() {
-    _selected = 0;
-  }
-  /// Deselect self and all children
-  ///     Returns count of how many items were in the 'selected' state,
-  ///     ie. how many items were "changed".
-  ///
-  int deselect_all() {
-    int count = 0;
-    if ( is_selected() ) {
-      deselect();
-      ++count;
-    }
-    for ( int t=0; t<children(); t++ ) {
-      count += child(t)->deselect_all();
-    }
-    return(count);
-  }
-  /// See if the item is selected.
-  char is_selected() const {
-    return(_selected);
-  }
-  /// Change the item's activation state to the optionally specified 'val'.
-  ///
-  /// When deactivated, the item will be 'grayed out'; the callback() 
-  /// won't be invoked if the user clicks on the label. If the item
-  /// has a widget() associated with the item, its activation state
-  /// will be changed as well.
-  ///
-  /// If 'val' is not specified, the item will be activated.
-  ///
-  void activate(int val=1) {
-    _active = val;
-    if ( _widget && val != (int)_widget->active() ) {
-      if ( val ) {
-	_widget->activate();
-      } else {
-	_widget->deactivate();
-      }
-      _widget->redraw();
-    }
-  }
-  /// Deactivate the item; the callback() won't be invoked when clicked.
-  /// Same as activate(0)
-  ///
-  void deactivate() {
-    activate(0);
-  }
-  /// See if the item is activated.
-  char is_activated() const {
-    return(_active);
-  }
-  /// See if the item is activated.
-  char is_active() const {
-    return(_active);
-  }
-  /// See if the item is visible.
-  int visible() const {
-    return(_visible ? 1 : 0);
-  }
-  int visible_r() const;
-
-  /// Set the user icon's image. '0' will disable.
-  void usericon(Fl_Image *val) {
-    _usericon = val;
-  }
-  /// Get the user icon. Returns '0' if disabled.
-  Fl_Image *usericon() const {
-    return(_usericon);
-  }
-  //////////////////
-  // Events
-  //////////////////
-  const Fl_Tree_Item *find_clicked(const Fl_Tree_Prefs &prefs) const;
-  Fl_Tree_Item *find_clicked(const Fl_Tree_Prefs &prefs);
-  int event_on_collapse_icon(const Fl_Tree_Prefs &prefs) const;
-  int event_on_label(const Fl_Tree_Prefs &prefs) const;
-  /// Is this item the root of the tree?
-  int is_root() const {
-    return(_parent==0?1:0);
-  }
-};
-
-#endif /*FL_TREE_ITEM_H*/
-
-//
-// End of "$Id: Fl_Tree_Item.H 8340 2011-01-30 20:22:06Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Tree_Item_Array.H b/common/fltk/FL/Fl_Tree_Item_Array.H
deleted file mode 100644
index 5a91dee..0000000
--- a/common/fltk/FL/Fl_Tree_Item_Array.H
+++ /dev/null
@@ -1,90 +0,0 @@
-//
-// "$Id: Fl_Tree_Item_Array.H 7903 2010-11-28 21:06:39Z matt $"
-//
-
-#ifndef _FL_TREE_ITEM_ARRAY_H
-#define _FL_TREE_ITEM_ARRAY_H
-
-#include "Fl_Export.H"
-
-class FL_EXPORT Fl_Tree_Item;	// forward decl must *precede* first doxygen comment block
-				// or doxygen will not document our class..
-
-//////////////////////////
-// FL/Fl_Tree_Item_Array.H
-//////////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-
-///
-/// \file
-/// \brief This file defines a class that manages an array of Fl_Tree_Item pointers.
-///
-
-/// \brief Manages an array of Fl_Tree_Item pointers.
-///
-/// Because FLTK 1.x.x. has mandated that templates and STL not be used,
-/// we use this class to dynamically manage the arrays.
-///
-/// None of the methods do range checking on index values; the caller
-/// must be sure that index values are within the range 0<index<total()
-/// (unless otherwise noted).
-///
-
-class FL_EXPORT Fl_Tree_Item_Array {
-  Fl_Tree_Item **_items;	// items array
-  int _total;			// #items in array
-  int _size;			// #items *allocated* for array
-  int _chunksize;		// #items to enlarge mem allocation
-  void enlarge(int count);
-public:
-  Fl_Tree_Item_Array(int new_chunksize = 10);		// CTOR
-  ~Fl_Tree_Item_Array();				// DTOR
-  Fl_Tree_Item_Array(const Fl_Tree_Item_Array *o);	// COPY CTOR
-  /// Return the item and index \p i.
-  Fl_Tree_Item *operator[](int i) {
-    return(_items[i]);
-  }
-  /// Const version of operator[](int i)
-  const Fl_Tree_Item *operator[](int i) const {
-    return(_items[i]);
-  }
-  /// Return the total items in the array, or 0 if empty.
-  int total() const {
-    return(_total);
-  }
-  /// Swap the two items at index positions \p ax and \p bx.
-  void swap(int ax, int bx) {
-    Fl_Tree_Item *asave = _items[ax];
-    _items[ax] = _items[bx];
-    _items[bx] = asave;
-  }
-  void clear();
-  void add(Fl_Tree_Item *val);
-  void insert(int pos, Fl_Tree_Item *new_item);
-  void remove(int index);
-  int  remove(Fl_Tree_Item *item);
-};
-
-#endif /*_FL_TREE_ITEM_ARRAY_H*/
-
-//
-// End of "$Id: Fl_Tree_Item_Array.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_Tree_Prefs.H b/common/fltk/FL/Fl_Tree_Prefs.H
deleted file mode 100644
index 57d72e3..0000000
--- a/common/fltk/FL/Fl_Tree_Prefs.H
+++ /dev/null
@@ -1,343 +0,0 @@
-//
-// "$Id: Fl_Tree_Prefs.H 8340 2011-01-30 20:22:06Z greg.ercolano $"
-//
-
-#ifndef FL_TREE_PREFS_H
-#define FL_TREE_PREFS_H
-
-//////////////////////
-// FL/Fl_Tree_Prefs.H
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-
-///
-/// \file
-/// \brief This file contains the definitions for Fl_Tree's preferences.
-///
-/// \code
-///                  Fl_Tree_Prefs
-///                       :
-///                  .....:.......
-///                  :           :
-///               Fl_Tree        :
-///                  |_____ Fl_Tree_Item
-///
-/// \endcode
-///
-
-/// \class Fl_Tree_Prefs
-/// \brief Tree widget's preferences.
-
-/// \enum Fl_Tree_Sort
-/// Sort order options for items added to the tree
-///
-enum Fl_Tree_Sort {
-  FL_TREE_SORT_NONE=0,	///< No sorting; items are added in the order defined (default).
-  FL_TREE_SORT_ASCENDING=1,	///< Add items in ascending sort order.
-  FL_TREE_SORT_DESCENDING=2	///< Add items in descending sort order.
-};
-
-/// \enum Fl_Tree_Connector
-/// Defines the style of connection lines between items.
-///
-enum Fl_Tree_Connector {
-  FL_TREE_CONNECTOR_NONE=0,	///< Use no lines connecting items
-  FL_TREE_CONNECTOR_DOTTED=1,	///< Use dotted lines connecting items (default)
-  FL_TREE_CONNECTOR_SOLID=2	///< Use solid lines connecting items
-};
-
-/// \enum Fl_Tree_Select
-/// Tree selection style.
-///
-enum Fl_Tree_Select {
-  FL_TREE_SELECT_NONE=0,	///< Nothing selected when items are clicked
-  FL_TREE_SELECT_SINGLE=1,	///< Single item selected when item is clicked (default)
-  FL_TREE_SELECT_MULTI=2	///< Multiple items can be selected by clicking with
-  ///< SHIFT or CTRL or mouse drags.
-};
-
-/// \class Fl_Tree_Prefs
-///
-/// \brief Fl_Tree's Preferences class.
-///
-/// This class manages the Fl_Tree's defaults.
-/// You should probably be using the methods in Fl_Tree
-/// instead of trying to accessing tree's preferences settings directly.
-///
-class FL_EXPORT Fl_Tree_Prefs {
-  Fl_Font _labelfont;			// label's font face
-  Fl_Fontsize _labelsize;		// label's font size
-  int _margintop;			// -- 
-  int _marginleft;			//   |- tree's margins
-  //int _marginright;			//   |
-  //int _marginbottom;			// --
-  int _openchild_marginbottom;		// extra space below an open child tree
-  int _usericonmarginleft;		// space to left of user icon (if any)
-  int _labelmarginleft;			// space to left of label
-  int _connectorwidth;			// connector width (right of open/close icon)
-  int _linespacing;			// vertical space between lines
-  // Colors
-  Fl_Color _labelfgcolor;		// label's foreground color
-  Fl_Color _labelbgcolor;		// background color
-  Fl_Color _connectorcolor;		// connector dotted line color
-  Fl_Tree_Connector _connectorstyle;	// connector line style
-  Fl_Image *_openimage;			// the 'open' icon [+]
-  Fl_Image *_closeimage;		// the 'close' icon [-]
-  Fl_Image *_userimage;			// user's own icon
-  char _showcollapse;			// 1=show collapse icons, 0=don't
-  char _showroot;			// show the root item as part of the tree
-  Fl_Tree_Sort   _sortorder;		// none, ascening, descending, etc.
-  Fl_Boxtype     _selectbox;		// selection box type
-  Fl_Tree_Select _selectmode;		// selection mode
-public:
-  Fl_Tree_Prefs();
-  
-  ////////////////////////////
-  // Labels
-  ////////////////////////////
-  /// Return the label's font.
-  inline Fl_Font labelfont() const {
-    return(_labelfont);
-  }
-  /// Set the label's font to \p val.
-  inline void labelfont(Fl_Font val) {
-    _labelfont = val;
-  }
-  /// Return the label's size in pixels.
-  inline Fl_Fontsize labelsize() const {
-    return(_labelsize);
-  }
-  /// Set the label's size in pixels to \p val.
-  inline void labelsize(Fl_Fontsize val) {
-    _labelsize = val;
-  }
-  
-  ////////////////////////////
-  // Margins
-  ////////////////////////////
-  /// Get the left margin's value in pixels
-  inline int marginleft() const {
-    return(_marginleft);
-  }
-  /// Set the left margin's value in pixels
-  inline void marginleft(int val) {
-    _marginleft = val;
-  }
-  /// Get the top margin's value in pixels
-  inline int margintop() const {
-    return(_margintop);
-  }
-  /// Set the top margin's value in pixels
-  inline void margintop(int val) {
-    _margintop = val;
-  }
-  /// Get the margin below an open child in pixels
-  inline int openchild_marginbottom() const {
-    return(_openchild_marginbottom);
-  }
-  /// Set the margin below an open child in pixels
-  inline void openchild_marginbottom(int val) {
-    _openchild_marginbottom = val;
-  }
-  
-  /****** NOT IMPLEMENTED
-   inline int marginright() const {
-   return(_marginright);
-   }
-   inline void marginright(int val) {
-   _marginright = val;
-   }
-   inline int marginbottom() const {
-   return(_marginbottom);
-   }
-   inline void marginbottom(int val) {
-   _marginbottom = val;
-   }
-   *******/
-  
-  /// Get the user icon's left margin value in pixels
-  inline int usericonmarginleft() const {
-    return(_usericonmarginleft);
-  }
-  /// Set the user icon's left margin value in pixels
-  inline void usericonmarginleft(int val) {
-    _usericonmarginleft = val;
-  }
-  /// Get the label's left margin value in pixels
-  inline int labelmarginleft() const {
-    return(_labelmarginleft);
-  }
-  /// Set the label's left margin value in pixels
-  inline void labelmarginleft(int val) {
-    _labelmarginleft = val;
-  }
-  /// Get the line spacing value in pixels
-  inline int linespacing() const {
-    return(_linespacing);
-  }
-  /// Set the line spacing value in pixels
-  inline void linespacing(int val) {
-    _linespacing = val;
-  }
-  
-  ////////////////////////////
-  // Colors and Styles
-  ////////////////////////////
-  /// Get the default label foreground color
-  inline Fl_Color labelfgcolor() const {
-    return(_labelfgcolor);
-  }
-  /// Set the default label foreground color
-  inline void labelfgcolor(Fl_Color val) {
-    _labelfgcolor = val;
-  }
-  /// Get the default label background color
-  inline Fl_Color labelbgcolor() const {
-    return(_labelbgcolor);
-  }
-  /// Set the default label background color
-  inline void labelbgcolor(Fl_Color val) {
-    _labelbgcolor = val;
-  }
-  /// Get the connector color used for tree connection lines.
-  inline Fl_Color connectorcolor() const {
-    return(_connectorcolor);
-  }
-  /// Set the connector color used for tree connection lines.
-  inline void connectorcolor(Fl_Color val) {
-    _connectorcolor = val;
-  }
-  /// Get the connector style.
-  inline Fl_Tree_Connector connectorstyle() const {
-    return(_connectorstyle);
-  }
-  /// Set the connector style.
-  inline void connectorstyle(Fl_Tree_Connector val) {
-    _connectorstyle = val;
-  }
-  /// Set the connector style [integer].
-  inline void connectorstyle(int val) {
-    _connectorstyle = Fl_Tree_Connector(val);
-  }
-  /// Get the tree connection line's width.
-  inline int connectorwidth() const {
-    return(_connectorwidth);
-  }
-  /// Set the tree connection line's width.
-  inline void connectorwidth(int val) {
-    _connectorwidth = val;
-  }
-  
-  ////////////////////////////
-  // Icons
-  ////////////////////////////
-  /// Get the current default 'open' icon.
-  ///     Returns the Fl_Image* of the icon, or 0 if none.
-  ///
-  inline Fl_Image *openicon() const {
-    return(_openimage);
-  }
-  void openicon(Fl_Image *val);
-  /// Gets the default 'close' icon
-  ///     Returns the Fl_Image* of the icon, or 0 if none.
-  ///
-  inline Fl_Image *closeicon() const {
-    return(_closeimage);
-  }
-  void closeicon(Fl_Image *val);
-  /// Gets the default 'user icon' (default is 0)
-  inline Fl_Image *usericon() const {
-    return(_userimage);
-  }
-  /// Sets the default 'user icon'
-  ///     Returns the Fl_Image* of the icon, or 0 if none (default).
-  ///
-  inline void usericon(Fl_Image *val) {
-    _userimage = val;
-  }
-  
-  ////////////////////////////
-  // Options
-  ////////////////////////////
-  /// Returns 1 if the collapse icon is enabled, 0 if not.
-  inline char showcollapse() const {
-    return(_showcollapse);
-  }
-  /// Set if we should show the collapse icon or not.
-  /// If collapse icons are disabled, the user will not be able
-  /// to interactively collapse items in the tree, unless the application
-  /// provides some other means via open() and close().
-  ///
-  /// \param[in] val 1: shows collapse icons (default),\n
-  ///                0: hides collapse icons.
-  ///
-  inline void showcollapse(int val) {
-    _showcollapse = val;
-  }
-  /// Get the default sort order value
-  inline Fl_Tree_Sort sortorder() const {
-    return(_sortorder);
-  }
-  /// Set the default sort order value.
-  ///     Defines the order new items appear when add()ed to the tree.
-  ///     See Fl_Tree_Sort for possible values.
-  ///
-  inline void sortorder(Fl_Tree_Sort val) {
-    _sortorder = val;
-  }
-  /// Get the default selection box's box drawing style as an Fl_Boxtype.
-  inline Fl_Boxtype selectbox() const {
-    return(_selectbox);
-  }
-  /// Set the default selection box's box drawing style to \p val.
-  inline void selectbox(Fl_Boxtype val) {
-    _selectbox = val;
-  }
-  /// Returns 1 if the root item is to be shown, or 0 if not.
-  inline int showroot() const {
-    return(int(_showroot));
-  }
-  /// Set if the root item should be shown or not.
-  /// \param[in] val 1 -- show the root item (default)\n
-  ///                0 -- hide the root item.
-  ///
-  inline void showroot(int val) {
-    _showroot = char(val);
-  }
-  /// Get the selection mode used for the tree
-  inline Fl_Tree_Select selectmode() const {
-    return(_selectmode);
-  }
-  /// Set the selection mode used for the tree to \p val.
-  ///     This affects how items in the tree are selected
-  ///     when clicked on and dragged over by the mouse.
-  ///     See Fl_Tree_Select for possible values.
-  ///
-  inline void selectmode(Fl_Tree_Select val) {
-    _selectmode = val;
-  }
-};
-
-#endif /*FL_TREE_PREFS_H*/
-
-//
-// End of "$Id: Fl_Tree_Prefs.H 8340 2011-01-30 20:22:06Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Valuator.H b/common/fltk/FL/Fl_Valuator.H
deleted file mode 100644
index 73af078..0000000
--- a/common/fltk/FL/Fl_Valuator.H
+++ /dev/null
@@ -1,144 +0,0 @@
-//
-// "$Id: Fl_Valuator.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Valuator header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Valuator widget . */
-
-#ifndef Fl_Valuator_H
-#define Fl_Valuator_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-// shared type() values for classes that work in both directions:
-#define FL_VERTICAL		0 ///< The valuator can work vertically
-#define FL_HORIZONTAL		1 ///< The valuator can work horizontally
-
-/**
-  The Fl_Valuator class controls a single floating-point value
-  and provides a consistent interface to set the value, range, and step,
-  and insures that callbacks are done the same for every object.
-  <P>There are probably more of these classes in FLTK than any others:
-  <P ALIGN=CENTER>\image html  valuators.png</P> 
-  \image latex   valuators.png "Valuators derived from Fl_Valuators" width=10cm
-  <P>In the above diagram each box surrounds an actual subclass.  These
-  are further differentiated by setting the type() of the widget t
-  o the symbolic value labeling the widget.  
-  The ones labelled "0" are the default versions with a type(0).  
-  For consistency the symbol FL_VERTICAL is defined as zero.
-*/
-class FL_EXPORT Fl_Valuator : public Fl_Widget {
-
-  double value_;
-  double previous_value_;
-  double min, max; // truncates to this range *after* rounding
-  double A; int B; // rounds to multiples of A/B, or no rounding if A is zero
-
-protected:
-  /** Tells if the valuator is an FL_HORIZONTAL one */
-  int horizontal() const {return type()& FL_HORIZONTAL;}
-  Fl_Valuator(int X, int Y, int W, int H, const char* L);
-
-  /** Gets the previous floating point value before an event changed it */
-  double previous_value() const {return previous_value_;}
-  /** Stores the current value in the previous value */
-  void handle_push() {previous_value_ = value_;}
-  double softclamp(double);
-  void handle_drag(double newvalue);
-  void handle_release(); // use drag() value
-  virtual void value_damage(); // cause damage() due to value() changing
-  /** Sets the current floating point value. */
-  void set_value(double v) {value_ = v;}
-
-public:
-
-    /**    Sets the minimum (a) and maximum (b) values for the valuator widget. */
-    void bounds(double a, double b) {min=a; max=b;}
-    /**    Gets the minimum value for the valuator.  */
-    double minimum() const {return min;}
-    /**    Sets the minimum value for the valuator.  */
-    void minimum(double a) {min = a;}
-    /**    Gets the maximum value for the valuator.  */
-    double maximum() const {return max;}
-    /**    Sets the maximum value for the valuator.  */
-    void maximum(double a) {max = a;}
-  /**
-    Sets the minimum and maximum values for the valuator. When
-    the user manipulates the widget, the value is limited to this
-    range. This clamping is done <I>after</I> rounding to the step
-    value (this makes a difference if the range is not a multiple of
-    the step).
-    
-    <P>The minimum may be greater than the maximum. This has the
-    effect of "reversing" the object so the larger values
-    are in the opposite direction. This also switches which end of
-    the filled sliders is filled.</P>
-    
-    <P>Some widgets consider this a "soft" range.  This
-    means they will stop at the range, but if the user releases and
-    grabs the control again and tries to move it further, it is
-    allowed.</P>
-    
-    <P>The range may affect the display. You must redraw()
-    the widget after changing the range.
-  */
-  void range(double a, double b) {min = a; max = b;}
-  /**    See double Fl_Valuator::step() const   */
-  void step(int a) {A = a; B = 1;}
-  /**    See double Fl_Valuator::step() const   */
-  void step(double a, int b) {A = a; B = b;}
-  void step(double s);
-  /**
-    Gets or sets the step value. As the user moves the mouse the
-    value is rounded to the nearest multiple of the step value. This
-    is done <I>before</I> clamping it to the range. For most widgets
-    the default step is zero.
-    
-    <P>For precision the step is stored as the ratio of two
-    integers, A/B. You can set these integers directly. Currently
-    setting a floating point value sets the nearest A/1 or 1/B value
-    possible.
-  */
-  double step() const {return A/B;}
-  void precision(int);
-
-  /** Gets the floating point(double) value. See int value(double) */
-  double value() const {return value_;}
-  int value(double);
-
-  virtual int format(char*);
-  double round(double); // round to nearest multiple of step
-  double clamp(double); // keep in range
-  double increment(double, int); // add n*step to value
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Valuator.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Value_Input.H b/common/fltk/FL/Fl_Value_Input.H
deleted file mode 100644
index 47ffcf3..0000000
--- a/common/fltk/FL/Fl_Value_Input.H
+++ /dev/null
@@ -1,139 +0,0 @@
-//
-// "$Id: Fl_Value_Input.H 8337 2011-01-30 09:04:59Z manolo $"
-//
-// Value input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Value_Input widget . */
-
-#ifndef Fl_Value_Input_H
-#define Fl_Value_Input_H
-
-#include "Fl_Valuator.H"
-#include "Fl_Input.H"
-
-/**
-  The Fl_Value_Input widget displays a numeric value.
-  The user can click in the text field and edit it - there is in
-  fact a hidden Fl_Input widget with
-  type(FL_FLOAT_INPUT) or type(FL_INT_INPUT) in
-  there - and when they hit return or tab the value updates to
-  what they typed and the callback is done.
-  
-  <P>If step() is non-zero and integral, then the range of numbers
-  is limited to integers instead of floating point numbers. As
-  well as displaying the value as an integer, typed input is also
-  limited to integer values, even if the hidden Fl_Input widget
-  is of type(FL_FLOAT_INPUT).</P>
-  
-  <P>If step() is non-zero, the user can also drag the
-  mouse across the object and thus slide the value. The left
-  button moves one step() per pixel, the middle by 10
-  * step(), and the right button by 100 * step(). It
-  is therefore impossible to select text by dragging across it,
-  although clicking can still move the insertion cursor.</P>
-  
-  <P>If step() is non-zero and integral, then the range
-  of numbers are limited to integers instead of floating point
-  values.
-  
-  <P ALIGN="CENTER">\image html Fl_Value_Input.png 
-  \image latex  Fl_Value_Input.png "Fl_Value_Input" width=4cm
-*/
-class FL_EXPORT Fl_Value_Input : public Fl_Valuator {
-public:
-  /* This is the encapsulated Fl_input attribute to which 
-  this class delegates the value font, color and shortcut */
-  Fl_Input input;
-private:
-  char soft_;
-  static void input_cb(Fl_Widget*,void*);
-  virtual void value_damage(); // cause damage() due to value() changing
-public:
-  int handle(int);
-protected:
-  void draw();
-public:
-  void resize(int,int,int,int);
-  Fl_Value_Input(int x,int y,int w,int h,const char *l=0);
-  ~Fl_Value_Input();
-
-  /** See void Fl_Value_Input::soft(char s) */
-  void soft(char s) {soft_ = s;}
-  /**
-    If "soft" is turned on, the user is allowed to drag
-    the value outside the range. If they drag the value to one of
-    the ends, let go, then grab again and continue to drag, they can
-    get to any value. The default is true.
-  */
-  char soft() const {return soft_;}
-  /**
-   Returns the current shortcut key for the Input.
-   \see Fl_Value_Input::shortcut(int) 
-  */
-  int shortcut() const {return input.shortcut();}
-  /** 
-   Sets the shortcut key to \p s. Setting this
-   overrides the use of '&' in the label().  The value is a bitwise
-   OR of a key and a set of shift flags, for example FL_ALT | 'a'
-   , FL_ALT | (FL_F + 10), or just 'a'.  A value
-   of 0 disables the shortcut.
-   
-   The key can be any value returned by 
-   Fl::event_key(), but will usually be an ASCII letter.  Use
-   a lower-case letter unless you require the shift key to be held down.
-   
-   The shift flags can be any set of values accepted by 
-   Fl::event_state().  If the bit is on that shift key must
-   be pushed.  Meta, Alt, Ctrl, and Shift must be off if they are not in
-   the shift flags (zero for the other bits indicates a "don't care"
-   setting).
-   */
-  void shortcut(int s) {input.shortcut(s);}
-
-  /** Gets the typeface of the text in the value box.  */
-  Fl_Font textfont() const {return input.textfont();}
-  /** Sets the typeface of the text in the value box.  */
-  void textfont(Fl_Font s) {input.textfont(s);}
-  /** Gets the size of the text in the value box.  */
-  Fl_Fontsize textsize() const {return input.textsize();}
-  /** Sets the size of the text in the value box.  */
-  void textsize(Fl_Fontsize s) {input.textsize(s);}
-  /** Gets the color of the text in the value box.  */
-  Fl_Color textcolor() const {return input.textcolor();}
-  /** Sets the color of the text in the value box.*/
-  void textcolor(Fl_Color n) {input.textcolor(n);}
-  /** Gets the color of the text cursor. The text cursor is black by default. */
-  Fl_Color cursor_color() const {return input.cursor_color();}
-  /** Sets the color of the text cursor. The text cursor is black by default. */
-  void cursor_color(Fl_Color n) {input.cursor_color(n);}
-
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Value_Input.H 8337 2011-01-30 09:04:59Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_Value_Output.H b/common/fltk/FL/Fl_Value_Output.H
deleted file mode 100644
index afae308..0000000
--- a/common/fltk/FL/Fl_Value_Output.H
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// "$Id: Fl_Value_Output.H 7989 2010-12-09 12:19:03Z greg.ercolano $"
-//
-// Value output header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Value_Output widget . */
-
-#ifndef Fl_Value_Output_H
-#define Fl_Value_Output_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-/**
-  The Fl_Value_Output widget displays a floating point value.
-  If step() is not zero, the user can adjust the value by
-  dragging the mouse left and right.  The left button moves one step()
-  per pixel, the middle by 10 * step(), and the right button by 
-  100 * step().
-  <P>This is much lighter-weight than 
-  Fl_Value_Input because it contains no text editing code or
-  character buffer. </P>
-  <P ALIGN=CENTER>\image html Fl_Value_Output.png 
-  \image latex  Fl_Value_Output.png "Fl_Value_Output" width=4cm
-*/
-class FL_EXPORT Fl_Value_Output : public Fl_Valuator {
-  Fl_Font textfont_;
-  Fl_Fontsize textsize_;
-  uchar soft_;
-  Fl_Color textcolor_;
-
-protected:
-  void draw();
-
-public:
-  int handle(int);
-  Fl_Value_Output(int x,int y,int w,int h,const char *l=0);
-
-  /**
-    If "soft" is turned on, the user is allowed to drag the value outside
-    the range.  If they drag the value to one of the ends, let go, then
-    grab again and continue to drag, they can get to any value.  Default is
-    one.
-  */
-  void soft(uchar s) {soft_ = s;}
-  /**
-    If "soft" is turned on, the user is allowed to drag the value outside
-    the range.  If they drag the value to one of the ends, let go, then
-    grab again and continue to drag, they can get to any value.  Default is
-    one.
-  */
-  uchar soft() const {return soft_;}
-
-  /**    Gets the typeface of the text in the value box.  */
-  Fl_Font textfont() const {return textfont_;}
-  /**    Sets the typeface of the text in the value box.  */
-  void textfont(Fl_Font s) {textfont_ = s;}
-  /**    Gets the size of the text in the value box.  */
-  Fl_Fontsize textsize() const {return textsize_;}
-  void textsize(Fl_Fontsize s) {textsize_ = s;}
-  /**    Sets the color of the text in the value box.  */
-  Fl_Color textcolor() const {return textcolor_;}
-  /**    Gets the color of the text in the value box.  */
-  void textcolor(Fl_Color s) {textcolor_ = s;}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Value_Output.H 7989 2010-12-09 12:19:03Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Value_Slider.H b/common/fltk/FL/Fl_Value_Slider.H
deleted file mode 100644
index 21a42ff..0000000
--- a/common/fltk/FL/Fl_Value_Slider.H
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// "$Id: Fl_Value_Slider.H 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Value slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Value_Slider widget . */
-
-#ifndef Fl_Value_Slider_H
-#define Fl_Value_Slider_H
-
-#include "Fl_Slider.H"
-
-/**
-  The Fl_Value_Slider widget is a Fl_Slider widget
-  with a box displaying the current value.
-  <P ALIGN=CENTER>\image html value_slider.png 
-  \image latex  value_slider.png "Fl_Value_Slider" width=4cm
-*/
-class FL_EXPORT Fl_Value_Slider : public Fl_Slider {
-    Fl_Font textfont_;
-    Fl_Fontsize textsize_;
-    Fl_Color textcolor_;
-protected:
-    void draw();
-public:
-    int handle(int);
-    Fl_Value_Slider(int x,int y,int w,int h, const char *l = 0);
-    /**    Gets the typeface of the text in the value box.  */
-    Fl_Font textfont() const {return textfont_;}
-    /**    Sets the typeface of the text in the value box.  */
-    void textfont(Fl_Font s) {textfont_ = s;}
-    /**    Gets the size of the text in the value box.  */
-    Fl_Fontsize textsize() const {return textsize_;}
-    /**    Sets the size of the text in the value box.  */
-    void textsize(Fl_Fontsize s) {textsize_ = s;}
-    /**    Gets the color of the text in the value box.  */
-    Fl_Color textcolor() const {return textcolor_;}
-    /**    Sets the color of the text in the value box.  */
-    void textcolor(Fl_Color s) {textcolor_ = s;}
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Value_Slider.H 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/FL/Fl_Widget.H b/common/fltk/FL/Fl_Widget.H
deleted file mode 100644
index 041b2d3..0000000
--- a/common/fltk/FL/Fl_Widget.H
+++ /dev/null
@@ -1,1041 +0,0 @@
-//
-// "$Id: Fl_Widget.H 8623 2011-04-24 17:09:41Z AlbrechtS $"
-//
-// Widget header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   Fl_Widget, Fl_Label classes . */
-
-#ifndef Fl_Widget_H
-#define Fl_Widget_H
-
-#include "Enumerations.H"
-
-/**
-  \todo	typedef's fl_intptr_t and fl_uintptr_t should be documented.
-*/
-#ifdef _WIN64
-#ifdef __GNUC__
-#include <stdint.h>
-#else
-#include <stddef.h>  // M$VC
-#endif
-typedef intptr_t fl_intptr_t;
-typedef uintptr_t fl_uintptr_t;
-#else
-typedef long fl_intptr_t;
-typedef unsigned long fl_uintptr_t;
-#endif
-
-class Fl_Widget;
-class Fl_Window;
-class Fl_Group;
-class Fl_Image;
-
-/** Default callback type definition for all fltk widgets (by far the most used) */
-typedef void (Fl_Callback )(Fl_Widget*, void*);
-/** Default callback type pointer definition for all fltk widgets */
-typedef Fl_Callback* Fl_Callback_p; // needed for BORLAND
-/** One parameter callback type definition passing only the widget */
-typedef void (Fl_Callback0)(Fl_Widget*);
-/** Callback type definition passing the widget and a long data value */
-typedef void (Fl_Callback1)(Fl_Widget*, long);
-
-/** This struct stores all information for a text or mixed graphics label.
-
-    \todo For FLTK 1.3, the Fl_Label type will become a widget by itself. That way
-          we will be avoiding a lot of code duplication by handling labels in 
-          a similar fashion to widgets containing text. We also provide an easy
-          interface for very complex labels, containing html or vector graphics.
- */
-struct FL_EXPORT Fl_Label {
-  /** label text */
-  const char* value;
-  /** optional image for an active label */
-  Fl_Image* image;
-  /** optional image for a deactivated label */
-  Fl_Image* deimage;
-  /** label font used in text */
-  Fl_Font font;
-  /** size of label font */
-  Fl_Fontsize size;
-  /** text color */
-  Fl_Color color;
-  /** alignment of label */
-  Fl_Align align_;
-  /** type of label. \see Fl_Labeltype */
-  uchar type;
-
-  /** Draws the label aligned to the given box */
-  void draw(int,int,int,int, Fl_Align) const ;
-  void measure(int &w, int &h) const ;
-};
-
-
-/** Fl_Widget is the base class for all widgets in FLTK.  
-  
-    You can't create one of these because the constructor is not public.
-    However you can subclass it.  
-
-    All "property" accessing methods, such as color(), parent(), or argument() 
-    are implemented as trivial inline functions and thus are as fast and small 
-    as accessing fields in a structure. Unless otherwise noted, the property 
-    setting methods such as color(n) or label(s) are also trivial inline 
-    functions, even if they change the widget's appearance. It is up to the 
-    user code to call redraw() after these.
- */
-class FL_EXPORT Fl_Widget {
-  friend class Fl_Group;
-  friend class Fl_X;
-
-  Fl_Group* parent_;
-  Fl_Callback* callback_;
-  void* user_data_;
-  int x_,y_,w_,h_;
-  Fl_Label label_;
-  unsigned int flags_;
-  Fl_Color color_;
-  Fl_Color color2_;
-  uchar type_;
-  uchar damage_;
-  uchar box_;
-  uchar when_;
-
-  const char *tooltip_;
-
-  /** unimplemented copy ctor */
-  Fl_Widget(const Fl_Widget &);
-  /** unimplemented assignment operator */
-  Fl_Widget& operator=(const Fl_Widget &);
-
-protected:
-
-  /** Creates a widget at the given position and size.
-
-      The Fl_Widget is a protected constructor, but all derived widgets have a 
-      matching public constructor. It takes a value for x(), y(), w(), h(), and 
-      an optional value for label().
-    
-      \param[in] x, y the position of the widget relative to the enclosing window
-      \param[in] w, h size of the widget in pixels
-      \param[in] label optional text for the widget label
-   */
-  Fl_Widget(int x, int y, int w, int h, const char *label=0L);
-
-  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
-  void x(int v) {x_ = v;}
-  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
-  void y(int v) {y_ = v;}
-  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
-  void w(int v) {w_ = v;}
-  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
-  void h(int v) {h_ = v;}
-  /** Gets the widget flags mask */
-  unsigned int flags() const {return flags_;}
-  /** Sets a flag in the flags mask */
-  void set_flag(unsigned int c) {flags_ |= c;}
-  /** Clears a flag in the flags mask */
-  void clear_flag(unsigned int c) {flags_ &= ~c;}
-  /** flags possible values enumeration.
-      See activate(), output(), visible(), changed(), set_visible_focus()
-  */
-  enum {
-        INACTIVE        = 1<<0,   ///< the widget can't receive focus, and is disabled but potentially visible
-        INVISIBLE       = 1<<1,   ///< the widget is not drawn, but can receive a few special events
-        OUTPUT          = 1<<2,   ///< for output only
-        NOBORDER        = 1<<3,   ///< don't draw a decoration (Fl_Window)
-        FORCE_POSITION  = 1<<4,   ///< don't let the window manager position the window (Fl_Window)
-        NON_MODAL       = 1<<5,   ///< this is a hovering toolbar window (Fl_Window)
-        SHORTCUT_LABEL  = 1<<6,   ///< the label contains a shortcut we need to draw
-        CHANGED         = 1<<7,   ///< the widget value changed
-        OVERRIDE        = 1<<8,   ///< position window on top (Fl_Window)
-        VISIBLE_FOCUS   = 1<<9,   ///< accepts keyboard focus navigation if the widget can have the focus
-        COPIED_LABEL    = 1<<10,  ///< the widget label is internally copied, its destruction is handled by the widget
-        CLIP_CHILDREN   = 1<<11,  ///< all drawing within this widget will be clipped (Fl_Group)
-        MENU_WINDOW     = 1<<12,  ///< a temporary popup window, dismissed by clicking outside (Fl_Window)
-        TOOLTIP_WINDOW  = 1<<13,  ///< a temporary popup, transparent to events, and dismissed easily (Fl_Window)
-        MODAL           = 1<<14,  ///< a window blocking input to all other winows (Fl_Window)
-        NO_OVERLAY      = 1<<15,  ///< window not using a hardware overlay plane (Fl_Menu_Window)
-        GROUP_RELATIVE  = 1<<16,  ///< position this widget relative to the parent group, not to the window
-        COPIED_TOOLTIP  = 1<<17,  ///< the widget tooltip is internally copied, its destruction is handled by the widget
-        SIMPLE_KEYBOARD = 1<<18,  ///< the widget wants simple, consistent keypresses and not advanced input (like character composition and CJK input)
-        FULLSCREEN      = 1<<19,  ///< a fullscreen window (Fl_Window)
-        // (space for more flags)
-        USERFLAG3       = 1<<29,  ///< reserved for 3rd party extensions
-        USERFLAG2       = 1<<30,  ///< reserved for 3rd party extensions
-        USERFLAG1       = 1<<31   ///< reserved for 3rd party extensions
-  };
-  void draw_box() const;
-  void draw_box(Fl_Boxtype t, Fl_Color c) const;
-  void draw_box(Fl_Boxtype t, int x,int y,int w,int h, Fl_Color c) const;
-  void draw_backdrop() const;
-  /** draws a focus rectangle around the widget */
-  void draw_focus() {draw_focus(box(),x(),y(),w(),h());}
-  void draw_focus(Fl_Boxtype t, int x,int y,int w,int h) const;
-  void draw_label() const;
-  void draw_label(int, int, int, int) const;
-
-public:
-
-  /** Destroys the widget.
-      Destroying single widgets is not very common. You almost always want to 
-      destroy the parent group instead, which will destroy all of the child widgets 
-      and groups in that group.
-      
-      \since FLTK 1.3, the widget's destructor removes the widget from its parent
-      group, if it is member of a group.
-   */
-  virtual ~Fl_Widget();
-
-  /** Draws the widget.
-      Never call this function directly. FLTK will schedule redrawing whenever
-      needed. If your widget must be redrawn as soon as possible, call redraw()
-      instead.
-
-      Override this function to draw your own widgets.
-
-      If you ever need to call another widget's draw method <I>from within your
-      own draw() method</I>, e.g. for an embedded scrollbar, you can do it
-      (because draw() is virtual) like this:
-
-      \code
-        Fl_Widget *s = &scroll;		// scroll is an embedded Fl_Scrollbar
-	s->draw();			// calls Fl_Scrollbar::draw()
-      \endcode
-   */
-  virtual void draw() = 0;
-
-  /** Handles the specified event. 
-      You normally don't call this method directly, but instead let FLTK do 
-      it when the user interacts with the widget.
-     
-      When implemented in a widget, this function must return 0 if the 
-      widget does not use the event or 1 otherwise.
-
-      Most of the time, you want to call the inherited handle() method in 
-      your overridden method so that you don't short-circuit events that you 
-      don't handle. In this last case you should return the callee retval.
-    
-      \param[in] event the kind of event received
-      \retval 0 if the event was not used or understood
-      \retval 1 if the event was used and can be deleted
-      \see Fl_Event
-   */
-  virtual int handle(int event);
-
-  /** Returns a pointer to the parent widget.  
-      Usually this is a Fl_Group or Fl_Window. 
-      \retval NULL if the widget has no parent
-      \see Fl_Group::add(Fl_Widget*)
-   */
-  Fl_Group* parent() const {return parent_;}
-
-  /** Internal use only - "for hacks only".
-  
-      It is \em \b STRONGLY recommended not to use this method, because it
-      short-circuits Fl_Group's normal widget adding and removing methods,
-      if the widget is already a child widget of another Fl_Group.
-
-      Use Fl_Group::add(Fl_Widget*) and/or Fl_Group::remove(Fl_Widget*) instead.
-  */
-  void parent(Fl_Group* p) {parent_ = p;} // for hacks only, use Fl_Group::add()
-
-  /** Gets the widget type.
-      Returns the widget type value, which is used for Forms compatibility
-      and to simulate RTTI.
-      
-      \todo Explain "simulate RTTI" (currently only used to decide if a widget
-      is a window, i.e. type()>=FL_WINDOW ?). Is type() really used in a way
-      that ensures "Forms compatibility" ?
-   */
-  uchar type() const {return type_;}
-
-  /** Sets the widget type.
-      This is used for Forms compatibility.
-   */
-  void type(uchar t) {type_ = t;}
-
-  /** Gets the widget position in its window.
-      \return the x position relative to the window
-   */
-  int x() const {return x_;}
-
-  /** Gets the widget position in its window.
-      \return the y position relative to the window
-   */
-  int y() const {return y_;}
-
-  /** Gets the widget width.
-      \return the width of the widget in pixels.
-   */
-  int w() const {return w_;}
-
-  /** Gets the widget height.
-      \return the height of the widget in pixels.
-   */
-  int h() const {return h_;}
-
-  /** Changes the size or position of the widget.
-
-      This is a virtual function so that the widget may implement its 
-      own handling of resizing. The default version does \e not
-      call the redraw() method, but instead relies on the parent widget 
-      to do so because the parent may know a faster way to update the 
-      display, such as scrolling from the old position.  
-
-      Some window managers under X11 call resize() a lot more often 
-      than needed. Please verify that the position or size of a widget 
-      did actually change before doing any extensive calculations.
-
-      position(X, Y) is a shortcut for resize(X, Y, w(), h()), 
-      and size(W, H) is a shortcut for resize(x(), y(), W, H).
-    
-      \param[in] x, y new position relative to the parent window 
-      \param[in] w, h new size
-      \see position(int,int), size(int,int)
-   */
-  virtual void resize(int x, int y, int w, int h);
-
-  /** Internal use only. */
-  int damage_resize(int,int,int,int);
-
-  /** Repositions the window or widget.
-
-      position(X, Y) is a shortcut for resize(X, Y, w(), h()).
-    
-      \param[in] X, Y new position relative to the parent window 
-      \see resize(int,int,int,int), size(int,int)
-   */
-  void position(int X,int Y) {resize(X,Y,w_,h_);}
-
-  /** Changes the size of the widget.
-
-      size(W, H) is a shortcut for resize(x(), y(), W, H).
-    
-      \param[in] W, H new size
-      \see position(int,int), resize(int,int,int,int)
-   */
-  void size(int W,int H) {resize(x_,y_,W,H);}
-
-  /** Gets the label alignment.
-
-      \return label alignment
-      \see label(), align(Fl_Align), Fl_Align
-   */
-  Fl_Align align() const {return label_.align_;}
-
-  /** Sets the label alignment.
-      This controls how the label is displayed next to or inside the widget. 
-      The default value is FL_ALIGN_CENTER, which centers the label inside 
-      the widget.
-      \param[in] alignment new label alignment
-      \see align(), Fl_Align
-   */
-  void align(Fl_Align alignment) {label_.align_ = alignment;}
-
-  /** Gets the box type of the widget.
-      \return the current box type
-      \see box(Fl_Boxtype), Fl_Boxtype
-   */
-  Fl_Boxtype box() const {return (Fl_Boxtype)box_;}
-  
-  /** Sets the box type for the widget. 
-      This identifies a routine that draws the background of the widget.
-      See Fl_Boxtype for the available types. The default depends on the 
-      widget, but is usually FL_NO_BOX or FL_UP_BOX.
-      \param[in] new_box the new box type
-      \see box(), Fl_Boxtype
-   */
-  void box(Fl_Boxtype new_box) {box_ = new_box;}
-
-  /** Gets the background color of the widget.
-      \return current background color
-      \see color(Fl_Color), color(Fl_Color, Fl_Color)
-   */
-  Fl_Color color() const {return color_;}
-
-  /** Sets the background color of the widget. 
-      The color is passed to the box routine. The color is either an index into 
-      an internal table of RGB colors or an RGB color value generated using 
-      fl_rgb_color().
-      
-      The default for most widgets is FL_BACKGROUND_COLOR. Use Fl::set_color()
-      to redefine colors in the color map.
-      \param[in] bg background color
-      \see color(), color(Fl_Color, Fl_Color), selection_color(Fl_Color)
-   */
-  void color(Fl_Color bg) {color_ = bg;}
-
-  /** Gets the selection color.
-      \return the current selection color
-      \see selection_color(Fl_Color), color(Fl_Color, Fl_Color)
-   */
-  Fl_Color selection_color() const {return color2_;}
-
-  /** Sets the selection color.
-      The selection color is defined for Forms compatibility and is usually 
-      used to color the widget when it is selected, although some widgets 
-      use this color for other purposes. You can set both colors at once 
-      with color(Fl_Color bg, Fl_Color sel).
-      \param[in] a the new selection color
-      \see selection_color(), color(Fl_Color, Fl_Color)
-   */
-  void selection_color(Fl_Color a) {color2_ = a;}
-
-  /** Sets the background and selection color of the widget. 
-
-      The two color form sets both the background and selection colors. 
-      \param[in] bg background color
-      \param[in] sel selection color
-      \see color(unsigned), selection_color(unsigned)
-   */
-  void color(Fl_Color bg, Fl_Color sel) {color_=bg; color2_=sel;}
-
-  /** Gets the current label text.
-      \return a pointer to the current label text
-      \see label(const char *), copy_label(const char *)
-   */
-  const char* label() const {return label_.value;}
-
-  /** Sets the current label pointer.
-
-      The label is shown somewhere on or next to the widget. The passed pointer 
-      is stored unchanged in the widget (the string is \em not copied), so if 
-      you need to set the label to a formatted value, make sure the buffer is 
-      static, global, or allocated. The copy_label() method can be used 
-      to make a copy of the label string automatically.
-      \param[in] text pointer to new label text
-      \see copy_label()
-   */
-  void label(const char* text);
-
-  /** Sets the current label. 
-      Unlike label(), this method allocates a copy of the label 
-      string instead of using the original string pointer.
-
-      The internal copy will automatically be freed whenever you assign
-      a new label or when the widget is destroyed.
-
-      \param[in] new_label the new label text
-      \see label()
-   */
-  void copy_label(const char *new_label);
-
-  /** Shortcut to set the label text and type in one call.
-      \see label(const char *), labeltype(Fl_Labeltype)
-   */
-  void label(Fl_Labeltype a, const char* b) {label_.type = a; label_.value = b;}
-
-  /** Gets the label type.
-      \return the current label type.
-      \see Fl_Labeltype
-   */
-  Fl_Labeltype labeltype() const {return (Fl_Labeltype)label_.type;}
-
-  /** Sets the label type. 
-      The label type identifies the function that draws the label of the widget. 
-      This is generally used for special effects such as embossing or for using 
-      the label() pointer as another form of data such as an icon. The value 
-      FL_NORMAL_LABEL prints the label as plain text.
-      \param[in] a new label type
-      \see Fl_Labeltype
-   */
-  void labeltype(Fl_Labeltype a) {label_.type = a;}
-
-  /** Gets the label color. 
-      The default color is FL_FOREGROUND_COLOR. 
-      \return the current label color
-   */
-  Fl_Color labelcolor() const {return label_.color;}
-
-  /** Sets the label color. 
-      The default color is FL_FOREGROUND_COLOR. 
-      \param[in] c the new label color
-   */
-  void labelcolor(Fl_Color c) {label_.color=c;}
-
-  /** Gets the font to use. 
-      Fonts are identified by indexes into a table. The default value
-      uses a Helvetica typeface (Arial for Microsoft&reg; Windows&reg;).
-      The function Fl::set_font() can define new typefaces.
-      \return current font used by the label
-      \see Fl_Font
-   */
-  Fl_Font labelfont() const {return label_.font;}
-
-  /** Sets the font to use. 
-      Fonts are identified by indexes into a table. The default value
-      uses a Helvetica typeface (Arial for Microsoft&reg; Windows&reg;).
-      The function Fl::set_font() can define new typefaces.
-      \param[in] f the new font for the label
-      \see Fl_Font
-   */
-  void labelfont(Fl_Font f) {label_.font=f;}
-
-  /** Gets the font size in pixels. 
-      The default size is 14 pixels.
-      \return the current font size
-   */
-  Fl_Fontsize labelsize() const {return label_.size;}
-
-  /** Sets the font size in pixels.
-      \param[in] pix the new font size
-      \see Fl_Fontsize labelsize()
-   */
-  void labelsize(Fl_Fontsize pix) {label_.size=pix;}
-
-  /** Gets the image that is used as part of the widget label.
-      This image is used when drawing the widget in the active state.
-      \return the current image
-   */
-  Fl_Image* image() {return label_.image;}
-  const Fl_Image* image() const {return label_.image;}
-
-  /** Sets the image to use as part of the widget label.
-      This image is used when drawing the widget in the active state.
-      \param[in] img the new image for the label 
-   */
-  void image(Fl_Image* img) {label_.image=img;}
-
-  /** Sets the image to use as part of the widget label.
-      This image is used when drawing the widget in the active state.
-      \param[in] img the new image for the label 
-   */
-  void image(Fl_Image& img) {label_.image=&img;}
-
-  /** Gets the image that is used as part of the widget label.  
-      This image is used when drawing the widget in the inactive state.
-      \return the current image for the deactivated widget
-   */
-  Fl_Image* deimage() {return label_.deimage;}
-  const Fl_Image* deimage() const {return label_.deimage;}
-
-  /** Sets the image to use as part of the widget label.  
-      This image is used when drawing the widget in the inactive state.
-      \param[in] img the new image for the deactivated widget
-   */
-  void deimage(Fl_Image* img) {label_.deimage=img;}
-
-  /** Sets the image to use as part of the widget label.  
-      This image is used when drawing the widget in the inactive state.
-      \param[in] img the new image for the deactivated widget
-   */
-  void deimage(Fl_Image& img) {label_.deimage=&img;}
-
-  /** Gets the current tooltip text.
-      \return a pointer to the tooltip text or NULL
-      \see tooltip(const char*), copy_tooltip(const char*)
-   */
-  const char *tooltip() const {return tooltip_;}
-
-  void tooltip(const char *text);		// see Fl_Tooltip
-  void copy_tooltip(const char *text);		// see Fl_Tooltip
-
-  /** Gets the current callback function for the widget.
-      Each widget has a single callback.
-      \return current callback
-   */
-  Fl_Callback_p callback() const {return callback_;}
-
-  /** Sets the current callback function for the widget.
-      Each widget has a single callback.
-      \param[in] cb new callback
-      \param[in] p user data
-   */
-  void callback(Fl_Callback* cb, void* p) {callback_=cb; user_data_=p;}
-
-  /** Sets the current callback function for the widget.
-      Each widget has a single callback.
-      \param[in] cb new callback
-   */
-  void callback(Fl_Callback* cb) {callback_=cb;}
-
-  /** Sets the current callback function for the widget.
-      Each widget has a single callback.
-      \param[in] cb new callback
-   */
-  void callback(Fl_Callback0*cb) {callback_=(Fl_Callback*)cb;}
-
-  /** Sets the current callback function for the widget.
-      Each widget has a single callback.
-      \param[in] cb new callback
-      \param[in] p user data
-   */
-  void callback(Fl_Callback1*cb, long p=0) {callback_=(Fl_Callback*)cb; user_data_=(void*)p;}
-
-  /** Gets the user data for this widget.
-      Gets the current user data (void *) argument that is passed to the callback function.
-      \return user data as a pointer
-   */
-  void* user_data() const {return user_data_;}
-
-  /** Sets the user data for this widget.
-      Sets the new user data (void *) argument that is passed to the callback function.
-      \param[in] v new user data
-   */
-  void user_data(void* v) {user_data_ = v;}
-
-  /** Gets the current user data (long) argument that is passed to the callback function.
-   */
-  long argument() const {return (long)(fl_intptr_t)user_data_;}
-
-  /** Sets the current user data (long) argument that is passed to the callback function.
-      \todo The user data value must be implemented using \em intptr_t or similar
-      to avoid 64-bit machine incompatibilities.
-   */
-  void argument(long v) {user_data_ = (void*)v;}
-
-  /** Returns the conditions under which the callback is called.
-
-      You can set the flags with when(uchar), the default value is
-      FL_WHEN_RELEASE.
-
-      \return set of flags
-      \see when(uchar)
-   */
-  Fl_When when() const {return (Fl_When)when_;}
-
-  /** Sets the flags used to decide when a callback is called.
-
-     This controls when callbacks are done. The following values are useful,
-     the default value is FL_WHEN_RELEASE:
-     
-     \li 0: The callback is not done, but changed() is turned on.
-     \li FL_WHEN_CHANGED: The callback is done each time the text is
-         changed by the user.
-     \li FL_WHEN_RELEASE: The callback will be done when this widget loses 
-         the focus, including when the window is unmapped. This is a useful 
-	 value for text fields in a panel where doing the callback on every
-  	 change is wasteful. However the callback will also happen if the 
-	 mouse is moved out of the window, which means it should not do 
-	 anything visible (like pop up an error message).
-	 You might do better setting this to zero, and scanning all the
-	 items for changed() when the OK button on a panel is pressed.
-     \li FL_WHEN_ENTER_KEY: If the user types the Enter key, the entire 
-         text is selected, and the callback is done if the text has changed. 
-	 Normally the Enter key will navigate to the next field (or insert 
-	 a newline for a Fl_Multiline_Input) - this changes the behavior.
-     \li FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED: The Enter key will do the
-         callback even if the text has not changed. Useful for command fields.
-      Fl_Widget::when() is a set of bitflags used by subclasses of 
-      Fl_Widget to decide when to do the callback.
-
-      If the value is zero then the callback is never done. Other values 
-      are described  in the individual widgets. This field is in the base 
-      class so that you can scan a panel and do_callback() on all the ones
-      that don't do their own callbacks in response to an "OK" button.
-      \param[in] i set of flags
-   */
-  void when(uchar i) {when_ = i;}
-
-  /** Returns whether a widget is visible.
-      \retval 0 if the widget is not drawn and hence invisible.
-      \see show(), hide(), visible_r()
-   */
-  unsigned int visible() const {return !(flags_&INVISIBLE);}
-
-  /** Returns whether a widget and all its parents are visible.
-      \retval 0 if the widget or any of its parents are invisible.
-      \see show(), hide(), visible()
-   */
-  int visible_r() const;
-
-  /** Makes a widget visible.
-
-      An invisible widget never gets redrawn and does not get keyboard
-      or mouse events, but can receive a few other events like FL_SHOW.
-
-      The visible() method returns true if the widget is set to be
-      visible. The visible_r() method returns true if the widget and
-      all of its parents are visible. A widget is only visible if
-      visible() is true on it <I>and all of its parents</I>.
-
-      Changing it will send FL_SHOW or FL_HIDE events to the widget.
-      <I>Do not change it if the parent is not visible, as this
-      will send false FL_SHOW or FL_HIDE events to the widget</I>.
-      redraw() is called if necessary on this or the parent.
-
-      \see hide(), visible(), visible_r()
-   */
-  virtual void show();
-  
-  /** Makes a widget invisible.
-      \see show(), visible(), visible_r()
-   */
-  virtual void hide();
-
-  /** Makes the widget visible. 
-      You must still redraw the parent widget to see a change in the 
-      window. Normally you want to use the show() method instead.
-   */
-  void set_visible() {flags_ &= ~INVISIBLE;}
-
-  /** Hides the widget. 
-      You must still redraw the parent to see a change in the window. 
-      Normally you want to use the hide() method instead.
-   */
-  void clear_visible() {flags_ |= INVISIBLE;}
-
-  /** Returns whether the widget is active.
-      \retval 0 if the widget is inactive
-      \see active_r(), activate(), deactivate()
-   */
-  unsigned int active() const {return !(flags_&INACTIVE);}
-
-  /** Returns whether the widget and all of its parents are active. 
-      \retval 0 if this or any of the parent widgets are inactive
-      \see active(), activate(), deactivate()
-   */
-  int active_r() const;
-
-  /** Activates the widget.
-      Changing this value will send FL_ACTIVATE to the widget if 
-      active_r() is true.
-      \see active(), active_r(), deactivate()
-   */
-  void activate();
-
-  /** Deactivates the widget.
-      Inactive widgets will be drawn "grayed out", e.g. with less contrast 
-      than the active widget. Inactive widgets will not receive any keyboard 
-      or mouse button events. Other events (including FL_ENTER, FL_MOVE, 
-      FL_LEAVE, FL_SHORTCUT, and others) will still be sent. A widget is 
-      only active if active() is true on it <I>and all of its parents</I>.  
-
-      Changing this value will send FL_DEACTIVATE to the widget if 
-      active_r() is true.
-
-      Currently you cannot deactivate Fl_Window widgets.
-
-      \see activate(), active(), active_r()
-   */
-  void deactivate();
-
-  /** Returns if a widget is used for output only.
-      output() means the same as !active() except it does not change how the 
-      widget is drawn. The widget will not receive any events. This is useful 
-      for making scrollbars or buttons that work as displays rather than input 
-      devices.
-      \retval 0 if the widget is used for input and output
-      \see set_output(), clear_output() 
-   */
-  unsigned int output() const {return (flags_&OUTPUT);}
-
-  /** Sets a widget to output only.
-      \see output(), clear_output() 
-   */
-  void set_output() {flags_ |= OUTPUT;}
-
-  /** Sets a widget to accept input.
-      \see set_output(), output() 
-   */
-  void clear_output() {flags_ &= ~OUTPUT;}
-
-  /** Returns if the widget is able to take events.
-      This is the same as (active() && !output() && visible())
-      but is faster.
-      \retval 0 if the widget takes no events
-   */
-  unsigned int takesevents() const {return !(flags_&(INACTIVE|INVISIBLE|OUTPUT));}
-
-  /** 
-      Checks if the widget value changed since the last callback.
-
-      "Changed" is a flag that is turned on when the user changes the value 
-      stored in the widget. This is only used by subclasses of Fl_Widget that 
-      store values, but is in the base class so it is easier to scan all the 
-      widgets in a panel and do_callback() on the changed ones in response 
-      to an "OK" button.
-
-      Most widgets turn this flag off when they do the callback, and when 
-      the program sets the stored value.
-
-     \retval 0 if the value did not change
-     \see set_changed(), clear_changed()
-   */
-  unsigned int changed() const {return flags_&CHANGED;}
-
-  /** Marks the value of the widget as changed.
-      \see changed(), clear_changed()
-   */
-  void set_changed() {flags_ |= CHANGED;}
-
-  /** Marks the value of the widget as unchanged.
-      \see changed(), set_changed()
-   */
-  void clear_changed() {flags_ &= ~CHANGED;}
-
-  /** 
-      Returns if the widget sees a simplified keyboard model or not.
-
-      Normally widgets get a full-featured keyboard model that is geared
-      towards text input. This includes support for compose sequences and
-      advanced input methods, commonly used for asian writing system. This
-      system however has downsides in that extra graphic can be presented
-      to the user and that a physical key press doesn't correspond directly
-      to a FLTK event.
-
-      Widgets that need a direct correspondence between actual key events
-      and those seen by the widget can swith to the simplified keyboard
-      model.
-
-     \retval 0 if the widget uses the normal keyboard model
-     \see set_changed(), clear_changed()
-   */
-  unsigned int simple_keyboard() const {return flags_&SIMPLE_KEYBOARD;}
-
-  /** Marks a widget to use the simple keyboard model.
-      \see changed(), clear_changed()
-   */
-  void set_simple_keyboard() {flags_ |= SIMPLE_KEYBOARD;}
-
-  /** Marks a widget to use the normal keyboard model.
-      \see changed(), set_changed()
-   */
-  void set_normal_keyboard() {flags_ &= ~SIMPLE_KEYBOARD;}
-
-  /** Gives the widget the keyboard focus.
-      Tries to make this widget be the Fl::focus() widget, by first sending 
-      it an FL_FOCUS event, and if it returns non-zero, setting 
-      Fl::focus() to this widget. You should use this method to 
-      assign the focus to a widget.  
-      \return true if the widget accepted the focus.
-   */
-  int take_focus();
-
-  /** Enables keyboard focus navigation with this widget. 
-      Note, however, that this will not necessarily mean that the widget
-      will accept focus, but for widgets that can accept focus, this method
-      enables it if it has been disabled.
-      \see visible_focus(), clear_visible_focus(), visible_focus(int) 
-   */
-  void set_visible_focus() { flags_ |= VISIBLE_FOCUS; }
-
-  /** Disables keyboard focus navigation with this widget. 
-      Normally, all widgets participate in keyboard focus navigation.
-      \see set_visible_focus(), visible_focus(), visible_focus(int) 
-   */
-  void clear_visible_focus() { flags_ &= ~VISIBLE_FOCUS; }
-
-  /** Modifies keyboard focus navigation. 
-      \param[in] v set or clear visible focus
-      \see set_visible_focus(), clear_visible_focus(), visible_focus() 
-   */
-  void visible_focus(int v) { if (v) set_visible_focus(); else clear_visible_focus(); }
-
-  /** Checks whether this widget has a visible focus.
-      \retval 0 if this widget has no visible focus.
-      \see visible_focus(int), set_visible_focus(), clear_visible_focus()
-   */
-  unsigned int  visible_focus() { return flags_ & VISIBLE_FOCUS; }
-
-  /** Sets the default callback for all widgets.
-      Sets the default callback, which puts a pointer to the widget on the queue 
-      returned by Fl::readqueue(). You may want to call this from your own callback.
-      \param[in] cb the new callback
-      \param[in] d user data associated with that callback
-      \see callback(), do_callback(), Fl::readqueue()
-   */
-  static void default_callback(Fl_Widget *cb, void *d);
-
-  /** Calls the widget callback.
-      Causes a widget to invoke its callback function with default arguments.
-      \see callback()
-   */
-  void do_callback() {do_callback(this,user_data_);}
-
-  /** Calls the widget callback.
-      Causes a widget to invoke its callback function with arbitrary arguments.
-      \param[in] o call the callback with \p o as the widget argument
-      \param[in] arg call the callback with \p arg as the user data argument
-      \see callback()
-   */
-  void do_callback(Fl_Widget* o,long arg) {do_callback(o,(void*)arg);}
-
-  // Causes a widget to invoke its callback function with arbitrary arguments.
-  // Documentation and implementation in Fl_Widget.cxx
-  void do_callback(Fl_Widget* o,void* arg=0);
-
-  /* Internal use only. */
-  int test_shortcut();
-  /* Internal use only. */
-  static unsigned int label_shortcut(const char *t);
-  /* Internal use only. */
-  static int test_shortcut(const char*, const bool require_alt = false);
-  /* Internal use only. */
-  void _set_fullscreen() {flags_ |= FULLSCREEN;}
-  void _clear_fullscreen() {flags_ &= ~FULLSCREEN;}
-
-  /** Checks if w is a child of this widget.
-      \param[in] w potential child widget
-      \return Returns 1 if \p w is a child of this widget, or is
-      equal to this widget. Returns 0 if \p w is NULL.
-   */
-  int contains(const Fl_Widget *w) const ;
-
-  /** Checks if this widget is a child of w.
-      Returns 1 if this widget is a child of \p w, or is
-      equal to \p w. Returns 0 if \p w is NULL.
-      \param[in] w the possible parent widget.
-      \see contains()
-   */
-  int inside(const Fl_Widget* w) const {return w ? w->contains(this) : 0;}
-
-  /** Schedules the drawing of the widget.
-      Marks the widget as needing its draw() routine called.
-   */
-  void redraw();
-
-  /** Schedules the drawing of the label.
-     Marks the widget or the parent as needing a redraw for the label area 
-     of a widget.
-   */
-  void redraw_label();
-
-  /** Returns non-zero if draw() needs to be called. 
-      The damage value is actually a bit field that the widget 
-      subclass can use to figure out what parts to draw.
-      \return a bitmap of flags describing the kind of damage to the widget
-      \see damage(uchar), clear_damage(uchar)
-   */
-  uchar damage() const {return damage_;}
-
-  /** Clears or sets the damage flags.
-      Damage flags are cleared when parts of the widget drawing is repaired.
-
-      The optional argument \p c specifies the bits that <b>are set</b>
-      after the call (default: 0) and \b not the bits that are cleared!
-
-      \note Therefore it is possible to set damage bits with this method, but
-      this should be avoided. Use damage(uchar) instead.
-      
-      \param[in] c new bitmask of damage flags (default: 0)
-      \see damage(uchar), damage()
-   */
-  void clear_damage(uchar c = 0) {damage_ = c;}
-
-  /** Sets the damage bits for the widget.
-      Setting damage bits will schedule the widget for the next redraw.
-      \param[in] c bitmask of flags to set
-      \see damage(), clear_damage(uchar)
-   */
-  void damage(uchar c);
-
-  /** Sets the damage bits for an area inside the widget.
-      Setting damage bits will schedule the widget for the next redraw.
-      \param[in] c bitmask of flags to set
-      \param[in] x, y, w, h size of damaged area
-      \see damage(), clear_damage(uchar)
-   */
-  void damage(uchar c, int x, int y, int w, int h);
-
-  void draw_label(int, int, int, int, Fl_Align) const;
-
-  /** Sets width ww and height hh accordingly with the label size.
-      Labels with images will return w() and h() of the image.
-   */
-  void measure_label(int& ww, int& hh) const {label_.measure(ww, hh);}
-
-  /** Returns a pointer to the primary Fl_Window widget.
-      \retval  NULL if no window is associated with this widget.  
-      \note for an Fl_Window widget, this returns its <I>parent</I> window 
-            (if any), not <I>this</I> window.
-   */
-  Fl_Window* window() const ;
-
-  /** Returns an Fl_Group pointer if this widget is an Fl_Group.
-
-      Use this method if you have a widget (pointer) and need to
-      know whether this widget is derived from Fl_Group. If it returns
-      non-NULL, then the widget in question is derived from Fl_Group,
-      and you can use the returned pointer to access its children
-      or other Fl_Group-specific methods.
-      
-      Example:
-      \code
-      void my_callback (Fl_Widget *w, void *) {
-        Fl_Group *g = w->as_group();
-	if (g)
-	  printf ("This group has %d children\n",g->children());
-	else
-	  printf ("This widget is not a group!\n");
-      }
-      \endcode
-
-      \retval NULL if this widget is not derived from Fl_Group.
-      \note This method is provided to avoid dynamic_cast.
-      \see Fl_Widget::as_window(), Fl_Widget::as_gl_window()
-   */
-  virtual Fl_Group* as_group() {return 0;}
-
-  /** Returns an Fl_Window pointer if this widget is an Fl_Window.
-
-      Use this method if you have a widget (pointer) and need to
-      know whether this widget is derived from Fl_Window. If it returns
-      non-NULL, then the widget in question is derived from Fl_Window,
-      and you can use the returned pointer to access its children
-      or other Fl_Window-specific methods.
-
-      \retval NULL if this widget is not derived from Fl_Window.
-      \note This method is provided to avoid dynamic_cast.
-      \see Fl_Widget::as_group(), Fl_Widget::as_gl_window()
-   */
-  virtual Fl_Window* as_window() {return 0;}
-
-  /** Returns an Fl_Gl_Window pointer if this widget is an Fl_Gl_Window.
-
-      Use this method if you have a widget (pointer) and need to
-      know whether this widget is derived from Fl_Gl_Window. If it returns
-      non-NULL, then the widget in question is derived from Fl_Gl_Window.
-
-      \retval NULL if this widget is not derived from Fl_Gl_Window.
-      \note This method is provided to avoid dynamic_cast.
-      \see Fl_Widget::as_group(), Fl_Widget::as_window()
-   */
-  virtual class Fl_Gl_Window* as_gl_window() {return 0;}
-  
-  /** For back compatibility only.
-      \deprecated Use selection_color() instead.
-  */
-  Fl_Color color2() const {return (Fl_Color)color2_;}
-
-  /** For back compatibility only.
-      \deprecated Use selection_color(unsigned) instead.
-  */
-  void color2(unsigned a) {color2_ = a;}
-};
-
-/**
-    Reserved type numbers (necessary for my cheapo RTTI) start here.
-    Grep the header files for "RESERVED_TYPE" to find the next available
-    number.
-*/
-#define FL_RESERVED_TYPE 100
-
-#endif
-
-//
-// End of "$Id: Fl_Widget.H 8623 2011-04-24 17:09:41Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/Fl_Window.H b/common/fltk/FL/Fl_Window.H
deleted file mode 100644
index 9632895..0000000
--- a/common/fltk/FL/Fl_Window.H
+++ /dev/null
@@ -1,509 +0,0 @@
-//
-// "$Id: Fl_Window.H 8593 2011-04-15 21:38:05Z manolo $"
-//
-// Window header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Window widget . */
-
-#ifndef Fl_Window_H
-#define Fl_Window_H
-
-#ifdef WIN32
-#include <windows.h>
-#endif
-
-#include "Fl_Group.H"
-
-#define FL_WINDOW 0xF0		///< window type id all subclasses have type() >= this
-#define FL_DOUBLE_WINDOW 0xF1   ///< double window type id
-
-class Fl_X;
-class Fl_RGB_Image;
-
-/**
-  This widget produces an actual window.  This can either be a main
-  window, with a border and title and all the window management controls,
-  or a "subwindow" inside a window.  This is controlled by whether or not
-  the window has a parent().
-
-  Once you create a window, you usually add children Fl_Widget
-  's to it by using window->add(child) for each new widget.
-  See Fl_Group for more information on how to add and remove children.
-
-  There are several subclasses of Fl_Window that provide
-  double-buffering, overlay, menu, and OpenGL support.
-
-  The window's callback is done if the user tries to close a window
-  using the window manager and Fl::modal() is zero or equal to the
-  window. Fl_Window has a default callback that calls Fl_Window::hide().
-*/
-class FL_EXPORT Fl_Window : public Fl_Group {
-
-  static char *default_xclass_;
-
-  friend class Fl_X;
-  Fl_X *i; // points at the system-specific stuff
-
-  struct icon_data {
-    const void *legacy_icon;
-    Fl_RGB_Image **icons;
-    int count;
-#ifdef WIN32
-    HICON big_icon;
-    HICON small_icon;
-#endif
-  };
-
-  const char* iconlabel_;
-  char* xclass_;
-  struct icon_data *icon_;
-  // size_range stuff:
-  int minw, minh, maxw, maxh;
-  int dw, dh, aspect;
-  uchar size_range_set;
-  int no_fullscreen_x, no_fullscreen_y, no_fullscreen_w, no_fullscreen_h;
-  // cursor stuff
-  Fl_Cursor cursor_default;
-  void size_range_();
-  void _Fl_Window(); // constructor innards
-
-  // unimplemented copy ctor and assignment operator
-  Fl_Window(const Fl_Window&);
-  Fl_Window& operator=(const Fl_Window&);
-
-protected:
-
-  /** Stores the last window that was made current. See current() const */
-  static Fl_Window *current_;
-  virtual void draw();
-  /** Forces the window to be drawn, this window is also made current and calls draw(). */
-  virtual void flush();
-
-  /**
-    Sets an internal flag that tells FLTK and the window manager to
-    honor position requests.
-
-    This is used internally and should not be needed by user code.
-
-    \param[in] force 1 to set the FORCE_POSITION flag, 0 to clear it
-  */
-  void force_position(int force) {
-    if (force) set_flag(FORCE_POSITION);
-    else clear_flag(FORCE_POSITION);
-  }
-  /**
-    Returns the internal state of the window's FORCE_POSITION flag.
-
-    \retval 1 if flag is set
-    \retval 0 otherwise
-
-    \see force_position(int)
-  */
-  int force_position() const { return ((flags() & FORCE_POSITION)?1:0); }
-
-  void free_icons();
-
-public:
-
-  /**
-    Creates a window from the given size and title. 
-    If Fl_Group::current() is not NULL, the window is created as a 
-    subwindow of the parent window.
-    
-    The (w,h) form of the constructor creates a top-level window
-    and asks the window manager to position the window. The (x,y,w,h)
-    form of the constructor either creates a subwindow or a
-    top-level window at the specified location (x,y) , subject to window
-    manager configuration. If you do not specify the position of the
-    window, the window manager will pick a place to show the window
-    or allow the user to pick a location. Use position(x,y)
-    or hotspot() before calling show() to request a
-    position on the screen. See Fl_Window::resize() 
-    for some more details on positioning windows.
-    
-    Top-level windows initially have visible() set to 0
-    and parent() set to NULL. Subwindows initially
-    have visible() set to 1 and parent() set to
-    the parent window pointer.
-    
-    Fl_Widget::box() defaults to FL_FLAT_BOX. If you plan to
-    completely fill the window with children widgets you should
-    change this to FL_NO_BOX. If you turn the window border off
-    you may want to change this to FL_UP_BOX.
-
-    \see Fl_Window(int x, int y, int w, int h, const char* title)
-  */
-    Fl_Window(int w, int h, const char* title= 0);
-  /** Creates a window from the given position, size and title.
-
-    \see Fl_Window(int w, int h, const char *title)
-  */
-    Fl_Window(int x, int y, int w, int h, const char* title = 0);
-  /**
-    The destructor <I>also deletes all the children</I>. This allows a
-    whole tree to be deleted at once, without having to keep a pointer to
-    all the children in the user code. A kludge has been done so the 
-    Fl_Window and all of its children can be automatic (local)
-    variables, but you must declare the Fl_Window <I>first</I> so
-    that it is destroyed last.
-  */
-    virtual ~Fl_Window();
-
-  virtual int handle(int);
-
-  /**
-    Changes the size and position of the window.  If shown() is true,
-    these changes are communicated to the window server (which may
-    refuse that size and cause a further resize).  If shown() is
-    false, the size and position are used when show() is called.
-    See Fl_Group for the effect of resizing on the child widgets.
-
-    You can also call the Fl_Widget methods size(x,y) and position(w,h),
-    which are inline wrappers for this virtual function.
-
-    A top-level window can not force, but merely suggest a position and 
-    size to the operating system. The window manager may not be willing or 
-    able to display a window at the desired position or with the given 
-    dimensions. It is up to the application developer to verify window 
-    parameters after the resize request.
-  */
-  virtual void resize(int,int,int,int);
-  /**
-    Sets whether or not the window manager border is around the
-    window.  The default value is true. void border(int) can be
-    used to turn the border on and off. <I>Under most X window
-    managers this does not work after show() has been called,
-    although SGI's 4DWM does work.</I>
-  */
-  void border(int b);
-  /**
-    Fast inline function to turn the window manager border
-    off. It only works before show() is called.
-  */
-  void clear_border()	{set_flag(NOBORDER);}
-  /** See void Fl_Window::border(int) */
-  unsigned int border() const	{return !(flags() & NOBORDER);}
-  /** Activates the flags NOBORDER|FL_OVERRIDE */
-  void set_override()	{set_flag(NOBORDER|OVERRIDE);}
-  /** Returns non zero if FL_OVERRIDE flag is set, 0 otherwise. */
-  unsigned int override() const  { return flags()&OVERRIDE; }
-  /**
-    A "modal" window, when shown(), will prevent any events from
-    being delivered to other windows in the same program, and will also
-    remain on top of the other windows (if the X window manager supports
-    the "transient for" property).  Several modal windows may be shown at
-    once, in which case only the last one shown gets events.  You can see
-    which window (if any) is modal by calling Fl::modal().
-  */
-  void set_modal()	{set_flag(MODAL);}
-  /**  Returns true if this window is modal.  */
-  unsigned int modal() const	{return flags() & MODAL;}
-  /**
-    A "non-modal" window (terminology borrowed from Microsoft Windows)
-    acts like a modal() one in that it remains on top, but it has
-    no effect on event delivery.  There are <I>three</I> states for a
-    window: modal, non-modal, and normal.
-  */
-  void set_non_modal()	{set_flag(NON_MODAL);}
-  /**  Returns true if this window is modal or non-modal. */
-  unsigned int non_modal() const {return flags() & (NON_MODAL|MODAL);}
-
-  /**
-    Marks the window as a menu window.
-
-    This is intended for internal use, but it can also be used if you
-    write your own menu handling. However, this is not recommended.
-
-    This flag is used for correct "parenting" of windows in communication
-    with the windowing system. Modern X window managers can use different
-    flags to distinguish menu and tooltip windows from normal windows.
-
-    This must be called before the window is shown and cannot be changed
-    later.
-  */
-  void set_menu_window()	{set_flag(MENU_WINDOW);}
-
-  /**  Returns true if this window is a menu window. */
-  unsigned int menu_window() const {return flags() & MENU_WINDOW;}
-
-  /**
-    Marks the window as a tooltip window.
-
-    This is intended for internal use, but it can also be used if you
-    write your own tooltip handling. However, this is not recommended.
-
-    This flag is used for correct "parenting" of windows in communication
-    with the windowing system. Modern X window managers can use different
-    flags to distinguish menu and tooltip windows from normal windows.
-
-    This must be called before the window is shown and cannot be changed
-    later.
-
-    \note Since Fl_Tooltip_Window is derived from Fl_Menu_Window, this
-    also \b clears the menu_window() state.
-  */
-  void set_tooltip_window()	{ set_flag(TOOLTIP_WINDOW);
-				  clear_flag(MENU_WINDOW); }
-  /**  Returns true if this window is a tooltip window. */
-  unsigned int tooltip_window() const {return flags() & TOOLTIP_WINDOW;}
-
-  /**
-    Positions the window so that the mouse is pointing at the given
-    position, or at the center of the given widget, which may be the
-    window itself.  If the optional offscreen parameter is
-    non-zero, then the window is allowed to extend off the screen (this
-    does not work with some X window managers). \see position()
-  */
-  void hotspot(int x, int y, int offscreen = 0);
-  /** See void Fl_Window::hotspot(int x, int y, int offscreen = 0) */
-  void hotspot(const Fl_Widget*, int offscreen = 0);
-  /** See void Fl_Window::hotspot(int x, int y, int offscreen = 0) */
-  void hotspot(const Fl_Widget& p, int offscreen = 0) {hotspot(&p,offscreen);}
-
-  /**
-    Undoes the effect of a previous resize() or show() so that the next time
-    show() is called the window manager is free to position the window.
-
-    This is for Forms compatibility only.
-
-    \deprecated please use force_position(0) instead
-  */
-  void free_position()	{clear_flag(FORCE_POSITION);}
-  /**
-    Sets the allowable range the user can resize this window to.
-    This only works for top-level windows.
-    <UL>
-    <LI>minw and minh are the smallest the window can be.
-	Either value must be greater than 0.</LI>
-    <LI>maxw and maxh are the largest the window can be. If either is
-	<I>equal</I> to the minimum then you cannot resize in that direction.
-	If either is zero  then FLTK picks a maximum size in that direction
-	such that the window will fill the screen.</LI>
-    <LI>dw and dh are size increments.  The  window will be constrained
-	to widths of minw + N * dw,  where N is any non-negative integer.
-	If these are less or equal to 1 they are ignored (this is ignored
-	on WIN32).</LI>
-    <LI>aspect is a flag that indicates that the window should preserve its
-	aspect ratio.  This only works if both the maximum and minimum have
-	the same aspect ratio (ignored on WIN32 and by many X window managers).
-	</LI>
-    </UL>
-
-    If this function is not called, FLTK tries to figure out the range
-    from the setting of resizable():
-    <UL>
-    <LI>If resizable() is NULL (this is the  default) then the window cannot
-	be resized and the resize border and max-size control will not be
-	displayed for the window.</LI>
-    <LI>If either dimension of resizable() is less than 100, then that is
-	considered the minimum size.  Otherwise the resizable() has a minimum
-	size of 100.</LI>
-    <LI>If either dimension of resizable() is zero, then that is also the
-	maximum size (so the window cannot resize in that direction).</LI>
-    </UL>
-
-    It is undefined what happens if the current size does not fit in the
-    constraints passed to size_range().
-  */
-  void size_range(int a, int b, int c=0, int d=0, int e=0, int f=0, int g=0) {
-    minw=a; minh=b; maxw=c; maxh=d; dw=e; dh=f; aspect=g; size_range_();}
-
-  /** See void Fl_Window::label(const char*)   */
-  const char* label() const	{return Fl_Widget::label();}
-  /**  See void Fl_Window::iconlabel(const char*)   */
-  const char* iconlabel() const	{return iconlabel_;}
-  /** Sets the window title bar label. */
-  void label(const char*);
-  /** Sets the icon label. */
-  void iconlabel(const char*);
-  /** Sets the icon label. */
-  void label(const char* label, const char* iconlabel); // platform dependent
-  void copy_label(const char* a);
-
-  static void default_xclass(const char*);
-  static const char *default_xclass();
-  const char* xclass() const;
-  void xclass(const char* c);
-
-  static void default_icon(const Fl_RGB_Image*);
-  static void default_icons(const Fl_RGB_Image*[], int);
-  void icon(const Fl_RGB_Image*);
-  void icons(const Fl_RGB_Image*[], int);
-
-#ifdef WIN32
-  static void default_icons(HICON big_icon, HICON small_icon);
-  void icons(HICON big_icon, HICON small_icon);
-#endif
-
-  /* for legacy compatibility */
-  const void* icon() const;
-  void icon(const void * ic);
-
-  /**
-    Returns non-zero if show() has been called (but not hide()
-    ). You can tell if a window is iconified with (w->shown()
-    && !w->visible()).
-  */
-  int shown() {return i != 0;}
-  /**
-    Puts the window on the screen. Usually (on X) this has the side
-    effect of opening the display.
-
-    If the window is already shown then it is restored and raised to the
-    top.  This is really convenient because your program can call show()
-    at any time, even if the window is already up.  It also means that
-    show() serves the purpose of raise() in other toolkits.
-    
-    Fl_Window::show(int argc, char **argv) is used for top-level
-    windows and allows standard arguments to be parsed from the
-    command-line.
-    
-    \see Fl_Window::show(int argc, char **argv)
-  */
-  virtual void show();
-  /**
-    Removes the window from the screen.  If the window is already hidden or
-    has not been shown then this does nothing and is harmless.
-  */
-  virtual void hide();
-  /**
-    Puts the window on the screen and parses command-line arguments.
-
-    Usually (on X) this has the side effect of opening the display.
-
-    This form should be used for top-level windows, at least for the
-    first (main) window. It allows standard arguments to be parsed
-    from the command-line. You can use \p argc and \p argv from
-    main(int argc, char **argv) for this call.
-
-    The first call also sets up some system-specific internal
-    variables like the system colors.
-
-    \todo explain which system parameters are set up.
-
-    \param argc command-line argument count, usually from main()
-    \param argv command-line argument vector, usually from main()
-
-    \see virtual void Fl_Window::show()
-  */
-  void show(int argc, char **argv);
-  /**
-    Makes the window completely fill the screen, without any window
-    manager border visible.  You must use fullscreen_off() to undo
-    this. 
-
-    \note On some platforms, this can result in the keyboard being
-    grabbed. The window may also be recreated, meaning hide() and
-    show() will be called.
-  */
-  void fullscreen();
-  /**
-    Turns off any side effects of fullscreen()
-  */
-  void fullscreen_off();
-  /**
-    Turns off any side effects of fullscreen() and does 
-    resize(x,y,w,h).
-  */
-  void fullscreen_off(int,int,int,int);
-  /**
-    Returns non zero if FULLSCREEN flag is set, 0 otherwise. 
-  */
-  unsigned int fullscreen_active() const { return flags() & FULLSCREEN; }
-  /**
-    Iconifies the window.  If you call this when shown() is false
-    it will show() it as an icon.  If the window is already
-    iconified this does nothing.
-
-    Call show() to restore the window.
-
-    When a window is iconified/restored (either by these calls or by the
-    user) the handle() method is called with FL_HIDE and 
-    FL_SHOW events and visible() is turned on and off.
-
-    There is no way to control what is drawn in the icon except with the
-    string passed to Fl_Window::xclass().  You should not rely on
-    window managers displaying the icons.
-  */
-  void iconize();
-
-  int x_root() const ;
-  int y_root() const ;
-
- static Fl_Window *current();
-  /**
-    Sets things up so that the drawing functions in <FL/fl_draw.H> will go
-    into this window. This is useful for incremental update of windows, such
-    as in an idle callback, which will make your program behave much better
-    if it draws a slow graphic. <B>Danger: incremental update is very hard to
-    debug and maintain!</B>
-
-    This method only works for the Fl_Window and Fl_Gl_Window derived classes.
-  */
-  void make_current();
-
-  // Note: Doxygen docs in Fl_Widget.H to avoid redundancy.
-  virtual Fl_Window* as_window() { return this; }
-
-  /**
-    Changes the cursor for this window.  This always calls the system, if
-    you are changing the cursor a lot you may want to keep track of how
-    you set it in a static variable and call this only if the new cursor
-    is different.
-
-    The type Fl_Cursor is an enumeration defined in <FL/Enumerations.H>.
-
-    \see cursor(const Fl_RGB_Image*, int, int), default_cursor()
-  */
-  void cursor(Fl_Cursor);
-  void cursor(const Fl_RGB_Image*, int, int);
-  void default_cursor(Fl_Cursor);
-
-  /* for legacy compatibility */
-  void cursor(Fl_Cursor c, Fl_Color, Fl_Color=FL_WHITE) { cursor(c); };
-  void default_cursor(Fl_Cursor c, Fl_Color, Fl_Color=FL_WHITE) { default_cursor(c); };
-
-  static void default_callback(Fl_Window*, void* v);
-  
-  /** Returns the window width including any frame added by the window manager.
-   
-   Same as w() if applied to a subwindow.
-   */
-  int decorated_w();
-  /** Returns the window height including any window title bar and any frame 
-   added by the window manager.
-   
-   Same as h() if applied to a subwindow.
-   */
-  int decorated_h();
-
-};
-
-#endif
-
-//
-// End of "$Id: Fl_Window.H 8593 2011-04-15 21:38:05Z manolo $".
-//
diff --git a/common/fltk/FL/Fl_Wizard.H b/common/fltk/FL/Fl_Wizard.H
deleted file mode 100644
index 2dcf315..0000000
--- a/common/fltk/FL/Fl_Wizard.H
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// "$Id: Fl_Wizard.H 8306 2011-01-24 17:04:22Z matt $"
-//
-// Fl_Wizard widget definitions.
-//
-// Copyright 1999-2010 by Easy Software Products.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Wizard widget . */
-
-//
-// Include necessary header files...
-//
-
-#ifndef _Fl_Wizard_H_
-#  define _Fl_Wizard_H_
-
-#  include <FL/Fl_Group.H>
-
-
-/**
-    This widget is based off the Fl_Tabs
-    widget, but instead of displaying tabs it only changes "tabs" under
-    program control. Its primary purpose is to support "wizards" that
-    step a user through configuration or troubleshooting tasks.
-
-    <P>As with Fl_Tabs, wizard panes are composed of child (usually
-    Fl_Group) widgets. Navigation buttons must be added separately.
-*/
-class FL_EXPORT Fl_Wizard : public Fl_Group {
-
-  Fl_Widget *value_;
-
-  void draw();
-
-  public:
-
-  Fl_Wizard(int, int, int, int, const char * = 0);
-
-  void		next();
-  void		prev();
-  Fl_Widget	*value();
-  void		value(Fl_Widget *);
-};
-
-#endif // !_Fl_Wizard_H_
-
-//
-// End of "$Id: Fl_Wizard.H 8306 2011-01-24 17:04:22Z matt $".
-//
diff --git a/common/fltk/FL/Fl_XBM_Image.H b/common/fltk/FL/Fl_XBM_Image.H
deleted file mode 100644
index 53081eb..0000000
--- a/common/fltk/FL/Fl_XBM_Image.H
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// "$Id: Fl_XBM_Image.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// XBM image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_XBM_Image class . */
-
-#ifndef Fl_XBM_Image_H
-#define Fl_XBM_Image_H
-#  include "Fl_Bitmap.H"
-
-/**
-  The Fl_XBM_Image class supports loading, caching,
-  and drawing of X Bitmap (XBM) bitmap files.
-*/
-class FL_EXPORT Fl_XBM_Image : public Fl_Bitmap {
-
-  public:
-
-  Fl_XBM_Image(const char* filename);
-};
-
-#endif // !Fl_XBM_Image_H
-
-//
-// End of "$Id: Fl_XBM_Image.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Fl_XPM_Image.H b/common/fltk/FL/Fl_XPM_Image.H
deleted file mode 100644
index 2f1a18a..0000000
--- a/common/fltk/FL/Fl_XPM_Image.H
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// "$Id: Fl_XPM_Image.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// XPM image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-  
-   Fl_XPM_Image class . */
-
-#ifndef Fl_XPM_Image_H
-#define Fl_XPM_Image_H
-#  include "Fl_Pixmap.H"
-
-/**
-  The Fl_XPM_Image class supports loading, caching,
-  and drawing of X Pixmap (XPM) images, including transparency.
-*/
-class FL_EXPORT Fl_XPM_Image : public Fl_Pixmap {
-
-  public:
-
-  Fl_XPM_Image(const char* filename);
-};
-
-#endif // !Fl_XPM_Image
-
-//
-// End of "$Id: Fl_XPM_Image.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/Makefile.in b/common/fltk/FL/Makefile.in
deleted file mode 100644
index 00503e4..0000000
--- a/common/fltk/FL/Makefile.in
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# "$Id: Makefile.in 7913 2010-11-29 18:18:27Z greg.ercolano $"
-#
-# Header makefile for the Fast Light Tool Kit (FLTK).
-#
-# Copyright 1998-2010 by Bill Spitzak and others.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA.
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-include ../makeinclude
-
-all:
-
-clean:
-
-depend:
-
-install:
-	echo "Installing include files in $(DESTDIR)$(includedir)..."
-	$(RMDIR) $(DESTDIR)$(includedir)/FL
-	$(INSTALL_DIR) $(DESTDIR)$(includedir)/FL
-	for file in *.[hH]; do \
-		$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/FL; \
-	done
-@HLINKS@	cd $(DESTDIR)$(includedir)/FL;\
-@HLINKS@	for file in *.H; do\
-@HLINKS@		$(RM) "`basename $$file H`h";\
-@HLINKS@		$(LN) $$file "`basename $$file H`h";\
-@HLINKS@	done
-@HLINKS@	$(RM) $(DESTDIR)$(includedir)/FL/fl_file_chooser.H
-@HLINKS@	$(LN) Fl_File_Chooser.H $(DESTDIR)$(includedir)/FL/fl_file_chooser.H
-@HLINKS@	$(RM) $(DESTDIR)$(includedir)/FL/fl_file_chooser.h
-@HLINKS@	$(LN) Fl_File_Chooser.H $(DESTDIR)$(includedir)/FL/fl_file_chooser.h
-@HLINKS@	$(RM) $(DESTDIR)$(includedir)/Fl
-@HLINKS@	$(LN) FL $(DESTDIR)$(includedir)/Fl
-
-uninstall:
-	echo "Uninstalling include files..."
-	$(RMDIR) $(DESTDIR)$(includedir)/FL
-@HLINKS@	$(RM) $(DESTDIR)$(includedir)/Fl
-
-
-#
-# End of "$Id: Makefile.in 7913 2010-11-29 18:18:27Z greg.ercolano $".
-#
diff --git a/common/fltk/FL/README.Xcode b/common/fltk/FL/README.Xcode
deleted file mode 100644
index 2fa57ad..0000000
--- a/common/fltk/FL/README.Xcode
+++ /dev/null
@@ -1,2 +0,0 @@
-All FLTK header files are in the FL subdirectory of the fltk.framework.
-Image header files are located in "fltk.framework/Headers/FL/images/".
diff --git a/common/fltk/FL/Xutf8.h b/common/fltk/FL/Xutf8.h
deleted file mode 100644
index b122d2e..0000000
--- a/common/fltk/FL/Xutf8.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/* "$Id: Xutf8.h 8399 2011-02-07 22:22:16Z ianmacarthur $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2010 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#ifndef _Xutf8_h
-#define _Xutf8_h
-
-#  ifdef __cplusplus
-extern "C" {
-#  endif
-
-#include <X11/X.h>
-#include <X11/Xlib.h>
-#include <X11/Xlocale.h>
-#include <X11/Xutil.h>
-
-typedef struct {
-	int nb_font;
-	char **font_name_list;
-	int *encodings;
-	XFontStruct **fonts;
-	Font fid;
-	int ascent;
-	int descent;
-	int *ranges;
-} XUtf8FontStruct;
-
-XUtf8FontStruct *
-XCreateUtf8FontStruct (
-	Display         *dpy,
-	const char      *base_font_name_list);
-
-void
-XUtf8DrawString(
-        Display         	*display,
-        Drawable        	d,
-        XUtf8FontStruct  *font_set,
-        GC              	gc,
-        int             	x,
-        int             	y,
-        const char      	*string,
-        int             	num_bytes);
-
-void
-XUtf8_measure_extents(
-        Display         	*display,
-        Drawable        	d,
-        XUtf8FontStruct  *font_set,
-        GC              	gc,
-        int             	*xx,
-        int             	*yy,
-        int             	*ww,
-        int             	*hh,
-        const char      	*string,
-        int             	num_bytes);
-
-void
-XUtf8DrawRtlString(
-        Display         	*display,
-        Drawable        	d,
-        XUtf8FontStruct  *font_set,
-        GC              	gc,
-        int             	x,
-        int             	y,
-        const char      	*string,
-        int             	num_bytes);
-
-void
-XUtf8DrawImageString(
-        Display         *display,
-        Drawable        d,
-        XUtf8FontStruct         *font_set,
-        GC              gc,
-        int             x,
-        int             y,
-        const char      *string,
-        int             num_bytes);
-
-int
-XUtf8TextWidth(
-        XUtf8FontStruct  *font_set,
-        const char      	*string,
-        int             	num_bytes);
-int
-XUtf8UcsWidth(
-	XUtf8FontStruct  *font_set,
-	unsigned int            ucs);
-
-int
-XGetUtf8FontAndGlyph(
-        XUtf8FontStruct  *font_set,
-        unsigned int            ucs,
-        XFontStruct     **fnt,
-        unsigned short  *id);
-
-void
-XFreeUtf8FontStruct(
-        Display         	*dpy,
-        XUtf8FontStruct 	*font_set);
-
-
-int
-XConvertUtf8ToUcs(
-	const unsigned char 	*buf,
-	int 			len,
-	unsigned int 		*ucs);
-
-int
-XConvertUcsToUtf8(
-	unsigned int 		ucs,
-	char 			*buf);
-
-int
-XUtf8CharByteLen(
-	const unsigned char 	*buf,
-	int 			len);
-
-int
-XCountUtf8Char(
-	const unsigned char *buf,
-	int len);
-
-int
-XFastConvertUtf8ToUcs(
-	const unsigned char 	*buf,
-	int 			len,
-	unsigned int 		*ucs);
-
-long
-XKeysymToUcs(
-	KeySym 	keysym);
-
-int
-XUtf8LookupString(
-    XIC                 ic,
-    XKeyPressedEvent*   event,
-    char*               buffer_return,
-    int                 bytes_buffer,
-    KeySym*             keysym,
-    Status*             status_return);
-
-unsigned short
-XUtf8IsNonSpacing(
-	unsigned int ucs);
-
-unsigned short
-XUtf8IsRightToLeft(
-        unsigned int ucs);
-
-
-int
-XUtf8Tolower(
-        int ucs);
-
-int
-XUtf8Toupper(
-        int ucs);
-
-
-#  ifdef __cplusplus
-}
-#  endif
-
-#endif
-
-/*
- *  End of "$Id: Xutf8.h 8399 2011-02-07 22:22:16Z ianmacarthur $".
- */
diff --git a/common/fltk/FL/dirent.h b/common/fltk/FL/dirent.h
deleted file mode 100644
index 7b68cd1..0000000
--- a/common/fltk/FL/dirent.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// "$Id: dirent.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
-//
-// Directory header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// this file is for back-compatibility only
-#include "filename.H"
-
-//
-// End of "$Id: dirent.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/filename.H b/common/fltk/FL/filename.H
deleted file mode 100644
index 3acae57..0000000
--- a/common/fltk/FL/filename.H
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * "$Id: filename.H 8073 2010-12-20 13:35:43Z ianmacarthur $"
- *
- * Filename header file for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/* Xcode on OS X includes files by recursing down into directories.
- * This code catches the cycle and directly includes the required file.
- */
-#ifdef fl_dirent_h_cyclic_include
-#  include "/usr/include/dirent.h"
-#endif
-
-#ifndef FL_FILENAME_H
-#  define FL_FILENAME_H
-
-#  include "Fl_Export.H"
-
-/** \addtogroup filenames File names and URI utility functions
- File names and URI functions defined in <FL/filename.H>
-    @{ */
-
-#  define FL_PATH_MAX 2048 /**< all path buffers should use this length */
-/** Gets the file name from a path.
-    Similar to basename(3), exceptions shown below.
-    \code
-    #include <FL/filename.H>
-    [..]
-    const char *out;
-    out = fl_filename_name("/usr/lib");     // out="lib"
-    out = fl_filename_name("/usr/");        // out=""      (basename(3) returns "usr" instead)
-    out = fl_filename_name("/usr");         // out="usr"
-    out = fl_filename_name("/");            // out=""      (basename(3) returns "/" instead)
-    out = fl_filename_name(".");            // out="."
-    out = fl_filename_name("..");           // out=".."
-    \endcode
-    \return a pointer to the char after the last slash, or to \p filename if there is none.
- */
-FL_EXPORT const char *fl_filename_name(const char * filename);
-FL_EXPORT const char *fl_filename_ext(const char *buf);
-FL_EXPORT char *fl_filename_setext(char *to, int tolen, const char *ext);
-FL_EXPORT int fl_filename_expand(char *to, int tolen, const char *from);
-FL_EXPORT int fl_filename_absolute(char *to, int tolen, const char *from);
-FL_EXPORT int fl_filename_relative(char *to, int tolen, const char *from);
-FL_EXPORT int fl_filename_match(const char *name, const char *pattern);
-FL_EXPORT int fl_filename_isdir(const char *name);
-
-#  if defined(__cplusplus) && !defined(FL_DOXYGEN)
-/*
- * Under WIN32, we include filename.H from numericsort.c; this should probably change...
- */
-
-inline char *fl_filename_setext(char *to, const char *ext) { return fl_filename_setext(to, FL_PATH_MAX, ext); }
-inline int fl_filename_expand(char *to, const char *from) { return fl_filename_expand(to, FL_PATH_MAX, from); }
-inline int fl_filename_absolute(char *to, const char *from) { return fl_filename_absolute(to, FL_PATH_MAX, from); }
-FL_EXPORT int fl_filename_relative(char *to, int tolen, const char *from, const char *cwd);
-inline int fl_filename_relative(char *to, const char *from) { return fl_filename_relative(to, FL_PATH_MAX, from); }
-#  endif /* __cplusplus */
-
-
-#  if defined(WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
-
-struct dirent {char d_name[1];};
-
-#  elif defined(__WATCOMC__)
-#    include <sys/types.h>
-#    include <direct.h>
-
-#  else
-/*
- * WARNING: on some systems (very few nowadays?) <dirent.h> may not exist.
- * The correct information is in one of these files:
- *
- *     #include <sys/ndir.h>
- *     #include <sys/dir.h>
- *     #include <ndir.h>
- *
- * plus you must do the following #define:
- *
- *     #define dirent direct
- *
- * It would be best to create a <dirent.h> file that does this...
- */
-#    include <sys/types.h>
-#    define fl_dirent_h_cyclic_include
-#    include <dirent.h>
-#    undef fl_dirent_h_cyclic_include
-#  endif
-
-#  if defined (__cplusplus)
-extern "C" {
-#  endif /* __cplusplus */
-
-#  if !defined(FL_DOXYGEN)
-FL_EXPORT int fl_alphasort(struct dirent **, struct dirent **);
-FL_EXPORT int fl_casealphasort(struct dirent **, struct dirent **);
-FL_EXPORT int fl_casenumericsort(struct dirent **, struct dirent **);
-FL_EXPORT int fl_numericsort(struct dirent **, struct dirent **);
-#  endif
-
-  typedef int (Fl_File_Sort_F)(struct dirent **, struct dirent **); /**< File sorting function. \see fl_filename_list() */
-
-#  if defined(__cplusplus)
-}
-
-/*
- * Portable "scandir" function.  Ugly but necessary...
- */
-
-FL_EXPORT int fl_filename_list(const char *d, struct dirent ***l,
-                               Fl_File_Sort_F *s = fl_numericsort);
-FL_EXPORT void fl_filename_free_list(struct dirent ***l, int n);
-
-/*
- * Generic function to open a Uniform Resource Identifier (URI) using a
- * system-defined program (added in FLTK 1.1.8)
- */
-
-FL_EXPORT int	fl_open_uri(const char *uri, char *msg = (char *)0,
-		            int msglen = 0);
-
-#    ifndef FL_DOXYGEN
-/*
- * _fl_filename_isdir_quick() is a private function that checks for a
- * trailing slash and assumes that the passed name is a directory if
- * it finds one.  This function is used by Fl_File_Browser and
- * Fl_File_Chooser to avoid extra stat() calls, but is not supported
- * outside of FLTK...
- */
-int _fl_filename_isdir_quick(const char *name);
-#    endif
-
-#  endif /* __cplusplus */
-
-/*
- * FLTK 1.0.x compatibility definitions...
- */
-
-#  ifdef FLTK_1_0_COMPAT
-#    define filename_absolute	fl_filename_absolute
-#    define filename_expand	fl_filename_expand
-#    define filename_ext	fl_filename_ext
-#    define filename_isdir	fl_filename_isdir
-#    define filename_list	fl_filename_list
-#    define filename_match	fl_filename_match
-#    define filename_name	fl_filename_name
-#    define filename_relative	fl_filename_relative
-#    define filename_setext	fl_filename_setext
-#    define numericsort		fl_numericsort
-#  endif /* FLTK_1_0_COMPAT */
-
-
-#endif /* FL_FILENAME_H */
-
-/** @} */
-
-/*
- * End of "$Id: filename.H 8073 2010-12-20 13:35:43Z ianmacarthur $".
- */
diff --git a/common/fltk/FL/fl_ask.H b/common/fltk/FL/fl_ask.H
deleted file mode 100644
index 98e7f39..0000000
--- a/common/fltk/FL/fl_ask.H
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-// "$Id: fl_ask.H 8441 2011-02-18 08:52:48Z AlbrechtS $"
-//
-// Standard dialog header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef fl_ask_H
-#  define fl_ask_H
-
-#  include "Enumerations.H"
-
-class Fl_Widget;
-/** Different system beeps available. \relatesalso fl_beep(int) */
-enum {
-  FL_BEEP_DEFAULT = 0,
-  FL_BEEP_MESSAGE,
-  FL_BEEP_ERROR,
-  FL_BEEP_QUESTION,
-  FL_BEEP_PASSWORD,
-  FL_BEEP_NOTIFICATION
-};
-
-#  ifdef __GNUC__
-#    define __fl_attr(x) __attribute__ (x)
-#  else
-#    define __fl_attr(x)
-#  endif // __GNUC__
-
-FL_EXPORT void fl_beep(int type = FL_BEEP_DEFAULT);
-FL_EXPORT void fl_message(const char *,...) __fl_attr((__format__ (__printf__, 1, 2)));
-FL_EXPORT void fl_alert(const char *,...) __fl_attr((__format__ (__printf__, 1, 2)));
-// fl_ask() is deprecated since it uses "Yes" and "No" for the buttons,
-// which does not conform to the current FLTK Human Interface Guidelines.
-// Use fl_choice() instead with the appropriate verbs instead.
-FL_EXPORT int fl_ask(const char *,...) __fl_attr((__format__ (__printf__, 1, 2), __deprecated__));
-FL_EXPORT int fl_choice(const char *q,const char *b0,const char *b1,const char *b2,...) __fl_attr((__format__ (__printf__, 1, 5)));
-FL_EXPORT const char *fl_input(const char *label, const char *deflt = 0, ...) __fl_attr((__format__ (__printf__, 1, 3)));
-FL_EXPORT const char *fl_password(const char *label, const char *deflt = 0, ...) __fl_attr((__format__ (__printf__, 1, 3)));
-
-FL_EXPORT Fl_Widget *fl_message_icon();
-extern FL_EXPORT Fl_Font fl_message_font_;
-extern FL_EXPORT Fl_Fontsize fl_message_size_;
-inline void fl_message_font(Fl_Font f, Fl_Fontsize s) {
-  fl_message_font_ = f; fl_message_size_ = s;}
-
-FL_EXPORT void fl_message_hotspot(int enable);
-FL_EXPORT int fl_message_hotspot(void);
-
-FL_EXPORT void fl_message_title(const char *title);
-FL_EXPORT void fl_message_title_default(const char *title);
-
-// pointers you can use to change FLTK to a foreign language:
-extern FL_EXPORT const char* fl_no;
-extern FL_EXPORT const char* fl_yes;
-extern FL_EXPORT const char* fl_ok;
-extern FL_EXPORT const char* fl_cancel;
-extern FL_EXPORT const char* fl_close;
-#endif // !fl_ask_H
-
-//
-// End of "$Id: fl_ask.H 8441 2011-02-18 08:52:48Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/fl_draw.H b/common/fltk/FL/fl_draw.H
deleted file mode 100644
index eae2b7f..0000000
--- a/common/fltk/FL/fl_draw.H
+++ /dev/null
@@ -1,785 +0,0 @@
-//
-// "$Id: fl_draw.H 8772 2011-06-02 08:06:09Z manolo $"
-//
-// Portable drawing function header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_draw.H
-  \brief utility header to pull drawing functions together
-*/
-
-#ifndef fl_draw_H
-#define fl_draw_H
-
-#include <FL/x.H>	      // for Fl_Region
-#include <FL/Enumerations.H>  // for the color names
-#include <FL/Fl_Window.H>     // for fl_set_spot()
-#include <FL/Fl_Device.H>     // for fl_graphics_driver
-
-// Image class...
-class Fl_Image;
-
-// Label flags...
-FL_EXPORT extern char fl_draw_shortcut;
-
-/** \addtogroup fl_attributes
-    @{
-*/
-
-// Colors:
-/**
- Sets the color for all subsequent drawing operations.
- For colormapped displays, a color cell will be allocated out of
- \p fl_colormap the first time you use a color. If the colormap fills up
- then a least-squares algorithm is used to find the closest color.
- If no valid graphical context (fl_gc) is available,
- the foreground is not set for the current window.
- \param[in] c color 
- */
-inline void	fl_color(Fl_Color c) {fl_graphics_driver->color(c); } // select indexed color
-/** for back compatibility - use fl_color(Fl_Color c) instead */
-inline void fl_color(int c) {fl_color((Fl_Color)c);}
-/**
- Sets the color for all subsequent drawing operations.
- The closest possible match to the RGB color is used.
- The RGB color is used directly on TrueColor displays.
- For colormap visuals the nearest index in the gray
- ramp or color cube is used.
- If no valid graphical context (fl_gc) is available,
- the foreground is not set for the current window.
- \param[in] r,g,b color components
- */
-inline void	fl_color(uchar r, uchar g, uchar b) {fl_graphics_driver->color(r,g,b); } // select actual color
-/**
-  Returns the last fl_color() that was set.
-  This can be used for state save/restore.
-*/
-inline Fl_Color fl_color() {return fl_graphics_driver->color();}
-/** @} */
-
-/** \addtogroup fl_drawings
-    @{
-*/
-// clip:
-/**
- Intersects the current clip region with a rectangle and pushes this
- new region onto the stack.
- \param[in] x,y,w,h position and size
- */
-inline void fl_push_clip(int x, int y, int w, int h) {fl_graphics_driver->push_clip(x,y,w,h); }
-/**
- Intersects the current clip region with a rectangle and pushes this
- new region onto the stack (deprecated).
- \param[in] x,y,w,h position and size
- \deprecated
-   fl_clip(int, int, int, int) is deprecated and will be removed from future releases.
-   Please use fl_push_clip(int x, int y, int w, int h) instead.
- */
-#define fl_clip fl_push_clip
-/**
- Pushes an empty clip region onto the stack so nothing will be clipped.
- */
-inline void fl_push_no_clip() {fl_graphics_driver->push_no_clip(); }
-/**
- Restores the previous clip region.
- 
- You must call fl_pop_clip() once for every time you call fl_push_clip().
- Unpredictable results may occur if the clip stack is not empty when
- you return to FLTK.
- */
-inline void fl_pop_clip() {fl_graphics_driver->pop_clip(); }
-/**
- Does the rectangle intersect the current clip region?
- \param[in] x,y,w,h position and size of rectangle
- \returns non-zero if any of the rectangle intersects the current clip
- region. If this returns 0 you don't have to draw the object.
- 
- \note
- Under X this returns 2 if the rectangle is partially clipped, 
- and 1 if it is entirely inside the clip region.
- */
-inline int fl_not_clipped(int x, int y, int w, int h) {return fl_graphics_driver->not_clipped(x,y,w,h); }
-/**
- Intersects the rectangle with the current clip region and returns the
- bounding box of the result.
- 
- Returns non-zero if the resulting rectangle is different to the original.
- This can be used to limit the necessary drawing to a rectangle.
- \p W and \p H are set to zero if the rectangle is completely outside the region.
- \param[in] x,y,w,h position and size of rectangle
- \param[out] X,Y,W,H position and size of resulting bounding box.
- \returns Non-zero if the resulting rectangle is different to the original.
- */
-inline int fl_clip_box(int x , int y, int w, int h, int& X, int& Y, int& W, int& H) 
-  {return fl_graphics_driver->clip_box(x,y,w,h,X,Y,W,H); }
-/** Undoes any clobbering of clip done by your program */
-inline void fl_restore_clip() { fl_graphics_driver->restore_clip(); }
-/**
- Replaces the top of the clipping stack with a clipping region of any shape.
- 
- Fl_Region is an operating system specific type.
- \param[in] r clipping region
- */
-inline void fl_clip_region(Fl_Region r) { fl_graphics_driver->clip_region(r); }
-/**
- Returns the current clipping region.
- */
-inline Fl_Region fl_clip_region() { return fl_graphics_driver->clip_region(); }
-
-
-// points:
-/**
- Draws a single pixel at the given coordinates
- */
-inline void fl_point(int x, int y) { fl_graphics_driver->point(x,y); }
-
-// line type:
-/**
- Sets how to draw lines (the "pen").
- If you change this it is your responsibility to set it back to the default
- using \c fl_line_style(0).
- 
- \param[in] style A bitmask which is a bitwise-OR of a line style, a cap
- style, and a join style. If you don't specify a dash type you
- will get a solid line. If you don't specify a cap or join type
- you will get a system-defined default of whatever value is
- fastest.
- \param[in] width The thickness of the lines in pixels. Zero results in the
- system defined default, which on both X and Windows is somewhat
- different and nicer than 1.
- \param[in] dashes A pointer to an array of dash lengths, measured in pixels.
- The first location is how long to draw a solid portion, the next
- is how long to draw the gap, then the solid, etc. It is terminated
- with a zero-length entry. A \c NULL pointer or a zero-length
- array results in a solid line. Odd array sizes are not supported
- and result in undefined behavior.
- 
- \note      Because of how line styles are implemented on Win32 systems,
- you \e must set the line style \e after setting the drawing
- color. If you set the color after the line style you will lose
- the line style settings.
- \note      The \p dashes array does not work under Windows 95, 98 or Me,
- since those operating systems do not support complex line styles.
- */
-inline void fl_line_style(int style, int width=0, char* dashes=0) {fl_graphics_driver->line_style(style,width,dashes); }
-enum {
-  FL_SOLID	= 0,		///< line style: <tt>___________</tt>
-  FL_DASH	= 1,		///< line style: <tt>_ _ _ _ _ _</tt>
-  FL_DOT	= 2,		///< line style: <tt>. . . . . .</tt>
-  FL_DASHDOT	= 3,		///< line style: <tt>_ . _ . _ .</tt>
-  FL_DASHDOTDOT	= 4,		///< line style: <tt>_ . . _ . .</tt>
-
-  FL_CAP_FLAT	= 0x100,	///< cap style: end is flat
-  FL_CAP_ROUND	= 0x200,	///< cap style: end is round
-  FL_CAP_SQUARE	= 0x300,	///< cap style: end wraps end point
-
-  FL_JOIN_MITER	= 0x1000,	///< join style: line join extends to a point
-  FL_JOIN_ROUND	= 0x2000,	///< join style: line join is rounded
-  FL_JOIN_BEVEL	= 0x3000	///< join style: line join is tidied
-};
-
-// rectangles tweaked to exactly fill the pixel rectangle:
-
-/** 
- Draws a 1-pixel border \e inside the given bounding box.
- This function is meant for quick drawing of simple boxes. The behavior is 
- undefined for line widths that are not 1.
- */
-inline void fl_rect(int x, int y, int w, int h) { fl_graphics_driver->rect(x,y,w,h); }
-
-/** Draws with passed color a 1-pixel border \e inside the given bounding box */
-inline void fl_rect(int x, int y, int w, int h, Fl_Color c) {fl_color(c); fl_rect(x,y,w,h);}
-/** Colors with current color a rectangle that exactly fills the given bounding box */
-inline void fl_rectf(int x, int y, int w, int h) { fl_graphics_driver->rectf(x,y,w,h); }
-/** Colors with passed color a rectangle that exactly fills the given bounding box */
-inline void fl_rectf(int x, int y, int w, int h, Fl_Color c) {fl_color(c); fl_rectf(x,y,w,h);}
-
-/**
-  Colors a rectangle with "exactly" the passed <tt>r,g,b</tt> color.
-  On screens with less than 24 bits of color this is done by drawing a
-  solid-colored block using fl_draw_image() so that the correct color
-  shade is produced.
-  */
-/* note: doxygen comment here to avoid triplication in os-speciic files */
-FL_EXPORT void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b);
-
-// line segments:
-/**
- Draws a line from (x,y) to (x1,y1)
- */
-inline void fl_line(int x, int y, int x1, int y1) {fl_graphics_driver->line(x,y,x1,y1); }
-/**
- Draws a line from (x,y) to (x1,y1) and another from (x1,y1) to (x2,y2)
- */
-inline void fl_line(int x, int y, int x1, int y1, int x2, int y2) {fl_graphics_driver->line(x,y,x1,y1,x2,y2); }
-
-// closed line segments:
-/**
- Outlines a 3-sided polygon with lines
- */
-inline void fl_loop(int x, int y, int x1, int y1, int x2, int y2) {fl_graphics_driver->loop(x,y,x1,y1,x2,y2); }
-/**
- Outlines a 4-sided polygon with lines
- */
-inline void fl_loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) 
-  {fl_graphics_driver->loop(x,y,x1,y1,x2,y2,x3,y3); }
-
-// filled polygons
-/**
- Fills a 3-sided polygon. The polygon must be convex.
- */
-inline void fl_polygon(int x, int y, int x1, int y1, int x2, int y2) {fl_graphics_driver->polygon(x,y,x1,y1,x2,y2); }
-/**
- Fills a 4-sided polygon. The polygon must be convex.
- */
-inline void fl_polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) 
-  { fl_graphics_driver->polygon(x,y,x1,y1,x2,y2,x3,y3); }
-
-// draw rectilinear lines, horizontal segment first:
-/**
- Draws a horizontal line from (x,y) to (x1,y)
- */
-inline void fl_xyline(int x, int y, int x1) {fl_graphics_driver->xyline(x,y,x1);}
-/**
- Draws a horizontal line from (x,y) to (x1,y), then vertical from (x1,y) to (x1,y2)
- */
-inline void fl_xyline(int x, int y, int x1, int y2) {fl_graphics_driver->xyline(x,y,x1,y2);}
-/**
- Draws a horizontal line from (x,y) to (x1,y), then a vertical from (x1,y) to (x1,y2)
- and then another horizontal from (x1,y2) to (x3,y2)
- */
-inline void fl_xyline(int x, int y, int x1, int y2, int x3) {fl_graphics_driver->xyline(x,y,x1,y2,x3);}
-
-// draw rectilinear lines, vertical segment first:
-/**
- Draws a vertical line from (x,y) to (x,y1)
- */
-inline void fl_yxline(int x, int y, int y1) {fl_graphics_driver->yxline(x,y,y1);}
-/**
- Draws a vertical line from (x,y) to (x,y1), then a horizontal from (x,y1) to (x2,y1)
- */
-inline void fl_yxline(int x, int y, int y1, int x2) {fl_graphics_driver->yxline(x,y,y1,x2);}
-/**
- Draws a vertical line from (x,y) to (x,y1) then a horizontal from (x,y1)
- to (x2,y1), then another vertical from (x2,y1) to (x2,y3)
- */
-inline void fl_yxline(int x, int y, int y1, int x2, int y3) {fl_graphics_driver->yxline(x,y,y1,x2,y3);}
-
-// circular lines and pie slices (code in fl_arci.C):
-/**
- Draw ellipse sections using integer coordinates.
- 
- These functions match the rather limited circle drawing code provided by X
- and WIN32. The advantage over using fl_arc with floating point coordinates
- is that they are faster because they often use the hardware, and they draw
- much nicer small circles, since the small sizes are often hard-coded bitmaps.
- 
- If a complete circle is drawn it will fit inside the passed bounding box.
- The two angles are measured in degrees counter-clockwise from 3 o'clock and
- are the starting and ending angle of the arc, \p a2 must be greater or equal
- to \p a1.
- 
- fl_arc() draws a series of lines to approximate the arc. Notice that the
- integer version of fl_arc() has a different number of arguments than the
- double version fl_arc(double x, double y, double r, double start, double end)
- 
- \param[in] x,y,w,h bounding box of complete circle
- \param[in] a1,a2 start and end angles of arc measured in degrees
- counter-clockwise from 3 o'clock. \p a2 must be greater
- than or equal to \p a1.
- */
-inline void fl_arc(int x, int y, int w, int h, double a1, double a2) {fl_graphics_driver->arc(x,y,w,h,a1,a2); }
-/**
- Draw filled ellipse sections using integer coordinates.
- 
- Like fl_arc(), but fl_pie() draws a filled-in pie slice.
- This slice may extend outside the line drawn by fl_arc();
- to avoid this use w - 1 and h - 1.
- 
- \param[in] x,y,w,h bounding box of complete circle
- \param[in] a1,a2 start and end angles of arc measured in degrees
- counter-clockwise from 3 o'clock. \p a2 must be greater
- than or equal to \p a1.
- */
-inline void fl_pie(int x, int y, int w, int h, double a1, double a2) {fl_graphics_driver->pie(x,y,w,h,a1,a2); }
-/** fl_chord declaration is a place holder - the function does not yet exist */
-FL_EXPORT void fl_chord(int x, int y, int w, int h, double a1, double a2); // nyi
-
-// scalable drawing code (code in fl_vertex.C and fl_arc.C):
-/**
- Saves the current transformation matrix on the stack. 
- The maximum depth of the stack is 32.
- */
-inline void fl_push_matrix() { fl_graphics_driver->push_matrix(); }
-/**
- Restores the current transformation matrix from the stack.
- */
-inline void fl_pop_matrix() { fl_graphics_driver->pop_matrix(); }
-/**
- Concatenates scaling transformation onto the current one.
- \param[in] x,y scale factors in x-direction and y-direction
- */
-inline void fl_scale(double x, double y) { fl_graphics_driver->scale(x, y); }
-/**
- Concatenates scaling transformation onto the current one.
- \param[in] x scale factor in both x-direction and y-direction
- */
-inline void fl_scale(double x) { fl_graphics_driver->scale(x, x); }
-/**
- Concatenates translation transformation onto the current one.
- \param[in] x,y translation factor in x-direction and y-direction
- */
-inline void fl_translate(double x, double y) { fl_graphics_driver->translate(x, y); }
-/**
- Concatenates rotation transformation onto the current one.
- \param[in] d - rotation angle, counter-clockwise in degrees (not radians)
- */
-inline void fl_rotate(double d) { fl_graphics_driver->rotate(d); }
-/**
- Concatenates another transformation onto the current one.
- 
- \param[in] a,b,c,d,x,y transformation matrix elements such that
- <tt> X' = aX + cY + x </tt> and <tt> Y' = bX +dY + y </tt>
- */
-inline void fl_mult_matrix(double a, double b, double c, double d, double x,double y) 
-	{ fl_graphics_driver->mult_matrix(a, b, c, d, x, y); }
-/**
- Starts drawing a list of points. Points are added to the list with fl_vertex()
- */
-inline void fl_begin_points() {fl_graphics_driver->begin_points(); }
-/**
- Starts drawing a list of lines.
- */
-inline void fl_begin_line() {fl_graphics_driver->begin_line(); }
-/**
- Starts drawing a closed sequence of lines.
- */
-inline void fl_begin_loop() {fl_graphics_driver->begin_loop(); }
-/**
- Starts drawing a convex filled polygon.
- */
-inline void fl_begin_polygon() {fl_graphics_driver->begin_polygon(); }
-/**
- Adds a single vertex to the current path.
- \param[in] x,y coordinate
- */
-inline void fl_vertex(double x, double y) {fl_graphics_driver->vertex(x,y); }
-/**
- Adds a series of points on a Bezier curve to the path.
- The curve ends (and two of the points) are at X0,Y0 and X3,Y3.
- \param[in] X0,Y0 curve start point
- \param[in] X1,Y1 curve control point
- \param[in] X2,Y2 curve control point
- \param[in] X3,Y3 curve end point
- */
-inline void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3)
-  {fl_graphics_driver->curve(X0,Y0,X1,Y1,X2,Y2,X3,Y3); }
-/**
- Adds a series of points to the current path on the arc of a circle.
- You can get elliptical paths by using scale and rotate before calling fl_arc().
- \param[in] x,y,r center and radius of circular arc
- \param[in] start,end angles of start and end of arc measured in degrees
- counter-clockwise from 3 o'clock. If \p end is less than \p start
- then it draws the arc in a clockwise direction.
- */
-inline void fl_arc(double x, double y, double r, double start, double end) {fl_graphics_driver->arc(x,y,r,start,end); }
-/**
- fl_circle() is equivalent to fl_arc(x,y,r,0,360), but may be faster.
- 
- It must be the \e only thing in the path: if you want a circle as part of
- a complex polygon you must use fl_arc()
- \param[in] x,y,r center and radius of circle
- */
-inline void fl_circle(double x, double y, double r) {fl_graphics_driver->circle(x,y,r); }
-/**
- Ends list of points, and draws.
- */
-inline void fl_end_points() {fl_graphics_driver->end_points(); }
-/**
- Ends list of lines, and draws.
- */
-inline void fl_end_line() {fl_graphics_driver->end_line(); }
-/**
- Ends closed sequence of lines, and draws.
- */
-inline void fl_end_loop() {fl_graphics_driver->end_loop(); }
-/**
- Ends convex filled polygon, and draws.
- */
-inline void fl_end_polygon() {fl_graphics_driver->end_polygon(); }
-/**
- Starts drawing a complex filled polygon.
- 
- The polygon may be concave, may have holes in it, or may be several
- disconnected pieces. Call fl_gap() to separate loops of the path.
- 
- To outline the polygon, use fl_begin_loop() and replace each fl_gap()
- with fl_end_loop();fl_begin_loop() pairs.
- 
- \note
- For portability, you should only draw polygons that appear the same
- whether "even/odd" or "non-zero" winding rules are used to fill them.
- Holes should be drawn in the opposite direction to the outside loop.
- */
-inline void fl_begin_complex_polygon() {fl_graphics_driver->begin_complex_polygon(); }
-/**
- Call fl_gap() to separate loops of the path.
- 
- It is unnecessary but harmless to call fl_gap() before the first vertex,
- after the last vertex, or several times in a row.
- */
-inline void fl_gap() {fl_graphics_driver->gap(); }
-/**
- Ends complex filled polygon, and draws.
- */
-inline void fl_end_complex_polygon() {fl_graphics_driver->end_complex_polygon(); }
-// get and use transformed positions:
-/**
- Transforms coordinate using the current transformation matrix.
- \param[in] x,y coordinate
- */
-inline double fl_transform_x(double x, double y) {return fl_graphics_driver->transform_x(x, y); }
-/**
- Transforms coordinate using the current transformation matrix.
- \param[in] x,y coordinate
- */
-inline double fl_transform_y(double x, double y) {return fl_graphics_driver->transform_y(x, y); }
-/**
- Transforms distance using current transformation matrix.
- \param[in] x,y coordinate
- */
-inline double fl_transform_dx(double x, double y) {return fl_graphics_driver->transform_dx(x, y); }
-/**
- Transforms distance using current transformation matrix.
- \param[in] x,y coordinate
- */
-inline double fl_transform_dy(double x, double y) {return fl_graphics_driver->transform_dy(x, y); }
-/**
- Adds coordinate pair to the vertex list without further transformations.
- \param[in] xf,yf transformed coordinate
- */
-inline void fl_transformed_vertex(double xf, double yf) {fl_graphics_driver->transformed_vertex(xf,yf); }
-/** @} */
-
-/** \addtogroup  fl_attributes
-    @{ */
-/* NOTE: doxygen comments here to avoid triplication in os-specific sources */
-
-// Fonts:
-/**
-  Sets the current font, which is then used in various drawing routines.
-  You may call this outside a draw context if necessary to call fl_width(),
-  but on X this will open the display.
-
-  The font is identified by a \p face and a \p size.
-  The size of the font is measured in pixels and not "points".
-  Lines should be spaced \p size pixels apart or more.
-*/
-inline void fl_font(Fl_Font face, Fl_Fontsize size) { fl_graphics_driver->font(face,size); }
-
-/**
-  Returns the \p face set by the most recent call to fl_font().
-  This can be used to save/restore the font.
-*/
-inline Fl_Font fl_font() {return fl_graphics_driver->font();}
-/**
-  Returns the \p size set by the most recent call to fl_font().
-  This can be used to save/restore the font.
-*/
-inline Fl_Fontsize fl_size() {return fl_graphics_driver->size();}
-
-// information you can get about the current font:
-/**
-  Returns the recommended minimum line spacing for the current font.
-  You can also use the value of \p size passed to fl_font()
-*/
-inline int fl_height() {return fl_graphics_driver->height();}
-FL_EXPORT int fl_height(int font, int size);
-/**
-  Returns the recommended distance above the bottom of a fl_height() tall box to
-  draw the text at so it looks centered vertically in that box.
-*/
-inline int  fl_descent() {return fl_graphics_driver->descent();}
-/** Returns the typographical width of a nul-terminated string */
-FL_EXPORT double fl_width(const char* txt);
-/** Returns the typographical width of a sequence of \p n characters */
-inline double fl_width(const char* txt, int n) {return fl_graphics_driver->width(txt, n);}
-/** Returns the typographical width of a single character.
-    \note if a valid fl_gc is NOT found then it uses the first window gc,
-    or the screen gc if no fltk window is available when called. */
-inline double fl_width(unsigned int c)  {return fl_graphics_driver->width(c);}
-/** Determines the minimum pixel dimensions of a nul-terminated string.
-
-  Usage: given a string "txt" drawn using fl_draw(txt, x, y) you would determine
-  its pixel extents on the display using fl_text_extents(txt, dx, dy, wo, ho)
-  such that a bounding box that exactly fits around the text could be drawn with
-  fl_rect(x+dx, y+dy, wo, ho). Note the dx, dy values hold the offset of the first
-  "colored in" pixel of the string, from the draw origin.
-*/
-FL_EXPORT void fl_text_extents(const char*, int& dx, int& dy, int& w, int& h); // NO fltk symbol expansion will be performed
-/** Determines the minimum pixel dimensions of a sequence of \p n characters.
-\see fl_text_extents(const char*, int& dx, int& dy, int& w, int& h)
-*/
-inline void fl_text_extents(const char *t, int n, int& dx, int& dy, int& w, int& h)
-  {fl_graphics_driver->text_extents(t, n, dx, dy, w, h);}
-
-// font encoding:
-// Note: doxygen comments here to avoid duplication for os-sepecific cases
-/**
-  Converts text from Windows/X11 latin1 character set to local encoding.
-  \param[in] t character string (latin1 encoding)
-  \param[in] n optional number of characters to convert (default is all)
-  \returns pointer to internal buffer containing converted characters
-  */
-FL_EXPORT const char *fl_latin1_to_local(const char *t, int n=-1);
-/**
-  Converts text from local encoding to Windowx/X11 latin1 character set.
-  \param[in] t character string (local encoding)
-  \param[in] n optional number of characters to convert (default is all)
-  \returns pointer to internal buffer containing converted characters
-  */
-FL_EXPORT const char *fl_local_to_latin1(const char *t, int n=-1);
-/**
-  Converts text from Mac Roman character set to local encoding.
-  \param[in] t character string (Mac Roman encoding)
-  \param[in] n optional number of characters to convert (default is all)
-  \returns pointer to internal buffer containing converted characters
-  */
-FL_EXPORT const char *fl_mac_roman_to_local(const char *t, int n=-1);
-/**
-  Converts text from local encoding to Mac Roman character set.
-  \param[in] t character string (local encoding)
-  \param[in] n optional number of characters to convert (default is all)
-  \returns pointer to internal buffer containing converted characters
-  */
-FL_EXPORT const char *fl_local_to_mac_roman(const char *t, int n=-1);
-/** @} */
-
-/** \addtogroup  fl_drawings
-    @{ */
-/**
-  Draws a nul-terminated string starting at the given location.
-
-  Text is aligned to the left and to the baseline of the font.
-  To align to the bottom, subtract fl_descent() from \p y.
-  To align to the top, subtract fl_descent() and add fl_height().
-  This version of fl_draw provides direct access to the text drawing
-  function of the underlying OS. It does not apply any special handling
-  to control characters.
-*/
-FL_EXPORT void fl_draw(const char* str, int x, int y);
-/**
-  Draws a nul-terminated string starting at the given location and 
-  rotating \p angle degrees counter-clockwise.
-  This version of fl_draw provides direct access to the text drawing
-  function of the underlying OS and is supported by Xft, Win32 and MacOS
-  fltk subsets.
-*/
-FL_EXPORT void fl_draw(int angle, const char* str, int x, int y);
-/**
-  Draws an array of \p n characters starting at the given location.
-*/
-inline void fl_draw(const char* str, int n, int x, int y) {fl_graphics_driver->draw(str,n,x,y); }
-/**
-  Draws an array of \p n characters starting at the given location,
-  rotating \p angle degrees counter-clockwise.
-*/
-inline void fl_draw(int angle,const char* str, int n, int x, int y) {fl_graphics_driver->draw(angle,str,n,x,y); }
-/**
-  Draws an array of \p n characters right to left starting at given location.
-*/
-inline void fl_rtl_draw(const char* str, int n, int x, int y) {fl_graphics_driver->rtl_draw(str,n,x,y); }
-FL_EXPORT void fl_measure(const char* str, int& x, int& y,
-                          int draw_symbols = 1);
-FL_EXPORT void fl_draw(const char* str, int x, int y, int w, int h,
-                       Fl_Align align,
-                       Fl_Image* img=0, int draw_symbols = 1);
-FL_EXPORT void fl_draw(const char* str, int x, int y, int w, int h,
-                       Fl_Align align,
-                       void (*callthis)(const char *,int,int,int),
-                       Fl_Image* img=0, int draw_symbols = 1);
-
-// boxtypes:
-FL_EXPORT void fl_frame(const char* s, int x, int y, int w, int h);
-FL_EXPORT void fl_frame2(const char* s, int x, int y, int w, int h);
-FL_EXPORT void fl_draw_box(Fl_Boxtype, int x, int y, int w, int h, Fl_Color);
-
-// images:
-
-/**
-  Draws an 8-bit per color RGB or luminance image.
-  \param[in] buf points at the "r" data of the top-left pixel.
-                 Color data must be in <tt>r,g,b</tt> order.
-		 Luminance data is only one <tt>gray</tt> byte.
-  \param[in] X,Y position where to put top-left corner of image
-  \param[in] W,H size of the image
-  \param[in] D   delta to add to the pointer between pixels. It may be
-                 any value greater than or equal to 1, or it can be
-		 negative to flip the image horizontally
-  \param[in] L   delta to add to the pointer between lines (if 0 is
-                 passed it uses \p W * \p D), and may be larger than
-		 \p W * \p D to crop data, or negative to flip the
-		 image vertically
-
-  It is highly recommended that you put the following code before the
-  first <tt>show()</tt> of \e any window in your program to get rid of
-  the dithering if possible:
-  \code
-  Fl::visual(FL_RGB);
-  \endcode
-
-  Gray scale (1-channel) images may be drawn. This is done if
-  <tt>abs(D)</tt> is less than 3, or by calling fl_draw_image_mono().
-  Only one 8-bit sample is used for each pixel, and on screens with
-  different numbers of bits for red, green, and blue only gray colors
-  are used. Setting \p D greater than 1 will let you display one channel
-  of a color image.
-
-  \par Note:
-  The X version does not support all possible visuals. If FLTK cannot
-  draw the image in the current visual it will abort. FLTK supports
-  any visual of 8 bits or less, and all common TrueColor visuals up
-  to 32 bits.
-  */
-inline void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0)
-  { fl_graphics_driver->draw_image(buf, X, Y, W, H, D, L); }
-
-/**
-  Draws a gray-scale (1 channel) image.
-  \see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L)
-  */
-inline void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0)
-  { fl_graphics_driver->draw_image_mono(buf, X, Y, W, H, D, L); }
-
-/**
-  Draws an image using a callback function to generate image data.
-
-  You can generate the image as it is being drawn, or do arbitrary
-  decompression of stored data, provided it can be decompressed to
-  individual scan lines easily.
-  \param[in] cb   callback function to generate scan line data
-  \param[in] data user data passed to callback function
-  \param[in] X,Y  screen position of top left pixel
-  \param[in] W,H  image width and height
-  \param[in] D    data size in bytes (must be greater than 0)
-  \see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L)
-
-  The callback function \p cb is called with the <tt>void*</tt> \p data
-  user data pointer to allow access to a structure of information about
-  the image, and the \p x, \p y, and \p w of the scan line desired from
-  the image. 0,0 is the upper-left corner of the image, not \p x, \p y.
-  A pointer to a buffer to put the data into is passed. You must copy
-  \p w pixels from scanline \p y, starting at pixel \p x, to this buffer.
-
-  Due to cropping, less than the whole image may be requested. So \p x
-  may be greater than zero, the first \p y may be greater than zero,
-  and \p w may be less than \p W. The buffer is long enough to store
-  the entire \p W * \p D pixels, this is for convenience with some
-  decompression schemes where you must decompress the entire line at
-  once: decompress it into the buffer, and then if \p x is not zero,
-  copy the data over so the \p x'th pixel is at the start of the buffer.
-
-  You can assume the \p y's will be consecutive, except the first one
-  may be greater than zero.
-
-  If \p D is 4 or more, you must fill in the unused bytes with zero.
-  */
-inline void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3)
-  { fl_graphics_driver->draw_image(cb, data, X, Y, W, H, D); }
-
-/**
-  Draws a gray-scale image using a callback function to generate image data.
-  \see fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D)
-  */
-FL_EXPORT void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
-
-/**
-  Checks whether platform supports true alpha blending for RGBA images.
-  \returns 1 if true alpha blending supported by platform
-  \returns 0 not supported so FLTK will use screen door transparency
-  */
-/* note: doxygen comment here to avoid triplication in os-speciic files */
-FL_EXPORT char fl_can_do_alpha_blending();
-
-/**
-  Reads an RGB(A) image from the current window or off-screen buffer.
-  \param[in] p     pixel buffer, or NULL to allocate one
-  \param[in] X,Y   position of top-left of image to read
-  \param[in] W,H   width and height of image to read
-  \param[in] alpha alpha value for image (0 for none)
-  \returns pointer to pixel buffer, or NULL if allocation failed.
-
-  The \p p argument points to a buffer that can hold the image and must
-  be at least \p W*H*3 bytes when reading RGB images, or \p W*H*4 bytes
-  when reading RGBA images. If NULL, fl_read_image() will create an
-  array of the proper size which can be freed using <tt>delete[]</tt>.
-
-  The \p alpha parameter controls whether an alpha channel is created
-  and the value that is placed in the alpha channel. If 0, no alpha
-  channel is generated.
-  */
-/* note: doxygen comment here to avoid triplication in os-speciic files */
-FL_EXPORT uchar *fl_read_image(uchar *p,int X,int Y,int W,int H,int alpha=0);
-
-// pixmaps:
-FL_EXPORT int fl_draw_pixmap(/*const*/ char* const* data, int x,int y,Fl_Color=FL_GRAY);
-FL_EXPORT int fl_draw_pixmap(const char* const* cdata, int x,int y,Fl_Color=FL_GRAY);
-FL_EXPORT int fl_measure_pixmap(/*const*/ char* const* data, int &w, int &h);
-FL_EXPORT int fl_measure_pixmap(const char* const* cdata, int &w, int &h);
-
-// other:
-FL_EXPORT void fl_scroll(int X, int Y, int W, int H, int dx, int dy,
-                         void (*draw_area)(void*, int,int,int,int), void* data);
-FL_EXPORT const char* fl_shortcut_label(unsigned int shortcut);
-FL_EXPORT const char* fl_shortcut_label(unsigned int shortcut, const char **eom);
-FL_EXPORT unsigned int fl_old_shortcut(const char* s);
-FL_EXPORT void fl_overlay_rect(int x,int y,int w,int h);
-FL_EXPORT void fl_overlay_clear();
-FL_EXPORT void fl_cursor(Fl_Cursor);
-FL_EXPORT void fl_cursor(Fl_Cursor, Fl_Color fg, Fl_Color bg=FL_WHITE);
-FL_EXPORT const char* fl_expand_text(const char* from, char* buf, int maxbuf,
-                                     double maxw, int& n, double &width,
-                                     int wrap, int draw_symbols = 0);
-
-// XIM:
-/** \todo provide user documentation for fl_set_status function */
-FL_EXPORT void fl_set_status(int X, int Y, int W, int H);
-/** \todo provide user documentation for fl_set_spot function */
-FL_EXPORT void fl_set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win=0);
-/** \todo provide user documentation for fl_reset_spot function*/
-FL_EXPORT void fl_reset_spot(void);
-
-
-
-// XForms symbols:
-FL_EXPORT int fl_draw_symbol(const char* label,int x,int y,int w,int h, Fl_Color);
-FL_EXPORT int fl_add_symbol(const char* name, void (*drawit)(Fl_Color), int scalable);
-/** @} */
-
-#endif
-
-//
-// End of "$Id: fl_draw.H 8772 2011-06-02 08:06:09Z manolo $".
-//
diff --git a/common/fltk/FL/fl_message.H b/common/fltk/FL/fl_message.H
deleted file mode 100644
index d07949e..0000000
--- a/common/fltk/FL/fl_message.H
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// "$Id: fl_message.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Standard message header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "fl_ask.H"
-
-//
-// End of "$Id: fl_message.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/fl_show_colormap.H b/common/fltk/FL/fl_show_colormap.H
deleted file mode 100644
index 762a3b4..0000000
--- a/common/fltk/FL/fl_show_colormap.H
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// "$Id: fl_show_colormap.H 8621 2011-04-23 15:46:30Z AlbrechtS $"
-//
-// Colormap picker header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   The fl_show_colormap() function hides the implementation classes used
-   to provide the popup window and color selection mechanism.
-*/
-
-#ifndef fl_show_colormap_H
-#define fl_show_colormap_H
-
-/* doxygen comment here to avoid exposing ColorMenu in fl_show_colormap.cxx
-*/
-
-/** \addtogroup  fl_attributes
-    @{ */
-
-/**
-  \brief Pops up a window to let the user pick a colormap entry.
-  \image html fl_show_colormap.png
-  \image latex fl_show_colormap.png "fl_show_colormap" height=10cm
-  \param[in] oldcol color to be highlighted when grid is shown.
-  \retval Fl_Color value of the chosen colormap entry.
-  \see Fl_Color_Chooser
-*/
-FL_EXPORT Fl_Color fl_show_colormap(Fl_Color oldcol);
-
-/** @} */
-
-#endif
-
-//
-// End of "$Id: fl_show_colormap.H 8621 2011-04-23 15:46:30Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/fl_show_input.H b/common/fltk/FL/fl_show_input.H
deleted file mode 100644
index 2d931a4..0000000
--- a/common/fltk/FL/fl_show_input.H
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// "$Id: fl_show_input.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// Standard input dialog header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "fl_ask.H"
-
-//
-// End of "$Id: fl_show_input.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/fl_types.h b/common/fltk/FL/fl_types.h
deleted file mode 100644
index c019821..0000000
--- a/common/fltk/FL/fl_types.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * "$Id: fl_types.h 7903 2010-11-28 21:06:39Z matt $"
- *
- * Simple "C"-style types for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/** \file 
- *  This file contains simple "C"-style type definitions.
- */
-
-#ifndef FL_TYPES_H
-#define FL_TYPES_H
-
-/** \name	Miscellaneous */
-/*@{*/	/* group: Miscellaneous */
-
-/** unsigned char */
-typedef unsigned char uchar;
-/** unsigned long */
-typedef unsigned long ulong;
-
-/** Flexible length utf8 Unicode text
- *
- *  \todo FIXME: temporary (?) typedef to mark UTF8 and Unicode conversions
- */
-typedef char *Fl_String;
-
-/** Flexible length utf8 Unicode read-only string
- *  \sa Fl_String
- */
-typedef const char *Fl_CString;
-
-/** 24-bit Unicode character + 8-bit indicator for keyboard flags */
-typedef unsigned int Fl_Shortcut;
-
-/** 24-bit Unicode character - upper 8-bits are unused */
-typedef unsigned int Fl_Char;
- 
-/*@}*/	/* group: Miscellaneous */
-
-#endif
-
-/*
- * End of "$Id: fl_types.h 7903 2010-11-28 21:06:39Z matt $".
- */
diff --git a/common/fltk/FL/fl_utf8.h b/common/fltk/FL/fl_utf8.h
deleted file mode 100644
index 311683e..0000000
--- a/common/fltk/FL/fl_utf8.h
+++ /dev/null
@@ -1,263 +0,0 @@
-/* "$Id: fl_utf8.h 8585 2011-04-13 15:43:22Z ianmacarthur $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2010 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/* Merged in some functionality from the fltk-2 version. IMM.
- * The following code is an attempt to merge the functions incorporated in FLTK2
- * with the functions provided in OksiD's fltk-1.1.6-utf8 port
- */
-
-/**
-  \file fl_utf8.h
-  \brief header for Unicode and UTF8 chracter handling
-*/
-
-#ifndef _HAVE_FL_UTF8_HDR_
-#define _HAVE_FL_UTF8_HDR_
-
-#include "Fl_Export.H"
-#include "fl_types.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef WIN32
-#  include <sys/types.h>
-#  include <sys/stat.h>
-#  include <locale.h>
-#  include <ctype.h>
-#  define xchar wchar_t
-#  if !defined(FL_DLL) && !defined(__CYGWIN__)
-#    undef strdup
-#    define strdup _strdup
-#    undef putenv
-#    define putenv _putenv
-#    undef stricmp
-#    define stricmp _stricmp
-#    undef strnicmp
-#    define strnicmp _strnicmp
-#    undef hypot
-#    define hypot _hypot
-#    undef chdir
-#    define chdir _chdir
-#  endif
-#elif defined(__APPLE__)
-#  include <wchar.h>
-#  include <sys/stat.h>
-#  define xchar wchar_t
-#else /* X11 */
-#  include <sys/types.h>
-#  include <sys/stat.h>
-#  include "Xutf8.h"
-#  include <X11/Xlocale.h>
-#  include <X11/Xlib.h>
-#  include <locale.h>
-#  define xchar unsigned short
-#endif
-
-#  ifdef __cplusplus
-extern "C" {
-#  endif
-
-/** \addtogroup fl_unicode
-    @{
-*/
-
-/* F2: comes from FLTK2 */
-/* OD: comes from OksiD */
-
-/**
-  Return the number of bytes needed to encode the given UCS4 character in UTF8.
-  \param [in] ucs UCS4 encoded character
-  \return number of bytes required
- */
-FL_EXPORT int fl_utf8bytes(unsigned ucs);
-
-/* OD: returns the byte length of the first UTF-8 char sequence (returns -1 if not valid) */
-FL_EXPORT int fl_utf8len(char c);
-
-/* OD: returns the byte length of the first UTF-8 char sequence (returns +1 if not valid) */
-FL_EXPORT int fl_utf8len1(char c);
-
-/* OD: returns the number of Unicode chars in the UTF-8 string */
-FL_EXPORT int fl_utf_nb_char(const unsigned char *buf, int len);
-
-/* F2: Convert the next UTF8 char-sequence into a Unicode value (and say how many bytes were used) */
-FL_EXPORT unsigned fl_utf8decode(const char* p, const char* end, int* len);
-
-/* F2: Encode a Unicode value into a UTF8 sequence, return the number of bytes used */
-FL_EXPORT int fl_utf8encode(unsigned ucs, char* buf);
-
-/* F2: Move forward to the next valid UTF8 sequence start betwen start and end */
-FL_EXPORT const char* fl_utf8fwd(const char* p, const char* start, const char* end);
-
-/* F2: Move backward to the previous valid UTF8 sequence start */
-FL_EXPORT const char* fl_utf8back(const char* p, const char* start, const char* end);
-
-/* XX: Convert a single 32-bit Unicode value into UTF16 */
-FL_EXPORT unsigned fl_ucs_to_Utf16(const unsigned ucs, unsigned short *dst, const unsigned dstlen);
-
-/* F2: Convert a UTF8 string into UTF16 */
-FL_EXPORT unsigned fl_utf8toUtf16(const char* src, unsigned srclen, unsigned short* dst, unsigned dstlen);
-
-/* F2: Convert a UTF8 string into a wide character string - makes UTF16 on win32, "UCS4" elsewhere */
-FL_EXPORT unsigned fl_utf8towc(const char *src, unsigned srclen, wchar_t *dst, unsigned dstlen);
-
-/* F2: Convert a wide character string to UTF8 - takes in UTF16 on win32, "UCS4" elsewhere */
-FL_EXPORT unsigned fl_utf8fromwc(char *dst, unsigned dstlen, const wchar_t *src, unsigned srclen);
-
-/* F2: Convert a UTF8 string into ASCII, eliding untranslatable glyphs */
-FL_EXPORT unsigned fl_utf8toa (const char *src, unsigned srclen, char *dst, unsigned dstlen);
-/* OD: convert UTF-8 string to latin1 */
-/* FL_EXPORT int fl_utf2latin1(const unsigned char *src, int srclen, char *dst); */
-
-/* F2: Convert 8859-1 string to UTF8 */
-FL_EXPORT unsigned fl_utf8froma (char *dst, unsigned dstlen, const char *src, unsigned srclen);
-/* OD: convert latin1 str to UTF-8 */
-/* FL_EXPORT int fl_latin12utf(const unsigned char *src, int srclen, char *dst); */
-
-/* F2: Returns true if the current O/S locale is UTF8 */
-FL_EXPORT int fl_utf8locale();
-
-/* F2: Examine the first len characters of src, to determine if the input text is UTF8 or not
- * NOTE: The value returned is not simply boolean - it contains information about the probable
- * type of the src text. */
-FL_EXPORT int fl_utf8test(const char *src, unsigned len);
-
-/* XX: return width of "raw" ucs character in columns.
- * for internal use only */
-FL_EXPORT int fl_wcwidth_(unsigned int ucs);
-
-/* XX: return width of utf-8 character string in columns.
- * NOTE: this may also do C1 control character (0x80 to 0x9f) to CP1252 mapping,
- * depending on original build options */
-FL_EXPORT int fl_wcwidth(const char *src);
-
-/* OD: Return true if the character is non-spacing */
-FL_EXPORT unsigned int fl_nonspacing(unsigned int ucs);
-
-/* F2: Convert UTF8 to a local multi-byte encoding - mainly for win32? */
-FL_EXPORT unsigned fl_utf8to_mb(const char *src, unsigned srclen, char *dst, unsigned dstlen);
-/* OD: Convert UTF8 to a local multi-byte encoding */
-FL_EXPORT char* fl_utf2mbcs(const char *src);
-
-/* F2: Convert a local multi-byte encoding to UTF8 - mainly for win32? */
-FL_EXPORT unsigned fl_utf8from_mb(char *dst, unsigned dstlen, const char *src, unsigned srclen);
-/* OD: Convert a local multi-byte encoding to UTF8 */
-/* FL_EXPORT char* fl_mbcs2utf(const char *src); */
-
-/*****************************************************************************/
-#ifdef WIN32
-/* OD: Attempt to convert the UTF8 string to the current locale */
-FL_EXPORT char *fl_utf8_to_locale(const char *s, int len, unsigned int codepage);
-
-/* OD: Attempt to convert a string in the current locale to UTF8 */
-FL_EXPORT char *fl_locale_to_utf8(const char *s, int len, unsigned int codepage);
-#endif
-
-/*****************************************************************************
- * The following functions are intended to provide portable, UTF8 aware
- * versions of standard functions
- */
-
-/* OD: UTF8 aware strncasecmp - converts to lower case Unicode and tests */
-FL_EXPORT int fl_utf_strncasecmp(const char *s1, const char *s2, int n);
-
-/* OD: UTF8 aware strcasecmp - converts to Unicode and tests */
-FL_EXPORT int fl_utf_strcasecmp(const char *s1, const char *s2);
-
-/* OD: return the Unicode lower case value of ucs */
-FL_EXPORT int fl_tolower(unsigned int ucs);
-
-/* OD: return the Unicode upper case value of ucs */
-FL_EXPORT int fl_toupper(unsigned int ucs);
-
-/* OD: converts the UTF8 string to the lower case equivalent */
-FL_EXPORT int fl_utf_tolower(const unsigned char *str, int len, char *buf);
-
-/* OD: converts the UTF8 string to the upper case equivalent */
-FL_EXPORT int fl_utf_toupper(const unsigned char *str, int len, char *buf);
-
-/* OD: Portable UTF8 aware chmod wrapper */
-FL_EXPORT int fl_chmod(const char* f, int mode);
-
-/* OD: Portable UTF8 aware access wrapper */
-FL_EXPORT int fl_access(const char* f, int mode);
-
-/* OD: Portable UTF8 aware stat wrapper */
-FL_EXPORT int fl_stat( const char *path, struct stat *buffer );
-
-/* OD: Portable UTF8 aware getcwd wrapper */
-FL_EXPORT char* fl_getcwd( char *buf, int maxlen);
-
-/* OD: Portable UTF8 aware fopen wrapper */
-FL_EXPORT FILE *fl_fopen(const char *f, const char *mode);
-
-/* OD: Portable UTF8 aware system wrapper */
-FL_EXPORT int fl_system(const char* f);
-
-/* OD: Portable UTF8 aware execvp wrapper */
-FL_EXPORT int fl_execvp(const char *file, char *const *argv);
-
-/* OD: Portable UTF8 aware open wrapper */
-FL_EXPORT int fl_open(const char* f, int o, ...);
-
-/* OD: Portable UTF8 aware unlink wrapper */
-FL_EXPORT int fl_unlink(const char *f);
-
-/* OD: Portable UTF8 aware rmdir wrapper */
-FL_EXPORT int fl_rmdir(const char *f);
-
-/* OD: Portable UTF8 aware getenv wrapper */
-FL_EXPORT char* fl_getenv(const char *name);
-
-/* OD: Portable UTF8 aware execvp wrapper */
-FL_EXPORT int fl_mkdir(const char* f, int mode);
-
-/* OD: Portable UTF8 aware rename wrapper */
-FL_EXPORT int fl_rename(const char* f, const char *t);
-
-
-/* OD: Given a full pathname, this will create the directory path needed to hold the file named */
-FL_EXPORT void fl_make_path_for_file( const char *path );
-
-/* OD: recursively create a path in the file system */
-FL_EXPORT char fl_make_path( const char *path );
-
-
-/** @} */
-
-/*****************************************************************************/
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* _HAVE_FL_UTF8_HDR_ */
-
-/*
- * End of "$Id: fl_utf8.h 8585 2011-04-13 15:43:22Z ianmacarthur $".
- */
diff --git a/common/fltk/FL/forms.H b/common/fltk/FL/forms.H
deleted file mode 100644
index 3357fbc..0000000
--- a/common/fltk/FL/forms.H
+++ /dev/null
@@ -1,845 +0,0 @@
-//
-// "$Id: forms.H 8623 2011-04-24 17:09:41Z AlbrechtS $"
-//
-// Forms emulation header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef __FORMS_H__
-#define __FORMS_H__
-
-#include "Fl.H"
-#include "Fl_Group.H"
-#include "Fl_Window.H"
-#include "fl_draw.H"
-
-typedef Fl_Widget FL_OBJECT;
-typedef Fl_Window FL_FORM;
-
-////////////////////////////////////////////////////////////////
-// Random constants & symbols defined by forms.h file:
-
-#ifndef NULL
-#define NULL 0
-#endif
-#ifndef FALSE
-#define FALSE 0
-#define TRUE 1
-#endif
-
-#define FL_ON		1
-#define FL_OK		1
-#define FL_VALID	1
-#define FL_PREEMPT	1
-#define FL_AUTO		2
-#define FL_WHEN_NEEDED	FL_AUTO
-#define FL_OFF		0
-#define FL_NONE		0
-#define FL_CANCEL	0
-#define FL_INVALID	0
-#define FL_IGNORE	-1
-//#define FL_CLOSE	-2 // this variable is never used in FLTK Forms. It is removed becaus it conflicts with the window FL_CLOSE event
-
-#define FL_LCOL		FL_BLACK
-#define FL_COL1		FL_GRAY
-#define FL_MCOL		FL_LIGHT1
-#define FL_LEFT_BCOL	FL_LIGHT3 // 53 is better match
-#define FL_TOP_BCOL	FL_LIGHT2 // 51
-#define FL_BOTTOM_BCOL	FL_DARK2  // 40
-#define FL_RIGHT_BCOL	FL_DARK3  // 36
-#define FL_INACTIVE	FL_INACTIVE_COLOR
-#define FL_INACTIVE_COL	FL_INACTIVE_COLOR
-#define FL_FREE_COL1	FL_FREE_COLOR
-#define FL_FREE_COL2	((Fl_Color)(FL_FREE_COLOR+1))
-#define FL_FREE_COL3	((Fl_Color)(FL_FREE_COLOR+2))
-#define FL_FREE_COL4	((Fl_Color)(FL_FREE_COLOR+3))
-#define FL_FREE_COL5	((Fl_Color)(FL_FREE_COLOR+4))
-#define FL_FREE_COL6	((Fl_Color)(FL_FREE_COLOR+5))
-#define FL_FREE_COL7	((Fl_Color)(FL_FREE_COLOR+6))
-#define FL_FREE_COL8	((Fl_Color)(FL_FREE_COLOR+7))
-#define FL_FREE_COL9	((Fl_Color)(FL_FREE_COLOR+8))
-#define FL_FREE_COL10	((Fl_Color)(FL_FREE_COLOR+9))
-#define FL_FREE_COL11	((Fl_Color)(FL_FREE_COLOR+10))
-#define FL_FREE_COL12	((Fl_Color)(FL_FREE_COLOR+11))
-#define FL_FREE_COL13	((Fl_Color)(FL_FREE_COLOR+12))
-#define FL_FREE_COL14	((Fl_Color)(FL_FREE_COLOR+13))
-#define FL_FREE_COL15	((Fl_Color)(FL_FREE_COLOR+14))
-#define FL_FREE_COL16	((Fl_Color)(FL_FREE_COLOR+15))
-#define FL_TOMATO	((Fl_Color)(131))
-#define FL_INDIANRED	((Fl_Color)(164))
-#define FL_SLATEBLUE	((Fl_Color)(195))
-#define FL_DARKGOLD	((Fl_Color)(84))
-#define FL_PALEGREEN	((Fl_Color)(157))
-#define FL_ORCHID	((Fl_Color)(203))
-#define FL_DARKCYAN	((Fl_Color)(189))
-#define FL_DARKTOMATO	((Fl_Color)(113))
-#define FL_WHEAT	((Fl_Color)(174))
-
-#define FL_ALIGN_BESIDE	FL_ALIGN_INSIDE
-
-#define FL_PUP_TOGGLE	2 // FL_MENU_TOGGLE
-#define FL_PUP_INACTIVE 1 // FL_MENU_INACTIVE
-#define FL_NO_FRAME	FL_NO_BOX
-#define FL_ROUNDED3D_UPBOX 	FL_ROUND_UP_BOX
-#define FL_ROUNDED3D_DOWNBOX	FL_ROUND_DOWN_BOX
-#define FL_OVAL3D_UPBOX		FL_ROUND_UP_BOX
-#define FL_OVAL3D_DOWNBOX	FL_ROUND_DOWN_BOX
-
-#define FL_MBUTTON1	1
-#define FL_LEFTMOUSE	1
-#define FL_MBUTTON2	2
-#define FL_MIDDLEMOUSE	2
-#define FL_MBUTTON3	3
-#define FL_RIGHTMOUSE	3
-#define FL_MBUTTON4	4
-#define FL_MBUTTON5	5
-
-#define FL_INVALID_STYLE 255
-#define FL_NORMAL_STYLE	FL_HELVETICA
-#define FL_BOLD_STYLE	FL_HELVETICA_BOLD
-#define FL_ITALIC_STYLE	FL_HELVETICA_ITALIC
-#define FL_BOLDITALIC_STYLE FL_HELVETICA_BOLD_ITALIC
-#define FL_FIXED_STYLE	FL_COURIER
-#define FL_FIXEDBOLD_STYLE FL_COURIER_BOLD
-#define FL_FIXEDITALIC_STYLE FL_COURIER_ITALIC
-#define FL_FIXEDBOLDITALIC_STYLE FL_COURIER_BOLD_ITALIC
-#define FL_TIMES_STYLE	FL_TIMES
-#define FL_TIMESBOLD_STYLE FL_TIMES_BOLD
-#define FL_TIMESITALIC_STYLE FL_TIMES_ITALIC
-#define FL_TIMESBOLDITALIC_STYLE FL_TIMES_BOLD_ITALIC
-
-// hacks to change the labeltype() when passed to fl_set_object_lstyle():
-#define FL_SHADOW_STYLE		(FL_SHADOW_LABEL<<8)
-#define FL_ENGRAVED_STYLE	(FL_ENGRAVED_LABEL<<8)
-#define FL_EMBOSSED_STYLE	(FL_EMBOSSED_LABEL<<0)
-
-// size values are different from XForms, match older Forms:
-#define FL_TINY_SIZE	8
-#define FL_SMALL_SIZE	11 // 10
-//#define FL_NORMAL_SIZE	14 // 12
-#define FL_MEDIUM_SIZE	18 // 14
-#define FL_LARGE_SIZE	24 // 18
-#define FL_HUGE_SIZE	32 // 24
-#define FL_DEFAULT_SIZE	FL_SMALL_SIZE
-#define FL_TINY_FONT	FL_TINY_SIZE
-#define FL_SMALL_FONT	FL_SMALL_SIZE
-#define FL_NORMAL_FONT	FL_NORMAL_SIZE
-#define FL_MEDIUM_FONT	FL_MEDIUM_SIZE
-#define FL_LARGE_FONT	FL_LARGE_SIZE
-#define FL_HUGE_FONT	FL_HUGE_SIZE
-#define FL_NORMAL_FONT1	FL_SMALL_FONT
-#define FL_NORMAL_FONT2	FL_NORMAL_FONT
-#define FL_DEFAULT_FONT	FL_SMALL_FONT
-
-#define FL_RETURN_END_CHANGED	FL_WHEN_RELEASE
-#define FL_RETURN_CHANGED	FL_WHEN_CHANGED
-#define FL_RETURN_END		FL_WHEN_RELEASE_ALWAYS
-#define FL_RETURN_ALWAYS	(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED)
-
-#define FL_BOUND_WIDTH	3
-
-typedef int FL_Coord;
-typedef int FL_COLOR;
-
-////////////////////////////////////////////////////////////////
-// fltk interaction:
-
-#define FL_CMD_OPT void
-extern FL_EXPORT void fl_initialize(int*, char*[], const char*, FL_CMD_OPT*, int);
-inline void fl_finish() {}
-
-typedef void (*FL_IO_CALLBACK) (int, void*);
-inline void fl_add_io_callback(int fd, short w, FL_IO_CALLBACK cb, void* v) {
-  Fl::add_fd(fd,w,cb,v);}
-inline void fl_remove_io_callback(int fd, short, FL_IO_CALLBACK) {
-  Fl::remove_fd(fd);} // removes all the callbacks!
-
-// type of callback is different and no "id" number is returned:
-inline void fl_add_timeout(long msec, void (*cb)(void*), void* v) {
-  Fl::add_timeout(msec*.001, cb, v);}
-inline void fl_remove_timeout(int) {}
-
-// type of callback is different!
-inline void fl_set_idle_callback(void (*cb)()) {Fl::set_idle(cb);}
-
-FL_EXPORT Fl_Widget* fl_do_forms(void);
-FL_EXPORT Fl_Widget* fl_check_forms();
-inline Fl_Widget* fl_do_only_forms(void) {return fl_do_forms();}
-inline Fl_Widget* fl_check_only_forms(void) {return fl_check_forms();}
-
-// because of new redraw behavior, these are no-ops:
-inline void fl_freeze_object(Fl_Widget*) {}
-inline void fl_unfreeze_object(Fl_Widget*) {}
-inline void fl_freeze_form(Fl_Window*) {}
-inline void fl_unfreeze_form(Fl_Window*) {}
-inline void fl_freeze_all_forms() {}
-inline void fl_unfreeze_all_forms() {}
-
-inline void fl_set_focus_object(Fl_Window*, Fl_Widget* o) {Fl::focus(o);}
-inline void fl_reset_focus_object(Fl_Widget* o) {Fl::focus(o);}
-#define fl_set_object_focus fl_set_focus_object
-
-// void fl_set_form_atclose(Fl_Window*w,int (*cb)(Fl_Window*,void*),void* v)
-// void fl_set_atclose(int (*cb)(Fl_Window*,void*),void*)
-// fl_set_form_atactivate/atdeactivate not implemented!
-
-////////////////////////////////////////////////////////////////
-// Fl_Widget:
-
-inline void fl_set_object_boxtype(Fl_Widget* o, Fl_Boxtype a) {o->box(a);}
-inline void fl_set_object_lsize(Fl_Widget* o,int s) {o->labelsize(s);}
-
-/* forms lib font indexes must be byte sized - extract correct byte from style word */
-inline void fl_set_object_lstyle(Fl_Widget* o,int a) {
-  o->labelfont((Fl_Font)(a&0xff)); o->labeltype((Fl_Labeltype)(a>>8));}
-inline void fl_set_object_lcol(Fl_Widget* o, Fl_Color a) {o->labelcolor(a);}
-#define fl_set_object_lcolor  fl_set_object_lcol
-inline void fl_set_object_lalign(Fl_Widget* o, Fl_Align a) {o->align(a);}
-#define fl_set_object_align fl_set_object_lalign
-inline void fl_set_object_color(Fl_Widget* o,Fl_Color a,Fl_Color b) {o->color(a,b);}
-inline void fl_set_object_label(Fl_Widget* o, const char* a) {o->label(a); o->redraw();}
-inline void fl_set_object_position(Fl_Widget*o,int x,int y) {o->position(x,y);}
-inline void fl_set_object_size(Fl_Widget* o, int w, int h) {o->size(w,h);}
-inline void fl_set_object_geometry(Fl_Widget* o,int x,int y,int w,int h) {o->resize(x,y,w,h);}
-
-inline void fl_get_object_geometry(Fl_Widget* o,int*x,int*y,int*w,int*h) {
-  *x = o->x(); *y = o->y(); *w = o->w(); *h = o->h();}
-inline void fl_get_object_position(Fl_Widget* o,int*x,int*y) {
-  *x = o->x(); *y = o->y();}
-
-typedef void (*Forms_CB)(Fl_Widget*, long);
-inline void fl_set_object_callback(Fl_Widget*o,Forms_CB c,long a) {o->callback(c,a);}
-#define fl_set_call_back      fl_set_object_callback
-inline void fl_call_object_callback(Fl_Widget* o) {o->do_callback();}
-inline void fl_trigger_object(Fl_Widget* o) {o->do_callback();}
-inline void fl_set_object_return(Fl_Widget* o, int v) {
-  o->when((Fl_When)(v|FL_WHEN_RELEASE));}
-
-inline void fl_redraw_object(Fl_Widget* o) {o->redraw();}
-inline void fl_show_object(Fl_Widget* o) {o->show();}
-inline void fl_hide_object(Fl_Widget* o) {o->hide();}
-inline void fl_free_object(Fl_Widget* x) {delete x;}
-inline void fl_delete_object(Fl_Widget* o) {o->parent()->remove(*o);}
-inline void fl_activate_object(Fl_Widget* o) {o->activate();}
-inline void fl_deactivate_object(Fl_Widget* o) {o->deactivate();}
-
-inline void fl_add_object(Fl_Window* f, Fl_Widget* x) {f->add(x);}
-inline void fl_insert_object(Fl_Widget* o, Fl_Widget* b) {b->parent()->insert(*o,b);}
-
-inline Fl_Window* FL_ObjWin(Fl_Widget* o) {return o->window();}
-
-////////////////////////////////////////////////////////////////
-// things that appered in the demos a lot that I don't emulate, but
-// I did not want to edit out of all the demos...
-
-inline int fl_get_border_width() {return 3;}
-inline void fl_set_border_width(int) {}
-inline void fl_set_object_dblbuffer(Fl_Widget*, int) {}
-inline void fl_set_form_dblbuffer(Fl_Window*, int) {}
-
-////////////////////////////////////////////////////////////////
-// Fl_Window:
-
-inline void fl_free_form(Fl_Window* x) {delete x;}
-inline void fl_redraw_form(Fl_Window* f) {f->redraw();}
-
-inline Fl_Window* fl_bgn_form(Fl_Boxtype b,int w,int h) {
-  Fl_Window* g = new Fl_Window(w,h,0);
-  g->box(b);
-  return g;
-}
-FL_EXPORT void fl_end_form();
-inline void fl_addto_form(Fl_Window* f) {f->begin();}
-inline Fl_Group* fl_bgn_group() {return new Fl_Group(0,0,0,0,0);}
-inline void fl_end_group() {Fl_Group::current()->forms_end();}
-inline void fl_addto_group(Fl_Widget* o) {((Fl_Group* )o)->begin();}
-#define resizebox _ddfdesign_kludge()
-
-inline void fl_scale_form(Fl_Window* f, double x, double y) {
-  f->resizable(f); f->size(int(f->w()*x),int(f->h()*y));}
-inline void fl_set_form_position(Fl_Window* f,int x,int y) {f->position(x,y);}
-inline void fl_set_form_size(Fl_Window* f, int w, int h) {f->size(w,h);}
-inline void fl_set_form_geometry(Fl_Window* f,int x,int y,int w,int h) {
-  f->resize(x,y,w,h);}
-#define fl_set_initial_placement fl_set_form_geometry
-inline void fl_adjust_form_size(Fl_Window*) {}
-
-FL_EXPORT void fl_show_form(Fl_Window* f,int p,int b,const char* n);
-enum {	// "p" argument values:
-  FL_PLACE_FREE = 0,	// make resizable
-  FL_PLACE_MOUSE = 1,	// mouse centered on form
-  FL_PLACE_CENTER = 2,	// center of the screen
-  FL_PLACE_POSITION = 4,// fixed position, resizable
-  FL_PLACE_SIZE = 8,	// fixed size, normal fltk behavior
-  FL_PLACE_GEOMETRY =16,// fixed size and position
-  FL_PLACE_ASPECT = 32,	// keep aspect ratio (ignored)
-  FL_PLACE_FULLSCREEN=64,// fill screen
-  FL_PLACE_HOTSPOT = 128,// enables hotspot
-  FL_PLACE_ICONIC = 256,// iconic (ignored)
-  FL_FREE_SIZE=(1<<14),	// force resizable
-  FL_FIX_SIZE =(1<<15)	// force off resizable
-};
-#define FL_PLACE_FREE_CENTER (FL_PLACE_CENTER|FL_FREE_SIZE)
-#define FL_PLACE_CENTERFREE  (FL_PLACE_CENTER|FL_FREE_SIZE)
-enum {	// "b" arguement values:
-  FL_NOBORDER = 0,
-  FL_FULLBORDER,
-  FL_TRANSIENT
-//FL_MODAL = (1<<8)	// not implemented yet in Forms
-};
-inline void fl_set_form_hotspot(Fl_Window* w,int x,int y) {w->hotspot(x,y);}
-inline void fl_set_form_hotobject(Fl_Window* w, Fl_Widget* o) {w->hotspot(o);}
-extern FL_EXPORT char fl_flip;	// in forms.C
-inline void fl_flip_yorigin() {fl_flip = 1;}
-
-#define fl_prepare_form_window fl_show_form
-inline void fl_show_form_window(Fl_Window*) {}
-
-inline void fl_raise_form(Fl_Window* f) {f->show();}
-
-inline void fl_hide_form(Fl_Window* f) {f->hide();}
-inline void fl_pop_form(Fl_Window* f) {f->show();}
-
-extern FL_EXPORT char fl_modal_next; // in forms.C
-inline void fl_activate_all_forms() {}
-inline void fl_deactivate_all_forms() {fl_modal_next = 1;}
-inline void fl_deactivate_form(Fl_Window*w) {w->deactivate();}
-inline void fl_activate_form(Fl_Window*w) {w->activate();}
-
-inline void fl_set_form_title(Fl_Window* f, const char* s) {f->label(s);}
-inline void fl_title_form(Fl_Window* f, const char* s) {f->label(s);}
-
-typedef void (*Forms_FormCB)(Fl_Widget*);
-inline void fl_set_form_callback(Fl_Window* f,Forms_FormCB c) {f->callback(c);}
-#define fl_set_form_call_back fl_set_form_callback
-
-inline void fl_init() {}
-FL_EXPORT void fl_set_graphics_mode(int,int);
-
-inline int fl_form_is_visible(Fl_Window* f) {return f->visible();}
-
-inline int fl_mouse_button() {return Fl::event_button();}
-#define fl_mousebutton fl_mouse_button
-
-#define fl_free       free
-#define fl_malloc     malloc
-#define fl_calloc     calloc
-#define fl_realloc    realloc
-
-////////////////////////////////////////////////////////////////
-// Drawing functions.  Only usable inside an Fl_Free object?
-
-inline void fl_drw_box(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
-    fl_draw_box(b,x,y,w,h,bgc);}
-inline void fl_drw_frame(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
-    fl_draw_box(b,x,y,w,h,bgc);}
-
-inline void fl_drw_text(Fl_Align align, int x, int y, int w, int h,
-		  Fl_Color fgcolor, int size, Fl_Font style,
-		  const char* s) {
-  fl_font(style,size);
-  fl_color(fgcolor);
-  fl_draw(s,x,y,w,h,align);
-}
-
-// this does not work except for CENTER...
-inline void fl_drw_text_beside(Fl_Align align, int x, int y, int w, int h,
-		  Fl_Color fgcolor, int size, Fl_Font style,
-		  const char* s) {
-  fl_font(style,size);
-  fl_color(fgcolor);
-  fl_draw(s,x,y,w,h,align);
-}
-
-inline void fl_set_font_name(Fl_Font n,const char* s) {Fl::set_font(n,s);}
-
-inline void fl_mapcolor(Fl_Color c, uchar r, uchar g, uchar b) {Fl::set_color(c,r,g,b);}
-
-#define fl_set_clipping(x,y,w,h) fl_push_clip(x,y,w,h)
-#define fl_unset_clipping() fl_pop_clip()
-
-////////////////////////////////////////////////////////////////
-// Forms classes:
-
-inline Fl_Widget* fl_add_new(Fl_Widget* p) {return p;}
-inline Fl_Widget* fl_add_new(uchar t,Fl_Widget* p) {p->type(t); return p;}
-
-#define forms_constructor(type,name) \
-inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
- return (type*)(fl_add_new(t, new type(x,y,w,h,l)));}
-#define forms_constructort(type,name) \
-inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
- return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
-#define forms_constructorb(type,name) \
-inline type* name(Fl_Boxtype t,int x,int y,int w,int h,const char* l) { \
- return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
-
-#include "Fl_FormsBitmap.H"
-#define FL_NORMAL_BITMAP FL_NO_BOX
-forms_constructorb(Fl_FormsBitmap, fl_add_bitmap)
-inline void fl_set_bitmap_data(Fl_Widget* o, int w, int h, const uchar* b) {
-    ((Fl_FormsBitmap*)o)->set(w,h,b);
-}
-
-#include "Fl_FormsPixmap.H"
-#define FL_NORMAL_PIXMAP FL_NO_BOX
-forms_constructorb(Fl_FormsPixmap, fl_add_pixmap)
-inline void fl_set_pixmap_data(Fl_Widget* o, char*const* b) {
-    ((Fl_FormsPixmap*)o)->set(b);
-}
-//inline void fl_set_pixmap_file(Fl_Widget*, const char*);
-inline void fl_set_pixmap_align(Fl_Widget* o,Fl_Align a,int,int) {o->align(a);}
-//inline void fl_set_pixmap_colorcloseness(int, int, int);
-
-#include "Fl_Box.H"
-forms_constructorb(Fl_Box, fl_add_box)
-
-#include "Fl_Browser.H"
-forms_constructor(Fl_Browser, fl_add_browser)
-
-inline void fl_clear_browser(Fl_Widget* o) {
-    ((Fl_Browser*)o)->clear();}
-inline void fl_add_browser_line(Fl_Widget* o, const char* s) {
-    ((Fl_Browser*)o)->add(s);}
-inline void fl_addto_browser(Fl_Widget* o, const char* s) {
-    ((Fl_Browser*)o)->add(s);} /* should also scroll to bottom */
-//inline void fl_addto_browser_chars(Fl_Widget*, const char*)
-//#define fl_append_browser fl_addto_browser_chars
-inline void fl_insert_browser_line(Fl_Widget* o, int n, const char* s) {
-    ((Fl_Browser*)o)->insert(n,s);}
-inline void fl_delete_browser_line(Fl_Widget* o, int n) {
-    ((Fl_Browser*)o)->remove(n);}
-inline void fl_replace_browser_line(Fl_Widget* o, int n, const char* s) {
-    ((Fl_Browser*)o)->replace(n,s);}
-inline char* fl_get_browser_line(Fl_Widget* o, int n) {
-    return (char*)(((Fl_Browser*)o)->text(n));}
-inline int fl_load_browser(Fl_Widget* o, const char* f) {
-    return ((Fl_Browser*)o)->load(f);}
-inline void fl_select_browser_line(Fl_Widget* o, int n) {
-    ((Fl_Browser*)o)->select(n,1);}
-inline void fl_deselect_browser_line(Fl_Widget* o, int n) {
-    ((Fl_Browser*)o)->select(n,0);}
-inline void fl_deselect_browser(Fl_Widget* o) {
-    ((Fl_Browser*)o)->deselect();}
-inline int fl_isselected_browser_line(Fl_Widget* o, int n) {
-    return ((Fl_Browser*)o)->selected(n);}
-inline int fl_get_browser_topline(Fl_Widget* o) {
-    return ((Fl_Browser*)o)->topline();}
-inline int fl_get_browser(Fl_Widget* o) {
-    return ((Fl_Browser*)o)->value();}
-inline int fl_get_browser_maxline(Fl_Widget* o) {
-    return ((Fl_Browser*)o)->size();}
-//linline int fl_get_browser_screenlines(Fl_Widget*);
-inline void fl_set_browser_topline(Fl_Widget* o, int n) {
-    ((Fl_Browser*)o)->topline(n);}
-inline void fl_set_browser_fontsize(Fl_Widget* o, int s) {
-    ((Fl_Browser*)o)->textsize(s);}
-inline void fl_set_browser_fontstyle(Fl_Widget* o, Fl_Font s) {
-    ((Fl_Browser*)o)->textfont(s);}
-inline void fl_set_browser_specialkey(Fl_Widget* o, char c) {
-    ((Fl_Browser*)o)->format_char(c);}
-//inline void fl_set_browser_vscrollbar(Fl_Widget*, int);
-//inline void fl_set_browser_hscrollbar(Fl_Widget*, int);
-//inline void fl_set_browser_leftslider(Fl_Widget*, int);
-//#define fl_set_browser_leftscrollbar fl_set_browser_leftslider
-//inline void fl_set_browser_line_selectable(Fl_Widget*, int, int);
-//inline void fl_get_browser_dimension(Fl_Widget*,int*,int*,int*,int*);
-//inline void fl_set_browser_dblclick_callback(Fl_Widget*,FL_CALLBACKPTR,long);
-//inline void fl_set_browser_xoffset(Fl_Widget*, FL_Coord);
-//inline void fl_set_browser_scrollbarsize(Fl_Widget*, int, int);
-inline void fl_setdisplayed_browser_line(Fl_Widget* o, int n, int i) {
-    ((Fl_Browser*)o)->display(n,i);}
-inline int fl_isdisplayed_browser_line(Fl_Widget* o, int n) {
-    return ((Fl_Browser*)o)->displayed(n);}
-
-#include "Fl_Button.H"
-
-#define FL_NORMAL_BUTTON	0
-#define FL_TOUCH_BUTTON		4
-#define FL_INOUT_BUTTON		5
-#define FL_RETURN_BUTTON	6
-#define FL_HIDDEN_RET_BUTTON	7
-#define FL_PUSH_BUTTON		FL_TOGGLE_BUTTON
-#define FL_MENU_BUTTON		9
-
-FL_EXPORT Fl_Button* fl_add_button(uchar t,int x,int y,int w,int h,const char* l);
-inline int fl_get_button(Fl_Widget* b) {return ((Fl_Button*)b)->value();}
-inline void fl_set_button(Fl_Widget* b, int v) {((Fl_Button*)b)->value(v);}
-inline int fl_get_button_numb(Fl_Widget*) {return Fl::event_button();}
-inline void fl_set_button_shortcut(Fl_Widget* b, const char* s,int=0) {
-    ((Fl_Button*)b)->shortcut(s);}
-//#define fl_set_object_shortcut(b,s) fl_set_button_shortcut(b,s)
-
-#include "Fl_Light_Button.H"
-forms_constructor(Fl_Light_Button, fl_add_lightbutton)
-
-#include "Fl_Round_Button.H"
-forms_constructor(Fl_Round_Button, fl_add_roundbutton)
-forms_constructor(Fl_Round_Button, fl_add_round3dbutton)
-
-#include "Fl_Check_Button.H"
-forms_constructor(Fl_Check_Button, fl_add_checkbutton)
-
-inline Fl_Widget* fl_add_bitmapbutton(int t,int x,int y,int w,int h,const char* l) {Fl_Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
-inline void fl_set_bitmapbutton_data(Fl_Widget* o,int a,int b,uchar* c) {
-  (new Fl_Bitmap(c,a,b))->label(o);}  // does not delete old Fl_Bitmap!
-
-inline Fl_Widget* fl_add_pixmapbutton(int t,int x,int y,int w,int h,const char* l) {Fl_Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
-inline void fl_set_pixmapbutton_data(Fl_Widget* o, const char*const* c) {
-  (new Fl_Pixmap(c))->label(o);}  // does not delete old Fl_Pixmap!
-
-// Fl_Canvas object not yet implemented!
-
-#include "Fl_Chart.H"
-
-forms_constructor(Fl_Chart, fl_add_chart)
-inline void fl_clear_chart(Fl_Widget* o) {
-  ((Fl_Chart*)o)->clear();}
-inline void fl_add_chart_value(Fl_Widget* o,double v,const char* s,uchar c){
-  ((Fl_Chart*)o)->add(v,s,c);}
-inline void fl_insert_chart_value(Fl_Widget* o, int i, double v, const char* s, uchar c) {
-  ((Fl_Chart*)o)->insert(i,v,s,c);}
-inline void fl_replace_chart_value(Fl_Widget* o, int i, double v, const char* s, uchar c) {
-  ((Fl_Chart*)o)->replace(i,v,s,c);}
-inline void fl_set_chart_bounds(Fl_Widget* o, double a, double b) {
-  ((Fl_Chart*)o)->bounds(a,b);}
-inline void fl_set_chart_maxnumb(Fl_Widget* o, int v) {
-  ((Fl_Chart*)o)->maxsize(v);}
-inline void fl_set_chart_autosize(Fl_Widget* o, int v) {
-  ((Fl_Chart*)o)->autosize(v);}
-inline void fl_set_chart_lstyle(Fl_Widget* o, Fl_Font v) {
-  ((Fl_Chart*)o)->textfont(v);}
-inline void fl_set_chart_lsize(Fl_Widget* o, int v) {
-  ((Fl_Chart*)o)->textsize(v);}
-inline void fl_set_chart_lcolor(Fl_Widget* o, Fl_Color v) {
-  ((Fl_Chart*)o)->textcolor(v);}
-#define fl_set_chart_lcol   fl_set_chart_lcolor
-
-#include "Fl_Choice.H"
-
-#define FL_NORMAL_CHOICE	0
-#define FL_NORMAL_CHOICE2	0
-#define FL_DROPLIST_CHOICE	0
-
-forms_constructor(Fl_Choice, fl_add_choice)
-inline void fl_clear_choice(Fl_Widget* o) {
-    ((Fl_Choice*)o)->clear();}
-inline void fl_addto_choice(Fl_Widget* o, const char* s) {
-    ((Fl_Choice*)o)->add(s);}
-inline void fl_replace_choice(Fl_Widget* o, int i, const char* s) {
-    ((Fl_Choice*)o)->replace(i-1,s);}
-inline void fl_delete_choice(Fl_Widget* o, int i) {
-    ((Fl_Choice*)o)->remove(i-1);}
-inline void fl_set_choice(Fl_Widget* o, int i) {
-    ((Fl_Choice*)o)->value(i-1);}
-// inline void fl_set_choice_text(Fl_Widget*, const char*);
-inline int fl_get_choice(Fl_Widget* o) {
-    return ((Fl_Choice*)o)->value()+1;}
-// inline const char* fl_get_choice_item_text(Fl_Widget*, int);
-// inline int fl_get_choice_maxitems(Fl_Widget*);
-inline const char* fl_get_choice_text(Fl_Widget* o) {
-    return ((Fl_Choice*)o)->text();}
-inline void fl_set_choice_fontsize(Fl_Widget* o, int x) {
-    ((Fl_Choice*)o)->textsize(x);}
-inline void fl_set_choice_fontstyle(Fl_Widget* o, Fl_Font x) {
-    ((Fl_Choice*)o)->textfont(x);}
-// inline void fl_set_choice_item_mode(Fl_Widget*, int, unsigned);
-// inline void fl_set_choice_item_shortcut(Fl_Widget*, int, const char*);
-
-#include "Fl_Clock.H"
-forms_constructort(Fl_Clock, fl_add_clock)
-inline void fl_get_clock(Fl_Widget* o, int* h, int* m, int* s) {
-    *h = ((Fl_Clock*)o)->hour();
-    *m = ((Fl_Clock*)o)->minute();
-    *s = ((Fl_Clock*)o)->second();
-}
-
-#include "Fl_Counter.H"
-forms_constructor(Fl_Counter, fl_add_counter)
-inline void fl_set_counter_value(Fl_Widget* o, double v) {
-    ((Fl_Counter*)o)->value(v);}
-inline void fl_set_counter_bounds(Fl_Widget* o, double a, double b) {
-    ((Fl_Counter*)o)->bounds(a,b);}
-inline void fl_set_counter_step(Fl_Widget* o, double a, double b) {
-    ((Fl_Counter*)o)->step(a,b);}
-inline void fl_set_counter_precision(Fl_Widget* o, int v) {
-    ((Fl_Counter*)o)->precision(v);}
-inline void fl_set_counter_return(Fl_Widget* o, int v) {
-    ((Fl_Counter*)o)->when((Fl_When)(v|FL_WHEN_RELEASE));}
-inline double fl_get_counter_value(Fl_Widget* o) {
-    return ((Fl_Counter*)o)->value();}
-inline void fl_get_counter_bounds(Fl_Widget* o, float* a, float* b) {
-  *a = float(((Fl_Counter*)o)->minimum());
-  *b = float(((Fl_Counter*)o)->maximum());
-}
-//inline void fl_set_counter_filter(Fl_Widget*,const char* (*)(Fl_Widget*,double,int));
-
-// Cursor stuff cannot be emulated because it uses X stuff
-inline void fl_set_cursor(Fl_Window* w, Fl_Cursor c) {w->cursor(c);}
-#define FL_INVISIBLE_CURSOR FL_CURSOR_NONE
-#define FL_DEFAULT_CURSOR FL_CURSOR_DEFAULT
-
-#include "Fl_Dial.H"
-
-#define FL_DIAL_COL1 FL_GRAY
-#define FL_DIAL_COL2 37
-
-forms_constructor(Fl_Dial, fl_add_dial)
-inline void fl_set_dial_value(Fl_Widget* o, double v) {
-  ((Fl_Dial*)o)->value(v);}
-inline double fl_get_dial_value(Fl_Widget* o) {
-  return ((Fl_Dial*)o)->value();}
-inline void fl_set_dial_bounds(Fl_Widget* o, double a, double b) {
-  ((Fl_Dial*)o)->bounds(a, b);}
-inline void fl_get_dial_bounds(Fl_Widget* o, float* a, float* b) {
-  *a = float(((Fl_Dial*)o)->minimum());
-  *b = float(((Fl_Dial*)o)->maximum());
-}
-inline void fl_set_dial_return(Fl_Widget* o, int i) {
-  ((Fl_Dial*)o)->when((Fl_When)(i|FL_WHEN_RELEASE));}
-inline void fl_set_dial_angles(Fl_Widget* o, int a, int b) {
-  ((Fl_Dial*)o)->angles((short)a, (short)b);}
-//inline void fl_set_dial_cross(Fl_Widget* o, int);
-// inline void fl_set_dial_direction(Fl_Widget* o, uchar d) {
-//   ((Fl_Dial*)o)->direction(d);}
-inline void fl_set_dial_step(Fl_Widget* o, double v) {
-  ((Fl_Dial*)o)->step(v);}
-
-// Frames:
-
-inline Fl_Widget* fl_add_frame(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
-  return fl_add_box(i,x-3,y-3,w+6,h+6,l);}
-
-// labelframe nyi
-inline Fl_Widget* fl_add_labelframe(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
-  Fl_Widget* o = fl_add_box(i,x-3,y-3,w+6,h+6,l);
-  o->align(FL_ALIGN_TOP_LEFT);
-  return o;
-}
-
-#include "Fl_Free.H"
-inline Fl_Free*
-fl_add_free(int t,double x,double y,double w,double h,const char* l,
-	    FL_HANDLEPTR hdl) {
- return (Fl_Free*)(fl_add_new(
-   new Fl_Free(t,int(x),int(y),int(w),int(h),l,hdl)));
-}
-
-#include "fl_ask.H"
-#include "fl_show_colormap.H"
-
-inline int fl_show_question(const char* c, int = 0) {return fl_choice("%s",fl_no,fl_yes,0L,c);}
-FL_EXPORT void fl_show_message(const char *,const char *,const char *);
-FL_EXPORT void fl_show_alert(const char *,const char *,const char *,int=0);
-FL_EXPORT int fl_show_question(const char *,const char *,const char *);
-inline const char *fl_show_input(const char *l,const char*d=0) {return fl_input("%s",d,l);}
-FL_EXPORT /*const*/ char *fl_show_simple_input(const char *label, const char *deflt = 0);
-FL_EXPORT int fl_show_choice(
-    const char *m1,
-    const char *m2,
-    const char *m3,
-    int numb,
-    const char *b0,
-    const char *b1,
-    const char *b2);
-
-inline void fl_set_goodies_font(Fl_Font a, Fl_Fontsize b) {fl_message_font(a,b);}
-#define fl_show_messages fl_message
-inline int fl_show_choices(const char* c,int n,const char* b1,const char* b2,
-			   const char* b3, int) {
-  return fl_show_choice(0,c,0,n,b1,b2,b3);
-}
-
-#include "filename.H"
-#include "Fl_File_Chooser.H"
-inline int do_matching(char* a, const char* b) {return fl_filename_match(a,b);}
-
-// Forms-compatible file chooser (implementation in fselect.C):
-FL_EXPORT char* fl_show_file_selector(const char* message,const char* dir,
-			    const char* pat,const char* fname);
-FL_EXPORT char*	fl_get_directory();
-FL_EXPORT char*	fl_get_pattern();
-FL_EXPORT char*	fl_get_filename();
-
-#include "Fl_Input.H"
-forms_constructor(Fl_Input, fl_add_input)
-inline void fl_set_input(Fl_Widget* o, const char* v) {
-    ((Fl_Input*)o)->value(v);}
-inline void fl_set_input_return(Fl_Widget* o, int x) {
-    ((Fl_Input*)o)->when((Fl_When)(x | FL_WHEN_RELEASE));}
-inline void fl_set_input_color(Fl_Widget* o, Fl_Color a, Fl_Color b) {
-    ((Fl_Input*)o)->textcolor(a);
-    ((Fl_Input*)o)->cursor_color(b);
-}
-// inline void fl_set_input_scroll(Fl_Widget*, int);
-inline void fl_set_input_cursorpos(Fl_Widget* o, int x, int /*y*/) {
-  ((Fl_Input*)o)->position(x);}
-// inline void fl_set_input_selected(Fl_Widget*, int);
-// inline void fl_set_input_selected_range(Fl_Widget*, int, int);
-// inline void fl_set_input_maxchars(Fl_Widget*, int);
-// inline void fl_set_input_format(Fl_Widget*, int, int);
-// inline void fl_set_input_hscrollbar(Fl_Widget*, int);
-// inline void fl_set_input_vscrollbar(Fl_Widget*, int);
-// inline void fl_set_input_xoffset(Fl_Widget*, int);
-// inline void fl_set_input_topline(Fl_Widget*, int);
-// inline void fl_set_input_scrollbarsize(Fl_Widget*, int, int);
-// inline int fl_get_input_topline(Fl_Widget*);
-// inline int fl_get_input_screenlines(Fl_Widget*);
-inline int fl_get_input_cursorpos(Fl_Widget* o, int*x, int*y) {
-  *x = ((Fl_Input*)o)->position(); *y = 0; return *x;}
-// inline int fl_get_input_numberoflines(Fl_Widget*);
-// inline void fl_get_input_format(Fl_Widget*, int*, int*);
-inline const char* fl_get_input(Fl_Widget* o) {return ((Fl_Input*)o)->value();}
-
-#include "Fl_Menu_Button.H"
-
-// types are not implemented, they all act like FL_PUSH_MENU:
-#define FL_TOUCH_MENU		0
-#define FL_PUSH_MENU		1
-#define FL_PULLDOWN_MENU	2
-forms_constructor(Fl_Menu_Button, fl_add_menu)
-
-inline void fl_clear_menu(Fl_Widget* o) {
-    ((Fl_Menu_Button*)o)->clear();}
-inline void fl_set_menu(Fl_Widget* o, const char* s) {
-    ((Fl_Menu_Button*)o)->clear(); ((Fl_Menu_Button*)o)->add(s);}
-inline void fl_addto_menu(Fl_Widget* o, const char* s) {
-    ((Fl_Menu_Button*)o)->add(s);}
-inline void fl_replace_menu_item(Fl_Widget* o, int i, const char* s) {
-    ((Fl_Menu_Button*)o)->replace(i-1,s);}
-inline void fl_delete_menu_item(Fl_Widget* o, int i) {
-    ((Fl_Menu_Button*)o)->remove(i-1);}
-inline void fl_set_menu_item_shortcut(Fl_Widget* o, int i, const char* s) {
-    ((Fl_Menu_Button*)o)->shortcut(i-1,fl_old_shortcut(s));}
-inline void fl_set_menu_item_mode(Fl_Widget* o, int i, long x) {
-    ((Fl_Menu_Button*)o)->mode(i-1,x);}
-inline void fl_show_menu_symbol(Fl_Widget*, int ) {
-/*    ((Fl_Menu_Button*)o)->show_menu_symbol(i); */}
-// inline void fl_set_menu_popup(Fl_Widget*, int);
-inline int fl_get_menu(Fl_Widget* o) {
-    return ((Fl_Menu_Button*)o)->value()+1;}
-inline const char* fl_get_menu_item_text(Fl_Widget* o, int i) {
-    return ((Fl_Menu_Button*)o)->text(i);}
-inline int fl_get_menu_maxitems(Fl_Widget* o) {
-    return ((Fl_Menu_Button*)o)->size();}
-inline int fl_get_menu_item_mode(Fl_Widget* o, int i) {
-    return ((Fl_Menu_Button*)o)->mode(i);}
-inline const char* fl_get_menu_text(Fl_Widget* o) {
-    return ((Fl_Menu_Button*)o)->text();}
-
-#include "Fl_Positioner.H"
-#define FL_NORMAL_POSITIONER	0
-forms_constructor(Fl_Positioner, fl_add_positioner)
-inline void fl_set_positioner_xvalue(Fl_Widget* o, double v) {
-    ((Fl_Positioner*)o)->xvalue(v);}
-inline double fl_get_positioner_xvalue(Fl_Widget* o) {
-    return ((Fl_Positioner*)o)->xvalue();}
-inline void fl_set_positioner_xbounds(Fl_Widget* o, double a, double b) {
-    ((Fl_Positioner*)o)->xbounds(a,b);}
-inline void fl_get_positioner_xbounds(Fl_Widget* o, float* a, float* b) {
-  *a = float(((Fl_Positioner*)o)->xminimum());
-  *b = float(((Fl_Positioner*)o)->xmaximum());
-}
-inline void fl_set_positioner_yvalue(Fl_Widget* o, double v) {
-    ((Fl_Positioner*)o)->yvalue(v);}
-inline double fl_get_positioner_yvalue(Fl_Widget* o) {
-    return ((Fl_Positioner*)o)->yvalue();}
-inline void fl_set_positioner_ybounds(Fl_Widget* o, double a, double b) {
-    ((Fl_Positioner*)o)->ybounds(a,b);}
-inline void fl_get_positioner_ybounds(Fl_Widget* o, float* a, float* b) {
-  *a = float(((Fl_Positioner*)o)->yminimum());
-  *b = float(((Fl_Positioner*)o)->ymaximum());
-}
-inline void fl_set_positioner_xstep(Fl_Widget* o, double v) {
-    ((Fl_Positioner*)o)->xstep(v);}
-inline void fl_set_positioner_ystep(Fl_Widget* o, double v) {
-    ((Fl_Positioner*)o)->ystep(v);}
-inline void fl_set_positioner_return(Fl_Widget* o, int v) {
-    ((Fl_Positioner*)o)->when((Fl_When)(v|FL_WHEN_RELEASE));}
-
-#include "Fl_Slider.H"
-
-#define FL_HOR_BROWSER_SLIDER FL_HOR_SLIDER
-#define FL_VERT_BROWSER_SLIDER FL_VERT_SLIDER
-
-forms_constructort(Fl_Slider, fl_add_slider)
-#define FL_SLIDER_COL1 FL_GRAY
-inline void fl_set_slider_value(Fl_Widget* o, double v) {
-    ((Fl_Slider*)o)->value(v);}
-inline double fl_get_slider_value(Fl_Widget* o) {
-    return ((Fl_Slider*)o)->value();}
-inline void fl_set_slider_bounds(Fl_Widget* o, double a, double b) {
-    ((Fl_Slider*)o)->bounds(a, b);}
-inline void fl_get_slider_bounds(Fl_Widget* o, float* a, float* b) {
-  *a = float(((Fl_Slider*)o)->minimum());
-  *b = float(((Fl_Slider*)o)->maximum());
-}
-inline void fl_set_slider_return(Fl_Widget* o, int i) {
-    ((Fl_Slider*)o)->when((Fl_When)(i|FL_WHEN_RELEASE));}
-inline void fl_set_slider_step(Fl_Widget* o, double v) {
-    ((Fl_Slider*)o)->step(v);}
-// inline void fl_set_slider_increment(Fl_Widget* o, double v, double);
-inline void fl_set_slider_size(Fl_Widget* o, double v) {
-    ((Fl_Slider*)o)->slider_size(v);}
-
-#include "Fl_Value_Slider.H"
-forms_constructor(Fl_Value_Slider, fl_add_valslider)
-
-inline void fl_set_slider_precision(Fl_Widget* o, int i) {
-    ((Fl_Value_Slider*)o)->precision(i);}
-// filter function!
-
-// The forms text object was the same as an Fl_Box except it inverted the
-// meaning of FL_ALIGN_INSIDE.  Implementation in forms.cxx
-class FL_EXPORT Fl_FormsText : public Fl_Widget {
-protected:
-    void draw();
-public:
-    Fl_FormsText(Fl_Boxtype b, int X, int Y, int W, int H, const char* l=0)
-	: Fl_Widget(X,Y,W,H,l) {box(b); align(FL_ALIGN_LEFT);}
-};
-#define FL_NORMAL_TEXT FL_NO_BOX
-forms_constructorb(Fl_FormsText, fl_add_text)
-
-#include "Fl_Timer.H"
-forms_constructort(Fl_Timer, fl_add_timer)
-inline void fl_set_timer(Fl_Widget* o, double v) {((Fl_Timer*)o)->value(v);}
-inline double fl_get_timer(Fl_Widget* o) {return ((Fl_Timer*)o)->value();}
-inline void fl_suspend_timer(Fl_Widget* o) {((Fl_Timer*)o)->suspended(1);}
-inline void fl_resume_timer(Fl_Widget* o) {((Fl_Timer*)o)->suspended(0);}
-inline void fl_set_timer_countup(Fl_Widget* o,char d) {((Fl_Timer*)o)->direction(d);}
-void fl_gettime(long* sec, long* usec);
-
-// Fl_XYPlot nyi
-
-
-// stuff from DDForms:
-
-inline int fl_double_click() {return Fl::event_clicks();}
-inline void fl_draw() {Fl::flush();}
-
-#endif	/* define __FORMS_H__ */
-
-//
-// End of "$Id: forms.H 8623 2011-04-24 17:09:41Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/gl.h b/common/fltk/FL/gl.h
deleted file mode 100644
index ecf37a4..0000000
--- a/common/fltk/FL/gl.h
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
-//
-// OpenGL header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// You must include this instead of GL/gl.h to get the Microsoft
-// APIENTRY stuff included (from <windows.h>) prior to the OpenGL
-// header files.
-//
-// This file also provides "missing" OpenGL functions, and
-// gl_start() and gl_finish() to allow OpenGL to be used in any window
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file gl.h
- *  This file defines wrapper functions for OpenGL in FLTK
- *
- *  To use OpenGL from within an FLTK application you MUST use gl_visual()
- *  to select the default visual before doing show() on any windows. Mesa
- *  will crash if yoy try to use a visual not returned by glxChooseVidual.
- *
- *  This does not work with Fl_Double_Window's!  It will try to draw
- *  into the front buffer.  Depending on the system this will either
- *  crash or do nothing (when pixmaps are being used as back buffer
- *  and GL is being done by hardware), work correctly (when GL is done
- *  with software, such as Mesa), or draw into the front buffer and
- *  be erased when the buffers are swapped (when double buffer hardware
- *  is being used)
- */
-
-#ifndef FL_gl_H
-#  define FL_gl_H
-
-#  include "Enumerations.H" // for color names
-#  ifdef WIN32
-#    include <windows.h>
-#  endif
-#  ifndef APIENTRY
-#    if defined(__CYGWIN__)
-#      define APIENTRY __attribute__ ((__stdcall__))
-#    else
-#      define APIENTRY
-#    endif
-#  endif
-
-#  ifdef __APPLE__
-#    include <OpenGL/gl.h>
-#  else
-#    include <GL/gl.h>
-#  endif
-
-FL_EXPORT void gl_start();
-FL_EXPORT void gl_finish();
-
-FL_EXPORT void gl_color(Fl_Color i);
-/** back compatibility */
-inline void gl_color(int c) {gl_color((Fl_Color)c);}
-
-FL_EXPORT void gl_rect(int x,int y,int w,int h);
-/**
-  Fills the given rectangle with the current color.
-  \see gl_rect(int x, int y, int w, int h)
-  */
-inline void gl_rectf(int x,int y,int w,int h) {glRecti(x,y,x+w,y+h);}
-
-FL_EXPORT void gl_font(int fontid, int size);
-FL_EXPORT int  gl_height();
-FL_EXPORT int  gl_descent();
-FL_EXPORT double gl_width(const char *);
-FL_EXPORT double gl_width(const char *, int n);
-FL_EXPORT double gl_width(uchar);
-
-FL_EXPORT void gl_draw(const char*);
-FL_EXPORT void gl_draw(const char*, int n);
-FL_EXPORT void gl_draw(const char*, int x, int y);
-FL_EXPORT void gl_draw(const char*, float x, float y);
-FL_EXPORT void gl_draw(const char*, int n, int x, int y);
-FL_EXPORT void gl_draw(const char*, int n, float x, float y);
-FL_EXPORT void gl_draw(const char*, int x, int y, int w, int h, Fl_Align);
-FL_EXPORT void gl_measure(const char*, int& x, int& y);
-#ifdef __APPLE__
-extern FL_EXPORT void gl_texture_pile_height(int max);
-extern FL_EXPORT int gl_texture_pile_height();
-#endif
-
-FL_EXPORT void gl_draw_image(const uchar *, int x,int y,int w,int h, int d=3, int ld=0);
-
-#endif // !FL_gl_H
-
-//
-// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/gl2opengl.h b/common/fltk/FL/gl2opengl.h
deleted file mode 100644
index b89614e..0000000
--- a/common/fltk/FL/gl2opengl.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*	gl.h
-
-	GL to OpenGL translator.
-	If you include this, you might be able to port old GL programs.
-	There are also much better emulators available on the net.
-
-*/
-
-#include <FL/gl.h>
-#include "gl_draw.H"
-
-inline void clear() {glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);}
-#define RGBcolor(r,g,b) glColor3ub(r,g,b)
-#define bgnline() glBegin(GL_LINE_STRIP)
-#define bgnpolygon() glBegin(GL_POLYGON)
-#define bgnclosedline() glBegin(GL_LINE_LOOP)
-#define endline() glEnd()
-#define endpolygon() glEnd()
-#define endclosedline() glEnd()
-#define v2f(v) glVertex2fv(v)
-#define v2s(v) glVertex2sv(v)
-#define cmov(x,y,z) glRasterPos3f(x,y,z)
-#define charstr(s) gl_draw(s)
-#define fmprstr(s) gl_draw(s)
-typedef float Matrix[4][4];
-inline void pushmatrix() {glPushMatrix();}
-inline void popmatrix() {glPopMatrix();}
-inline void multmatrix(Matrix m) {glMultMatrixf((float *)m);}
-inline void color(int n) {glIndexi(n);}
-inline void rect(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
-inline void rectf(int x,int y,int r,int t) {glRectf(x,y,r+1,t+1);}
-inline void recti(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
-inline void rectfi(int x,int y,int r,int t) {glRecti(x,y,r+1,t+1);}
-inline void rects(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
-inline void rectfs(int x,int y,int r,int t) {glRects(x,y,r+1,t+1);}
diff --git a/common/fltk/FL/gl_draw.H b/common/fltk/FL/gl_draw.H
deleted file mode 100644
index ad0f819..0000000
--- a/common/fltk/FL/gl_draw.H
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// "$Id: gl_draw.H 7903 2010-11-28 21:06:39Z matt $"
-//
-// OpenGL header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "gl.h"
-
-extern FL_EXPORT void gl_remove_displaylist_fonts();
-
-
-//
-// End of "$Id: gl_draw.H 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/glu.h b/common/fltk/FL/glu.h
deleted file mode 100644
index 9156198..0000000
--- a/common/fltk/FL/glu.h
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// "$Id: glu.h 7903 2010-11-28 21:06:39Z matt $"
-//
-// GLu header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// You must include this instead of GL/gl.h to get the Microsoft
-// APIENTRY stuff included (from <windows.h>) prior to the OpenGL
-// header files.
-//
-// This file also provides "missing" OpenGL functions, and
-// gl_start() and gl_finish() to allow OpenGL to be used in any window
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef FL_glu_H
-#  define FL_glu_H
-
-#  include "Enumerations.H" // for color names
-#  ifdef WIN32
-#    include <windows.h>
-#  endif
-#  ifndef APIENTRY
-#    if defined(__CYGWIN__)
-#      define APIENTRY __attribute__ ((__stdcall__))
-#    else
-#      define APIENTRY
-#    endif
-#  endif
-
-#  ifdef __APPLE__
-#    include <OpenGL/glu.h>
-#  else
-#    include <GL/glu.h>
-#  endif
-
-#endif // !FL_glu_H
-
-//
-// End of "$Id: glu.h 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/glut.H b/common/fltk/FL/glut.H
deleted file mode 100644
index 9867487..0000000
--- a/common/fltk/FL/glut.H
+++ /dev/null
@@ -1,491 +0,0 @@
-//
-// "$Id: glut.H 8623 2011-04-24 17:09:41Z AlbrechtS $"
-//
-// GLUT emulation header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Emulation of GLUT using fltk.
-
-// GLUT is Copyright (c) Mark J. Kilgard, 1994, 1995, 1996:
-// "This program is freely distributable without licensing fees  and is
-// provided without guarantee or warrantee expressed or  implied. This
-// program is -not- in the public domain."
-
-// Although I have copied the GLUT API, none of my code is based on
-// any GLUT implementation details and is therefore covered by the LGPL.
-
-// Commented out lines indicate parts of GLUT that are not emulated.
-
-#ifndef Fl_glut_H
-#  define Fl_glut_H
-
-#  include "gl.h"
-
-
-#  include "Fl.H"
-#  include "Fl_Gl_Window.H"
-
-/** 
-  GLUT is emulated using this window class and these static variables
-  (plus several more static variables hidden in glut_compatability.cxx):
-*/
-class FL_EXPORT Fl_Glut_Window : public Fl_Gl_Window {
-  void _init();
-  int mouse_down;
-protected:
-  void draw();
-  void draw_overlay();
-  int handle(int);
-public: // so the inline functions work
-  int number;
-  int menu[3];
-  void make_current();
-  void (*display)();
-  void (*overlaydisplay)();
-  void (*reshape)(int w, int h);
-  void (*keyboard)(uchar, int x, int y);
-  void (*mouse)(int b, int state, int x, int y);
-  void (*motion)(int x, int y);
-  void (*passivemotion)(int x, int y);
-  void (*entry)(int);
-  void (*visibility)(int);
-  void (*special)(int, int x, int y);
-  Fl_Glut_Window(int w, int h, const char *);
-  Fl_Glut_Window(int x, int y, int w, int h, const char *);
-  ~Fl_Glut_Window();
-};
-
-extern FL_EXPORT Fl_Glut_Window *glut_window;	// the current window
-extern FL_EXPORT int glut_menu;			// the current menu
-
-// function pointers that are not per-window:
-extern FL_EXPORT void (*glut_idle_function)();
-extern FL_EXPORT void (*glut_menustate_function)(int);
-extern FL_EXPORT void (*glut_menustatus_function)(int,int,int);
-
-////////////////////////////////////////////////////////////////
-
-//#  define GLUT_API_VERSION This does not match any version of GLUT exactly...
-
-FL_EXPORT void glutInit(int *argcp, char **argv); // creates first window
-
-FL_EXPORT void glutInitDisplayMode(unsigned int mode);
-// the FL_ symbols have the same value as the GLUT ones:
-#  define GLUT_RGB	FL_RGB
-#  define GLUT_RGBA	FL_RGB
-#  define GLUT_INDEX	FL_INDEX
-#  define GLUT_SINGLE	FL_SINGLE
-#  define GLUT_DOUBLE	FL_DOUBLE
-#  define GLUT_ACCUM	FL_ACCUM
-#  define GLUT_ALPHA	FL_ALPHA
-#  define GLUT_DEPTH	FL_DEPTH
-#  define GLUT_STENCIL	FL_STENCIL
-#  define GLUT_MULTISAMPLE FL_MULTISAMPLE
-#  define GLUT_STEREO	FL_STEREO
-// #  define GLUT_LUMINANCE		512
-
-FL_EXPORT void glutInitWindowPosition(int x, int y);
-
-FL_EXPORT void glutInitWindowSize(int w, int h);
-
-FL_EXPORT void glutMainLoop();
-
-FL_EXPORT int glutCreateWindow(char *title);
-FL_EXPORT int glutCreateWindow(const char *title);
-
-FL_EXPORT int glutCreateSubWindow(int win, int x, int y, int width, int height);
-
-FL_EXPORT void glutDestroyWindow(int win);
-
-inline void glutPostRedisplay() {glut_window->redraw();}
-
-FL_EXPORT void glutPostWindowRedisplay(int win);
-
-FL_EXPORT void glutSwapBuffers();
-
-inline int glutGetWindow() {return glut_window->number;}
-
-FL_EXPORT void glutSetWindow(int win);
-
-inline void glutSetWindowTitle(char *t) {glut_window->label(t);}
-
-inline void glutSetIconTitle(char *t) {glut_window->iconlabel(t);}
-
-inline void glutPositionWindow(int x, int y) {glut_window->position(x,y);}
-
-inline void glutReshapeWindow(int w, int h) {glut_window->size(w,h);}
-
-inline void glutPopWindow() {glut_window->show();}
-
-inline void glutPushWindow() { /* do nothing */ }
-
-inline void glutIconifyWindow() {glut_window->iconize();}
-
-inline void glutShowWindow() {glut_window->show();}
-
-inline void glutHideWindow() {glut_window->hide();}
-
-inline void glutFullScreen() {glut_window->fullscreen();}
-
-inline void glutSetCursor(Fl_Cursor cursor) {glut_window->cursor(cursor);}
-// notice that the numeric values are different than glut:
-#  define GLUT_CURSOR_RIGHT_ARROW		((Fl_Cursor)2)
-#  define GLUT_CURSOR_LEFT_ARROW		((Fl_Cursor)67)
-#  define GLUT_CURSOR_INFO			FL_CURSOR_HAND
-#  define GLUT_CURSOR_DESTROY			((Fl_Cursor)45)
-#  define GLUT_CURSOR_HELP			FL_CURSOR_HELP
-#  define GLUT_CURSOR_CYCLE			((Fl_Cursor)26)
-#  define GLUT_CURSOR_SPRAY			((Fl_Cursor)63)
-#  define GLUT_CURSOR_WAIT			FL_CURSOR_WAIT
-#  define GLUT_CURSOR_TEXT			FL_CURSOR_INSERT
-#  define GLUT_CURSOR_CROSSHAIR			FL_CURSOR_CROSS
-#  define GLUT_CURSOR_UP_DOWN			FL_CURSOR_NS
-#  define GLUT_CURSOR_LEFT_RIGHT		FL_CURSOR_WE
-#  define GLUT_CURSOR_TOP_SIDE			FL_CURSOR_N
-#  define GLUT_CURSOR_BOTTOM_SIDE		FL_CURSOR_S
-#  define GLUT_CURSOR_LEFT_SIDE			FL_CURSOR_W
-#  define GLUT_CURSOR_RIGHT_SIDE		FL_CURSOR_E
-#  define GLUT_CURSOR_TOP_LEFT_CORNER		FL_CURSOR_NW
-#  define GLUT_CURSOR_TOP_RIGHT_CORNER		FL_CURSOR_NE
-#  define GLUT_CURSOR_BOTTOM_RIGHT_CORNER	FL_CURSOR_SE
-#  define GLUT_CURSOR_BOTTOM_LEFT_CORNER	FL_CURSOR_SW
-#  define GLUT_CURSOR_INHERIT			FL_CURSOR_DEFAULT
-#  define GLUT_CURSOR_NONE			FL_CURSOR_NONE
-#  define GLUT_CURSOR_FULL_CROSSHAIR		FL_CURSOR_CROSS
-
-inline void glutWarpPointer(int, int) { /* do nothing */ }
-
-inline void glutEstablishOverlay() {glut_window->make_overlay_current();}
-
-inline void glutRemoveOverlay() {glut_window->hide_overlay();}
-
-inline void glutUseLayer(GLenum layer) {
-  layer ? glut_window->make_overlay_current() : glut_window->make_current();}
-enum {GLUT_NORMAL, GLUT_OVERLAY};
-
-inline void glutPostOverlayRedisplay() {glut_window->redraw_overlay();}
-
-inline void glutShowOverlay() {glut_window->redraw_overlay();}
-
-inline void glutHideOverlay() {glut_window->hide_overlay();}
-
-FL_EXPORT int glutCreateMenu(void (*)(int));
-
-FL_EXPORT void glutDestroyMenu(int menu);
-
-inline int glutGetMenu() {return glut_menu;}
-
-inline void glutSetMenu(int m) {glut_menu = m;}
-
-FL_EXPORT void glutAddMenuEntry(char *label, int value);
-
-FL_EXPORT void glutAddSubMenu(char *label, int submenu);
-
-FL_EXPORT void glutChangeToMenuEntry(int item, char *labela, int value);
-
-FL_EXPORT void glutChangeToSubMenu(int item, char *label, int submenu);
-
-FL_EXPORT void glutRemoveMenuItem(int item);
-
-inline void glutAttachMenu(int b) {glut_window->menu[b] = glut_menu;}
-
-inline void glutDetachMenu(int b) {glut_window->menu[b] = 0;}
-
-inline void glutDisplayFunc(void (*f)()) {glut_window->display = f;}
-
-inline void glutReshapeFunc(void (*f)(int w, int h)) {glut_window->reshape=f;}
-
-inline void glutKeyboardFunc(void (*f)(uchar key, int x, int y)) {
-  glut_window->keyboard = f;}
-
-inline void glutMouseFunc(void (*f)(int b, int state, int x, int y)) {
-  glut_window->mouse = f;}
-#  define GLUT_LEFT_BUTTON		0
-#  define GLUT_MIDDLE_BUTTON		1
-#  define GLUT_RIGHT_BUTTON		2
-#  define GLUT_DOWN			0
-#  define GLUT_UP			1
-
-inline void glutMotionFunc(void (*f)(int x, int y)) {glut_window->motion= f;}
-
-inline void glutPassiveMotionFunc(void (*f)(int x, int y)) {
-  glut_window->passivemotion= f;}
-
-inline void glutEntryFunc(void (*f)(int s)) {glut_window->entry = f;}
-enum {GLUT_LEFT, GLUT_ENTERED};
-
-inline void glutVisibilityFunc(void (*f)(int s)) {glut_window->visibility=f;}
-enum {GLUT_NOT_VISIBLE, GLUT_VISIBLE};
-
-FL_EXPORT void glutIdleFunc(void (*f)());
-
-// Warning: this cast may not work on all machines:
-inline void glutTimerFunc(unsigned int msec, void (*f)(int), int value) {
-  Fl::add_timeout(msec*.001, (void (*)(void *))f, (void *)value);
-}
-
-inline void glutMenuStateFunc(void (*f)(int state)) {
-  glut_menustate_function = f;}
-
-inline void glutMenuStatusFunc(void (*f)(int status, int x, int y)) {
-  glut_menustatus_function = f;}
-enum {GLUT_MENU_NOT_IN_USE, GLUT_MENU_IN_USE};
-
-inline void glutSpecialFunc(void (*f)(int key, int x, int y)) {
-  glut_window->special = f;}
-#  define GLUT_KEY_F1			1
-#  define GLUT_KEY_F2			2
-#  define GLUT_KEY_F3			3
-#  define GLUT_KEY_F4			4
-#  define GLUT_KEY_F5			5
-#  define GLUT_KEY_F6			6
-#  define GLUT_KEY_F7			7
-#  define GLUT_KEY_F8			8
-#  define GLUT_KEY_F9			9
-#  define GLUT_KEY_F10			10
-#  define GLUT_KEY_F11			11
-#  define GLUT_KEY_F12			12
-// WARNING: Different values than GLUT uses:
-#  define GLUT_KEY_LEFT			FL_Left
-#  define GLUT_KEY_UP			FL_Up
-#  define GLUT_KEY_RIGHT		FL_Right
-#  define GLUT_KEY_DOWN			FL_Down
-#  define GLUT_KEY_PAGE_UP		FL_Page_Up
-#  define GLUT_KEY_PAGE_DOWN		FL_Page_Down
-#  define GLUT_KEY_HOME			FL_Home
-#  define GLUT_KEY_END			FL_End
-#  define GLUT_KEY_INSERT		FL_Insert
-
-//inline void glutSpaceballMotionFunc(void (*)(int x, int y, int z));
-
-//inline void glutSpaceballRotateFunc(void (*)(int x, int y, int z));
-
-//inline void glutSpaceballButtonFunc(void (*)(int button, int state));
-
-//inline void glutButtonBoxFunc(void (*)(int button, int state));
-
-//inline void glutDialsFunc(void (*)(int dial, int value));
-
-//inline void glutTabletMotionFunc(void (*)(int x, int y));
-
-//inline void glutTabletButtonFunc(void (*)(int button, int state, int x, int y));
-
-inline void glutOverlayDisplayFunc(void (*f)()) {
-  glut_window->overlaydisplay = f;}
-
-//inline void glutWindowStatusFunc(void (*)(int state));
-//enum {GLUT_HIDDEN, GLUT_FULLY_RETAINED, GLUT_PARTIALLY_RETAINED,
-//	GLUT_FULLY_COVERED};
-
-//inline void glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
-
-//inline GLfloat glutGetColor(int ndx, int component);
-//#define GLUT_RED			0
-//#define GLUT_GREEN			1
-//#define GLUT_BLUE			2
-
-//inline void glutCopyColormap(int win);
-
-// Warning: values are changed from GLUT!
-// Also relies on the GL_ symbols having values greater than 100
-FL_EXPORT int glutGet(GLenum type);
-enum {
-  GLUT_RETURN_ZERO = 0,
-  GLUT_WINDOW_X,
-  GLUT_WINDOW_Y,
-  GLUT_WINDOW_WIDTH,
-  GLUT_WINDOW_HEIGHT,
-  GLUT_WINDOW_PARENT,
-  GLUT_SCREEN_WIDTH,
-  GLUT_SCREEN_HEIGHT,
-  GLUT_MENU_NUM_ITEMS,
-  GLUT_DISPLAY_MODE_POSSIBLE,
-  GLUT_INIT_WINDOW_X,
-  GLUT_INIT_WINDOW_Y,
-  GLUT_INIT_WINDOW_WIDTH,
-  GLUT_INIT_WINDOW_HEIGHT,
-  GLUT_INIT_DISPLAY_MODE,
-  GLUT_WINDOW_BUFFER_SIZE,
-  GLUT_VERSION
-//GLUT_WINDOW_NUM_CHILDREN,
-//GLUT_WINDOW_CURSOR,
-//GLUT_SCREEN_WIDTH_MM,
-//GLUT_SCREEN_HEIGHT_MM,
-//GLUT_ELAPSED_TIME,
-};
-
-#  define GLUT_WINDOW_STENCIL_SIZE	GL_STENCIL_BITS
-#  define GLUT_WINDOW_DEPTH_SIZE	GL_DEPTH_BITS
-#  define GLUT_WINDOW_RED_SIZE		GL_RED_BITS
-#  define GLUT_WINDOW_GREEN_SIZE	GL_GREEN_BITS
-#  define GLUT_WINDOW_BLUE_SIZE		GL_BLUE_BITS
-#  define GLUT_WINDOW_ALPHA_SIZE	GL_ALPHA_BITS
-#  define GLUT_WINDOW_ACCUM_RED_SIZE	GL_ACCUM_RED_BITS
-#  define GLUT_WINDOW_ACCUM_GREEN_SIZE	GL_ACCUM_GREEN_BITS
-#  define GLUT_WINDOW_ACCUM_BLUE_SIZE	GL_ACCUM_BLUE_BITS
-#  define GLUT_WINDOW_ACCUM_ALPHA_SIZE	GL_ACCUM_ALPHA_BITS
-#  define GLUT_WINDOW_DOUBLEBUFFER	GL_DOUBLEBUFFER
-#  define GLUT_WINDOW_RGBA		GL_RGBA
-#  define GLUT_WINDOW_COLORMAP_SIZE	GL_INDEX_BITS
-#  ifdef GL_SAMPLES_SGIS
-#    define GLUT_WINDOW_NUM_SAMPLES	GL_SAMPLES_SGIS
-#  else
-#    define GLUT_WINDOW_NUM_SAMPLES	GLUT_RETURN_ZERO
-#  endif
-#  define GLUT_WINDOW_STEREO		GL_STEREO
-
-#  define GLUT_HAS_KEYBOARD		600
-#  define GLUT_HAS_MOUSE		601
-#  define GLUT_HAS_SPACEBALL		602
-#  define GLUT_HAS_DIAL_AND_BUTTON_BOX	603
-#  define GLUT_HAS_TABLET		604
-#  define GLUT_NUM_MOUSE_BUTTONS	605
-#  define GLUT_NUM_SPACEBALL_BUTTONS	606
-#  define GLUT_NUM_BUTTON_BOX_BUTTONS	607
-#  define GLUT_NUM_DIALS		608
-#  define GLUT_NUM_TABLET_BUTTONS	609
-FL_EXPORT int glutDeviceGet(GLenum type);
-
-// WARNING: these values are different than GLUT uses:
-#  define GLUT_ACTIVE_SHIFT               FL_SHIFT
-#  define GLUT_ACTIVE_CTRL                FL_CTRL
-#  define GLUT_ACTIVE_ALT                 FL_ALT
-inline int glutGetModifiers() {return Fl::event_state() & (GLUT_ACTIVE_SHIFT | GLUT_ACTIVE_CTRL | GLUT_ACTIVE_ALT);}
-
-FL_EXPORT int glutLayerGet(GLenum);
-#  define GLUT_OVERLAY_POSSIBLE		800
-//#define GLUT_LAYER_IN_USE		801
-//#define GLUT_HAS_OVERLAY		802
-#  define GLUT_TRANSPARENT_INDEX		803
-#  define GLUT_NORMAL_DAMAGED		804
-#  define GLUT_OVERLAY_DAMAGED		805
-
-extern "C" {
-typedef void (*GLUTproc)();
-}
-
-FL_EXPORT GLUTproc glutGetProcAddress(const char *procName);
-
-//inline int glutVideoResizeGet(GLenum param);
-//#define GLUT_VIDEO_RESIZE_POSSIBLE	900
-//#define GLUT_VIDEO_RESIZE_IN_USE	901
-//#define GLUT_VIDEO_RESIZE_X_DELTA	902
-//#define GLUT_VIDEO_RESIZE_Y_DELTA	903
-//#define GLUT_VIDEO_RESIZE_WIDTH_DELTA	904
-//#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 905
-//#define GLUT_VIDEO_RESIZE_X		906
-//#define GLUT_VIDEO_RESIZE_Y		907
-//#define GLUT_VIDEO_RESIZE_WIDTH	908
-//#define GLUT_VIDEO_RESIZE_HEIGHT	909
-
-//inline void glutSetupVideoResizing();
-
-//inline void glutStopVideoResizing();
-
-//inline void glutVideoResize(int x, int y, int width, int height);
-
-//inline void glutVideoPan(int x, int y, int width, int height);
-
-// Font argument must be a void* for compatibility, so...
-/** fltk glut font/size attributes used in the glutXXX functions */
-struct Fl_Glut_Bitmap_Font {Fl_Font font; Fl_Fontsize size;};
-
-extern FL_EXPORT struct Fl_Glut_Bitmap_Font
-  glutBitmap9By15, glutBitmap8By13, glutBitmapTimesRoman10,
-  glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12,
-  glutBitmapHelvetica18;
-#  define GLUT_BITMAP_9_BY_15             (&glutBitmap9By15)
-#  define GLUT_BITMAP_8_BY_13             (&glutBitmap8By13)
-#  define GLUT_BITMAP_TIMES_ROMAN_10      (&glutBitmapTimesRoman10)
-#  define GLUT_BITMAP_TIMES_ROMAN_24      (&glutBitmapTimesRoman24)
-#  define GLUT_BITMAP_HELVETICA_10        (&glutBitmapHelvetica10)
-#  define GLUT_BITMAP_HELVETICA_12        (&glutBitmapHelvetica12)
-#  define GLUT_BITMAP_HELVETICA_18        (&glutBitmapHelvetica18)
-
-FL_EXPORT void glutBitmapCharacter(void *font, int character);
-FL_EXPORT int glutBitmapHeight(void *font);
-FL_EXPORT int glutBitmapLength(void *font, const unsigned char *string);
-FL_EXPORT void glutBitmapString(void *font, const unsigned char *string);
-FL_EXPORT int glutBitmapWidth(void *font, int character);
-
-FL_EXPORT int glutExtensionSupported(char *name);
-
-/* GLUT stroked font sub-API */
-struct Fl_Glut_StrokeVertex {
-  GLfloat X, Y;
-};
-
-struct Fl_Glut_StrokeStrip {
-  int Number;
-  const Fl_Glut_StrokeVertex* Vertices;
-};
-
-struct Fl_Glut_StrokeChar {
-  GLfloat Right;
-  int Number;
-  const Fl_Glut_StrokeStrip* Strips;
-};
-
-struct Fl_Glut_StrokeFont {
-  char* Name;				// The source font name
-  int Quantity;				// Number of chars in font
-  GLfloat Height;			// Height of the characters
-  const Fl_Glut_StrokeChar** Characters;// The characters mapping
-};
-extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeRoman;
-extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeMonoRoman;
-#  define GLUT_STROKE_ROMAN		(&glutStrokeRoman)
-#  define GLUT_STROKE_MONO_ROMAN	(&glutStrokeMonoRoman)
-
-FL_EXPORT void glutStrokeCharacter(void *font, int character);
-FL_EXPORT GLfloat glutStrokeHeight(void *font);
-FL_EXPORT int glutStrokeLength(void *font, const unsigned char *string);
-FL_EXPORT void glutStrokeString(void *font, const unsigned char *string);
-FL_EXPORT int glutStrokeWidth(void *font, int character);
-
-/* GLUT pre-built models sub-API */
-FL_EXPORT void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
-FL_EXPORT void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
-FL_EXPORT void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
-FL_EXPORT void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
-FL_EXPORT void glutWireCube(GLdouble size);
-FL_EXPORT void glutSolidCube(GLdouble size);
-FL_EXPORT void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
-FL_EXPORT void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
-FL_EXPORT void glutWireDodecahedron();
-FL_EXPORT void glutSolidDodecahedron();
-FL_EXPORT void glutWireTeapot(GLdouble size);
-FL_EXPORT void glutSolidTeapot(GLdouble size);
-FL_EXPORT void glutWireOctahedron();
-FL_EXPORT void glutSolidOctahedron();
-FL_EXPORT void glutWireTetrahedron();
-FL_EXPORT void glutSolidTetrahedron();
-FL_EXPORT void glutWireIcosahedron();
-FL_EXPORT void glutSolidIcosahedron();
-
-#endif // !Fl_glut_H
-
-//
-// End of "$Id: glut.H 8623 2011-04-24 17:09:41Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/mac.H b/common/fltk/FL/mac.H
deleted file mode 100644
index 97eefd8..0000000
--- a/common/fltk/FL/mac.H
+++ /dev/null
@@ -1,244 +0,0 @@
-//
-// "$Id: mac.H 8657 2011-05-12 11:50:43Z manolo $"
-//
-// Mac header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Do not directly include this file, instead use <FL/x.H>.  It will
-// include this file if "__APPLE__" is defined.  This is to encourage
-// portability of even the system-specific code...
-#ifndef FL_DOXYGEN
-
-#if !defined(Fl_X_H)
-#  error "Never use <FL/mac.H> directly; include <FL/x.H> instead."
-#endif // !Fl_X_H
-#include <FL/Fl_Widget.H>
-
-typedef void* Window;	    // this is really a pointer to the subclass FLWindow of NSWindow
-typedef void* Fl_Offscreen; // this is really a CGContextRef
-typedef void* Fl_Bitmask;   // this is really a CGImageRef
-
-#include <AvailabilityMacros.h>
-#ifndef MAC_OS_X_VERSION_10_3
-#define MAC_OS_X_VERSION_10_3 1030
-#endif
-#ifndef MAC_OS_X_VERSION_10_4
-#define MAC_OS_X_VERSION_10_4 1040
-#endif
-#ifndef MAC_OS_X_VERSION_10_5
-#define MAC_OS_X_VERSION_10_5 1050
-#endif
-#ifndef MAC_OS_X_VERSION_10_6
-#define MAC_OS_X_VERSION_10_6 1060
-#endif
-
-#if !(defined(FL_LIBRARY) || defined(FL_INTERNALS)) // this part is used when compiling an application program
-
-typedef void* Fl_Region;
-typedef void* Fl_CGContextRef;
-typedef void* Fl_PMPrintSettings;
-typedef void* Fl_PMPageFormat;
-typedef void* Fl_PMPrintSession;
-
-#else // this part must be compiled when building the FLTK libraries
-
-// Standard MacOS C/C++ includes...
-#include <ApplicationServices/ApplicationServices.h>
-#undef check // because of Fl::check()
-
-typedef CGContextRef	Fl_CGContextRef;
-typedef PMPrintSettings Fl_PMPrintSettings;
-typedef PMPageFormat	Fl_PMPageFormat;
-typedef PMPrintSession	Fl_PMPrintSession;
-
-typedef struct flCocoaRegion {
-  int count;
-  CGRect *rects;
-} *Fl_Region;  // a region is the union of a series of rectangles
-
-#  include "Fl_Window.H"
-
-// Some random X equivalents
-struct XPoint { int x, y; };
-struct XRectangle {int x, y, width, height;};
-#ifndef CGFLOAT_DEFINED //appears with 10.5 in CGBase.h
-#if defined(__LP64__) && __LP64__
-typedef double CGFloat;
-#else
-typedef float CGFloat;
-#endif
-#endif // CGFLOAT_DEFINED
-
-extern CGRect fl_cgrectmake_cocoa(int x, int y, int w, int h);
-inline Fl_Region XRectangleRegion(int x, int y, int w, int h) {
-  Fl_Region R = (Fl_Region)malloc(sizeof(*R));
-  R->count = 1;
-  R->rects = (CGRect *)malloc(sizeof(CGRect));
-  *(R->rects) = fl_cgrectmake_cocoa(x, y, w, h);
-  return R;
-}
-inline void XDestroyRegion(Fl_Region r) {
-  if(r) {
-    free(r->rects);
-    free(r);
-  }
-}
-extern void *fl_system_menu;
-extern void *fl_default_cursor;
-
-// This object contains all mac-specific stuff about a window:
-// WARNING: this object is highly subject to change!
-class Fl_X {
-  
-public:
-  Window xid;              // pointer to the Cocoa window object (FLWindow*)
-  Fl_Offscreen other_xid;  // pointer for offscreen bitmaps (overlay window)
-  Fl_Window *w;            // FLTK window for 
-  Fl_Region region;
-  Fl_Region subRegion;     // region for this specific subwindow
-  Fl_X *next;              // linked tree to support subwindows
-  Fl_X *xidChildren, *xidNext; // more subwindow tree
-  int wait_for_expose;
-  void *cursor;	           // is really NSCursor*
-  static Fl_X* first;
-  static Fl_X* i(const Fl_Window* w) {return w->i;}
-  static int fake_X_wm(const Fl_Window*,int&,int&,int&,int&,int&);
-  static void make(Fl_Window*);
-  void flush();
-  // Quartz additions:
-  CGContextRef gc;                 // graphics context (NULL when using QD)
-  static void q_fill_context();    // fill a Quartz context with current FLTK state
-  static void q_clear_clipping();  // remove all clipping from a Quartz context
-  static void q_release_context(Fl_X *x=0); // free all resources associated with fl_gc
-  static void q_begin_image(CGRect&, int x, int y, int w, int h);
-  static void q_end_image();
-  // Cocoa additions
-  void destroy(void);
-  void map(void);
-  void unmap(void);
-  int unlink(Fl_X* start = NULL);
-  void collapse(void);
-  WindowRef window_ref(void);
-  void set_key_window(void);
-  // OS X doesn't have per window icons
-  static void set_default_icons(const Fl_RGB_Image*[], int) {};
-  void set_icons() {};
-  int set_cursor(Fl_Cursor);
-  int set_cursor(const Fl_RGB_Image*, int, int);
-  static CGImageRef CGImage_from_window_rect(Fl_Window *win, int x, int y, int w, int h);
-  static unsigned char *bitmap_from_window_rect(Fl_Window *win, int x, int y, int w, int h, int *bytesPerPixel);
-  static Fl_Region intersect_region_and_rect(Fl_Region current, int x,int y,int w, int h);
-  static CGContextRef watch_cursor_image(void);
-  static CGContextRef help_cursor_image(void);
-  static CGContextRef nesw_cursor_image(void);
-  static CGContextRef nwse_cursor_image(void);
-  static CGContextRef none_cursor_image(void);
-  static void *get_carbon_function(const char *name);
-private:
-  static void relink(Fl_Window*, Fl_Window*);
-  bool subwindow;
-};
-
-extern struct Fl_XMap {
-  RGBColor rgb;
-  ulong pen;
-} *fl_current_xmap;
-extern FL_EXPORT Window fl_window;
-
-#endif // FL_LIBRARY || FL_INTERNALS
-
-extern FL_EXPORT Fl_CGContextRef fl_gc;
-extern FL_EXPORT class Fl_Sys_Menu_Bar *fl_sys_menu_bar;
-
-extern Window fl_xid(const Fl_Window*);
-void fl_clip_region(Fl_Region);
-
-extern FL_EXPORT Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data);
-extern FL_EXPORT Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *data);
-extern FL_EXPORT void fl_delete_bitmask(Fl_Bitmask bm);
-extern Fl_Offscreen fl_create_offscreen(int w, int h);
-extern void fl_copy_offscreen(int x,int y,int w,int h, Fl_Offscreen gWorld, int srcx,int srcy);
-extern void fl_delete_offscreen(Fl_Offscreen gWorld);
-extern void fl_begin_offscreen(Fl_Offscreen gWorld);
-extern void fl_end_offscreen();
-
-extern FL_EXPORT int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b);
-extern void fl_open_display();
-
-#endif // FL_DOXYGEN
-
-/** \defgroup group_macosx Mac OS X-specific symbols
- Mac OS X-specific symbols declared in <FL/x.H> or <FL/gl.h>
- @{ */
-
-/** @brief Register a function called for each file dropped onto an application icon.
- \e cb will be called with a single Unix-style file name and path.
- If multiple files were dropped, \e cb will be called multiple times.
- */
-extern void fl_open_callback(void (*cb)(const char *));
-
-/** 
- * \brief Attaches a callback to the "About myprog" item of the system application menu.
- *
- * \param cb   a callback that will be called by "About myprog" menu item
- *		   with NULL 1st argument.
- * \param user_data   a pointer transmitted as 2nd argument to the callback.
- * \param shortcut    optional shortcut to attach to the "About myprog" menu item (e.g., FL_META+'a')
- */
-extern void fl_mac_set_about( Fl_Callback *cb, void *user_data, int shortcut = 0);
-
-/** \brief The version number of the running Mac OS X (e.g., 100604 for 10.6.4)
- */
-extern int fl_mac_os_version;
-
-class Fl_Mac_App_Menu {
-public:
-  /** Localizable text for the "About xxx" application menu item */
-  static const char *about;
-  /** Copyright notice for the default about dialog. Will use the information
-   from the bundle if set to an empty string. */
-  static const char *copyright;
-  /** Localizable text for the "Print Front Window" application menu item.
-   This menu item won't be displayed if Fl_Mac_App_Menu::print 
-   is set to an empty string.
-   */
-  static const char *print;
-  /** Localizable text for the "Services" application menu item */
-  static const char *services;
-  /** Localizable text for the "Hide xxx" application menu item */
-  static const char *hide;
-  /** Localizable text for the "Hide Others" application menu item */
-  static const char *hide_others;
-  /** Localizable text for the "Show All" application menu item */
-  static const char *show;
-  /** Localizable text for the "Quit xxx" application menu item */
-  static const char *quit;
-};
-
-/** @} */
-
-//
-// End of "$Id: mac.H 8657 2011-05-12 11:50:43Z manolo $".
-//
-
diff --git a/common/fltk/FL/math.h b/common/fltk/FL/math.h
deleted file mode 100644
index e0f1d40..0000000
--- a/common/fltk/FL/math.h
+++ /dev/null
@@ -1,71 +0,0 @@
-//
-// "$Id: math.h 7903 2010-11-28 21:06:39Z matt $"
-//
-// Math header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Xcode on OS X includes files by recursing down into directories.
-// This code catches the cycle and directly includes the required file.
-#ifdef fl_math_h_cyclic_include 
-#  include "/usr/include/math.h"
-#endif
-
-#ifndef fl_math_h
-#  define fl_math_h
-
-#  define fl_math_h_cyclic_include 
-#  include <math.h>
-#  undef fl_math_h_cyclic_include 
-
-#  ifdef __EMX__
-#    include <float.h>
-#  endif
-
-
-#  ifndef M_PI
-#    define M_PI            3.14159265358979323846
-#    define M_PI_2          1.57079632679489661923
-#    define M_PI_4          0.78539816339744830962
-#    define M_1_PI          0.31830988618379067154
-#    define M_2_PI          0.63661977236758134308
-#  endif // !M_PI
-
-#  ifndef M_SQRT2
-#    define M_SQRT2         1.41421356237309504880
-#    define M_SQRT1_2       0.70710678118654752440
-#  endif // !M_SQRT2
-
-#  if (defined(WIN32) || defined(CRAY)) && !defined(__MINGW32__) && !defined(__MWERKS__)
-
-inline double rint(double v) {return floor(v+.5);}
-inline double copysign(double a, double b) {return b<0 ? -a : a;}
-
-#  endif // (WIN32 || CRAY) && !__MINGW32__ && !__MWERKS__
-
-#endif // !fl_math_h
-
-
-//
-// End of "$Id: math.h 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/names.h b/common/fltk/FL/names.h
deleted file mode 100644
index 614547a..0000000
--- a/common/fltk/FL/names.h
+++ /dev/null
@@ -1,124 +0,0 @@
-//
-// "$Id: names.h 7903 2010-11-28 21:06:39Z matt $"
-//
-// Event names header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Thanks to Greg Ercolano for this addition.
-
-#ifndef FL_NAMES_H
-#define FL_NAMES_H
-
-/** \defgroup fl_events Events handling functions
-    @{
- */
-
-/**
-  This is an array of event names you can use to convert event numbers into names.
-
-  The array gets defined inline wherever your '\#include <FL/names.h>' appears.
-
-  \b Example:
-  \code
-  #include <FL/names.h>		// array will be defined here
-  int MyClass::handle(int e) {
-      printf("Event was %s (%d)\n", fl_eventnames[e], e);
-      // ..resulting output might be e.g. "Event was FL_PUSH (1)"..
-      [..]
-  }
-  \endcode
- */
-const char * const fl_eventnames[] =
-{
-  "FL_NO_EVENT",
-  "FL_PUSH",
-  "FL_RELEASE",
-  "FL_ENTER",
-  "FL_LEAVE",
-  "FL_DRAG",
-  "FL_FOCUS",
-  "FL_UNFOCUS",
-  "FL_KEYDOWN",
-  "FL_KEYUP",
-  "FL_CLOSE",
-  "FL_MOVE",
-  "FL_SHORTCUT",
-  "FL_DEACTIVATE",
-  "FL_ACTIVATE",
-  "FL_HIDE",
-  "FL_SHOW",
-  "FL_PASTE",
-  "FL_SELECTIONCLEAR",
-  "FL_MOUSEWHEEL",
-  "FL_DND_ENTER",
-  "FL_DND_DRAG",
-  "FL_DND_LEAVE",
-  "FL_DND_RELEASE",
-  "FL_FULLSCREEN"
-};
-
-/**
-  This is an array of font names you can use to convert font numbers into names.
-
-  The array gets defined inline wherever your '\#include <FL/names.h>' appears.
-
-  \b Example:
-  \code
-  #include <FL/names.h>		// array will be defined here
-  int MyClass::my_callback(Fl_Widget *w, void*) {
-      int fnum = w->labelfont();
-      // Resulting output might be e.g. "Label's font is FL_HELVETICA (0)"
-      printf("Label's font is %s (%d)\n", fl_fontnames[fnum], fnum);
-      // ..resulting output might be e.g. "Label's font is FL_HELVETICA (0)"..
-      [..]
-  }
-  \endcode
- */
-const char * const fl_fontnames[] =
-{
-  "FL_HELVETICA",
-  "FL_HELVETICA_BOLD",
-  "FL_HELVETICA_ITALIC",
-  "FL_HELVETICA_BOLD_ITALIC",
-  "FL_COURIER",
-  "FL_COURIER_BOLD",
-  "FL_COURIER_ITALIC",
-  "FL_COURIER_BOLD_ITALIC",
-  "FL_TIMES",
-  "FL_TIMES_BOLD",
-  "FL_TIMES_ITALIC",
-  "FL_TIMES_BOLD_ITALIC",
-  "FL_SYMBOL",
-  "FL_SCREEN",
-  "FL_SCREEN_BOLD",
-  "FL_ZAPF_DINGBATS",
-};
-
-/** @} */
-
-#endif /* FL_NAMES_H */
-
-//
-// End of "$Id: names.h 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/FL/win32.H b/common/fltk/FL/win32.H
deleted file mode 100644
index 858fe5b..0000000
--- a/common/fltk/FL/win32.H
+++ /dev/null
@@ -1,171 +0,0 @@
-//
-// "$Id: win32.H 8726 2011-05-23 18:32:47Z AlbrechtS $"
-//
-// WIN32 header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Do not directly include this file, instead use <FL/x.H>.  It will
-// include this file if WIN32 is defined.  This is to encourage
-// portability of even the system-specific code...
-
-#ifndef FL_DOXYGEN
-#ifndef Fl_X_H
-#  error "Never use <FL/win32.H> directly; include <FL/x.H> instead."
-#endif // !Fl_X_H
-
-#include <windows.h>
-typedef HRGN Fl_Region;
-typedef HWND Window;
-typedef POINT XPoint;
-
-#include <FL/Fl_Window.H>
-
-// this part is included only when compiling the FLTK library or if requested explicitly
-#if defined(FL_LIBRARY) || defined(FL_INTERNALS) 
-
-// In some of the distributions, the gcc header files are missing some stuff:
-#ifndef LPMINMAXINFO
-#define LPMINMAXINFO MINMAXINFO*
-#endif
-#ifndef VK_LWIN
-#define VK_LWIN 0x5B
-#define VK_RWIN 0x5C
-#define VK_APPS 0x5D
-#endif
-
-// some random X equivalents
-struct XRectangle {int x, y, width, height;};
-extern Fl_Region XRectangleRegion(int x, int y, int w, int h);
-inline void XDestroyRegion(Fl_Region r) {DeleteObject(r);}
-inline void XClipBox(Fl_Region r,XRectangle* rect) {
-    RECT win_rect; GetRgnBox(r,&win_rect);
-    rect->x=win_rect.left;
-    rect->y=win_rect.top;
-    rect->width=win_rect.right-win_rect.left;
-    rect->height=win_rect.bottom-win_rect.top;
-}
-#define XDestroyWindow(a,b) DestroyWindow(b)
-#define XMapWindow(a,b) ShowWindow(b, SW_RESTORE)
-#define XUnmapWindow(a,b) ShowWindow(b, SW_HIDE)
-
-// this object contains all win32-specific stuff about a window:
-// Warning: this object is highly subject to change!
-class FL_EXPORT Fl_X {
-public:
-  // member variables - add new variables only at the end of this block
-  Window xid;
-  HBITMAP other_xid; // for double-buffered windows
-  Fl_Window* w;
-  Fl_Region region;
-  Fl_X *next;
-  int wait_for_expose;
-  HDC private_dc; // used for OpenGL
-  HCURSOR cursor;
-  int custom_cursor;
-  HDC saved_hdc;  // saves the handle of the DC currently loaded
-  // static variables, static functions and member functions
-  static Fl_X* first;
-  static Fl_X* i(const Fl_Window* w) {return w->i;}
-  static int fake_X_wm(const Fl_Window* w,int &X, int &Y,
-		                 int &bt,int &bx,int &by);
-  void setwindow(Fl_Window* wi) {w=wi; wi->i=this;}
-  void flush() {w->flush();}
-  void set_minmax(LPMINMAXINFO minmax);
-  void mapraise();
-  static void set_default_icons(const Fl_RGB_Image*[], int);
-  static void set_default_icons(HICON, HICON);
-  void set_icons();
-  int set_cursor(Fl_Cursor);
-  int set_cursor(const Fl_RGB_Image*, int, int);
-  static Fl_X* make(Fl_Window*);
-};
-extern FL_EXPORT HCURSOR fl_default_cursor;
-extern FL_EXPORT UINT fl_wake_msg;
-extern FL_EXPORT char fl_override_redirect; // hack into Fl_Window::make_xid()
-extern FL_EXPORT int fl_background_pixel;  // hack into Fl_Window::make_xid()
-extern FL_EXPORT HPALETTE fl_palette; // non-zero only on 8-bit displays!
-extern FL_EXPORT void fl_release_dc(HWND w, HDC dc);
-extern FL_EXPORT void fl_save_dc( HWND w, HDC dc);
-
-inline Window fl_xid(const Fl_Window* w) { Fl_X *temp = Fl_X::i(w); return temp ? temp->xid : 0; }
-
-#else
-FL_EXPORT Window fl_xid_(const Fl_Window* w);
-#define fl_xid(w) fl_xid_(w)
-#endif // FL_LIBRARY || FL_INTERNALS
-
-FL_EXPORT Fl_Window* fl_find(Window xid);
-void fl_clip_region(Fl_Region);
-
-// most recent fl_color() or fl_rgbcolor() points at one of these:
-extern FL_EXPORT struct Fl_XMap {
-  COLORREF rgb;	// this should be the type the RGB() macro returns
-  HPEN pen;	// pen, 0 if none created yet
-  int brush;	// ref to solid brush, 0 if none created yet
-} *fl_current_xmap;
-inline COLORREF fl_RGB() {return fl_current_xmap->rgb;}
-inline HPEN fl_pen() {return fl_current_xmap->pen;}
-FL_EXPORT HBRUSH fl_brush(); // allocates a brush if necessary
-FL_EXPORT HBRUSH fl_brush_action(int); // now does the real work
-
-extern FL_EXPORT HINSTANCE fl_display;
-extern FL_EXPORT Window fl_window;
-extern FL_EXPORT HDC fl_gc;
-extern FL_EXPORT MSG fl_msg;
-extern FL_EXPORT HDC fl_GetDC(Window);
-extern FL_EXPORT HDC fl_makeDC(HBITMAP);
-
-// off-screen pixmaps: create, destroy, draw into, copy to window
-typedef HBITMAP Fl_Offscreen;
-#define fl_create_offscreen(w, h) \
-  CreateCompatibleBitmap( (fl_gc ? fl_gc : fl_GetDC(0) ) , w, h)
-
-# define fl_begin_offscreen(b) \
-   HDC _sgc=fl_gc; Window _sw=fl_window; \
-   Fl_Surface_Device *_ss = Fl_Surface_Device::surface(); Fl_Display_Device::display_device()->set_current(); \
-   fl_gc=fl_makeDC(b); int _savedc = SaveDC(fl_gc); fl_window=(HWND)b; fl_push_no_clip()
-
-# define fl_end_offscreen() \
-   fl_pop_clip(); RestoreDC(fl_gc, _savedc); DeleteDC(fl_gc); _ss->set_current(); fl_window=_sw; fl_gc = _sgc
-
-
-FL_EXPORT void fl_copy_offscreen(int x,int y,int w,int h,HBITMAP pixmap,int srcx,int srcy);
-FL_EXPORT void fl_copy_offscreen_with_alpha(int x,int y,int w,int h,HBITMAP pixmap,int srcx,int srcy);
-#define fl_delete_offscreen(bitmap) DeleteObject(bitmap)
-
-// Bitmap masks
-typedef HBITMAP Fl_Bitmask;
-
-extern FL_EXPORT Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data);
-extern FL_EXPORT Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *data);
-extern FL_EXPORT void fl_delete_bitmask(Fl_Bitmask bm);
-
-// Dummy function to register a function for opening files via the window manager...
-inline void fl_open_callback(void (*)(const char *)) {}
-
-extern FL_EXPORT int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b);
-#endif // FL_DOXYGEN
-//
-// End of "$Id: win32.H 8726 2011-05-23 18:32:47Z AlbrechtS $".
-//
diff --git a/common/fltk/FL/x.H b/common/fltk/FL/x.H
deleted file mode 100644
index c2eb46e..0000000
--- a/common/fltk/FL/x.H
+++ /dev/null
@@ -1,203 +0,0 @@
-//
-// "$Id: x.H 8706 2011-05-21 10:05:19Z AlbrechtS $"
-//
-// X11 header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// These are internal fltk symbols that are necessary or useful for
-// calling Xlib.  You should include this file if (and ONLY if) you
-// need to call Xlib directly.  These symbols may not exist on non-X
-// systems.
-
-/** \class Fl_Mac_App_Menu 
- Mac OS-specific class allowing to localize the application menu.
- 
- These character strings are used to build the application menu. They can be localized
- at run time to any UTF-8 text by placing instructions such as this \e very 
- early in the program:
- \verbatim
- Fl_Mac_App_Menu::print = "Imprimer la fenêtre";
- \endverbatim
-*/
-
-#if !defined(Fl_X_H) && !defined(FL_DOXYGEN) 
-#  define Fl_X_H
-
-#  include "Enumerations.H"
-
-#  ifdef WIN32
-#    include "win32.H"
-#  elif defined(__APPLE__)
-#    include "mac.H"
-#  else
-#    if defined(_ABIN32) || defined(_ABI64) // fix for broken SGI Irix X .h files
-#      pragma set woff 3322
-#    endif
-#    include <X11/Xlib.h>
-#    include <X11/Xutil.h>
-#    if defined(_ABIN32) || defined(_ABI64)
-#      pragma reset woff 3322
-#    endif
-#    include <X11/Xatom.h>
-#    include "Fl_Window.H"
-#    include "Xutf8.h"
-// Mirror X definition of Region to Fl_Region, for portability...
-typedef Region Fl_Region;
-
-FL_EXPORT void fl_open_display();
-FL_EXPORT void fl_open_display(Display*);
-FL_EXPORT void fl_close_display();
-
-// constant info about the X server connection:
-extern FL_EXPORT Display *fl_display;
-extern FL_EXPORT int fl_screen;
-extern FL_EXPORT XVisualInfo *fl_visual;
-extern FL_EXPORT Colormap fl_colormap;
-
-
-// drawing functions:
-extern FL_EXPORT GC fl_gc;
-extern FL_EXPORT Window fl_window;
-FL_EXPORT ulong fl_xpixel(Fl_Color i);
-FL_EXPORT ulong fl_xpixel(uchar r, uchar g, uchar b);
-FL_EXPORT void fl_clip_region(Fl_Region);
-FL_EXPORT Fl_Region fl_clip_region();
-
-// feed events into fltk:
-FL_EXPORT int fl_handle(const XEvent&);
-
-// you can use these in Fl::add_handler() to look at events:
-extern FL_EXPORT const XEvent* fl_xevent;
-extern FL_EXPORT ulong fl_event_time;
-
-// off-screen pixmaps: create, destroy, draw into, copy to window:
-typedef ulong Fl_Offscreen;
-#   define fl_create_offscreen(w,h) \
-  XCreatePixmap(fl_display, \
-	      (Fl_Surface_Device::surface()->class_name() == Fl_Display_Device::class_id ? \
-	      fl_window : fl_xid(Fl::first_window()) ) , \
-	      w, h, fl_visual->depth)
-// begin/end are macros that save the old state in local variables:
-#    define fl_begin_offscreen(pixmap) \
-  Window _sw=fl_window; fl_window=pixmap; \
-  Fl_Surface_Device *_ss = Fl_Surface_Device::surface(); Fl_Display_Device::display_device()->set_current(); \
-  fl_push_no_clip()
-#    define fl_end_offscreen() \
-  fl_pop_clip(); fl_window = _sw; _ss->set_current()
-
-extern void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-#    define fl_delete_offscreen(pixmap) XFreePixmap(fl_display, pixmap)
-
-// Bitmap masks
-typedef ulong Fl_Bitmask;
-
-extern FL_EXPORT Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data);
-extern FL_EXPORT Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *data);
-extern FL_EXPORT void fl_delete_bitmask(Fl_Bitmask bm);
-
-#if defined(FL_LIBRARY) || defined(FL_INTERNALS)
-extern FL_EXPORT Window fl_message_window;
-extern FL_EXPORT void *fl_xftfont;
-FL_EXPORT Fl_Region XRectangleRegion(int x, int y, int w, int h); // in fl_rect.cxx
-
-// access to core fonts:
-// This class provides a "smart pointer" that returns a pointer to an XFontStruct.
-// The global variable fl_xfont can be called wherever a bitmap "core" font is
-// needed, e.g. when rendering to a GL context under X11.
-// With Xlib / X11 fonts, fl_xfont will return the current selected font.
-// With XFT / X11 fonts, fl_xfont will attempt to return the bitmap "core" font most
-// similar to (usually the same as) the current XFT font.
-class Fl_XFont_On_Demand
-{
-public:
-  Fl_XFont_On_Demand(XFontStruct* p = NULL) : ptr(p) { }
-  Fl_XFont_On_Demand& operator=(const Fl_XFont_On_Demand& x)
-  { ptr = x.ptr;  return *this; }
-  Fl_XFont_On_Demand& operator=(XFontStruct* p)
-  { ptr = p;  return *this; }
-  XFontStruct* value();
-  operator XFontStruct*() { return value(); }
-  XFontStruct& operator*() { return *value(); }
-  XFontStruct* operator->() { return value(); }
-  bool operator==(const Fl_XFont_On_Demand& x) { return ptr == x.ptr; }
-  bool operator!=(const Fl_XFont_On_Demand& x) { return ptr != x.ptr; }
-private:
-  XFontStruct *ptr;
-};
-extern FL_EXPORT Fl_XFont_On_Demand fl_xfont;
-
-// this object contains all X-specific stuff about a window:
-// Warning: this object is highly subject to change!  
-// FL_LIBRARY or FL_INTERNALS must be defined to access this class.
-class FL_EXPORT Fl_X {
-public:
-  Window xid;
-  Window other_xid;
-  Fl_Window *w;
-  Fl_Region region;
-  Fl_X *next;
-  char wait_for_expose;
-  char backbuffer_bad; // used for XDBE
-  static Fl_X* first;
-  static Fl_X* i(const Fl_Window* wi) {return wi->i;}
-  void setwindow(Fl_Window* wi) {w=wi; wi->i=this;}
-  void sendxjunk();
-  static void set_default_icons(const Fl_RGB_Image*[], int);
-  void set_icons();
-  int set_cursor(Fl_Cursor);
-  int set_cursor(const Fl_RGB_Image*, int, int);
-  static void make_xid(Fl_Window*,XVisualInfo* =fl_visual, Colormap=fl_colormap);
-  static Fl_X* set_xid(Fl_Window*, Window);
-  // kludges to get around protection:
-  void flush() {w->flush();}
-  static void x(Fl_Window* wi, int X) {wi->x(X);}
-  static void y(Fl_Window* wi, int Y) {wi->y(Y);}
-};
-
-extern FL_EXPORT char fl_override_redirect; // hack into Fl_X::make_xid()
-extern FL_EXPORT int fl_background_pixel;  // hack into Fl_X::make_xid()
-
-inline Window fl_xid(const Fl_Window* w) { Fl_X *temp = Fl_X::i(w); return temp ? temp->xid : 0; }
-
-#else
-
-extern Window fl_xid_(const Fl_Window* w);
-#define fl_xid(w) fl_xid_(w)
-
-#endif // FL_LIBRARY || FL_INTERNALS
-
-FL_EXPORT Fl_Window* fl_find(Window xid);
-
-
-// Dummy function to register a function for opening files via the window manager...
-inline void fl_open_callback(void (*)(const char *)) {}
-
-extern FL_EXPORT int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b);
-
-#  endif
-#endif
-
-//
-// End of "$Id: x.H 8706 2011-05-21 10:05:19Z AlbrechtS $".
-//
diff --git a/common/fltk/README b/common/fltk/README
deleted file mode 100644
index 2a38dba..0000000
--- a/common/fltk/README
+++ /dev/null
@@ -1,167 +0,0 @@
-README - Fast Light Tool Kit (FLTK) Version 1.3.0
--------------------------------------------------
-
-WHAT IS FLTK?
-
-    The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a
-    a cross-platform C++ GUI toolkit for UNIX(r)/Linux(r) (X11),
-    Microsoft(r) Windows(r), and MacOS(r) X. FLTK provides
-    modern GUI functionality without the bloat and supports 3D
-    graphics via OpenGL(r) and its built-in GLUT emulation. It
-    was originally developed by Mr. Bill Spitzak and is
-    currently maintained by a small group of developers across
-    the world with a central repository in the US.
-
-
-LICENSING
-
-    FLTK comes with complete free source code. FLTK is available
-    under the terms of the GNU Library General Public License.
-    Contrary to popular belief, it can be used in commercial
-    software! (Even Bill Gates could use it.) 
-
-
-ON-LINE DOCUMENTATION
-
-    All of the documentation is in HTML in the subdirectory
-    "documentation". The "index.html" file should be your
-    starting point.  PostScript(tm) and PDF versions of this
-    documentation is also available from the FLTK web site at:
-
-        http://www.fltk.org/documentation.php
-
-
-BUILDING AND INSTALLING FLTK UNDER UNIX AND Mac OS X
-
-    In most cases you can just type "make".  This will run
-    configure with the default (no) options and then compile
-    everything.
-
-    FLTK uses GNU autoconf to configure itself for your UNIX
-    platform. The main things that the configure script will
-    look for are the X11, OpenGL (or Mesa), and JPEG header and
-    library files.  Make sure that they are in the standard
-    include/library locations.  If they aren't you need to
-    define the CFLAGS, CXXFLAGS, and LDFLAGS environment
-    variables.
-
-    If you aren't using "gcc", "g++", "c++", or "CC" for your
-    C++ compiler, you'll also need to set the CXX environment
-    variable. Similarly, if you aren't using "gcc" or "cc" for
-    your C compiler you'll need to set the CC environment
-    variable.
-
-    You can run configure yourself to get the exact setup you
-    need. Type "./configure <options>".  Options include:
-
-	--enable-cygwin         - Enable the Cygwin libraries (WIN32)
-	--enable-debug          - Enable debugging code & symbols
-	--disable-gl            - Disable OpenGL support
-	--enable-shared         - Enable generation of shared libraries
-	--enable-threads        - Enable multithreading support
-	--enable-xdbe           - Enable the X double-buffer extension
-	--enable-xft            - Enable the Xft library (anti-aliased fonts)
-
-	--bindir=/path          - Set the location for executables
-                        	  [default = /usr/local/bin]
-	--libdir=/path          - Set the location for libraries
-                        	  [default = /usr/local/lib]
-	--includedir=/path      - Set the location for include files.
-                        	  [default = /usr/local/include]
-	--prefix=/dir           - Set the directory prefix for files
-                        	  [default = /usr/local]
-
-    When the configure script is done you can just run the
-    "make" command. This will build the library, FLUID tool, and
-    all of the test programs.
-
-    To install the library, become root and type "make
-    install".  This will copy the "fluid" executable to
-    "bindir", the header files to "includedir", and the library
-    files to "libdir".
-    
-    To install additional files and icons to be used by the main
-    desktop environments such as KDE, GNOME and XFCE, you will also
-    need to run "make install-desktop" as root.
-
-
-BUILDING FLTK UNDER MICROSOFT WINDOWS
-
-    There are two ways to build FLTK under Microsoft Windows. 
-    The first is to use the Visual C++ project files under the
-    "ide/" directory.  See the file ide/README.IDE for more info.
-
-    The second method is to use a GNU-based development tool.
-    To build with the Cygwin or MinGW tools, use the supplied
-    configure script as specified in the UNIX section above:
-
-        sh configure ...options...
-
-
-INTERNET RESOURCES
-
-    FLTK is available on the 'net in a bunch of locations:
-
-	- WWW:   http://www.fltk.org/
-	         http://www.fltk.org/str.php [for reporting bugs]
-	         http://www.fltk.org/software.php [source code]
-
-	- FTP:   http://ftp.easysw.com/pub/fltk
-	         ftp://ftp.easysw.com/pub/fltk
-	         ftp://ftp2.easysw.com/pub/fltk
-	         ftp://ftp.funet.fi/pub/mirrors/ftp.easysw.com/pub/fltk
-	         ftp://linux.mathematik.tu-darmstadt.de/pub/linux/mirrors/misc/fltk
-	         ftp://gd.tuwien.ac.at/hci/fltk
-
-	- EMail: fltk@fltk.org [see instructions below]
-
-    To send a message to the FLTK mailing list ("fltk@fltk.org")
-    you must first join the list.  Non-member submissions are
-    blocked to avoid problems with SPAM.
-
-    To join the FLTK mailing list, go the following web page:
-
-        http://lists.easysw.com/listinfo/fltk
-
-
-REPORTING BUGS
-
-    To report a bug in FLTK, use the form at:
-
-        http://www.fltk.org/str.php
-
-    For general support and questions, please use the FLTK
-    mailing list at "fltk@fltk.org".
-
-
-TRADEMARKS
-
-    Microsoft and Windows are registered trademarks of Microsoft
-    Corporation. UNIX is a registered trademark of the X/Open
-    Group, Inc.  OpenGL is a registered trademark of Silicon
-    Graphics, Inc.  Mac OS is a registered trademark of Apple
-    Computers, Inc.
-
-
-COPYRIGHT
-
-    FLTK is copyright 1998-2011 by Bill Spitzak
-    (spitzak@users.sourceforge.net) and others, 
-    see the CREDITS file for more info.
-
-    This library is free software; you can redistribute it
-    and/or modify it under the terms of the GNU Library General
-    Public License as published by the Free Software Foundation;
-    either version 2 of the License, or (at your option) any
-    later version.
-
-    This library is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied
-    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-    PURPOSE.  See the GNU Library General Public License for
-    more details.
-
-    You should have received a copy of the GNU Library General
-    Public License along with this library; if not, write to the
-    Free Software Foundation, Inc., 59 Temple Place, Suite 330,
-    Boston, MA 02111-1307 USA.
diff --git a/common/fltk/README.CMake.txt b/common/fltk/README.CMake.txt
deleted file mode 100644
index 780ad75..0000000
--- a/common/fltk/README.CMake.txt
+++ /dev/null
@@ -1,287 +0,0 @@
-README.CMake.txt - 2010-12-20 - Building and using FLTK with CMake
-------------------------------------------------------------------
-
-
-
- CONTENTS
-==========
-
-  1   INTRODUCTION TO CMAKE
-  2   USING CMAKE TO BUILD FLTK
-    2.1   Prerequisites
-    2.2   Options
-    2.3   Building under Linux with Unix Makefiles
-    2.4   Crosscompiling
-  3   USING CMAKE WITH FLTK
-    3.1   Library names
-    3.2   Using Fluid files
-  4   DOCUMENT HISTORY
-
-
- INTRODUCTION TO CMAKE
-=======================
-
-CMake was designed to let you create build files for a project once and
-then compile the project on multiple platforms.
-
-Using it on any platform consists of the same steps.  Create the
-CMakeLists.txt build file(s).  Run one of the CMake executables, picking
-your source directory, build directory, and build target.  The "cmake"
-executable is a one-step process with everything specified on the command
-line.  The others let you select options interactively, then configure
-and generate your platform-specific target.  You then run the resulting
-Makefile / project file / solution file as you normally would.
-
-CMake can be run in up to three ways, depending on your platform.  "cmake"
-is the basic command line tool.  "ccmake" is the curses based interactive
-tool.  "cmake-gui" is the gui-based interactive tool.  Each of these will
-take command line options in the form of -DOPTION=VALUE.  ccmake and
-cmake-gui will also let you change options interactively.
-
-CMake not only supports, but works best with out-of-tree builds.  This means
-that your build directory is not the same as your source directory or with a
-complex project, not the same as your source root directory.  Note that the
-build directory is where, in this case, FLTK will be built, not its final
-installation point.  If you want to build for multiple targets, such as
-VC++ and MinGW on Windows, or do some cross-compiling you must use out-of-tree
-builds exclusively.  In-tree builds will gum up the works by putting a
-CMakeCache.txt file in the source root.
-
-More information on CMake can be found on its web site http://www.cmake.org.
-
-
-
- USING CMAKE TO BUILD FLTK
-===========================
-
-
- PREREQUISITES
----------------
-
-The prerequisites for building FLTK with CMake are staightforward:
-CMake 2.6 or later and a recent FLTK 1.3 snapshot.  Installation of
-CMake is covered on its web site.
-
-This howto will cover building FLTK with the default options using cmake
-under Linux with both the default Unix Makefiles and a MinGW cross compiling
-toolchain.  Other platforms are just as easy to use.
-
-
- OPTIONS
----------
-
-All options have sensible defaults so you won't usually need to touch these.
-There are only two CMake options that you may want to specify.
-
-CMAKE_BUILD_TYPE
-   This specifies what kind of build this is i.e. Release, Debug...
-Platform specific compile/link flags/options are automatically selected
-by CMake depending on this value.
-
-CMAKE_INSTALL_PREFIX
-   Where everything will go on install.  Defaults are /usr/local for unix
-and C:\Program Files\FLTK for Windows.
-
-These are the FLTK specific options.  Platform specific options are ignored
-on other platforms.
-
-OPTION_OPTIM
-   Extra optimization flags.
-OPTION_ARCHFLAGS
-   Extra architecture flags.
-
-   The OPTION_PREFIX_* flags are for fine-tuning where everything goes
-on the install.
-OPTION_PREFIX_BIN
-OPTION_PREFIX_LIB
-OPTION_PREFIX_INCLUDE
-OPTION_PREFIX_DATA
-OPTION_PREFIX_DOC
-OPTION_PREFIX_CONFIG
-OPTION_PREFIX_MAN
-
-OPTION_APPLE_X11 - default OFF
-   In case you want to use X11 on OSX.  Not currently supported.
-OPTION_USE_POLL - default OFF
-   Don't use this one either.
-
-OPTION_BUILD_SHARED_LIBS - default OFF
-   Normally FLTK is built as static libraries which makes more portable
-binaries.  If you want to use shared libraries, this will build them too.
-OPTION_BUILD_EXAMPLES - default ON
-   Builds the many fine example programs.
-
-OPTION_CAIRO - default OFF
-   Enables libcairo support
-OPTION_CAIROEXT - default OFF
-   Enables extended libcairo support
-
-OPTION_USE_GL - default ON
-   Enables OpenGL support
-
-OPTION_USE_THREADS - default ON
-   Enables multithreaded support
-
-OPTION_LARGE_FILE - default ON
-   Enables large file (>2G) support
-
-   FLTK has built in jpeg zlib and png libraries.  These let you use
-system libraries instead, unless CMake can't find them.
-OPTION_USE_SYSTEM_LIBJPEG - default ON
-OPTION_USE_SYSTEM_ZLIB - default ON
-OPTION_USE_SYSTEM_LIBPNG - default ON
-
-   X11 extended libraries.
-OPTION_USE_XINERAMA - default ON
-OPTION_USE_XFT - default ON
-OPTION_USE_XDBE - default ON
-
-
- BUILDING UNDER LINUX WITH UNIX MAKEFILES
-------------------------------------------
-
-After untaring the FLTK source, go to the root of the FLTK tree and type
-the following.
-
-mkdir build
-cd build
-cmake ..
-make
-sudo make install
-
-This will build and install a default configuration FLTK.
-
-
- CROSSCOMPILING
-----------------
-
-Once you have a crosscompiler going, to use CMAke to build FLTK you need
-two more things.  You need a toolchain file which tells CMake where your
-build tools are.  The CMake website is a good source of information on
-this file.  Here's mine for MinGW under Linux.
-----
-
-# the name of the target operating system
-set(CMAKE_SYSTEM_NAME Windows)
-
-# which tools to use
-set(CMAKE_C_COMPILER   /usr/bin/i486-mingw32-gcc)
-set(CMAKE_CXX_COMPILER /usr/bin/i486-mingw32-g++)
-
-# here is where the target environment located
-set(CMAKE_FIND_ROOT_PATH  /usr/i486-mingw32)
-
-# adjust the default behaviour of the FIND_XXX() commands:
-# search programs in the host environment
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-# search headers and libraries in the target environment,
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-
-set(CMAKE_INSTALL_PREFIX ${CMAKE_FIND_ROOT_PATH}/usr CACHE FILEPATH
-   "install path prefix")
-
-----
-
-Not too tough.  The other thing you need is a native installation of FLTK
-on your build platform.  This is to supply the fluid executable which will
-compile the *.fl into C++ source and header files.
-
-So, again from the FLTK tree root.
-
-mkdir mingw
-cd mingw
-cmake -DCMAKE_TOOLCHAIN_FILE=~/projects/toolchain/Toolchain-mingw32.cmake ..
-make
-sudo make install
-
-This will create a default configuration FLTK suitable for mingw/msys and
-install it in the /usr/i486-mingw32/usr tree.
-
-
-
- USING CMAKE WITH FLTK
-=======================
-
-This howto assumes that you have FLTK libraries which were built using
-CMake, installed.  Building them with CMake generates some CMake helper
-files which are installed in standard locations, making FLTK easy to find
-and use.
-
-Here is a basic CMakeLists.txt file using FLTK.
-
-------
-
-cmake_minimum_required(VERSION 2.6)
-
-project(hello)
-
-find_package(FLTK REQUIRED NO_MODULE)
-include(${FLTK_USE_FILE})
-
-add_executable(hello WIN32 hello.cxx)
-
-target_link_libraries(hello fltk)
-
-------
-
-The find_package command tells CMake to find the package FLTK, REQUIRED
-means that it is an error if it's not found.  NO_MODULE tells it to search
-only for the FLTKConfig file, not using the FindFLTK.cmake supplied with
-CMake, which doesn't work with this version of FLTK.
-
-Once the package is found we include the ${FLTK_USE_FILE} which adds the
-FLTK include directories and library link information to its knowledge
-base.  After that your programs will be able to find FLTK headers and
-when you link the fltk library, it automatically links the libraries
-fltk depends on.
-
-The WIN32 in the add_executable tells your Windows compiler that this is
-a gui app.  It is ignored on other platforms.
-
-
- LIBRARY NAMES
----------------
-
-When you use the target_link_libraries command, CMake uses it's own
-internal names for libraries.  The fltk library names are:
-
-fltk     fltk_forms     fltk_images    fltk_gl
-
-and for the shared libraries (if built):
-
-fltk_SHARED     fltk_forms_SHARED     fltk_images_SHARED    fltk_gl_SHARED
-
-The built-in libraries (if built):
-
-fltk_jpeg      fltk_png    fltk_z
-
-
- USING FLUID FILES
--------------------
-
-CMake has a command named fltk_wrap_ui which helps deal with fluid *.fl
-files.  An example of its use is in test/CMakeLists.txt.  Here is a short
-summary on its use.
-
-Set a variable to list your C++ files, say CPPFILES.
-Set another variable to list your *.fl files, say FLFILES.
-Say your executable will be called exec.
-
-Then this is what you do...
-
-fltk_wrap_ui(exec ${FLFILES})
-add_executable(exec WIN32 ${CPPFILES} ${exec_FLTK_UI_SRCS})
-
-fltk_wrap_ui calls fluid and generates the required C++ files from the *.fl
-files.  It sets the variable, in this case exec_FLTK_UI_SRCS, to the
-list of generated files for inclusion in the add_executable command.
-
-The variable FLTK_FLUID_EXECUTABLE which is needed by fltk_wrap_ui is set
-when find_package(FLTK REQUIRED NO_MODULE) succeeds.
-
-
- DOCUMENT HISTORY
-==================
-
-Dec 20 2010 - matt: merged and restructures
diff --git a/common/fltk/configh.cmake.in b/common/fltk/configh.cmake.in
deleted file mode 100644
index a2dbb58..0000000
--- a/common/fltk/configh.cmake.in
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * "$Id: configh.cmake.in 8198 2011-01-06 10:24:58Z manolo $"
- *
- * Configuration file for the Fast Light Tool Kit (FLTK).
- * @configure_input@
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * Where to find files...
- */
-
-#define FLTK_DATADIR	"@PREFIX_DATA@"
-#define FLTK_DOCDIR	"@PREFIX_DOC@"
-
-/*
- * BORDER_WIDTH:
- *
- * Thickness of FL_UP_BOX and FL_DOWN_BOX.  Current 1,2, and 3 are
- * supported.
- *
- * 3 is the historic FLTK look.
- * 2 is the default and looks like Microsoft Windows, KDE, and Qt.
- * 1 is a plausible future evolution...
- *
- * Note that this may be simulated at runtime by redefining the boxtypes
- * using Fl::set_boxtype().
- */
-
-#define BORDER_WIDTH 2
-
-/*
- * HAVE_GL:
- *
- * Do you have OpenGL? Set this to 0 if you don't have or plan to use
- * OpenGL, and FLTK will be smaller.
- */
-
-#cmakedefine01 HAVE_GL
-
-/*
- * HAVE_GL_GLU_H:
- *
- * Do you have the OpenGL Utility Library header file?
- * (many broken Mesa RPMs do not...)
- */
-
-#cmakedefine01 HAVE_GL_GLU_H
-
-/*
- * HAVE_GLXGETPROCADDRESSARB:
- *
- * Do you have the OpenGL glXGetProcAddressARB() function?
- */
-
-#cmakedefine HAVE_GLXGETPROCADDRESSARB %HAVE_GLXGETPROCADDRESSARB%
-
-/*
- * USE_COLORMAP:
- *
- * Setting this to zero will save a good deal of code (especially for
- * fl_draw_image), but FLTK will only work on TrueColor visuals.
- */
-
-#define USE_COLORMAP 1
-
-/*
- * HAVE_XINERAMA
- *
- * Do we have the Xinerama library to support multi-head displays?
- */
-
-#cmakedefine01 HAVE_XINERAMA
-
-/*
- * USE_XFT
- *
- * Use the new Xft library to draw anti-aliased text.
- */
-
-#cmakedefine01 USE_XFT
-
-/*
- * HAVE_XDBE:
- *
- * Do we have the X double-buffer extension?
- */
-
-#cmakedefine01 HAVE_XDBE
-
-/*
- * USE_XDBE:
- *
- * Actually try to use the double-buffer extension?
- */
-
-#define USE_XDBE HAVE_XDBE
-
-/*
- * HAVE_XFIXES:
- *
- * Do we have the X fixes extension?
- */
-
-#cmakedefine01 HAVE_XFIXES
-
-/*
- * HAVE_XCURSOR:
- *
- * Do we have the X cursor library?
- */
-
-#cmakedefine01 HAVE_XCURSOR
-
-/*
- * __APPLE_QUARTZ__:
- *
- * If __APPLE_QUARTZ__ is defined, FLTK will be
- * compiled using Quartz. This flag has no meaning on
- * other operating systems than Mac OS X.
- */
-
-#cmakedefine __APPLE_QUARTZ__ @__APPLE_QUARTZ__@
-
-
-/*
- * USE_X11
- *
- * Should we use X11 for the current platform
- *
- */
-
-#cmakedefine USE_X11 @USE_X11@
-
-/*
- * HAVE_OVERLAY:
- *
- * Use the X overlay extension?  FLTK will try to use an overlay
- * visual for Fl_Overlay_Window, the Gl_Window overlay, and for the
- * menus.  Setting this to zero will remove a substantial amount of
- * code from FLTK.  Overlays have only been tested on SGI servers!
- */
-
-#define HAVE_OVERLAY 0
-
-/*
- * HAVE_GL_OVERLAY:
- *
- * It is possible your GL has an overlay even if X does not.  If so,
- * set this to 1.
- */
-
-#define HAVE_GL_OVERLAY HAVE_OVERLAY
-
-/*
- * WORDS_BIGENDIAN:
- *
- * Byte order of your machine: 1 = big-endian, 0 = little-endian.
- */
-
-#define WORDS_BIGENDIAN @WORDS_BIGENDIAN@
-
-/*
- * U16, U32, U64:
- *
- * Types used by fl_draw_image.  One of U32 or U64 must be defined.
- * U16 is optional but FLTK will work better with it!
- */
-
-#cmakedefine U16 @U16@
-#cmakedefine U32 @U32@
-#cmakedefine U64 @U64@
-
-/*
- * HAVE_DIRENT_H, HAVE_SYS_NDIR_H, HAVE_SYS_DIR_H, HAVE_NDIR_H,
- * HAVE_SCANDIR, HAVE_SCANDIR_POSIX:
- *
- * Where is <dirent.h> (used only by fl_file_chooser and scandir).
- */
-
-#cmakedefine HAVE_DIRENT_H @HAVE_DIRENT_H@
-#cmakedefine HAVE_SYS_NDIR_H @HAVE_SYS_NDIR_H@
-#cmakedefine HAVE_SYS_DIR_H @HAVE_SYS_DIR_H@
-#cmakedefine HAVE_NDIR_H @HAVE_NDIR_H@
-#cmakedefine HAVE_SCANDIR @HAVE_SCANDIR@
-#cmakedefine HAVE_SCANDIR_POSIX @HAVE_SCANDIR_POSIX@
-
-/*
- * Possibly missing sprintf-style functions:
- */
-
-#cmakedefine HAVE_VSNPRINTF @HAVE_VSNPRINTF@
-#cmakedefine HAVE_SNPRINTF @HAVE_SNPRINTF@
-
-/*
- * String functions and headers...
- */
-
-#cmakedefine HAVE_STRINGS_H @HAVE_STRINGS_H@
-#cmakedefine HAVE_STRCASECMP @HAVE_STRCASECMP@
-#cmakedefine HAVE_STRLCAT @HAVE_STRLCAT@
-#cmakedefine HAVE_STRLCPY @HAVE_STRLCPY@
-
-/*
- * Do we have POSIX locale support?
- */
-
-#cmakedefine HAVE_LOCALE_H @HAVE_LOCALE_H@
-#cmakedefine HAVE_LOCALECONV @HAVE_LOCALECONV@
-
-/*
- * HAVE_SYS_SELECT_H:
- *
- * Whether or not select() call has its own header file.
- */
-
-#cmakedefine01 HAVE_SYS_SELECT_H
-
-/*
- * HAVE_SYS_STDTYPES_H:
- *
- * Whether or not we have the <sys/stdtypes.h> header file.
- */
-
-#cmakedefine HAVE_SYS_STDTYPES_H @HAVE_SYS_STDTYPES_H@
-
-/*
- * USE_POLL:
- *
- * Use the poll() call provided on Linux and Irix instead of select()
- */
-
-#cmakedefine01 USE_POLL
-
-/*
- * Do we have various image libraries?
- */
-
-#cmakedefine HAVE_LIBPNG @HAVE_LIBPNG@
-#cmakedefine HAVE_LIBZ @HAVE_LIBZ@
-#cmakedefine HAVE_LIBJPEG @HAVE_LIBJPEG@
-
-/*
- * FLTK_USE_CAIRO
- *
- * Do we have the cairo library available and want extended cairo use in fltk ?
- * will implies to link cairo.lib in all fltk based apps.
- */
-
-#cmakedefine FLTK_USE_CAIRO @FLTK_USE_CAIRO@
-
-/*
- * FLTK_HAVE_CAIRO
- *
- * Do we have the cairo library available?
- */
-
-#cmakedefine FLTK_HAVE_CAIRO @FLTK_HAVE_CAIRO@
-
-/*
- * Which header file do we include for libpng?
- */
-
-#cmakedefine HAVE_PNG_H @HAVE_PNG_H@
-#cmakedefine HAVE_LIBPNG_PNG_H @HAVE_LIBPNG_PNG_H@
-
-/*
- * Do we have the png_xyz() functions?
- */
-
-#cmakedefine HAVE_PNG_GET_VALID @HAVE_PNG_GET_VALID@
-#cmakedefine HAVE_PNG_SET_TRNS_TO_ALPHA @HAVE_PNG_SET_TRNS_TO_ALPHA@
-
-/*
- * Do we have POSIX threading?
- */
-
-#cmakedefine HAVE_PTHREAD @HAVE_PTHREAD@
-#cmakedefine01 HAVE_PTHREAD_H
-
-/*
- * Do we have the ALSA library?
- */
-
-#cmakedefine HAVE_ALSA_ASOUNDLIB_H @HAVE_ALSA_ASOUNDLIB_H@
-/*
- * Do we have the long long type?
- */
-
-#cmakedefine HAVE_LONG_LONG @HAVE_LONG_LONG@
-
-#ifdef HAVE_LONG_LONG
-#  define FLTK_LLFMT	"%lld"
-#  define FLTK_LLCAST	(long long)
-#else
-#  define FLTK_LLFMT	"%ld"
-#  define FLTK_LLCAST	(long)
-#endif /* HAVE_LONG_LONG */
-
-/*
- * Do we have the strtoll() function?
- */
-
-#cmakedefine HAVE_STRTOLL @HAVE_STRTOLL@
-
-#ifndef HAVE_STRTOLL
-#  define strtoll(nptr,endptr,base) strtol((nptr), (endptr), (base))
-#endif /* !HAVE_STRTOLL */
-
-/*
- * Do we have the dlsym() function and header?
- */
-
-#cmakedefine HAVE_DLFCN_H @HAVE_DLFCN_H@
-#cmakedefine HAVE_DLSYM @HAVE_DLSYM@
-
-/*
- * End of "$Id: configh.cmake.in 8198 2011-01-06 10:24:58Z manolo $".
- */
diff --git a/common/fltk/mac_endianness.h b/common/fltk/mac_endianness.h
deleted file mode 100644
index c4c2aa6..0000000
--- a/common/fltk/mac_endianness.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * "$Id: mac_endianness.h 8511 2011-03-06 16:54:58Z manolo $"
- *
- * Mac-specific configuration file for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2011 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
- 
-#ifdef __APPLE__
-#  ifdef __BIG_ENDIAN__
-#    define WORDS_BIGENDIAN 1
-#  else
-#    define WORDS_BIGENDIAN 0
-#  endif
-#endif
-
-/*
- * End of "$Id: mac_endianness.h 8511 2011-03-06 16:54:58Z manolo $".
- */
diff --git a/common/fltk/src/CMakeLists.txt b/common/fltk/src/CMakeLists.txt
deleted file mode 100644
index 9a6d255..0000000
--- a/common/fltk/src/CMakeLists.txt
+++ /dev/null
@@ -1,204 +0,0 @@
-include_regular_expression("[.][cxx|c|h]$")
-
-set(CPPFILES
-  Fl.cxx
-  Fl_Adjuster.cxx
-  Fl_Bitmap.cxx
-  Fl_Browser.cxx
-  Fl_Browser_.cxx
-  Fl_Browser_load.cxx
-  Fl_Box.cxx
-  Fl_Button.cxx
-  Fl_Chart.cxx
-  Fl_Check_Browser.cxx
-  Fl_Check_Button.cxx
-  Fl_Choice.cxx
-  Fl_Clock.cxx
-  Fl_Color_Chooser.cxx
-  Fl_Counter.cxx
-  Fl_Device.cxx
-  Fl_Dial.cxx
-  Fl_Double_Window.cxx
-  Fl_File_Browser.cxx
-  Fl_File_Chooser.cxx
-  Fl_File_Chooser2.cxx
-  Fl_File_Icon.cxx
-  Fl_File_Input.cxx
-  Fl_Group.cxx
-  Fl_Help_View.cxx
-  Fl_Image.cxx
-  Fl_Input.cxx
-  Fl_Input_.cxx
-  Fl_Light_Button.cxx
-  Fl_Menu.cxx
-  Fl_Menu_.cxx
-  Fl_Menu_Bar.cxx
-  Fl_Sys_Menu_Bar.cxx
-  Fl_Menu_Button.cxx
-  Fl_Menu_Window.cxx
-  Fl_Menu_add.cxx
-  Fl_Menu_global.cxx
-  Fl_Multi_Label.cxx
-  Fl_Native_File_Chooser.cxx
-  Fl_Overlay_Window.cxx
-  Fl_Pack.cxx
-  Fl_Paged_Device.cxx
-  Fl_Pixmap.cxx
-  Fl_PNG_Image.cxx
-  Fl_Positioner.cxx
-  Fl_Printer.cxx
-  Fl_Preferences.cxx
-  Fl_Progress.cxx
-  Fl_Repeat_Button.cxx
-  Fl_Return_Button.cxx
-  Fl_Roller.cxx
-  Fl_Round_Button.cxx
-  Fl_Scroll.cxx
-  Fl_Scrollbar.cxx
-  Fl_Shared_Image.cxx
-  Fl_Single_Window.cxx
-  Fl_Slider.cxx
-  Fl_Table.cxx
-  Fl_Table_Row.cxx
-  Fl_Tabs.cxx
-  Fl_Text_Buffer.cxx
-  Fl_Text_Display.cxx
-  Fl_Text_Editor.cxx
-  Fl_Tile.cxx
-  Fl_Tiled_Image.cxx
-  Fl_Tooltip.cxx
-  Fl_Tree.cxx
-  Fl_Tree_Item_Array.cxx
-  Fl_Tree_Item.cxx
-  Fl_Tree_Prefs.cxx
-  Fl_Valuator.cxx
-  Fl_Value_Input.cxx
-  Fl_Value_Output.cxx
-  Fl_Value_Slider.cxx
-  Fl_Widget.cxx
-  Fl_Window.cxx
-  Fl_Window_fullscreen.cxx
-  Fl_Window_hotspot.cxx
-  Fl_Window_iconize.cxx
-  Fl_Wizard.cxx
-  Fl_XBM_Image.cxx
-  Fl_XPM_Image.cxx
-  Fl_abort.cxx
-  Fl_add_idle.cxx
-  Fl_arg.cxx
-  Fl_compose.cxx
-  Fl_display.cxx
-  Fl_get_key.cxx
-  Fl_get_system_colors.cxx
-  Fl_grab.cxx
-  Fl_lock.cxx
-  Fl_own_colormap.cxx
-  Fl_visual.cxx
-  Fl_x.cxx
-  filename_absolute.cxx
-  filename_expand.cxx
-  filename_ext.cxx
-  filename_isdir.cxx
-  filename_list.cxx
-  filename_match.cxx
-  filename_setext.cxx
-  fl_arc.cxx
-  fl_arci.cxx
-  fl_ask.cxx
-  fl_boxtype.cxx
-  fl_color.cxx
-  fl_cursor.cxx
-  fl_curve.cxx
-  fl_diamond_box.cxx
-  fl_dnd.cxx
-  fl_draw.cxx
-  fl_draw_image.cxx
-  fl_draw_pixmap.cxx
-  fl_engraved_label.cxx
-  fl_file_dir.cxx
-  fl_font.cxx
-  fl_gtk.cxx
-  fl_labeltype.cxx
-  fl_line_style.cxx
-  fl_open_uri.cxx
-  fl_oval_box.cxx
-  fl_overlay.cxx
-  fl_overlay_visual.cxx
-  fl_plastic.cxx
-  fl_read_image.cxx
-  fl_rect.cxx
-  fl_round_box.cxx
-  fl_rounded_box.cxx
-  fl_set_font.cxx
-  fl_set_fonts.cxx
-  fl_scroll_area.cxx
-  fl_shadow_box.cxx
-  fl_shortcut.cxx
-  fl_show_colormap.cxx
-  fl_symbols.cxx
-  fl_vertex.cxx
-  ps_image.cxx
-  screen_xywh.cxx
-  fl_utf8.cxx
-  fl_encoding_latin1.cxx
-  fl_encoding_mac_roman.cxx
-)
-
-set(CFILES
-  flstring.c
-  scandir.c
-  numericsort.c
-  vsnprintf.c
-  xutf8/is_right2left.c
-  xutf8/is_spacing.c
-  xutf8/case.c
-  xutf8/utf8Input.c
-  xutf8/utf8Utils.c
-  xutf8/utf8Wrap.c
-  xutf8/keysym2Ucs.c
-  fl_utf.c
-)
-
-add_definitions(-DFL_LIBRARY)
-if(APPLE)
-	set(MMFILES
-		Fl_cocoa.mm
-		Fl_Quartz_Printer.mm
-		Fl_Native_File_Chooser_MAC.mm
-		)
-else()
-   set(MMFILES
-      )
-endif(APPLE)
-
-#######################################################################
-add_library(fltk_static STATIC ${CPPFILES} ${MMFILES} ${CFILES} fl_call_main.c)
-set_target_properties(fltk_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
-
-if(USE_THREADS)
-   target_link_libraries(fltk_static ${CMAKE_THREAD_LIBS_INIT})
-endif(USE_THREADS)
-
-if(USE_X11)
-   target_link_libraries(fltk_static ${X11_LIBRARIES})
-endif(USE_X11)
-
-if(WIN32)
-   target_link_libraries(fltk_static comctl32)
-endif(WIN32)
-
-if(HAVE_XINERAMA)
-   target_link_libraries(fltk_static ${X11_Xinerama_LIB})
-endif(HAVE_XINERAMA)
-
-if(USE_XFT)
-   target_link_libraries(fltk_static ${X11_Xft_LIB})
-endif(USE_XFT)
-
-if(HAVE_XFIXES)
-   target_link_libraries(fltk_static ${X11_Xfixes_LIB})
-endif(HAVE_XFIXES)
-
-if(HAVE_XCURSOR)
-   target_link_libraries(fltk_static ${X11_Xcursor_LIB})
-endif(HAVE_XCURSOR)
diff --git a/common/fltk/src/Fl.cxx b/common/fltk/src/Fl.cxx
deleted file mode 100644
index 887c11f..0000000
--- a/common/fltk/src/Fl.cxx
+++ /dev/null
@@ -1,2093 +0,0 @@
-//
-// "$Id: Fl.cxx 8723 2011-05-23 16:49:02Z manolo $"
-//
-// Main event handling code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// warning: the Apple Quartz version still uses some Quickdraw calls,
-//          mostly to get around the single active context in QD and
-//          to implement clipping. This should be changed into pure
-//          Quartz calls in the near future.
-#include <config.h>
-
-/* We require Windows 2000 features (e.g. VK definitions) */
-#if defined(WIN32)
-# if !defined(WINVER) || (WINVER < 0x0500)
-#  ifdef WINVER
-#   undef WINVER
-#  endif
-#  define WINVER 0x0500
-# endif
-# if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
-#  ifdef _WIN32_WINNT
-#   undef _WIN32_WINNT
-#  endif
-#  define _WIN32_WINNT 0x0500
-# endif
-#endif
-
-// recent versions of MinGW warn: "Please include winsock2.h before windows.h",
-// hence we must include winsock2.h before FL/Fl.H (A.S. Dec. 2010, IMM May 2011)
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include <winsock2.h>
-#endif
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/x.H>
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-
-#if defined(DEBUG) || defined(DEBUG_WATCH)
-#  include <stdio.h>
-#endif // DEBUG || DEBUG_WATCH
-
-#ifdef WIN32
-#  include <ole2.h>
-void fl_free_fonts(void);
-HBRUSH fl_brush_action(int action);
-void fl_cleanup_pens(void);
-void fl_release_dc(HWND,HDC);
-void fl_cleanup_dc_list(void);
-#elif defined(__APPLE__)
-extern double fl_mac_flush_and_wait(double time_to_wait, char in_idle);
-#endif // WIN32
-
-extern void fl_update_focus(void);
-
-//
-// Globals...
-//
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-const char *Fl_Mac_App_Menu::about = "About ";
-const char *Fl_Mac_App_Menu::copyright = NULL;
-const char *Fl_Mac_App_Menu::print = "Print Front Window";
-const char *Fl_Mac_App_Menu::services = "Services";
-const char *Fl_Mac_App_Menu::hide = "Hide ";
-const char *Fl_Mac_App_Menu::hide_others = "Hide Others";
-const char *Fl_Mac_App_Menu::show = "Show All";
-const char *Fl_Mac_App_Menu::quit = "Quit ";
-#endif // __APPLE__
-#ifndef FL_DOXYGEN
-Fl_Widget	*Fl::belowmouse_,
-		*Fl::pushed_,
-		*Fl::focus_,
-		*Fl::selection_owner_;
-int		Fl::damage_,
-		Fl::e_number,
-		Fl::e_x,
-		Fl::e_y,
-		Fl::e_x_root,
-		Fl::e_y_root,
-		Fl::e_dx,
-		Fl::e_dy,
-		Fl::e_state,
-		Fl::e_clicks,
-		Fl::e_is_click,
-		Fl::e_keysym,
-                Fl::e_original_keysym,
-		Fl::scrollbar_size_ = 16;
-
-char		*Fl::e_text = (char *)"";
-int		Fl::e_length;
-
-Fl_Event_Dispatch Fl::e_dispatch = 0;
-
-unsigned char   Fl::options_[] = { 0, 0 };
-unsigned char   Fl::options_read_ = 0;
-
-
-Fl_Window *fl_xfocus;	// which window X thinks has focus
-Fl_Window *fl_xmousewin;// which window X thinks has FL_ENTER
-Fl_Window *Fl::grab_;	// most recent Fl::grab()
-Fl_Window *Fl::modal_;	// topmost modal() window
-
-#endif // FL_DOXYGEN
-
-//
-// 'Fl::version()' - Return the API version number...
-//
-
-double
-/**
-  Returns the compiled-in value of the FL_VERSION constant. This
-  is useful for checking the version of a shared library.
-*/
-Fl::version() {
-  return FL_VERSION;
-}
-
-/**
-  Gets the default scrollbar size used by
-  Fl_Browser_,
-  Fl_Help_View,
-  Fl_Scroll, and
-  Fl_Text_Display widgets.
-  \returns The default size for widget scrollbars, in pixels.
-*/
-int Fl::scrollbar_size() {
-  return scrollbar_size_;
-}
-
-/**
-  Sets the default scrollbar size that is used by the
-  Fl_Browser_,
-  Fl_Help_View,
-  Fl_Scroll, and
-  Fl_Text_Display widgets.
-  \param[in] W The new default size for widget scrollbars, in pixels.
-*/
-void Fl::scrollbar_size(int W) {
-  scrollbar_size_ = W;
-}
-
-
-/** Returns whether or not the mouse event is inside the given rectangle.
-
-    Returns non-zero if the current Fl::event_x() and Fl::event_y()
-    put it inside the given arbitrary bounding box.
-
-    You should always call this rather than doing your own comparison
-    so you are consistent about edge effects.
-
-    To find out, whether the event is inside a child widget of the
-    current window, you can use Fl::event_inside(const Fl_Widget *).
-
-    \param[in] xx,yy,ww,hh	bounding box
-    \return			non-zero, if mouse event is inside
-*/
-int Fl::event_inside(int xx,int yy,int ww,int hh) /*const*/ {
-  int mx = e_x - xx;
-  int my = e_y - yy;
-  return (mx >= 0 && mx < ww && my >= 0 && my < hh);
-}
-
-/** Returns whether or not the mouse event is inside a given child widget.
-
-    Returns non-zero if the current Fl::event_x() and Fl::event_y()
-    put it inside the given child widget's bounding box.
-
-    This method can only be used to check whether the mouse event is
-    inside a \b child widget of the window that handles the event, and
-    there must not be an intermediate subwindow (i.e. the widget must
-    not be inside a subwindow of the current window). However, it is
-    valid if the widget is inside a nested Fl_Group.
-
-    You must not use it with the window itself as the \p o argument
-    in a window's handle() method.
-
-    \note The mentioned restrictions are necessary, because this method
-    does not transform coordinates of child widgets, and thus the given
-    widget \p o must be within the \e same window that is handling the
-    current event. Otherwise the results are undefined.
-
-    You should always call this rather than doing your own comparison
-    so you are consistent about edge effects.
-
-    \see Fl::event_inside(int, int, int, int)
-
-    \param[in] o	child widget to be tested
-    \return		non-zero, if mouse event is inside the widget
-*/
-int Fl::event_inside(const Fl_Widget *o) /*const*/ {
-  int mx = e_x - o->x();
-  int my = e_y - o->y();
-  return (mx >= 0 && mx < o->w() && my >= 0 && my < o->h());
-}
-
-//
-//
-// timer support
-//
-
-#ifdef WIN32
-
-// implementation in Fl_win32.cxx
-
-#elif defined(__APPLE__)
-
-// implementation in Fl_mac.cxx
-
-#else
-
-//
-// X11 timers
-//
-
-
-////////////////////////////////////////////////////////////////////////
-// Timeouts are stored in a sorted list (*first_timeout), so only the
-// first one needs to be checked to see if any should be called.
-// Allocated, but unused (free) Timeout structs are stored in another
-// linked list (*free_timeout).
-
-struct Timeout {
-  double time;
-  void (*cb)(void*);
-  void* arg;
-  Timeout* next;
-};
-static Timeout* first_timeout, *free_timeout;
-
-#include <sys/time.h>
-
-// I avoid the overhead of getting the current time when we have no
-// timeouts by setting this flag instead of getting the time.
-// In this case calling elapse_timeouts() does nothing, but records
-// the current time, and the next call will actually elapse time.
-static char reset_clock = 1;
-
-static void elapse_timeouts() {
-  static struct timeval prevclock;
-  struct timeval newclock;
-  gettimeofday(&newclock, NULL);
-  double elapsed = newclock.tv_sec - prevclock.tv_sec +
-    (newclock.tv_usec - prevclock.tv_usec)/1000000.0;
-  prevclock.tv_sec = newclock.tv_sec;
-  prevclock.tv_usec = newclock.tv_usec;
-  if (reset_clock) {
-    reset_clock = 0;
-  } else if (elapsed > 0) {
-    for (Timeout* t = first_timeout; t; t = t->next) t->time -= elapsed;
-  }
-}
-
-// Continuously-adjusted error value, this is a number <= 0 for how late
-// we were at calling the last timeout. This appears to make repeat_timeout
-// very accurate even when processing takes a significant portion of the
-// time interval:
-static double missed_timeout_by;
-
-void Fl::add_timeout(double time, Fl_Timeout_Handler cb, void *argp) {
-  elapse_timeouts();
-  repeat_timeout(time, cb, argp);
-}
-
-void Fl::repeat_timeout(double time, Fl_Timeout_Handler cb, void *argp) {
-  time += missed_timeout_by; if (time < -.05) time = 0;
-  Timeout* t = free_timeout;
-  if (t) {
-      free_timeout = t->next;
-  } else {
-      t = new Timeout;
-  }
-  t->time = time;
-  t->cb = cb;
-  t->arg = argp;
-  // insert-sort the new timeout:
-  Timeout** p = &first_timeout;
-  while (*p && (*p)->time <= time) p = &((*p)->next);
-  t->next = *p;
-  *p = t;
-}
-
-/**
-  Returns true if the timeout exists and has not been called yet.
-*/
-int Fl::has_timeout(Fl_Timeout_Handler cb, void *argp) {
-  for (Timeout* t = first_timeout; t; t = t->next)
-    if (t->cb == cb && t->arg == argp) return 1;
-  return 0;
-}
-
-/**
-  Removes a timeout callback. It is harmless to remove a timeout
-  callback that no longer exists.
-
-  \note	This version removes all matching timeouts, not just the first one.
-	This may change in the future.
-*/
-void Fl::remove_timeout(Fl_Timeout_Handler cb, void *argp) {
-  for (Timeout** p = &first_timeout; *p;) {
-    Timeout* t = *p;
-    if (t->cb == cb && (t->arg == argp || !argp)) {
-      *p = t->next;
-      t->next = free_timeout;
-      free_timeout = t;
-    } else {
-      p = &(t->next);
-    }
-  }
-}
-
-#endif
-
-////////////////////////////////////////////////////////////////
-// Checks are just stored in a list. They are called in the reverse
-// order that they were added (this may change in the future).
-// This is a bit messy because I want to allow checks to be added,
-// removed, and have wait() called from inside them. To do this
-// next_check points at the next unprocessed one for the outermost
-// call to Fl::wait().
-
-struct Check {
-  void (*cb)(void*);
-  void* arg;
-  Check* next;
-};
-static Check *first_check, *next_check, *free_check;
-
-/**
-  FLTK will call this callback just before it flushes the display and
-  waits for events.  This is different than an idle callback because it
-  is only called once, then FLTK calls the system and tells it not to
-  return until an event happens.
-
-  This can be used by code that wants to monitor the
-  application's state, such as to keep a display up to date. The
-  advantage of using a check callback is that it is called only when no
-  events are pending. If events are coming in quickly, whole blocks of
-  them will be processed before this is called once. This can save
-  significant time and avoid the application falling behind the events.
-
-  Sample code:
-
-  \code
-  bool state_changed; // anything that changes the display turns this on
-
-  void callback(void*) {
-   if (!state_changed) return;
-   state_changed = false;
-   do_expensive_calculation();
-   widget-&gt;redraw();
-  }
-
-  main() {
-   Fl::add_check(callback);
-   return Fl::run();
-  }
-  \endcode
-*/
-void Fl::add_check(Fl_Timeout_Handler cb, void *argp) {
-  Check* t = free_check;
-  if (t) free_check = t->next;
-  else t = new Check;
-  t->cb = cb;
-  t->arg = argp;
-  t->next = first_check;
-  if (next_check == first_check) next_check = t;
-  first_check = t;
-}
-
-/**
-  Removes a check callback. It is harmless to remove a check
-  callback that no longer exists.
-*/
-void Fl::remove_check(Fl_Timeout_Handler cb, void *argp) {
-  for (Check** p = &first_check; *p;) {
-    Check* t = *p;
-    if (t->cb == cb && t->arg == argp) {
-      if (next_check == t) next_check = t->next;
-      *p = t->next;
-      t->next = free_check;
-      free_check = t;
-    } else {
-      p = &(t->next);
-    }
-  }
-}
-
-/**
-  Returns 1 if the check exists and has not been called yet, 0 otherwise.
-*/
-int Fl::has_check(Fl_Timeout_Handler cb, void *argp) {
-  for (Check** p = &first_check; *p;) {
-    Check* t = *p;
-    if (t->cb == cb && t->arg == argp) {
-      return 1;
-    } else {
-      p = &(t->next);
-    }
-  }
-  return 0;
-}
-
-static void run_checks()
-{
-  // checks are a bit messy so that add/remove and wait may be called
-  // from inside them without causing an infinite loop:
-  if (next_check == first_check) {
-    while (next_check) {
-      Check* checkp = next_check;
-      next_check = checkp->next;
-      (checkp->cb)(checkp->arg);
-    }
-    next_check = first_check;
-  }
-}
-
-#ifndef WIN32
-static char in_idle;
-#endif
-
-////////////////////////////////////////////////////////////////
-// Clipboard notifications
-
-struct Clipboard_Notify {
-  Fl_Clipboard_Notify_Handler handler;
-  void *data;
-  struct Clipboard_Notify *next;
-};
-
-static struct Clipboard_Notify *clip_notify_list = NULL;
-
-extern void fl_clipboard_notify_change(); // in Fl_<platform>.cxx
-
-void Fl::add_clipboard_notify(Fl_Clipboard_Notify_Handler h, void *data) {
-  struct Clipboard_Notify *node;
-
-  remove_clipboard_notify(h);
-
-  node = new Clipboard_Notify;
-
-  node->handler = h;
-  node->data = data;
-  node->next = clip_notify_list;
-
-  clip_notify_list = node;
-
-  fl_clipboard_notify_change();
-}
-
-void Fl::remove_clipboard_notify(Fl_Clipboard_Notify_Handler h) {
-  struct Clipboard_Notify *node, **prev;
-
-  node = clip_notify_list;
-  prev = &clip_notify_list;
-  while (node != NULL) {
-    if (node->handler == h) {
-      *prev = node->next;
-      delete node;
-
-      fl_clipboard_notify_change();
-
-      return;
-    }
-
-    prev = &node->next;
-    node = node->next;
-  }
-}
-
-bool fl_clipboard_notify_empty(void) {
-  return clip_notify_list == NULL;
-}
-
-void fl_trigger_clipboard_notify(int source) {
-  struct Clipboard_Notify *node;
-
-  node = clip_notify_list;
-  while (node != NULL) {
-    node->handler(source, node->data);
-    node = node->next;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-// wait/run/check/ready:
-
-void (*Fl::idle)(); // see Fl::add_idle.cxx for the add/remove functions
-
-extern int fl_ready(); // in Fl_<platform>.cxx
-extern int fl_wait(double time); // in Fl_<platform>.cxx
-
-/**
-  See int Fl::wait()
-*/
-double Fl::wait(double time_to_wait) {
-  // delete all widgets that were listed during callbacks
-  do_widget_deletion();
-
-#ifdef WIN32
-
-  return fl_wait(time_to_wait);
-
-#elif defined(__APPLE__)
-
-  run_checks();
-  if (idle) {
-    if (!in_idle) {
-      in_idle = 1;
-      idle();
-      in_idle = 0;
-    }
-    // the idle function may turn off idle, we can then wait:
-    if (idle) time_to_wait = 0.0;
-  }
-  return fl_mac_flush_and_wait(time_to_wait, in_idle);
-
-#else
-
-  if (first_timeout) {
-    elapse_timeouts();
-    Timeout *t;
-    while ((t = first_timeout)) {
-      if (t->time > 0) break;
-      // The first timeout in the array has expired.
-      missed_timeout_by = t->time;
-      // We must remove timeout from array before doing the callback:
-      void (*cb)(void*) = t->cb;
-      void *argp = t->arg;
-      first_timeout = t->next;
-      t->next = free_timeout;
-      free_timeout = t;
-      // Now it is safe for the callback to do add_timeout:
-      cb(argp);
-    }
-  } else {
-    reset_clock = 1; // we are not going to check the clock
-  }
-  run_checks();
-//  if (idle && !fl_ready()) {
-  if (idle) {
-    if (!in_idle) {
-      in_idle = 1;
-      idle();
-      in_idle = 0;
-    }
-    // the idle function may turn off idle, we can then wait:
-    if (idle) time_to_wait = 0.0;
-  }
-  if (first_timeout && first_timeout->time < time_to_wait)
-    time_to_wait = first_timeout->time;
-  if (time_to_wait <= 0.0) {
-    // do flush second so that the results of events are visible:
-    int ret = fl_wait(0.0);
-    flush();
-    return ret;
-  } else {
-    // do flush first so that user sees the display:
-    flush();
-    if (idle && !in_idle) // 'idle' may have been set within flush()
-      time_to_wait = 0.0;
-    return fl_wait(time_to_wait);
-  }
-#endif
-}
-
-#define FOREVER 1e20
-
-/**
-  As long as any windows are displayed this calls Fl::wait()
-  repeatedly.  When all the windows are closed it returns zero
-  (supposedly it would return non-zero on any errors, but FLTK calls
-  exit directly for these).  A normal program will end main()
-  with return Fl::run();.
-*/
-int Fl::run() {
-  while (Fl_X::first) wait(FOREVER);
-  return 0;
-}
-
-#ifdef WIN32
-
-// Function to initialize COM/OLE for usage. This must be done only once.
-// We define a flag to register whether we called it:
-static char oleInitialized = 0;
-
-// This calls the Windows function OleInitialize() exactly once.
-void fl_OleInitialize() {
-  if (!oleInitialized) {
-    OleInitialize(0L);
-    oleInitialized = 1;
-  }
-}
-
-// This calls the Windows function OleUninitialize() only, if
-// OleInitialize has been called before.
-void fl_OleUninitialize() {
-  if (oleInitialized) {
-    OleUninitialize();
-    oleInitialized = 0;
-  }
-}
-
-class Fl_Win32_At_Exit {
-public:
-  Fl_Win32_At_Exit() { }
-  ~Fl_Win32_At_Exit() {
-    fl_free_fonts();        // do some WIN32 cleanup
-    fl_cleanup_pens();
-    fl_OleUninitialize();
-    fl_brush_action(1);
-    fl_cleanup_dc_list();
-  }
-};
-static Fl_Win32_At_Exit win32_at_exit;
-#endif
-
-
-
-/**
-  Waits until "something happens" and then returns.  Call this
-  repeatedly to "run" your program.  You can also check what happened
-  each time after this returns, which is quite useful for managing
-  program state.
-
-  What this really does is call all idle callbacks, all elapsed
-  timeouts, call Fl::flush() to get the screen to update, and
-  then wait some time (zero if there are idle callbacks, the shortest of
-  all pending timeouts, or infinity), for any events from the user or
-  any Fl::add_fd() callbacks.  It then handles the events and
-  calls the callbacks and then returns.
-
-  The return value of Fl::wait() is non-zero if there are any
-  visible windows - this may change in future versions of FLTK.
-
-  Fl::wait(time) waits a maximum of \e time seconds.
-  <i>It can return much sooner if something happens.</i>
-
-  The return value is positive if an event or fd happens before the
-  time elapsed.  It is zero if nothing happens (on Win32 this will only
-  return zero if \e time is zero).  It is negative if an error
-  occurs (this will happen on UNIX if a signal happens).
-*/
-int Fl::wait() {
-  if (!Fl_X::first) return 0;
-  wait(FOREVER);
-  return Fl_X::first != 0; // return true if there is a window
-}
-
-/**
-  Same as Fl::wait(0).  Calling this during a big calculation
-  will keep the screen up to date and the interface responsive:
-
-  \code
-  while (!calculation_done()) {
-  calculate();
-  Fl::check();
-  if (user_hit_abort_button()) break;
-  }
-  \endcode
-
-  This returns non-zero if any windows are displayed, and 0 if no
-  windows are displayed (this is likely to change in future versions of
-  FLTK).
-*/
-int Fl::check() {
-  wait(0.0);
-  return Fl_X::first != 0; // return true if there is a window
-}
-
-/**
-  This is similar to Fl::check() except this does \e not
-  call Fl::flush() or any callbacks, which is useful if your
-  program is in a state where such callbacks are illegal.  This returns
-  true if Fl::check() would do anything (it will continue to
-  return true until you call Fl::check() or Fl::wait()).
-
-  \code
-  while (!calculation_done()) {
-    calculate();
-    if (Fl::ready()) {
-      do_expensive_cleanup();
-      Fl::check();
-      if (user_hit_abort_button()) break;
-    }
-  }
-  \endcode
-*/
-int Fl::ready() {
-#if ! defined( WIN32 )  &&  ! defined(__APPLE__)
-  if (first_timeout) {
-    elapse_timeouts();
-    if (first_timeout->time <= 0) return 1;
-  } else {
-    reset_clock = 1;
-  }
-#endif
-  return fl_ready();
-}
-
-////////////////////////////////////////////////////////////////
-// Window list management:
-
-#ifndef FL_DOXYGEN
-Fl_X* Fl_X::first;
-#endif
-
-Fl_Window* fl_find(Window xid) {
-  Fl_X *window;
-  for (Fl_X **pp = &Fl_X::first; (window = *pp); pp = &window->next)
-#if defined(WIN32) || defined(USE_X11)
-   if (window->xid == xid)
-#elif defined(__APPLE_QUARTZ__)
-   if (window->xid == xid && !window->w->window())
-#else
-# error unsupported platform
-#endif // __APPLE__
-	{
-      if (window != Fl_X::first && !Fl::modal()) {
-	// make this window be first to speed up searches
-	// this is not done if modal is true to avoid messing up modal stack
-	*pp = window->next;
-	window->next = Fl_X::first;
-	Fl_X::first = window;
-      }
-      return window->w;
-    }
-  return 0;
-}
-
-/**
-  Returns the first top-level window in the list of shown() windows.  If
-  a modal() window is shown this is the top-most modal window, otherwise
-  it is the most recent window to get an event.
-*/
-Fl_Window* Fl::first_window() {
-  Fl_X* i = Fl_X::first;
-  return i ? i->w : 0;
-}
-
-/**
-  Returns the next top-level window in the list of shown() windows.
-  You can use this call to iterate through all the windows that are shown().
-  \param[in] window	must be shown and not NULL
-*/
-Fl_Window* Fl::next_window(const Fl_Window* window) {
-  Fl_X* i = Fl_X::i(window)->next;
-  return i ? i->w : 0;
-}
-
-/**
- Sets the window that is returned by first_window().
- The window is removed from wherever it is in the
- list and inserted at the top.  This is not done if Fl::modal()
- is on or if the window is not shown(). Because the first window
- is used to set the "parent" of modal windows, this is often
- useful.
- */
-void Fl::first_window(Fl_Window* window) {
-  if (!window || !window->shown()) return;
-  fl_find( Fl_X::i(window)->xid );
-}
-
-/**
-  Redraws all widgets.
-*/
-void Fl::redraw() {
-  for (Fl_X* i = Fl_X::first; i; i = i->next) i->w->redraw();
-}
-
-/**
-  Causes all the windows that need it to be redrawn and graphics forced
-  out through the pipes.
-
-  This is what wait() does before looking for events.
-
-  Note: in multi-threaded applications you should only call Fl::flush()
-  from the main thread. If a child thread needs to trigger a redraw event,
-  it should instead call Fl::awake() to get the main thread to process the
-  event queue.
-*/
-void Fl::flush() {
-  if (damage()) {
-    damage_ = 0;
-    for (Fl_X* i = Fl_X::first; i; i = i->next) {
-      if (i->wait_for_expose) {damage_ = 1; continue;}
-      Fl_Window* wi = i->w;
-      if (!wi->visible_r()) continue;
-      if (wi->damage()) {i->flush(); wi->clear_damage();}
-      // destroy damage regions for windows that don't use them:
-      if (i->region) {XDestroyRegion(i->region); i->region = 0;}
-    }
-  }
-#if defined(USE_X11)
-  if (fl_display) XFlush(fl_display);
-#elif defined(WIN32)
-  GdiFlush();
-#elif defined (__APPLE_QUARTZ__)
-  if (fl_gc)
-    CGContextFlush(fl_gc);
-#else
-# error unsupported platform
-#endif
-}
-
-
-////////////////////////////////////////////////////////////////
-// Event handlers:
-
-
-struct handler_link {
-  int (*handle)(int);
-  handler_link *next;
-};
-
-
-static handler_link *handlers = 0;
-
-
-/**
-  Install a function to parse unrecognized events.  If FLTK cannot
-  figure out what to do with an event, it calls each of these functions
-  (most recent first) until one of them returns non-zero.  If none of
-  them returns non-zero then the event is ignored.  Events that cause
-  this to be called are:
-
-  - FL_SHORTCUT events that are not recognized by any widget.
-    This lets you provide global shortcut keys.
-  - System events that FLTK does not recognize.  See fl_xevent.
-  - \e Some other events when the widget FLTK selected returns
-    zero from its handle() method.  Exactly which ones may change
-    in future versions, however.
-
- \see Fl::remove_handler(Fl_Event_Handler)
- \see Fl::event_dispatch(Fl_Event_Dispatch d)
- \see Fl::handle(int, Fl_Window*)
-*/
-void Fl::add_handler(Fl_Event_Handler ha) {
-  handler_link *l = new handler_link;
-  l->handle = ha;
-  l->next = handlers;
-  handlers = l;
-}
-
-
-/**
- Removes a previously added event handler.
- \see Fl::handle(int, Fl_Window*)
-*/
-void Fl::remove_handler(Fl_Event_Handler ha) {
-  handler_link *l, *p;
-
-  // Search for the handler in the list...
-  for (l = handlers, p = 0; l && l->handle != ha; p = l, l = l->next);
-
-  if (l) {
-    // Found it, so remove it from the list...
-    if (p) p->next = l->next;
-    else handlers = l->next;
-
-    // And free the record...
-    delete l;
-  }
-}
-
-int (*fl_local_grab)(int); // used by fl_dnd.cxx
-
-static int send_handlers(int e) {
-  for (const handler_link *hl = handlers; hl; hl = hl->next)
-    if (hl->handle(e)) return 1;
-  return 0;
-}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Widget* fl_oldfocus; // kludge for Fl_Group...
-
-/**
-    Sets the widget that will receive FL_KEYBOARD events.
-
-    If you change Fl::focus(), the previous widget and all
-    parents (that don't contain the new widget) are sent FL_UNFOCUS
-    events.  Changing the focus does \e not send FL_FOCUS to
-    this or any widget, because sending FL_FOCUS is supposed to
-    \e test if the widget wants the focus (by it returning non-zero from
-    handle()).
-
-    \see Fl_Widget::take_focus()
-*/
-void Fl::focus(Fl_Widget *o) {
-  if (o && !o->visible_focus()) return;
-  if (grab()) return; // don't do anything while grab is on
-  Fl_Widget *p = focus_;
-  if (o != p) {
-    Fl::compose_reset();
-    focus_ = o;
-    // make sure that fl_xfocus is set to the top level window
-    // of this widget, or fl_fix_focus will clear our focus again
-    if (o) {
-      Fl_Window *win = 0, *w1 = o->as_window();
-      if (!w1) w1 = o->window();
-      while (w1) { win=w1; w1=win->window(); }
-      if (win) {
-#ifdef __APPLE__
-	if (fl_xfocus != win) {
-	  Fl_X *x = Fl_X::i(win);
-	  if (x) x->set_key_window();
-	  }
-#endif
-	fl_xfocus = win;
-	}
-    }
-    // take focus from the old focused window
-    fl_oldfocus = 0;
-    int old_event = e_number;
-    e_number = FL_UNFOCUS;
-    for (; p; p = p->parent()) {
-      p->handle(FL_UNFOCUS);
-      fl_oldfocus = p;
-    }
-    e_number = old_event;
-    // let the platform code do what it needs
-    fl_update_focus();
-  }
-}
-
-static char dnd_flag = 0; // make 'belowmouse' send DND_LEAVE instead of LEAVE
-
-/**
-    Sets the widget that is below the mouse.  This is for
-    highlighting buttons.  It is not used to send FL_PUSH or
-    FL_MOVE directly, for several obscure reasons, but those events
-    typically go to this widget.  This is also the first widget tried for
-    FL_SHORTCUT events.
-
-    If you change the belowmouse widget, the previous one and all
-    parents (that don't contain the new widget) are sent FL_LEAVE
-    events.  Changing this does \e not send FL_ENTER to this
-    or any widget, because sending FL_ENTER is supposed to \e test
-    if the widget wants the mouse (by it returning non-zero from
-    handle()).
-*/
-void Fl::belowmouse(Fl_Widget *o) {
-  if (grab()) return; // don't do anything while grab is on
-  Fl_Widget *p = belowmouse_;
-  if (o != p) {
-    belowmouse_ = o;
-    int old_event = e_number;
-    e_number = dnd_flag ? FL_DND_LEAVE : FL_LEAVE;
-    for (; p && !p->contains(o); p = p->parent()) {
-      p->handle(e_number);
-    }
-    e_number = old_event;
-  }
-}
-
-/**
-    Sets the widget that is being pushed. FL_DRAG or
-    FL_RELEASE (and any more FL_PUSH) events will be sent to
-    this widget.
-
-    If you change the pushed widget, the previous one and all parents
-    (that don't contain the new widget) are sent FL_RELEASE
-    events.  Changing this does \e not send FL_PUSH to this
-    or any widget, because sending FL_PUSH is supposed to \e test
-    if the widget wants the mouse (by it returning non-zero from
-    handle()).
-*/
- void Fl::pushed(Fl_Widget *o) {
-  pushed_ = o;
-}
-
-static void nothing(Fl_Widget *) {}
-void (*Fl_Tooltip::enter)(Fl_Widget *) = nothing;
-void (*Fl_Tooltip::exit)(Fl_Widget *) = nothing;
-
-// Update modal(), focus() and other state according to system state,
-// and send FL_ENTER, FL_LEAVE, FL_FOCUS, and/or FL_UNFOCUS events.
-// This is the only function that produces these events in response
-// to system activity.
-// This is called whenever a window is added or hidden, and whenever
-// X says the focus or mouse window have changed.
-
-void fl_fix_focus() {
-#ifdef DEBUG
-  puts("fl_fix_focus();");
-#endif // DEBUG
-
-  if (Fl::grab()) return; // don't do anything while grab is on.
-
-  // set focus based on Fl::modal() and fl_xfocus
-  Fl_Widget* w = fl_xfocus;
-  if (w) {
-    int saved = Fl::e_keysym;
-    if (Fl::e_keysym < (FL_Button + FL_LEFT_MOUSE) ||
-        Fl::e_keysym > (FL_Button + FL_RIGHT_MOUSE))
-      Fl::e_keysym = 0; // make sure widgets don't think a keystroke moved focus
-    while (w->parent()) w = w->parent();
-    if (Fl::modal()) w = Fl::modal();
-    if (!w->contains(Fl::focus()))
-      if (!w->take_focus()) Fl::focus(w);
-    Fl::e_keysym = saved;
-  } else
-    Fl::focus(0);
-
-// MRS: Originally we checked the button state, but a user reported that it
-//      broke click-to-focus in FLWM?!?
-//  if (!(Fl::event_state() & 0x7f00000 /*FL_BUTTONS*/)) {
-  if (!Fl::pushed()) {
-    // set belowmouse based on Fl::modal() and fl_xmousewin:
-    w = fl_xmousewin;
-    if (w) {
-      if (Fl::modal()) w = Fl::modal();
-      if (!w->contains(Fl::belowmouse())) {
-        int old_event = Fl::e_number;
-	w->handle(Fl::e_number = FL_ENTER);
-	Fl::e_number = old_event;
-	if (!w->contains(Fl::belowmouse())) Fl::belowmouse(w);
-      } else {
-	// send a FL_MOVE event so the enter/leave state is up to date
-	Fl::e_x = Fl::e_x_root-fl_xmousewin->x();
-	Fl::e_y = Fl::e_y_root-fl_xmousewin->y();
-        int old_event = Fl::e_number;
-	w->handle(Fl::e_number = FL_MOVE);
-	Fl::e_number = old_event;
-      }
-    } else {
-      Fl::belowmouse(0);
-      Fl_Tooltip::enter(0);
-    }
-  }
-}
-
-#if !(defined(WIN32) || defined(__APPLE__))
-extern Fl_Widget *fl_selection_requestor; // from Fl_x.cxx
-#endif
-
-// This function is called by ~Fl_Widget() and by Fl_Widget::deactivate()
-// and by Fl_Widget::hide().  It indicates that the widget does not want
-// to receive any more events, and also removes all global variables that
-// point at the widget.
-// I changed this from the 1.0.1 behavior, the older version could send
-// FL_LEAVE or FL_UNFOCUS events to the widget.  This appears to not be
-// desirable behavior and caused flwm to crash.
-
-void fl_throw_focus(Fl_Widget *o) {
-#ifdef DEBUG
-  printf("fl_throw_focus(o=%p)\n", o);
-#endif // DEBUG
-
-  if (o->contains(Fl::pushed())) Fl::pushed_ = 0;
-#if !(defined(WIN32) || defined(__APPLE__))
-  if (o->contains(fl_selection_requestor)) fl_selection_requestor = 0;
-#endif
-  if (o->contains(Fl::belowmouse())) Fl::belowmouse_ = 0;
-  if (o->contains(Fl::focus())) Fl::focus_ = 0;
-  if (o == fl_xfocus) fl_xfocus = 0;
-  if (o == Fl_Tooltip::current()) Fl_Tooltip::current(0);
-  if (o == fl_xmousewin) fl_xmousewin = 0;
-  Fl_Tooltip::exit(o);
-  fl_fix_focus();
-}
-
-////////////////////////////////////////////////////////////////
-
-// Call to->handle(), but first replace the mouse x/y with the correct
-// values to account for nested windows. 'window' is the outermost
-// window the event was posted to by the system:
-static int send(int event, Fl_Widget* to, Fl_Window* window) {
-  int dx, dy;
-  int old_event = Fl::e_number;
-  if (window) {
-    dx = window->x();
-    dy = window->y();
-  } else {
-    dx = dy = 0;
-  }
-  for (const Fl_Widget* w = to; w; w = w->parent())
-    if (w->type()>=FL_WINDOW) {dx -= w->x(); dy -= w->y();}
-  int save_x = Fl::e_x; Fl::e_x += dx;
-  int save_y = Fl::e_y; Fl::e_y += dy;
-  int ret = to->handle(Fl::e_number = event);
-  Fl::e_number = old_event;
-  Fl::e_y = save_y;
-  Fl::e_x = save_x;
-  return ret;
-}
-
-
-/**
- \brief Set a new event dispatch function.
-
- The event dispatch function is called after native events are converted to
- FLTK events, but before they are handled by FLTK. If the dispatch function
- Fl_Event_Dispatch \p d is set, it is up to the dispatch function to call
- Fl::handle_(int, Fl_Window*) or to ignore the event.
-
- The dispatch function itself must return 0 if it ignored the event,
- or non-zero if it used the event. If you call Fl::handle_(), then
- this will return the correct value.
-
- The event dispatch can be used to handle exceptions in FLTK events and
- callbacks before they reach the native event handler:
-
- \code
- int myHandler(int e, Fl_Window *w) {
-   try {
-     return Fl::handle_(e, w);
-   } catch () {
-     ...
-   }
- }
-
- main() {
-   Fl::event_dispatch(myHandler);
-   ...
-   Fl::run();
- }
- \endcode
-
- \param d new dispatch function, or NULL
- \see Fl::add_handler(Fl_Event_Handler)
- \see Fl::handle(int, Fl_Window*)
- \see Fl::handle_(int, Fl_Window*)
- */
-void Fl::event_dispatch(Fl_Event_Dispatch d)
-{
-  e_dispatch = d;
-}
-
-
-/**
- \brief Return the current event dispatch function.
- */
-Fl_Event_Dispatch Fl::event_dispatch()
-{
-  return e_dispatch;
-}
-
-
-/**
- \brief Handle events from the window system.
-
- This is called from the native event dispatch after native events have been
- converted to FLTK notation. This function calls Fl::handle_(int, Fl_Window*)
- unless the user sets a dispatch function. If a user dispatch function is set,
- the user must make sure that Fl::handle_() is called, or the event will be
- ignored.
-
- \param e the event type (Fl::event_number() is not yet set)
- \param window the window that caused this event
- \return 0 if the event was not handled
-
- \see Fl::add_handler(Fl_Event_Handler)
- \see Fl::event_dispatch(Fl_Event_Dispatch)
- */
-int Fl::handle(int e, Fl_Window* window)
-{
-  if (e_dispatch) {
-    return e_dispatch(e, window);
-  } else {
-    return handle_(e, window);
-  }
-}
-
-
-/**
- \brief Handle events from the window system.
-
- This function is called from the native event dispatch, unless the user sets
- another dispatch function. In that case, the user dispatch function must
- decide when to call Fl::handle_(int, Fl_Window*)
-
- \param e the event type (Fl::event_number() is not yet set)
- \param window the window that caused this event
- \return 0 if the event was not handled
-
- \see Fl::event_dispatch(Fl_Event_Dispatch)
- */
-int Fl::handle_(int e, Fl_Window* window)
-{
-  e_number = e;
-  if (fl_local_grab) return fl_local_grab(e);
-
-  Fl_Widget* wi = window;
-
-  switch (e) {
-
-  case FL_CLOSE:
-    if ( grab() || (modal() && window != modal()) ) return 0;
-    wi->do_callback();
-    return 1;
-
-  case FL_SHOW:
-    wi->Fl_Widget::show(); // this calls Fl_Widget::show(), not Fl_Window::show()
-    return 1;
-
-  case FL_HIDE:
-    wi->Fl_Widget::hide(); // this calls Fl_Widget::hide(), not Fl_Window::hide()
-    return 1;
-
-  case FL_PUSH:
-#ifdef DEBUG
-    printf("Fl::handle(e=%d, window=%p);\n", e, window);
-#endif // DEBUG
-
-    if (grab()) wi = grab();
-    else if (modal() && wi != modal()) return 0;
-    pushed_ = wi;
-    Fl_Tooltip::current(wi);
-    if (send(e, wi, window)) return 1;
-    // raise windows that are clicked on:
-    window->show();
-    return 1;
-
-  case FL_DND_ENTER:
-  case FL_DND_DRAG:
-    dnd_flag = 1;
-    break;
-
-  case FL_DND_LEAVE:
-    dnd_flag = 1;
-    belowmouse(0);
-    dnd_flag = 0;
-    return 1;
-
-  case FL_DND_RELEASE:
-    wi = belowmouse();
-    break;
-
-  case FL_MOVE:
-  case FL_DRAG:
-    fl_xmousewin = window; // this should already be set, but just in case.
-    if (pushed()) {
-      wi = pushed();
-      if (grab()) wi = grab();
-      e_number = e = FL_DRAG;
-      break;
-    }
-    if (modal() && wi != modal()) wi = 0;
-    if (grab()) wi = grab();
-    { int ret;
-      Fl_Widget* pbm = belowmouse();
-#ifdef __APPLE__
-      if (fl_mac_os_version < 100500) {
-        // before 10.5, mouse moved events aren't sent to borderless windows such as tooltips
-	Fl_Window *tooltip = Fl_Tooltip::current_window();
-	int inside = 0;
-	if (tooltip && tooltip->shown() ) { // check if a tooltip window is currently opened
-	  // check if mouse is inside the tooltip
-	  inside = (Fl::event_x_root() >= tooltip->x() && Fl::event_x_root() < tooltip->x() + tooltip->w() &&
-	  Fl::event_y_root() >= tooltip->y() && Fl::event_y_root() < tooltip->y() + tooltip->h() );
-	}
-	// if inside, send event to tooltip window instead of background window
-	if (inside) ret = send(e, tooltip, window);
-	else ret = (wi && send(e, wi, window));
-      } else
-#endif
-      ret = (wi && send(e, wi, window));
-   if (pbm != belowmouse()) {
-#ifdef DEBUG
-      printf("Fl::handle(e=%d, window=%p);\n", e, window);
-#endif // DEBUG
-      Fl_Tooltip::enter(belowmouse());
-    }
-    return ret;}
-
-  case FL_RELEASE: {
-//    printf("FL_RELEASE: window=%p, pushed() = %p, grab() = %p, modal() = %p\n",
-//           window, pushed(), grab(), modal());
-
-    if (grab()) {
-      wi = grab();
-      pushed_ = 0; // must be zero before callback is done!
-    } else if (pushed()) {
-      wi = pushed();
-      pushed_ = 0; // must be zero before callback is done!
-    } else if (modal() && wi != modal()) return 0;
-    int r = send(e, wi, window);
-    fl_fix_focus();
-    return r;}
-
-  case FL_UNFOCUS:
-    window = 0;
-  case FL_FOCUS:
-    fl_xfocus = window;
-    fl_fix_focus();
-    return 1;
-
-  case FL_KEYUP:
-    // Send the key-up to the current focus widget. This is not
-    // always the same widget that received the corresponding
-    // FL_KEYBOARD event because focus may have changed.
-    // Sending the KEYUP to the right KEYDOWN is possible, but
-    // would require that we track the KEYDOWN for every possible
-    // key stroke (users may hold down multiple keys!) and then
-    // make sure that the widget still exists before sending
-    // a KEYUP there. I believe that the current solution is
-    // "close enough".
-    for (wi = grab() ? grab() : focus(); wi; wi = wi->parent())
-      if (send(FL_KEYUP, wi, window)) return 1;
-    return 0;
-
-  case FL_KEYBOARD:
-#ifdef DEBUG
-    printf("Fl::handle(e=%d, window=%p);\n", e, window);
-#endif // DEBUG
-
-    Fl_Tooltip::enter((Fl_Widget*)0);
-
-    fl_xfocus = window; // this should not happen!  But maybe it does:
-
-    // Try it as keystroke, sending it to focus and all parents:
-    for (wi = grab() ? grab() : focus(); wi; wi = wi->parent())
-      if (send(FL_KEYBOARD, wi, window)) return 1;
-
-    // recursive call to try shortcut:
-    if (handle(FL_SHORTCUT, window)) return 1;
-
-    // and then try a shortcut with the case of the text swapped, by
-    // changing the text and falling through to FL_SHORTCUT case:
-    {unsigned char* c = (unsigned char*)event_text(); // cast away const
-    if (!isalpha(*c)) return 0;
-    *c = isupper(*c) ? tolower(*c) : toupper(*c);}
-    e_number = e = FL_SHORTCUT;
-
-  case FL_SHORTCUT:
-    if (grab()) {wi = grab(); break;} // send it to grab window
-
-    // Try it as shortcut, sending to mouse widget and all parents:
-    wi = belowmouse();
-    if (!wi) {
-      wi = modal();
-      if (!wi) wi = window;
-    } else if (wi->window() != first_window()) {
-      if (send(FL_SHORTCUT, first_window(), first_window())) return 1;
-    }
-
-    for (; wi; wi = wi->parent()) {
-      if (send(FL_SHORTCUT, wi, wi->window())) return 1;
-    }
-
-    // try using add_handle() functions:
-    if (send_handlers(FL_SHORTCUT)) return 1;
-
-    // make Escape key close windows:
-    if (event_key()==FL_Escape) {
-      wi = modal(); if (!wi) wi = window;
-      wi->do_callback();
-      return 1;
-    }
-
-    return 0;
-
-  case FL_ENTER:
-#ifdef DEBUG
-    printf("Fl::handle(e=%d, window=%p);\n", e, window);
-#endif // DEBUG
-
-    fl_xmousewin = window;
-    fl_fix_focus();
-    Fl_Tooltip::enter(belowmouse());
-    return 1;
-
-  case FL_LEAVE:
-#ifdef DEBUG
-    printf("Fl::handle(e=%d, window=%p);\n", e, window);
-#endif // DEBUG
-
-    if (!pushed_) {
-      belowmouse(0);
-      Fl_Tooltip::enter(0);
-    }
-    if (window == fl_xmousewin) {fl_xmousewin = 0; fl_fix_focus();}
-    return 1;
-
-  case FL_MOUSEWHEEL:
-    fl_xfocus = window; // this should not happen!  But maybe it does:
-
-    // Try sending it to the "grab" first
-    if (grab() && grab()!=modal() && grab()!=window) {
-      if (send(FL_MOUSEWHEEL, grab(), window)) return 1;
-    }
-    // Now try sending it to the "modal" window
-    if (modal()) {
-      send(FL_MOUSEWHEEL, modal(), window);
-      return 1;
-    }
-    // Finally try sending it to the window, the event occured in
-    if (send(FL_MOUSEWHEEL, window, window)) return 1;
-  default:
-    break;
-  }
-  if (wi && send(e, wi, window)) {
-    dnd_flag = 0;
-    return 1;
-  }
-  dnd_flag = 0;
-  return send_handlers(e);
-}
-
-////////////////////////////////////////////////////////////////
-// hide() destroys the X window, it does not do unmap!
-
-#if defined(WIN32)
-extern void fl_clipboard_notify_untarget(HWND wnd);
-extern void fl_update_clipboard(void);
-#elif USE_XFT
-extern void fl_destroy_xft_draw(Window);
-#endif
-
-void Fl_Window::hide() {
-  clear_visible();
-
-  if (!shown()) return;
-
-  // remove from the list of windows:
-  Fl_X* ip = i;
-  Fl_X** pp = &Fl_X::first;
-  for (; *pp != ip; pp = &(*pp)->next) if (!*pp) return;
-  *pp = ip->next;
-#ifdef __APPLE__
-  ip->unlink();
-  // MacOS X manages a single pointer per application. Make sure that hiding
-  // a toplevel window will not leave us with some random pointer shape, or
-  // worst case, an invisible pointer
-  if (!parent()) cursor(FL_CURSOR_DEFAULT);
-#endif
-  i = 0;
-
-  // recursively remove any subwindows:
-  for (Fl_X *wi = Fl_X::first; wi;) {
-    Fl_Window* W = wi->w;
-    if (W->window() == this) {
-      W->hide();
-      W->set_visible();
-      wi = Fl_X::first;
-    } else wi = wi->next;
-  }
-
-  if (this == Fl::modal_) { // we are closing the modal window, find next one:
-    Fl_Window* W;
-    for (W = Fl::first_window(); W; W = Fl::next_window(W))
-      if (W->modal()) break;
-    Fl::modal_ = W;
-  }
-
-  // Make sure no events are sent to this window:
-  fl_throw_focus(this);
-  handle(FL_HIDE);
-
-#if defined(WIN32)
-  // this little trick keeps the current clipboard alive, even if we are about
-  // to destroy the window that owns the selection.
-  if (GetClipboardOwner()==ip->xid)
-    fl_update_clipboard();
-  // Make sure we unlink this window from the clipboard chain
-  fl_clipboard_notify_untarget(ip->xid);
-  // Send a message to myself so that I'll get out of the event loop...
-  PostMessage(ip->xid, WM_APP, 0, 0);
-  if (ip->private_dc) fl_release_dc(ip->xid, ip->private_dc);
-    if (ip->xid == fl_window && fl_gc) {
-      fl_release_dc(fl_window, fl_gc);
-      fl_window = (HWND)-1;
-      fl_gc = 0;
-# ifdef FLTK_USE_CAIRO
-      if (Fl::cairo_autolink_context()) Fl::cairo_make_current((Fl_Window*) 0);
-# endif
-    }
-#elif defined(__APPLE_QUARTZ__)
-  Fl_X::q_release_context(ip);
-  if ( ip->xid == fl_window && !parent() )
-    fl_window = 0;
-#endif
-
-  if (ip->region) XDestroyRegion(ip->region);
-
-#if defined(USE_X11)
-# if USE_XFT
-  fl_destroy_xft_draw(ip->xid);
-# endif
-  // this test makes sure ip->xid has not been destroyed already
-  if (ip->xid) XDestroyWindow(fl_display, ip->xid);
-#elif defined(WIN32)
-  // this little trickery seems to avoid the popup window stacking problem
-  HWND p = GetForegroundWindow();
-  if (p==GetParent(ip->xid)) {
-    ShowWindow(ip->xid, SW_HIDE);
-    ShowWindow(p, SW_SHOWNA);
-  }
-  XDestroyWindow(fl_display, ip->xid);
-#elif defined(__APPLE_QUARTZ__)
-  ip->destroy();
-#else
-# error unsupported platform
-#endif
-
-#ifdef WIN32
-  // Try to stop the annoying "raise another program" behavior
-  if (non_modal() && Fl::first_window() && Fl::first_window()->shown())
-    Fl::first_window()->show();
-#endif
-  delete ip;
-}
-
-Fl_Window::~Fl_Window() {
-  hide();
-  if (xclass_) {
-    free(xclass_);
-  }
-  free_icons();
-  delete icon_;
-}
-
-// FL_SHOW and FL_HIDE are called whenever the visibility of this widget
-// or any parent changes.  We must correctly map/unmap the system's window.
-
-// For top-level windows it is assumed the window has already been
-// mapped or unmapped!!!  This is because this should only happen when
-// Fl_Window::show() or Fl_Window::hide() is called, or in response to
-// iconize/deiconize events from the system.
-
-int Fl_Window::handle(int ev)
-{
-  if (parent()) {
-    switch (ev) {
-    case FL_SHOW:
-      if (!shown()) show();
-      else {
-#if defined(USE_X11) || defined(WIN32)
-        XMapWindow(fl_display, fl_xid(this)); // extra map calls are harmless
-#elif defined(__APPLE_QUARTZ__)
-	i->map();
-#else
-# error unsupported platform
-#endif // __APPLE__
-      }
-      break;
-    case FL_HIDE:
-      if (shown()) {
-	// Find what really turned invisible, if it was a parent window
-	// we do nothing.  We need to avoid unnecessary unmap calls
-	// because they cause the display to blink when the parent is
-	// remapped.  However if this or any intermediate non-window
-	// widget has really had hide() called directly on it, we must
-	// unmap because when the parent window is remapped we don't
-	// want to reappear.
-	if (visible()) {
-	 Fl_Widget* p = parent(); for (;p->visible();p = p->parent()) {}
-	 if (p->type() >= FL_WINDOW) break; // don't do the unmap
-	}
-#if defined(USE_X11) || defined(WIN32)
-	XUnmapWindow(fl_display, fl_xid(this));
-#elif defined(__APPLE_QUARTZ__)
-	i->unmap();
-#else
-# error platform unsupported
-#endif
-      }
-      break;
-    }
-//  } else if (ev == FL_FOCUS || ev == FL_UNFOCUS) {
-//    Fl_Tooltip::exit(Fl_Tooltip::current());
-  }
-
-  return Fl_Group::handle(ev);
-}
-
-////////////////////////////////////////////////////////////////
-// Back compatibility cut & paste functions for fltk 1.1 only:
-
-/** Back-compatibility only: The single-argument call can be used to
-    move the selection to another widget or to set the owner to
-    NULL, without changing the actual text of the
-    selection. FL_SELECTIONCLEAR is sent to the previous
-    selection owner, if any.
-
-    <i>Copying the buffer every time the selection is changed is
-    obviously wasteful, especially for large selections.  An interface will
-    probably be added in a future version to allow the selection to be made
-    by a callback function.  The current interface will be emulated on top
-    of this.</i>
-*/
-void Fl::selection_owner(Fl_Widget *owner) {selection_owner_ = owner;}
-
-/**
-  Changes the current selection.  The block of text is
-  copied to an internal buffer by FLTK (be careful if doing this in
-  response to an FL_PASTE as this \e may be the same buffer
-  returned by event_text()).  The selection_owner()
-  widget is set to the passed owner.
-*/
-void Fl::selection(Fl_Widget &owner, const char* text, int len) {
-  selection_owner_ = &owner;
-  Fl::copy(text, len, 0);
-}
-
-/** Backward compatibility only.
-  This calls Fl::paste(receiver, 0);
-  \see Fl::paste(Fl_Widget &receiver, int clipboard)
-*/
-void Fl::paste(Fl_Widget &receiver) {
-  Fl::paste(receiver, 0);
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/fl_draw.H>
-
-void Fl_Widget::redraw() {
-  damage(FL_DAMAGE_ALL);
-}
-
-void Fl_Widget::redraw_label() {
-  if (window()) {
-    if (box() == FL_NO_BOX) {
-      // Widgets with the FL_NO_BOX boxtype need a parent to
-      // redraw, since it is responsible for redrawing the
-      // background...
-      int X = x() > 0 ? x() - 1 : 0;
-      int Y = y() > 0 ? y() - 1 : 0;
-      window()->damage(FL_DAMAGE_ALL, X, Y, w() + 2, h() + 2);
-    }
-
-    if (align() && !(align() & FL_ALIGN_INSIDE) && window()->shown()) {
-      // If the label is not inside the widget, compute the location of
-      // the label and redraw the window within that bounding box...
-      int W = 0, H = 0;
-      label_.measure(W, H);
-      W += 5; // Add a little to the size of the label to cover overflow
-      H += 5;
-
-      // FIXME:
-      // This assumes that measure() returns the correct outline, which it does
-      // not in all possible cases of alignment combinedwith image and symbols.
-      switch (align() & 0x0f) {
-        case FL_ALIGN_TOP_LEFT:
-          window()->damage(FL_DAMAGE_EXPOSE, x(), y()-H, W, H); break;
-        case FL_ALIGN_TOP:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+(w()-W)/2, y()-H, W, H); break;
-        case FL_ALIGN_TOP_RIGHT:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+w()-W, y()-H, W, H); break;
-        case FL_ALIGN_LEFT_TOP:
-          window()->damage(FL_DAMAGE_EXPOSE, x()-W, y(), W, H); break;
-        case FL_ALIGN_RIGHT_TOP:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+w(), y(), W, H); break;
-        case FL_ALIGN_LEFT:
-          window()->damage(FL_DAMAGE_EXPOSE, x()-W, y()+(h()-H)/2, W, H); break;
-        case FL_ALIGN_RIGHT:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+w(), y()+(h()-H)/2, W, H); break;
-        case FL_ALIGN_LEFT_BOTTOM:
-          window()->damage(FL_DAMAGE_EXPOSE, x()-W, y()+h()-H, W, H); break;
-        case FL_ALIGN_RIGHT_BOTTOM:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+w(), y()+h()-H, W, H); break;
-        case FL_ALIGN_BOTTOM_LEFT:
-          window()->damage(FL_DAMAGE_EXPOSE, x(), y()+h(), W, H); break;
-        case FL_ALIGN_BOTTOM:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+(w()-W)/2, y()+h(), W, H); break;
-        case FL_ALIGN_BOTTOM_RIGHT:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+w()-W, y()+h(), W, H); break;
-        default:
-          window()->damage(FL_DAMAGE_ALL); break;
-      }
-    } else {
-      // The label is inside the widget, so just redraw the widget itself...
-      damage(FL_DAMAGE_ALL);
-    }
-  }
-}
-
-void Fl_Widget::damage(uchar fl) {
-  if (type() < FL_WINDOW) {
-    // damage only the rectangle covered by a child widget:
-    damage(fl, x(), y(), w(), h());
-  } else {
-    // damage entire window by deleting the region:
-    Fl_X* i = Fl_X::i((Fl_Window*)this);
-    if (!i) return; // window not mapped, so ignore it
-    if (i->region) {XDestroyRegion(i->region); i->region = 0;}
-    damage_ |= fl;
-    Fl::damage(FL_DAMAGE_CHILD);
-  }
-}
-
-void Fl_Widget::damage(uchar fl, int X, int Y, int W, int H) {
-  Fl_Widget* wi = this;
-  // mark all parent widgets between this and window with FL_DAMAGE_CHILD:
-  while (wi->type() < FL_WINDOW) {
-    wi->damage_ |= fl;
-    wi = wi->parent();
-    if (!wi) return;
-    fl = FL_DAMAGE_CHILD;
-  }
-  Fl_X* i = Fl_X::i((Fl_Window*)wi);
-  if (!i) return; // window not mapped, so ignore it
-
-  // clip the damage to the window and quit if none:
-  if (X < 0) {W += X; X = 0;}
-  if (Y < 0) {H += Y; Y = 0;}
-  if (W > wi->w()-X) W = wi->w()-X;
-  if (H > wi->h()-Y) H = wi->h()-Y;
-  if (W <= 0 || H <= 0) return;
-
-  if (!X && !Y && W==wi->w() && H==wi->h()) {
-    // if damage covers entire window delete region:
-    wi->damage(fl);
-    return;
-  }
-
-  if (wi->damage()) {
-    // if we already have damage we must merge with existing region:
-    if (i->region) {
-#if defined(USE_X11)
-      XRectangle R;
-      R.x = X; R.y = Y; R.width = W; R.height = H;
-      XUnionRectWithRegion(&R, i->region, i->region);
-#elif defined(WIN32)
-      Fl_Region R = XRectangleRegion(X, Y, W, H);
-      CombineRgn(i->region, i->region, R, RGN_OR);
-      XDestroyRegion(R);
-#elif defined(__APPLE_QUARTZ__)
-      CGRect arg = fl_cgrectmake_cocoa(X, Y, W, H);
-      int j; // don't add a rectangle totally inside the Fl_Region
-      for(j = 0; j < i->region->count; j++) {
-        if(CGRectContainsRect(i->region->rects[j], arg)) break;
-      }
-      if( j >= i->region->count) {
-        i->region->rects = (CGRect*)realloc(i->region->rects, (++(i->region->count)) * sizeof(CGRect));
-        i->region->rects[i->region->count - 1] = arg;
-      }
-#else
-# error unsupported platform
-#endif
-    }
-    wi->damage_ |= fl;
-  } else {
-    // create a new region:
-    if (i->region) XDestroyRegion(i->region);
-    i->region = XRectangleRegion(X,Y,W,H);
-    wi->damage_ = fl;
-  }
-  Fl::damage(FL_DAMAGE_CHILD);
-}
-void Fl_Window::flush() {
-  make_current();
-//if (damage() == FL_DAMAGE_EXPOSE && can_boxcheat(box())) fl_boxcheat = this;
-  fl_clip_region(i->region); i->region = 0;
-  draw();
-}
-
-#ifdef WIN32
-#  include "Fl_win32.cxx"
-//#elif defined(__APPLE__)
-#endif
-
-//
-// The following methods allow callbacks to schedule the deletion of
-// widgets at "safe" times.
-//
-
-static int		num_dwidgets = 0, alloc_dwidgets = 0;
-static Fl_Widget	**dwidgets = 0;
-
-/**
-  Schedules a widget for deletion at the next call to the event loop.
-  Use this method to delete a widget inside a callback function.
-
-  To avoid early deletion of widgets, this function should be called
-  toward the end of a callback and only after any call to the event
-  loop (Fl::wait(), Fl::flush(), Fl::check(), fl_ask(), etc.).
-
-  When deleting groups or windows, you must only delete the group or
-  window widget and not the individual child widgets.
-
-  \since FLTK 1.3 it is not necessary to remove widgets from their parent
-  groups or windows before calling this, because it will be done in the
-  widget's destructor, but it is not a failure to do this nevertheless.
-
-  \note In FLTK 1.1 you \b must remove widgets from their parent group
-  (or window) before deleting them.
-
-  \see Fl_Widget::~Fl_Widget()
-*/
-void Fl::delete_widget(Fl_Widget *wi) {
-  if (!wi) return;
-
-  if (num_dwidgets >= alloc_dwidgets) {
-    Fl_Widget	**temp;
-
-    temp = new Fl_Widget *[alloc_dwidgets + 10];
-    if (alloc_dwidgets) {
-      memcpy(temp, dwidgets, alloc_dwidgets * sizeof(Fl_Widget *));
-      delete[] dwidgets;
-    }
-
-    dwidgets = temp;
-    alloc_dwidgets += 10;
-  }
-
-  dwidgets[num_dwidgets] = wi;
-  num_dwidgets ++;
-}
-
-/**
-    Deletes widgets previously scheduled for deletion.
-
-    This is for internal use only. You should never call this directly.
-
-    Fl::do_widget_deletion() is called from the FLTK event loop or whenever
-    you call Fl::wait(). The previously scheduled widgets are deleted in the
-    same order they were scheduled by calling Fl::delete_widget().
-
-    \see Fl::delete_widget(Fl_Widget *wi)
-*/
-void Fl::do_widget_deletion() {
-  if (!num_dwidgets) return;
-
-  for (int i = 0; i < num_dwidgets; i ++)
-    delete dwidgets[i];
-
-  num_dwidgets = 0;
-}
-
-static Fl_Widget ***widget_watch = 0;
-static int num_widget_watch = 0;
-static int max_widget_watch = 0;
-
-/**
-  Adds a widget pointer to the widget watch list.
-
-  \note Internal use only, please use class Fl_Widget_Tracker instead.
-
-  This can be used, if it is possible that a widget might be deleted during
-  a callback or similar function. The widget pointer must be added to the
-  watch list before calling the callback. After the callback the widget
-  pointer can be queried, if it is NULL. \e If it is NULL, then the widget has been
-  deleted during the callback and must not be accessed anymore. If the widget
-  pointer is \e not NULL, then the widget has not been deleted and can be accessed
-  safely.
-
-  After accessing the widget, the widget pointer must be released from the
-  watch list by calling Fl::release_widget_pointer().
-
-  Example for a button that is clicked (from its handle() method):
-  \code
-    Fl_Widget *wp = this;		// save 'this' in a pointer variable
-    Fl::watch_widget_pointer(wp);	// add the pointer to the watch list
-    set_changed();			// set the changed flag
-    do_callback();			// call the callback
-    if (!wp) {				// the widget has been deleted
-
-      // DO NOT ACCESS THE DELETED WIDGET !
-
-    } else {				// the widget still exists
-      clear_changed();			// reset the changed flag
-    }
-
-    Fl::release_widget_pointer(wp);	// remove the pointer from the watch list
-   \endcode
-
-   This works, because all widgets call Fl::clear_widget_pointer() in their
-   destructors.
-
-   \see Fl::release_widget_pointer()
-   \see Fl::clear_widget_pointer()
-
-   An easier and more convenient method to control widget deletion during
-   callbacks is to use the class Fl_Widget_Tracker with a local (automatic)
-   variable.
-
-   \see class Fl_Widget_Tracker
-*/
-void Fl::watch_widget_pointer(Fl_Widget *&w)
-{
-  Fl_Widget **wp = &w;
-  int i;
-  for (i=0; i<num_widget_watch; ++i) {
-    if (widget_watch[i]==wp) return;
-  }
-  if (num_widget_watch==max_widget_watch) {
-    max_widget_watch += 8;
-    widget_watch = (Fl_Widget***)realloc(widget_watch, sizeof(Fl_Widget**)*max_widget_watch);
-  }
-  widget_watch[num_widget_watch++] = wp;
-#ifdef DEBUG_WATCH
-  printf ("\nwatch_widget_pointer:   (%d/%d) %8p => %8p\n",
-    num_widget_watch,num_widget_watch,wp,*wp);
-  fflush(stdout);
-#endif // DEBUG_WATCH
-}
-
-/**
-  Releases a widget pointer from the watch list.
-
-  This is used to remove a widget pointer that has been added to the watch list
-  with Fl::watch_widget_pointer(), when it is not needed anymore.
-
-  \note Internal use only, please use class Fl_Widget_Tracker instead.
-
-  \see Fl::watch_widget_pointer()
-*/
-void Fl::release_widget_pointer(Fl_Widget *&w)
-{
-  Fl_Widget **wp = &w;
-  int i,j=0;
-  for (i=0; i<num_widget_watch; ++i) {
-    if (widget_watch[i]!=wp) {
-      if (j<i) widget_watch[j] = widget_watch[i]; // fill gap
-      j++;
-    }
-#ifdef DEBUG_WATCH
-    else { // found widget pointer
-      printf ("release_widget_pointer: (%d/%d) %8p => %8p\n",
-	i+1,num_widget_watch,wp,*wp);
-    }
-#endif //DEBUG_WATCH
-  }
-  num_widget_watch = j;
-#ifdef DEBUG_WATCH
-  printf ("                        num_widget_watch = %d\n\n",num_widget_watch);
-  fflush(stdout);
-#endif // DEBUG_WATCH
-  return;
-}
-/**
-  Clears a widget pointer \e in the watch list.
-
-  This is called when a widget is destroyed (by its destructor). You should never
-  call this directly.
-
-  \note Internal use only !
-
-  This method searches the widget watch list for pointers to the widget and
-  clears each pointer that points to it. Widget pointers can be added to the
-  widget watch list by calling Fl::watch_widget_pointer() or by using the
-  helper class Fl_Widget_Tracker (recommended).
-
-  \see Fl::watch_widget_pointer()
-  \see class Fl_Widget_Tracker
-*/
-void Fl::clear_widget_pointer(Fl_Widget const *w)
-{
-  if (w==0L) return;
-  int i;
-  for (i=0; i<num_widget_watch; ++i) {
-    if (widget_watch[i] && *widget_watch[i]==w) {
-      *widget_watch[i] = 0L;
-    }
-  }
-}
-
-
-/**
- \brief FLTK library options management.
-
- This function needs to be documented in more detail. It can be used for more
- optional settings, such as using a native file chooser instead of the FLTK one
- wherever possible, disabling tooltips, disabling visible focus, disabling
- FLTK file chooser preview, etc. .
-
- There should be a command line option interface.
-
- There should be an application that manages options system wide, per user, and
- per application.
-
- \note As of FLTK 1.3.0, options can be managed within fluid, using the menu
- <i>Edit/Global FLTK Settings</i>.
-
- \param opt which option
- \return true or false
- \see enum Fl::Fl_Option
- \see Fl::option(Fl_Option, bool)
-
- \since FLTK 1.3.0
- */
-bool Fl::option(Fl_Option opt)
-{
-  if (!options_read_) {
-    int tmp;
-    { // first, read the system wide preferences
-      Fl_Preferences prefs(Fl_Preferences::SYSTEM, "fltk.org", "fltk");
-      Fl_Preferences opt_prefs(prefs, "options");
-      opt_prefs.get("ArrowFocus", tmp, 0);                      // default: off
-      options_[OPTION_ARROW_FOCUS] = tmp;
-      //opt_prefs.get("NativeFilechooser", tmp, 1);             // default: on
-      //options_[OPTION_NATIVE_FILECHOOSER] = tmp;
-      //opt_prefs.get("FilechooserPreview", tmp, 1);            // default: on
-      //options_[OPTION_FILECHOOSER_PREVIEW] = tmp;
-      opt_prefs.get("VisibleFocus", tmp, 1);                    // default: on
-      options_[OPTION_VISIBLE_FOCUS] = tmp;
-      opt_prefs.get("DNDText", tmp, 1);                         // default: on
-      options_[OPTION_DND_TEXT] = tmp;
-      opt_prefs.get("ShowTooltips", tmp, 1);                    // default: on
-      options_[OPTION_SHOW_TOOLTIPS] = tmp;
-    }
-    { // next, check the user preferences
-      // override system options only, if the option is set ( >= 0 )
-      Fl_Preferences prefs(Fl_Preferences::USER, "fltk.org", "fltk");
-      Fl_Preferences opt_prefs(prefs, "options");
-      opt_prefs.get("ArrowFocus", tmp, -1);
-      if (tmp >= 0) options_[OPTION_ARROW_FOCUS] = tmp;
-      //opt_prefs.get("NativeFilechooser", tmp, -1);
-      //if (tmp >= 0) options_[OPTION_NATIVE_FILECHOOSER] = tmp;
-      //opt_prefs.get("FilechooserPreview", tmp, -1);
-      //if (tmp >= 0) options_[OPTION_FILECHOOSER_PREVIEW] = tmp;
-      opt_prefs.get("VisibleFocus", tmp, -1);
-      if (tmp >= 0) options_[OPTION_VISIBLE_FOCUS] = tmp;
-      opt_prefs.get("DNDText", tmp, -1);
-      if (tmp >= 0) options_[OPTION_DND_TEXT] = tmp;
-      opt_prefs.get("ShowTooltips", tmp, -1);
-      if (tmp >= 0) options_[OPTION_SHOW_TOOLTIPS] = tmp;
-    }
-    { // now, if the developer has registered this app, we could as for per-application preferences
-    }
-    options_read_ = 1;
-  }
-  if (opt<0 || opt>=OPTION_LAST)
-    return false;
-  return (bool)(options_[opt]!=0);
-}
-
-/**
- \brief Override an option while the application is running.
-
- This function does not change any system or user settings.
-
- \param opt which option
- \param val set to true or false
- \see enum Fl::Fl_Option
- \see bool Fl::option(Fl_Option)
- */
-void Fl::option(Fl_Option opt, bool val)
-{
-  if (opt<0 || opt>=OPTION_LAST)
-    return;
-  if (!options_read_) {
-    // first read this option, so we don't override our setting later
-    option(opt);
-  }
-  options_[opt] = val;
-}
-
-
-// Helper class Fl_Widget_Tracker
-
-/**
-  The constructor adds a widget to the watch list.
-*/
-Fl_Widget_Tracker::Fl_Widget_Tracker(Fl_Widget *wi)
-{
-  wp_ = wi;
-  Fl::watch_widget_pointer(wp_); // add pointer to watch list
-}
-
-/**
-  The destructor removes a widget from the watch list.
-*/
-Fl_Widget_Tracker::~Fl_Widget_Tracker()
-{
-  Fl::release_widget_pointer(wp_); // remove pointer from watch list
-}
-
-
-//
-// End of "$Id: Fl.cxx 8723 2011-05-23 16:49:02Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Adjuster.cxx b/common/fltk/src/Fl_Adjuster.cxx
deleted file mode 100644
index 150504f..0000000
--- a/common/fltk/src/Fl_Adjuster.cxx
+++ /dev/null
@@ -1,182 +0,0 @@
-//
-// "$Id: Fl_Adjuster.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Adjuster widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Adjuster.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/fl_draw.H>
-
-#include "fastarrow.h"
-static Fl_Bitmap fastarrow(fastarrow_bits, fastarrow_width, fastarrow_height);
-#include "mediumarrow.h"
-static Fl_Bitmap mediumarrow(mediumarrow_bits, mediumarrow_width, mediumarrow_height);
-#include "slowarrow.h"
-static Fl_Bitmap slowarrow(slowarrow_bits, slowarrow_width, slowarrow_height);
-
-// changing the value does not change the appearance:
-void Fl_Adjuster::value_damage() {}
-
-void Fl_Adjuster::draw() {
-  int dx, dy, W, H;
-  if (w()>=h()) {
-    dx = W = w()/3;
-    dy = 0; H = h();
-  } else {
-    dx = 0; W = w();
-    dy = H = h()/3;
-  }
-  draw_box(drag==1?FL_DOWN_BOX:box(), x(),  y()+2*dy, W, H, color());
-  draw_box(drag==2?FL_DOWN_BOX:box(), x()+dx, y()+dy, W, H, color());
-  draw_box(drag==3?FL_DOWN_BOX:box(), x()+2*dx,  y(), W, H, color());
-  if (active_r())
-    fl_color(selection_color());
-  else
-    fl_color(fl_inactive(selection_color()));
-  fastarrow.draw(x()+(W-fastarrow_width)/2,
-		 y()+2*dy+(H-fastarrow_height)/2, W, H);
-  mediumarrow.draw(x()+dx+(W-mediumarrow_width)/2,
-		   y()+dy+(H-mediumarrow_height)/2, W, H);
-  slowarrow.draw(x()+2*dx+(W-slowarrow_width)/2,
-		 y()+(H-slowarrow_width)/2, W, H);
-  if (Fl::focus() == this) draw_focus();
-}
-
-int Fl_Adjuster::handle(int event) {
-  double v;
-  int delta;
-  int mx = Fl::event_x();
-  // Fl_Widget_Tracker wp(this);
-  switch (event) {
-    case FL_PUSH:
-      if (Fl::visible_focus()) Fl::focus(this);
-      ix = mx;
-      if (w()>=h())
-	drag = 3*(mx-x())/w() + 1;
-      else
-	drag = 3-3*(Fl::event_y()-y()-1)/h();
-      { Fl_Widget_Tracker wp(this);
-	handle_push();
-	if (wp.deleted()) return 1;
-      }
-      redraw();
-      return 1;
-    case FL_DRAG:
-      if (w() >= h()) {
-	delta = x()+(drag-1)*w()/3;	// left edge of button
-	if (mx < delta)
-	  delta = mx-delta;
-	else if (mx > (delta+w()/3)) // right edge of button
-	  delta = mx-delta-w()/3;
-	else
-	  delta = 0;
-      } else {
-	if (mx < x())
-	  delta = mx-x();
-	else if (mx > (x()+w()))
-	  delta = mx-x()-w();
-	else
-	  delta = 0;
-      }
-      switch (drag) {
-	case 3: v = increment(previous_value(), delta); break;
-	case 2: v = increment(previous_value(), delta*10); break;
-	default:v = increment(previous_value(), delta*100); break;
-      }
-      handle_drag(soft() ? softclamp(v) : clamp(v));
-      return 1;
-    case FL_RELEASE:
-      if (Fl::event_is_click()) { // detect click but no drag
-	if (Fl::event_state()&0xF0000) delta = -10;
-	else delta = 10;
-	switch (drag) {
-	  case 3: v = increment(previous_value(), delta); break;
-	  case 2: v = increment(previous_value(), delta*10); break;
-	  default:v = increment(previous_value(), delta*100); break;
-	}
-	Fl_Widget_Tracker wp(this);
-	handle_drag(soft() ? softclamp(v) : clamp(v));
-	if (wp.deleted()) return 1;
-      }
-      drag = 0;
-      redraw();
-      handle_release();
-      return 1;
-    case FL_KEYBOARD :
-      switch (Fl::event_key()) {
-	case FL_Up:
-          if (w() > h()) return 0;
-	  handle_drag(clamp(increment(value(),-1)));
-	  return 1;
-	case FL_Down:
-          if (w() > h()) return 0;
-	  handle_drag(clamp(increment(value(),1)));
-	  return 1;
-	case FL_Left:
-          if (w() < h()) return 0;
-	  handle_drag(clamp(increment(value(),-1)));
-	  return 1;
-	case FL_Right:
-          if (w() < h()) return 0;
-	  handle_drag(clamp(increment(value(),1)));
-	  return 1;
-	default:
-          return 0;
-      }
-      // break not required because of switch...
-
-    case FL_FOCUS:
-    case FL_UNFOCUS:
-      if (Fl::visible_focus()) {
-        redraw();
-        return 1;
-      } else return 0;
-
-    case FL_ENTER :
-    case FL_LEAVE :
-      return 1;
-  }
-  return 0;
-}
-
-/**
-  Creates a new Fl_Adjuster widget using the given position,
-  size, and label string. It looks best if one of the dimensions is 3
-  times the other.
-  <P> Inherited destructor destroys the Valuator.
-*/
-Fl_Adjuster::Fl_Adjuster(int X, int Y, int W, int H, const char* l)
-  : Fl_Valuator(X, Y, W, H, l) {
-  box(FL_UP_BOX);
-  step(1, 10000);
-  selection_color(FL_SELECTION_COLOR);
-  drag = 0;
-  soft_ = 1;
-}
-
-//
-// End of "$Id: Fl_Adjuster.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Bitmap.cxx b/common/fltk/src/Fl_Bitmap.cxx
deleted file mode 100644
index daef86a..0000000
--- a/common/fltk/src/Fl_Bitmap.cxx
+++ /dev/null
@@ -1,482 +0,0 @@
-//
-// "$Id: Fl_Bitmap.cxx 8360 2011-02-02 12:42:47Z manolo $"
-//
-// Bitmap drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \fn Fl_Bitmap::Fl_Bitmap(const char *array, int W, int H)
-  The constructors create a new bitmap from the specified bitmap data.*/
-
-/** \fn Fl_Bitmap::Fl_Bitmap(const unsigned char *array, int W, int H)
-  The constructors create a new bitmap from the specified bitmap data.*/
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/Fl_Printer.H>
-#include "flstring.h"
-
-#if defined(__APPLE_QUARTZ__)
-
-
-Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *array) {
-  static uchar reverse[16] =    /* Bit reversal lookup table */
-    { 0x00, 0x88, 0x44, 0xcc, 0x22, 0xaa, 0x66, 0xee, 
-      0x11, 0x99, 0x55, 0xdd, 0x33, 0xbb, 0x77, 0xff };
-  int rowBytes = (w+7)>>3 ;
-  uchar *bmask = (uchar*)malloc(rowBytes*h), *dst = bmask;
-  const uchar *src = array;
-  for ( int i=rowBytes*h; i>0; i--,src++ ) {
-    *dst++ = ((reverse[*src & 0x0f] & 0xf0) | (reverse[(*src >> 4) & 0x0f] & 0x0f))^0xff;
-  }
-  CGDataProviderRef srcp = CGDataProviderCreateWithData( 0L, bmask, rowBytes*h, 0L);
-  CGImageRef id_ = CGImageMaskCreate( w, h, 1, 1, rowBytes, srcp, 0L, false);
-  CGDataProviderRelease(srcp);
-  return (Fl_Bitmask)id_;
-}
-void fl_delete_bitmask(Fl_Bitmask bm) {
-  if (bm) CGImageRelease((CGImageRef)bm);
-}
-
-
-#elif defined(WIN32) // Windows bitmask functions...
-
-
-// 'fl_create_bitmap()' - Create a 1-bit bitmap for drawing...
-static Fl_Bitmask fl_create_bitmap(int w, int h, const uchar *data) {
-  // we need to pad the lines out to words & swap the bits
-  // in each byte.
-  int w1 = (w+7)/8;
-  int w2 = ((w+15)/16)*2;
-  uchar* newarray = new uchar[w2*h];
-  const uchar* src = data;
-  uchar* dest = newarray;
-  Fl_Bitmask bm;
-  static uchar reverse[16] =	/* Bit reversal lookup table */
-  	      { 0x00, 0x88, 0x44, 0xcc, 0x22, 0xaa, 0x66, 0xee,
-		0x11, 0x99, 0x55, 0xdd, 0x33, 0xbb, 0x77, 0xff };
-
-  for (int y=0; y < h; y++) {
-    for (int n = 0; n < w1; n++, src++)
-      *dest++ = (uchar)((reverse[*src & 0x0f] & 0xf0) |
-	                (reverse[(*src >> 4) & 0x0f] & 0x0f));
-    dest += w2-w1;
-  }
-
-  bm = CreateBitmap(w, h, 1, 1, newarray);
-
-  delete[] newarray;
-
-  return bm;
-}
-
-// 'fl_create_bitmask()' - Create an N-bit bitmap for masking...
-Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data) {
-  // this won't work when the user changes display mode during run or
-  // has two screens with differnet depths
-  Fl_Bitmask bm;
-  static uchar hiNibble[16] =
-  { 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
-    0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0 };
-  static uchar loNibble[16] =
-  { 0x00, 0x08, 0x04, 0x0c, 0x02, 0x0a, 0x06, 0x0e,
-    0x01, 0x09, 0x05, 0x0d, 0x03, 0x0b, 0x07, 0x0f };
-  int np  = GetDeviceCaps(fl_gc, PLANES);	//: was always one on sample machines
-  int bpp = GetDeviceCaps(fl_gc, BITSPIXEL);//: 1,4,8,16,24,32 and more odd stuff?
-  int Bpr = (bpp*w+7)/8;			//: bytes per row
-  int pad = Bpr&1, w1 = (w+7)/8, shr = ((w-1)&7)+1;
-  if (bpp==4) shr = (shr+1)/2;
-  uchar *newarray = new uchar[(Bpr+pad)*h];
-  uchar *dst = newarray;
-  const uchar *src = data;
-
-  for (int i=0; i<h; i++) {
-    // This is slooow, but we do it only once per pixmap
-    for (int j=w1; j>0; j--) {
-      uchar b = *src++;
-      if (bpp==1) {
-        *dst++ = (uchar)( hiNibble[b&15] ) | ( loNibble[(b>>4)&15] );
-      } else if (bpp==4) {
-        for (int k=(j==1)?shr:4; k>0; k--) {
-          *dst++ = (uchar)("\377\360\017\000"[b&3]);
-          b = b >> 2;
-        }
-      } else {
-        for (int k=(j==1)?shr:8; k>0; k--) {
-          if (b&1) {
-            *dst++=0;
-	    if (bpp>8) *dst++=0;
-            if (bpp>16) *dst++=0;
-	    if (bpp>24) *dst++=0;
-	  } else {
-	    *dst++=0xff;
-	    if (bpp>8) *dst++=0xff;
-	    if (bpp>16) *dst++=0xff;
-	    if (bpp>24) *dst++=0xff;
-	  }
-
-	  b = b >> 1;
-        }
-      }
-    }
-
-    dst += pad;
-  }
-
-  bm = CreateBitmap(w, h, np, bpp, newarray);
-  delete[] newarray;
-
-  return bm;
-}
-
-
-void fl_delete_bitmask(Fl_Bitmask bm) {
-  DeleteObject((HGDIOBJ)bm);
-}
-
-
-#else // X11 bitmask functions
-
-
-Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data) {
-  return XCreateBitmapFromData(fl_display, fl_window, (const char *)data,
-                               (w+7)&-8, h);
-}
-
-void fl_delete_bitmask(Fl_Bitmask bm) {
-  fl_delete_offscreen((Fl_Offscreen)bm);
-}
-
-
-#endif // __APPLE__
-
-
-// Create a 1-bit mask used for alpha blending
-Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *array) {
-  Fl_Bitmask bm;
-  int bmw = (w + 7) / 8;
-  uchar *bitmap = new uchar[bmw * h];
-  uchar *bitptr, bit;
-  const uchar *dataptr;
-  int x, y;
-  static uchar dither[16][16] = { // Simple 16x16 Floyd dither
-    { 0,   128, 32,  160, 8,   136, 40,  168,
-      2,   130, 34,  162, 10,  138, 42,  170 },
-    { 192, 64,  224, 96,  200, 72,  232, 104,
-      194, 66,  226, 98,  202, 74,  234, 106 },
-    { 48,  176, 16,  144, 56,  184, 24,  152,
-      50,  178, 18,  146, 58,  186, 26,  154 },
-    { 240, 112, 208, 80,  248, 120, 216, 88,
-      242, 114, 210, 82,  250, 122, 218, 90 },
-    { 12,  140, 44,  172, 4,   132, 36,  164,
-      14,  142, 46,  174, 6,   134, 38,  166 },
-    { 204, 76,  236, 108, 196, 68,  228, 100,
-      206, 78,  238, 110, 198, 70,  230, 102 },
-    { 60,  188, 28,  156, 52,  180, 20,  148,
-      62,  190, 30,  158, 54,  182, 22,  150 },
-    { 252, 124, 220, 92,  244, 116, 212, 84,
-      254, 126, 222, 94,  246, 118, 214, 86 },
-    { 3,   131, 35,  163, 11,  139, 43,  171,
-      1,   129, 33,  161, 9,   137, 41,  169 },
-    { 195, 67,  227, 99,  203, 75,  235, 107,
-      193, 65,  225, 97,  201, 73,  233, 105 },
-    { 51,  179, 19,  147, 59,  187, 27,  155,
-      49,  177, 17,  145, 57,  185, 25,  153 },
-    { 243, 115, 211, 83,  251, 123, 219, 91,
-      241, 113, 209, 81,  249, 121, 217, 89 },
-    { 15,  143, 47,  175, 7,   135, 39,  167,
-      13,  141, 45,  173, 5,   133, 37,  165 },
-    { 207, 79,  239, 111, 199, 71,  231, 103,
-      205, 77,  237, 109, 197, 69,  229, 101 },
-    { 63,  191, 31,  159, 55,  183, 23,  151,
-      61,  189, 29,  157, 53,  181, 21,  149 },
-    { 254, 127, 223, 95,  247, 119, 215, 87,
-      253, 125, 221, 93,  245, 117, 213, 85 }
-  };
-
-  // Generate a 1-bit "screen door" alpha mask; not always pretty, but
-  // definitely fast...  In the future we may be able to support things
-  // like the RENDER extension in XFree86, when available, to provide
-  // true RGBA-blended rendering.  See:
-  //
-  //     http://www.xfree86.org/~keithp/render/protocol.html
-  //
-  // for more info on XRender...
-  //
-  // MacOS already provides alpha blending support and has its own
-  // fl_create_alphamask() function...
-  memset(bitmap, 0, bmw * h);
-
-  for (dataptr = array + d - 1, y = 0; y < h; y ++, dataptr += ld)
-    for (bitptr = bitmap + y * bmw, bit = 1, x = 0; x < w; x ++, dataptr += d) {
-      if (*dataptr > dither[x & 15][y & 15])
-	*bitptr |= bit;
-      if (bit < 128) bit <<= 1;
-      else {
-	bit = 1;
-	bitptr ++;
-      }
-    }
-
-  bm = fl_create_bitmask(w, h, bitmap);
-  delete[] bitmap;
-
-  return (bm);
-}
-
-void Fl_Bitmap::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
-  fl_graphics_driver->draw(this, XP, YP, WP, HP, cx, cy);
-}
-
-static int start(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int w, int h, int &cx, int &cy, 
-		 int &X, int &Y, int &W, int &H)
-{
-  // account for current clip region (faster on Irix):
-  fl_clip_box(XP,YP,WP,HP,X,Y,W,H);
-  cx += X-XP; cy += Y-YP;
-  // clip the box down to the size of image, quit if empty:
-  if (cx < 0) {W += cx; X -= cx; cx = 0;}
-  if (cx+W > w) W = w-cx;
-  if (W <= 0) return 1;
-  if (cy < 0) {H += cy; Y -= cy; cy = 0;}
-  if (cy+H > h) H = h-cy;
-  if (H <= 0) return 1;
-  return 0;
-}
-
-#ifdef __APPLE__
-void Fl_Quartz_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (!bm->array) {
-    bm->draw_empty(XP, YP);
-    return;
-  }
-  if (start(bm, XP, YP, WP, HP, bm->w(), bm->h(), cx, cy, X, Y, W, H)) {
-    return;
-  }
-  if (!bm->id_) bm->id_ = fl_create_bitmask(bm->w(), bm->h(), bm->array);
-  if (bm->id_ && fl_gc) {
-    CGRect rect = { { X, Y }, { W, H } };
-    Fl_X::q_begin_image(rect, cx, cy, bm->w(), bm->h());
-    CGContextDrawImage(fl_gc, rect, (CGImageRef)bm->id_);
-    Fl_X::q_end_image();
-  }
-}
-
-#elif defined(WIN32)
-void Fl_GDI_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (!bm->array) {
-    bm->draw_empty(XP, YP);
-    return;
-  }
-  if (start(bm, XP, YP, WP, HP, bm->w(), bm->h(), cx, cy, X, Y, W, H)) {
-    return;
-  }
-  if (!bm->id_) bm->id_ = fl_create_bitmap(bm->w(), bm->h(), bm->array);
-  
-  typedef BOOL (WINAPI* fl_transp_func)  (HDC,int,int,int,int,HDC,int,int,int,int,UINT);
-  static fl_transp_func fl_TransparentBlt;
-  HDC tempdc;
-  int save;
-  BOOL use_print_algo = false;
-  if (Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) {
-    static HMODULE hMod = NULL;
-    if (!hMod) {
-      hMod = LoadLibrary("MSIMG32.DLL");
-      if (hMod) fl_TransparentBlt = (fl_transp_func)GetProcAddress(hMod, "TransparentBlt");
-    }
-    if (fl_TransparentBlt) use_print_algo = true;
-  }
-  if (use_print_algo) { // algorithm for bitmap output to Fl_GDI_Printer
-    Fl_Offscreen tmp_id = fl_create_offscreen(W, H);
-    fl_begin_offscreen(tmp_id);
-    Fl_Color save_c = fl_color(); // save bitmap's desired color
-    uchar r, g, b;
-    Fl::get_color(save_c, r, g, b);
-    r = 255-r;
-    g = 255-g;
-    b = 255-b;
-    Fl_Color background = fl_rgb_color(r, g, b); // a color very different from the bitmap's
-    fl_color(background);
-    fl_rectf(0,0,W,H); // use this color as offscreen background
-    fl_color(save_c); // back to bitmap's color
-    tempdc = CreateCompatibleDC(fl_gc);
-    save = SaveDC(tempdc);
-    SelectObject(tempdc, (HGDIOBJ)bm->id_);
-    SelectObject(fl_gc, fl_brush()); // use bitmap's desired color
-    BitBlt(fl_gc, 0, 0, W, H, tempdc, 0, 0, 0xE20746L); // draw bitmap to offscreen
-    fl_end_offscreen(); // offscreen data is in tmp_id
-    SelectObject(tempdc, (HGDIOBJ)tmp_id); // use offscreen data
-    // draw it to printer context with background color as transparent
-    fl_TransparentBlt(fl_gc, X,Y,W,H, tempdc, cx, cy, bm->w(), bm->h(), RGB(r, g, b) ); 
-    fl_delete_offscreen(tmp_id);
-  }
-  else { // algorithm for bitmap output to display
-    tempdc = CreateCompatibleDC(fl_gc);
-    save = SaveDC(tempdc);
-    SelectObject(tempdc, (HGDIOBJ)bm->id_);
-    SelectObject(fl_gc, fl_brush());
-    // secret bitblt code found in old MSWindows reference manual:
-    BitBlt(fl_gc, X, Y, W, H, tempdc, cx, cy, 0xE20746L);
-  }
-  RestoreDC(tempdc, save);
-  DeleteDC(tempdc);
-}  
-
-#else // Xlib
-void Fl_Xlib_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (!bm->array) {
-    bm->draw_empty(XP, YP);
-    return;
-  }
-  if (start(bm, XP, YP, WP, HP, bm->w(), bm->h(), cx, cy, X, Y, W, H)) {
-    return;
-  }
-  if (!bm->id_) bm->id_ = fl_create_bitmask(bm->w(), bm->h(), bm->array);
-  
-  XSetStipple(fl_display, fl_gc, bm->id_);
-  int ox = X-cx; if (ox < 0) ox += bm->w();
-  int oy = Y-cy; if (oy < 0) oy += bm->h();
-  XSetTSOrigin(fl_display, fl_gc, ox, oy);
-  XSetFillStyle(fl_display, fl_gc, FillStippled);
-  XFillRectangle(fl_display, fl_window, fl_gc, X, Y, W, H);
-  XSetFillStyle(fl_display, fl_gc, FillSolid);
-}
-#endif
-
-/**
-  The destructor free all memory and server resources that are used by
-  the bitmap.
-*/
-Fl_Bitmap::~Fl_Bitmap() {
-  uncache();
-  if (alloc_array) delete[] (uchar *)array;
-}
-
-void Fl_Bitmap::uncache() {
-  if (id_) {
-#ifdef __APPLE_QUARTZ__
-    fl_delete_bitmask((Fl_Bitmask)id_);
-#else
-    fl_delete_bitmask((Fl_Offscreen)id_);
-#endif
-    id_ = 0;
-  }
-}
-
-void Fl_Bitmap::label(Fl_Widget* widget) {
-  widget->image(this);
-}
-
-void Fl_Bitmap::label(Fl_Menu_Item* m) {
-  Fl::set_labeltype(_FL_IMAGE_LABEL, labeltype, measure);
-  m->label(_FL_IMAGE_LABEL, (const char*)this);
-}
-
-Fl_Image *Fl_Bitmap::copy(int W, int H) {
-  Fl_Bitmap	*new_image;	// New RGB image
-  uchar		*new_array;	// New array for image data
-
-  // Optimize the simple copy where the width and height are the same...
-  if (W == w() && H == h()) {
-    new_array = new uchar [H * ((W + 7) / 8)];
-    memcpy(new_array, array, H * ((W + 7) / 8));
-
-    new_image = new Fl_Bitmap(new_array, W, H);
-    new_image->alloc_array = 1;
-
-    return new_image;
-  }
-  if (W <= 0 || H <= 0) return 0;
-
-  // OK, need to resize the image data; allocate memory and 
-  uchar		*new_ptr,	// Pointer into new array
-		new_bit,	// Bit for new array
-		old_bit;	// Bit for old array
-  const uchar	*old_ptr;	// Pointer into old array
-  int		sx, sy,		// Source coordinates
-		dx, dy,		// Destination coordinates
-		xerr, yerr,	// X & Y errors
-		xmod, ymod,	// X & Y moduli
-		xstep, ystep;	// X & Y step increments
-
-
-  // Figure out Bresenheim step/modulus values...
-  xmod   = w() % W;
-  xstep  = w() / W;
-  ymod   = h() % H;
-  ystep  = h() / H;
-
-  // Allocate memory for the new image...
-  new_array = new uchar [H * ((W + 7) / 8)];
-  new_image = new Fl_Bitmap(new_array, W, H);
-  new_image->alloc_array = 1;
-
-  memset(new_array, 0, H * ((W + 7) / 8));
-
-  // Scale the image using a nearest-neighbor algorithm...
-  for (dy = H, sy = 0, yerr = H, new_ptr = new_array; dy > 0; dy --) {
-    for (dx = W, xerr = W, old_ptr = array + sy * ((w() + 7) / 8), sx = 0, new_bit = 1;
-	 dx > 0;
-	 dx --) {
-      old_bit = (uchar)(1 << (sx & 7));
-      if (old_ptr[sx / 8] & old_bit) *new_ptr |= new_bit;
-
-      if (new_bit < 128) new_bit <<= 1;
-      else {
-        new_bit = 1;
-	new_ptr ++;
-      }
-
-      sx   += xstep;
-      xerr -= xmod;
-
-      if (xerr <= 0) {
-	xerr += W;
-	sx ++;
-      }
-    }
-
-    if (new_bit > 1) new_ptr ++;
-
-    sy   += ystep;
-    yerr -= ymod;
-    if (yerr <= 0) {
-      yerr += H;
-      sy ++;
-    }
-  }
-
-  return new_image;
-}
-
-
-//
-// End of "$Id: Fl_Bitmap.cxx 8360 2011-02-02 12:42:47Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Box.cxx b/common/fltk/src/Fl_Box.cxx
deleted file mode 100644
index 9450cf6..0000000
--- a/common/fltk/src/Fl_Box.cxx
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// "$Id: Fl_Box.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Box widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Box.H>
-
-void Fl_Box::draw() {
-  draw_box();
-  draw_label();
-}
-
-int Fl_Box::handle(int event) {
-  if (event == FL_ENTER || event == FL_LEAVE) return 1;
-  else return 0;
-}
-
-
-//
-// End of "$Id: Fl_Box.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Browser.cxx b/common/fltk/src/Fl_Browser.cxx
deleted file mode 100644
index d62b4f4..0000000
--- a/common/fltk/src/Fl_Browser.cxx
+++ /dev/null
@@ -1,949 +0,0 @@
-//
-// "$Id: Fl_Browser.cxx 8736 2011-05-24 20:00:56Z AlbrechtS $"
-//
-// Browser widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Browser.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-#include <stdlib.h>
-#include <math.h>
-
-#if defined(FL_DLL)	// really needed for c'tors for MS VC++ only
-#include <FL/Fl_Hold_Browser.H>
-#include <FL/Fl_Multi_Browser.H>
-#include <FL/Fl_Select_Browser.H>
-#endif
-
-// I modified this from the original Forms data to use a linked list
-// so that the number of items in the browser and size of those items
-// is unlimited. The only problem is that the old browser used an
-// index number to identify a line, and it is slow to convert from/to
-// a pointer. I use a cache of the last match to try to speed this up.
-
-// Also added the ability to "hide" a line. This sets its height to
-// zero, so the Fl_Browser_ cannot pick it.
-
-#define SELECTED 1
-#define NOTDISPLAYED 2
-
-// WARNING:
-//       Fl_File_Chooser.cxx also has a definition of this structure (FL_BLINE).
-//       Changes to FL_BLINE *must* be reflected in Fl_File_Chooser.cxx as well.
-//       This hack in Fl_File_Chooser should be solved.
-//
-struct FL_BLINE {	// data is in a linked list of these
-  FL_BLINE* prev;
-  FL_BLINE* next;
-  void* data;
-  Fl_Image* icon;
-  short length;		// sizeof(txt)-1, may be longer than string
-  char flags;		// selected, displayed
-  char txt[1];		// start of allocated array
-};
-
-/**
-  Returns the very first item in the list.
-  Example of use:
-  \code
-  // Walk the browser from beginning to end
-  for ( void *i=item_first(); i; i=item_next(i) ) {
-      printf("item label='%s'\n", item_text(i));
-  }
-  \endcode
-  \returns The first item, or NULL if list is empty.
-  \see item_first(), item_last(), item_next(), item_prev()
-*/
-void* Fl_Browser::item_first() const {return first;}
-
-/**
-  Returns the next item after \p item.
-  \param[in] item The 'current' item
-  \returns The next item after \p item, or NULL if there are none after this one.
-  \see item_first(), item_last(), item_next(), item_prev()
-*/
-void* Fl_Browser::item_next(void* item) const {return ((FL_BLINE*)item)->next;}
-
-/**
-  Returns the previous item before \p item.
-  \param[in] item The 'current' item
-  \returns The previous item before \p item, or NULL if there none before this one.
-  \see item_first(), item_last(), item_next(), item_prev()
-*/
-void* Fl_Browser::item_prev(void* item) const {return ((FL_BLINE*)item)->prev;}
-
-/**
-  Returns the very last item in the list.
-  Example of use:
-  \code
-  // Walk the browser in reverse, from end to start
-  for ( void *i=item_last(); i; i=item_prev(i) ) {
-      printf("item label='%s'\n", item_text(i));
-  }
-  \endcode
-  \returns The last item, or NULL if list is empty.
-  \see item_first(), item_last(), item_next(), item_prev()
-*/
-void* Fl_Browser::item_last() const {return last;}
-
-/**
-  See if \p item is selected.
-  \param[in] item The item whose selection state is to be checked.
-  \returns 1 if selected, 0 if not.
-  \see select(), selected(), value(), item_select(), item_selected()
-*/
-int Fl_Browser::item_selected(void* item) const {
-  return ((FL_BLINE*)item)->flags&SELECTED;
-}
-/**
-  Change the selection state of \p item to the value \p val.
-  \param[in] item The item to be changed.
-  \param[in] val The new selection state: 1 selects, 0 de-selects.
-  \see select(), selected(), value(), item_select(), item_selected()
-*/
-void Fl_Browser::item_select(void *item, int val) {
-  if (val) ((FL_BLINE*)item)->flags |= SELECTED;
-  else     ((FL_BLINE*)item)->flags &= ~SELECTED;
-}
-
-/**
-  Returns the label text for \p item.
-  \param[in] item The item whose label text is returned.
-  \returns The item's text string. (Can be NULL)
-*/
-const char *Fl_Browser::item_text(void *item) const { 
-  return ((FL_BLINE*)item)->txt;
-}
-
-/**
-  Returns the item for specified \p line.
-
-  Note: This call is slow. It's fine for e.g. responding to user
-  clicks, but slow if called often, such as in a tight sorting loop.
-  Finding an item 'by line' involves a linear lookup on the internal
-  linked list. The performance hit can be significant if the browser's
-  contents is large, and the method is called often (e.g. during a sort).
-  If you're writing a subclass, use the protected methods item_first(),
-  item_next(), etc. to access the internal linked list more efficiently.
-
-  \param[in] line The line number of the item to return. (1 based)
-  \retval item that was found.
-  \retval NULL if line is out of range.
-  \see item_at(), find_line(), lineno()
-*/
-FL_BLINE* Fl_Browser::find_line(int line) const {
-  int n; FL_BLINE* l;
-  if (line == cacheline) return cache;
-  if (cacheline && line > (cacheline/2) && line < ((cacheline+lines)/2)) {
-    n = cacheline; l = cache;
-  } else if (line <= (lines/2)) {
-    n = 1; l = first;
-  } else {
-    n = lines; l = last;
-  }
-  for (; n < line && l; n++) l = l->next;
-  for (; n > line && l; n--) l = l->prev;
-  ((Fl_Browser*)this)->cacheline = line;
-  ((Fl_Browser*)this)->cache = l;
-  return l;
-}
-
-/**
-  Returns line number corresponding to \p item, or zero if not found.
-  Caveat: See efficiency note in find_line().
-  \param[in] item The item to be found
-  \returns The line number of the item, or 0 if not found.
-  \see item_at(), find_line(), lineno()
-*/
-int Fl_Browser::lineno(void *item) const {
-  FL_BLINE* l = (FL_BLINE*)item;
-  if (!l) return 0;
-  if (l == cache) return cacheline;
-  if (l == first) return 1;
-  if (l == last) return lines;
-  if (!cache) {
-    ((Fl_Browser*)this)->cache = first;
-    ((Fl_Browser*)this)->cacheline = 1;
-  }
-  // assume it is near cache, search both directions:
-  FL_BLINE* b = cache->prev;
-  int bnum = cacheline-1;
-  FL_BLINE* f = cache->next;
-  int fnum = cacheline+1;
-  int n = 0;
-  for (;;) {
-    if (b == l) {n = bnum; break;}
-    if (f == l) {n = fnum; break;}
-    if (b) {b = b->prev; bnum--;}
-    if (f) {f = f->next; fnum++;}
-  }
-  ((Fl_Browser*)this)->cache = l;
-  ((Fl_Browser*)this)->cacheline = n;
-  return n;
-}
-
-/**
-  Removes the item at the specified \p line.
-  Caveat: See efficiency note in find_line().
-  You must call redraw() to make any changes visible.
-  \param[in] line The line number to be removed. (1 based) Must be in range!
-  \returns Pointer to browser item that was removed (and is no longer valid).
-  \see add(), insert(), remove(), swap(int,int), clear()
-*/
-FL_BLINE* Fl_Browser::_remove(int line) {
-  FL_BLINE* ttt = find_line(line);
-  deleting(ttt);
-
-  cacheline = line-1;
-  cache = ttt->prev;
-  lines--;
-  full_height_ -= item_height(ttt);
-  if (ttt->prev) ttt->prev->next = ttt->next;
-  else first = ttt->next;
-  if (ttt->next) ttt->next->prev = ttt->prev;
-  else last = ttt->prev;
-
-  return(ttt);
-}
-
-/**
-  Remove entry for given \p line number, making the browser one line shorter.
-  You must call redraw() to make any changes visible.
-  \param[in] line Line to be removed. (1 based) \n
-                  If \p line is out of range, no action is taken.
-  \see add(), insert(), remove(), swap(int,int), clear()
-*/
-void Fl_Browser::remove(int line) {
-  if (line < 1 || line > lines) return;
-  free(_remove(line));
-}
-
-/**
-  Insert specified \p item above \p line.
-  If \p line > size() then the line is added to the end.
-
-  Caveat: See efficiency note in find_line().
-
-  \param[in] line  The new line will be inserted above this line (1 based).
-  \param[in] item  The item to be added.
-*/
-void Fl_Browser::insert(int line, FL_BLINE* item) {
-  if (!first) {
-    item->prev = item->next = 0;
-    first = last = item;
-  } else if (line <= 1) {
-    inserting(first, item);
-    item->prev = 0;
-    item->next = first;
-    item->next->prev = item;
-    first = item;
-  } else if (line > lines) {
-    item->prev = last;
-    item->prev->next = item;
-    item->next = 0;
-    last = item;
-  } else {
-    FL_BLINE* n = find_line(line);
-    inserting(n, item);
-    item->next = n;
-    item->prev = n->prev;
-    item->prev->next = item;
-    n->prev = item;
-  }
-  cacheline = line;
-  cache = item;
-  lines++;
-  full_height_ += item_height(item);
-  redraw_line(item);
-}
-
-/**
-  Insert a new entry whose label is \p newtext \e above given \p line, optional data \p d.
-
-  Text may contain format characters; see format_char() for details.
-  \p newtext is copied using the strdup() function, and can be NULL to make a blank line.
-
-  The optional void * argument \p d will be the data() of the new item.
-
-  \param[in] line Line position for insert. (1 based) \n
-             If \p line > size(), the entry will be added at the end.
-  \param[in] newtext The label text for the new line.
-  \param[in] d Optional pointer to user data to be associated with the new line.
-*/
-void Fl_Browser::insert(int line, const char* newtext, void* d) {
-  int l = strlen(newtext);
-  FL_BLINE* t = (FL_BLINE*)malloc(sizeof(FL_BLINE)+l);
-  t->length = (short)l;
-  t->flags = 0;
-  strcpy(t->txt, newtext);
-  t->data = d;
-  t->icon = 0;
-  insert(line, t);
-}
-
-/**
-  Line \p from is removed and reinserted at \p to.
-  Note: \p to is calculated \e after line \p from gets removed.
-  \param[in] to Destination line number (calculated \e after line \p from is removed)
-  \param[in] from Line number of item to be moved
-*/
-void Fl_Browser::move(int to, int from) {
-  if (from < 1 || from > lines) return;
-  insert(to, _remove(from));
-}
-
-/**
-  Sets the text for the specified \p line to \p newtext.
-
-  Text may contain format characters; see format_char() for details.
-  \p newtext is copied using the strdup() function, and can be NULL to make a blank line.
-
-  Does nothing if \p line is out of range.
-
-  \param[in] line The line of the item whose text will be changed. (1 based)
-  \param[in] newtext The new string to be assigned to the item.
-*/
-void Fl_Browser::text(int line, const char* newtext) {
-  if (line < 1 || line > lines) return;
-  FL_BLINE* t = find_line(line);
-  int l = strlen(newtext);
-  if (l > t->length) {
-    FL_BLINE* n = (FL_BLINE*)malloc(sizeof(FL_BLINE)+l);
-    replacing(t, n);
-    cache = n;
-    n->data = t->data;
-    n->icon = t->icon;
-    n->length = (short)l;
-    n->flags = t->flags;
-    n->prev = t->prev;
-    if (n->prev) n->prev->next = n; else first = n;
-    n->next = t->next;
-    if (n->next) n->next->prev = n; else last = n;
-    free(t);
-    t = n;
-  }
-  strcpy(t->txt, newtext);
-  redraw_line(t);
-}
-
-/**
-  Sets the user data for specified \p line to \p d.
-  Does nothing if \p line is out of range.
-  \param[in] line The line of the item whose data() is to be changed. (1 based)
-  \param[in] d The new data to be assigned to the item. (can be NULL)
-*/
-void Fl_Browser::data(int line, void* d) {
-  if (line < 1 || line > lines) return;
-  find_line(line)->data = d;
-}
-
-/**
-  Returns height of \p item in pixels.
-  This takes into account embedded \@ codes within the text() label.
-  \param[in] item The item whose height is returned.
-  \returns The height of the item in pixels.
-  \see item_height(), item_width(),\n
-       incr_height(), full_height()
-*/
-int Fl_Browser::item_height(void *item) const {
-  FL_BLINE* l = (FL_BLINE*)item;
-  if (l->flags & NOTDISPLAYED) return 0;
-
-  int hmax = 2; // use 2 to insure we don't return a zero!
-
-  if (!l->txt[0]) {
-    // For blank lines set the height to exactly 1 line!
-    fl_font(textfont(), textsize());
-    int hh = fl_height();
-    if (hh > hmax) hmax = hh;
-  } else {
-    const int* i = column_widths();
-    long int dummy;
-    // do each column separately as they may all set different fonts:
-    for (char* str = l->txt; str && *str; str++) {
-      Fl_Font font = textfont(); // default font
-      int tsize = textsize(); // default size
-      while (*str==format_char()) {
-	str++;
-	switch (*str++) {
-	case 'l': case 'L': tsize = 24; break;
-	case 'm': case 'M': tsize = 18; break;
-	case 's': tsize = 11; break;
-	case 'b': font = (Fl_Font)(font|FL_BOLD); break;
-	case 'i': font = (Fl_Font)(font|FL_ITALIC); break;
-	case 'f': case 't': font = FL_COURIER; break;
-	case 'B':
-	case 'C': dummy = strtol(str, &str, 10); break;// skip a color number
-	case 'F': font = (Fl_Font)strtol(str,&str,10); break;
-	case 'S': tsize = strtol(str,&str,10); break;
-	case 0: case '@': str--;
-	case '.': goto END_FORMAT;
-	}
-      }
-      END_FORMAT:
-      char* ptr = str;
-      if (ptr && *i++) str = strchr(str, column_char());
-      else str = NULL;
-      if((!str && *ptr) || (str && ptr < str)) {
-	fl_font(font, tsize); int hh = fl_height();
-	if (hh > hmax) hmax = hh;
-      }
-      if (!str || !*str) break;
-    }
-  }
-
-  if (l->icon && (l->icon->h()+2)>hmax) {
-    hmax = l->icon->h() + 2;	// leave 2px above/below
-  }
-  return hmax; // previous version returned hmax+2!
-}
-
-/**
-  Returns width of \p item in pixels.
-  This takes into account embedded \@ codes within the text() label.
-  \param[in] item The item whose width is returned.
-  \returns The width of the item in pixels.
-  \see item_height(), item_width(),\n
-       incr_height(), full_height()
-*/
-int Fl_Browser::item_width(void *item) const {
-  FL_BLINE* l=(FL_BLINE*)item;
-  char* str = l->txt;
-  const int* i = column_widths();
-  int ww = 0;
-
-  while (*i) { // add up all tab-separated fields
-    char* e;
-    e = strchr(str, column_char());
-    if (!e) break; // last one occupied by text
-    str = e+1;
-    ww += *i++;
-  }
-
-  // OK, we gotta parse the string and find the string width...
-  int tsize = textsize();
-  Fl_Font font = textfont();
-  int done = 0;
-
-  while (*str == format_char_ && str[1] && str[1] != format_char_) {
-    long int dummy;
-    str ++;
-    switch (*str++) {
-    case 'l': case 'L': tsize = 24; break;
-    case 'm': case 'M': tsize = 18; break;
-    case 's': tsize = 11; break;
-    case 'b': font = (Fl_Font)(font|FL_BOLD); break;
-    case 'i': font = (Fl_Font)(font|FL_ITALIC); break;
-    case 'f': case 't': font = FL_COURIER; break;
-    case 'B':
-    case 'C': dummy = strtol(str, &str, 10); break;// skip a color number
-    case 'F': font = (Fl_Font)strtol(str, &str, 10); break;
-    case 'S': tsize = strtol(str, &str, 10); break;
-    case '.':
-      done = 1;
-      break;
-    case '@':
-      str--;
-      done = 1;
-    }
-
-    if (done)
-      break;
-  }
-
-  if (*str == format_char_ && str[1])
-    str ++;
-
-  if (ww==0 && l->icon) ww = l->icon->w();
-
-  fl_font(font, tsize);
-  return ww + int(fl_width(str)) + 6;
-}
-
-/**
-  The height of the entire list of all visible() items in pixels.
-  This returns the accumulated height of *all* the items in the browser
-  that are not hidden with hide(), including items scrolled off screen.
-  \returns The accumulated size of all the visible items in pixels.
-  \see item_height(), item_width(),\n
-       incr_height(), full_height()
-*/
-int Fl_Browser::full_height() const {
-  return full_height_;
-}
-
-/**
-  The default 'average' item height (including inter-item spacing) in pixels.
-  This currently returns textsize() + 2.
-  \returns The value in pixels.
-  \see item_height(), item_width(),\n
-       incr_height(), full_height()
-*/
-int Fl_Browser::incr_height() const {
-  return textsize()+2;
-}
-
-/**
-  Draws \p item at the position specified by \p X \p Y \p W \p H.
-  The \p W and \p H values are used for clipping.
-  Should only be called within the context of an FLTK draw().
-  \param[in] item The item to be drawn
-  \param[in] X,Y,W,H position and size.
-*/
-void Fl_Browser::item_draw(void* item, int X, int Y, int W, int H) const {
-  FL_BLINE* l = (FL_BLINE*)item;
-  char* str = l->txt;
-  const int* i = column_widths();
-
-  bool first = true;	// for icon
-  while (W > 6) {	// do each tab-separated field
-    int w1 = W;	// width for this field
-    char* e = 0; // pointer to end of field or null if none
-    if (*i) { // find end of field and temporarily replace with 0
-      e = strchr(str, column_char());
-      if (e) {*e = 0; w1 = *i++;}
-    }
-    // Icon drawing code
-    if (first) {
-      first = false;
-      if (l->icon) {
-	l->icon->draw(X+2,Y+1);	// leave 2px left, 1px above
-	int iconw = l->icon->w()+2;
-	X += iconw; W -= iconw; w1 -= iconw;
-      }
-    }
-    int tsize = textsize();
-    Fl_Font font = textfont();
-    Fl_Color lcol = textcolor();
-    Fl_Align talign = FL_ALIGN_LEFT;
-    // check for all the @-lines recognized by XForms:
-    //#if defined(__GNUC__)
-    //#warning FIXME This maybe needs to be more UTF8 aware now...?
-    //#endif /*__GNUC__*/
-    while (*str == format_char() && *++str && *str != format_char()) {
-      long int dummy;
-      switch (*str++) {
-      case 'l': case 'L': tsize = 24; break;
-      case 'm': case 'M': tsize = 18; break;
-      case 's': tsize = 11; break;
-      case 'b': font = (Fl_Font)(font|FL_BOLD); break;
-      case 'i': font = (Fl_Font)(font|FL_ITALIC); break;
-      case 'f': case 't': font = FL_COURIER; break;
-      case 'c': talign = FL_ALIGN_CENTER; break;
-      case 'r': talign = FL_ALIGN_RIGHT; break;
-      case 'B': 
-	if (!(l->flags & SELECTED)) {
-	  fl_color((Fl_Color)strtol(str, &str, 10));
-	  fl_rectf(X, Y, w1, H);
-	} else dummy = strtol(str, &str, 10);
-        break;
-      case 'C':
-	lcol = (Fl_Color)strtol(str, &str, 10);
-	break;
-      case 'F':
-	font = (Fl_Font)strtol(str, &str, 10);
-	break;
-      case 'N':
-	lcol = FL_INACTIVE_COLOR;
-	break;
-      case 'S':
-	tsize = strtol(str, &str, 10);
-	break;
-      case '-':
-	fl_color(FL_DARK3);
-	fl_line(X+3, Y+H/2, X+w1-3, Y+H/2);
-	fl_color(FL_LIGHT3);
-	fl_line(X+3, Y+H/2+1, X+w1-3, Y+H/2+1);
-	break;
-      case 'u':
-      case '_':
-	fl_color(lcol);
-	fl_line(X+3, Y+H-1, X+w1-3, Y+H-1);
-	break;
-      case '.':
-	goto BREAK;
-      case '@':
-	str--; goto BREAK;
-      }
-    }
-  BREAK:
-    fl_font(font, tsize);
-    if (l->flags & SELECTED)
-      lcol = fl_contrast(lcol, selection_color());
-    if (!active_r()) lcol = fl_inactive(lcol);
-    fl_color(lcol);
-    fl_draw(str, X+3, Y, w1-6, H, e ? Fl_Align(talign|FL_ALIGN_CLIP) : talign, 0, 0);
-    if (!e) break; // no more fields...
-    *e = column_char(); // put the separator back
-    X += w1;
-    W -= w1;
-    str = e+1;
-  }
-}
-
-static const int no_columns[1] = {0};
-
-/**
-  The constructor makes an empty browser.
-  \param[in] X,Y,W,H position and size.
-  \param[in] L label string, may be NULL.
-*/
-Fl_Browser::Fl_Browser(int X, int Y, int W, int H, const char *L)
-: Fl_Browser_(X, Y, W, H, L) {
-  column_widths_ = no_columns;
-  lines = 0;
-  full_height_ = 0;
-  cacheline = 0;
-  format_char_ = '@';
-  column_char_ = '\t';
-  first = last = cache = 0;
-}
-
-/**
-  Updates the browser so that \p line is shown at position \p pos.
-  \param[in] line line number. (1 based)
-  \param[in] pos position.
-  \see topline(), middleline(), bottomline()
-*/
-void Fl_Browser::lineposition(int line, Fl_Line_Position pos) {
-  if (line<1) line = 1;
-  if (line>lines) line = lines;
-  int p = 0;
-
-  FL_BLINE* l;
-  for (l=first; l && line>1; l = l->next) {
-    line--; p += item_height(l);
-  }
-  if (l && (pos == BOTTOM)) p += item_height (l);
-
-  int final = p, X, Y, W, H;
-  bbox(X, Y, W, H);
-
-  switch(pos) {
-    case TOP: break;
-    case BOTTOM: final -= H; break;
-    case MIDDLE: final -= H/2; break;
-  }
-  
-  if (final > (full_height() - H)) final = full_height() -H;
-  position(final);
-}
-
-/**
-  Returns the line that is currently visible at the top of the browser.
-  If there is no vertical scrollbar then this will always return 1.
-  \returns The lineno() of the top() of the browser.
-*/
-int Fl_Browser::topline() const {
-  return lineno(top());
-}
-
-/**
-  Removes all the lines in the browser.
-  \see add(), insert(), remove(), swap(int,int), clear()
-*/
-void Fl_Browser::clear() {
-  for (FL_BLINE* l = first; l;) {
-    FL_BLINE* n = l->next;
-    free(l);
-    l = n;
-  }
-  full_height_ = 0;
-  first = 0;
-  last = 0;
-  lines = 0;
-  new_list();
-}
-
-/**
-  Adds a new line to the end of the browser.
-
-  The text string \p newtext may contain format characters; see format_char() for details.
-  \p newtext is copied using the strdup() function, and can be NULL to make a blank line.
-
-  The optional void* argument \p d will be the data() for the new item.
-
-  \param[in] newtext The label text used for the added item
-  \param[in] d Optional user data() for the item (0 if unspecified)
-  \see add(), insert(), remove(), swap(int,int), clear()
-*/
-void Fl_Browser::add(const char* newtext, void* d) {
-  insert(lines+1, newtext, d);
-  //Fl_Browser_::display(last);
-}
-
-/**
-  Returns the label text for the specified \p line.
-  Return value can be NULL if \p line is out of range or unset.
-  The parameter \p line is 1 based.
-  \param[in] line The line number of the item whose text is returned. (1 based)
-  \returns The text string (can be NULL)
-*/
-const char* Fl_Browser::text(int line) const {
-  if (line < 1 || line > lines) return 0;
-  return find_line(line)->txt;
-}
-
-/**
-  Returns the user data() for specified \p line.
-  Return value can be NULL if \p line is out of range or no user data() was defined.
-  The parameter \p line is 1 based (1 will be the first item in the list).
-  \param[in] line The line number of the item whose data() is returned. (1 based)
-  \returns The user data pointer (can be NULL)
-
-*/
-void* Fl_Browser::data(int line) const {
-  if (line < 1 || line > lines) return 0;
-  return find_line(line)->data;
-}
-
-/**
-  Sets the selection state of the item at \p line to the value \p val.
-  If \p val is not specified, the default is 1 (selects the item).
-  \param[in] line The line number of the item to be changed. (1 based)
-  \param[in] val The new selection state (1=select, 0=de-select).
-  \returns 1 if the state changed, 0 if not.
-  \see select(), selected(), value(), item_select(), item_selected()
-*/
-int Fl_Browser::select(int line, int val) {
-  if (line < 1 || line > lines) return 0;
-  return Fl_Browser_::select(find_line(line), val);
-}
-
-/**
-  Returns 1 if specified \p line is selected, 0 if not.
-  \param[in] line The line being checked (1 based)
-  \returns 1 if item selected, 0 if not.
-  \see select(), selected(), value(), item_select(), item_selected()
-  */
-int Fl_Browser::selected(int line) const {
-  if (line < 1 || line > lines) return 0;
-  return find_line(line)->flags & SELECTED;
-}
-
-/**
-  Makes \p line visible, and available for selection by user.
-  Opposite of hide(int).
-  This changes the full_height() if the state was changed.
-  redraw() is called automatically if a change occurred.
-  \param[in] line The line to be shown. (1 based)
-  \see show(int), hide(int), display(), visible(), make_visible()
-*/
-void Fl_Browser::show(int line) {
-  FL_BLINE* t = find_line(line);
-  if (t->flags & NOTDISPLAYED) {
-    t->flags &= ~NOTDISPLAYED;
-    full_height_ += item_height(t);
-    if (Fl_Browser_::displayed(t)) redraw();
-  }
-}
-
-/**
-  Makes \p line invisible, preventing selection by the user.
-  The line can still be selected under program control.
-  This changes the full_height() if the state was changed.
-  When a line is made invisible, lines below it are moved up in the display.
-  redraw() is called automatically if a change occurred.
-  \param[in] line The line to be hidden. (1 based)
-  \see show(int), hide(int), display(), visible(), make_visible()
-*/
-void Fl_Browser::hide(int line) {
-  FL_BLINE* t = find_line(line);
-  if (!(t->flags & NOTDISPLAYED)) {
-    full_height_ -= item_height(t);
-    t->flags |= NOTDISPLAYED;
-    if (Fl_Browser_::displayed(t)) redraw();
-  }
-}
-
-/**
-  For back compatibility.
-  This calls show(line) if \p val is true, and hide(line) otherwise.
-  If \p val is not specified, the default is 1 (makes the line visible).
-  \see show(int), hide(int), display(), visible(), make_visible()
-*/
-void Fl_Browser::display(int line, int val) {
-  if (line < 1 || line > lines) return;
-  if (val) show(line); else hide(line);
-}
-
-/**
-  Returns non-zero if the specified \p line is visible, 0 if hidden.
-  Use show(int), hide(int), or make_visible(int) to change an item's visible state.
-  \param[in] line The line in the browser to be tested. (1 based)
-  \see show(int), hide(int), display(), visible(), make_visible()
-*/
-int Fl_Browser::visible(int line) const {
-  if (line < 1 || line > lines) return 0;
-  return !(find_line(line)->flags&NOTDISPLAYED);
-}
-
-/**
-  Returns the line number of the currently selected line, or 0 if none.
-  \returns The line number of current selection, or 0 if none selected.
-  \see select(), selected(), value(), item_select(), item_selected()
-*/
-int Fl_Browser::value() const {
-  return lineno(selection());
-}
-
-/**
-  Swap the two items \p a and \p b.
-  Uses swapping() to ensure list updates correctly.
-  \param[in] a,b The two items to be swapped.
-  \see swap(int,int), item_swap()
-*/
-void Fl_Browser::swap(FL_BLINE *a, FL_BLINE *b) {
-
-  if ( a == b || !a || !b) return;          // nothing to do
-  swapping(a, b);
-  FL_BLINE *aprev  = a->prev;
-  FL_BLINE *anext  = a->next;
-  FL_BLINE *bprev  = b->prev;
-  FL_BLINE *bnext  = b->next;
-  if ( b->prev == a ) { 		// A ADJACENT TO B
-     if ( aprev ) aprev->next = b; else first = b;
-     b->next = a;
-     a->next = bnext;
-     b->prev = aprev;
-     a->prev = b;
-     if ( bnext ) bnext->prev = a; else last = a;
-  } else if ( a->prev == b ) {		// B ADJACENT TO A
-     if ( bprev ) bprev->next = a; else first = a;
-     a->next = b;
-     b->next = anext;
-     a->prev = bprev;
-     b->prev = a;
-     if ( anext ) anext->prev = b; else last = b;
-  } else {				// A AND B NOT ADJACENT
-     // handle prev's
-     b->prev = aprev;
-     if ( anext ) anext->prev = b; else last = b;
-     a->prev = bprev;
-     if ( bnext ) bnext->prev = a; else last = a;
-     // handle next's
-     if ( aprev ) aprev->next = b; else first = b;
-     b->next = anext;
-     if ( bprev ) bprev->next = a; else first = a;
-     a->next = bnext;
-  }
-  // Disable cache -- we played around with positions
-  cacheline = 0;
-  cache = 0;
-}
-
-/**
-  Swaps two browser lines \p a and \p b.
-  You must call redraw() to make any changes visible.
-  \param[in] a,b The two lines to be swapped. (both 1 based)
-  \see swap(int,int), item_swap()
-*/
-void Fl_Browser::swap(int a, int b) {
-  if (a < 1 || a > lines || b < 1 || b > lines) return;
-  FL_BLINE* ai = find_line(a);
-  FL_BLINE* bi = find_line(b);
-  swap(ai,bi);
-}
-
-/**
-  Set the image icon for \p line to the value \p icon.
-  Caller is responsible for keeping the icon allocated.
-  The \p line is automatically redrawn.
-  \param[in] line The line to be modified. If out of range, nothing is done.
-  \param[in] icon The image icon to be assigned to the \p line.
-                  If NULL, any previous icon is removed.
-*/
-void Fl_Browser::icon(int line, Fl_Image* icon) {
-
-  if (line<1 || line > lines) return;
-
-  FL_BLINE* bl = find_line(line);
-
-  int old_h = bl->icon ? bl->icon->h()+2 : 0;	// init with *old* icon height
-  bl->icon = 0;					// remove icon, if any
-  int th = item_height(bl);			// height of text only
-  int new_h = icon ? icon->h()+2 : 0;		// init with *new* icon height
-  if (th > old_h) old_h = th;
-  if (th > new_h) new_h = th;
-  int dh = new_h - old_h;
-  full_height_ += dh;				// do this *always*
-
-  bl->icon = icon;				// set new icon
-  if (dh>0) {
-    redraw();					// icon larger than item? must redraw widget
-  } else {
-    redraw_line(bl);				// icon same or smaller? can redraw just this line
-  }
-  replacing(bl,bl);				// recalc Fl_Browser_::max_width et al
-}
-
-/**
-  Returns the icon currently defined for \p line.
-  If no icon is defined, NULL is returned.
-  \param[in] line The line whose icon is returned.
-  \returns The icon defined, or NULL if none.
-*/
-Fl_Image* Fl_Browser::icon(int line) const {
-  FL_BLINE* l = find_line(line);
-  return(l ? l->icon : NULL);
-}
-
-/**
-  Removes the icon for \p line.
-  It's ok to remove an icon if none has been defined.
-  \param[in] line The line whose icon is to be removed.
-*/
-void Fl_Browser::remove_icon(int line) { 
-  icon(line,0);
-}
-
-/*
-  The following constructors must not be in the header file(s) if we
-  build a shared object (DLL). Instead they are defined here to force
-  the constructor (and default destructor as well) to be defined in
-  the DLL and exported (STR #2632, #2645).
-  
-  Note: if you change any of them, do the same changes in the specific
-  header file as well.  This redundant definition was chosen to enable
-  inline constructors in the header files (for static linking) as well
-  as those here for dynamic linking (Windows DLL).
-*/
-#if defined(FL_DLL)
-
-  Fl_Hold_Browser::Fl_Hold_Browser(int X,int Y,int W,int H,const char *L)
-	: Fl_Browser(X,Y,W,H,L) {type(FL_HOLD_BROWSER);}
-
-  Fl_Multi_Browser::Fl_Multi_Browser(int X,int Y,int W,int H,const char *L)
-	: Fl_Browser(X,Y,W,H,L) {type(FL_MULTI_BROWSER);}
-
-  Fl_Select_Browser::Fl_Select_Browser(int X,int Y,int W,int H,const char *L)
-	: Fl_Browser(X,Y,W,H,L) {type(FL_SELECT_BROWSER);}
-
-#endif // FL_DLL
-
-//
-// End of "$Id: Fl_Browser.cxx 8736 2011-05-24 20:00:56Z AlbrechtS $".
-//
diff --git a/common/fltk/src/Fl_Browser_.cxx b/common/fltk/src/Fl_Browser_.cxx
deleted file mode 100644
index 1f738b1..0000000
--- a/common/fltk/src/Fl_Browser_.cxx
+++ /dev/null
@@ -1,1107 +0,0 @@
-//
-// "$Id: Fl_Browser_.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Base Browser widget class for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#define DISPLAY_SEARCH_BOTH_WAYS_AT_ONCE
-
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Browser_.H>
-#include <FL/fl_draw.H>
-
-
-// This is the base class for browsers.  To be useful it must be
-// subclassed and several virtual functions defined.  The
-// Forms-compatible browser and the file chooser's browser are
-// subclassed off of this.
-
-// Yes, I know this should be a template...
-
-// This has been designed so that the subclass has complete control
-// over the storage of the data, although because next() and prev()
-// functions are used to index, it works best as a linked list or as a
-// large block of characters in which the line breaks must be searched
-// for.
-
-// A great deal of work has been done so that the "height" of a data
-// object does not need to be determined until it is drawn.  This was
-// done for the file chooser, because the height requires doing stat()
-// to see if the file is a directory, which can be annoyingly slow
-// over the network.
-
-/* redraw bits:
-   1 = redraw children (the scrollbar)
-   2 = redraw one or two items
-   4 = redraw all items
-*/
-
-static void scrollbar_callback(Fl_Widget* s, void*) {
-  ((Fl_Browser_*)(s->parent()))->position(int(((Fl_Scrollbar*)s)->value()));
-}
-
-static void hscrollbar_callback(Fl_Widget* s, void*) {
-  ((Fl_Browser_*)(s->parent()))->hposition(int(((Fl_Scrollbar*)s)->value()));
-}
-
-// return where to draw the actual box:
-/**
-  Returns the bounding box for the interior of the list's display window, inside
-  the scrollbars.
-  \param[out] X,Y,W,H The returned bounding box.\n
-                      (The original contents of these parameters are overwritten)
-*/
-void Fl_Browser_::bbox(int& X, int& Y, int& W, int& H) const {
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  Fl_Boxtype b = box() ? box() : FL_DOWN_BOX;
-  X = x()+Fl::box_dx(b);
-  Y = y()+Fl::box_dy(b);
-  W = w()-Fl::box_dw(b);
-  H = h()-Fl::box_dh(b);
-  if (scrollbar.visible()) {
-    W -= scrollsize;
-    if (scrollbar.align() & FL_ALIGN_LEFT) X += scrollsize;
-  }
-  if (W < 0) W = 0;
-  if (hscrollbar.visible()) {
-    H -= scrollsize;
-    if (scrollbar.align() & FL_ALIGN_TOP) Y += scrollsize;
-  }
-  if (H < 0) H = 0;
-}
-
-/**
-  This method returns the X position of the left edge of the list area
-  after adjusting for the scrollbar and border, if any.
-  \returns The X position of the left edge of the list, in pixels.
-  \see Fl_Browser_::bbox()
-*/
-int Fl_Browser_::leftedge() const {
-  int X, Y, W, H; bbox(X, Y, W, H);
-  return X;
-}
-
-// The scrollbars may be moved again by draw(), since each one's size
-// depends on whether the other is visible or not.  This skips over
-// Fl_Group::resize since it moves the scrollbars uselessly.
-/**
-  Repositions and/or resizes the browser.
-  \param[in] X,Y,W,H The new position and size for the browser, in pixels.
-*/
-void Fl_Browser_::resize(int X, int Y, int W, int H) {
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  Fl_Widget::resize(X, Y, W, H);
-  // move the scrollbars so they can respond to events:
-  bbox(X,Y,W,H);
-  scrollbar.resize(
-	scrollbar.align()&FL_ALIGN_LEFT ? X-scrollsize : X+W,
-	Y, scrollsize, H);
-  hscrollbar.resize(
-	X, scrollbar.align()&FL_ALIGN_TOP ? Y-scrollsize : Y+H,
-	W, scrollsize);
-}
-
-// Cause minimal update to redraw the given item:
-/**
-  This method should be called when the contents of \p item has changed,
-  but not its height.
-  \param[in] item The item that needs to be redrawn.
-  \see redraw_lines(), redraw_line()
-*/
-void Fl_Browser_::redraw_line(void* item) {
-  if (!redraw1 || redraw1 == item) {redraw1 = item; damage(FL_DAMAGE_EXPOSE);}
-  else if (!redraw2 || redraw2 == item) {redraw2 = item; damage(FL_DAMAGE_EXPOSE);}
-  else damage(FL_DAMAGE_SCROLL);
-}
-
-// Figure out top() based on position():
-void Fl_Browser_::update_top() {
-  if (!top_) top_ = item_first();
-  if (position_ != real_position_) {
-    void* l;
-    int ly;
-    int yy = position_;
-    // start from either head or current position, whichever is closer:
-    if (!top_ || yy <= (real_position_/2)) {
-      l = item_first();
-      ly = 0;
-    } else {
-      l = top_;
-      ly = real_position_-offset_;
-    }
-    if (!l) {
-      top_ = 0;
-      offset_ = 0;
-      real_position_ = 0;
-    } else {
-      int hh = item_quick_height(l);
-      // step through list until we find line containing this point:
-      while (ly > yy) {
-	void* l1 = item_prev(l);
-	if (!l1) {ly = 0; break;} // hit the top
-	l  = l1;
-	hh = item_quick_height(l);
-	ly -= hh;
-      }
-      while ((ly+hh) <= yy) {
-	void* l1 = item_next(l);
-	if (!l1) {yy = ly+hh-1; break;}
-	l = l1;
-	ly += hh;
-	hh = item_quick_height(l);
-      }
-      // top item must *really* be visible, use slow height:
-      for (;;) {
-	hh = item_height(l);
-	if ((ly+hh) > yy) break; // it is big enough to see
-	// go up to top of previous item:
-	void* l1 = item_prev(l);
-	if (!l1) {ly = yy = 0; break;} // hit the top
-	l = l1; yy = position_ = ly = ly-item_quick_height(l);
-      }
-      // use it:
-      top_ = l;
-      offset_ = yy-ly;
-      real_position_ = yy;
-    }
-    damage(FL_DAMAGE_SCROLL);
-  }
-}
-
-// Change position(), top() will update when update_top() is called
-// (probably by draw() or handle()):
-/**
-  Sets the vertical scroll position of the list to pixel position \p pos.
-  The position is how many pixels of the list are scrolled off the top edge
-  of the screen. Example: A position of '3' scrolls the top three pixels of
-  the list off the top edge of the screen.
-  \param[in] pos The vertical position (in pixels) to scroll the browser to.
-  \see position(), hposition()
-*/
-void Fl_Browser_::position(int pos) {
-  if (pos < 0) pos = 0;
-  if (pos == position_) return;
-  position_ = pos;
-  if (pos != real_position_) redraw_lines();
-}
-
-/**
-  Sets the horizontal scroll position of the list to pixel position \p pos.
-  The position is how many pixels of the list are scrolled off the left edge
-  of the screen. Example: A position of '18' scrolls the left 18 pixels of the list
-  off the left edge of the screen.
-  \param[in] pos The horizontal position (in pixels) to scroll the browser to.
-  \see position(), hposition()
-*/
-void Fl_Browser_::hposition(int pos) {
-  if (pos < 0) pos = 0;
-  if (pos == hposition_) return;
-  hposition_ = pos;
-  if (pos != real_hposition_) redraw_lines();
-}
-
-// Tell whether item is currently displayed:
-/**
-  Returns non-zero if \p item has been scrolled to a position where it is being displayed.
-  Checks to see if the item's vertical position is within the top and bottom
-  edges of the display window. This does NOT take into account the hide()/show()
-  status of the widget or item.
-  \param[in] item The item to check
-  \returns 1 if visible, 0 if not visible.
-  \see display(), displayed()
-*/
-int Fl_Browser_::displayed(void* item) const {
-  int X, Y, W, H; bbox(X, Y, W, H);
-  int yy = H+offset_;
-  for (void* l = top_; l && yy > 0; l = item_next(l)) {
-    if (l == item) return 1;
-    yy -= item_height(l);
-  }
-  return 0;
-}
-
-// Ensure this item is displayed:
-// Messy because we have no idea if it is before top or after bottom:
-/**
-  Displays the \p item, scrolling the list as necessary.
-  \param[in] item The item to be displayed.
-  \see display(), displayed()
-*/
-void Fl_Browser_::display(void* item) {
-
-  // First special case - want to display first item in the list?
-  update_top();
-  if (item == item_first()) {position(0); return;}
-
-  int X, Y, W, H, Yp; bbox(X, Y, W, H);
-  void* l = top_;
-  Y = Yp = -offset_;
-  int h1;
-
-  // 2nd special case - want to display item already displayed at top of browser?
-  if (l == item) {position(real_position_+Y); return;} // scroll up a bit
-
-  // 3rd special case - want to display item just above top of browser?
-  void* lp = item_prev(l);
-  if (lp == item) {position(real_position_+Y-item_quick_height(lp)); return;}
-
-#ifdef DISPLAY_SEARCH_BOTH_WAYS_AT_ONCE
-  // search for item.  We search both up and down the list at the same time,
-  // this evens up the execution time for the two cases - the old way was
-  // much slower for going up than for going down.
-  while (l || lp) {
-    if (l) {
-      h1 = item_quick_height(l);
-      if (l == item) {
-	if (Y <= H) { // it is visible or right at bottom
-	  Y = Y+h1-H; // find where bottom edge is
-	  if (Y > 0) position(real_position_+Y); // scroll down a bit
-	} else {
-	  position(real_position_+Y-(H-h1)/2); // center it
-	}
-	return;
-      }
-      Y += h1;
-      l = item_next(l);
-    }
-    if (lp) {
-      h1 = item_quick_height(lp);
-      Yp -= h1;
-      if (lp == item) {
-	if ((Yp + h1) >= 0) position(real_position_+Yp);
-	else position(real_position_+Yp-(H-h1)/2);
-	return;
-      }
-      lp = item_prev(lp);
-    }
-  }
-#else
-  // Old version went forwards and then backwards:
-  // search forward for it:
-  l = top_;
-  for (; l; l = item_next(l)) {
-    h1 = item_quick_height(l);
-    if (l == item) {
-      if (Y <= H) { // it is visible or right at bottom
-	Y = Y+h1-H; // find where bottom edge is
-	if (Y > 0) position(real_position_+Y); // scroll down a bit
-      } else {
-	position(real_position_+Y-(H-h1)/2); // center it
-      }
-      return;
-    }
-    Y += h1;
-  }
-  // search backward for it, if found center it:
-  l = lp;
-  Y = -offset_;
-  for (; l; l = item_prev(l)) {
-    h1 = item_quick_height(l);
-    Y -= h1;
-    if (l == item) {
-      if ((Y + h1) >= 0) position(real_position_+Y);
-      else position(real_position_+Y-(H-h1)/2);
-      return;
-    }
-  }
-#endif
-}
-
-// redraw, has side effect of updating top and setting scrollbar:
-/**
-  Draws the list within the normal widget bounding box.
-*/
-void Fl_Browser_::draw() {
-  int drawsquare = 0;
-  update_top();
-  int full_width_ = full_width();
-  int full_height_ = full_height();
-  int X, Y, W, H; bbox(X, Y, W, H);
-  int dont_repeat = 0;
-J1:
-  if (damage() & FL_DAMAGE_ALL) { // redraw the box if full redraw
-    Fl_Boxtype b = box() ? box() : FL_DOWN_BOX;
-    draw_box(b, x(), y(), w(), h(), color());
-    drawsquare = 1;
-  }
-  // see if scrollbar needs to be switched on/off:
-  if ((has_scrollbar_ & VERTICAL) && (
-	(has_scrollbar_ & ALWAYS_ON) || position_ || full_height_ > H)) {
-    if (!scrollbar.visible()) {
-      scrollbar.set_visible();
-      drawsquare = 1;
-      bbox(X, Y, W, H);
-    }
-  } else {
-    top_ = item_first(); real_position_ = offset_ = 0;
-    if (scrollbar.visible()) {
-      scrollbar.clear_visible();
-      clear_damage((uchar)(damage()|FL_DAMAGE_SCROLL));
-    }
-  }
-
-  if ((has_scrollbar_ & HORIZONTAL) && (
-	(has_scrollbar_ & ALWAYS_ON) || hposition_ || full_width_ > W)) {
-    if (!hscrollbar.visible()) {
-      hscrollbar.set_visible();
-      drawsquare = 1;
-      bbox(X, Y, W, H);
-    }
-  } else {
-    real_hposition_ = 0;
-    if (hscrollbar.visible()) {
-      hscrollbar.clear_visible();
-      clear_damage((uchar)(damage()|FL_DAMAGE_SCROLL));
-    }
-  }
-
-  // Check the vertical scrollbar again, just in case it needs to be drawn
-  // because the horizontal one is drawn.  There should be a cleaner way
-  // to do this besides copying the same code...
-  if ((has_scrollbar_ & VERTICAL) && (
-	(has_scrollbar_ & ALWAYS_ON) || position_ || full_height_ > H)) {
-    if (!scrollbar.visible()) {
-      scrollbar.set_visible();
-      drawsquare = 1;
-      bbox(X, Y, W, H);
-    }
-  } else {
-    top_ = item_first(); real_position_ = offset_ = 0;
-    if (scrollbar.visible()) {
-      scrollbar.clear_visible();
-      clear_damage((uchar)(damage()|FL_DAMAGE_SCROLL));
-    }
-  }
-
-  bbox(X, Y, W, H);
-
-  fl_push_clip(X, Y, W, H);
-  // for each line, draw it if full redraw or scrolled.  Erase background
-  // if not a full redraw or if it is selected:
-  void* l = top();
-  int yy = -offset_;
-  for (; l && yy < H; l = item_next(l)) {
-    int hh = item_height(l);
-    if (hh <= 0) continue;
-    if ((damage()&(FL_DAMAGE_SCROLL|FL_DAMAGE_ALL)) || l == redraw1 || l == redraw2) {
-      if (item_selected(l)) {
-	fl_color(active_r() ? selection_color() : fl_inactive(selection_color()));
-	fl_rectf(X, yy+Y, W, hh);
-      } else if (!(damage()&FL_DAMAGE_ALL)) {
-	fl_push_clip(X, yy+Y, W, hh);
-	draw_box(box() ? box() : FL_DOWN_BOX, x(), y(), w(), h(), color());
-	fl_pop_clip();
-      }
-      item_draw(l, X-hposition_, yy+Y, W+hposition_, hh);
-      if (l == selection_ && Fl::focus() == this) {
-	draw_box(FL_BORDER_FRAME, X, yy+Y, W, hh, color());
-	draw_focus(FL_NO_BOX, X, yy+Y, W+1, hh+1);
-      }
-      int ww = item_width(l);
-      if (ww > max_width) {max_width = ww; max_width_item = l;}
-    }
-    yy += hh;
-  }
-  // erase the area below last line:
-  if (!(damage()&FL_DAMAGE_ALL) && yy < H) {
-    fl_push_clip(X, yy+Y, W, H-yy);
-    draw_box(box() ? box() : FL_DOWN_BOX, x(), y(), w(), h(), color());
-    fl_pop_clip();
-  }
-  fl_pop_clip();
-  redraw1 = redraw2 = 0;
-
-  if (!dont_repeat) {
-    dont_repeat = 1;
-    // see if changes to full_height caused by calls to slow_height
-    // caused scrollbar state to change, in which case we have to redraw:
-    full_height_ = full_height();
-    full_width_ = full_width();
-    if ((has_scrollbar_ & VERTICAL) &&
-	((has_scrollbar_ & ALWAYS_ON) || position_ || full_height_>H)) {
-      if (!scrollbar.visible()) { damage(FL_DAMAGE_ALL); goto J1; }
-    } else {
-      if (scrollbar.visible()) { damage(FL_DAMAGE_ALL); goto J1; }
-    }
-    if ((has_scrollbar_ & HORIZONTAL) &&
-	((has_scrollbar_ & ALWAYS_ON) || hposition_ || full_width_>W)) {
-      if (!hscrollbar.visible()) { damage(FL_DAMAGE_ALL); goto J1; }
-    } else {
-      if (hscrollbar.visible()) { damage(FL_DAMAGE_ALL); goto J1; }
-    }
-  }
-
-  // update the scrollbars and redraw them:
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  int dy = top_ ? item_quick_height(top_) : 0; if (dy < 10) dy = 10;
-  if (scrollbar.visible()) {
-    scrollbar.damage_resize(
-	scrollbar.align()&FL_ALIGN_LEFT ? X-scrollsize : X+W,
-	Y, scrollsize, H);
-    scrollbar.value(position_, H, 0, full_height_);
-    scrollbar.linesize(dy);
-    if (drawsquare) draw_child(scrollbar);
-    else update_child(scrollbar);
-  }
-  if (hscrollbar.visible()) {
-    hscrollbar.damage_resize(
-	X, scrollbar.align()&FL_ALIGN_TOP ? Y-scrollsize : Y+H,
-	W, scrollsize);
-    hscrollbar.value(hposition_, W, 0, full_width_);
-    hscrollbar.linesize(dy);
-    if (drawsquare) draw_child(hscrollbar);
-    else update_child(hscrollbar);
-  }
-
-  // draw that little square between the scrollbars:
-  if (drawsquare && scrollbar.visible() && hscrollbar.visible()) {
-    fl_color(parent()->color());
-    fl_rectf(scrollbar.x(), hscrollbar.y(), scrollsize, scrollsize);
-  }
-
-  real_hposition_ = hposition_;
-}
-
-// Quick way to delete and reset everything:
-/**
-  This method should be called when the list data is completely replaced
-  or cleared. It informs the Fl_Browser_ widget that any cached
-  information it has concerning the items is invalid.
-  This method does not clear the list, it just handles the follow up
-  bookkeeping after the list has been cleared.
-*/
-void Fl_Browser_::new_list() {
-  top_ = 0;
-  position_ = real_position_ = 0;
-  hposition_ = real_hposition_ = 0;
-  selection_ = 0;
-  offset_ = 0;
-  max_width = 0;
-  max_width_item = 0;
-  redraw_lines();
-}
-
-// Tell it that this item is going away, and that this must remove
-// all pointers to it:
-/**
-  This method should be used when \p item is being deleted from the list.
-  It allows the Fl_Browser_ to discard any cached data it has on the item.
-  This method does not actually delete the item, but handles the follow up
-  bookkeeping after the item has just been deleted.
-  \param[in] item The item being deleted.
-*/
-void Fl_Browser_::deleting(void* item) {
-  if (displayed(item)) {
-    redraw_lines();
-    if (item == top_) {
-      real_position_ -= offset_;
-      offset_ = 0;
-      top_ = item_next(item);
-      if (!top_) top_ = item_prev(item);
-    }
-  } else {
-    // we don't know where this item is, recalculate top...
-    real_position_ = 0;
-    offset_ = 0;
-    top_ = 0;
-  }
-  if (item == selection_) selection_ = 0;
-  if (item == max_width_item) {max_width_item = 0; max_width = 0;}
-}
-
-/**
-  This method should be used when item \p a is being replaced by item \p b.
-  It allows the Fl_Browser_ to update its cache data as needed,
-  schedules a redraw for the item being changed, and tries to maintain the selection.
-  This method does not actually replace the item, but handles the follow up
-  bookkeeping after the item has just been replaced.
-  \param[in] a Item being replaced
-  \param[in] b Item to replace 'a'
-*/
-void Fl_Browser_::replacing(void* a, void* b) {
-  redraw_line(a);
-  if (a == selection_) selection_ = b;
-  if (a == top_) top_ = b;
-  if (a == max_width_item) {max_width_item = 0; max_width = 0;}
-}
-
-/**
-  This method should be used when two items \p a and \p b are being swapped.
-  It allows the Fl_Browser_ to update its cache data as needed,
-  schedules a redraw for the two items, and tries to maintain the current selection.
-  This method does not actually swap items, but handles the follow up
-  bookkeeping after items have been swapped.
-  \param[in] a,b Items being swapped.
-*/
-void Fl_Browser_::swapping(void* a, void* b) {
-  redraw_line(a);
-  redraw_line(b);
-  if (a == selection_) selection_ = b;
-  else if (b == selection_) selection_ = a;
-  if (a == top_) top_ = b;
-  else if (b == top_) top_ = a;
-}
-
-/**
-  This method should be used when an item is in the process of
-  being inserted into the list.
-  It allows the Fl_Browser_ to update its cache data as needed,
-  scheduling a redraw for the affected lines.
-  This method does not actually insert items, but handles the 
-  follow up bookkeeping after items have been inserted.
-  \param[in] a The starting item position
-  \param[in] b The new item being inserted
-*/
-void Fl_Browser_::inserting(void* a, void* b) {
-  if (displayed(a)) redraw_lines();
-  if (a == top_) top_ = b;
-}
-
-/**
-  This method returns the item under mouse y position \p ypos.
-  NULL is returned if no item is displayed at that position.
-  \param[in] ypos The y position (eg. Fl::event_y()) to find an item under.
-  \returns The item, or NULL if not found
-*/
-void* Fl_Browser_::find_item(int ypos) {
-  update_top();
-  int X, Y, W, H; bbox(X, Y, W, H);
-  int yy = Y-offset_;
-  for (void *l = top_; l; l = item_next(l)) {
-    int hh = item_height(l); if (hh <= 0) continue;
-    yy += hh;
-    if (ypos <= yy || yy>=(Y+H)) return l;
-  }
-  return 0;
-}
-
-/**
-  Sets the selection state of \p item to \p val,
-  and returns 1 if the state changed or 0 if it did not.
-  
-  If \p docallbacks is non-zero, select tries to call
-  the callback function for the widget.
-
-  \param[in] item The item whose selection state is to be changed
-  \param[in] val The new selection state (1=select, 0=de-select)
-  \param[in] docallbacks If 1, invokes widget callback if item changed.\n
-                         If 0, doesn't do callback (default).
-  \returns 1 if state was changed, 0 if not.
-*/
-int Fl_Browser_::select(void* item, int val, int docallbacks) {
-  if (type() == FL_MULTI_BROWSER) {
-    if (selection_ != item) {
-      if (selection_) redraw_line(selection_);
-      selection_ = item;
-      redraw_line(item);
-    }
-    if ((!val)==(!item_selected(item))) return 0;
-    item_select(item, val);
-    redraw_line(item);
-  } else {
-    if (val && selection_ == item) return 0;
-    if (!val && selection_ != item) return 0;
-    if (selection_) {
-      item_select(selection_, 0);
-      redraw_line(selection_);
-      selection_ = 0;
-    }
-    if (val) {
-      item_select(item, 1);
-      selection_ = item;
-      redraw_line(item);
-      display(item);
-    }
-  }	    
-  if (docallbacks) {
-    set_changed();
-    do_callback();
-  }
-  return 1;
-}
-
-/**
-  Deselects all items in the list and returns 1 if the state changed
-  or 0 if it did not.
-  
-  If the optional \p docallbacks parameter is non-zero, deselect tries
-  to call the callback function for the widget.
-
-  \param[in] docallbacks If 1, invokes widget callback if item changed.\n
-                         If 0, doesn't do callback (default).
-*/
-int Fl_Browser_::deselect(int docallbacks) {
-  if (type() == FL_MULTI_BROWSER) {
-    int change = 0;
-    for (void* p = item_first(); p; p = item_next(p))
-      change |= select(p, 0, docallbacks);
-    return change;
-  } else {
-    if (!selection_) return 0;
-    item_select(selection_, 0);
-    redraw_line(selection_);
-    selection_ = 0;
-    return 1;
-  }
-}
-
-/**
-  Selects \p item and returns 1 if the state changed or 0 if it did not.
-  Any other items in the list are deselected.
-  \param[in] item The \p item to select.
-  \param[in] docallbacks If 1, invokes widget callback if item changed.\n
-                         If 0, doesn't do callback (default).
-*/
-int Fl_Browser_::select_only(void* item, int docallbacks) {
-  if (!item) return deselect(docallbacks);
-  int change = 0;
-  Fl_Widget_Tracker wp(this);
-  if (type() == FL_MULTI_BROWSER) {
-    for (void* p = item_first(); p; p = item_next(p)) {
-      if (p != item) change |= select(p, 0, docallbacks);
-      if (wp.deleted()) return change;
-    }
-  }
-  change |= select(item, 1, docallbacks);
-  if (wp.deleted()) return change;
-  display(item);
-  return change;
-}
-
-/**
-  Handles the \p event within the normal widget bounding box.
-  \param[in] event The event to process.
-  \returns 1 if event was processed, 0 if not.
-*/
-int Fl_Browser_::handle(int event) {
-
-  // NOTE:
-  // We use Fl_Widget_Tracker to test if the user has deleted
-  // this widget in a callback. Callbacks can be called by:
-  //  - do_callback()
-  //  - select()
-  //  - select_only()
-  //  - deselect()
-  // Thus we must test wp.deleted() after each of these calls,
-  // unless we return directly after one of these.
-  // If wp.deleted() is true, we return 1 because we used the event.
-
-  Fl_Widget_Tracker wp(this);
-
-  // must do shortcuts first or the scrollbar will get them...
-  if (event == FL_ENTER || event == FL_LEAVE) return 1;
-  if (event == FL_KEYBOARD && type() >= FL_HOLD_BROWSER) {
-    void* l1 = selection_;
-    void* l = l1; if (!l) l = top_; if (!l) l = item_first();
-    if (l) {
-      if (type()==FL_HOLD_BROWSER) {
-        switch (Fl::event_key()) {
-        case FL_Down:
-          while ((l = item_next(l)))
-            if (item_height(l)>0) {select_only(l, when()); break;}
-            return 1;
-        case FL_Up:
-          while ((l = item_prev(l))) {
-	    if (item_height(l)>0) {
-	      select_only(l, when());
-	      break; // no need to test wp (return 1)
-	    }
-	  }
-          return 1;
-        } 
-      } else  {
-        switch (Fl::event_key()) {
-        case FL_Enter:
-        case FL_KP_Enter:
-          select_only(l, when() & ~FL_WHEN_ENTER_KEY);
-	  if (wp.deleted()) return 1;
-	  if (when() & FL_WHEN_ENTER_KEY) {
-	    set_changed();
-	    do_callback();
-	  }
-          return 1;
-        case ' ':
-          selection_ = l;
-          select(l, !item_selected(l), when() & ~FL_WHEN_ENTER_KEY);
-          return 1;
-        case FL_Down:
-          while ((l = item_next(l))) {
-            if (Fl::event_state(FL_SHIFT|FL_CTRL))
-              select(l, l1 ? item_selected(l1) : 1, when());
-	    if (wp.deleted()) return 1;
-            if (item_height(l)>0) goto J1;
-          }
-          return 1;
-        case FL_Up:
-          while ((l = item_prev(l))) {
-            if (Fl::event_state(FL_SHIFT|FL_CTRL))
-              select(l, l1 ? item_selected(l1) : 1, when());
-	    if (wp.deleted()) return 1;
-            if (item_height(l)>0) goto J1;
-          }
-          return 1;
-J1:
-          if (selection_) redraw_line(selection_);
-          selection_ = l; redraw_line(l);
-          display(l);
-          return 1;
-        }
-      }
-    }
-  }
-  
-  if (Fl_Group::handle(event)) return 1;
-  if (wp.deleted()) return 1;
-
-  int X, Y, W, H; bbox(X, Y, W, H);
-  int my;
-// NOTE:
-// instead of:
-//     change = select_only(find_item(my), when() & FL_WHEN_CHANGED)
-// we use the construct:
-//     change = select_only(find_item(my), 0);
-//     if (change && (when() & FL_WHEN_CHANGED)) {
-//	 set_changed();
-//       do_callback();
-//     }
-// See str #834
-// The first form calls the callback *before* setting change.
-// The callback may execute an Fl::wait(), resulting in another
-// call of Fl_Browser_::handle() for the same widget. The sequence
-// of events can be an FL_PUSH followed by an FL_RELEASE.
-// This second call of Fl_Browser_::handle() may result in a -
-// somewhat unexpected - second concurrent invocation of the callback.
-
-  static char change;
-  static char whichway;
-  static int py;
-  switch (event) {
-  case FL_PUSH:
-    if (!Fl::event_inside(X, Y, W, H)) return 0;
-    if (Fl::visible_focus()) {
-      Fl::focus(this);
-      redraw();
-    }
-    my = py = Fl::event_y();
-    change = 0;
-    if (type() == FL_NORMAL_BROWSER || !top_)
-      ;
-    else if (type() != FL_MULTI_BROWSER) {
-      change = select_only(find_item(my), 0);
-      if (wp.deleted()) return 1;
-      if (change && (when() & FL_WHEN_CHANGED)) {
-	set_changed();
-	do_callback();
-	if (wp.deleted()) return 1;
-      }
-    } else {
-      void* l = find_item(my);
-      whichway = 1;
-      if (Fl::event_state(FL_CTRL)) { // toggle selection:
-      TOGGLE:
-	if (l) {
-	  whichway = !item_selected(l);
-	  change = select(l, whichway, 0);
-	  if (wp.deleted()) return 1;
-	  if (change && (when() & FL_WHEN_CHANGED)) {
-	    set_changed();
-	    do_callback();
-	    if (wp.deleted()) return 1;
-	  }
-	}
-      } else if (Fl::event_state(FL_SHIFT)) { // extend selection:
-	if (l == selection_) goto TOGGLE;
-	// state of previous selection determines new value:
-	whichway = l ? !item_selected(l) : 1;
-	// see which of the new item or previous selection is earlier,
-	// by searching from the previous forward for this one:
-	int down;
-	if (!l) down = 1;
-	else {for (void* m = selection_; ; m = item_next(m)) {
-	  if (m == l) {down = 1; break;}
-	  if (!m) {down = 0; break;}
-	}}
-	if (down) {
-	  for (void* m = selection_; m != l; m = item_next(m)) {
-	    select(m, whichway, when() & FL_WHEN_CHANGED);
-	    if (wp.deleted()) return 1;
-	  }
-	} else {
-	  void* e = selection_;
-	  for (void* m = item_next(l); m; m = item_next(m)) {
-	    select(m, whichway, when() & FL_WHEN_CHANGED);
-	    if (wp.deleted()) return 1;
-	    if (m == e) break;
-	  }
-	}
-	// do the clicked item last so the select box is around it:
-	change = 1;
-	if (l) select(l, whichway, when() & FL_WHEN_CHANGED);
-	if (wp.deleted()) return 1;
-      } else { // select only this item
-	change = select_only(l, 0);
-	if (wp.deleted()) return 1;
-	if (change && (when() & FL_WHEN_CHANGED)) {
-	  set_changed();
-	  do_callback();
-	  if (wp.deleted()) return 1;
-	}
-      }
-    }
-    return 1;
-  case FL_DRAG:
-    // do the scrolling first:
-    my = Fl::event_y();
-    if (my < Y && my < py) {
-      int p = real_position_+my-Y;
-      if (p<0) p = 0;
-      position(p);
-    } else if (my > (Y+H) && my > py) {
-      int p = real_position_+my-(Y+H);
-      int hh = full_height()-H; if (p > hh) p = hh;
-      if (p<0) p = 0;
-      position(p);
-    }
-    if (type() == FL_NORMAL_BROWSER || !top_)
-      ;
-    else if (type() == FL_MULTI_BROWSER) {
-      void* l = find_item(my);
-      void* t; void* b; // this will be the range to change
-      if (my > py) { // go down
-	t = selection_ ? item_next(selection_) : 0;
-	b = l ? item_next(l) : 0;
-      } else {	// go up
-	t = l;
-	b = selection_;
-      }
-      for (; t && t != b; t = item_next(t)) {
-	char change_t;
-	change_t = select(t, whichway, 0);
-	if (wp.deleted()) return 1;
-	change |= change_t;
-	if (change_t && (when() & FL_WHEN_CHANGED)) {
-	  set_changed();
-	  do_callback();
-	  if (wp.deleted()) return 1;
-	}
-      }
-      if (l) selection_ = l;
-    } else {
-      void* l1 = selection_;
-      void* l =
-	(Fl::event_x()<x() || Fl::event_x()>x()+w()) ? selection_ :
-	find_item(my);
-      change = (l != l1);
-      select_only(l, when() & FL_WHEN_CHANGED);
-      if (wp.deleted()) return 1;
-    }
-    py = my;
-    return 1;
-  case FL_RELEASE:
-    if (type() == FL_SELECT_BROWSER) {
-      void* t = selection_;
-      deselect();
-      if (wp.deleted()) return 1;
-      selection_ = t;
-    }
-    if (change) {
-      set_changed();
-      if (when() & FL_WHEN_RELEASE) do_callback();
-    } else {
-      if (when() & FL_WHEN_NOT_CHANGED) do_callback();
-    }
-    if (wp.deleted()) return 1;
-
-    // double click calls the callback: (like Enter Key)
-    if (Fl::event_clicks() && (when() & FL_WHEN_ENTER_KEY)) {
-      set_changed();
-      do_callback();
-    }
-    return 1;
-  case FL_FOCUS:
-  case FL_UNFOCUS:
-    if (type() >= FL_HOLD_BROWSER && Fl::visible_focus()) {
-      redraw();
-      return 1;
-    } else return 0;
-  }
-
-  return 0;
-}
-
-/**
-  The constructor makes an empty browser.
-  \param[in] X,Y,W,H position and size.
-  \param[in] L The label string, may be NULL.
-*/
-Fl_Browser_::Fl_Browser_(int X, int Y, int W, int H, const char* L)
-  : Fl_Group(X, Y, W, H, L),
-    scrollbar(0, 0, 0, 0, 0), // they will be resized by draw()
-    hscrollbar(0, 0, 0, 0, 0)
-{
-  box(FL_NO_BOX);
-  align(FL_ALIGN_BOTTOM);
-  position_ = real_position_ = 0;
-  hposition_ = real_hposition_ = 0;
-  offset_ = 0;
-  top_ = 0;
-  when(FL_WHEN_RELEASE_ALWAYS);
-  selection_ = 0;
-  color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
-  scrollbar.callback(scrollbar_callback);
-//scrollbar.align(FL_ALIGN_LEFT|FL_ALIGN_BOTTOM); // back compatibility?
-  hscrollbar.callback(hscrollbar_callback);
-  hscrollbar.type(FL_HORIZONTAL);
-  textfont_ = FL_HELVETICA;
-  textsize_ = FL_NORMAL_SIZE;
-  textcolor_ = FL_FOREGROUND_COLOR;
-  has_scrollbar_ = BOTH;
-  max_width = 0;
-  max_width_item = 0;
-  scrollbar_size_ = 0;
-  redraw1 = redraw2 = 0;
-  end();
-}
-
-/**
-  Sort the items in the browser based on \p flags.
-  item_swap(void*, void*) and item_text(void*) must be implemented for this call.
-  \param[in] flags FL_SORT_ASCENDING -- sort in ascending order\n
-                   FL_SORT_DESCENDING -- sort in descending order\n
-		   Values other than the above will cause undefined behavior\n
-		   Other flags may appear in the future.
-  \todo Add a flag to ignore case
-*/
-void Fl_Browser_::sort(int flags) {
-  //
-  // Simple bubble sort - pure lazyness on my side.
-  //
-  int i, j, n = -1, desc = ((flags&FL_SORT_DESCENDING)==FL_SORT_DESCENDING);
-  void *a =item_first(), *b, *c;
-  if (!a) return;
-  while (a) {
-    a = item_next(a);
-    n++;
-  }
-  for (i=n; i>0; i--) {
-    char swapped = 0;
-    a = item_first();
-    b = item_next(a);
-    for (j=0; j<i; j++) {
-      const char *ta = item_text(a);
-      const char *tb = item_text(b);
-      c = item_next(b);
-      if (desc) {
-        if (strcmp(ta, tb)<0) {
-          item_swap(a, b);
-          swapped = 1;
-        }
-      } else {
-        if (strcmp(ta, tb)>0) {
-          item_swap(a, b);
-          swapped = 1;
-        }
-      }
-      if (!c) break;
-      b = c; a = item_prev(b);
-    }
-    if (!swapped)
-      break;
-  }
-}
-
-// Default versions of some of the virtual functions:
-
-/**
-  This method may be provided by the subclass to return the height of the
-  \p item, in pixels.  
-  Allow for two additional pixels for the list selection box.
-  This method differs from item_height in that it is only called for 
-  selection and scrolling operations. 
-  The default implementation calls item_height.
-  \param[in] item The item whose height to return.
-  \returns The height, in pixels.
-*/
-int Fl_Browser_::item_quick_height(void* item) const {
-  return item_height(item);
-}
-
-/**
-  This method may be provided to return the average height of all items
-  to be used for scrolling. 
-  The default implementation uses the height of the first item.
-  \returns The average height of items, in pixels.
-*/
-int Fl_Browser_::incr_height() const {
-  return item_quick_height(item_first());
-}
-
-/**
-  This method may be provided by the subclass to indicate the full height
-  of the item list, in pixels. 
-  The default implementation computes the full height from the item heights. 
-  Includes the items that are scrolled off screen.
-  \returns The height of the entire list, in pixels.
-*/
-int Fl_Browser_::full_height() const {
-  int t = 0;
-  for (void* p = item_first(); p; p = item_next(p))
-    t += item_quick_height(p);
-  return t;
-}
-
-/**
-  This method may be provided by the subclass to indicate the full width
-  of the item list, in pixels. 
-  The default implementation computes the full width from the item widths.
-  \returns The maximum width of all the items, in pixels.
-*/
-int Fl_Browser_::full_width() const {
-  return max_width;
-}
-
-/**
-  This method must be implemented by the subclass if it supports 
-  multiple selections; sets the selection state to \p val for the \p item.
-  Sets the selection state for \p item, where optional \p val is 1 (select, the default)
-  or 0 (de-select).
-  \param[in] item The item to be selected
-  \param[in] val The optional selection state; 1=select, 0=de-select.\n
-                 The default is to select the item (1).
-*/
-void Fl_Browser_::item_select(void *item, int val) {}
-
-/**
-  This method must be implemented by the subclass if it supports
-  multiple selections; returns the selection state for \p item.
-  The method should return 1 if \p item is selected, or 0 otherwise.
-  \param[in] item The item to test.
-*/
-int Fl_Browser_::item_selected(void* item) const { return item==selection_ ? 1 : 0; }
-
-//
-// End of "$Id: Fl_Browser_.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Browser_load.cxx b/common/fltk/src/Fl_Browser_load.cxx
deleted file mode 100644
index d529d2a..0000000
--- a/common/fltk/src/Fl_Browser_load.cxx
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// "$Id: Fl_Browser_load.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// File loading routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Browser.H>
-#include <stdio.h>
-#include <FL/fl_utf8.h>
-
-/**
-  Clears the browser and reads the file, adding each line from the file
-  to the browser.  If the filename is NULL or a zero-length
-  string then this just clears the browser.  This returns zero if there
-  was any error in opening or reading the file, in which case errno
-  is set to the system error.  The data() of each line is set
-  to NULL.
-  \param[in] filename The filename to load
-  \returns 1 if OK, 0 on error (errno has reason)
-  \see add()
-*/
-int Fl_Browser::load(const char *filename) {
-#define MAXFL_BLINE 1024
-    char newtext[MAXFL_BLINE];
-    int c;
-    int i;
-    clear();
-    if (!filename || !(filename[0])) return 1;
-    FILE *fl = fl_fopen(filename,"r");
-    if (!fl) return 0;
-    i = 0;
-    do {
-	c = getc(fl);
-	if (c == '\n' || c <= 0 || i>=(MAXFL_BLINE-1)) {
-	    newtext[i] = 0;
-	    add(newtext);
-	    i = 0;
-	} else {
-	    newtext[i++] = c;
-	}
-    } while (c >= 0);
-    fclose(fl);
-    return 1;
-}
-
-//
-// End of "$Id: Fl_Browser_load.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Button.cxx b/common/fltk/src/Fl_Button.cxx
deleted file mode 100644
index 7104b44..0000000
--- a/common/fltk/src/Fl_Button.cxx
+++ /dev/null
@@ -1,218 +0,0 @@
-//
-// "$Id: Fl_Button.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Window.H>
-
-
-Fl_Widget_Tracker *Fl_Button::key_release_tracker = 0;
-
-
-// There are a lot of subclasses, named Fl_*_Button.  Some of
-// them are implemented by setting the type() value and testing it
-// here.  This includes Fl_Radio_Button and Fl_Toggle_Button
-
-/**
-  Sets the current value of the button.
-  A non-zero value sets the button to 1 (ON), and zero sets it to 0 (OFF).
-  \param[in] v button value.
-  \see set(), clear()
- */
-int Fl_Button::value(int v) {
-  v = v ? 1 : 0;
-  oldval = v;
-  clear_changed();
-  if (value_ != v) {
-    value_ = v;
-    if (box()) redraw();
-    else redraw_label();
-    return 1;
-  } else {
-    return 0;
-  }
-}
-
-/**
-  Turns on this button and turns off all other radio buttons in the group
-  (calling \c value(1) or \c set() does not do this).
- */
-void Fl_Button::setonly() { // set this radio button on, turn others off
-  value(1);
-  Fl_Group* g = parent();
-  Fl_Widget*const* a = g->array();
-  for (int i = g->children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o != this && o->type()==FL_RADIO_BUTTON) ((Fl_Button*)o)->value(0);
-  }
-}
-
-void Fl_Button::draw() {
-  if (type() == FL_HIDDEN_BUTTON) return;
-  Fl_Color col = value() ? selection_color() : color();
-  draw_box(value() ? (down_box()?down_box():fl_down(box())) : box(), col);
-  draw_backdrop();
-  if (labeltype() == FL_NORMAL_LABEL && value()) {
-    Fl_Color c = labelcolor();
-    labelcolor(fl_contrast(c, col));
-    draw_label();
-    labelcolor(c);
-  } else draw_label();
-  if (Fl::focus() == this) draw_focus();
-}
-
-int Fl_Button::handle(int event) {
-  int newval;
-  switch (event) {
-  case FL_ENTER: /* FALLTHROUGH */
-  case FL_LEAVE:
-//  if ((value_?selection_color():color())==FL_GRAY) redraw();
-    return 1;
-  case FL_PUSH:
-    if (Fl::visible_focus() && handle(FL_FOCUS)) Fl::focus(this);
-  case FL_DRAG:
-    if (Fl::event_inside(this)) {
-      if (type() == FL_RADIO_BUTTON) newval = 1;
-      else newval = !oldval;
-    } else
-    {
-      clear_changed();
-      newval = oldval;
-    }
-    if (newval != value_) {
-      value_ = newval;
-      set_changed();
-      redraw();
-      if (when() & FL_WHEN_CHANGED) do_callback();
-    }
-    return 1;
-  case FL_RELEASE:
-    if (value_ == oldval) {
-      if (when() & FL_WHEN_NOT_CHANGED) do_callback();
-      return 1;
-    }
-    set_changed();
-    if (type() == FL_RADIO_BUTTON) setonly();
-    else if (type() == FL_TOGGLE_BUTTON) oldval = value_;
-    else {
-      value(oldval);
-      set_changed();
-      if (when() & FL_WHEN_CHANGED) {
-	Fl_Widget_Tracker wp(this);
-        do_callback();
-        if (wp.deleted()) return 1;
-      }
-    }
-    if (when() & FL_WHEN_RELEASE) do_callback();
-    return 1;
-  case FL_SHORTCUT:
-    if (!(shortcut() ?
-	  Fl::test_shortcut(shortcut()) : test_shortcut())) return 0;    
-    if (Fl::visible_focus() && handle(FL_FOCUS)) Fl::focus(this);
-    goto triggered_by_keyboard;
-  case FL_FOCUS : /* FALLTHROUGH */
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      if (box() == FL_NO_BOX) {
-	// Widgets with the FL_NO_BOX boxtype need a parent to
-	// redraw, since it is responsible for redrawing the
-	// background...
-	int X = x() > 0 ? x() - 1 : 0;
-	int Y = y() > 0 ? y() - 1 : 0;
-	if (window()) window()->damage(FL_DAMAGE_ALL, X, Y, w() + 2, h() + 2);
-      } else redraw();
-      return 1;
-    } else return 0;
-  case FL_KEYBOARD :
-    if (Fl::focus() == this && Fl::event_key() == ' ' &&
-        !(Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META))) {
-      set_changed();
-    triggered_by_keyboard:
-      Fl_Widget_Tracker wp(this);
-      if (type() == FL_RADIO_BUTTON && !value_) {
-	setonly();
-	if (when() & FL_WHEN_CHANGED) do_callback();
-      } else if (type() == FL_TOGGLE_BUTTON) {
-	value(!value());
-	if (when() & FL_WHEN_CHANGED) do_callback();
-      } else {
-        simulate_key_action();
-      }
-      if (wp.deleted()) return 1;
-      if (when() & FL_WHEN_RELEASE) do_callback();
-      return 1;
-    }
-  default:
-    return 0;
-  }
-}
-
-void Fl_Button::simulate_key_action()
-{
-  if (key_release_tracker) {
-    Fl::remove_timeout(key_release_timeout, key_release_tracker);
-    key_release_timeout(key_release_tracker);
-  }
-  value(1); 
-  redraw();
-  key_release_tracker = new Fl_Widget_Tracker(this);
-  Fl::add_timeout(0.15, key_release_timeout, key_release_tracker);
-}
-
-void Fl_Button::key_release_timeout(void *d)
-{
-  Fl_Widget_Tracker *wt = (Fl_Widget_Tracker*)d;
-  if (!wt)
-    return;
-  if (wt==key_release_tracker) 
-    key_release_tracker = 0L;
-  Fl_Button *btn = (Fl_Button*)wt->widget();
-  if (btn) {
-    btn->value(0);
-    btn->redraw();
-  }
-  delete wt;
-}
-
-/**
-  The constructor creates the button using the given position, size and label.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Button::Fl_Button(int X, int Y, int W, int H, const char *L)
-: Fl_Widget(X,Y,W,H,L) {
-  box(FL_UP_BOX);
-  down_box(FL_NO_BOX);
-  value_ = oldval = 0;
-  shortcut_ = 0;
-  set_flag(SHORTCUT_LABEL);
-}
-
-//
-// End of "$Id: Fl_Button.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Chart.cxx b/common/fltk/src/Fl_Chart.cxx
deleted file mode 100644
index 5af4ed2..0000000
--- a/common/fltk/src/Fl_Chart.cxx
+++ /dev/null
@@ -1,436 +0,0 @@
-//
-// "$Id: Fl_Chart.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Forms-compatible chart widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/math.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Chart.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-#include <stdlib.h>
-
-#define ARCINC	(2.0*M_PI/360.0)
-
-// this function is in fl_boxtype.cxx:
-void fl_rectbound(int x,int y,int w,int h, Fl_Color color);
-
-/* Widget specific information */
-
-static void draw_barchart(int x,int y,int w,int h,
-			  int numb, FL_CHART_ENTRY entries[],
-			  double min, double max, int autosize, int maxnumb,
-			  Fl_Color textcolor)
-/* Draws a bar chart. x,y,w,h is the bounding box, entries the array of
-   numb entries and min and max the boundaries. */
-{
-  double incr;
-  int zeroh;
-  double lh = fl_height();
-  if (max == min) incr = h;
-  else incr = h/(max-min);
-  if ( (-min*incr) < lh) {
-      incr = (h - lh + min*incr)/(max-min);
-      zeroh = int(y+h-lh);
-  } else {
-      zeroh = (int)rint(y+h+min * incr);
-  }
-  int bwidth = (int)rint(w/double(autosize?numb:maxnumb));
-  /* Draw base line */
-  fl_color(textcolor);
-  fl_line(x, zeroh, x+w, zeroh);
-  if (min == 0.0 && max == 0.0) return; /* Nothing else to draw */
-  int i;
-  /* Draw the bars */
-  for (i=0; i<numb; i++) {
-      int hh = (int)rint(entries[i].val*incr);
-      if (hh < 0)
-	fl_rectbound(x+i*bwidth,zeroh,bwidth+1,-hh+1, (Fl_Color)entries[i].col);
-      else if (hh > 0)
-	fl_rectbound(x+i*bwidth,zeroh-hh,bwidth+1,hh+1,(Fl_Color)entries[i].col);
-  }
-  /* Draw the labels */
-  fl_color(textcolor);
-  for (i=0; i<numb; i++)
-      fl_draw(entries[i].str,
-	      x+i*bwidth+bwidth/2,zeroh,0,0,
-	      FL_ALIGN_TOP);
-}
-
-static void draw_horbarchart(int x,int y,int w,int h,
-			     int numb, FL_CHART_ENTRY entries[],
-			     double min, double max, int autosize, int maxnumb,
-			     Fl_Color textcolor)
-/* Draws a horizontal bar chart. x,y,w,h is the bounding box, entries the
-   array of numb entries and min and max the boundaries. */
-{
-  int i;
-  double lw = 0.0;		/* Maximal label width */
-  /* Compute maximal label width */
-  for (i=0; i<numb; i++) {
-      double w1 = fl_width(entries[i].str);
-      if (w1 > lw) lw = w1;
-  }
-  if (lw > 0.0) lw += 4.0;
-  double incr;
-  int zeroh;
-  if (max == min) incr = w;
-  else incr = w/(max-min);
-  if ( (-min*incr) < lw) {
-      incr = (w - lw + min*incr)/(max-min);
-      zeroh = x+(int)rint(lw);
-  } else {
-      zeroh = (int)rint(x-min * incr);
-  }
-  int bwidth = (int)rint(h/double(autosize?numb:maxnumb));
-  /* Draw base line */
-  fl_color(textcolor);
-  fl_line(zeroh, y, zeroh, y+h);
-  if (min == 0.0 && max == 0.0) return; /* Nothing else to draw */
-  /* Draw the bars */
-  for (i=0; i<numb; i++) {
-      int ww = (int)rint(entries[i].val*incr);
-      if (ww > 0)
-	fl_rectbound(zeroh,y+i*bwidth,ww+1,bwidth+1, (Fl_Color)entries[i].col);
-      else if (ww < 0)
-	fl_rectbound(zeroh+ww,y+i*bwidth,-ww+1,bwidth+1,(Fl_Color)entries[i].col);
-  }
-  /* Draw the labels */
-  fl_color(textcolor);
-  for (i=0; i<numb; i++)
-      fl_draw(entries[i].str,
-	      zeroh-2,y+i*bwidth+bwidth/2,0,0,
-	      FL_ALIGN_RIGHT);
-}
-
-static void draw_linechart(int type, int x,int y,int w,int h,
-			   int numb, FL_CHART_ENTRY entries[],
-			   double min, double max, int autosize, int maxnumb,
-			   Fl_Color textcolor)
-/* Draws a line chart. x,y,w,h is the bounding box, entries the array of
-   numb entries and min and max the boundaries. */
-{
-  int i;
-  double lh = fl_height();
-  double incr;
-  if (max == min) incr = h-2.0*lh;
-  else incr = (h-2.0*lh)/ (max-min);
-  int zeroh = (int)rint(y+h-lh+min * incr);
-  double bwidth = w/double(autosize?numb:maxnumb);
-  /* Draw the values */
-  for (i=0; i<numb; i++) {
-      int x0 = x + (int)rint((i-.5)*bwidth);
-      int x1 = x + (int)rint((i+.5)*bwidth);
-      int yy0 = i ? zeroh - (int)rint(entries[i-1].val*incr) : 0;
-      int yy1 = zeroh - (int)rint(entries[i].val*incr);
-      if (type == FL_SPIKE_CHART) {
-	  fl_color((Fl_Color)entries[i].col);
-	  fl_line(x1, zeroh, x1, yy1);
-      } else if (type == FL_LINE_CHART && i != 0) {
-	  fl_color((Fl_Color)entries[i-1].col);
-	  fl_line(x0,yy0,x1,yy1);
-      } else if (type == FL_FILLED_CHART && i != 0) {
-	  fl_color((Fl_Color)entries[i-1].col);
-	  if ((entries[i-1].val>0.0)!=(entries[i].val>0.0)) {
-	      double ttt = entries[i-1].val/(entries[i-1].val-entries[i].val);
-	      int xt = x + (int)rint((i-.5+ttt)*bwidth);
-	      fl_polygon(x0,zeroh, x0,yy0, xt,zeroh);
-	      fl_polygon(xt,zeroh, x1,yy1, x1,zeroh);
-	  } else {
-	      fl_polygon(x0,zeroh, x0,yy0, x1,yy1, x1,zeroh);
-	  }
-	  fl_color(textcolor);
-	  fl_line(x0,yy0,x1,yy1);
-      }
-  }
-  /* Draw base line */
-  fl_color(textcolor);
-  fl_line(x,zeroh,x+w,zeroh);
-  /* Draw the labels */
-  for (i=0; i<numb; i++)
-      fl_draw(entries[i].str,
-	      x+(int)rint((i+.5)*bwidth), zeroh - (int)rint(entries[i].val*incr),0,0,
-	      entries[i].val>=0 ? FL_ALIGN_BOTTOM : FL_ALIGN_TOP);
-}
-
-static void draw_piechart(int x,int y,int w,int h,
-			  int numb, FL_CHART_ENTRY entries[], int special,
-			  Fl_Color textcolor)
-/* Draws a pie chart. x,y,w,h is the bounding box, entries the array of
-   numb entries */
-{
-  int i;
-  double xc,yc,rad;	/* center and radius */
-  double tot;		/* sum of values */
-  double incr;		/* increment in angle */
-  double curang;		/* current angle we are drawing */
-  double txc,tyc;	/* temporary center */
-  double lh = fl_height();
-  /* compute center and radius */
-  double h_denom = (special ? 2.3 : 2.0);
-  rad = (h - 2*lh)/h_denom/1.1;
-  xc = x+w/2.0; yc = y+h-1.1*rad-lh;
-  /* compute sum of values */
-  tot = 0.0;
-  for (i=0; i<numb; i++)
-    if (entries[i].val > 0.0) tot += entries[i].val;
-  if (tot == 0.0) return;
-  incr = 360.0/tot;
-  /* Draw the pie */
-  curang = 0.0;
-  for (i=0; i<numb; i++)
-    if (entries[i].val > 0.0)
-    {
-      txc = xc; tyc = yc;
-      /* Correct for special pies */
-      if (special && i==0)
-      {
-        txc += 0.3*rad*cos(ARCINC*(curang+0.5*incr*entries[i].val));
-        tyc -= 0.3*rad*sin(ARCINC*(curang+0.5*incr*entries[i].val));
-      }
-      fl_color((Fl_Color)entries[i].col);
-      fl_begin_polygon(); fl_vertex(txc,tyc);
-      fl_arc(txc,tyc,rad,curang, curang+incr*entries[i].val);
-      fl_end_polygon();
-      fl_color(textcolor);
-      fl_begin_loop(); fl_vertex(txc,tyc);
-      fl_arc(txc,tyc,rad,curang, curang+incr*entries[i].val);
-      fl_end_loop();
-      curang += 0.5 * incr * entries[i].val;
-      /* draw the label */
-      double xl = txc + 1.1*rad*cos(ARCINC*curang);
-      fl_draw(entries[i].str,
-	      (int)rint(xl),
-	      (int)rint(tyc - 1.1*rad*sin(ARCINC*curang)),
-	      0, 0,
-	      xl<txc ? FL_ALIGN_RIGHT : FL_ALIGN_LEFT);
-      curang += 0.5 * incr * entries[i].val;
-    }
-}
-
-void Fl_Chart::draw() {
-
-    draw_box();
-    Fl_Boxtype b = box();
-    int xx = x()+Fl::box_dx(b); // was 9 instead of dx...
-    int yy = y()+Fl::box_dy(b);
-    int ww = w()-Fl::box_dw(b);
-    int hh = h()-Fl::box_dh(b);
-    fl_push_clip(xx, yy, ww, hh);
-
-    ww--; hh--; // adjust for line thickness
-
-    if (min >= max) {
-	min = max = 0.0;
-	for (int i=0; i<numb; i++) {
-	    if (entries[i].val < min) min = entries[i].val;
-	    if (entries[i].val > max) max = entries[i].val;
-	}
-    }
-
-    fl_font(textfont(),textsize());
-
-    switch (type()) {
-    case FL_BAR_CHART:
-	ww++; // makes the bars fill box correctly
-	draw_barchart(xx,yy,ww,hh, numb, entries, min, max,
-			autosize(), maxnumb, textcolor());
-	break;
-    case FL_HORBAR_CHART:
-	hh++; // makes the bars fill box correctly
-	draw_horbarchart(xx,yy,ww,hh, numb, entries, min, max,
-			autosize(), maxnumb, textcolor());
-	break;
-    case FL_PIE_CHART:
-	draw_piechart(xx,yy,ww,hh,numb,entries,0, textcolor());
-	break;
-    case FL_SPECIALPIE_CHART:
-	draw_piechart(xx,yy,ww,hh,numb,entries,1,textcolor());
-	break;
-    default:
-	draw_linechart(type(),xx,yy,ww,hh, numb, entries, min, max,
-			autosize(), maxnumb, textcolor());
-	break;
-    }
-    draw_label();
-    fl_pop_clip();
-}
-
-/*------------------------------*/
-
-#define FL_CHART_BOXTYPE	FL_BORDER_BOX
-#define FL_CHART_COL1		FL_COL1
-#define FL_CHART_LCOL		FL_LCOL
-#define FL_CHART_ALIGN		FL_ALIGN_BOTTOM
-
-/**
-  Create a new Fl_Chart widget using the given position, size and label string.
-  The default boxstyle is \c FL_NO_BOX.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Chart::Fl_Chart(int X, int Y, int W, int H,const char *L) :
-Fl_Widget(X,Y,W,H,L) {
-  box(FL_BORDER_BOX);
-  align(FL_ALIGN_BOTTOM);
-  numb       = 0;
-  maxnumb    = 0;
-  sizenumb   = FL_CHART_MAX;
-  autosize_  = 1;
-  min = max  = 0;
-  textfont_  = FL_HELVETICA;
-  textsize_  = 10;
-  textcolor_ = FL_FOREGROUND_COLOR;
-  entries    = (FL_CHART_ENTRY *)calloc(sizeof(FL_CHART_ENTRY), FL_CHART_MAX + 1);
-}
-
-/**
-  Destroys the Fl_Chart widget and all of its data.
- */
-Fl_Chart::~Fl_Chart() {
-  free(entries);
-}
-
-/**
-  Removes all values from the chart.
- */
-void Fl_Chart::clear() {
-  numb = 0;
-  min = max = 0;
-  redraw();
-}
-
-/**
-  Add the data value \p val with optional label \p str and color \p col
-  to the chart.
-  \param[in] val data value
-  \param[in] str optional data label
-  \param[in] col optional data color
- */
-void Fl_Chart::add(double val, const char *str, unsigned col) {
-  /* Allocate more entries if required */
-  if (numb >= sizenumb) {
-    sizenumb += FL_CHART_MAX;
-    entries = (FL_CHART_ENTRY *)realloc(entries, sizeof(FL_CHART_ENTRY) * (sizenumb + 1));
-  }
-  // Shift entries as needed
-  if (numb >= maxnumb && maxnumb > 0) {
-    memmove(entries, entries + 1, sizeof(FL_CHART_ENTRY) * (numb - 1));
-    numb --;
-  }
-  entries[numb].val = float(val);
-  entries[numb].col = col;
-    if (str) {
-	strlcpy(entries[numb].str,str,FL_CHART_LABEL_MAX + 1);
-    } else {
-	entries[numb].str[0] = 0;
-    }
-  numb++;
-  redraw();
-}
-
-/**
-  Inserts a data value \p val at the given position \p ind.
-  Position 1 is the first data value.
-  \param[in] ind insertion position
-  \param[in] val data value
-  \param[in] str optional data label
-  \param[in] col optional data color
- */
-void Fl_Chart::insert(int ind, double val, const char *str, unsigned col) {
-  int i;
-  if (ind < 1 || ind > numb+1) return;
-  /* Allocate more entries if required */
-  if (numb >= sizenumb) {
-    sizenumb += FL_CHART_MAX;
-    entries = (FL_CHART_ENTRY *)realloc(entries, sizeof(FL_CHART_ENTRY) * (sizenumb + 1));
-  }
-  // Shift entries as needed
-  for (i=numb; i >= ind; i--) entries[i] = entries[i-1];
-  if (numb < maxnumb || maxnumb == 0) numb++;
-  /* Fill in the new entry */
-  entries[ind-1].val = float(val);
-  entries[ind-1].col = col;
-  if (str) {
-      strlcpy(entries[ind-1].str,str,FL_CHART_LABEL_MAX+1);
-  } else {
-      entries[ind-1].str[0] = 0;
-  }
-  redraw();
-}
-
-/**
-  Replace a data value \p val at the given position \p ind.
-  Position 1 is the first data value.
-  \param[in] ind insertion position
-  \param[in] val data value
-  \param[in] str optional data label
-  \param[in] col optional data color
- */
-void Fl_Chart::replace(int ind,double val, const char *str, unsigned col) {
-  if (ind < 1 || ind > numb) return;
-  entries[ind-1].val = float(val);
-  entries[ind-1].col = col;
-  if (str) {
-      strlcpy(entries[ind-1].str,str,FL_CHART_LABEL_MAX+1);
-  } else {
-      entries[ind-1].str[0] = 0;
-  }
-  redraw();
-}
-
-/**
-  Sets the lower and upper bounds of the chart values.
-  \param[in] a, b are used to set lower, upper
- */
-void Fl_Chart::bounds(double a, double b) {
-  this->min = a;
-  this->max = b;
-  redraw();
-}
-
-/**
-  Set the maximum number of data values for a chart.
-  If you do not call this method then the chart will be allowed to grow
-  to any size depending on available memory.
-  \param[in] m maximum number of data values allowed.
- */
-void Fl_Chart::maxsize(int m) {
-  int i;
-  /* Fill in the new number */
-  if (m < 0) return;
-  maxnumb = m;
-  /* Shift entries if required */
-  if (numb > maxnumb) {
-      for (i = 0; i<maxnumb; i++)
-	  entries[i] = entries[i+numb-maxnumb];
-      numb = maxnumb;
-      redraw();
-  }
-}
-
-//
-// End of "$Id: Fl_Chart.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Check_Browser.cxx b/common/fltk/src/Fl_Check_Browser.cxx
deleted file mode 100644
index 4355119..0000000
--- a/common/fltk/src/Fl_Check_Browser.cxx
+++ /dev/null
@@ -1,329 +0,0 @@
-//
-// "$Id: Fl_Check_Browser.cxx 8354 2011-02-01 15:41:04Z manolo $"
-//
-// Fl_Check_Browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-#include <FL/fl_draw.H>
-#include <FL/Fl_Check_Browser.H>
-
-/* This uses a cache for faster access when you're scanning the list
-either forwards or backwards. */
-
-Fl_Check_Browser::cb_item *Fl_Check_Browser::find_item(int n) const {
-	int i = n;
-	cb_item *p = first;
-
-	if (n <= 0 || n > nitems_ || p == 0) {
-		return 0;
-	}
-
-	if (n == cached_item) {
-		p = cache;
-		n = 1;
-	} else if (n == cached_item + 1) {
-		p = cache->next;
-		n = 1;
-	} else if (n == cached_item - 1) {
-		p = cache->prev;
-		n = 1;
-	}
-
-	while (--n) {
-		p = p->next;
-	}
-
-	/* Cast to not const and cache it. */
-
-	((Fl_Check_Browser *)this)->cache = p;
-	((Fl_Check_Browser *)this)->cached_item = i;
-
-	return p;
-}
-
-int Fl_Check_Browser::lineno(cb_item *p0) const {
-	cb_item *p = first;
-
-	if (p == 0) {
-		return 0;
-	}
-
-	int i = 1;
-	while (p) {
-		if (p == p0) {
-			return i;
-		}
-		i++;
-		p = p->next;
-	}
-
-	return 0;
-}
-
-Fl_Check_Browser::Fl_Check_Browser(int X, int Y, int W, int H, const char *l)
-/**  The constructor makes an empty browser.*/
-: Fl_Browser_(X, Y, W, H, l) {
-	type(FL_SELECT_BROWSER);
-	when(FL_WHEN_NEVER);
-	first = last = 0;
-	nitems_ = nchecked_ = 0;
-	cached_item = -1;
-}
-
-void *Fl_Check_Browser::item_first() const {
-	return first;
-}
-
-void *Fl_Check_Browser::item_next(void *l) const {
-	return ((cb_item *)l)->next;
-}
-
-void *Fl_Check_Browser::item_prev(void *l) const {
-	return ((cb_item *)l)->prev;
-}
-
-int Fl_Check_Browser::item_height(void *) const {
-	return textsize() + 2;
-}
-
-#define CHECK_SIZE (textsize()-2)
-
-int Fl_Check_Browser::item_width(void *v) const {
-	fl_font(textfont(), textsize());
-	return int(fl_width(((cb_item *)v)->text)) + CHECK_SIZE + 8;
-}
-
-void Fl_Check_Browser::item_draw(void *v, int X, int Y, int, int) const {
-	cb_item *i = (cb_item *)v;
-	char *s = i->text;
-	int tsize = textsize();
-	Fl_Color col = active_r() ? textcolor() : fl_inactive(textcolor());
-	int cy = Y + (tsize + 1 - CHECK_SIZE) / 2;
-	X += 2;
-
-	fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
-	fl_loop(X, cy, X, cy + CHECK_SIZE,
-	        X + CHECK_SIZE, cy + CHECK_SIZE, X + CHECK_SIZE, cy);
-	if (i->checked) {
-	  int tx = X + 3;
-	  int tw = CHECK_SIZE - 4;
-	  int d1 = tw/3;
-	  int d2 = tw-d1;
-	  int ty = cy + (CHECK_SIZE+d2)/2-d1-2;
-	  for (int n = 0; n < 3; n++, ty++) {
-	    fl_line(tx, ty, tx+d1, ty+d1);
-	    fl_line(tx+d1, ty+d1, tx+tw-1, ty+d1-d2+1);
-	  }
-	}
-	fl_font(textfont(), tsize);
-	if (i->selected) {
-		col = fl_contrast(col, selection_color());
-	}
-	fl_color(col);
-	fl_draw(s, X + CHECK_SIZE + 8, Y + tsize - 1);
-}
-
-void Fl_Check_Browser::item_select(void *v, int state) {
-	cb_item *i = (cb_item *)v;
-
-	if (state) {
-		if (i->checked) {
-			i->checked = 0;
-			nchecked_--;
-		} else {
-			i->checked = 1;
-			nchecked_++;
-		}
-	}
-}
-
-int Fl_Check_Browser::item_selected(void *v) const {
-	cb_item *i = (cb_item *)v;
-	return i->selected;
-}
-/**
- Add a new unchecked line to the end of the browser.  
- \see add(char *s, int b)
-*/
-int Fl_Check_Browser::add(char *s) {
-	return (add(s, 0));
-}
-
-/** 
- Add a new line to the end of the browser.  The text is copied
- using the strdup() function.  It may also be NULL to make
- a blank line.  It can set the item checked if \p b is not 0.
- */
-int Fl_Check_Browser::add(char *s, int b) {
-	cb_item *p = (cb_item *)malloc(sizeof(cb_item));
-	p->next = 0;
-	p->prev = 0;
-	p->checked = b;
-	p->selected = 0;
-	p->text = strdup(s);
-
-	if (b) {
-		nchecked_++;
-	}
-
-	if (last == 0) {
-		first = last = p;
-	} else {
-		last->next = p;
-		p->prev = last;
-		last = p;
-	}
-	nitems_++;
-
-	return (nitems_);
-}
-
-/**
-  Remove line n and make the browser one line shorter. Returns the 
-  number of lines left in the browser.
-*/
-int Fl_Check_Browser::remove(int item) {
-  cb_item *p = find_item(item);
-  
-  // line at item exists
-  if(p) {
-    // tell the Browser_ what we will do
-    deleting(p);
-
-    // fix checked count
-    if(p->checked)
-      --nchecked_;
-    
-    // remove the node
-    if (p->prev) 
-      p->prev->next = p->next;
-    else 
-      first = p->next;
-    if (p->next) 
-      p->next->prev = p->prev;
-    else 
-      last = p->prev;
-    
-    free(p->text);
-    free(p);
-    
-    --nitems_;
-    cached_item = -1;
-  }
-  
-  return (nitems_);
-}
-
-/**  Remove every item from the browser.*/
-void Fl_Check_Browser::clear() {
-	cb_item *p = first;
-	cb_item *next;
-
-	if (p == 0) {
-		return;
-	}
-
-	new_list();
-	do {
-		next = p->next;
-		free(p->text);
-		free(p);
-		p = next;
-	} while (p);
-
-	first = last = 0;
-	nitems_ = nchecked_ = 0;
-	cached_item = -1;
-}
-
-/** Gets the current status of item item. */
-int Fl_Check_Browser::checked(int i) const {
-	cb_item *p = find_item(i);
-
-	if (p) return p->checked;
-	return 0;
-}
-
-/** Sets the check status of item item to b. */
-void Fl_Check_Browser::checked(int i, int b) {
-	cb_item *p = find_item(i);
-
-	if (p && (p->checked ^ b)) {
-		p->checked = b;
-		if (b) {
-			nchecked_++;
-		} else {
-			nchecked_--;
-		}
-		redraw();
-	}
-}
-
-/**  Returns the index of the currently selected item.*/
-int Fl_Check_Browser::value() const {
-	return lineno((cb_item *)selection());
-}
-
-/**  Return a pointer to an internal buffer holding item item's text.*/
-char *Fl_Check_Browser::text(int i) const {
-	cb_item *p = find_item(i);
-
-	if (p) return p->text;
-	return 0;
-}
-
-/**  Sets all the items checked.*/
-void Fl_Check_Browser::check_all() {
-	cb_item *p;
-
-	nchecked_ = nitems_;
-	for (p = first; p; p = p->next) {
-		p->checked = 1;
-	}
-	redraw();
-}
-
-/**  Sets all the items unchecked.*/
-void Fl_Check_Browser::check_none() {
-	cb_item *p;
-
-	nchecked_ = 0;
-	for (p = first; p; p = p->next) {
-		p->checked = 0;
-	}
-	redraw();
-}
-
-int Fl_Check_Browser::handle(int event) {
-  if (event==FL_PUSH)
-    deselect();
-  return Fl_Browser_::handle(event);
-}
-
-//
-// End of "$Id: Fl_Check_Browser.cxx 8354 2011-02-01 15:41:04Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Check_Button.cxx b/common/fltk/src/Fl_Check_Button.cxx
deleted file mode 100644
index 0baeafc..0000000
--- a/common/fltk/src/Fl_Check_Button.cxx
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// "$Id: Fl_Check_Button.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Check button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Check_Button.H>
-
-// TODO Correct incorrect Fl_Check_Button comments.
-// A subclass of Fl_Button that always draws as a diamond box.  This
-// diamond is smaller than the widget size and can be surchecked by
-// another box type, for compatibility with Forms.
-
-/**
-  Creates a new Fl_Check_Button widget using the given position, size and
-  label string.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Check_Button::Fl_Check_Button(int X, int Y, int W, int H, const char *L)
-: Fl_Light_Button(X, Y, W, H, L) {
-  box(FL_NO_BOX);
-  down_box(FL_DOWN_BOX);
-  selection_color(FL_FOREGROUND_COLOR);
-}
diff --git a/common/fltk/src/Fl_Choice.cxx b/common/fltk/src/Fl_Choice.cxx
deleted file mode 100644
index 6f3b06f..0000000
--- a/common/fltk/src/Fl_Choice.cxx
+++ /dev/null
@@ -1,213 +0,0 @@
-//
-// "$Id: Fl_Choice.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Choice widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Choice.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-
-// Emulates the Forms choice widget.  This is almost exactly the same
-// as an Fl_Menu_Button.  The only difference is the appearance of the
-// button: it draws the text of the current pick and a down-arrow.
-
-void Fl_Choice::draw() {
-  int dx = Fl::box_dx(FL_DOWN_BOX);
-  int dy = Fl::box_dy(FL_DOWN_BOX);
-  int H = h() - 2 * dy;
-  int W = (H > 20) ? 20 : H;
-  int X = x() + w() - W - dx;
-  int Y = y() + dy;
-  int w1 = (W - 4) / 3; if (w1 < 1) w1 = 1;
-  int x1 = X + (W - 2 * w1 - 1) / 2;
-  int y1 = Y + (H - w1 - 1) / 2;
-
-  if (Fl::scheme()) {
-    draw_box(FL_UP_BOX, color());
-
-    fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor()));
-    if (!strcmp(Fl::scheme(), "plastic")) {
-      // Show larger up/down arrows...
-      fl_polygon(x1, y1 + 3, x1 + w1, y1 + w1 + 3, x1 + 2 * w1, y1 + 3);
-      fl_polygon(x1, y1 + 1, x1 + w1, y1 - w1 + 1, x1 + 2 * w1, y1 + 1);
-    } else {
-      // Show smaller up/down arrows with a divider...
-      x1 = x() + w() - 13 - dx;
-      y1 = y() + h() / 2;
-      fl_polygon(x1, y1 - 2, x1 + 3, y1 - 5, x1 + 6, y1 - 2);
-      fl_polygon(x1, y1 + 2, x1 + 3, y1 + 5, x1 + 6, y1 + 2);
-
-      fl_color(fl_darker(color()));
-      fl_yxline(x1 - 7, y1 - 8, y1 + 8);
-
-      fl_color(fl_lighter(color()));
-      fl_yxline(x1 - 6, y1 - 8, y1 + 8);
-    }
-  } else {
-    if (fl_contrast(textcolor(), FL_BACKGROUND2_COLOR) == textcolor()) {
-      draw_box(FL_DOWN_BOX, FL_BACKGROUND2_COLOR);
-    } else {
-      draw_box(FL_DOWN_BOX, fl_lighter(color()));
-    }
-    draw_box(FL_UP_BOX,X,Y,W,H,color());
-
-    fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor()));
-    fl_polygon(x1, y1, x1 + w1, y1 + w1, x1 + 2 * w1, y1);
-  }
-
-  W += 2 * dx;
-
-  if (mvalue()) {
-    Fl_Menu_Item m = *mvalue();
-    if (active_r()) m.activate(); else m.deactivate();
-
-    // ERCO
-    int xx = x() + dx, yy = y() + dy + 1, ww = w() - W, hh = H - 2;
-
-    fl_push_clip(xx, yy, ww, hh);
-
-    if ( Fl::scheme()) {
-      Fl_Label l;
-      l.value = m.text;
-      l.image = 0;
-      l.deimage = 0;
-      l.type = m.labeltype_;
-      l.font = m.labelsize_ || m.labelfont_ ? m.labelfont_ : textfont();
-      l.size = m.labelsize_ ? m.labelsize_ : textsize();
-      l.color= m.labelcolor_ ? m.labelcolor_ : textcolor();
-      if (!m.active()) l.color = fl_inactive((Fl_Color)l.color);
-      fl_draw_shortcut = 2; // hack value to make '&' disappear
-      l.draw(xx+3, yy, ww>6 ? ww-6 : 0, hh, FL_ALIGN_LEFT);
-      fl_draw_shortcut = 0;
-      if ( Fl::focus() == this ) draw_focus(box(), xx, yy, ww, hh);
-    }
-    else {
-      fl_draw_shortcut = 2; // hack value to make '&' disappear
-      m.draw(xx, yy, ww, hh, this, Fl::focus() == this);
-      fl_draw_shortcut = 0;
-    }
-
-    fl_pop_clip();
-  }
-
-  draw_label();
-}
-
-/**
-  Create a new Fl_Choice widget using the given position, size and label string.
-  The default boxtype is \c FL_UP_BOX.
-
-  The constructor sets menu() to NULL.
-  See Fl_Menu_ for the methods to set or change the menu.
-
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Choice::Fl_Choice(int X, int Y, int W, int H, const char *L)
-: Fl_Menu_(X,Y,W,H,L) {
-  align(FL_ALIGN_LEFT);
-  when(FL_WHEN_RELEASE);
-  textfont(FL_HELVETICA);
-  box(FL_FLAT_BOX);
-  down_box(FL_BORDER_BOX);
-}
-
-/**
-  Sets the currently selected value using a pointer to menu item.
-  Changing the selected value causes a redraw().
-  \param[in] v pointer to menu item in the menu item array.
-  \returns non-zero if the new value is different to the old one.
- */
-int Fl_Choice::value(const Fl_Menu_Item *v) {
-  if (!Fl_Menu_::value(v)) return 0;
-  redraw();
-  return 1;
-}
-
-/**
-  Sets the currently selected value using the index into the menu item array.
-  Changing the selected value causes a redraw().
-  \param[in] v index of value in the menu item array.
-  \returns non-zero if the new value is different to the old one.
- */
-int Fl_Choice::value(int v) {
-  if (v == -1) return value((const Fl_Menu_Item *)0);
-  if (v < 0 || v >= (size() - 1)) return 0;
-  if (!Fl_Menu_::value(v)) return 0;
-  redraw();
-  return 1;
-}
-
-int Fl_Choice::handle(int e) {
-  if (!menu() || !menu()->text) return 0;
-  const Fl_Menu_Item* v;
-  switch (e) {
-  case FL_ENTER:
-  case FL_LEAVE:
-    return 1;
-
-  case FL_KEYBOARD:
-    if (Fl::event_key() != ' ' ||
-        (Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META))) return 0;
-  case FL_PUSH:
-    if (Fl::visible_focus()) Fl::focus(this);
-  J1:
-    if (Fl::scheme()
-	|| fl_contrast(textcolor(), FL_BACKGROUND2_COLOR) != textcolor()) {
-      v = menu()->pulldown(x(), y(), w(), h(), mvalue(), this);
-    } else {
-      // In order to preserve the old look-n-feel of "white" menus,
-      // temporarily override the color() of this widget...
-      Fl_Color c = color();
-      color(FL_BACKGROUND2_COLOR);
-      v = menu()->pulldown(x(), y(), w(), h(), mvalue(), this);
-      color(c);
-    }
-    if (!v || v->submenu()) return 1;
-    if (v != mvalue()) redraw();
-    picked(v);
-    return 1;
-  case FL_SHORTCUT:
-    if (Fl_Widget::test_shortcut()) goto J1;
-    v = menu()->test_shortcut();
-    if (!v) return 0;
-    if (v != mvalue()) redraw();
-    picked(v);
-    return 1;
-  case FL_FOCUS:
-  case FL_UNFOCUS:
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    } else return 0;
-  default:
-    return 0;
-  }
-}
-
-//
-// End of "$Id: Fl_Choice.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Clock.cxx b/common/fltk/src/Fl_Clock.cxx
deleted file mode 100644
index 75a757c..0000000
--- a/common/fltk/src/Fl_Clock.cxx
+++ /dev/null
@@ -1,218 +0,0 @@
-//
-// "$Id: Fl_Clock.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Clock widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Clock.H>
-#include <FL/fl_draw.H>
-#include <math.h>
-#include <time.h>
-#ifndef WIN32
-#  include <sys/time.h>
-#endif /* !WIN32 */
-
-// Original clock display written by Paul Haeberli at SGI.
-// Modifications by Mark Overmars for Forms
-// Further changes by Bill Spitzak for fltk
-
-const float hourhand[4][2] = {{-0.5f, 0}, {0, 1.5f}, {0.5f, 0}, {0, -7.0f}};
-const float  minhand[4][2] = {{-0.5f, 0}, {0, 1.5f}, {0.5f, 0}, {0, -11.5f}};
-const float  sechand[4][2] = {{-0.1f, 0}, {0, 2.0f}, {0.1f, 0}, {0, -11.5f}};
-
-static void drawhand(double ang,const float v[][2],Fl_Color fill,Fl_Color line)
-{
-  fl_push_matrix();
-  fl_rotate(ang);
-  fl_color(fill); fl_begin_polygon();
-  int i; for (i=0; i<4; i++) fl_vertex(v[i][0],v[i][1]); fl_end_polygon();
-  fl_color(line); fl_begin_loop();
-  for (i=0; i<4; i++) fl_vertex(v[i][0],v[i][1]); fl_end_loop();
-  fl_pop_matrix();
-}
-
-void Fl_Clock_Output::drawhands(Fl_Color fill, Fl_Color line) {
-  if (!active_r()) {
-    fill = fl_inactive(fill);
-    line = fl_inactive(line);
-  }
-  drawhand(-360*(hour()+minute()/60.0)/12, hourhand, fill, line);
-  drawhand(-360*(minute()+second()/60.0)/60, minhand, fill, line);
-  drawhand(-360*(second()/60.0), sechand, fill, line);
-}
-
-static void rect(double x, double y, double w, double h) {
-  double r = x+w;
-  double t = y+h;
-  fl_begin_polygon();
-  fl_vertex(x, y);
-  fl_vertex(r, y);
-  fl_vertex(r, t);
-  fl_vertex(x, t);
-  fl_end_polygon();
-}
-
-/**
-  Draw clock with the given position and size.
-  \param[in] X, Y, W, H position and size
-*/
-void Fl_Clock_Output::draw(int X, int Y, int W, int H) {
-  Fl_Color box_color = type()==FL_ROUND_CLOCK ? FL_GRAY : color();
-  Fl_Color shadow_color = fl_color_average(box_color, FL_BLACK, 0.5);
-  draw_box(box(), X, Y, W, H, box_color);
-  fl_push_matrix();
-  fl_translate(X+W/2.0-.5, Y+H/2.0-.5);
-  fl_scale((W-1)/28.0, (H-1)/28.0);
-  if (type() == FL_ROUND_CLOCK) {
-    fl_color(active_r() ? color() : fl_inactive(color()));
-    fl_begin_polygon(); fl_circle(0,0,14); fl_end_polygon();
-    fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
-    fl_begin_loop(); fl_circle(0,0,14); fl_end_loop();
-  }
-  // draw the shadows:
-  fl_push_matrix();
-  fl_translate(0.60, 0.60);
-  drawhands(shadow_color, shadow_color);
-  fl_pop_matrix();
-  // draw the tick marks:
-  fl_push_matrix();
-  fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
-  for (int i=0; i<12; i++) {
-    if (i==6) rect(-0.5, 9, 1, 2);
-    else if (i==3 || i==0 || i== 9) rect(-0.5, 9.5, 1, 1);
-    else rect(-0.25, 9.5, .5, 1);
-    fl_rotate(-30);
-  }
-  fl_pop_matrix();
-  // draw the hands:
-  drawhands(selection_color(), FL_FOREGROUND_COLOR); // color was 54
-  fl_pop_matrix();
-}
-
-/**
-  Draw clock with current position and size.
-*/
-void Fl_Clock_Output::draw() {
-  draw(x(), y(), w(), h());
-  draw_label();
-}
-
-/**
-  Set the displayed time.
-  Set the time in hours, minutes, and seconds.
-  \param[in] H, m, s displayed time
-  \see hour(), minute(), second()
- */
-void Fl_Clock_Output::value(int H, int m, int s) {
-  if (H!=hour_ || m!=minute_ || s!=second_) {
-    hour_ = H; minute_ = m; second_ = s;
-    value_ = (H * 60 + m) * 60 + s;
-    damage(FL_DAMAGE_CHILD);
-  }
-}
-
-/**
-  Set the displayed time.
-  Set the time in seconds since the UNIX epoch (January 1, 1970).
-  \param[in] v seconds since epoch
-  \see value()
- */
-void Fl_Clock_Output::value(ulong v) {
-  value_ = v;
-  struct tm *timeofday;
-  // Some platforms, notably Windows, now use a 64-bit time_t value...
-  time_t vv = (time_t)v;
-  timeofday = localtime(&vv);
-  value(timeofday->tm_hour, timeofday->tm_min, timeofday->tm_sec);
-}
-
-/**
-  Create a new Fl_Clock_Output widget with the given position, size and label.
-  The default boxtype is \c FL_NO_BOX.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Clock_Output::Fl_Clock_Output(int X, int Y, int W, int H, const char *L)
-: Fl_Widget(X, Y, W, H, L) {
-  box(FL_UP_BOX);
-  selection_color(fl_gray_ramp(5));
-  align(FL_ALIGN_BOTTOM);
-  hour_ = 0;
-  minute_ = 0;
-  second_ = 0;
-  value_ = 0;
-}
-
-////////////////////////////////////////////////////////////////
-
-/**
-  Create an Fl_Clock widget using the given position, size, and label string.
-  The default boxtype is \c FL_NO_BOX.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Clock::Fl_Clock(int X, int Y, int W, int H, const char *L)
-  : Fl_Clock_Output(X, Y, W, H, L) {}
-
-/**
-  Create an Fl_Clock widget using the given boxtype, position, size, and
-  label string.
-  \param[in] t boxtype
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Clock::Fl_Clock(uchar t, int X, int Y, int W, int H, const char *L)
-  : Fl_Clock_Output(X, Y, W, H, L) {
-  type(t);
-  box(t==FL_ROUND_CLOCK ? FL_NO_BOX : FL_UP_BOX);
-}
-
-static void tick(void *v) {
-  ((Fl_Clock*)v)->value(time(0));
-  Fl::add_timeout(1.0, tick, v);
-}
-
-int Fl_Clock::handle(int event) {
-  switch (event) {
-  case FL_SHOW:
-    tick(this);
-    break;
-  case FL_HIDE:
-    Fl::remove_timeout(tick, this);
-    break;
-  }
-  return Fl_Clock_Output::handle(event);
-}
-  
-/**
-  The destructor removes the clock.
- */
-Fl_Clock::~Fl_Clock() {
-  Fl::remove_timeout(tick, this);
-}
-
-//
-// End of "$Id: Fl_Clock.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Color_Chooser.cxx b/common/fltk/src/Fl_Color_Chooser.cxx
deleted file mode 100644
index d5bd6e6..0000000
--- a/common/fltk/src/Fl_Color_Chooser.cxx
+++ /dev/null
@@ -1,632 +0,0 @@
-//
-// "$Id: Fl_Color_Chooser.cxx 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Color chooser for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Color_Chooser.H>
-#include <FL/fl_draw.H>
-#include <FL/math.h>
-#include <stdio.h>
-
-// Besides being a useful object on it's own, the Fl_Color_Chooser was
-// an attempt to make a complex composite object that could be easily
-// imbedded into a user interface.  If you wish to make complex objects
-// of your own, be sure to read this code.
-
-// The function fl_color_chooser() creates a window containing a color
-// chooser and a few buttons and current-color indicators.  It is an
-// easier interface for simple programs that just need a color.
-
-// The "hue box" can be a circle or rectilinear.
-// You get a circle by defining this:
-#define CIRCLE 1
-// And the "hue box" can auto-update when the value changes
-// you get this by defining this:
-#define UPDATE_HUE_BOX 1
-
-/**
-  This \e static method converts HSV colors to RGB colorspace.
-  \param[in] H, S, V color components
-  \param[out] R, G, B color components
- */
-void Fl_Color_Chooser::hsv2rgb(
-	double H, double S, double V, double& R, double& G, double& B) {
-  if (S < 5.0e-6) {
-    R = G = B = V;
-  } else {
-    int i = (int)H;  
-    double f = H - (float)i;
-    double p1 = V*(1.0-S);
-    double p2 = V*(1.0-S*f);
-    double p3 = V*(1.0-S*(1.0-f));
-    switch (i) {
-    case 0: R = V;   G = p3;  B = p1;  break;
-    case 1: R = p2;  G = V;   B = p1;  break;
-    case 2: R = p1;  G = V;   B = p3;  break;
-    case 3: R = p1;  G = p2;  B = V;   break;
-    case 4: R = p3;  G = p1;  B = V;   break;
-    case 5: R = V;   G = p1;  B = p2;  break;
-    }
-  }
-}
-
-/**
-  This \e static method converts RGB colors to HSV colorspace.
-  \param[in] R, G, B color components
-  \param[out] H, S, V color components
- */
-void Fl_Color_Chooser::rgb2hsv(
-	double R, double G, double B, double& H, double& S, double& V) {
-  double maxv = R > G ? R : G; if (B > maxv) maxv = B;
-  V = maxv;
-  if (maxv>0) {
-    double minv = R < G ? R : G; if (B < minv) minv = B;
-    S = 1.0 - double(minv)/maxv;
-    if (maxv > minv) {
-      if (maxv == R) {H = (G-B)/double(maxv-minv); if (H<0) H += 6.0;}
-      else if (maxv == G) H = 2.0+(B-R)/double(maxv-minv);
-      else H = 4.0+(R-G)/double(maxv-minv);
-    }
-  }
-}
-
-/** Fl_Color_Chooser modes */
-enum {
-  M_RGB,	/**< mode() of Fl_Color_Chooser showing RGB values */
-  M_BYTE,	/**< mode() of Fl_Color_Chooser showing byte values */
-  M_HEX,	/**< mode() of Fl_Color_Chooser showing hex values */
-  M_HSV		/**< mode() of Fl_Color_Chooser showing HSV values */
-};
-static Fl_Menu_Item mode_menu[] = {
-  {"rgb"},
-  {"byte"},
-  {"hex"},
-  {"hsv"},
-  {0}
-};
-
-#ifndef FL_DOXYGEN
-int Flcc_Value_Input::format(char* buf) {
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-  if (c->mode() == M_HEX) return sprintf(buf,"0x%02X", int(value()));
-  else return Fl_Valuator::format(buf);
-}
-#endif // !FL_DOXYGEN
-
-void Fl_Color_Chooser::set_valuators() {
-  switch (mode()) {
-  case M_RGB:
-    rvalue.range(0,1); rvalue.step(1,1000); rvalue.value(r_);
-    gvalue.range(0,1); gvalue.step(1,1000); gvalue.value(g_);
-    bvalue.range(0,1); bvalue.step(1,1000); bvalue.value(b_);
-    break;
-  case M_BYTE: /* FALLTHROUGH */
-  case M_HEX:
-    rvalue.range(0,255); rvalue.step(1); rvalue.value(int(255*r_+.5));
-    gvalue.range(0,255); gvalue.step(1); gvalue.value(int(255*g_+.5));
-    bvalue.range(0,255); bvalue.step(1); bvalue.value(int(255*b_+.5));
-    break;
-  case M_HSV:
-    rvalue.range(0,6); rvalue.step(1,1000); rvalue.value(hue_);
-    gvalue.range(0,1); gvalue.step(1,1000); gvalue.value(saturation_);
-    bvalue.range(0,1); bvalue.step(1,1000); bvalue.value(value_);
-    break;
-  }
-}
-
-/**
-  Sets the current rgb color values.
-  Does not do the callback. Does not clamp (but out of range values will
-  produce psychedelic effects in the hue selector).
-  \param[in] R, G, B color components.
-  \return 1 if a new rgb value was set, 0 if the rgb value was the previous one.
- */
-int Fl_Color_Chooser::rgb(double R, double G, double B) {
-  if (R == r_ && G == g_ && B == b_) return 0;
-  r_ = R; g_ = G; b_ = B;
-  double ph = hue_;
-  double ps = saturation_;
-  double pv = value_;
-  rgb2hsv(R,G,B,hue_,saturation_,value_);
-  set_valuators();
-  set_changed();
-  if (value_ != pv) {
-#ifdef UPDATE_HUE_BOX
-    huebox.damage(FL_DAMAGE_SCROLL);
-#endif
-    valuebox.damage(FL_DAMAGE_EXPOSE);}
-  if (hue_ != ph || saturation_ != ps) {
-    huebox.damage(FL_DAMAGE_EXPOSE); 
-    valuebox.damage(FL_DAMAGE_SCROLL);
-  }
-  return 1;
-}
-
-/**
-  Set the hsv values.
-  The passed values are clamped (or for hue, modulus 6 is used) to get
-  legal values. Does not do the callback.
-  \param[in] H, S, V color components.
-  \return 1 if a new hsv value was set, 0 if the hsv value was the previous one.
-*/
-int Fl_Color_Chooser::hsv(double H, double S, double V) {
-  H = fmod(H,6.0); if (H < 0.0) H += 6.0;
-  if (S < 0.0) S = 0.0; else if (S > 1.0) S = 1.0;
-  if (V < 0.0) V = 0.0; else if (V > 1.0) V = 1.0;
-  if (H == hue_ && S == saturation_ && V == value_) return 0;
-  double ph = hue_;
-  double ps = saturation_;
-  double pv = value_;
-  hue_ = H; saturation_ = S; value_ = V;
-  if (value_ != pv) {
-#ifdef UPDATE_HUE_BOX
-    huebox.damage(FL_DAMAGE_SCROLL);
-#endif
-    valuebox.damage(FL_DAMAGE_EXPOSE);}
-  if (hue_ != ph || saturation_ != ps) {
-    huebox.damage(FL_DAMAGE_EXPOSE); 
-    valuebox.damage(FL_DAMAGE_SCROLL);
-  }
-  hsv2rgb(H,S,V,r_,g_,b_);
-  set_valuators();
-  set_changed();
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-static void tohs(double x, double y, double& h, double& s) {
-#ifdef CIRCLE
-  x = 2*x-1;
-  y = 1-2*y;
-  s = sqrt(x*x+y*y); if (s > 1.0) s = 1.0;
-  h = (3.0/M_PI)*atan2(y,x);
-  if (h<0) h += 6.0;
-#else
-  h = fmod(6.0*x,6.0); if (h < 0.0) h += 6.0;
-  s = 1.0-y; if (s < 0.0) s = 0.0; else if (s > 1.0) s = 1.0;
-#endif
-}
-
-#ifndef FL_DOXYGEN
-int Flcc_HueBox::handle(int e) {
-  static double ih, is;
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-  switch (e) {
-  case FL_PUSH:
-    if (Fl::visible_focus()) {
-      Fl::focus(this);
-      redraw();
-    }
-    ih = c->hue();
-    is = c->saturation();
-  case FL_DRAG: {
-    double Xf, Yf, H, S;
-    Xf = (Fl::event_x()-x()-Fl::box_dx(box()))/double(w()-Fl::box_dw(box()));
-    Yf = (Fl::event_y()-y()-Fl::box_dy(box()))/double(h()-Fl::box_dh(box()));
-    tohs(Xf, Yf, H, S);
-    if (fabs(H-ih) < 3*6.0/w()) H = ih;
-    if (fabs(S-is) < 3*1.0/h()) S = is;
-    if (Fl::event_state(FL_CTRL)) H = ih;
-    if (c->hsv(H, S, c->value())) c->do_callback();
-    } return 1;
-  case FL_FOCUS : /* FALLTHROUGH */
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    }
-    else return 1;
-  case FL_KEYBOARD :
-    return handle_key(Fl::event_key());
-  default:
-    return 0;
-  }
-}
-#endif // !FL_DOXYGEN
-
-static void generate_image(void* vv, int X, int Y, int W, uchar* buf) {
-  Flcc_HueBox* v = (Flcc_HueBox*)vv;
-  int iw = v->w()-Fl::box_dw(v->box());
-  double Yf = double(Y)/(v->h()-Fl::box_dh(v->box()));
-#ifdef UPDATE_HUE_BOX
-  const double V = ((Fl_Color_Chooser*)(v->parent()))->value();
-#else
-  const double V = 1.0;
-#endif
-  for (int x = X; x < X+W; x++) {
-    double Xf = double(x)/iw;
-    double H,S; tohs(Xf,Yf,H,S);
-    double r,g,b;
-    Fl_Color_Chooser::hsv2rgb(H,S,V,r,g,b);
-    *buf++ = uchar(255*r+.5);
-    *buf++ = uchar(255*g+.5);
-    *buf++ = uchar(255*b+.5);
-  }
-}
-
-#ifndef FL_DOXYGEN
-int Flcc_HueBox::handle_key(int key) {
-  int w1 = w()-Fl::box_dw(box())-6;
-  int h1 = h()-Fl::box_dh(box())-6;
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-
-#ifdef CIRCLE
-  int X = int(.5*(cos(c->hue()*(M_PI/3.0))*c->saturation()+1) * w1);
-  int Y = int(.5*(1-sin(c->hue()*(M_PI/3.0))*c->saturation()) * h1);
-#else
-  int X = int(c->hue()/6.0*w1);
-  int Y = int((1-c->saturation())*h1);
-#endif
-
-  switch (key) {
-    case FL_Up :
-      Y -= 3;
-      break;
-    case FL_Down :
-      Y += 3;
-      break;
-    case FL_Left :
-      X -= 3;
-      break;
-    case FL_Right :
-      X += 3;
-      break;
-    default :
-      return 0;
-  }
-
-  double Xf, Yf, H, S;
-  Xf = (double)X/(double)w1;
-  Yf = (double)Y/(double)h1;
-  tohs(Xf, Yf, H, S);
-  if (c->hsv(H, S, c->value())) c->do_callback();
-
-  return 1;
-}
-#endif // !FL_DOXYGEN
-
-#ifndef FL_DOXYGEN
-void Flcc_HueBox::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  int x1 = x()+Fl::box_dx(box());
-  int yy1 = y()+Fl::box_dy(box());
-  int w1 = w()-Fl::box_dw(box());
-  int h1 = h()-Fl::box_dh(box());
-  if (damage() == FL_DAMAGE_EXPOSE) fl_push_clip(x1+px,yy1+py,6,6);
-  fl_draw_image(generate_image, this, x1, yy1, w1, h1);
-  if (damage() == FL_DAMAGE_EXPOSE) fl_pop_clip();
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-#ifdef CIRCLE
-  int X = int(.5*(cos(c->hue()*(M_PI/3.0))*c->saturation()+1) * (w1-6));
-  int Y = int(.5*(1-sin(c->hue()*(M_PI/3.0))*c->saturation()) * (h1-6));
-#else
-  int X = int(c->hue()/6.0*(w1-6));
-  int Y = int((1-c->saturation())*(h1-6));
-#endif
-  if (X < 0) X = 0; else if (X > w1-6) X = w1-6;
-  if (Y < 0) Y = 0; else if (Y > h1-6) Y = h1-6;
-  //  fl_color(c->value()>.75 ? FL_BLACK : FL_WHITE);
-  draw_box(FL_UP_BOX,x1+X,yy1+Y,6,6,Fl::focus() == this ? FL_FOREGROUND_COLOR : FL_GRAY);
-  px = X; py = Y;
-}
-#endif // !FL_DOXYGEN
-
-////////////////////////////////////////////////////////////////
-
-#ifndef FL_DOXYGEN
-int Flcc_ValueBox::handle(int e) {
-  static double iv;
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-  switch (e) {
-  case FL_PUSH:
-    if (Fl::visible_focus()) {
-      Fl::focus(this);
-      redraw();
-    }
-    iv = c->value();
-  case FL_DRAG: {
-    double Yf;
-    Yf = 1-(Fl::event_y()-y()-Fl::box_dy(box()))/double(h()-Fl::box_dh(box()));
-    if (fabs(Yf-iv)<(3*1.0/h())) Yf = iv;
-    if (c->hsv(c->hue(),c->saturation(),Yf)) c->do_callback();
-    } return 1;
-  case FL_FOCUS : /* FALLTHROUGH */
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    }
-    else return 1;
-  case FL_KEYBOARD :
-    return handle_key(Fl::event_key());
-  default:
-    return 0;
-  }
-}
-#endif // !FL_DOXYGEN
-
-static double tr, tg, tb;
-static void generate_vimage(void* vv, int X, int Y, int W, uchar* buf) {
-  Flcc_ValueBox* v = (Flcc_ValueBox*)vv;
-  double Yf = 255*(1.0-double(Y)/(v->h()-Fl::box_dh(v->box())));
-  uchar r = uchar(tr*Yf+.5);
-  uchar g = uchar(tg*Yf+.5);
-  uchar b = uchar(tb*Yf+.5);
-  for (int x = X; x < X+W; x++) {
-    *buf++ = r; *buf++ = g; *buf++ = b;
-  }
-}
-
-#ifndef FL_DOXYGEN
-void Flcc_ValueBox::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-  c->hsv2rgb(c->hue(),c->saturation(),1.0,tr,tg,tb);
-  int x1 = x()+Fl::box_dx(box());
-  int yy1 = y()+Fl::box_dy(box());
-  int w1 = w()-Fl::box_dw(box());
-  int h1 = h()-Fl::box_dh(box());
-  if (damage() == FL_DAMAGE_EXPOSE) fl_push_clip(x1,yy1+py,w1,6);
-  fl_draw_image(generate_vimage, this, x1, yy1, w1, h1);
-  if (damage() == FL_DAMAGE_EXPOSE) fl_pop_clip();
-  int Y = int((1-c->value()) * (h1-6));
-  if (Y < 0) Y = 0; else if (Y > h1-6) Y = h1-6;
-  draw_box(FL_UP_BOX,x1,yy1+Y,w1,6,Fl::focus() == this ? FL_FOREGROUND_COLOR : FL_GRAY);
-  py = Y;
-}
-#endif // !FL_DOXYGEN
-
-#ifndef FL_DOXYGEN
-int Flcc_ValueBox::handle_key(int key) {
-  int h1 = h()-Fl::box_dh(box())-6;
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-
-  int Y = int((1-c->value()) * h1);
-  if (Y < 0) Y = 0; else if (Y > h1) Y = h1;
-
-  switch (key) {
-    case FL_Up :
-      Y -= 3;
-      break;
-    case FL_Down :
-      Y += 3;
-      break;
-    default :
-      return 0;
-  }
-
-  double Yf;
-  Yf = 1-((double)Y/(double)h1);
-  if (c->hsv(c->hue(),c->saturation(),Yf)) c->do_callback();
-
-  return 1;
-}
-#endif // !FL_DOXYGEN
-
-////////////////////////////////////////////////////////////////
-
-void Fl_Color_Chooser::rgb_cb(Fl_Widget* o, void*) {
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)(o->parent());
-  double R = c->rvalue.value();
-  double G = c->gvalue.value();
-  double B = c->bvalue.value();
-  if (c->mode() == M_HSV) {
-    if (c->hsv(R,G,B)) c->do_callback();
-    return;
-  }
-  if (c->mode() != M_RGB) {
-    R = R/255;
-    G = G/255;
-    B = B/255;
-  }
-  if (c->rgb(R,G,B)) c->do_callback();
-}
-
-void Fl_Color_Chooser::mode_cb(Fl_Widget* o, void*) {
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)(o->parent());
-  // force them to redraw even if value is the same:
-  c->rvalue.value(-1);
-  c->gvalue.value(-1);
-  c->bvalue.value(-1);
-  c->set_valuators();
-}
-
-void Fl_Color_Chooser::mode(int newMode)
-{
-  choice.value(newMode);
-  choice.do_callback();
-}
-
-
-////////////////////////////////////////////////////////////////
-
-/**
-  Creates a new Fl_Color_Chooser widget using the given position, size, and
-  label string.
-  The recommended dimensions are 200x95. The color is initialized to black.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Color_Chooser::Fl_Color_Chooser(int X, int Y, int W, int H, const char* L)
-  : Fl_Group(0,0,195,115,L),
-    huebox(0,0,115,115),
-    valuebox(115,0,20,115),
-    choice(140,0,55,25),
-    rvalue(140,30,55,25),
-    gvalue(140,60,55,25),
-    bvalue(140,90,55,25),
-    resize_box(0,0,115,115)
-{
-  end();
-  resizable(resize_box);
-  resize(X,Y,W,H);
-  r_ = g_ = b_ = 0;
-  hue_ = 0.0;
-  saturation_ = 0.0;
-  value_ = 0.0;
-  huebox.box(FL_DOWN_FRAME);
-  valuebox.box(FL_DOWN_FRAME);
-  choice.menu(mode_menu);
-  set_valuators();
-  rvalue.callback(rgb_cb);
-  gvalue.callback(rgb_cb);
-  bvalue.callback(rgb_cb);
-  choice.callback(mode_cb);
-  choice.box(FL_THIN_UP_BOX);
-  choice.textfont(FL_HELVETICA_BOLD_ITALIC);
-}
-
-////////////////////////////////////////////////////////////////
-// fl_color_chooser():
-
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Return_Button.H>
-
-class ColorChip : public Fl_Widget {
-  void draw();
-public:
-  uchar r,g,b;
-  ColorChip(int X, int Y, int W, int H) : Fl_Widget(X,Y,W,H) {
-    box(FL_ENGRAVED_FRAME);}
-};
-
-void ColorChip::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  fl_rectf(x()+Fl::box_dx(box()),
-	   y()+Fl::box_dy(box()),
-	   w()-Fl::box_dw(box()),
-	   h()-Fl::box_dh(box()),r,g,b);
-}
-
-static void chooser_cb(Fl_Widget* o, void* vv) {
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)o;
-  ColorChip* v = (ColorChip*)vv;
-  v->r = uchar(255*c->r()+.5);
-  v->g = uchar(255*c->g()+.5);
-  v->b = uchar(255*c->b()+.5);
-  v->damage(FL_DAMAGE_EXPOSE);
-}
-
-extern const char* fl_ok;
-extern const char* fl_cancel;
-
-// fl_color_chooser's callback for ok_button (below)
-//  [in] o is a pointer to okay_button (below) 
-//  [in] p is a pointer to an int to receive the return value (1)
-// closes the fl_color_chooser window
-static void cc_ok_cb (Fl_Widget *o, void *p) {
-  *((int *)p) = 1; // set return value
-  o->window()->hide();
-}
-
-// fl_color_chooser's callback for cancel_button and window close
-//  [in] o is a pointer to cancel_button (below) _or_ the dialog window
-//  [in] p is a pointer to an int to receive the return value (0)
-// closes the fl_color_chooser window
-static void cc_cancel_cb (Fl_Widget *o, void *p) {
-  *((int *)p) = 0; // set return value
-  if (o->window()) // cancel button
-    o->window()->hide();
-  else // window close
-    o->hide();
-}
-
-/** \addtogroup  group_comdlg 
-    @{ */
-/**
-  \brief Pops up a window to let the user pick an arbitrary RGB color.
-  \note \#include <FL/Fl_Color_Chooser.H>
-  \image html fl_color_chooser.jpg 
-  \image latex  fl_color_chooser.jpg "fl_color_chooser" width=8cm
-  \param[in] name Title label for the window
-  \param[in,out] r, g, b Color components in the range 0.0 to 1.0.
-  \param[in] cmode Optional mode for color chooser. See mode(int). Default -1 if none (rgb mode).
-  \retval 1 if user confirms the selection 
-  \retval 0 if user cancels the dialog
-  \relates Fl_Color_Chooser
- */
-int fl_color_chooser(const char* name, double& r, double& g, double& b, int cmode) {
-  int ret = 0;
-  Fl_Window window(215,200,name);
-  window.callback(cc_cancel_cb,&ret);
-  Fl_Color_Chooser chooser(10, 10, 195, 115);
-  ColorChip ok_color(10, 130, 95, 25);
-  Fl_Return_Button ok_button(10, 165, 95, 25, fl_ok);
-  ok_button.callback(cc_ok_cb,&ret);
-  ColorChip cancel_color(110, 130, 95, 25);
-  cancel_color.r = uchar(255*r+.5); ok_color.r = cancel_color.r;
-  ok_color.g = cancel_color.g = uchar(255*g+.5);
-  ok_color.b = cancel_color.b = uchar(255*b+.5);
-  Fl_Button cancel_button(110, 165, 95, 25, fl_cancel);
-  cancel_button.callback(cc_cancel_cb,&ret);
-  window.resizable(chooser);
-  chooser.rgb(r,g,b);
-  chooser.callback(chooser_cb, &ok_color);
-  if (cmode!=-1) chooser.mode(cmode);
-  window.end();
-  window.set_modal();
-  window.hotspot(window);
-  window.show();
-  while (window.shown()) Fl::wait();
-  if (ret) { // ok_button or Enter
-    r = chooser.r();
-    g = chooser.g();
-    b = chooser.b();
-  }
-  return ret;
-}
-
-/**
-  \brief Pops up a window to let the user pick an arbitrary RGB color.
-  \note \#include <FL/Fl_Color_Chooser.H>
-  \image html fl_color_chooser.jpg 
-  \image latex  fl_color_chooser.jpg "fl_color_chooser" width=8cm
-  \param[in] name Title label for the window
-  \param[in,out] r, g, b Color components in the range 0 to 255.
-  \param[in] cmode Optional mode for color chooser. See mode(int). Default -1 if none (rgb mode).
-  \retval 1 if user confirms the selection 
-  \retval 0 if user cancels the dialog
-  \relates Fl_Color_Chooser
- */
-int fl_color_chooser(const char* name, uchar& r, uchar& g, uchar& b, int cmode) {
-  double dr = r/255.0;
-  double dg = g/255.0;
-  double db = b/255.0;
-  if (fl_color_chooser(name,dr,dg,db,cmode)) {
-    r = uchar(255*dr+.5);
-    g = uchar(255*dg+.5);
-    b = uchar(255*db+.5);
-    return 1;
-  }
-  return 0;
-}
-
-/** @} */
-//
-// End of "$Id: Fl_Color_Chooser.cxx 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/src/Fl_Counter.cxx b/common/fltk/src/Fl_Counter.cxx
deleted file mode 100644
index 7f895a7..0000000
--- a/common/fltk/src/Fl_Counter.cxx
+++ /dev/null
@@ -1,211 +0,0 @@
-//
-// "$Id: Fl_Counter.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Counter widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Counter.H>
-#include <FL/fl_draw.H>
-
-void Fl_Counter::draw() {
-  int i; Fl_Boxtype boxtype[5];
-  Fl_Color selcolor;
-
-  boxtype[0] = box();
-  if (boxtype[0] == FL_UP_BOX) boxtype[0] = FL_DOWN_BOX;
-  if (boxtype[0] == FL_THIN_UP_BOX) boxtype[0] = FL_THIN_DOWN_BOX;
-  for (i=1; i<5; i++)
-    if (mouseobj == i)
-      boxtype[i] = fl_down(box());
-    else
-      boxtype[i] = box();
-
-  int xx[5], ww[5];
-  if (type() == FL_NORMAL_COUNTER) {
-    int W = w()*15/100;
-    xx[1] = x();	 ww[1] = W;
-    xx[2] = x()+1*W;     ww[2] = W;
-    xx[0] = x()+2*W;     ww[0] = w()-4*W;
-    xx[3] = x()+w()-2*W; ww[3] = W;
-    xx[4] = x()+w()-1*W; ww[4] = W;
-  } else {
-    int W = w()*20/100;
-    xx[1] = 0;	         ww[1] = 0;
-    xx[2] = x();	 ww[2] = W;
-    xx[0] = x()+W;	 ww[0] = w()-2*W;
-    xx[3] = x()+w()-1*W; ww[3] = W;
-    xx[4] = 0;	         ww[4] = 0;
-  }
-
-  draw_box(boxtype[0], xx[0], y(), ww[0], h(), FL_BACKGROUND2_COLOR);
-  fl_font(textfont(), textsize());
-  fl_color(active_r() ? textcolor() : fl_inactive(textcolor()));
-  char str[128]; format(str);
-  fl_draw(str, xx[0], y(), ww[0], h(), FL_ALIGN_CENTER);
-  if (Fl::focus() == this) draw_focus(boxtype[0], xx[0], y(), ww[0], h());
-  if (!(damage()&FL_DAMAGE_ALL)) return; // only need to redraw text
-
-  if (active_r())
-    selcolor = labelcolor();
-  else
-    selcolor = fl_inactive(labelcolor());
-
-  if (type() == FL_NORMAL_COUNTER) {
-    draw_box(boxtype[1], xx[1], y(), ww[1], h(), color());
-    fl_draw_symbol("@-4<<", xx[1], y(), ww[1], h(), selcolor);
-  }
-  draw_box(boxtype[2], xx[2], y(), ww[2], h(), color());
-  fl_draw_symbol("@-4<",  xx[2], y(), ww[2], h(), selcolor);
-  draw_box(boxtype[3], xx[3], y(), ww[3], h(), color());
-  fl_draw_symbol("@-4>",  xx[3], y(), ww[3], h(), selcolor);
-  if (type() == FL_NORMAL_COUNTER) {
-    draw_box(boxtype[4], xx[4], y(), ww[4], h(), color());
-    fl_draw_symbol("@-4>>", xx[4], y(), ww[4], h(), selcolor);
-  }
-}
-
-void Fl_Counter::increment_cb() {
-  if (!mouseobj) return;
-  double v = value();
-  switch (mouseobj) {
-  case 1: v -= lstep_; break;
-  case 2: v = increment(v, -1); break;
-  case 3: v = increment(v, 1); break;
-  case 4: v += lstep_; break;
-  }
-  handle_drag(clamp(round(v)));
-}
-
-#define INITIALREPEAT .5
-#define REPEAT .1
-
-void Fl_Counter::repeat_callback(void* v) {
-  Fl_Counter* b = (Fl_Counter*)v;
-  if (b->mouseobj) {
-    Fl::add_timeout(REPEAT, repeat_callback, b);
-    b->increment_cb();
-  }
-}
-
-int Fl_Counter::calc_mouseobj() {
-  if (type() == FL_NORMAL_COUNTER) {
-    int W = w()*15/100;
-    if (Fl::event_inside(x(), y(), W, h())) return 1;
-    if (Fl::event_inside(x()+W, y(), W, h())) return 2;
-    if (Fl::event_inside(x()+w()-2*W, y(), W, h())) return 3;
-    if (Fl::event_inside(x()+w()-W, y(), W, h())) return 4;
-  } else {
-    int W = w()*20/100;
-    if (Fl::event_inside(x(), y(), W, h())) return 2;
-    if (Fl::event_inside(x()+w()-W, y(), W, h())) return 3;
-  }
-  return -1;
-}
-
-int Fl_Counter::handle(int event) {
-  int i;
-  switch (event) {
-  case FL_RELEASE:
-    if (mouseobj) {
-      Fl::remove_timeout(repeat_callback, this);
-      mouseobj = 0;
-      redraw();
-    }
-    handle_release();
-    return 1;
-  case FL_PUSH:
-    if (Fl::visible_focus()) Fl::focus(this);
-    { Fl_Widget_Tracker wp(this);
-      handle_push();
-      if (wp.deleted()) return 1;
-    }
-  case FL_DRAG:
-    i = calc_mouseobj();
-    if (i != mouseobj) {
-      Fl::remove_timeout(repeat_callback, this);
-      mouseobj = (uchar)i;
-      if (i) Fl::add_timeout(INITIALREPEAT, repeat_callback, this);
-      Fl_Widget_Tracker wp(this);
-      increment_cb();
-      if (wp.deleted()) return 1;
-      redraw();
-    }
-    return 1;
-  case FL_KEYBOARD :
-    switch (Fl::event_key()) {
-      case FL_Left:
-	handle_drag(clamp(increment(value(),-1)));
-	return 1;
-      case FL_Right:
-	handle_drag(clamp(increment(value(),1)));
-	return 1;
-      default:
-        return 0;
-    }
-    // break not required because of switch...
-  case FL_FOCUS : /* FALLTHROUGH */
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    } else return 0;
-  case FL_ENTER : /* FALLTHROUGH */
-  case FL_LEAVE :
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-/**
-  Destroys the valuator.
- */
-Fl_Counter::~Fl_Counter() {
-  Fl::remove_timeout(repeat_callback, this);
-}
-
-/**
-  Creates a new Fl_Counter widget using the given position, size, and label
-  string. The default type is FL_NORMAL_COUNTER.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Counter::Fl_Counter(int X, int Y, int W, int H, const char* L)
-  : Fl_Valuator(X, Y, W, H, L) {
-  box(FL_UP_BOX);
-  selection_color(FL_INACTIVE_COLOR); // was FL_BLUE
-  align(FL_ALIGN_BOTTOM);
-  bounds(-1000000.0, 1000000.0);
-  Fl_Valuator::step(1, 10);
-  lstep_ = 1.0;
-  mouseobj = 0;
-  textfont_ = FL_HELVETICA;
-  textsize_ = FL_NORMAL_SIZE;
-  textcolor_ = FL_FOREGROUND_COLOR;
-}
-
-//
-// End of "$Id: Fl_Counter.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Device.cxx b/common/fltk/src/Fl_Device.cxx
deleted file mode 100644
index e2808ea..0000000
--- a/common/fltk/src/Fl_Device.cxx
+++ /dev/null
@@ -1,90 +0,0 @@
-//
-// "$Id: Fl_Device.cxx 8504 2011-03-04 16:48:10Z manolo $"
-//
-// implementation of Fl_Device class for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Device.H>
-#include <FL/Fl_Image.H>
-
-const char *Fl_Device::class_id = "Fl_Device";
-const char *Fl_Surface_Device::class_id = "Fl_Surface_Device";
-const char *Fl_Display_Device::class_id = "Fl_Display_Device";
-const char *Fl_Graphics_Driver::class_id = "Fl_Graphics_Driver";
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-const char *Fl_Quartz_Graphics_Driver::class_id = "Fl_Quartz_Graphics_Driver";
-#endif
-#if defined(WIN32) || defined(FL_DOXYGEN)
-const char *Fl_GDI_Graphics_Driver::class_id = "Fl_GDI_Graphics_Driver";
-#endif
-#if !(defined(__APPLE__) || defined(WIN32))
-const char *Fl_Xlib_Graphics_Driver::class_id = "Fl_Xlib_Graphics_Driver";
-#endif
-
-
-/** \brief Use this drawing surface for future graphics requests. */
-void Fl_Surface_Device::set_current(void)
-{
-  fl_graphics_driver = _driver;
-  _surface = this;
-}
-
-const Fl_Graphics_Driver::matrix Fl_Graphics_Driver::m0 = {1, 0, 0, 1, 0, 0};
-
-Fl_Graphics_Driver::Fl_Graphics_Driver() {
-  font_ = 0;
-  size_ = 0;
-  sptr=0; rstackptr=0; 
-  fl_clip_state_number=0;
-  m = m0; 
-  fl_matrix = &m; 
-  p = (XPOINT *)0;
-  font_descriptor_ = NULL;
-};
-
-void Fl_Graphics_Driver::text_extents(const char*t, int n, int& dx, int& dy, int& w, int& h)
-{
-  w = (int)width(t, n);
-  h = - height();
-  dx = 0;
-  dy = descent();
-}
-
-Fl_Display_Device::Fl_Display_Device(Fl_Graphics_Driver *graphics_driver) : Fl_Surface_Device( graphics_driver) {
-#ifdef __APPLE__
-  SInt32 versionMajor = 0;
-  SInt32 versionMinor = 0;
-  SInt32 versionBugFix = 0;
-  Gestalt( gestaltSystemVersionMajor, &versionMajor );
-  Gestalt( gestaltSystemVersionMinor, &versionMinor );
-  Gestalt( gestaltSystemVersionBugFix, &versionBugFix );
-  fl_mac_os_version = versionMajor * 10000 + versionMinor * 100 + versionBugFix;
-#endif
-};
-
-
-//
-// End of "$Id: Fl_Device.cxx 8504 2011-03-04 16:48:10Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Dial.cxx b/common/fltk/src/Fl_Dial.cxx
deleted file mode 100644
index 2adaabb..0000000
--- a/common/fltk/src/Fl_Dial.cxx
+++ /dev/null
@@ -1,166 +0,0 @@
-//
-// "$Id: Fl_Dial.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Circular dial widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Dial.H>
-#include <FL/fl_draw.H>
-#include <stdlib.h>
-#include <FL/math.h>
-
-// All angles are measured with 0 to the right and counter-clockwise
-/**
-  Draws dial at given position and size.
-  \param[in] X, Y, W, H position and size
-*/
-void Fl_Dial::draw(int X, int Y, int W, int H) {
-  if (damage()&FL_DAMAGE_ALL) draw_box(box(), X, Y, W, H, color());
-  X += Fl::box_dx(box());
-  Y += Fl::box_dy(box());
-  W -= Fl::box_dw(box());
-  H -= Fl::box_dh(box());
-  double angle = (a2-a1)*(value()-minimum())/(maximum()-minimum()) + a1;
-  if (type() == FL_FILL_DIAL) {
-    // foo: draw this nicely in certain round box types
-    int foo = (box() > _FL_ROUND_UP_BOX && Fl::box_dx(box()));
-    if (foo) {X--; Y--; W+=2; H+=2;}
-    if (active_r()) fl_color(color());
-    else fl_color(fl_inactive(color()));
-    fl_pie(X, Y, W, H, 270-a1, angle > a1 ? 360+270-angle : 270-360-angle);
-    if (active_r()) fl_color(selection_color());
-    else fl_color(fl_inactive(selection_color()));
-    fl_pie(X, Y, W, H, 270-angle, 270-a1);
-    if (foo) {
-      if (active_r()) fl_color(FL_FOREGROUND_COLOR);
-      else fl_color(fl_inactive(FL_FOREGROUND_COLOR));
-      fl_arc(X, Y, W, H, 0, 360);
-    }
-    return;
-  }
-  if (!(damage()&FL_DAMAGE_ALL)) {
-    if (active_r()) fl_color(color());
-    else fl_color(fl_inactive(color()));
-    fl_pie(X+1, Y+1, W-2, H-2, 0, 360);
-  }
-  fl_push_matrix();
-  fl_translate(X+W/2-.5, Y+H/2-.5);
-  fl_scale(W-1, H-1);
-  fl_rotate(45-angle);
-  if (active_r()) fl_color(selection_color());
-  else fl_color(fl_inactive(selection_color()));
-  if (type()) { // FL_LINE_DIAL
-    fl_begin_polygon();
-    fl_vertex(0.0,   0.0);
-    fl_vertex(-0.04, 0.0);
-    fl_vertex(-0.25, 0.25);
-    fl_vertex(0.0,   0.04);
-    fl_end_polygon();
-    if (active_r()) fl_color(FL_FOREGROUND_COLOR);
-    else fl_color(fl_inactive(FL_FOREGROUND_COLOR));
-    fl_begin_loop();
-    fl_vertex(0.0,   0.0);
-    fl_vertex(-0.04, 0.0);
-    fl_vertex(-0.25, 0.25);
-    fl_vertex(0.0,   0.04);
-    fl_end_loop();
-  } else {
-    fl_begin_polygon(); fl_circle(-0.20, 0.20, 0.07); fl_end_polygon();
-    if (active_r()) fl_color(FL_FOREGROUND_COLOR);
-    else fl_color(fl_inactive(FL_FOREGROUND_COLOR));
-    fl_begin_loop(); fl_circle(-0.20, 0.20, 0.07); fl_end_loop();
-  }
-  fl_pop_matrix();
-}
-
-/**
-  Draws dial at current position and size.
-*/
-void Fl_Dial::draw() {
-  draw(x(), y(), w(), h());
-  draw_label();
-}
-
-/**
-  Allows subclasses to handle event based on given position and size.
-  \param[in] event, X, Y, W, H event to handle, related position and size.
-*/
-int Fl_Dial::handle(int event, int X, int Y, int W, int H) {
-  switch (event) {
-  case FL_PUSH: {
-    Fl_Widget_Tracker wp(this);  
-    handle_push();
-    if (wp.deleted()) return 1; }
-  case FL_DRAG: {
-    int mx = (Fl::event_x()-X-W/2)*H;
-    int my = (Fl::event_y()-Y-H/2)*W;
-    if (!mx && !my) return 1;
-    double angle = 270-atan2((float)-my, (float)mx)*180/M_PI;
-    double oldangle = (a2-a1)*(value()-minimum())/(maximum()-minimum()) + a1;
-    while (angle < oldangle-180) angle += 360;
-    while (angle > oldangle+180) angle -= 360;
-    double val;
-    if ((a1<a2) ? (angle <= a1) : (angle >= a1)) {
-      val = minimum();
-    } else if ((a1<a2) ? (angle >= a2) : (angle <= a2)) {
-      val = maximum();
-    } else {
-      val = minimum() + (maximum()-minimum())*(angle-a1)/(a2-a1);
-    }
-    handle_drag(clamp(round(val)));
-  } return 1;
-  case FL_RELEASE:
-    handle_release();
-    return 1;
-  case FL_ENTER : /* FALLTHROUGH */
-  case FL_LEAVE :
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-/**
-  Allow subclasses to handle event based on current position and size.
-*/
-int Fl_Dial::handle(int e) {
-  return handle(e, x(), y(), w(), h());
-}
-
-Fl_Dial::Fl_Dial(int X, int Y, int W, int H, const char* l)
-/**
-  Creates a new Fl_Dial widget using the given position, size,
-  and label string. The default type is FL_NORMAL_DIAL.
-*/
-: Fl_Valuator(X, Y, W, H, l) {
-  box(FL_OVAL_BOX);
-  selection_color(FL_INACTIVE_COLOR); // was 37
-  a1 = 45;
-  a2 = 315;
-}
-
-//
-// End of "$Id: Fl_Dial.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Double_Window.cxx b/common/fltk/src/Fl_Double_Window.cxx
deleted file mode 100644
index 927eccb..0000000
--- a/common/fltk/src/Fl_Double_Window.cxx
+++ /dev/null
@@ -1,462 +0,0 @@
-//
-// "$Id: Fl_Double_Window.cxx 8383 2011-02-06 12:20:16Z AlbrechtS $"
-//
-// Double-buffered window code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Printer.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-// On systems that support double buffering "naturally" the base
-// Fl_Window class will probably do double-buffer and this subclass
-// does nothing.
-
-#if USE_XDBE
-
-#include <X11/extensions/Xdbe.h>
-
-static int use_xdbe;
-
-static int can_xdbe() {
-  static int tried;
-  if (!tried) {
-    tried = 1;
-    int event_base, error_base;
-    if (!XdbeQueryExtension(fl_display, &event_base, &error_base)) return 0;
-    Drawable root = RootWindow(fl_display,fl_screen);
-    int numscreens = 1;
-    XdbeScreenVisualInfo *a = XdbeGetVisualInfo(fl_display,&root,&numscreens);
-    if (!a) return 0;
-    for (int j = 0; j < a->count; j++) {
-      if (a->visinfo[j].visual == fl_visual->visualid
-	  /*&& a->visinfo[j].perflevel > 0*/) {
-        use_xdbe = 1; break;
-      }
-    }
-    XdbeFreeVisualInfo(a);
-  }
-  return use_xdbe;
-}
-#endif
-
-void Fl_Double_Window::show() {
-  Fl_Window::show();
-}
-
-static void fl_copy_offscreen_to_display(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-
-/** \addtogroup fl_drawings
- @{
- */
-/** Copy a rectangular area of the given offscreen buffer into the current drawing destination.
- \param x,y	position where to draw the copied rectangle
- \param w,h	size of the copied rectangle
- \param pixmap  offscreen buffer containing the rectangle to copy
- \param srcx,srcy origin in offscreen buffer of rectangle to copy
- */
-void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy) {
-  if (fl_graphics_driver == Fl_Display_Device::display_device()->driver()) {
-    fl_copy_offscreen_to_display(x, y, w, h, pixmap, srcx, srcy);
-  }
-  else { // when copy is not to the display
-    fl_begin_offscreen(pixmap);
-    uchar *img = fl_read_image(NULL, srcx, srcy, w, h, 0);
-    fl_end_offscreen();
-    fl_draw_image(img, x, y, w, h, 3, 0);
-    delete[] img;
-  }
-}
-/** @} */
-
-#if defined(USE_X11)
-
-static void fl_copy_offscreen_to_display(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy) {
-  XCopyArea(fl_display, pixmap, fl_window, fl_gc, srcx, srcy, w, h, x, y);
-}
-
-
-// maybe someone feels inclined to implement alpha blending on X11?
-char fl_can_do_alpha_blending() {
-  return 0;
-}
-#elif defined(WIN32)
-
-// Code used to switch output to an off-screen window.  See macros in
-// win32.H which save the old state in local variables.
-
-typedef struct { BYTE a; BYTE b; BYTE c; BYTE d; } FL_BLENDFUNCTION;
-typedef BOOL (WINAPI* fl_alpha_blend_func)
-    (HDC,int,int,int,int,HDC,int,int,int,int,FL_BLENDFUNCTION);
-static fl_alpha_blend_func fl_alpha_blend = NULL;
-static FL_BLENDFUNCTION blendfunc = { 0, 0, 255, 1};
-
-/*
- * This function checks if the version of MSWindows that we
- * curently run on supports alpha blending for bitmap transfers
- * and finds the required function if so.
- */
-char fl_can_do_alpha_blending() {
-  static char been_here = 0;
-  static char can_do = 0;
-  // do this test only once
-  if (been_here) return can_do;
-  been_here = 1;
-  // load the library that implements alpha blending
-  HMODULE hMod = LoadLibrary("MSIMG32.DLL");
-  // give up if that doesn't exist (Win95?)
-  if (!hMod) return 0;
-  // now find the blending function inside that dll
-  fl_alpha_blend = (fl_alpha_blend_func)GetProcAddress(hMod, "AlphaBlend");
-  // give up if we can't find it (Win95)
-  if (!fl_alpha_blend) return 0;
-  // we have the call, but does our display support alpha blending?
-  // get the desktop's device context
-  HDC dc = GetDC(0L);
-  if (!dc) return 0;
-  // check the device capabilities flags. However GetDeviceCaps
-  // does not return anything useful, so we have to do it manually:
-
-  HBITMAP bm = CreateCompatibleBitmap(dc, 1, 1);
-  HDC new_gc = CreateCompatibleDC(dc);
-  int save = SaveDC(new_gc);
-  SelectObject(new_gc, bm);
-  /*COLORREF set = */ SetPixel(new_gc, 0, 0, 0x01010101);
-  BOOL alpha_ok = fl_alpha_blend(dc, 0, 0, 1, 1, new_gc, 0, 0, 1, 1, blendfunc);
-  RestoreDC(new_gc, save);
-  DeleteDC(new_gc);
-  DeleteObject(bm);
-  ReleaseDC(0L, dc);
-
-  if (alpha_ok) can_do = 1;
-  return can_do;
-}
-
-HDC fl_makeDC(HBITMAP bitmap) {
-  HDC new_gc = CreateCompatibleDC(fl_gc);
-  SetTextAlign(new_gc, TA_BASELINE|TA_LEFT);
-  SetBkMode(new_gc, TRANSPARENT);
-#if USE_COLORMAP
-  if (fl_palette) SelectPalette(new_gc, fl_palette, FALSE);
-#endif
-  SelectObject(new_gc, bitmap);
-  return new_gc;
-}
-
-static void fl_copy_offscreen_to_display(int x,int y,int w,int h,HBITMAP bitmap,int srcx,int srcy) {
-  HDC new_gc = CreateCompatibleDC(fl_gc);
-  int save = SaveDC(new_gc);
-  SelectObject(new_gc, bitmap);
-  BitBlt(fl_gc, x, y, w, h, new_gc, srcx, srcy, SRCCOPY);
-  RestoreDC(new_gc, save);
-  DeleteDC(new_gc);
-}
-
-void fl_copy_offscreen_with_alpha(int x,int y,int w,int h,HBITMAP bitmap,int srcx,int srcy) {
-  HDC new_gc = CreateCompatibleDC(fl_gc);
-  int save = SaveDC(new_gc);
-  SelectObject(new_gc, bitmap);
-  BOOL alpha_ok = 0;
-  // first try to alpha blend
-  // if to printer, always try alpha_blend
-  int to_display = Fl_Surface_Device::surface()->class_name() == Fl_Display_Device::class_id; // true iff display output
-  if ( (to_display && fl_can_do_alpha_blending()) || Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) {
-    alpha_ok = fl_alpha_blend(fl_gc, x, y, w, h, new_gc, srcx, srcy, w, h, blendfunc);
-  }
-  // if that failed (it shouldn't), still copy the bitmap over, but now alpha is 1
-  if (!alpha_ok) {
-    BitBlt(fl_gc, x, y, w, h, new_gc, srcx, srcy, SRCCOPY);
-  }
-  RestoreDC(new_gc, save);
-  DeleteDC(new_gc);
-}
-
-extern void fl_restore_clip();
-
-#elif defined(__APPLE_QUARTZ__) || defined(FL_DOXYGEN)
-
-char fl_can_do_alpha_blending() {
-  return 1;
-}
-
-Fl_Offscreen fl_create_offscreen_with_alpha(int w, int h) {
-  void *data = calloc(w*h,4);
-  CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
-  CGContextRef ctx = CGBitmapContextCreate(
-    data, w, h, 8, w*4, lut, kCGImageAlphaPremultipliedLast);
-  CGColorSpaceRelease(lut);
-  return (Fl_Offscreen)ctx;
-}
-
-/** \addtogroup fl_drawings
- @{
- */
-
-/** 
-  Creation of an offscreen graphics buffer.
- \param w,h     width and height in pixels of the buffer.
- \return    the created graphics buffer.
- */
-Fl_Offscreen fl_create_offscreen(int w, int h) {
-  void *data = calloc(w*h,4);
-  CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
-  CGContextRef ctx = CGBitmapContextCreate(
-    data, w, h, 8, w*4, lut, kCGImageAlphaNoneSkipLast);
-  CGColorSpaceRelease(lut);
-  return (Fl_Offscreen)ctx;
-}
-
-static void bmProviderRelease (void *src, const void *data, size_t size) {
-  CFIndex count = CFGetRetainCount(src);
-  CFRelease(src);
-  if(count == 1) free((void*)data);
-}
-
-static void fl_copy_offscreen_to_display(int x,int y,int w,int h,Fl_Offscreen osrc,int srcx,int srcy) {
-  CGContextRef src = (CGContextRef)osrc;
-  void *data = CGBitmapContextGetData(src);
-  int sw = CGBitmapContextGetWidth(src);
-  int sh = CGBitmapContextGetHeight(src);
-  CGImageAlphaInfo alpha = CGBitmapContextGetAlphaInfo(src);
-  CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
-  // when output goes to a Quartz printercontext, release of the bitmap must be
-  // delayed after the end of the print page
-  CFRetain(src);
-  CGDataProviderRef src_bytes = CGDataProviderCreateWithData( src, data, sw*sh*4, bmProviderRelease);
-  CGImageRef img = CGImageCreate( sw, sh, 8, 4*8, 4*sw, lut, alpha,
-    src_bytes, 0L, false, kCGRenderingIntentDefault);
-  // fl_push_clip();
-  CGRect rect = { { x, y }, { w, h } };
-  Fl_X::q_begin_image(rect, srcx, srcy, sw, sh);
-  CGContextDrawImage(fl_gc, rect, img);
-  Fl_X::q_end_image();
-  CGImageRelease(img);
-  CGColorSpaceRelease(lut);
-  CGDataProviderRelease(src_bytes);
-}
-
-/**  Deletion of an offscreen graphics buffer.
- \param ctx     the buffer to be deleted.
- */
-void fl_delete_offscreen(Fl_Offscreen ctx) {
-  if (!ctx) return;
-  void *data = CGBitmapContextGetData((CGContextRef)ctx);
-  CFIndex count = CFGetRetainCount(ctx);
-  CGContextRelease((CGContextRef)ctx);
-  if(count == 1) free(data);
-}
-
-const int stack_max = 16;
-static int stack_ix = 0;
-static CGContextRef stack_gc[stack_max];
-static Window stack_window[stack_max];
-static Fl_Surface_Device *_ss;
-
-/**  Send all subsequent drawing commands to this offscreen buffer.
- \param ctx     the offscreen buffer.
- */
-void fl_begin_offscreen(Fl_Offscreen ctx) {
-  _ss = Fl_Surface_Device::surface(); 
-  Fl_Display_Device::display_device()->set_current();
-  if (stack_ix<stack_max) {
-    stack_gc[stack_ix] = fl_gc;
-    stack_window[stack_ix] = fl_window;
-  } else 
-    fprintf(stderr, "FLTK CGContext Stack overflow error\n");
-  stack_ix++;
-
-  fl_gc = (CGContextRef)ctx;
-  fl_window = 0;
-  CGContextSaveGState(fl_gc);
-  fl_push_no_clip();
-}
-
-/** Quit sending drawing commands to the current offscreen buffer.
- */
-void fl_end_offscreen() {
-  Fl_X::q_release_context();
-  fl_pop_clip();
-  if (stack_ix>0)
-    stack_ix--;
-  else
-    fprintf(stderr, "FLTK CGContext Stack underflow error\n");
-  if (stack_ix<stack_max) {
-    fl_gc = stack_gc[stack_ix];
-    fl_window = stack_window[stack_ix];
-  }
-  _ss->set_current();
-}
-
-/** @} */
-
-extern void fl_restore_clip();
-
-#else
-# error unsupported platform
-#endif
-
-/**
-  Forces the window to be redrawn.
-*/
-void Fl_Double_Window::flush() {flush(0);}
-
-/**
-  Forces the window to be redrawn.
-  \param[in] eraseoverlay non-zero to erase overlay, zero to ignore
-
-  Fl_Overlay_Window relies on flush(1) copying the back buffer to the
-  front everywhere, even if damage() == 0, thus erasing the overlay,
-  and leaving the clip region set to the entire window.
-*/
-void Fl_Double_Window::flush(int eraseoverlay) {
-  make_current(); // make sure fl_gc is non-zero
-  Fl_X *myi = Fl_X::i(this);
-  if (!myi->other_xid) {
-#if USE_XDBE
-    if (can_xdbe()) {
-      myi->other_xid = XdbeAllocateBackBufferName(fl_display, fl_xid(this), XdbeCopied);
-      myi->backbuffer_bad = 1;
-    } else
-#endif
-#if defined(USE_X11) || defined(WIN32)
-    myi->other_xid = fl_create_offscreen(w(), h());
-    clear_damage(FL_DAMAGE_ALL);
-#elif defined(__APPLE_QUARTZ__)
-    if (force_doublebuffering_) {
-      myi->other_xid = fl_create_offscreen(w(), h());
-      clear_damage(FL_DAMAGE_ALL);
-    }
-#else
-# error unsupported platform
-#endif
-  }
-#if USE_XDBE
-  if (use_xdbe) {
-    if (myi->backbuffer_bad || eraseoverlay) {
-      // Make sure we do a complete redraw...
-      if (myi->region) {XDestroyRegion(myi->region); myi->region = 0;}
-      clear_damage(FL_DAMAGE_ALL);
-      myi->backbuffer_bad = 0;
-    }
-
-    // Redraw as needed...
-    if (damage()) {
-      fl_clip_region(myi->region); myi->region = 0;
-      fl_window = myi->other_xid;
-      draw();
-      fl_window = myi->xid;
-    }
-
-    // Copy contents of back buffer to window...
-    XdbeSwapInfo s;
-    s.swap_window = fl_xid(this);
-    s.swap_action = XdbeCopied;
-    XdbeSwapBuffers(fl_display, &s, 1);
-    return;
-  } else
-#endif
-  if (damage() & ~FL_DAMAGE_EXPOSE) {
-    fl_clip_region(myi->region); myi->region = 0;
-#ifdef WIN32
-    HDC _sgc = fl_gc;
-    fl_gc = fl_makeDC(myi->other_xid);
-    int save = SaveDC(fl_gc);
-    fl_restore_clip(); // duplicate region into new gc
-    draw();
-    RestoreDC(fl_gc, save);
-    DeleteDC(fl_gc);
-    fl_gc = _sgc;
-    //# if defined(FLTK_USE_CAIRO)
-    //if Fl::cairo_autolink_context() Fl::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
-    //# endif
-#elif defined(__APPLE__)
-    if ( myi->other_xid ) {
-      fl_begin_offscreen( myi->other_xid );
-      fl_clip_region( 0 );   
-      draw();
-      fl_end_offscreen();
-    } else {
-      draw();
-    }
-#else // X:
-    fl_window = myi->other_xid;
-    draw();
-    fl_window = myi->xid;
-#endif
-  }
-  if (eraseoverlay) fl_clip_region(0);
-  // on Irix (at least) it is faster to reduce the area copied to
-  // the current clip region:
-  int X,Y,W,H; fl_clip_box(0,0,w(),h(),X,Y,W,H);
-  if (myi->other_xid) fl_copy_offscreen(X, Y, W, H, myi->other_xid, X, Y);
-}
-
-void Fl_Double_Window::resize(int X,int Y,int W,int H) {
-  int ow = w();
-  int oh = h();
-  Fl_Window::resize(X,Y,W,H);
-#if USE_XDBE
-  if (use_xdbe) {
-    Fl_X* myi = Fl_X::i(this);
-    if (myi && myi->other_xid && (ow < w() || oh < h())) {
-      // STR #2152: Deallocate the back buffer to force creation of a new one.
-      XdbeDeallocateBackBufferName(fl_display,myi->other_xid);
-      myi->other_xid = 0;
-    }
-    return;
-  }
-#endif
-  Fl_X* myi = Fl_X::i(this);
-  if (myi && myi->other_xid && (ow != w() || oh != h())) {
-    fl_delete_offscreen(myi->other_xid);
-    myi->other_xid = 0;
-  }
-}
-
-void Fl_Double_Window::hide() {
-  Fl_X* myi = Fl_X::i(this);
-  if (myi && myi->other_xid) {
-#if USE_XDBE
-    if (!use_xdbe)
-#endif
-      fl_delete_offscreen(myi->other_xid);
-  }
-  Fl_Window::hide();
-}
-
-/**
-  The destructor <I>also deletes all the children</I>. This allows a
-  whole tree to be deleted at once, without having to keep a pointer to
-  all the children in the user code.
-*/
-Fl_Double_Window::~Fl_Double_Window() {
-  hide();
-}
-
-//
-// End of "$Id: Fl_Double_Window.cxx 8383 2011-02-06 12:20:16Z AlbrechtS $".
-//
diff --git a/common/fltk/src/Fl_File_Browser.cxx b/common/fltk/src/Fl_File_Browser.cxx
deleted file mode 100644
index 98c5ff1..0000000
--- a/common/fltk/src/Fl_File_Browser.cxx
+++ /dev/null
@@ -1,643 +0,0 @@
-//
-// "$Id: Fl_File_Browser.cxx 8063 2010-12-19 21:20:10Z matt $"
-//
-// Fl_File_Browser routines.
-//
-// Copyright 1999-2010 by Michael Sweet.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_File_Browser::full_height()     - Return the height of the list.
-//   Fl_File_Browser::item_height()     - Return the height of a list item.
-//   Fl_File_Browser::item_width()      - Return the width of a list item.
-//   Fl_File_Browser::item_draw()       - Draw a list item.
-//   Fl_File_Browser::Fl_File_Browser() - Create a Fl_File_Browser widget.
-//   Fl_File_Browser::load()            - Load a directory into the browser.
-//   Fl_File_Browser::filter()          - Set the filename filter.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl_File_Browser.H>
-#include <FL/fl_draw.H>
-#include <FL/filename.H>
-#include <FL/Fl_Image.H>	// icon
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-
-#ifdef __CYGWIN__
-#  include <mntent.h>
-#elif defined(WIN32)
-#  include <windows.h>
-#  include <direct.h>
-// Apparently Borland C++ defines DIRECTORY in <direct.h>, which
-// interfers with the Fl_File_Icon enumeration of the same name.
-#  ifdef DIRECTORY
-#    undef DIRECTORY
-#  endif // DIRECTORY
-#endif // __CYGWIN__
-
-#ifdef __EMX__
-#  define  INCL_DOS
-#  define  INCL_DOSMISC
-#  include <os2.h>
-#endif // __EMX__
-
-#if defined(__APPLE__)
-#  include <sys/param.h>
-#  include <sys/ucred.h>
-#  include <sys/mount.h>
-#endif // __APPLE__
-
-//
-// FL_BLINE definition from "Fl_Browser.cxx"...
-//
-
-#define SELECTED 1
-#define NOTDISPLAYED 2
-
-// TODO -- Warning: The definition of FL_BLINE here is a hack.
-//    Fl_File_Browser should not do this. PLEASE FIX.
-//    FL_BLINE should be private to Fl_Browser, and not re-defined here.
-//    For now, make sure this struct is precisely consistent with Fl_Browser.cxx.
-//
-struct FL_BLINE			// data is in a linked list of these
-{
-  FL_BLINE	*prev;		// Previous item in list
-  FL_BLINE	*next;		// Next item in list
-  void		*data;		// Pointer to data (function)
-  Fl_Image      *icon;		// Pointer to optional icon
-  short		length;		// sizeof(txt)-1, may be longer than string
-  char		flags;		// selected, displayed
-  char		txt[1];		// start of allocated array
-};
-
-
-//
-// 'Fl_File_Browser::full_height()' - Return the height of the list.
-//
-
-int					// O - Height in pixels
-Fl_File_Browser::full_height() const
-{
-  int	i,				// Looping var
-	th;				// Total height of list.
-
-
-  for (i = 0, th = 0; i < size(); i ++)
-    th += item_height(find_line(i));
-
-  return (th);
-}
-
-
-//
-// 'Fl_File_Browser::item_height()' - Return the height of a list item.
-//
-
-int					// O - Height in pixels
-Fl_File_Browser::item_height(void *p) const	// I - List item data
-{
-  FL_BLINE	*line;			// Pointer to line
-  char		*t;			// Pointer into text
-  int		height;			// Width of line
-  int		textheight;		// Height of text
-
-
-  // Figure out the standard text height...
-  fl_font(textfont(), textsize());
-  textheight = fl_height();
-
-  // We always have at least 1 line...
-  height = textheight;
-
-  // Scan for newlines...
-  line = (FL_BLINE *)p;
-
-  if (line != NULL)
-    for (t = line->txt; *t != '\0'; t ++)
-      if (*t == '\n')
-	height += textheight;
-
-  // If we have enabled icons then add space for them...
-  if (Fl_File_Icon::first() != NULL && height < iconsize_)
-    height = iconsize_;
-
-  // Add space for the selection border..
-  height += 2;
-
-  // Return the height
-  return (height);
-}
-
-
-//
-// 'Fl_File_Browser::item_width()' - Return the width of a list item.
-//
-
-int					// O - Width in pixels
-Fl_File_Browser::item_width(void *p) const	// I - List item data
-{
-  int		i;			// Looping var
-  FL_BLINE	*line;			// Pointer to line
-  char		*t,			// Pointer into text
-		*ptr,			// Pointer into fragment
-		fragment[10240];	// Fragment of text
-  int		width,			// Width of line
-		tempwidth;		// Width of fragment
-  int		column;			// Current column
-  const int	*columns;		// Columns
-
-
-  // Scan for newlines...
-  line    = (FL_BLINE *)p;
-  columns = column_widths();
-
-  // Set the font and size...
-  if (line->txt[strlen(line->txt) - 1] == '/')
-    fl_font(textfont() | FL_BOLD, textsize());
-  else
-    fl_font(textfont(), textsize());
-
-  if (strchr(line->txt, '\n') == NULL &&
-      strchr(line->txt, column_char()) == NULL)
-  {
-    // Do a fast width calculation...
-    width = (int)fl_width(line->txt);
-  }
-  else
-  {
-    // More than 1 line or have columns; find the maximum width...
-    width     = 0;
-    tempwidth = 0;
-    column    = 0;
-
-    for (t = line->txt, ptr = fragment; *t != '\0'; t ++)
-      if (*t == '\n')
-      {
-        // Newline - nul terminate this fragment and get the width...
-        *ptr = '\0';
-
-	tempwidth += (int)fl_width(fragment);
-
-        // Update the max width as needed...
-	if (tempwidth > width)
-	  width = tempwidth;
-
-        // Point back to the start of the fragment...
-	ptr       = fragment;
-	tempwidth = 0;
-	column    = 0;
-      }
-      else if (*t == column_char())
-      {
-        // Advance to the next column...
-        column ++;
-	if (columns)
-	{
-	  for (i = 0, tempwidth = 0; i < column && columns[i]; i ++)
-	    tempwidth += columns[i];
-	}
-	else
-          tempwidth = column * (int)(fl_height() * 0.6 * 8.0);
-
-        if (tempwidth > width)
-	  width = tempwidth;
-
-	ptr = fragment;
-      }
-      else
-        *ptr++ = *t;
-
-    if (ptr > fragment)
-    {
-      // Nul terminate this fragment and get the width...
-      *ptr = '\0';
-
-      tempwidth += (int)fl_width(fragment);
-
-      // Update the max width as needed...
-      if (tempwidth > width)
-	width = tempwidth;
-    }
-  }
-
-  // If we have enabled icons then add space for them...
-  if (Fl_File_Icon::first() != NULL)
-    width += iconsize_ + 8;
-
-  // Add space for the selection border..
-  width += 2;
-
-  // Return the width
-  return (width);
-}
-
-
-//
-// 'Fl_File_Browser::item_draw()' - Draw a list item.
-//
-
-void
-Fl_File_Browser::item_draw(void *p,	// I - List item data
-                 	   int  X,	// I - Upper-lefthand X coordinate
-		 	   int  Y,	// I - Upper-lefthand Y coordinate
-		 	   int  W,	// I - Width of item
-			   int) const	// I - Height of item
-{
-  int		i;			// Looping var
-  FL_BLINE	*line;			// Pointer to line
-  Fl_Color	c;			// Text color
-  char		*t,			// Pointer into text
-		*ptr,			// Pointer into fragment
-		fragment[10240];	// Fragment of text
-  int		width,			// Width of line
-		height;			// Height of line
-  int		column;			// Current column
-  const int	*columns;		// Columns
-
-
-  // Draw the list item text...
-  line = (FL_BLINE *)p;
-
-  if (line->txt[strlen(line->txt) - 1] == '/')
-    fl_font(textfont() | FL_BOLD, textsize());
-  else
-    fl_font(textfont(), textsize());
-
-  if (line->flags & SELECTED)
-    c = fl_contrast(textcolor(), selection_color());
-  else
-    c = textcolor();
-
-  if (Fl_File_Icon::first() == NULL)
-  {
-    // No icons, just draw the text...
-    X ++;
-    W -= 2;
-  }
-  else
-  {
-    // Draw the icon if it is set...
-    if (line->data)
-      ((Fl_File_Icon *)line->data)->draw(X, Y, iconsize_, iconsize_,
-                                	(line->flags & SELECTED) ? FL_YELLOW :
-				                                   FL_LIGHT2,
-					active_r());
-
-    // Draw the text offset to the right...
-    X += iconsize_ + 9;
-    W -= iconsize_ - 10;
-
-    // Center the text vertically...
-    height = fl_height();
-
-    for (t = line->txt; *t != '\0'; t ++)
-      if (*t == '\n')
-	height += fl_height();
-
-    if (height < iconsize_)
-      Y += (iconsize_ - height) / 2;
-  }
-
-  // Draw the text...
-  line    = (FL_BLINE *)p;
-  columns = column_widths();
-  width   = 0;
-  column  = 0;
-
-  if (active_r())
-    fl_color(c);
-  else
-    fl_color(fl_inactive(c));
-
-  for (t = line->txt, ptr = fragment; *t != '\0'; t ++)
-    if (*t == '\n')
-    {
-      // Newline - nul terminate this fragment and draw it...
-      *ptr = '\0';
-
-      fl_draw(fragment, X + width, Y, W - width, fl_height(),
-              (Fl_Align)(FL_ALIGN_LEFT | FL_ALIGN_CLIP), 0, 0);
-
-      // Point back to the start of the fragment...
-      ptr    = fragment;
-      width  = 0;
-      Y      += fl_height();
-      column = 0;
-    }
-    else if (*t == column_char())
-    {
-      // Tab - nul terminate this fragment and draw it...
-      *ptr = '\0';
-
-      int cW = W - width; // Clip width...
-
-      if (columns)
-      {
-        // Try clipping inside this column...
-	for (i = 0; i < column && columns[i]; i ++);
-
-        if (columns[i])
-          cW = columns[i];
-      }
-
-      fl_draw(fragment, X + width, Y, cW, fl_height(),
-              (Fl_Align)(FL_ALIGN_LEFT | FL_ALIGN_CLIP), 0, 0);
-
-      // Advance to the next column...
-      column ++;
-      if (columns)
-      {
-	for (i = 0, width = 0; i < column && columns[i]; i ++)
-	  width += columns[i];
-      }
-      else
-        width = column * (int)(fl_height() * 0.6 * 8.0);
-
-      ptr = fragment;
-    }
-    else
-      *ptr++ = *t;
-
-  if (ptr > fragment)
-  {
-    // Nul terminate this fragment and draw it...
-    *ptr = '\0';
-
-    fl_draw(fragment, X + width, Y, W - width, fl_height(),
-            (Fl_Align)(FL_ALIGN_LEFT | FL_ALIGN_CLIP), 0, 0);
-  }
-}
-
-
-//
-// 'Fl_File_Browser::Fl_File_Browser()' - Create a Fl_File_Browser widget.
-//
-
-Fl_File_Browser::Fl_File_Browser(int        X,  // I - Upper-lefthand X coordinate
-                        	 int        Y,  // I - Upper-lefthand Y coordinate
-				 int        W,  // I - Width in pixels
-				 int        H,  // I - Height in pixels
-				 const char *l)	// I - Label text
-    : Fl_Browser(X, Y, W, H, l)
-{
-  // Initialize the filter pattern, current directory, and icon size...
-  pattern_   = "*";
-  directory_ = "";
-  iconsize_  = (uchar)(3 * textsize() / 2);
-  filetype_  = FILES;
-}
-
-
-//
-// 'Fl_File_Browser::load()' - Load a directory into the browser.
-//
-
-int						// O - Number of files loaded
-Fl_File_Browser::load(const char     *directory,// I - Directory to load
-                      Fl_File_Sort_F *sort)	// I - Sort function to use
-{
-  int		i;				// Looping var
-  int		num_files;			// Number of files in directory
-  int		num_dirs;			// Number of directories in list
-  char		filename[4096];			// Current file
-  Fl_File_Icon	*icon;				// Icon to use
-
-
-//  printf("Fl_File_Browser::load(\"%s\")\n", directory);
-
-  clear();
-
-  directory_ = directory;
-
-  if (!directory)
-    return (0);
-
-  if (directory_[0] == '\0')
-  {
-    //
-    // No directory specified; for UNIX list all mount points.  For DOS
-    // list all valid drive letters...
-    //
-
-    num_files = 0;
-    if ((icon = Fl_File_Icon::find("any", Fl_File_Icon::DEVICE)) == NULL)
-      icon = Fl_File_Icon::find("any", Fl_File_Icon::DIRECTORY);
-
-#ifdef WIN32
-#  ifdef __CYGWIN__
-    //
-    // Cygwin provides an implementation of setmntent() to get the list
-    // of available drives...
-    //
-    FILE          *m = setmntent("/-not-used-", "r");
-    struct mntent *p;
-
-    while ((p = getmntent (m)) != NULL) {
-      add(p->mnt_dir, icon);
-      num_files ++;
-    }
-
-    endmntent(m);
-#  else
-    //
-    // Normal WIN32 code uses drive bits...
-    //
-    DWORD	drives;		// Drive available bits
-
-    drives = GetLogicalDrives();
-    for (i = 'A'; i <= 'Z'; i ++, drives >>= 1)
-      if (drives & 1)
-      {
-        sprintf(filename, "%c:/", i);
-
-	if (i < 'C') // see also: GetDriveType and GetVolumeInformation in WIN32
-	  add(filename, icon);
-	else
-	  add(filename, icon);
-
-	num_files ++;
-      }
-#  endif // __CYGWIN__
-#elif defined(__EMX__)
-    //
-    // OS/2 code uses drive bits...
-    //
-    ULONG	curdrive;	// Current drive
-    ULONG	drives;		// Drive available bits
-    int		start = 3;      // 'C' (MRS - dunno if this is correct!)
-
-
-    DosQueryCurrentDisk(&curdrive, &drives);
-    drives >>= start - 1;
-    for (i = 'A'; i <= 'Z'; i ++, drives >>= 1)
-      if (drives & 1)
-      {
-        sprintf(filename, "%c:/", i);
-        add(filename, icon);
-
-	num_files ++;
-      }
-#elif defined(__APPLE__)
-    // MacOS X and Darwin use getfsstat() system call...
-    int			numfs;	// Number of file systems
-    struct statfs	*fs;	// Buffer for file system info
-
-
-    // We always have the root filesystem.
-    add("/", icon);
-
-    // Get the mounted filesystems...
-    numfs = getfsstat(NULL, 0, MNT_NOWAIT);
-    if (numfs > 0) {
-      // We have file systems, get them...
-      fs = new struct statfs[numfs];
-      getfsstat(fs, sizeof(struct statfs) * numfs, MNT_NOWAIT);
-
-      // Add filesystems to the list...
-      for (i = 0; i < numfs; i ++) {
-	// Ignore "/", "/dev", and "/.vol"...
-        if (fs[i].f_mntonname[1] && strcmp(fs[i].f_mntonname, "/dev") &&
-	    strcmp(fs[i].f_mntonname, "/.vol")) {
-          snprintf(filename, sizeof(filename), "%s/", fs[i].f_mntonname);
-          add(filename, icon);
-        }
-        num_files ++;
-      }
-
-      // Free the memory used for the file system info array...
-      delete[] fs;
-    }
-#else
-    //
-    // UNIX code uses /etc/fstab or similar...
-    //
-    FILE	*mtab;		// /etc/mtab or /etc/mnttab file
-    char	line[FL_PATH_MAX];	// Input line
-
-    //
-    // Open the file that contains a list of mounted filesystems...
-    //
-
-    mtab = fl_fopen("/etc/mnttab", "r");	// Fairly standard
-    if (mtab == NULL)
-      mtab = fl_fopen("/etc/mtab", "r");	// More standard
-    if (mtab == NULL)
-      mtab = fl_fopen("/etc/fstab", "r");	// Otherwise fallback to full list
-    if (mtab == NULL)
-      mtab = fl_fopen("/etc/vfstab", "r");	// Alternate full list file
-
-    if (mtab != NULL)
-    {
-      while (fgets(line, sizeof(line), mtab) != NULL)
-      {
-        if (line[0] == '#' || line[0] == '\n')
-	  continue;
-        if (sscanf(line, "%*s%4095s", filename) != 1)
-	  continue;
-
-        strlcat(filename, "/", sizeof(filename));
-
-//        printf("Fl_File_Browser::load() - adding \"%s\" to list...\n", filename);
-        add(filename, icon);
-	num_files ++;
-      }
-
-      fclose(mtab);
-    }
-#endif // WIN32 || __EMX__
-  }
-  else
-  {
-    dirent	**files;	// Files in in directory
-
-
-    //
-    // Build the file list...
-    //
-
-#if (defined(WIN32) && !defined(__CYGWIN__)) || defined(__EMX__)
-    strlcpy(filename, directory_, sizeof(filename));
-    i = strlen(filename) - 1;
-
-    if (i == 2 && filename[1] == ':' &&
-        (filename[2] == '/' || filename[2] == '\\'))
-      filename[2] = '/';
-    else if (filename[i] != '/' && filename[i] != '\\')
-      strlcat(filename, "/", sizeof(filename));
-
-    num_files = fl_filename_list(filename, &files, sort);
-#else
-    num_files = fl_filename_list(directory_, &files, sort);
-#endif /* WIN32 || __EMX__ */
-
-    if (num_files <= 0)
-      return (0);
-
-    for (i = 0, num_dirs = 0; i < num_files; i ++) {
-      if (strcmp(files[i]->d_name, "./")) {
-	snprintf(filename, sizeof(filename), "%s/%s", directory_,
-	         files[i]->d_name);
-
-        icon = Fl_File_Icon::find(filename);
-	if ((icon && icon->type() == Fl_File_Icon::DIRECTORY) ||
-	     _fl_filename_isdir_quick(filename)) {
-          num_dirs ++;
-          insert(num_dirs, files[i]->d_name, icon);
-	} else if (filetype_ == FILES &&
-	           fl_filename_match(files[i]->d_name, pattern_)) {
-          add(files[i]->d_name, icon);
-	}
-      }
-
-      free(files[i]);
-    }
-
-    free(files);
-  }
-
-  return (num_files);
-}
-
-
-//
-// 'Fl_File_Browser::filter()' - Set the filename filter.
-//
-
-void
-Fl_File_Browser::filter(const char *pattern)	// I - Pattern string
-{
-  // If pattern is NULL set the pattern to "*"...
-  if (pattern)
-    pattern_ = pattern;
-  else
-    pattern_ = "*";
-}
-
-
-//
-// End of "$Id: Fl_File_Browser.cxx 8063 2010-12-19 21:20:10Z matt $".
-//
diff --git a/common/fltk/src/Fl_File_Chooser.cxx b/common/fltk/src/Fl_File_Chooser.cxx
deleted file mode 100644
index 4d879d2..0000000
--- a/common/fltk/src/Fl_File_Chooser.cxx
+++ /dev/null
@@ -1,475 +0,0 @@
-//
-// "$Id: Fl_File_Chooser.cxx 8786 2011-06-07 11:41:36Z manolo $"
-//
-// Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "../FL/Fl_File_Chooser.H"
-#include <FL/fl_draw.H>
-
-void Fl_File_Chooser::cb_window_i(Fl_Double_Window*, void*) {
-  fileName->value("");
-fileList->deselect();
-Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-window->hide();
-}
-void Fl_File_Chooser::cb_window(Fl_Double_Window* o, void* v) {
-  ((Fl_File_Chooser*)(o->user_data()))->cb_window_i(o,v);
-}
-
-void Fl_File_Chooser::cb_showChoice_i(Fl_Choice*, void*) {
-  showChoiceCB();
-}
-void Fl_File_Chooser::cb_showChoice(Fl_Choice* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_showChoice_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favoritesButton_i(Fl_Menu_Button*, void*) {
-  favoritesButtonCB();
-}
-void Fl_File_Chooser::cb_favoritesButton(Fl_Menu_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favoritesButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_newButton_i(Fl_Button*, void*) {
-  newdir();
-}
-void Fl_File_Chooser::cb_newButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_newButton_i(o,v);
-}
-
-#include <FL/Fl_Bitmap.H>
-static unsigned char idata_new[] =
-{0,0,120,0,132,0,2,1,1,254,1,128,49,128,49,128,253,128,253,128,49,128,49,
-128,1,128,1,128,255,255,0,0};
-static Fl_Bitmap image_new(idata_new, 16, 16);
-
-void Fl_File_Chooser::cb__i(Fl_Tile*, void*) {
-  update_preview();
-}
-void Fl_File_Chooser::cb_(Fl_Tile* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->user_data()))->cb__i(o,v);
-}
-
-void Fl_File_Chooser::cb_fileList_i(Fl_File_Browser*, void*) {
-  fileListCB();
-}
-void Fl_File_Chooser::cb_fileList(Fl_File_Browser* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_fileList_i(o,v);
-}
-
-void Fl_File_Chooser::cb_previewButton_i(Fl_Check_Button*, void*) {
-  preview(previewButton->value());
-}
-void Fl_File_Chooser::cb_previewButton(Fl_Check_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_previewButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_showHiddenButton_i(Fl_Check_Button*, void*) {
-  showHidden(showHiddenButton->value());
-}
-void Fl_File_Chooser::cb_showHiddenButton(Fl_Check_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_showHiddenButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_fileName_i(Fl_File_Input*, void*) {
-  fileNameCB();
-}
-void Fl_File_Chooser::cb_fileName(Fl_File_Input* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_fileName_i(o,v);
-}
-
-void Fl_File_Chooser::cb_okButton_i(Fl_Return_Button*, void*) {
-  window->hide();
-
-// Do any callback that is registered...
-if (callback_)
-  (*callback_)(this, data_);
-}
-void Fl_File_Chooser::cb_okButton(Fl_Return_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_okButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_cancelButton_i(Fl_Button*, void*) {
-  fileName->value("");
-fileList->deselect();
-Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-window->hide();
-}
-void Fl_File_Chooser::cb_cancelButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_cancelButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favList_i(Fl_File_Browser*, void*) {
-  favoritesCB(favList);
-}
-void Fl_File_Chooser::cb_favList(Fl_File_Browser* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_favList_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favUpButton_i(Fl_Button*, void*) {
-  favoritesCB(favUpButton);
-}
-void Fl_File_Chooser::cb_favUpButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favUpButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favDeleteButton_i(Fl_Button*, void*) {
-  favoritesCB(favDeleteButton);
-}
-void Fl_File_Chooser::cb_favDeleteButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favDeleteButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favDownButton_i(Fl_Button*, void*) {
-  favoritesCB(favDownButton);
-}
-void Fl_File_Chooser::cb_favDownButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favDownButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favCancelButton_i(Fl_Button*, void*) {
-  favWindow->hide();
-}
-void Fl_File_Chooser::cb_favCancelButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favCancelButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favOkButton_i(Fl_Return_Button*, void*) {
-  favoritesCB(favOkButton);
-}
-void Fl_File_Chooser::cb_favOkButton(Fl_Return_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favOkButton_i(o,v);
-}
-
-Fl_File_Chooser::Fl_File_Chooser(const char *d, const char *p, int t, const char *title) {
-  Fl_Group *prev_current = Fl_Group::current();
-  { window = new Fl_Double_Window(490, 380, "Choose File");
-    window->callback((Fl_Callback*)cb_window, (void*)(this));
-    { Fl_Group* o = new Fl_Group(10, 10, 470, 25);
-      { showChoice = new Fl_Choice(65, 10, 215, 25, "Show:");
-        showChoice->down_box(FL_BORDER_BOX);
-        showChoice->labelfont(1);
-        showChoice->callback((Fl_Callback*)cb_showChoice);
-        Fl_Group::current()->resizable(showChoice);
-        showChoice->label(show_label);
-      } // Fl_Choice* showChoice
-      { favoritesButton = new Fl_Menu_Button(290, 10, 155, 25, "Favorites");
-        favoritesButton->down_box(FL_BORDER_BOX);
-        favoritesButton->callback((Fl_Callback*)cb_favoritesButton);
-        favoritesButton->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
-        favoritesButton->label(favorites_label);
-      } // Fl_Menu_Button* favoritesButton
-      { Fl_Button* o = newButton = new Fl_Button(455, 10, 25, 25);
-        newButton->image(image_new);
-        newButton->labelsize(8);
-        newButton->callback((Fl_Callback*)cb_newButton);
-        o->tooltip(new_directory_tooltip);
-      } // Fl_Button* newButton
-      o->end();
-    } // Fl_Group* o
-    { Fl_Tile* o = new Fl_Tile(10, 45, 470, 225);
-      o->callback((Fl_Callback*)cb_);
-      { fileList = new Fl_File_Browser(10, 45, 295, 225);
-        fileList->type(2);
-        fileList->callback((Fl_Callback*)cb_fileList);
-        fileList->window()->hotspot(fileList);
-      } // Fl_File_Browser* fileList
-      { previewBox = new Fl_Box(305, 45, 175, 225, "?");
-        previewBox->box(FL_DOWN_BOX);
-        previewBox->labelsize(100);
-        previewBox->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
-      } // Fl_Box* previewBox
-      o->end();
-      Fl_Group::current()->resizable(o);
-    } // Fl_Tile* o
-    { Fl_Group* o = new Fl_Group(10, 275, 470, 95);
-      { Fl_Group* o = new Fl_Group(10, 275, 470, 20);
-        { previewButton = new Fl_Check_Button(10, 275, 73, 20, "Preview");
-          previewButton->shortcut(0x80070);
-          previewButton->down_box(FL_DOWN_BOX);
-          previewButton->value(1);
-          previewButton->callback((Fl_Callback*)cb_previewButton);
-          previewButton->label(preview_label);
-        } // Fl_Check_Button* previewButton
-        { showHiddenButton = new Fl_Check_Button(115, 275, 165, 20, "Show hidden files");
-          showHiddenButton->down_box(FL_DOWN_BOX);
-          showHiddenButton->callback((Fl_Callback*)cb_showHiddenButton);
-          showHiddenButton->label(hidden_label);
-        } // Fl_Check_Button* showHiddenButton
-        { Fl_Box* o = new Fl_Box(115, 275, 365, 20);
-          Fl_Group::current()->resizable(o);
-        } // Fl_Box* o
-        o->end();
-      } // Fl_Group* o
-      { fileName = new Fl_File_Input(115, 300, 365, 35);
-        fileName->labelfont(1);
-        fileName->callback((Fl_Callback*)cb_fileName);
-        fileName->when(FL_WHEN_ENTER_KEY);
-        Fl_Group::current()->resizable(fileName);
-        fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY);
-      } // Fl_File_Input* fileName
-      { Fl_Box* o = new Fl_Box(10, 310, 105, 25, "Filename:");
-        o->labelfont(1);
-        o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
-        o->label(filename_label);
-      } // Fl_Box* o
-      { Fl_Group* o = new Fl_Group(10, 345, 470, 25);
-        { okButton = new Fl_Return_Button(313, 345, 85, 25, "OK");
-          okButton->callback((Fl_Callback*)cb_okButton);
-          okButton->label(fl_ok);
-        } // Fl_Return_Button* okButton
-        { Fl_Button* o = cancelButton = new Fl_Button(408, 345, 72, 25, "Cancel");
-          cancelButton->callback((Fl_Callback*)cb_cancelButton);
-          o->label(fl_cancel);
-        } // Fl_Button* cancelButton
-        { Fl_Box* o = new Fl_Box(10, 345, 30, 25);
-          Fl_Group::current()->resizable(o);
-        } // Fl_Box* o
-        o->end();
-      } // Fl_Group* o
-      o->end();
-    } // Fl_Group* o
-    if (title) window->label(title);
-    window->set_modal();
-    window->end();
-  } // Fl_Double_Window* window
-  { favWindow = new Fl_Double_Window(355, 150, "Manage Favorites");
-    favWindow->user_data((void*)(this));
-    { favList = new Fl_File_Browser(10, 10, 300, 95);
-      favList->type(2);
-      favList->callback((Fl_Callback*)cb_favList);
-      Fl_Group::current()->resizable(favList);
-    } // Fl_File_Browser* favList
-    { Fl_Group* o = new Fl_Group(320, 10, 25, 95);
-      { favUpButton = new Fl_Button(320, 10, 25, 25, "@8>");
-        favUpButton->callback((Fl_Callback*)cb_favUpButton);
-      } // Fl_Button* favUpButton
-      { favDeleteButton = new Fl_Button(320, 45, 25, 25, "X");
-        favDeleteButton->labelfont(1);
-        favDeleteButton->callback((Fl_Callback*)cb_favDeleteButton);
-        Fl_Group::current()->resizable(favDeleteButton);
-      } // Fl_Button* favDeleteButton
-      { favDownButton = new Fl_Button(320, 80, 25, 25, "@2>");
-        favDownButton->callback((Fl_Callback*)cb_favDownButton);
-      } // Fl_Button* favDownButton
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(10, 113, 335, 29);
-      { favCancelButton = new Fl_Button(273, 115, 72, 25, "Cancel");
-        favCancelButton->callback((Fl_Callback*)cb_favCancelButton);
-        favCancelButton->label(fl_cancel);
-      } // Fl_Button* favCancelButton
-      { favOkButton = new Fl_Return_Button(181, 115, 79, 25, "Save");
-        favOkButton->callback((Fl_Callback*)cb_favOkButton);
-        favOkButton->label(save_label);
-      } // Fl_Return_Button* favOkButton
-      { Fl_Box* o = new Fl_Box(10, 115, 161, 25);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    favWindow->label(manage_favorites_label);
-    favWindow->set_modal();
-    favWindow->size_range(181, 150);
-    favWindow->end();
-  } // Fl_Double_Window* favWindow
-  callback_ = 0;
-  data_ = 0;
-  directory_[0] = 0;
-  window->size_range(window->w(), window->h(), Fl::w(), Fl::h());
-  type(t);
-  filter(p);
-  update_favorites();
-  value(d);
-  type(t);
-  int e;
-  prefs_.get("preview", e, 1);
-  preview(e);
-  Fl_Group::current(prev_current);
-  ext_group=(Fl_Widget*)0;
-}
-
-Fl_File_Chooser::~Fl_File_Chooser() {
-  Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-  if(ext_group)window->remove(ext_group);
-  delete window;
-  delete favWindow;
-}
-
-void Fl_File_Chooser::callback(void (*cb)(Fl_File_Chooser *, void *), void *d ) {
-  callback_ = cb;
-  data_     = d;
-}
-
-void Fl_File_Chooser::color(Fl_Color c) {
-  fileList->color(c);
-}
-
-Fl_Color Fl_File_Chooser::color() {
-  return (fileList->color());
-}
-
-char * Fl_File_Chooser::directory() {
-  return directory_;
-}
-
-const char * Fl_File_Chooser::filter() {
-  return (fileList->filter());
-}
-
-int Fl_File_Chooser::filter_value() {
-  return showChoice->value();
-}
-
-void Fl_File_Chooser::filter_value(int f) {
-  showChoice->value(f);
-  showChoiceCB();
-}
-
-void Fl_File_Chooser::hide() {
-  window->hide();
-}
-
-void Fl_File_Chooser::iconsize(uchar s) {
-  fileList->iconsize(s);
-}
-
-uchar Fl_File_Chooser::iconsize() {
-  return (fileList->iconsize());
-}
-
-void Fl_File_Chooser::label(const char *l) {
-  window->label(l);
-}
-
-const char * Fl_File_Chooser::label() {
-  return (window->label());
-}
-
-void Fl_File_Chooser::ok_label(const char *l) {
-  okButton->label(l);
-  int w=0, h=0;
-  okButton->measure_label(w, h);
-  okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(),
-                   w + 40, 25);
-  okButton->parent()->init_sizes();
-}
-
-const char * Fl_File_Chooser::ok_label() {
-  return (okButton->label());
-}
-
-int Fl_File_Chooser::shown() {
-  return window->shown();
-}
-
-void Fl_File_Chooser::textcolor(Fl_Color c) {
-  fileList->textcolor(c);
-}
-
-Fl_Color Fl_File_Chooser::textcolor() {
-  return (fileList->textcolor());
-}
-
-void Fl_File_Chooser::textfont(Fl_Font f) {
-  fileList->textfont(f);
-}
-
-Fl_Font Fl_File_Chooser::textfont() {
-  return (fileList->textfont());
-}
-
-void Fl_File_Chooser::textsize(Fl_Fontsize s) {
-  fileList->textsize(s);
-}
-
-Fl_Fontsize Fl_File_Chooser::textsize() {
-  return (fileList->textsize());
-}
-
-void Fl_File_Chooser::type(int t) {
-  type_ = t;
-  if (t & MULTI)
-    fileList->type(FL_MULTI_BROWSER);
-  else
-    fileList->type(FL_HOLD_BROWSER);
-  if (t & CREATE)
-    newButton->activate();
-  else
-    newButton->deactivate();
-  if (t & DIRECTORY)
-    fileList->filetype(Fl_File_Browser::DIRECTORIES);
-  else
-    fileList->filetype(Fl_File_Browser::FILES);
-}
-
-int Fl_File_Chooser::type() {
-  return (type_);
-}
-
-void * Fl_File_Chooser::user_data() const {
-  return (data_);
-}
-
-void Fl_File_Chooser::user_data(void *d) {
-  data_ = d;
-}
-
-int Fl_File_Chooser::visible() {
-  return window->visible();
-}
-
-Fl_Widget* Fl_File_Chooser::add_extra(Fl_Widget* gr) {
-  Fl_Widget* ret=ext_group;
-  if (gr==ext_group) {
-    return ret;
-  }
-  if (ext_group) {
-    int sh=ext_group->h()+4;
-    Fl_Widget* svres=window->resizable();
-    window->resizable(NULL);
-    window->size(window->w(),window->h()-sh);
-    window->remove(ext_group);
-    ext_group=NULL;
-    window->resizable(svres);
-  }
-  if (gr) {
-    int nh=window->h()+gr->h()+4;
-    Fl_Widget* svres=window->resizable();
-    window->resizable(NULL);
-    window->size(window->w(),nh);
-    gr->position(2,okButton->y()+okButton->h()+2);
-    window->add(gr);
-    ext_group=gr;
-    window->resizable(svres);
-  }
-  return ret;
-}
-
-//
-// End of "$Id: Fl_File_Chooser.cxx 8786 2011-06-07 11:41:36Z manolo $".
-//
diff --git a/common/fltk/src/Fl_File_Chooser.fl b/common/fltk/src/Fl_File_Chooser.fl
deleted file mode 100644
index dc22a72..0000000
--- a/common/fltk/src/Fl_File_Chooser.fl
+++ /dev/null
@@ -1,479 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0300 
-header_name {../FL/Fl_File_Chooser.H} 
-code_name {.cxx}
-comment {//
-// "$Id: Fl_File_Chooser.fl 8786 2011-06-07 11:41:36Z manolo $"
-//
-// Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-} {in_source in_header
-} 
-
-decl {\#include <FL/fl_draw.H>} {} 
-
-class FL_EXPORT Fl_File_Chooser {open
-} {
-  decl {enum { SINGLE = 0, MULTI = 1, CREATE = 2, DIRECTORY = 4 };} {public
-  }
-  decl {static Fl_Preferences prefs_;} {}
-  decl {void (*callback_)(Fl_File_Chooser*, void *);} {}
-  decl {void *data_;} {}
-  decl {char directory_[FL_PATH_MAX];} {}
-  decl {char pattern_[FL_PATH_MAX];} {}
-  decl {char preview_text_[2048];} {}
-  decl {int type_;} {}
-  decl {void favoritesButtonCB();} {}
-  decl {void favoritesCB(Fl_Widget *w);} {}
-  decl {void fileListCB();} {}
-  decl {void fileNameCB();} {}
-  decl {void newdir();} {}
-  decl {static void previewCB(Fl_File_Chooser *fc);} {}
-  decl {void showChoiceCB();} {}
-  decl {void update_favorites();} {}
-  decl {void update_preview();} {}
-  Function {Fl_File_Chooser(const char *d, const char *p, int t, const char *title)} {} {
-    code {Fl_Group *prev_current = Fl_Group::current();} {}
-    Fl_Window window {
-      label {Choose File}
-      callback {fileName->value("");
-fileList->deselect();
-Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-window->hide();} open
-      private xywh {507 327 490 380} type Double resizable
-      code0 {if (title) window->label(title);}
-      code1 {\#include <stdio.h>}
-      code2 {\#include <stdlib.h>}
-      code3 {\#include <string.h>} modal visible
-    } {
-      Fl_Group {} {open
-        private xywh {10 10 470 25}
-      } {
-        Fl_Choice showChoice {
-          label {Show:}
-          callback {showChoiceCB();} open
-          private xywh {65 10 215 25} down_box BORDER_BOX labelfont 1 resizable
-          code0 {showChoice->label(show_label);}
-        } {}
-        Fl_Menu_Button favoritesButton {
-          label Favorites
-          callback {favoritesButtonCB();} open
-          private xywh {290 10 155 25} down_box BORDER_BOX align 20
-          code0 {favoritesButton->label(favorites_label);}
-        } {}
-        Fl_Button newButton {
-          callback {newdir();}
-          image {new.xbm} xywh {455 10 25 25} labelsize 8
-          code0 {\#include <FL/Fl_Preferences.H>}
-          code1 {o->tooltip(new_directory_tooltip);}
-        }
-      }
-      Fl_Tile {} {
-        callback {update_preview();}
-        private xywh {10 45 470 225} resizable
-      } {
-        Fl_File_Browser fileList {
-          callback {fileListCB();}
-          private xywh {10 45 295 225} type Hold hotspot
-          code0 {\#include <FL/Fl_File_Browser.H>}
-        }
-        Fl_Box previewBox {
-          label {?}
-          private xywh {305 45 175 225} box DOWN_BOX labelsize 100 align 80
-        }
-      }
-      Fl_Group {} {open
-        private xywh {10 275 470 95}
-      } {
-        Fl_Group {} {open
-          private xywh {10 275 470 20}
-        } {
-          Fl_Check_Button previewButton {
-            label Preview
-            callback {preview(previewButton->value());}
-            xywh {10 275 73 20} down_box DOWN_BOX shortcut 0x80070 value 1
-            code0 {previewButton->label(preview_label);}
-          }
-          Fl_Check_Button showHiddenButton {
-            label {Show hidden files}
-            callback {showHidden(showHiddenButton->value());}
-            xywh {115 275 165 20} down_box DOWN_BOX
-            code0 {showHiddenButton->label(hidden_label);}
-          }
-          Fl_Box {} {
-            private xywh {115 275 365 20} resizable
-          }
-        }
-        Fl_File_Input fileName {
-          callback {fileNameCB();}
-          private xywh {115 300 365 35} labelfont 1 when 8 resizable
-          code0 {fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY);}
-        }
-        Fl_Box {} {
-          label {Filename:}
-          private xywh {10 310 105 25} labelfont 1 align 24
-          code0 {o->label(filename_label);}
-        }
-        Fl_Group {} {open
-          private xywh {10 345 470 25}
-        } {
-          Fl_Return_Button okButton {
-            label OK
-            callback {window->hide();
-
-// Do any callback that is registered...
-if (callback_)
-  (*callback_)(this, data_);}
-            private xywh {313 345 85 25}
-            code0 {\#include <FL/fl_ask.H>}
-            code1 {okButton->label(fl_ok);}
-          }
-          Fl_Button cancelButton {
-            label Cancel
-            callback {fileName->value("");
-fileList->deselect();
-Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-window->hide();}
-            private xywh {408 345 72 25}
-            code0 {o->label(fl_cancel);}
-          }
-          Fl_Box {} {
-            private xywh {10 345 30 25} resizable
-          }
-        }
-      }
-    }
-    Fl_Window favWindow {
-      label {Manage Favorites}
-      private xywh {413 100 355 150} type Double resizable
-      code0 {favWindow->label(manage_favorites_label);} modal size_range {181 150 0 0} visible
-    } {
-      Fl_File_Browser favList {
-        callback {favoritesCB(favList);}
-        private xywh {10 10 300 95} type Hold resizable
-      }
-      Fl_Group {} {open
-        xywh {320 10 25 95}
-      } {
-        Fl_Button favUpButton {
-          label {@8>}
-          callback {favoritesCB(favUpButton);}
-          private xywh {320 10 25 25}
-        }
-        Fl_Button favDeleteButton {
-          label X
-          callback {favoritesCB(favDeleteButton);}
-          private xywh {320 45 25 25} labelfont 1 resizable
-        }
-        Fl_Button favDownButton {
-          label {@2>}
-          callback {favoritesCB(favDownButton);}
-          private xywh {320 80 25 25}
-        }
-      }
-      Fl_Group {} {open
-        xywh {10 113 335 29}
-      } {
-        Fl_Button favCancelButton {
-          label Cancel
-          callback {favWindow->hide();}
-          private xywh {273 115 72 25}
-          code0 {favCancelButton->label(fl_cancel);}
-        }
-        Fl_Return_Button favOkButton {
-          label Save
-          callback {favoritesCB(favOkButton);}
-          private xywh {181 115 79 25}
-          code0 {\#include <FL/fl_ask.H>}
-          code1 {favOkButton->label(save_label);}
-        }
-        Fl_Box {} {
-          xywh {10 115 161 25} resizable
-        }
-      }
-    }
-    code {callback_ = 0;
-data_ = 0;
-directory_[0] = 0;
-window->size_range(window->w(), window->h(), Fl::w(), Fl::h());
-type(t);
-filter(p);
-update_favorites();
-value(d);
-type(t);
-int e;
-prefs_.get("preview", e, 1);
-preview(e);
-Fl_Group::current(prev_current);} {}
-    code {ext_group=(Fl_Widget*)0;} {}
-  }
-  Function {~Fl_File_Chooser()} {open
-  } {
-    code {Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-if(ext_group)window->remove(ext_group);
-delete window;
-delete favWindow;} {}
-  }
-  Function {callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0)} {return_type void
-  } {
-    code {callback_ = cb;
-data_     = d;} {}
-  }
-  Function {color(Fl_Color c)} {} {
-    code {fileList->color(c);} {}
-  }
-  Function {color()} {return_type Fl_Color
-  } {
-    code {return (fileList->color());} {}
-  }
-  decl {int count();} {public
-  }
-  decl {void directory(const char *d);} {public
-  }
-  Function {directory()} {return_type {char *}
-  } {
-    code {return directory_;} {}
-  }
-  decl {void filter(const char *p);} {public
-  }
-  Function {filter()} {return_type {const char *}
-  } {
-    code {return (fileList->filter());} {}
-  }
-  Function {filter_value()} {return_type int
-  } {
-    code {return showChoice->value();} {}
-  }
-  Function {filter_value(int f)} {return_type void
-  } {
-    code {showChoice->value(f);
-showChoiceCB();} {}
-  }
-  Function {hide()} {return_type void
-  } {
-    code {window->hide();} {}
-  }
-  Function {iconsize(uchar s)} {return_type void
-  } {
-    code {fileList->iconsize(s);} {}
-  }
-  Function {iconsize()} {return_type uchar
-  } {
-    code {return (fileList->iconsize());} {}
-  }
-  Function {label(const char *l)} {return_type void
-  } {
-    code {window->label(l);} {}
-  }
-  Function {label()} {return_type {const char *}
-  } {
-    code {return (window->label());} {}
-  }
-  Function {ok_label(const char *l)} {return_type void
-  } {
-    code {okButton->label(l);
-int w=0, h=0;
-okButton->measure_label(w, h);
-okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(),
-                 w + 40, 25);
-okButton->parent()->init_sizes();} {}
-  }
-  Function {ok_label()} {return_type {const char *}
-  } {
-    code {return (okButton->label());} {}
-  }
-  decl {void preview(int e);} {public
-  }
-  decl {int preview() const { return previewButton->value(); }} {public
-  }
-  decl {void showHidden(int e);} {private
-  }
-  decl {void remove_hidden_files();} {private
-  }
-  decl {void rescan();} {public
-  }
-  decl {void rescan_keep_filename();} {public
-  }
-  decl {void show();} {public
-  }
-  Function {shown()} {return_type int
-  } {
-    code {return window->shown();} {}
-  }
-  Function {textcolor(Fl_Color c)} {return_type void
-  } {
-    code {fileList->textcolor(c);} {}
-  }
-  Function {textcolor()} {return_type Fl_Color
-  } {
-    code {return (fileList->textcolor());} {}
-  }
-  Function {textfont(Fl_Font f)} {return_type void
-  } {
-    code {fileList->textfont(f);} {}
-  }
-  Function {textfont()} {selected return_type Fl_Font
-  } {
-    code {return (fileList->textfont());} {}
-  }
-  Function {textsize(Fl_Fontsize s)} {return_type void
-  } {
-    code {fileList->textsize(s);} {}
-  }
-  Function {textsize()} {return_type Fl_Fontsize
-  } {
-    code {return (fileList->textsize());} {}
-  }
-  Function {type(int t)} {return_type void
-  } {
-    code {type_ = t;
-if (t & MULTI)
-  fileList->type(FL_MULTI_BROWSER);
-else
-  fileList->type(FL_HOLD_BROWSER);
-if (t & CREATE)
-  newButton->activate();
-else
-  newButton->deactivate();
-if (t & DIRECTORY)
-  fileList->filetype(Fl_File_Browser::DIRECTORIES);
-else
-  fileList->filetype(Fl_File_Browser::FILES);} {}
-  }
-  Function {type()} {return_type int
-  } {
-    code {return (type_);} {}
-  }
-  Function {user_data() const} {return_type {void *}
-  } {
-    code {return (data_);} {}
-  }
-  Function {user_data(void *d)} {return_type void
-  } {
-    code {data_ = d;} {}
-  }
-  decl {const char *value(int f = 1);} {public
-  }
-  decl {void value(const char *filename);} {public
-  }
-  Function {visible()} {return_type int
-  } {
-    code {return window->visible();} {}
-  }
-  decl {static const char *add_favorites_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *all_files_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *custom_filter_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *existing_file_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *favorites_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *filename_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *filesystems_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *manage_favorites_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *new_directory_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *new_directory_tooltip;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *preview_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *save_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *show_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static const char *hidden_label;} {
-    comment {[standard text may be customized at run-time]} public
-  }
-  decl {static Fl_File_Sort_F *sort;} {
-    comment {the sort function that is used when loading
-the contents of a directory.} public
-  }
-  decl {Fl_Widget* ext_group;} {}
-  Function {add_extra(Fl_Widget* gr)} {open return_type {Fl_Widget*}
-  } {
-    code {Fl_Widget* ret=ext_group;} {}
-    codeblock {if (gr==ext_group)} {open
-    } {
-      code {return ret;} {}
-    }
-    codeblock {if (ext_group)} {open
-    } {
-      code {int sh=ext_group->h()+4;
-Fl_Widget* svres=window->resizable();
-window->resizable(NULL);
-window->size(window->w(),window->h()-sh);
-window->remove(ext_group);
-ext_group=NULL;
-window->resizable(svres);} {}
-    }
-    codeblock {if (gr)} {open
-    } {
-      code {int nh=window->h()+gr->h()+4;
-Fl_Widget* svres=window->resizable();
-window->resizable(NULL);
-window->size(window->w(),nh);
-gr->position(2,okButton->y()+okButton->h()+2);
-window->add(gr);
-ext_group=gr;
-window->resizable(svres);} {}
-    }
-    code {return ret;} {}
-  }
-} 
-
-decl {FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname,int relative=0);} {public
-} 
-
-decl {FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname,int relative=0);} {public
-} 
-
-decl {FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*));} {public
-} 
-
-decl {FL_EXPORT void fl_file_chooser_ok_label(const char*l);} {public
-} 
-
-comment {
-//
-// End of "$Id: Fl_File_Chooser.fl 8786 2011-06-07 11:41:36Z manolo $".
-//} {in_source in_header
-} 
diff --git a/common/fltk/src/Fl_File_Chooser2.cxx b/common/fltk/src/Fl_File_Chooser2.cxx
deleted file mode 100644
index 861f739..0000000
--- a/common/fltk/src/Fl_File_Chooser2.cxx
+++ /dev/null
@@ -1,1696 +0,0 @@
-//
-// "$Id: Fl_File_Chooser2.cxx 8785 2011-06-06 16:11:22Z manolo $"
-//
-// More Fl_File_Chooser routines.
-//
-// Copyright 1999-2011 by Michael Sweet.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// fabien: ATTENTION: Only Out Of Source Gen. because cxx/H files are autogenerated by fluid.
-/** \defgroup group_comdlg Common Dialogs classes and functions
-    @{
-*/
-/** \class Fl_File_Chooser
-  The Fl_File_Chooser widget displays a standard file selection
-  dialog that supports various selection modes.
-  
-  \image html Fl_File_Chooser.jpg 
-  \image latex  Fl_File_Chooser.jpg "Fl_File_Chooser" width=12cm
-  
-  The Fl_File_Chooser class also exports several static values
-  that may be used to localize or customize the appearance of all file chooser
-  dialogs:
-  
-  <CENTER><TABLE BORDER="1">
-  <TR>
-  	<TH>Member</TH>
-  	<TH>Default value</TH>
-  </TR>
-  <TR>
-  	<TD>add_favorites_label</TD>
-  	<TD>"Add to Favorites"</TD>
-  </TR>
-  <TR>
-  	<TD>all_files_label</TD>
-  	<TD>"All Files (*)"</TD>
-  </TR>
-  <TR>
-  	<TD>custom_filter_label</TD>
-  	<TD>"Custom Filter"</TD>
-  </TR>
-  <TR>
-  	<TD>existing_file_label</TD>
-  	<TD>"Please choose an existing file!"</TD>
-  </TR>
-  <TR>
-  	<TD>favorites_label</TD>
-  	<TD>"Favorites"</TD>
-  </TR>
-  <TR>
-  	<TD>filename_label</TD>
-  	<TD>"Filename:"</TD>
-  </TR>
-  <TR>
-  	<TD>filesystems_label</TD>
-  	<TD>"My Computer" (WIN32)<BR>
-  	"File Systems" (all others)</TD>
-  </TR>
- <TR>
-	<TD>hidden_label</TD>
-	<TD>"Show hidden files:"</TD>
- </TR>
- <TR>
-  	<TD>manage_favorites_label</TD>
-  	<TD>"Manage Favorites"</TD>
-  </TR>
-  <TR>
-  	<TD>new_directory_label</TD>
-  	<TD>"New Directory?"</TD>
-  </TR>
-  <TR>
-  	<TD>new_directory_tooltip</TD>
-  	<TD>"Create a new directory."</TD>
-  </TR>
-  <TR>
-  	<TD>preview_label</TD>
-  	<TD>"Preview"</TD>
-  </TR>
-  <TR>
-  	<TD>save_label</TD>
-  	<TD>"Save"</TD>
-  </TR>
-  <TR>
-  	<TD>show_label</TD>
-  	<TD>"Show:"</TD>
-  </TR>
- <TR>
-  	<TD>sort</TD>
-  	<TD>fl_numericsort</TD>
-  </TR>
-  </TABLE></CENTER>
-
-  The Fl_File_Chooser::sort member specifies the sort function that is
-  used when loading the contents of a directory and can be customized
-  at run-time.
-
-  The Fl_File_Chooser class also exports the Fl_File_Chooser::newButton
-  and Fl_File_Chooser::previewButton widgets so that application developers
-  can control their appearance and use.  For more complex customization,
-  consider copying the FLTK file chooser code and changing it accordingly.
-*/
-/** @} */
-
-/** \fn Fl_File_Chooser::Fl_File_Chooser(const char *pathname, const char *pattern, int type, const char *title)
-  The constructor creates the Fl_File_Chooser dialog shown.
-  The pathname argument can be a directory name or a
-  complete file name (in which case the corresponding file is highlighted
-  in the list and in the filename input field.)
-  
-  The pattern argument can be a NULL
-  string or "*" to list all files, or it can be a
-  series of descriptions and filter strings separated by tab
-  characters (\\t). The format of filters is either
-  "Description text (patterns)" or just "patterns". A file chooser
-  that provides filters for HTML and image files might look like:
-  
-  \code
-  "HTML Files (*.html)\tImage Files (*.{bmp,gif,jpg,png})"
-  \endcode
-  
-  The file chooser will automatically add the "All Files (*)"
-  pattern to the end of the string you pass if you do not provide
-  one. The first filter in the string is the default filter.
-  
-  See the FLTK documentation on fl_filename_match()
-  for the kinds of pattern strings that are supported.
-  
-  The type argument can be one of the following:
-  
-  \li \c SINGLE - allows the user to select a single, existing file.
-  \li \c MULTI - allows the user to select one or more existing files.
-  \li \c CREATE - allows the user to select a single, existing file or
-         specify a new filename.
-  \li \c DIRECTORY - allows the user to select a single, existing directory.
-  
-  The title argument is used to set the title bar text for the
-  Fl_File_Chooser window.
-*/
-
-/** \var Fl_File_Chooser::newButton
-  The "new directory" button is exported so that application developers
-  can control the appearance and use.
-*/
-
-/** \var Fl_File_Chooser::previewButton
-  The "preview" button is exported so that application developers can
-  control the appearance and use.
-*/
-
-/** \fn Fl_File_Chooser::~Fl_File_Chooser()
-  Destroys the widget and frees all memory used by it.*/
-
-/** \fn void Fl_File_Chooser::color(Fl_Color c)
-  Sets the background color of the Fl_File_Browser list.*/
-
-/** \fn Fl_Color Fl_File_Chooser::color()
-  Gets the background color of the Fl_File_Browser list.*/
-
-/** \fn int Fl_File_Chooser::count()
-  Returns the number of selected files.*/
-
-/** \fn void Fl_File_Chooser::directory(const char *pathname)
-  Sets the current directory.*/
-
-/** \fn const char *Fl_File_Chooser::directory()
-  Gets the current directory.*/
-
-/** \fn void Fl_File_Chooser::filter(const char *pattern)
-  Sets or gets the current filename filter patterns. The filter
-  patterns use fl_filename_match().
-  Multiple patterns can be used by separating them with tabs, like
-  <tt>"*.jpg\t*.png\t*.gif\t*"</tt>. In addition, you can provide
-  human-readable labels with the patterns inside parenthesis, like
-  <tt>"JPEG Files (*.jpg)\tPNG Files (*.png)\tGIF Files (*.gif)\tAll Files (*)"
-  </tt>.
-
-  Use filter(NULL) to show all files.
-*/
-
-/** \fn const char *Fl_File_Chooser::filter()
-  See void filter(const char *pattern)*/
-
-/** \fn void Fl_File_Chooser::filter_value(int f)
-  Sets the current filename filter selection.*/
-
-/** \fn int Fl_File_Chooser::filter_value()
-  Gets the current filename filter selection.*/
-
-/** \fn void Fl_File_Chooser::hide()
-  Hides the Fl_File_Chooser window.*/
-
-/** \fn void Fl_File_Chooser::iconsize(uchar s)
-  Sets the size of the icons in the Fl_File_Browser.  By
-  default the icon size is set to 1.5 times the textsize().
-*/
-
-/** \fn uchar Fl_File_Chooser::iconsize()
-  Gets the size of the icons in the Fl_File_Browser.  By
-  default the icon size is set to 1.5 times the textsize().
-*/
-
-/** \fn void Fl_File_Chooser::label(const char *l)
-  Sets the title bar text for the Fl_File_Chooser.*/
-
-/** \fn const char *Fl_File_Chooser::label()
-  Gets the title bar text for the Fl_File_Chooser.*/
-
-/** \fn void Fl_File_Chooser::ok_label(const char *l)
-  Sets the label for the "ok" button in the Fl_File_Chooser.
-*/
-
-/** \fn const char *Fl_File_Chooser::ok_label()
-  Gets the label for the "ok" button in the Fl_File_Chooser.
-*/
-
-/** \fn int Fl_File_Chooser::preview() const
-   Returns the current state of the preview box. */
-
-/** \fn void Fl_File_Chooser::rescan()
-  Reloads the current directory in the Fl_File_Browser.*/
-
-/** \fn void Fl_File_Chooser::show()
-  Shows the Fl_File_Chooser window.*/
-
-/** \fn void Fl_File_Chooser::textcolor(Fl_Color c)
-  Sets the current Fl_File_Browser text color.*/
-
-/** \fn Fl_Color Fl_File_Chooser::textcolor()
-  Gets the current Fl_File_Browser text color.*/
-
-/** \fn void Fl_File_Chooser::textfont(Fl_Font f)
-  Sets the current Fl_File_Browser text font.*/
-
-/** \fn Fl_Font Fl_File_Chooser::textfont()
-  Gets the current Fl_File_Browser text font.*/
-
-/** \fn void Fl_File_Chooser::textsize(Fl_Fontsize s)
-  Sets the current Fl_File_Browser text size.*/
-
-/** \fn Fl_Fontsize Fl_File_Chooser::textsize()
-  Gets the current Fl_File_Browser text size.*/
-
-/** \fn void Fl_File_Chooser::type(int t)
-  Sets the current type of Fl_File_Chooser.*/
-
-/** \fn int Fl_File_Chooser::type()
-  Gets the current type of Fl_File_Chooser.*/
-
-/** \fn void Fl_File_Chooser::value(const char *pathname)
-  Sets the current value of the selected file.
-*/
-
-/** \fn const char *Fl_File_Chooser::value(int f)
- Gets the current value of the selected file(s).
- \p f is a \c 1-based index into a list of
- file names. The number of selected files is returned by
- Fl_File_Chooser::count().
- 
- This sample code loops through all selected files:
- \code
- // Get list of filenames user selected from a MULTI chooser
- for ( int t=1; t<=chooser->count(); t++ ) {
- const char *filename = chooser->value(t);
- ...
- }
- \endcode
- */
-
-/** \fn int Fl_File_Chooser::visible()
-  Returns 1 if the Fl_File_Chooser window is visible.*/
-
-/** \fn Fl_Widget* Fl_File_Chooser::add_extra(Fl_Widget*)
-  Adds extra widget at the bottom of Fl_File_Chooser window.
-  Returns pointer for previous extra widget or NULL if not set previously.
-  If argument is NULL only remove previous extra widget.
-
-  \note Fl_File_Chooser does \b not delete extra widget in destructor!
-     To prevent memory leakage, don't forget to delete unused extra widgets
-*/
-  /** \fn int Fl_File_Chooser::shown()
-    Returns non-zero if the file chooser main window show() has been called (but not hide()
-    see Fl_Window::shown()
-  */
-
-  /** \fn void Fl_File_Chooser::callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0)
-    Sets the file chooser callback cb and associated data d */
-
-  /** \fn void Fl_File_Chooser::user_data(void *d)
-    Sets the file chooser user data d */
-
-  /** \fn void * Fl_File_Chooser::user_data() const
-    Gets the file chooser user data d */
-
-  /** \fn Fl_File_Browser* Fl_File_Chooser::browser()
-   returns a pointer to the underlying Fl_File_Browser object */
-// *** END OF OUT OF SOURCE DOC ***
-
-// Contents:
-//
-//   Fl_File_Chooser::count()             - Return the number of selected files.
-//   Fl_File_Chooser::directory()         - Set the directory in the file chooser.
-//   Fl_File_Chooser::filter()            - Set the filter(s) for the chooser.
-//   Fl_File_Chooser::newdir()            - Make a new directory.
-//   Fl_File_Chooser::value()             - Return a selected filename.
-//   Fl_File_Chooser::rescan()            - Rescan the current directory.
-//   Fl_File_Chooser::favoritesButtonCB() - Handle favorites selections.
-//   Fl_File_Chooser::fileListCB()        - Handle clicks (and double-clicks)
-//                                          in the Fl_File_Browser.
-//   Fl_File_Chooser::fileNameCB()        - Handle text entry in the FileBrowser.
-//   Fl_File_Chooser::showChoiceCB()      - Handle show selections.
-//   compare_dirnames()                   - Compare two directory names.
-//   quote_pathname()                     - Quote a pathname for a menu.
-//   unquote_pathname()                   - Unquote a pathname from a menu.
-//
-//   Fl_File_Chooser::add_extra()         - add extra widget at the bottom, return pointer 
-//                                          to previous extra widget or NULL if none,
-//                                          If argument is NULL extra widget removed.
-//                                          NOTE! file chooser does't delete extra widget in 
-//                                          destructor! To prevent memory leakage don't forget
-//					    delete unused extra widgets by yourself.
-//
-
-//
-// Include necessary headers.
-//
-
-#include <FL/Fl_File_Chooser.H>
-#include <FL/filename.H>
-#include <FL/fl_ask.H>
-#include <FL/x.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/fl_draw.H>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#if defined(WIN32) && ! defined (__CYGWIN__)
-#  include <direct.h>
-#  include <io.h>
-// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
-// on Windows, which is supposed to be POSIX compliant...
-#  define access _access
-#  define mkdir _mkdir
-// Apparently Borland C++ defines DIRECTORY in <direct.h>, which
-// interfers with the Fl_File_Icon enumeration of the same name.
-#  ifdef DIRECTORY
-#    undef DIRECTORY
-#  endif // DIRECTORY
-#else
-#  include <unistd.h>
-#  include <pwd.h>
-#endif /* WIN32 */
-
-
-//
-// File chooser label strings and sort function...
-//
-
-Fl_Preferences	Fl_File_Chooser::prefs_(Fl_Preferences::USER, "fltk.org", "filechooser");
-
-const char	*Fl_File_Chooser::add_favorites_label = "Add to Favorites";
-const char	*Fl_File_Chooser::all_files_label = "All Files (*)";
-const char	*Fl_File_Chooser::custom_filter_label = "Custom Filter";
-const char	*Fl_File_Chooser::existing_file_label = "Please choose an existing file!";
-const char	*Fl_File_Chooser::favorites_label = "Favorites";
-const char	*Fl_File_Chooser::filename_label = "Filename:";
-#ifdef WIN32
-const char	*Fl_File_Chooser::filesystems_label = "My Computer";
-#else
-const char	*Fl_File_Chooser::filesystems_label = "File Systems";
-#endif // WIN32
-const char	*Fl_File_Chooser::manage_favorites_label = "Manage Favorites";
-const char	*Fl_File_Chooser::new_directory_label = "New Directory?";
-const char	*Fl_File_Chooser::new_directory_tooltip = "Create a new directory.";
-const char	*Fl_File_Chooser::preview_label = "Preview";
-const char	*Fl_File_Chooser::save_label = "Save";
-const char	*Fl_File_Chooser::show_label = "Show:";
-const char      *Fl_File_Chooser::hidden_label = "Show hidden files";
-Fl_File_Sort_F	*Fl_File_Chooser::sort = fl_numericsort;
-
-
-//
-// Local functions...
-//
-
-static int	compare_dirnames(const char *a, const char *b);
-static void	quote_pathname(char *, const char *, int);
-static void	unquote_pathname(char *, const char *, int);
-
-
-//
-// 'Fl_File_Chooser::count()' - Return the number of selected files.
-//
-
-int				// O - Number of selected files
-Fl_File_Chooser::count() {
-  int		i;		// Looping var
-  int		fcount;		// Number of selected files
-  const char	*filename;	// Filename in input field or list
-
-
-  filename = fileName->value();
-
-  if (!(type_ & MULTI)) {
-    // Check to see if the file name input field is blank...
-    if (!filename || !filename[0]) return 0;
-    else return 1;
-  }
-
-  for (i = 1, fcount = 0; i <= fileList->size(); i ++)
-    if (fileList->selected(i)) {
-      // See if this file is a directory...
-      // matt: why would we do that? It is perfectly legal to select multiple
-      // directories in a DIR chooser. They are visually selected and value(i)
-      // returns all of them as expected
-      //filename = (char *)fileList->text(i);
-
-      //if (filename[strlen(filename) - 1] != '/')
-	fcount ++;
-    }
-
-  if (fcount) return fcount;
-  else if (!filename || !filename[0]) return 0;
-  else return 1;
-}
-
-
-//
-// 'Fl_File_Chooser::directory()' - Set the directory in the file chooser.
-//
-
-void
-Fl_File_Chooser::directory(const char *d)// I - Directory to change to
-{
-  char	*dirptr;			// Pointer into directory
-
-
-//  printf("Fl_File_Chooser::directory(\"%s\")\n", d == NULL ? "(null)" : d);
-
-  // NULL == current directory
-  if (d == NULL)
-    d = ".";
-
-#ifdef WIN32
-  // See if the filename contains backslashes...
-  char	*slash;				// Pointer to slashes
-  char	fixpath[FL_PATH_MAX];			// Path with slashes converted
-  if (strchr(d, '\\')) {
-    // Convert backslashes to slashes...
-    strlcpy(fixpath, d, sizeof(fixpath));
-
-    for (slash = strchr(fixpath, '\\'); slash; slash = strchr(slash + 1, '\\'))
-      *slash = '/';
-
-    d = fixpath;
-  }
-#endif // WIN32
-
-  if (d[0] != '\0')
-  {
-    // Make the directory absolute...
-#if (defined(WIN32) && ! defined(__CYGWIN__))|| defined(__EMX__)
-    if (d[0] != '/' && d[0] != '\\' && d[1] != ':')
-#else
-    if (d[0] != '/' && d[0] != '\\')
-#endif /* WIN32 || __EMX__ */
-      fl_filename_absolute(directory_, d);
-    else
-      strlcpy(directory_, d, sizeof(directory_));
-
-    // Strip any trailing slash...
-    dirptr = directory_ + strlen(directory_) - 1;
-    if ((*dirptr == '/' || *dirptr == '\\') && dirptr > directory_)
-      *dirptr = '\0';
-
-    // See if we have a trailing .. or . in the filename...
-    dirptr = directory_ + strlen(directory_) - 3;
-    if (dirptr >= directory_ && strcmp(dirptr, "/..") == 0) {
-      // Yes, we have "..", so strip the trailing path...
-      *dirptr = '\0';
-      while (dirptr > directory_) {
-        if (*dirptr == '/') break;
-	dirptr --;
-      }
-
-      if (dirptr >= directory_ && *dirptr == '/')
-        *dirptr = '\0';
-    } else if ((dirptr + 1) >= directory_ && strcmp(dirptr + 1, "/.") == 0) {
-      // Strip trailing "."...
-      dirptr[1] = '\0';
-    }
-  }
-  else
-    directory_[0] = '\0';
-
-  if (shown()) {
-    // Rescan the directory...
-    rescan();
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::favoritesButtonCB()' - Handle favorites selections.
-//
-
-void
-Fl_File_Chooser::favoritesButtonCB()
-{
-  int		v;			// Current selection
-  char		pathname[FL_PATH_MAX],		// Pathname
-		menuname[FL_PATH_MAX];		// Menu name
-
-
-  v = favoritesButton->value();
-
-  if (!v) {
-    // Add current directory to favorites...
-    if (getenv("HOME")) v = favoritesButton->size() - 5;
-    else v = favoritesButton->size() - 4;
-
-    sprintf(menuname, "favorite%02d", v);
-
-    prefs_.set(menuname, directory_);
-    prefs_.flush();
-
-    quote_pathname(menuname, directory_, sizeof(menuname));
-    favoritesButton->add(menuname);
-
-    if (favoritesButton->size() > 104) {
-      ((Fl_Menu_Item *)favoritesButton->menu())[0].deactivate();
-    }
-  } else if (v == 1) {
-    // Manage favorites...
-    favoritesCB(0);
-  } else if (v == 2) {
-    // Filesystems/My Computer
-    directory("");
-  } else {
-    unquote_pathname(pathname, favoritesButton->text(v), sizeof(pathname));
-    directory(pathname);
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::favoritesCB()' - Handle favorites dialog.
-//
-
-void
-Fl_File_Chooser::favoritesCB(Fl_Widget *w)
-					// I - Widget
-{
-  int		i;			// Looping var
-  char		name[32],		// Preference name
-		pathname[1024];		// Directory in list
-
-
-  if (!w) {
-    // Load the favorites list...
-    favList->clear();
-    favList->deselect();
-
-    for (i = 0; i < 100; i ++) {
-      // Get favorite directory 0 to 99...
-      sprintf(name, "favorite%02d", i);
-
-      prefs_.get(name, pathname, "", sizeof(pathname));
-
-      // Stop on the first empty favorite...
-      if (!pathname[0]) break;
-
-      // Add the favorite to the list...
-      favList->add(pathname,
-                   Fl_File_Icon::find(pathname, Fl_File_Icon::DIRECTORY));
-    }
-
-    favUpButton->deactivate();
-    favDeleteButton->deactivate();
-    favDownButton->deactivate();
-    favOkButton->deactivate();
-
-    favWindow->hotspot(favList);
-    favWindow->show();
-  } else if (w == favList) {
-    i = favList->value();
-    if (i) {
-      if (i > 1) favUpButton->activate();
-      else favUpButton->deactivate();
-
-      favDeleteButton->activate();
-
-      if (i < favList->size()) favDownButton->activate();
-      else favDownButton->deactivate();
-    } else {
-      favUpButton->deactivate();
-      favDeleteButton->deactivate();
-      favDownButton->deactivate();
-    }
-  } else if (w == favUpButton) {
-    i = favList->value();
-
-    favList->insert(i - 1, favList->text(i), favList->data(i));
-    favList->remove(i + 1);
-    favList->select(i - 1);
-
-    if (i == 2) favUpButton->deactivate();
-
-    favDownButton->activate();
-
-    favOkButton->activate();
-  } else if (w == favDeleteButton) {
-    i = favList->value();
-
-    favList->remove(i);
-
-    if (i > favList->size()) i --;
-    favList->select(i);
-
-    if (i < favList->size()) favDownButton->activate();
-    else favDownButton->deactivate();
-
-    if (i > 1) favUpButton->activate();
-    else favUpButton->deactivate();
-
-    if (!i) favDeleteButton->deactivate();
-
-    favOkButton->activate();
-  } else if (w == favDownButton) {
-    i = favList->value();
-
-    favList->insert(i + 2, favList->text(i), favList->data(i));
-    favList->remove(i);
-    favList->select(i + 1);
-
-    if ((i + 1) == favList->size()) favDownButton->deactivate();
-
-    favUpButton->activate();
-
-    favOkButton->activate();
-  } else if (w == favOkButton) {
-    // Copy the new list over...
-    for (i = 0; i < favList->size(); i ++) {
-      // Set favorite directory 0 to 99...
-      sprintf(name, "favorite%02d", i);
-
-      prefs_.set(name, favList->text(i + 1));
-    }
-
-    // Clear old entries as necessary...
-    for (; i < 100; i ++) {
-      // Clear favorite directory 0 to 99...
-      sprintf(name, "favorite%02d", i);
-
-      prefs_.get(name, pathname, "", sizeof(pathname));
-
-      if (pathname[0]) prefs_.set(name, "");
-      else break;
-    }
-
-    update_favorites();
-    prefs_.flush();
-
-    favWindow->hide();
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::fileListCB()' - Handle clicks (and double-clicks) in the
-//                                   Fl_File_Browser.
-//
-
-void
-Fl_File_Chooser::fileListCB()
-{
-  char	*filename,			// New filename
-	pathname[FL_PATH_MAX];			// Full pathname to file
-
-
-  filename = (char *)fileList->text(fileList->value());
-  if (!filename)
-    return;
-
-  if (!directory_[0]) {
-    strlcpy(pathname, filename, sizeof(pathname));
-  } else if (strcmp(directory_, "/") == 0) {
-    snprintf(pathname, sizeof(pathname), "/%s", filename);
-  } else {
-    snprintf(pathname, sizeof(pathname), "%s/%s", directory_, filename);
-  }
-
-  if (Fl::event_clicks()) {
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-    if ((strlen(pathname) == 2 && pathname[1] == ':') ||
-        _fl_filename_isdir_quick(pathname))
-#else
-    if (_fl_filename_isdir_quick(pathname))
-#endif /* WIN32 || __EMX__ */
-    {
-      // Change directories...
-      directory(pathname);
-
-      // Reset the click count so that a click in the same spot won't
-      // be treated as a triple-click.  We use a value of -1 because
-      // the next click will increment click count to 0, which is what
-      // we really want...
-      Fl::event_clicks(-1);
-    }
-    else
-    {
-      // Hide the window - picked the file...
-      window->hide();
-      if (callback_) (*callback_)(this, data_);
-    }
-  }
-  else
-  {
-    // Check if the user clicks on a directory when picking files;
-    // if so, make sure only that item is selected...
-    filename = pathname + strlen(pathname) - 1;
-
-    if ((type_ & MULTI) && !(type_ & DIRECTORY)) {
-      if (*filename == '/') {
-	// Clicked on a directory, deselect everything else...
-	int i = fileList->value();
-	fileList->deselect();
-	fileList->select(i);
-      } else {
-        // Clicked on a file - see if there are other directories selected...
-        int i;
-	const char *temp;
-	for (i = 1; i <= fileList->size(); i ++) {
-	  if (i != fileList->value() && fileList->selected(i)) {
-	    temp = fileList->text(i);
-	    temp += strlen(temp) - 1;
-	    if (*temp == '/') break;	// Yes, selected directory
-	  }
-	}
-
-        if (i <= fileList->size()) {
-	  i = fileList->value();
-	  fileList->deselect();
-	  fileList->select(i);
-	}
-      }
-    }
-    // Strip any trailing slash from the directory name...
-    if (*filename == '/') *filename = '\0';
-
-//    puts("Setting fileName from fileListCB...");
-    fileName->value(pathname);
-
-    // Update the preview box...
-    Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-    Fl::add_timeout(1.0, (Fl_Timeout_Handler)previewCB, this);
-
-    // Do any callback that is registered...
-    if (callback_) (*callback_)(this, data_);
-
-    // Activate the OK button as needed...
-    if (!_fl_filename_isdir_quick(pathname) || (type_ & DIRECTORY))
-      okButton->activate();
-    else
-      okButton->deactivate();
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::fileNameCB()' - Handle text entry in the FileBrowser.
-//
-
-void
-Fl_File_Chooser::fileNameCB()
-{
-  char		*filename,	// New filename
-		*slash,		// Pointer to trailing slash
-		pathname[FL_PATH_MAX],	// Full pathname to file
-		matchname[FL_PATH_MAX];	// Matching filename
-  int		i,		// Looping var
-		min_match,	// Minimum number of matching chars
-		max_match,	// Maximum number of matching chars
-		num_files,	// Number of files in directory
-		first_line;	// First matching line
-  const char	*file;		// File from directory
-
-//  puts("fileNameCB()");
-//  printf("Event: %s\n", fl_eventnames[Fl::event()]);
-
-  // Get the filename from the text field...
-  filename = (char *)fileName->value();
-
-  if (!filename || !filename[0]) {
-    okButton->deactivate();
-    return;
-  }
-
-  // Expand ~ and $ variables as needed...
-  if (strchr(filename, '~') || strchr(filename, '$')) {
-    fl_filename_expand(pathname, sizeof(pathname), filename);
-    filename = pathname;
-    value(pathname);
-  }
-
-  // Make sure we have an absolute path...
-#if (defined(WIN32) && !defined(__CYGWIN__)) || defined(__EMX__)
-  if (directory_[0] != '\0' && filename[0] != '/' &&
-      filename[0] != '\\' &&
-      !(isalpha(filename[0] & 255) && (!filename[1] || filename[1] == ':'))) {
-#else
-  if (directory_[0] != '\0' && filename[0] != '/') {
-#endif /* WIN32 || __EMX__ */
-    fl_filename_absolute(pathname, sizeof(pathname), filename);
-    value(pathname);
-    fileName->mark(fileName->position()); // no selection after expansion
-  } else if (filename != pathname) {
-    // Finally, make sure that we have a writable copy...
-    strlcpy(pathname, filename, sizeof(pathname));
-  }
-
-  filename = pathname;
-
-  // Now process things according to the key pressed...
-  if (Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter) {
-    // Enter pressed - select or change directory...
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-    if ((isalpha(pathname[0] & 255) && pathname[1] == ':' && !pathname[2]) ||
-        (_fl_filename_isdir_quick(pathname) &&
-	 compare_dirnames(pathname, directory_))) {
-#else
-    if (_fl_filename_isdir_quick(pathname) &&
-	compare_dirnames(pathname, directory_)) {
-#endif /* WIN32 || __EMX__ */
-      directory(pathname);
-    } else if ((type_ & CREATE) || access(pathname, 0) == 0) {
-      if (!_fl_filename_isdir_quick(pathname) || (type_ & DIRECTORY)) {
-	// Update the preview box...
-	update_preview();
-
-	// Do any callback that is registered...
-	if (callback_) (*callback_)(this, data_);
-
-	// Hide the window to signal things are done...
-	window->hide();
-      }
-    } else {
-      // File doesn't exist, so beep at and alert the user...
-      fl_alert("%s",existing_file_label);
-    }
-  }
-  else if (Fl::event_key() != FL_Delete &&
-           Fl::event_key() != FL_BackSpace) {
-    // Check to see if the user has entered a directory...
-    if ((slash = strrchr(pathname, '/')) == NULL)
-      slash = strrchr(pathname, '\\');
-
-    if (!slash) return;
-
-    // Yes, change directories if necessary...
-    *slash++ = '\0';
-    filename = slash;
-
-#if defined(WIN32) || defined(__EMX__)
-    if (strcasecmp(pathname, directory_) &&
-        (pathname[0] || strcasecmp("/", directory_))) {
-#else
-    if (strcmp(pathname, directory_) &&
-        (pathname[0] || strcasecmp("/", directory_))) {
-#endif // WIN32 || __EMX__
-      int p = fileName->position();
-      int m = fileName->mark();
-
-      directory(pathname);
-
-      if (filename[0]) {
-	char tempname[FL_PATH_MAX];
-
-	snprintf(tempname, sizeof(tempname), "%s/%s", directory_, filename);
-	fileName->value(tempname);
-	strlcpy(pathname, tempname, sizeof(pathname));
-      }
-
-      fileName->position(p, m);
-    }
-
-    // Other key pressed - do filename completion as possible...
-    num_files  = fileList->size();
-    min_match  = strlen(filename);
-    max_match  = min_match + 1;
-    first_line = 0;
-
-    for (i = 1; i <= num_files && max_match > min_match; i ++) {
-      file = fileList->text(i);
-
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-      if (strncasecmp(filename, file, min_match) == 0) {
-#else
-      if (strncmp(filename, file, min_match) == 0) {
-#endif // WIN32 || __EMX__
-        // OK, this one matches; check against the previous match
-	if (!first_line) {
-	  // First match; copy stuff over...
-	  strlcpy(matchname, file, sizeof(matchname));
-	  max_match = strlen(matchname);
-
-          // Strip trailing /, if any...
-	  if (matchname[max_match - 1] == '/') {
-	    max_match --;
-	    matchname[max_match] = '\0';
-	  }
-
-	  // And then make sure that the item is visible
-          fileList->topline(i);
-	  first_line = i;
-	} else {
-	  // Succeeding match; compare to find maximum string match...
-	  while (max_match > min_match)
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-	    if (strncasecmp(file, matchname, max_match) == 0)
-#else
-	    if (strncmp(file, matchname, max_match) == 0)
-#endif // WIN32 || __EMX__
-	      break;
-	    else
-	      max_match --;
-
-          // Truncate the string as needed...
-          matchname[max_match] = '\0';
-	}
-      }
-    }
-
-    // If we have any matches, add them to the input field...
-    if (first_line > 0 && min_match == max_match &&
-        max_match == (int)strlen(fileList->text(first_line))) {
-      // This is the only possible match...
-      fileList->deselect(0);
-      fileList->select(first_line);
-      fileList->redraw();
-    } else if (max_match > min_match && first_line) {
-      // Add the matching portion...
-      fileName->replace(filename - pathname, filename - pathname + min_match,
-                        matchname);
-
-      // Highlight it with the cursor at the end of the selection so
-      // s/he can press the right arrow to accept the selection
-      // (Tab and End also do this for both cases.)
-      fileName->position(filename - pathname + max_match,
-	                 filename - pathname + min_match);
-    } else if (max_match == 0) {
-      fileList->deselect(0);
-      fileList->redraw();
-    }
-
-    // See if we need to enable the OK button...
-    if (((type_ & CREATE) || !access(fileName->value(), 0)) &&
-        (!fl_filename_isdir(fileName->value()) || (type_ & DIRECTORY))) {
-      okButton->activate();
-    } else {
-      okButton->deactivate();
-    }
-  } else {
-    // FL_Delete or FL_BackSpace
-    fileList->deselect(0);
-    fileList->redraw();
-    if (((type_ & CREATE) || !access(fileName->value(), 0)) &&
-        (!fl_filename_isdir(fileName->value()) || (type_ & DIRECTORY))) {
-      okButton->activate();
-    } else {
-      okButton->deactivate();
-    }
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::filter()' - Set the filter(s) for the chooser.
-//
-
-void
-Fl_File_Chooser::filter(const char *p)		// I - Pattern(s)
-{
-  char		*copyp,				// Copy of pattern
-		*start,				// Start of pattern
-		*end;				// End of pattern
-  int		allfiles;			// Do we have a "*" pattern?
-  char		temp[FL_PATH_MAX];			// Temporary pattern string
-
-
-  // Make sure we have a pattern...
-  if (!p || !*p) p = "*";
-
-  // Copy the pattern string...
-  copyp = strdup(p);
-
-  // Separate the pattern string as necessary...
-  showChoice->clear();
-
-  for (start = copyp, allfiles = 0; start && *start; start = end) {
-    end = strchr(start, '\t');
-    if (end) *end++ = '\0';
-
-    if (strcmp(start, "*") == 0) {
-      showChoice->add(all_files_label);
-      allfiles = 1;
-    } else {
-      quote_pathname(temp, start, sizeof(temp));
-      showChoice->add(temp);
-      if (strstr(start, "(*)") != NULL) allfiles = 1;
-    }
-  }
-
-  free(copyp);
-
-  if (!allfiles) showChoice->add(all_files_label);
-
-  showChoice->add(custom_filter_label);
-  
-  showChoice->value(0);
-  showChoiceCB();
-}
-
-
-//
-// 'Fl_File_Chooser::newdir()' - Make a new directory.
-//
-
-void
-Fl_File_Chooser::newdir()
-{
-  const char	*dir;		// New directory name
-  char		pathname[FL_PATH_MAX];	// Full path of directory
-
-
-  // Get a directory name from the user
-  if ((dir = fl_input("%s", NULL, new_directory_label)) == NULL)
-    return;
-
-  // Make it relative to the current directory as needed...
-#if (defined(WIN32) && ! defined (__CYGWIN__)) || defined(__EMX__)
-  if (dir[0] != '/' && dir[0] != '\\' && dir[1] != ':')
-#else
-  if (dir[0] != '/' && dir[0] != '\\')
-#endif /* WIN32 || __EMX__ */
-    snprintf(pathname, sizeof(pathname), "%s/%s", directory_, dir);
-  else
-    strlcpy(pathname, dir, sizeof(pathname));
-
-  // Create the directory; ignore EEXIST errors...
-#if defined(WIN32) && ! defined (__CYGWIN__)
-  if (mkdir(pathname))
-#else
-  if (mkdir(pathname, 0777))
-#endif /* WIN32 */
-    if (errno != EEXIST)
-    {
-      fl_alert("%s", strerror(errno));
-      return;
-    }
-
-  // Show the new directory...
-  directory(pathname);
-}
-
-
-
-/** Enable or disable the preview tile. 1 = enable preview, 0 = disable preview. */
-void Fl_File_Chooser::preview(int e)
-{
-  previewButton->value(e);
-  prefs_.set("preview", e);
-  prefs_.flush();
-
-  Fl_Group *p = previewBox->parent();
-  if (e) {
-    int w = p->w() * 2 / 3;
-    fileList->resize(fileList->x(), fileList->y(),
-                     w, fileList->h());
-    previewBox->resize(fileList->x()+w, previewBox->y(),
-                       p->w()-w, previewBox->h());
-    previewBox->show();
-    update_preview();
-  } else {
-    fileList->resize(fileList->x(), fileList->y(),
-                     p->w(), fileList->h());
-    previewBox->resize(p->x()+p->w(), previewBox->y(),
-                       0, previewBox->h());
-    previewBox->hide();
-  }
-  p->init_sizes();
-
-  fileList->parent()->redraw();
-}
-
-
-//
-// 'Fl_File_Chooser::previewCB()' - Timeout handler for the preview box.
-//
-
-void
-Fl_File_Chooser::previewCB(Fl_File_Chooser *fc) {	// I - File chooser
-  fc->update_preview();
-}
-
-
-//
-// 'Fl_File_Chooser::rescan()' - Rescan the current directory.
-//
-
-void
-Fl_File_Chooser::rescan()
-{
-  char	pathname[FL_PATH_MAX];		// New pathname for filename field
-
-
-  // Clear the current filename
-  strlcpy(pathname, directory_, sizeof(pathname));
-  if (pathname[0] && pathname[strlen(pathname) - 1] != '/') {
-    strlcat(pathname, "/", sizeof(pathname));
-  }
-//  puts("Setting fileName in rescan()");
-  fileName->value(pathname);
-
-  if (type_ & DIRECTORY)
-    okButton->activate();
-  else
-    okButton->deactivate();
-
-  // Build the file list...
-  fileList->load(directory_, sort);
-#ifndef WIN32	
-  if (!showHiddenButton->value()) remove_hidden_files();
-#endif
-  // Update the preview box...
-  update_preview();
-}
-
-//
-/**  
-  Rescan the current directory  without clearing the filename, 
-  then select the file if it is in the list
-*/
-void Fl_File_Chooser::rescan_keep_filename()
-{
-  // if no filename was set, this is likely a diretory browser
-  const char *fn = fileName->value();
-  if (!fn || !*fn || fn[strlen(fn) - 1]=='/') {
-    rescan();
-    return;
-  }
-
-  int   i;
-  char	pathname[FL_PATH_MAX];		// New pathname for filename field
-  strlcpy(pathname, fn, sizeof(pathname));
-
-  // Build the file list...
-  fileList->load(directory_, sort);
-#ifndef WIN32	
-  if (!showHiddenButton->value()) remove_hidden_files();
-#endif
-  // Update the preview box...
-  update_preview();
-
-  // and select the chosen file
-  char found = 0;
-  char *slash = strrchr(pathname, '/');
-  if (slash) 
-    slash++;
-  else
-    slash = pathname;
-  for (i = 1; i <= fileList->size(); i ++)
-#if defined(WIN32) || defined(__EMX__)
-    if (strcasecmp(fileList->text(i), slash) == 0) {
-#else
-    if (strcmp(fileList->text(i), slash) == 0) {
-#endif // WIN32 || __EMX__
-      fileList->topline(i);
-      fileList->select(i);
-      found = 1;
-      break;
-    }
-
-  // update OK button activity
-  if (found || type_ & CREATE)
-    okButton->activate();
-  else
-    okButton->deactivate();
-}
-
-
-//
-// 'Fl_File_Chooser::showChoiceCB()' - Handle show selections.
-//
-
-void
-Fl_File_Chooser::showChoiceCB()
-{
-  const char	*item,			// Selected item
-		*patstart;		// Start of pattern
-  char		*patend;		// End of pattern
-  char		temp[FL_PATH_MAX];		// Temporary string for pattern
-
-
-  item = showChoice->text(showChoice->value());
-
-  if (strcmp(item, custom_filter_label) == 0) {
-    if ((item = fl_input("%s", pattern_, custom_filter_label)) != NULL) {
-      strlcpy(pattern_, item, sizeof(pattern_));
-
-      quote_pathname(temp, item, sizeof(temp));
-      showChoice->add(temp);
-      showChoice->value(showChoice->size() - 2);
-    }
-  } else if ((patstart = strchr(item, '(')) == NULL) {
-    strlcpy(pattern_, item, sizeof(pattern_));
-  } else {
-    strlcpy(pattern_, patstart + 1, sizeof(pattern_));
-    if ((patend = strrchr(pattern_, ')')) != NULL) *patend = '\0';
-  }
-
-  fileList->filter(pattern_);
-
-  if (shown()) {
-    // Rescan the directory...
-    rescan_keep_filename();
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::update_favorites()' - Update the favorites menu.
-//
-
-void
-Fl_File_Chooser::update_favorites()
-{
-  int		i;			// Looping var
-  char		pathname[FL_PATH_MAX],		// Pathname
-		menuname[2048];		// Menu name
-  const char	*home;			// Home directory
-
-
-  favoritesButton->clear();
-  favoritesButton->add("bla");
-  favoritesButton->clear();
-  favoritesButton->add(add_favorites_label, FL_ALT + 'a', 0);
-  favoritesButton->add(manage_favorites_label, FL_ALT + 'm', 0, 0, FL_MENU_DIVIDER);
-  favoritesButton->add(filesystems_label, FL_ALT + 'f', 0);
-    
-  if ((home = getenv("HOME")) != NULL) {
-    quote_pathname(menuname, home, sizeof(menuname));
-    favoritesButton->add(menuname, FL_ALT + 'h', 0);
-  }
-
-  for (i = 0; i < 100; i ++) {
-    sprintf(menuname, "favorite%02d", i);
-    prefs_.get(menuname, pathname, "", sizeof(pathname));
-    if (!pathname[0]) break;
-
-    quote_pathname(menuname, pathname, sizeof(menuname));
-
-    if (i < 10) favoritesButton->add(menuname, FL_ALT + '0' + i, 0);
-    else favoritesButton->add(menuname);
-  }
-
-  if (i == 100) ((Fl_Menu_Item *)favoritesButton->menu())[0].deactivate();
-}
-
-
-//
-// 'Fl_File_Chooser::update_preview()' - Update the preview box...
-//
-
-void
-Fl_File_Chooser::update_preview()
-{
-  const char		*filename;	// Current filename
-  const char            *newlabel = 0;  // New label text
-  Fl_Shared_Image	*image = 0,     // New image
-			*oldimage;	// Old image
-  int			pbw, pbh;	// Width and height of preview box
-  int			w, h;		// Width and height of preview image
-  int                   set = 0;        // Set this flag as soon as a decent preview is found
-
-  if (!previewButton->value()) return;
-
-  filename = value();
-  if (filename == NULL) {
-    // no file name at all, so we have an empty preview
-    set = 1;
-  } else if (fl_filename_isdir(filename)) {
-    // filename is a directory, show a folder icon
-    newlabel = "@fileopen";
-    set = 1;
-  } else {
-    struct stat s;
-    if (fl_stat(filename, &s)==0) {
-      if ((s.st_mode&S_IFMT)!=S_IFREG) {
-        // this is no regular file, probably some kind of device
-        newlabel = "@-3refresh"; // a cross
-        set = 1;
-      } else if (s.st_size==0) {
-        // this file is emty
-        newlabel = "<empty file>";
-        set = 1;
-      } else {
-        // if this file is an image, try to load it
-        window->cursor(FL_CURSOR_WAIT);
-        Fl::check();
-        
-        image = Fl_Shared_Image::get(filename);
-        
-        if (image) {
-          window->cursor(FL_CURSOR_DEFAULT);
-          Fl::check();
-          set = 1;
-        }
-      }
-    }
-  }
-
-  oldimage = (Fl_Shared_Image *)previewBox->image();
-
-  if (oldimage) oldimage->release();
-
-  previewBox->image(0);
-
-  if (!set) {
-    FILE	*fp;
-    int		bytes;
-    char	*ptr;
-
-    if (filename) fp = fl_fopen(filename, "rb");
-    else fp = NULL;
-
-    if (fp != NULL) {
-      // Try reading the first 1k of data for a label...
-      bytes = fread(preview_text_, 1, sizeof(preview_text_) - 1, fp);
-      preview_text_[bytes] = '\0';
-      fclose(fp);
-    } else {
-      // Assume we can't read any data...
-      preview_text_[0] = '\0';
-    }
-
-    window->cursor(FL_CURSOR_DEFAULT);
-    Fl::check();
-
-    // Scan the buffer for printable UTF8 chars...
-    for (ptr = preview_text_; *ptr; ptr++) {
-      uchar c = uchar(*ptr);
-      if ( (c&0x80)==0 ) {
-        if (!isprint(c&255) && !isspace(c&255)) break;
-      } else if ( (c&0xe0)==0xc0 ) {
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-      } else if ( (c&0xf0)==0xe0 ) {
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-      } else if ( (c&0xf8)==0xf0 ) {
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-      }
-    } 
-//         *ptr && (isprint(*ptr & 255) || isspace(*ptr & 255));
-//	 ptr ++);
-
-    // Scan the buffer for printable characters in 8 bit
-    if (*ptr || ptr == preview_text_) {
-      for (ptr = preview_text_;
-         *ptr && (isprint(*ptr & 255) || isspace(*ptr & 255));
-	 ptr ++);
-    }
-
-    if (*ptr || ptr == preview_text_) {
-      // Non-printable file, just show a big ?...
-      previewBox->label(filename ? "?" : 0);
-      previewBox->align(FL_ALIGN_CLIP);
-      previewBox->labelsize(75);
-      previewBox->labelfont(FL_HELVETICA);
-    } else {
-      // Show the first 1k of text...
-      int size = previewBox->h() / 20;
-      if (size < 6) size = 6;
-      else if (size > FL_NORMAL_SIZE) size = FL_NORMAL_SIZE;
-
-      previewBox->label(preview_text_);
-      previewBox->align((Fl_Align)(FL_ALIGN_CLIP | FL_ALIGN_INSIDE |
-                                   FL_ALIGN_LEFT | FL_ALIGN_TOP));
-      previewBox->labelsize(size);
-      previewBox->labelfont(FL_COURIER);
-    }
-  } else if (image) {
-    pbw = previewBox->w() - 20;
-    pbh = previewBox->h() - 20;
-
-    if (image->w() > pbw || image->h() > pbh) {
-      w   = pbw;
-      h   = w * image->h() / image->w();
-
-      if (h > pbh) {
-	h = pbh;
-	w = h * image->w() / image->h();
-      }
-
-      oldimage = (Fl_Shared_Image *)image->copy(w, h);
-      previewBox->image((Fl_Image *)oldimage);
-
-      image->release();
-    } else {
-      previewBox->image((Fl_Image *)image);
-    }
-
-    previewBox->align(FL_ALIGN_CLIP);
-    previewBox->label(0);
-  } else if (newlabel) {
-    previewBox->label(newlabel);
-    previewBox->align(FL_ALIGN_CLIP);
-    previewBox->labelsize(newlabel[0]=='@'?75:12);
-    previewBox->labelfont(FL_HELVETICA);
-  }
-
-  previewBox->redraw();
-}
-
-
-//
-// 'Fl_File_Chooser::value()' - Return a selected filename.
-//
-
-const char *			// O - Filename or NULL
-Fl_File_Chooser::value(int f)	// I - File number
-{
-  int		i;		// Looping var
-  int		fcount;		// Number of selected files
-  const char	*name;		// Current filename
-  static char	pathname[FL_PATH_MAX];	// Filename + directory
-
-
-  name = fileName->value();
-
-  if (!(type_ & MULTI)) {
-    // Return the filename in the filename field...
-    if (!name || !name[0]) return NULL;
-    else return name;
-  }
-
-  // Return a filename from the list...
-  for (i = 1, fcount = 0; i <= fileList->size(); i ++)
-    if (fileList->selected(i)) {
-      // See if this file is a selected file/directory...
-      name = fileList->text(i);
-
-      fcount ++;
-
-      if (fcount == f) {
-	if (directory_[0]) {
-	  snprintf(pathname, sizeof(pathname), "%s/%s", directory_, name);
-	} else {
-	  strlcpy(pathname, name, sizeof(pathname));
-	}
-
-	return pathname;
-      }
-    }
-
-  // If nothing is selected, use the filename field...
-  if (!name || !name[0]) return NULL;
-  else return name;
-}
-
-
-//
-// 'Fl_File_Chooser::value()' - Set the current filename.
-//
-
-void
-Fl_File_Chooser::value(const char *filename)
-					// I - Filename + directory
-{
-  int	i,				// Looping var
-  	fcount;				// Number of items in list
-  char	*slash;				// Directory separator
-  char	pathname[FL_PATH_MAX];		// Local copy of filename
-
-
-//  printf("Fl_File_Chooser::value(\"%s\")\n", filename == NULL ? "(null)" : filename);
-
-  // See if the filename is the "My System" directory...
-  if (filename == NULL || !filename[0]) {
-    // Yes, just change the current directory...
-    directory(filename);
-    fileName->value("");
-    okButton->deactivate();
-    return;
-  }
-
-#ifdef WIN32
-  // See if the filename contains backslashes...
-  char	fixpath[FL_PATH_MAX];			// Path with slashes converted
-  if (strchr(filename, '\\')) {
-    // Convert backslashes to slashes...
-    strlcpy(fixpath, filename, sizeof(fixpath));
-
-    for (slash = strchr(fixpath, '\\'); slash; slash = strchr(slash + 1, '\\'))
-      *slash = '/';
-
-    filename = fixpath;
-  }
-#endif // WIN32
-
-  // See if there is a directory in there...
-  fl_filename_absolute(pathname, sizeof(pathname), filename);
-
-  if ((slash = strrchr(pathname, '/')) != NULL) {
-    // Yes, change the display to the directory... 
-    if (!fl_filename_isdir(pathname)) *slash++ = '\0';
-
-    directory(pathname);
-    if (*slash == '/') slash = pathname;
-  } else {
-    directory(".");
-    slash = pathname;
-  }
-
-  // Set the input field to the absolute path...
-  if (slash > pathname) slash[-1] = '/';
-
-  fileName->value(pathname);
-  fileName->position(0, strlen(pathname));
-  okButton->activate();
-
-  // Then find the file in the file list and select it...
-  fcount = fileList->size();
-
-  fileList->deselect(0);
-  fileList->redraw();
-
-  for (i = 1; i <= fcount; i ++)
-#if defined(WIN32) || defined(__EMX__)
-    if (strcasecmp(fileList->text(i), slash) == 0) {
-#else
-    if (strcmp(fileList->text(i), slash) == 0) {
-#endif // WIN32 || __EMX__
-//      printf("Selecting line %d...\n", i);
-      fileList->topline(i);
-      fileList->select(i);
-      break;
-    }
-}
-  
-void Fl_File_Chooser::show()
-{
-  window->hotspot(fileList);
-  window->show();
-  Fl::flush();
-  fl_cursor(FL_CURSOR_WAIT);
-  rescan_keep_filename();
-  fl_cursor(FL_CURSOR_DEFAULT);
-  fileName->take_focus();
-#ifdef WIN32
-  showHiddenButton->hide();
-#endif
-}
-
-void Fl_File_Chooser::showHidden(int value)
-{
-  if (value) {
-    fileList->load(directory());
-  } else {
-    remove_hidden_files();
-    fileList->redraw();
-  }
-}
-  
-void Fl_File_Chooser::remove_hidden_files()
-{
-  int count = fileList->size();
-  for(int num = count; num >= 1; num--) {
-    const char *p = fileList->text(num);
-    if (*p == '.' && strcmp(p, "../") != 0) fileList->remove(num);
-  }
-  fileList->topline(1);
-}
-
-  
-//
-// 'compare_dirnames()' - Compare two directory names.
-//
-
-static int
-compare_dirnames(const char *a, const char *b) {
-  int alen, blen;
-
-  // Get length of each string...
-  alen = strlen(a) - 1;
-  blen = strlen(b) - 1;
-
-  if (alen < 0 || blen < 0) return alen - blen;
-
-  // Check for trailing slashes...
-  if (a[alen] != '/') alen ++;
-  if (b[blen] != '/') blen ++;
-
-  // If the lengths aren't the same, then return the difference...
-  if (alen != blen) return alen - blen;
-
-  // Do a comparison of the first N chars (alen == blen at this point)...
-#ifdef WIN32
-  return strncasecmp(a, b, alen);
-#else
-  return strncmp(a, b, alen);
-#endif // WIN32
-}
-
-
-//
-// 'quote_pathname()' - Quote a pathname for a menu.
-//
-
-static void
-quote_pathname(char       *dst,		// O - Destination string
-               const char *src,		// I - Source string
-	       int        dstsize)	// I - Size of destination string
-{
-  dstsize --;
-
-  while (*src && dstsize > 1) {
-    if (*src == '\\') {
-      // Convert backslash to forward slash...
-      *dst++ = '\\';
-      *dst++ = '/';
-      src ++;
-    } else {
-      if (*src == '/') *dst++ = '\\';
-
-      *dst++ = *src++;
-    }
-  }
-
-  *dst = '\0';
-}
-
-
-//
-// 'unquote_pathname()' - Unquote a pathname from a menu.
-//
-
-static void
-unquote_pathname(char       *dst,	// O - Destination string
-                 const char *src,	// I - Source string
-	         int        dstsize)	// I - Size of destination string
-{
-  dstsize --;
-
-  while (*src && dstsize > 1) {
-    if (*src == '\\') src ++;
-    *dst++ = *src++;
-  }
-
-  *dst = '\0';
-}
-
-
-//
-// End of "$Id: Fl_File_Chooser2.cxx 8785 2011-06-06 16:11:22Z manolo $".
-//
diff --git a/common/fltk/src/Fl_File_Icon.cxx b/common/fltk/src/Fl_File_Icon.cxx
deleted file mode 100644
index 98069dd..0000000
--- a/common/fltk/src/Fl_File_Icon.cxx
+++ /dev/null
@@ -1,492 +0,0 @@
-//
-// "$Id: Fl_File_Icon.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Fl_File_Icon routines.
-//
-// KDE icon code donated by Maarten De Boer.
-//
-// Copyright 1999-2010 by Michael Sweet.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_File_Icon::Fl_File_Icon()       - Create a new file icon.
-//   Fl_File_Icon::~Fl_File_Icon()      - Remove a file icon.
-//   Fl_File_Icon::add()               - Add data to an icon.
-//   Fl_File_Icon::find()              - Find an icon based upon a given file.
-//   Fl_File_Icon::draw()              - Draw an icon.
-//   Fl_File_Icon::label()             - Set the widgets label to an icon.
-//   Fl_File_Icon::labeltype()         - Draw the icon label.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-#  include <io.h>
-#  define F_OK	0
-#else
-#  include <unistd.h>
-#endif /* WIN32 || __EMX__ */
-
-#include <FL/Fl_File_Icon.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-#include <FL/filename.H>
-
-
-//
-// Define missing POSIX/XPG4 macros as needed...
-//
-
-#ifndef S_ISDIR
-#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
-#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
-#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
-#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
-#endif /* !S_ISDIR */
-
-
-//
-// Icon cache...
-//
-
-Fl_File_Icon	*Fl_File_Icon::first_ = (Fl_File_Icon *)0;
-
-
-/**
-  Creates a new Fl_File_Icon with the specified information.
-  \param[in] p filename pattern
-  \param[in] t file type
-  \param[in] nd number of data values
-  \param[in] d data values
-*/
-Fl_File_Icon::Fl_File_Icon(const char *p,	/* I - Filename pattern */
-                	   int        t,	/* I - File type */
-			   int        nd,	/* I - Number of data values */
-			   short      *d)	/* I - Data values */
-{
-  // Initialize the pattern and type...
-  pattern_ = p;
-  type_    = t;
-
-  // Copy icon data as needed...
-  if (nd)
-  {
-    num_data_   = nd;
-    alloc_data_ = nd + 1;
-    data_       = (short *)calloc(sizeof(short), nd + 1);
-    memcpy(data_, d, nd * sizeof(short));
-  }
-  else
-  {
-    num_data_   = 0;
-    alloc_data_ = 0;
-  }
-
-  // And add the icon to the list of icons...
-  next_  = first_;
-  first_ = this;
-}
-
-
-/**
-  The destructor destroys the icon and frees all memory that has been
-  allocated for it.
-*/
-Fl_File_Icon::~Fl_File_Icon() {
-  Fl_File_Icon	*current,	// Current icon in list
-		*prev;		// Previous icon in list
-
-
-  // Find the icon in the list...
-  for (current = first_, prev = (Fl_File_Icon *)0;
-       current != this && current != (Fl_File_Icon *)0;
-       prev = current, current = current->next_);
-
-  // Remove the icon from the list as needed...
-  if (current)
-  {
-    if (prev)
-      prev->next_ = current->next_;
-    else
-      first_ = current->next_;
-  }
-
-  // Free any memory used...
-  if (alloc_data_)
-    free(data_);
-}
-
-
-/**
-  Adds a keyword value to the icon array, returning a pointer to it.
-  \param[in] d data value
-*/
-short *				// O - Pointer to new data value
-Fl_File_Icon::add(short d)	// I - Data to add
-{
-  short	*dptr;			// Pointer to new data value
-
-
-  // Allocate/reallocate memory as needed
-  if ((num_data_ + 1) >= alloc_data_)
-  {
-    alloc_data_ += 128;
-
-    if (alloc_data_ == 128)
-      dptr = (short *)malloc(sizeof(short) * alloc_data_);
-    else
-      dptr = (short *)realloc(data_, sizeof(short) * alloc_data_);
-
-    if (dptr == NULL)
-      return (NULL);
-
-    data_ = dptr;
-  }
-
-  // Store the new data value and return
-  data_[num_data_++] = d;
-  data_[num_data_]   = END;
-
-  return (data_ + num_data_ - 1);
-}
-
-
-/**
-  Finds an icon that matches the given filename and file type.
-  \param[in] filename name of file
-  \param[in] filetype enumerated file type
-  \return matching file icon or NULL
-*/
-Fl_File_Icon *				// O - Matching file icon or NULL
-Fl_File_Icon::find(const char *filename,// I - Name of file */
-                   int        filetype)	// I - Enumerated file type
-{
-  Fl_File_Icon	*current;		// Current file in list
-#ifndef WIN32
-  struct stat	fileinfo;		// Information on file
-#endif // !WIN32
-  const char	*name;			// Base name of filename
-
-
-  // Get file information if needed...
-  if (filetype == ANY)
-  {
-#ifdef WIN32
-    if (filename[strlen(filename) - 1] == '/')
-      filetype = DIRECTORY;
-    else if (fl_filename_isdir(filename))
-      filetype = DIRECTORY;
-    else
-      filetype = PLAIN;
-#else
-    if (!fl_stat(filename, &fileinfo))
-    {
-      if (S_ISDIR(fileinfo.st_mode))
-        filetype = DIRECTORY;
-#  ifdef S_IFIFO
-      else if (S_ISFIFO(fileinfo.st_mode))
-        filetype = FIFO;
-#  endif // S_IFIFO
-#  if defined(S_ICHR) && defined(S_IBLK)
-      else if (S_ISCHR(fileinfo.st_mode) || S_ISBLK(fileinfo.st_mode))
-        filetype = DEVICE;
-#  endif // S_ICHR && S_IBLK
-#  ifdef S_ILNK
-      else if (S_ISLNK(fileinfo.st_mode))
-        filetype = LINK;
-#  endif // S_ILNK
-      else
-        filetype = PLAIN;
-    }
-    else
-      filetype = PLAIN;
-#endif // WIN32
-  }
-
-  // Look at the base name in the filename
-  name = fl_filename_name(filename);
-
-  // Loop through the available file types and return any match that
-  // is found...
-  for (current = first_; current != (Fl_File_Icon *)0; current = current->next_)
-    if ((current->type_ == filetype || current->type_ == ANY) &&
-        (fl_filename_match(filename, current->pattern_) ||
-	 fl_filename_match(name, current->pattern_)))
-      break;
-
-  // Return the match (if any)...
-  return (current);
-}
-
-/**
-  Draws an icon in the indicated area.
-  \param[in] x, y, w, h position and size
-  \param[in] ic icon color
-  \param[in] active status, default is active [non-zero]
-*/
-void
-Fl_File_Icon::draw(int      x,		// I - Upper-lefthand X
-        	   int      y,		// I - Upper-lefthand Y
-		   int      w,		// I - Width of bounding box
-		   int      h,		// I - Height of bounding box
-        	   Fl_Color ic,		// I - Icon color...
-        	   int      active)	// I - Active or inactive?
-{
-  Fl_Color	c,		// Current color
-		oc;		// Outline color
-  short		*d,		// Pointer to data
-		*dend;		// End of data...
-  short		*prim;		// Pointer to start of primitive...
-  double	scale;		// Scale of icon
-
-
-  // Don't try to draw a NULL array!
-  if (num_data_ == 0)
-    return;
-
-  // Setup the transform matrix as needed...
-  scale = w < h ? w : h;
-
-  fl_push_matrix();
-  fl_translate((float)x + 0.5 * ((float)w - scale),
-               (float)y + 0.5 * ((float)h + scale));
-  fl_scale(scale, -scale);
-
-  // Loop through the array until we see an unmatched END...
-  d    = data_;
-  dend = data_ + num_data_;
-  prim = NULL;
-  c    = ic;
-
-  if (active)
-    fl_color(c);
-  else
-    fl_color(fl_inactive(c));
-
-  while (d < dend)
-    switch (*d)
-    {
-      case END :
-          if (prim)
-            switch (*prim)
-	    {
-	      case LINE :
-		  fl_end_line();
-		  break;
-
-	      case CLOSEDLINE :
-		  fl_end_loop();
-		  break;
-
-	      case POLYGON :
-		  fl_end_complex_polygon();
-		  break;
-
-	      case OUTLINEPOLYGON :
-		  fl_end_complex_polygon();
-
-        	  oc = (Fl_Color)((((unsigned short *)prim)[1] << 16) | 
-	                	  ((unsigned short *)prim)[2]);
-                  if (active)
-		  {
-                    if (oc == FL_ICON_COLOR)
-		      fl_color(ic);
-		    else
-		      fl_color(oc);
-		  }
-		  else
-		  {
-                    if (oc == FL_ICON_COLOR)
-		      fl_color(fl_inactive(ic));
-		    else
-		      fl_color(fl_inactive(oc));
-		  }
-
-		  fl_begin_loop();
-
-		  prim += 3;
-		  while (*prim == VERTEX)
-		  {
-		    fl_vertex(prim[1] * 0.0001, prim[2] * 0.0001);
-		    prim += 3;
-		  }
-
-        	  fl_end_loop();
-		  fl_color(c);
-		  break;
-	    }
-
-          prim = NULL;
-	  d ++;
-	  break;
-
-      case COLOR :
-          c = (Fl_Color)((((unsigned short *)d)[1] << 16) | 
-	                   ((unsigned short *)d)[2]);
-
-          if (c == FL_ICON_COLOR)
-	    c = ic;
-
-          if (!active)
-	    c = fl_inactive(c);
-
-          fl_color(c);
-	  d += 3;
-	  break;
-
-      case LINE :
-          prim = d;
-	  d ++;
-	  fl_begin_line();
-	  break;
-
-      case CLOSEDLINE :
-          prim = d;
-	  d ++;
-	  fl_begin_loop();
-	  break;
-
-      case POLYGON :
-          prim = d;
-	  d ++;
-	  fl_begin_complex_polygon();
-	  break;
-
-      case OUTLINEPOLYGON :
-          prim = d;
-	  d += 3;
-	  fl_begin_complex_polygon();
-	  break;
-
-      case VERTEX :
-          if (prim)
-	    fl_vertex(d[1] * 0.0001, d[2] * 0.0001);
-	  d += 3;
-	  break;
-
-      default : // Ignore invalid data...
-          d ++;
-    }
-
-  // If we still have an open primitive, close it...
-  if (prim)
-    switch (*prim)
-    {
-      case LINE :
-	  fl_end_line();
-	  break;
-
-      case CLOSEDLINE :
-	  fl_end_loop();
-	  break;
-
-      case POLYGON :
-	  fl_end_polygon();
-	  break;
-
-      case OUTLINEPOLYGON :
-	  fl_end_polygon();
-
-          oc = (Fl_Color)((((unsigned short *)prim)[1] << 16) | 
-	                  ((unsigned short *)prim)[2]);
-          if (active)
-	  {
-            if (oc == FL_ICON_COLOR)
-	      fl_color(ic);
-	    else
-	      fl_color(oc);
-	  }
-	  else
-	  {
-            if (oc == FL_ICON_COLOR)
-	      fl_color(fl_inactive(ic));
-	    else
-	      fl_color(fl_inactive(oc));
-	  }
-
-	  fl_begin_loop();
-
-	  prim += 3;
-	  while (*prim == VERTEX)
-	  {
-	    fl_vertex(prim[1] * 0.0001, prim[2] * 0.0001);
-	    prim += 3;
-	  }
-
-          fl_end_loop();
-	  fl_color(c);
-	  break;
-    }
-
-  // Restore the transform matrix
-  fl_pop_matrix();
-}
-
-/**
-  Applies the icon to the widget, registering the Fl_File_Icon
-  label type as needed.
-  \param[in] w widget for which this icon will become the label
-*/
-void Fl_File_Icon::label(Fl_Widget *w)	// I - Widget to label
-{
-  Fl::set_labeltype(_FL_ICON_LABEL, labeltype, 0);
-  w->label(_FL_ICON_LABEL, (const char*)this);
-}
-
-
-/**
-  Draw the icon label.
-  \param[in] o label data
-  \param[in] x, y, w, h position and size of label
-  \param[in] a label alignment [not used]
-*/
-void
-Fl_File_Icon::labeltype(const Fl_Label *o,	// I - Label data
-                	int            x,	// I - X position of label
-			int            y,	// I - Y position of label
-			int            w,	// I - Width of label
-			int            h,	// I - Height of label
-			Fl_Align       a)	// I - Label alignment (not used)
-{
-  Fl_File_Icon *icon;			// Pointer to icon data
-
-
-  (void)a;
-
-  icon = (Fl_File_Icon *)(o->value);
-  if (icon) icon->draw(x, y, w, h, (Fl_Color)(o->color));
-}
-
-
-//
-// End of "$Id: Fl_File_Icon.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_File_Input.cxx b/common/fltk/src/Fl_File_Input.cxx
deleted file mode 100644
index 1bce8f4..0000000
--- a/common/fltk/src/Fl_File_Input.cxx
+++ /dev/null
@@ -1,298 +0,0 @@
-//
-// "$Id: Fl_File_Input.cxx 8063 2010-12-19 21:20:10Z matt $"
-//
-// File_Input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Original version Copyright 1998 by Curtis Edwards.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_File_Input.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/filename.H>
-#include <stdio.h>
-#include "flstring.h"
-
-
-//
-// Height of directory buttons...
-//
-
-#define DIR_HEIGHT	10
-
-
-//
-// Redraw bit for directory bar...
-//
-
-#define FL_DAMAGE_BAR	0x10
-
-
-/**
-  Creates a new Fl_File_Input widget using the given position,
-  size, and label string. The default boxtype is FL_DOWN_BOX.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
-*/
-Fl_File_Input::Fl_File_Input(int X, int Y, int W, int H, const char *L)
-  : Fl_Input(X, Y, W, H, L) {
-  buttons_[0] = 0;
-  errorcolor_ = FL_RED;
-  ok_entry_   = 1;
-  pressed_    = -1;
-
-  down_box(FL_UP_BOX);
-}
-
-/**
-  Draw directory buttons.
-*/
-void Fl_File_Input::draw_buttons() {
-  int	i,					// Looping var
-	X;					// Current X position
-
-
-  if (damage() & (FL_DAMAGE_BAR | FL_DAMAGE_ALL)) {
-    update_buttons();
-  }
-
-  for (X = 0, i = 0; buttons_[i]; i ++)
-  {
-    if ((X + buttons_[i]) > xscroll()) {
-      if (X < xscroll()) {
-        draw_box(pressed_ == i ? fl_down(down_box()) : down_box(),
-                 x(), y(), X + buttons_[i] - xscroll(), DIR_HEIGHT, FL_GRAY);
-      } else if ((X + buttons_[i] - xscroll()) > w()) {
-	draw_box(pressed_ == i ? fl_down(down_box()) : down_box(),
-        	 x() + X - xscroll(), y(), w() - X + xscroll(), DIR_HEIGHT,
-		 FL_GRAY);
-      } else {
-        draw_box(pressed_ == i ? fl_down(down_box()) : down_box(),
-	         x() + X - xscroll(), y(), buttons_[i], DIR_HEIGHT, FL_GRAY);
-      }
-    }
-
-    X += buttons_[i];
-  }
-
-  if (X < w()) {
-    draw_box(pressed_ == i ? fl_down(down_box()) : down_box(),
-             x() + X - xscroll(), y(), w() - X + xscroll(), DIR_HEIGHT, FL_GRAY);
-  }
-}
-
-/**
-  Update the sizes of the directory buttons.
-*/
-void Fl_File_Input::update_buttons() {
-  int		i;				// Looping var
-  const char	*start,				// Start of path component
-		*end;				// End of path component
-
-
-//  puts("update_buttons()");
-
-  // Set the current font & size...
-  fl_font(textfont(), textsize());
-
-  // Loop through the value string, setting widths...
-  for (i = 0, start = value();
-       start && i < (int)(sizeof(buttons_) / sizeof(buttons_[0]) - 1);
-       start = end, i ++) {
-//    printf("    start = \"%s\"\n", start);
-    if ((end = strchr(start, '/')) == NULL)
-#if defined(WIN32) || defined(__EMX__)
-      if ((end = strchr(start, '\\')) == NULL)
-#endif // WIN32 || __EMX__
-      break;
-
-    end ++;
-
-    buttons_[i] = (short)fl_width(start, end - start);
-    if (!i) buttons_[i] += Fl::box_dx(box()) + 6;
-  }
-
-//  printf("    found %d components/buttons...\n", i);
-
-  buttons_[i] = 0;
-}
-
-
-/**
-  Sets the value of the widget given a new string value and its length.
-  Returns non 0 on success.
-  \param[in] str new string value
-  \param[in] len lengh of value
-*/
-int						// O - TRUE on success
-Fl_File_Input::value(const char *str,		// I - New string value
-                     int        len) {		// I - Length of value
-  damage(FL_DAMAGE_BAR);
-  return Fl_Input::value(str,len);
-}
-
-
-/**
-  Sets the value of the widget given a new string value.
-  Returns non 0 on success.
-  \param[in] str new string value
-*/
-int						// O - TRUE on success
-Fl_File_Input::value(const char *str) {		// I - New string value
-  damage(FL_DAMAGE_BAR);
-  return Fl_Input::value(str);
-}
-
-
-/**
-  Draws the file input widget
-*/
-void Fl_File_Input::draw() {
-  Fl_Boxtype b = box();
-  if (damage() & (FL_DAMAGE_BAR | FL_DAMAGE_ALL)) draw_buttons();
-  // this flag keeps Fl_Input_::drawtext from drawing a bogus box!
-  char must_trick_fl_input_ = 
-    Fl::focus()!=this && !size() && !(damage()&FL_DAMAGE_ALL);
-  if ((damage() & FL_DAMAGE_ALL) || must_trick_fl_input_) 
-    draw_box(b,x(),y()+DIR_HEIGHT,w(),h()-DIR_HEIGHT,color());
-  if (!must_trick_fl_input_) 
-    Fl_Input_::drawtext(x()+Fl::box_dx(b)+3, y()+Fl::box_dy(b)+DIR_HEIGHT,
-		        w()-Fl::box_dw(b)-6, h()-Fl::box_dh(b)-DIR_HEIGHT);
-}
-
-
-
-/**
-  Handle events in the widget.
-  Return non zero if event is handled.
-  \param[in] event
-*/
-int						// O - TRUE if we handled event
-Fl_File_Input::handle(int event) 		// I - Event
-{
-//  printf("handle(event = %d)\n", event);
-  static char inButtonBar = 0;
-
-  switch (event) {
-    case FL_MOVE :
-    case FL_ENTER :
-      if (active_r()) {
-	if (Fl::event_y() < (y() + DIR_HEIGHT)) 
-          window()->cursor(FL_CURSOR_DEFAULT);
-	else 
-          window()->cursor(FL_CURSOR_INSERT);
-      }
-
-      return 1;
-
-    case FL_PUSH :
-      inButtonBar = (Fl::event_y() < (y() + DIR_HEIGHT));
-    case FL_RELEASE :
-    case FL_DRAG :
-      if (inButtonBar) 
-        return handle_button(event);
-      else
-        return Fl_Input::handle(event);
-
-    default :
-      { Fl_Widget_Tracker wp(this);
-	if (Fl_Input::handle(event)) {
-	  if (wp.exists())
-	    damage(FL_DAMAGE_BAR);
-	  return 1;
-	}
-      }
-      return 0;
-  }
-}
-
-
-
-/**
-  Handles button events in the widget.
-  Return non zero if event is handled.
-  \param[in] event
-*/
-int						// O - TRUE if we handled event
-Fl_File_Input::handle_button(int event)		// I - Event
-{
-  int		i,				// Looping var
-		X;				// Current X position
-  char		*start,				// Start of path component
-		*end;				// End of path component
-  char		newvalue[FL_PATH_MAX];		// New value
-
-
-  // Figure out which button is being pressed...
-  for (X = 0, i = 0; buttons_[i]; i ++)
-  {
-    X += buttons_[i];
-
-    if (X > xscroll() && Fl::event_x() < (x() + X - xscroll())) break;
-  }
-
-//  printf("handle_button(event = %d), button = %d\n", event, i);
-
-  // Redraw the directory bar...
-  if (event == FL_RELEASE) pressed_ = -1;
-  else pressed_ = (short)i;
-
-  window()->make_current();
-  draw_buttons();
-
-  // Return immediately if the user is clicking on the last button or
-  // has not released the mouse button...
-  if (!buttons_[i] || event != FL_RELEASE) return 1;
-
-  // Figure out where to truncate the path...
-  strlcpy(newvalue, value(), sizeof(newvalue));
-
-  for (start = newvalue, end = start; start && i >= 0; start = end, i --) {
-//    printf("    start = \"%s\"\n", start);
-    if ((end = strchr(start, '/')) == NULL)
-#if defined(WIN32) || defined(__EMX__)
-      if ((end = strchr(start, '\\')) == NULL)
-#endif // WIN32 || __EMX__
-      break;
-
-    end ++;
-  }
-
-  if (i < 0) {
-    // Found the end; truncate the value and update the buttons...
-    *start = '\0';
-    value(newvalue, start - newvalue);
-
-    // Then do the callbacks, if necessary...
-    set_changed();
-    if (when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE) ) do_callback();
-  }
-
-  return 1;
-}
-
-
-//
-// End of "$Id: Fl_File_Input.cxx 8063 2010-12-19 21:20:10Z matt $".
-//
diff --git a/common/fltk/src/Fl_Font.H b/common/fltk/src/Fl_Font.H
deleted file mode 100644
index f534e6f..0000000
--- a/common/fltk/src/Fl_Font.H
+++ /dev/null
@@ -1,118 +0,0 @@
-//
-// "$Id: Fl_Font.H 8428 2011-02-15 15:47:22Z manolo $"
-//
-// Font definitions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Two internal fltk data structures:
-//
-// Fl_Fontdesc: an entry into the fl_font() table.  There is one of these
-// for each fltk font number.
-//
-#ifndef FL_FONT_
-#define FL_FONT_
-
-#include <config.h>
-
-#  if USE_XFT
-typedef struct _XftFont XftFont;
-#  elif !defined(WIN32) && !defined(__APPLE__)
-#    include <FL/Xutf8.h>
-#  endif // USE_XFT
-
-/**
-   This a structure for an actual system font, with junk to
-   help choose it and info on character sizes.  Each Fl_Fontdesc has a
-   linked list of these.  These are created the first time each system
-   font/size combination is used.
-*/
-class Fl_Font_Descriptor {
-public:
-  /** linked list for this Fl_Fontdesc */
-  Fl_Font_Descriptor *next;	
-  Fl_Fontsize size; /**< font size */
-#ifndef FL_DOXYGEN // don't bother with platorm dependant details in the doc. 
-#  ifdef WIN32
-  HFONT fid;
-  int *width[64];
-  TEXTMETRIC metr;
-  int angle;
-  FL_EXPORT Fl_Font_Descriptor(const char* fontname, Fl_Fontsize size);
-#  elif defined(__APPLE_QUARTZ__)
-  FL_EXPORT Fl_Font_Descriptor(const char* fontname, Fl_Fontsize size);
-  ATSUTextLayout layout;
-#     if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  CTFontRef fontref;
-  // the unicode span is divided in 512 blocks of 128 characters
-  float *width[512]; // array of arrays of character widths
-#     endif
-  ATSUStyle style;
-  short ascent, descent, q_width;
-  char *q_name;
-#  elif USE_XFT
-  XftFont* font;
-  //const char* encoding;
-  int angle;
-  FL_EXPORT Fl_Font_Descriptor(const char* xfontname, Fl_Fontsize size, int angle);
-#  else
-  XUtf8FontStruct* font;	// X UTF-8 font information
-  FL_EXPORT Fl_Font_Descriptor(const char* xfontname);
-#  endif
-#  if HAVE_GL
-  unsigned int listbase;// base of display list, 0 = none
-#ifndef __APPLE_QUARTZ__
-  char glok[64];
-#endif // __APPLE_QUARTZ__
-#  endif // HAVE_GL
-
-  FL_EXPORT ~Fl_Font_Descriptor();
-
-#endif // FL_DOXYGEN
-};
-
-//extern FL_EXPORT Fl_Font_Descriptor *fl_fontsize; // the currently selected one
-
-struct Fl_Fontdesc {
-  const char *name;
-  char fontname[128];	// "Pretty" font name
-  Fl_Font_Descriptor *first;	// linked list of sizes of this style
-#  ifndef WIN32
-  char **xlist;		// matched X font names
-  int n;		// size of xlist, negative = don't free xlist!
-#  endif
-};
-
-extern FL_EXPORT Fl_Fontdesc *fl_fonts; // the table
-
-#  ifndef WIN32
-// functions for parsing X font names:
-FL_EXPORT const char* fl_font_word(const char *p, int n);
-FL_EXPORT char *fl_find_fontsize(char *name);
-#  endif
-
-#endif
-
-//
-// End of "$Id: Fl_Font.H 8428 2011-02-15 15:47:22Z manolo $".
-//
diff --git a/common/fltk/src/Fl_GDI_Printer.cxx b/common/fltk/src/Fl_GDI_Printer.cxx
deleted file mode 100644
index 49d25a7..0000000
--- a/common/fltk/src/Fl_GDI_Printer.cxx
+++ /dev/null
@@ -1,285 +0,0 @@
-//
-// "$Id: Fl_GDI_Printer.cxx 8467 2011-02-23 14:36:18Z manolo $"
-//
-// Support for WIN32 printing for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-#include <FL/Fl_Printer.H>
-
-
-#include <FL/fl_ask.H>
-#include <FL/math.h>
-
-extern HWND fl_window;
-
-Fl_System_Printer::Fl_System_Printer(void) : Fl_Paged_Device() {
-  hPr = NULL;
-  driver(Fl_Display_Device::display_device()->driver());
-}
-
-Fl_System_Printer::~Fl_System_Printer(void) {
-  if (hPr) end_job();
-}
-
-static void WIN_SetupPrinterDeviceContext(HDC prHDC)
-{
-  if ( !prHDC ) return;
-  
-  fl_window = 0;
-  fl_gc = prHDC;
-  SetGraphicsMode(prHDC, GM_ADVANCED); // to allow for rotations
-  SetMapMode(prHDC, MM_ANISOTROPIC);
-  SetTextAlign(prHDC, TA_BASELINE|TA_LEFT);
-  SetBkMode(prHDC, TRANSPARENT);	
-  // this matches 720 logical units to the number of device units in 10 inches of paper
-  // thus the logical unit is the point (= 1/72 inch)
-  SetWindowExtEx(prHDC, 720, 720, NULL);
-  SetViewportExtEx(prHDC, 10*GetDeviceCaps(prHDC, LOGPIXELSX), 10*GetDeviceCaps(prHDC, LOGPIXELSY), NULL);
-}
-
-
-int Fl_System_Printer::start_job (int pagecount, int *frompage, int *topage)
-// returns 0 iff OK
-{
-  DWORD       commdlgerr;
-  DOCINFO     di;
-  char        docName [256];
-  int err = 0;
-  
-  abortPrint = FALSE;
-  memset (&pd, 0, sizeof (PRINTDLG));
-  pd.lStructSize = sizeof (PRINTDLG);
-  pd.hwndOwner = GetForegroundWindow();
-  pd.Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE | PD_NOSELECTION;
-  pd.nMinPage = 1;
-  pd.nMaxPage = pagecount;
-  if (PrintDlg (&pd) != 0) {
-    hPr = pd.hDC;
-    if (hPr != NULL) {
-      strcpy (docName, "FLTK");
-      memset(&di, 0, sizeof(DOCINFO));
-      di.cbSize = sizeof (DOCINFO);
-      di.lpszDocName = (LPCSTR) docName;
-      prerr = StartDoc (hPr, &di);
-      if (prerr < 1) {
-	abortPrint = TRUE;
-	//fl_alert ("StartDoc error %d", prerr);
-	err = 1;
-      }
-    } else {
-      commdlgerr = CommDlgExtendedError ();
-      fl_alert ("Unable to create print context, error %lu",
-		(unsigned long) commdlgerr);
-      err = 1;
-    }
-  } else {
-    err = 1;
-  }
-  if(!err) {
-    if((pd.Flags & PD_PAGENUMS) != 0 ) {
-      if (frompage) *frompage = pd.nFromPage;
-      if (topage) *topage = pd.nToPage;
-    }
-    else {
-      if (frompage) *frompage = 1;
-      if (topage) *topage = pagecount;
-    }
-    x_offset = 0;
-    y_offset = 0;
-    WIN_SetupPrinterDeviceContext (hPr);
-    gc = (void *)fl_gc;
-    this->set_current();
-  }
-  return err;
-}
-
-void Fl_System_Printer::end_job (void)
-{
-  Fl_Display_Device::display_device()->set_current();
-  if (hPr != NULL) {
-    if (! abortPrint) {
-      prerr = EndDoc (hPr);
-      if (prerr < 0) {
-	fl_alert ("EndDoc error %d", prerr);
-      }
-    }
-    DeleteDC (hPr);
-    if (pd.hDevMode != NULL) {
-      GlobalFree (pd.hDevMode);
-    }
-    if (pd.hDevNames != NULL) {
-      GlobalFree (pd.hDevNames);
-    }
-  }
-  hPr = NULL;
-}
-
-void Fl_System_Printer::absolute_printable_rect(int *x, int *y, int *w, int *h)
-{
-  POINT         physPageSize;
-  POINT         pixelsPerInch;
-    
-  if (hPr == NULL) return;
-  SetWindowOrgEx(fl_gc, 0, 0, NULL);
-  
-  physPageSize.x = GetDeviceCaps(hPr, HORZRES);
-  physPageSize.y = GetDeviceCaps(hPr, VERTRES);
-  DPtoLP(hPr, &physPageSize, 1);
-  *w = physPageSize.x + 1;
-  *h = physPageSize.y + 1;
-  pixelsPerInch.x = GetDeviceCaps(hPr, LOGPIXELSX);
-  pixelsPerInch.y = GetDeviceCaps(hPr, LOGPIXELSY);
-  DPtoLP(hPr, &pixelsPerInch, 1);
-  left_margin = (pixelsPerInch.x / 4);
-  *w -= (pixelsPerInch.x / 2);
-  top_margin = (pixelsPerInch.y / 4);
-  *h -= (pixelsPerInch.y / 2);
-  
-  *x = left_margin;
-  *y = top_margin;
-  origin(x_offset, y_offset);
-}
-
-void Fl_System_Printer::margins(int *left, int *top, int *right, int *bottom)
-{
-  int x, y, w, h;
-  absolute_printable_rect(&x, &y, &w, &h);
-  if (left) *left = x;
-  if (top) *top = y;
-  if (right) *right = x;
-  if (bottom) *bottom = y;
-}
-
-int Fl_System_Printer::printable_rect(int *w, int *h)
-{
-  int x, y;
-  absolute_printable_rect(&x, &y, w, h);
-  return 0;
-}
-
-int Fl_System_Printer::start_page (void)
-{
-  int  rsult, w, h;
-  
-  rsult = 0;
-  if (hPr != NULL) {
-    WIN_SetupPrinterDeviceContext (hPr);
-    prerr = StartPage (hPr);
-    if (prerr < 0) {
-      fl_alert ("StartPage error %d", prerr);
-      rsult = 1;
-    }
-    printable_rect(&w, &h);
-    origin(0, 0);
-    fl_clip_region(0);
-    gc = (void *)fl_gc;
-  }
-  return rsult;
-}
-
-void Fl_System_Printer::origin (int deltax, int deltay)
-{
-  SetWindowOrgEx(fl_gc, - left_margin - deltax, - top_margin - deltay, NULL);
-  x_offset = deltax;
-  y_offset = deltay;
-}
-
-void Fl_System_Printer::scale (float scalex, float scaley)
-{
-  if (scaley == 0.) scaley = scalex;
-  int w, h;
-  SetWindowExtEx(fl_gc, (int)(720 / scalex + 0.5), (int)(720 / scaley + 0.5), NULL);
-  printable_rect(&w, &h);
-  origin(0, 0);
-}
-
-void Fl_System_Printer::rotate (float rot_angle)
-{
-  XFORM mat;
-  float angle;
-  angle = - rot_angle * M_PI / 180.;
-  mat.eM11 = cos(angle);
-  mat.eM12 = sin(angle);
-  mat.eM21 = - mat.eM12;
-  mat.eM22 = mat.eM11;
-  mat.eDx = mat.eDy = 0;
-  SetWorldTransform(fl_gc, &mat);
-}
-
-int Fl_System_Printer::end_page (void)
-{
-  int  rsult;
-  
-  rsult = 0;
-  if (hPr != NULL) {
-    prerr = EndPage (hPr);
-    if (prerr < 0) {
-      abortPrint = TRUE;
-      fl_alert ("EndPage error %d", prerr);
-      rsult = 1;
-    }
-  }
-  gc = NULL;
-  return rsult;
-}
-
-static int translate_stack_depth = 0;
-const int translate_stack_max = 5;
-static int translate_stack_x[translate_stack_max];
-static int translate_stack_y[translate_stack_max];
-
-static void do_translate(int x, int y)
-{
-  XFORM tr;
-  tr.eM11 = tr.eM22 = 1;
-  tr.eM12 = tr.eM21 = 0;
-  tr.eDx =  x;
-  tr.eDy =  y;
-  ModifyWorldTransform(fl_gc, &tr, MWT_LEFTMULTIPLY);
-}
-
-void Fl_System_Printer::translate (int x, int y)
-{
-  do_translate(x, y);
-  if (translate_stack_depth < translate_stack_max) {
-    translate_stack_x[translate_stack_depth] = x;
-    translate_stack_y[translate_stack_depth] = y;
-    translate_stack_depth++;
-    }
-}
-
-void Fl_System_Printer::untranslate (void)
-{
-  if (translate_stack_depth > 0) {
-    translate_stack_depth--;
-    do_translate( - translate_stack_x[translate_stack_depth], - translate_stack_y[translate_stack_depth] );
-    }
-}
-
-#endif // WIN32
-
-//
-// End of "$Id: Fl_GDI_Printer.cxx 8467 2011-02-23 14:36:18Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Group.cxx b/common/fltk/src/Fl_Group.cxx
deleted file mode 100644
index de7d488..0000000
--- a/common/fltk/src/Fl_Group.cxx
+++ /dev/null
@@ -1,837 +0,0 @@
-//
-// "$Id: Fl_Group.cxx 8184 2011-01-04 18:28:01Z matt $"
-//
-// Group widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// The Fl_Group is the only defined container type in FLTK.
-
-// Fl_Window itself is a subclass of this, and most of the event
-// handling is designed so windows themselves work correctly.
-
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-#include <stdlib.h>
-
-Fl_Group* Fl_Group::current_;
-
-// Hack: A single child is stored in the pointer to the array, while
-// multiple children are stored in an allocated array:
-
-/**
-  Returns a pointer to the array of children. <I>This pointer is only
-  valid until the next time a child is added or removed.</I>
-*/
-Fl_Widget*const* Fl_Group::array() const {
-  return children_ <= 1 ? (Fl_Widget**)(&array_) : array_;
-}
-
-/**
-  Searches the child array for the widget and returns the index. Returns children()
-  if the widget is NULL or not found.
-*/
-int Fl_Group::find(const Fl_Widget* o) const {
-  Fl_Widget*const* a = array();
-  int i; for (i=0; i < children_; i++) if (*a++ == o) break;
-  return i;
-}
-
-// Metrowerks CodeWarrior and others can't export the static
-// class member: current_, so these methods can't be inlined...
-
-/**
-  Sets the current group so you can build the widget
-  tree by just constructing the widgets.
-
-  begin() is automatically called by the constructor for Fl_Group (and thus for
-  Fl_Window as well). begin() <I>is exactly the same as</I> current(this).
-  <I>Don't forget to end() the group or window!</I>
-*/
-void Fl_Group::begin() {current_ = this;}
-
-/**
-  <I>Exactly the same as</I> current(this->parent()). Any new widgets
-  added to the widget tree will be added to the parent of the group.
-*/
-void Fl_Group::end() {current_ = parent();}
-
-/**
-  Returns the currently active group.
-  
-  The Fl_Widget constructor automatically does current()->add(widget) if this
-  is not null. To prevent new widgets from being added to a group, call
-  Fl_Group::current(0).
-*/
-Fl_Group *Fl_Group::current() {return current_;}
-
-/**
-  Sets the current group.
-  \see Fl_Group::current() 
-*/
-void Fl_Group::current(Fl_Group *g) {current_ = g;}
-
-extern Fl_Widget* fl_oldfocus; // set by Fl::focus
-
-// For back-compatibility, we must adjust all events sent to child
-// windows so they are relative to that window.
-
-static int send(Fl_Widget* o, int event) {
-  if (o->type() < FL_WINDOW) return o->handle(event);
-  switch ( event )
-  {
-  case FL_DND_ENTER: /* FALLTHROUGH */
-  case FL_DND_DRAG:
-    // figure out correct type of event:
-    event = (o->contains(Fl::belowmouse())) ? FL_DND_DRAG : FL_DND_ENTER;
-  }
-  int save_x = Fl::e_x; Fl::e_x -= o->x();
-  int save_y = Fl::e_y; Fl::e_y -= o->y();
-  int ret = o->handle(event);
-  Fl::e_y = save_y;
-  Fl::e_x = save_x;
-  switch ( event )
-  {
-  case FL_ENTER: /* FALLTHROUGH */
-  case FL_DND_ENTER:
-    // Successful completion of FL_ENTER means the widget is now the
-    // belowmouse widget, but only call Fl::belowmouse if the child
-    // widget did not do so:
-    if (!o->contains(Fl::belowmouse())) Fl::belowmouse(o);
-    break;
-  }
-  return ret;
-}
-
-// translate the current keystroke into up/down/left/right for navigation:
-#define ctrl(x) (x^0x40)
-static int navkey() {
-  switch (Fl::event_key()) {
-  case 0: // not an FL_KEYBOARD/FL_SHORTCUT event
-    break;
-  case FL_Tab:
-    if (!Fl::event_state(FL_SHIFT)) return FL_Right;
-    return FL_Left;
-  case FL_Right:
-    return FL_Right;
-  case FL_Left:
-    return FL_Left;
-  case FL_Up:
-    return FL_Up;
-  case FL_Down:
-    return FL_Down;
-  }
-  return 0;
-}
-
-int Fl_Group::handle(int event) {
-
-  Fl_Widget*const* a = array();
-  int i;
-  Fl_Widget* o;
-
-  switch (event) {
-
-  case FL_FOCUS:
-    switch (navkey()) {
-    default:
-      if (savedfocus_ && savedfocus_->take_focus()) return 1;
-    case FL_Right:
-    case FL_Down:
-      for (i = children(); i--;) if ((*a++)->take_focus()) return 1;
-      break;
-    case FL_Left:
-    case FL_Up:
-      for (i = children(); i--;) if (a[i]->take_focus()) return 1;
-      break;
-    }
-    return 0;
-
-  case FL_UNFOCUS:
-    savedfocus_ = fl_oldfocus;
-    return 0;
-
-  case FL_KEYBOARD:
-    return navigation(navkey());
-
-  case FL_SHORTCUT:
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && Fl::event_inside(o) && send(o,FL_SHORTCUT))
-	return 1;
-    }
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && !Fl::event_inside(o) && send(o,FL_SHORTCUT))
-	return 1;
-    }
-    if ((Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter)) return navigation(FL_Down);
-    return 0;
-
-  case FL_ENTER:
-  case FL_MOVE:
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->visible() && Fl::event_inside(o)) {
-	if (o->contains(Fl::belowmouse())) {
-	  return send(o,FL_MOVE);
-	} else {
-	  Fl::belowmouse(o);
-	  if (send(o,FL_ENTER)) return 1;
-	}
-      }
-    }
-    Fl::belowmouse(this);
-    return 1;
-
-  case FL_DND_ENTER:
-  case FL_DND_DRAG:
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && Fl::event_inside(o)) {
-	if (o->contains(Fl::belowmouse())) {
-	  return send(o,FL_DND_DRAG);
-	} else if (send(o,FL_DND_ENTER)) {
-	  if (!o->contains(Fl::belowmouse())) Fl::belowmouse(o);
-	  return 1;
-	}
-      }
-    }
-    Fl::belowmouse(this);
-    return 0;
-
-  case FL_PUSH:
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && Fl::event_inside(o)) {
-	Fl_Widget_Tracker wp(o);
-	if (send(o,FL_PUSH)) {
-	  if (Fl::pushed() && wp.exists() && !o->contains(Fl::pushed())) Fl::pushed(o);
-	  return 1;
-	}
-      }
-    }
-    return 0;
-
-  case FL_RELEASE:
-  case FL_DRAG:
-    o = Fl::pushed();
-    if (o == this) return 0;
-    else if (o) send(o,event);
-    else {
-      for (i = children(); i--;) {
-	o = a[i];
-	if (o->takesevents() && Fl::event_inside(o)) {
-	  if (send(o,event)) return 1;
-	}
-      }
-    }
-    return 0;
-
-  case FL_MOUSEWHEEL:
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && Fl::event_inside(o) && send(o,FL_MOUSEWHEEL))
-	return 1;
-    }
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && !Fl::event_inside(o) && send(o,FL_MOUSEWHEEL))
-	return 1;
-    }
-    return 0;
-
-  case FL_DEACTIVATE:
-  case FL_ACTIVATE:
-    for (i = children(); i--;) {
-      o = *a++;
-      if (o->active()) o->handle(event);
-    }
-    return 1;
-
-  case FL_SHOW:
-  case FL_HIDE:
-    for (i = children(); i--;) {
-      o = *a++;
-      if (event == FL_HIDE && o == Fl::focus()) {
-        // Give up input focus...
-	int old_event = Fl::e_number;
-        o->handle(Fl::e_number = FL_UNFOCUS);
-	Fl::e_number = old_event;
-	Fl::focus(0);
-      }
-      if (o->visible()) o->handle(event);
-    }
-    return 1;
-
-  default:
-    // For all other events, try to give to each child, starting at focus:
-    for (i = 0; i < children(); i ++)
-      if (Fl::focus_ == a[i]) break;
-
-    if (i >= children()) i = 0;
-
-    if (children()) {
-      for (int j = i;;) {
-        if (a[j]->takesevents()) if (send(a[j], event)) return 1;
-        j++;
-        if (j >= children()) j = 0;
-        if (j == i) break;
-      }
-    }
-
-    return 0;
-  }
-}
-
-//void Fl_Group::focus(Fl_Widget *o) {Fl::focus(o); o->handle(FL_FOCUS);}
-
-#if 0
-const char *nameof(Fl_Widget *o) {
-  if (!o) return "NULL";
-  if (!o->label()) return "<no label>";
-  return o->label();
-}
-#endif
-
-// try to move the focus in response to a keystroke:
-int Fl_Group::navigation(int key) {
-  if (children() <= 1) return 0;
-  int i;
-  for (i = 0; ; i++) {
-    if (i >= children_) return 0;
-    if (array_[i]->contains(Fl::focus())) break;
-  }
-  Fl_Widget *previous = array_[i];
-
-  for (;;) {
-    switch (key) {
-    case FL_Right:
-    case FL_Down:
-      i++;
-      if (i >= children_) {
-	if (parent()) return 0;
-	i = 0;
-      }
-      break;
-    case FL_Left:
-    case FL_Up:
-      if (i) i--;
-      else {
-	if (parent()) return 0;
-	i = children_-1;
-      }
-      break;
-    default:
-      return 0;
-    }
-    Fl_Widget* o = array_[i];
-    if (o == previous) return 0;
-    switch (key) {
-    case FL_Down:
-    case FL_Up:
-      // for up/down, the widgets have to overlap horizontally:
-      if (o->x() >= previous->x()+previous->w() ||
-	  o->x()+o->w() <= previous->x()) continue;
-    }
-    if (o->take_focus()) return 1;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Group::Fl_Group(int X,int Y,int W,int H,const char *l)
-: Fl_Widget(X,Y,W,H,l) {
-  align(FL_ALIGN_TOP);
-  children_ = 0;
-  array_ = 0;
-  savedfocus_ = 0;
-  resizable_ = this;
-  sizes_ = 0; // this is allocated when first resize() is done
-  // Subclasses may want to construct child objects as part of their
-  // constructor, so make sure they are add()'d to this object.
-  // But you must end() the object!
-  begin();
-}
-
-/**
-  Deletes all child widgets from memory recursively.
-
-  This method differs from the remove() method in that it
-  affects all child widgets and deletes them from memory.
-*/
-void Fl_Group::clear() {
-  savedfocus_ = 0;
-  resizable_ = this;
-  init_sizes();
-
-  // we must change the Fl::pushed() widget, if it is one of
-  // the group's children. Otherwise fl_fix_focus() would send
-  // lots of events to children that are about to be deleted
-  // anyway.
-
-  Fl_Widget *pushed = Fl::pushed();	// save pushed() widget
-  if (contains(pushed)) pushed = this;	// set it to be the group, if it's a child
-  Fl::pushed(this);			// for fl_fix_focus etc.
-
-  // okay, now it is safe to destroy the children:
-
-#define REVERSE_CHILDREN
-#ifdef  REVERSE_CHILDREN
-  // Reverse the order of the children. Doing this and deleting
-  // always the last child is much faster than the other way around.
-  if (children_ > 1) {
-    Fl_Widget *temp;
-    Fl_Widget **a = (Fl_Widget**)array();
-    for (int i=0,j=children_-1; i<children_/2; i++,j--) {
-      temp = a[i];
-      a[i] = a[j];
-      a[j] = temp;
-    }
-  }
-#endif // REVERSE_CHILDREN
-
-  while (children_) {			// delete all children
-    int idx = children_-1;		// last child's index
-    Fl_Widget* w = child(idx);		// last child widget
-    if (w->parent()==this) {		// should always be true
-      if (children_>2) {		// optimized removal
-        w->parent_ = 0;			// reset child's parent
-        children_--;			// update counter
-      } else {				// slow removal
-        remove(idx);
-      }
-      delete w;				// delete the child
-    } else {				// should never happen
-      remove(idx);			// remove it anyway
-    }
-  }
-
-  if (pushed != this) Fl::pushed(pushed); // reset pushed() widget
-
-}
-
-/**
-  The destructor <I>also deletes all the children</I>. This allows a
-  whole tree to be deleted at once, without having to keep a pointer to
-  all the children in the user code.
-  
-  It is allowed that the Fl_Group and all of its children are automatic
-  (local) variables, but you must declare the Fl_Group \e first, so that
-  it is destroyed last.
-  
-  If you add static or automatic (local) variables to an Fl_Group, then it
-  is your responsibility to remove (or delete) all such static or automatic
-  child widgets \e \b before destroying the group - otherwise the child
-  widgets' destructors would be called twice!
-*/
-Fl_Group::~Fl_Group() {
-  clear();
-}
-
-/**
-  The widget is removed from its current group (if any) and then
-  inserted into this group. It is put at index n - or at the end,
-  if n >= children(). This can also be used to rearrange
-  the widgets inside a group.
-*/
-void Fl_Group::insert(Fl_Widget &o, int index) {
-  if (o.parent()) {
-    Fl_Group* g = o.parent();
-    int n = g->find(o);
-    if (g == this) {
-      if (index > n) index--;
-      if (index == n) return;
-    }
-    g->remove(n);
-  }
-  o.parent_ = this;
-  if (children_ == 0) { // use array pointer to point at single child
-    array_ = (Fl_Widget**)&o;
-  } else if (children_ == 1) { // go from 1 to 2 children
-    Fl_Widget* t = (Fl_Widget*)array_;
-    array_ = (Fl_Widget**)malloc(2*sizeof(Fl_Widget*));
-    if (index) {array_[0] = t; array_[1] = &o;}
-    else {array_[0] = &o; array_[1] = t;}
-  } else {
-    if (!(children_ & (children_-1))) // double number of children
-      array_ = (Fl_Widget**)realloc((void*)array_,
-				    2*children_*sizeof(Fl_Widget*));
-    int j; for (j = children_; j > index; j--) array_[j] = array_[j-1];
-    array_[j] = &o;
-  }
-  children_++;
-  init_sizes();
-}
-
-/**
-  The widget is removed from its current group (if any) and then added
-  to the end of this group.
-*/
-void Fl_Group::add(Fl_Widget &o) {insert(o, children_);}
-
-/**
-  Removes the widget at \p index from the group but does not delete it.
-
-  This method does nothing if \p index is out of bounds.
-
-  This method differs from the clear() method in that it only affects
-  a single widget and does not delete it from memory.
-  
-  \since FLTK 1.3.0
-*/
-void Fl_Group::remove(int index) {
-  if (index < 0 || index >= children_) return;
-  Fl_Widget &o = *child(index);
-  if (&o == savedfocus_) savedfocus_ = 0;
-  if (o.parent_ == this) {	// this should always be true
-    o.parent_ = 0;
-  } 
-
-  // remove the widget from the group
-
-  children_--;
-  if (children_ == 1) { // go from 2 to 1 child
-    Fl_Widget *t = array_[!index];
-    free((void*)array_);
-    array_ = (Fl_Widget**)t;
-  } else if (children_ > 1) { // delete from array
-    for (; index < children_; index++) array_[index] = array_[index+1];
-  }
-  init_sizes();
-}
-
-/**
-  Removes a widget from the group but does not delete it.
-
-  This method does nothing if the widget is not a child of the group.
-
-  This method differs from the clear() method in that it only affects
-  a single widget and does not delete it from memory.
-  
-  \note If you have the child's index anyway, use remove(int index)
-  instead, because this doesn't need a child lookup in the group's
-  table of children. This can be much faster, if there are lots of
-  children.
-*/
-void Fl_Group::remove(Fl_Widget &o) {
-  if (!children_) return;
-  int i = find(o);
-  if (i < children_) remove(i);
-}
-
-////////////////////////////////////////////////////////////////
-
-// Rather lame kludge here, I need to detect windows and ignore the
-// changes to X,Y, since all children are relative to X,Y.  That
-// is why I check type():
-
-// sizes array stores the initial positions of widgets as
-// left,right,top,bottom quads.  The first quad is the group, the
-// second is the resizable (clipped to the group), and the
-// rest are the children.  This is a convenient order for the
-// algorithm.  If you change this be sure to fix Fl_Tile which
-// also uses this array!
-
-/**
-  Resets the internal array of widget sizes and positions.
-
-  The Fl_Group widget keeps track of the original widget sizes and
-  positions when resizing occurs so that if you resize a window back to its
-  original size the widgets will be in the correct places. If you rearrange
-  the widgets in your group, call this method to register the new arrangement
-  with the Fl_Group that contains them.
-  
-  If you add or remove widgets, this will be done automatically.
-  
-  \note The internal array of widget sizes and positions will be allocated and
-  filled when the next resize() occurs.
-  
-  \sa sizes()
-*/
-void Fl_Group::init_sizes() {
-  delete[] sizes_; sizes_ = 0;
-}
-
-/**
-  Returns the internal array of widget sizes and positions.
-
-  If the sizes() array does not exist, it will be allocated and filled
-  with the current widget sizes and positions.
-
-  \note You should never need to use this method directly, unless you have
-  special needs to rearrange the children of a Fl_Group. Fl_Tile uses
-  this to rearrange its widget positions.
-  
-  \sa init_sizes()
-
-  \todo Should the internal representation of the sizes() array be documented?
-*/
-int* Fl_Group::sizes() {
-  if (!sizes_) {
-    int* p = sizes_ = new int[4*(children_+2)];
-    // first thing in sizes array is the group's size:
-    if (type() < FL_WINDOW) {p[0] = x(); p[2] = y();} else {p[0] = p[2] = 0;}
-    p[1] = p[0]+w(); p[3] = p[2]+h();
-    // next is the resizable's size:
-    p[4] = p[0]; // init to the group's size
-    p[5] = p[1];
-    p[6] = p[2];
-    p[7] = p[3];
-    Fl_Widget* r = resizable();
-    if (r && r != this) { // then clip the resizable to it
-      int t;
-      t = r->x(); if (t > p[0]) p[4] = t;
-      t +=r->w(); if (t < p[1]) p[5] = t;
-      t = r->y(); if (t > p[2]) p[6] = t;
-      t +=r->h(); if (t < p[3]) p[7] = t;
-    }
-    // next is all the children's sizes:
-    p += 8;
-    Fl_Widget*const* a = array();
-    for (int i=children_; i--;) {
-      Fl_Widget* o = *a++;
-      *p++ = o->x();
-      *p++ = o->x()+o->w();
-      *p++ = o->y();
-      *p++ = o->y()+o->h();
-    }
-  }
-  return sizes_;
-}
-
-/**
-  Resizes the Fl_Group widget and all of its children.
-
-  The Fl_Group widget first resizes itself, and then it moves and resizes
-  all its children according to the rules documented for
-  Fl_Group::resizable(Fl_Widget*)
-
-  \sa Fl_Group::resizable(Fl_Widget*)
-  \sa Fl_Group::resizable()
-  \sa Fl_Widget::resize(int,int,int,int)
-*/
-void Fl_Group::resize(int X, int Y, int W, int H) {
-
-  int dx = X-x();
-  int dy = Y-y();
-  int dw = W-w();
-  int dh = H-h();
-  
-  int *p = sizes(); // save initial sizes and positions
-
-  Fl_Widget::resize(X,Y,W,H); // make new xywh values visible for children
-
-  if (!resizable() || (dw==0 && dh==0) ) {
-
-    if (type() < FL_WINDOW) {
-      Fl_Widget*const* a = array();
-      for (int i=children_; i--;) {
-	Fl_Widget* o = *a++;
-	o->resize(o->x()+dx, o->y()+dy, o->w(), o->h());
-      }
-    }
-
-  } else if (children_) {
-
-    // get changes in size/position from the initial size:
-    dx = X - p[0];
-    dw = W - (p[1]-p[0]);
-    dy = Y - p[2];
-    dh = H - (p[3]-p[2]);
-    if (type() >= FL_WINDOW) dx = dy = 0;
-    p += 4;
-
-    // get initial size of resizable():
-    int IX = *p++;
-    int IR = *p++;
-    int IY = *p++;
-    int IB = *p++;
-
-    Fl_Widget*const* a = array();
-    for (int i=children_; i--;) {
-      Fl_Widget* o = *a++;
-#if 1
-      int XX = *p++;
-      if (XX >= IR) XX += dw;
-      else if (XX > IX) XX = IX+((XX-IX)*(IR+dw-IX)+(IR-IX)/2)/(IR-IX);
-      int R = *p++;
-      if (R >= IR) R += dw;
-      else if (R > IX) R = IX+((R-IX)*(IR+dw-IX)+(IR-IX)/2)/(IR-IX);
-
-      int YY = *p++;
-      if (YY >= IB) YY += dh;
-      else if (YY > IY) YY = IY+((YY-IY)*(IB+dh-IY)+(IB-IY)/2)/(IB-IY);
-      int B = *p++;
-      if (B >= IB) B += dh;
-      else if (B > IY) B = IY+((B-IY)*(IB+dh-IY)+(IB-IY)/2)/(IB-IY);
-#else // much simpler code from Francois Ostiguy:
-      int XX = *p++;
-      if (XX >= IR) XX += dw;
-      else if (XX > IX) XX += dw * (XX-IX)/(IR-IX);
-      int R = *p++;
-      if (R >= IR) R += dw;
-      else if (R > IX) R = R + dw * (R-IX)/(IR-IX);
-
-      int YY = *p++;
-      if (YY >= IB) YY += dh;
-      else if (YY > IY) YY = YY + dh*(YY-IY)/(IB-IY);
-      int B = *p++;
-      if (B >= IB) B += dh;
-      else if (B > IY) B = B + dh*(B-IY)/(IB-IY);
-#endif
-      o->resize(XX+dx, YY+dy, R-XX, B-YY);
-    }
-  }
-}
-
-/**
-  Draws all children of the group.
-
-  This is useful, if you derived a widget from Fl_Group and want to draw a special
-  border or background. You can call draw_children() from the derived draw() method
-  after drawing the box, border, or background.
-*/
-void Fl_Group::draw_children() {
-  Fl_Widget*const* a = array();
-
-  if (clip_children()) {
-    fl_push_clip(x() + Fl::box_dx(box()),
-                 y() + Fl::box_dy(box()),
-		 w() - Fl::box_dw(box()),
-		 h() - Fl::box_dh(box()));
-  }
-
-  if (damage() & ~FL_DAMAGE_CHILD) { // redraw the entire thing:
-    for (int i=children_; i--;) {
-      Fl_Widget& o = **a++;
-      draw_child(o);
-      draw_outside_label(o);
-    }
-  } else {	// only redraw the children that need it:
-    for (int i=children_; i--;) update_child(**a++);
-  }
-
-  if (clip_children()) fl_pop_clip();
-}
-
-void Fl_Group::draw() {
-  if (damage() & ~FL_DAMAGE_CHILD) { // redraw the entire thing:
-    draw_box();
-    draw_label();
-  }
-  draw_children();
-}
-
-/**
-  Draws a child only if it needs it.
-
-  This draws a child widget, if it is not clipped \em and if any damage() bits
-  are set. The damage bits are cleared after drawing.
-
-  \sa Fl_Group::draw_child(Fl_Widget& widget) const
-*/
-void Fl_Group::update_child(Fl_Widget& widget) const {
-  if (widget.damage() && widget.visible() && widget.type() < FL_WINDOW &&
-      fl_not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
-    widget.draw();	
-    widget.clear_damage();
-  }
-}
-
-/**
-  Forces a child to redraw.
-
-  This draws a child widget, if it is not clipped.
-  The damage bits are cleared after drawing.
-*/
-void Fl_Group::draw_child(Fl_Widget& widget) const {
-  if (widget.visible() && widget.type() < FL_WINDOW &&
-      fl_not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
-    widget.clear_damage(FL_DAMAGE_ALL);
-    widget.draw();
-    widget.clear_damage();
-  }
-}
-
-extern char fl_draw_shortcut;
-
-/** Parents normally call this to draw outside labels of child widgets. */
-void Fl_Group::draw_outside_label(const Fl_Widget& widget) const {
-  if (!widget.visible()) return;
-  // skip any labels that are inside the widget:
-  if (!(widget.align()&15) || (widget.align() & FL_ALIGN_INSIDE)) return;
-  // invent a box that is outside the widget:
-  Fl_Align a = widget.align();
-  int X = widget.x();
-  int Y = widget.y();
-  int W = widget.w();
-  int H = widget.h();
-  int wx, wy;
-  if (const_cast<Fl_Group*>(this)->as_window()) {
-    wx = wy = 0;
-  } else {
-    wx = x(); wy = y();
-  }
-  if ( (a & 0x0f) == FL_ALIGN_LEFT_TOP ) {
-    a = (a &~0x0f ) | FL_ALIGN_TOP_RIGHT;
-    X = wx;
-    W = widget.x()-X-3;
-  } else if ( (a & 0x0f) == FL_ALIGN_LEFT_BOTTOM ) {
-    a = (a &~0x0f ) | FL_ALIGN_BOTTOM_RIGHT; 
-    X = wx;
-    W = widget.x()-X-3;
-  } else if ( (a & 0x0f) == FL_ALIGN_RIGHT_TOP ) {
-    a = (a &~0x0f ) | FL_ALIGN_TOP_LEFT; 
-    X = X+W+3;
-    W = wx+this->w()-X;
-  } else if ( (a & 0x0f) == FL_ALIGN_RIGHT_BOTTOM ) {
-    a = (a &~0x0f ) | FL_ALIGN_BOTTOM_LEFT; 
-    X = X+W+3;
-    W = wx+this->w()-X;
-  } else if (a & FL_ALIGN_TOP) {
-    a ^= (FL_ALIGN_BOTTOM|FL_ALIGN_TOP);
-    Y = wy;
-    H = widget.y()-Y;
-  } else if (a & FL_ALIGN_BOTTOM) {
-    a ^= (FL_ALIGN_BOTTOM|FL_ALIGN_TOP);
-    Y = Y+H;
-    H = wy+h()-Y;
-  } else if (a & FL_ALIGN_LEFT) {
-    a ^= (FL_ALIGN_LEFT|FL_ALIGN_RIGHT);
-    X = wx;
-    W = widget.x()-X-3;
-  } else if (a & FL_ALIGN_RIGHT) {
-    a ^= (FL_ALIGN_LEFT|FL_ALIGN_RIGHT);
-    X = X+W+3;
-    W = wx+this->w()-X;
-  }
-  widget.draw_label(X,Y,W,H,(Fl_Align)a);
-}
-
-//
-// End of "$Id: Fl_Group.cxx 8184 2011-01-04 18:28:01Z matt $".
-//
diff --git a/common/fltk/src/Fl_Help_Dialog.fl b/common/fltk/src/Fl_Help_Dialog.fl
deleted file mode 100644
index d61a353..0000000
--- a/common/fltk/src/Fl_Help_Dialog.fl
+++ /dev/null
@@ -1,265 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0108 
-header_name {../FL/Fl_Help_Dialog.H} 
-code_name {.cxx}
-comment {//
-// "$Id: Fl_Help_Dialog.fl 7913 2010-11-29 18:18:27Z greg.ercolano $"
-//
-// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-} {in_source in_header
-} 
-
-decl {\#include "flstring.h"} {} 
-
-decl {\#include <FL/fl_ask.H>} {} 
-
-class FL_EXPORT Fl_Help_Dialog {open
-} {
-  decl {int index_;} {}
-  decl {int max_;} {}
-  decl {int line_[100];} {}
-  decl {char file_[100][256];} {}
-  decl {int find_pos_;} {}
-  Function {Fl_Help_Dialog()} {open
-  } {
-    Fl_Window window_ {
-      label {Help Dialog} open
-      private xywh {398 64 530 385} type Double resizable size_range {260 150 0 0} visible
-    } {
-      Fl_Group {} {open selected
-        xywh {10 10 511 25}
-      } {
-        Fl_Button back_ {
-          label {@<-}
-          callback {if (index_ > 0)
-  index_ --;
-
-if (index_ == 0)
-  back_->deactivate();
-
-forward_->activate();
-
-int l = line_[index_];
-
-if (strcmp(view_->filename(), file_[index_]) != 0)
-  view_->load(file_[index_]);
-
-view_->topline(l);}
-          private tooltip {Show the previous help page.} xywh {10 10 25 25} shortcut 0xff51 labelcolor 2
-        }
-        Fl_Button forward_ {
-          label {@->}
-          callback {if (index_ < max_)
-  index_ ++;
-
-if (index_ >= max_)
-  forward_->deactivate();
-
-back_->activate();
-
-int l = view_->topline();
-
-if (strcmp(view_->filename(), file_[index_]) != 0)
-  view_->load(file_[index_]);
-
-view_->topline(l);}
-          private tooltip {Show the next help page.} xywh {45 10 25 25} shortcut 0xff53 labelcolor 2
-        }
-        Fl_Button smaller_ {
-          label F
-          callback {if (view_->textsize() > 8)
-  view_->textsize(view_->textsize() - 2);
-
-if (view_->textsize() <= 8)
-  smaller_->deactivate();
-larger_->activate();}
-          private tooltip {Make the help text smaller.} xywh {80 10 25 25} labelfont 1 labelsize 10
-        }
-        Fl_Button larger_ {
-          label F
-          callback {if (view_->textsize() < 18)
-  view_->textsize(view_->textsize() + 2);
-
-if (view_->textsize() >= 18)
-  larger_->deactivate();
-smaller_->activate();}
-          private tooltip {Make the help text larger.} xywh {115 10 25 25} labelfont 1 labelsize 16
-        }
-        Fl_Group {} {open
-          xywh {350 10 171 25} box DOWN_BOX color 7
-        } {
-          Fl_Input find_ {
-            label {@search}
-            callback {find_pos_ = view_->find(find_->value(), find_pos_);}
-            private tooltip {find text in document} xywh {375 12 143 21} box FLAT_BOX labelsize 13 when 10 textfont 4
-          }
-        }
-        Fl_Box {} {
-          xywh {150 10 190 25} resizable
-        }
-      }
-      Fl_Help_View view_ {
-        callback {if (view_->filename())
-{
-  if (view_->changed())
-  {
-    index_ ++;
-
-    if (index_ >= 100)
-    {
-      memmove(line_, line_ + 10, sizeof(line_[0]) * 90);
-      memmove(file_, file_ + 10, sizeof(file_[0]) * 90);
-      index_ -= 10;
-    }
-
-    max_ = index_;
-
-    strlcpy(file_[index_], view_->filename(),sizeof(file_[0]));
-    line_[index_] = view_->topline();
-
-    if (index_ > 0)
-      back_->activate();
-    else
-      back_->deactivate();
-
-    forward_->deactivate();
-    window_->label(view_->title());
-  }
-  else // if ! view_->changed()
-  {
-    strlcpy(file_[index_], view_->filename(), sizeof(file_[0]));
-    line_[index_] = view_->topline();
-  }
-} else { // if ! view_->filename()
-  index_ = 0; // hitting an internal page will disable the back/fwd buffer
-  file_[index_][0] = 0; // unnamed internal page
-  line_[index_] = view_->topline();
-  back_->deactivate();
-  forward_->deactivate();
-}}
-        private xywh {10 45 510 330} box DOWN_BOX resizable
-      }
-    }
-    code {back_->deactivate();
-forward_->deactivate();
-
-index_    = -1;
-max_      = 0;
-find_pos_ = 0;
-
-fl_register_images();} {}
-  }
-  Function {~Fl_Help_Dialog()} {} {
-    code {delete window_;} {}
-  }
-  Function {h()} {return_type int
-  } {
-    code {return (window_->h());} {}
-  }
-  Function {hide()} {return_type void
-  } {
-    code {window_->hide();} {}
-  }
-  Function {load(const char *f)} {return_type void
-  } {
-    code {view_->set_changed();
-view_->load(f);
-window_->label(view_->title());} {}
-  }
-  Function {position(int xx, int yy)} {return_type void
-  } {
-    code {window_->position(xx, yy);} {}
-  }
-  Function {resize(int xx, int yy, int ww, int hh)} {return_type void
-  } {
-    code {window_->resize(xx, yy, ww, hh);} {}
-  }
-  Function {show()} {return_type void
-  } {
-    code {window_->show();} {}
-  }
-  Function {show(int argc, char **argv)} {return_type void
-  } {
-    code {window_->show(argc, argv);} {}
-  }
-  Function {textsize(Fl_Fontsize s)} {return_type void
-  } {
-    code {view_->textsize(s);
-
-if (s <= 8)
-  smaller_->deactivate();
-else
-  smaller_->activate();
-
-if (s >= 18)
-  larger_->deactivate();
-else
-  larger_->activate();} {}
-  }
-  Function {textsize()} {return_type Fl_Fontsize
-  } {
-    code {return (view_->textsize());} {}
-  }
-  Function {topline(const char *n)} {return_type void
-  } {
-    code {view_->topline(n);} {}
-  }
-  Function {topline(int n)} {return_type void
-  } {
-    code {view_->topline(n);} {}
-  }
-  Function {value(const char *f)} {return_type void
-  } {
-    code {view_->set_changed();
-view_->value(f);
-window_->label(view_->title());} {}
-  }
-  Function {value() const} {return_type {const char *}
-  } {
-    code {return view_->value();} {}
-  }
-  Function {visible()} {return_type int
-  } {
-    code {return (window_->visible());} {}
-  }
-  Function {w()} {return_type int
-  } {
-    code {return (window_->w());} {}
-  }
-  Function {x()} {return_type int
-  } {
-    code {return (window_->x());} {}
-  }
-  Function {y()} {return_type int
-  } {
-    code {return (window_->y());} {}
-  }
-} 
-
-comment {
-//
-// End of "$Id: Fl_Help_Dialog.fl 7913 2010-11-29 18:18:27Z greg.ercolano $".
-//} {in_source in_header
-} 
diff --git a/common/fltk/src/Fl_Help_Dialog_Dox.cxx b/common/fltk/src/Fl_Help_Dialog_Dox.cxx
deleted file mode 100644
index 055b0d5..0000000
--- a/common/fltk/src/Fl_Help_Dialog_Dox.cxx
+++ /dev/null
@@ -1,120 +0,0 @@
-//
-// "$Id: Fl_Help_Dialog_Dox.cxx 7981 2010-12-08 23:53:04Z greg.ercolano $"
-//
-// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Fl_Help_Dialog (autogenerated class) doxygen documentation placeholder
-
-/** \class Fl_Help_Dialog
-  The Fl_Help_Dialog widget displays a standard help dialog window
-  using the Fl_Help_View widget.
-  
-  <P ALIGN=CENTER> \image html Fl_Help_Dialog.png </P> 
-  \image latex  Fl_Help_Dialog.png "Fl_Help_Dialog" width=8cm
-*/
-
-/** \fn Fl_Help_Dialog::Fl_Help_Dialog()
-  The constructor creates the dialog pictured above.*/
-
-/** \fn Fl_Help_Dialog::~Fl_Help_Dialog()
-  The destructor destroys the widget and frees all memory that has been
-  allocated for the current file.
-*/
-
-/** \fn void Fl_Help_Dialog::hide()
-  Hides the Fl_Help_Dialog window.*/
-
-/** \fn void Fl_Help_Dialog::load(const char *f)
-  Loads the specified HTML file into the Fl_Help_View widget.
-  The filename can also contain a target name ("filename.html#target").
-*/
-
-/** \fn void Fl_Help_Dialog::position(int x, int y)
-  Set the screen position of the dialog.*/
-
-/** \fn void Fl_Help_Dialog::resize(int xx, int yy, int ww, int hh)
-  Change the position and size of the dialog.*/
-
-/** \fn void Fl_Help_Dialog::show()
-  Shows the Fl_Help_Dialog window.*/
-
-/** \fn void Fl_Help_Dialog::textsize(Fl_Fontsize s)
-  Sets or gets the default text size for the help view.*/
-
-/** \fn uchar Fl_Help_Dialog::textsize()
-  Sets or gets the default text size for the help view.*/
-
-/** \fn void Fl_Help_Dialog::topline(const char *n)
-  Sets the top line in the Fl_Help_View widget to the named or
-  numbered line.
-*/
-
-/** \fn void Fl_Help_Dialog::topline(int n)
-  Sets the top line in the Fl_Help_View widget to the named or
-  numbered line.
-*/
-
-/** \fn void Fl_Help_Dialog::value(const char *v)
-  The first form sets the current buffer to the string provided and
-  reformats the text. It also clears the history of the "back" and
-  "forward" buttons. The second form returns the current buffer contents.
-*/
-
-/** \fn const char *Fl_Help_Dialog::value() const
-  The first form sets the current buffer to the string provided and
-  reformats the text. It also clears the history of the "back" and
-  "forward" buttons. The second form returns the current buffer contents.
-*/
-
-/** \fn int Fl_Help_Dialog::visible()
-  Returns 1 if the Fl_Help_Dialog window is visible.*/
-
-/** \fn int Fl_Help_Dialog::x()
-  Returns the position and size of the help dialog.*/
-
-/** \fn int Fl_Help_Dialog::y()
-  Returns the position and size of the help dialog.*/
-
-/** \fn int Fl_Help_Dialog::w()
-  Returns the position and size of the help dialog.*/
-
-/** \fn int Fl_Help_Dialog::h()
-  Returns the position and size of the help dialog.*/
-
-/** \fn void Fl_Help_Dialog::show()
-  Shows the main Help Dialog Window
-  Delegates call to encapsulated window_ void Fl_Window::show() method */
-
-/** \fn void Fl_Help_Dialog::show(int argc, char **argv)
-  Shows the main Help Dialog Window
-  Delegates call to encapsulated window_ void Fl_Window::show(int argc, char **argv) instance method */
-
-/** \fn void Fl_Help_Dialog::textsize(Fl_Fontsize s)
-  Sets the internal Fl_Help_View instance text size.
-  Delegates call to encapsulated view_ void Fl_Help_View::textsize(Fl_Fontsize s) instance method */
-
-//
-// End of "$Id: Fl_Help_Dialog_Dox.cxx 7981 2010-12-08 23:53:04Z greg.ercolano $".
-//
diff --git a/common/fltk/src/Fl_Help_View.cxx b/common/fltk/src/Fl_Help_View.cxx
deleted file mode 100644
index 1b31a89..0000000
--- a/common/fltk/src/Fl_Help_View.cxx
+++ /dev/null
@@ -1,3519 +0,0 @@
-//
-// "$Id: Fl_Help_View.cxx 8063 2010-12-19 21:20:10Z matt $"
-//
-// Fl_Help_View widget routines.
-//
-// Copyright 1997-2010 by Easy Software Products.
-// Image support by Matthias Melcher, Copyright 2000-2009.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_Help_View::add_block()       - Add a text block to the list.
-//   Fl_Help_View::add_link()        - Add a new link to the list.
-//   Fl_Help_View::add_target()      - Add a new target to the list.
-//   Fl_Help_View::compare_targets() - Compare two targets.
-//   Fl_Help_View::do_align()        - Compute the alignment for a line in
-//                                     a block.
-//   Fl_Help_View::draw()            - Draw the Fl_Help_View widget.
-//   Fl_Help_View::format()          - Format the help text.
-//   Fl_Help_View::format_table()    - Format a table...
-//   Fl_Help_View::free_data()       - Free memory used for the document.
-//   Fl_Help_View::get_align()       - Get an alignment attribute.
-//   Fl_Help_View::get_attr()        - Get an attribute value from the string.
-//   Fl_Help_View::get_color()       - Get an alignment attribute.
-//   Fl_Help_View::handle()          - Handle events in the widget.
-//   Fl_Help_View::Fl_Help_View()    - Build a Fl_Help_View widget.
-//   Fl_Help_View::~Fl_Help_View()   - Destroy a Fl_Help_View widget.
-//   Fl_Help_View::load()            - Load the specified file.
-//   Fl_Help_View::resize()          - Resize the help widget.
-//   Fl_Help_View::topline()         - Set the top line to the named target.
-//   Fl_Help_View::topline()         - Set the top line by number.
-//   Fl_Help_View::value()           - Set the help text directly.
-//   scrollbar_callback()            - A callback for the scrollbar.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl_Help_View.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/x.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include <FL/filename.H>	// fl_open_uri()
-#include "flstring.h"
-#include <ctype.h>
-#include <errno.h>
-#include <math.h>
-
-#if defined(WIN32) && ! defined(__CYGWIN__)
-#  include <io.h>
-#  include <direct.h>
-#else
-#  include <unistd.h>
-#endif // WIN32
-
-#define MAX_COLUMNS	200
-
-
-//
-// Typedef the C API sort function type the only way I know how...
-//
-
-extern "C"
-{
-  typedef int (*compare_func_t)(const void *, const void *);
-}
-
-
-//
-// Local functions...
-//
-
-static int	quote_char(const char *);
-static void	scrollbar_callback(Fl_Widget *s, void *);
-static void	hscrollbar_callback(Fl_Widget *s, void *);
-
-//
-// global flag for image loading (see get_image).
-//
-
-static char initial_load = 0;
-
-//
-// Broken image...
-//
-
-static const char *broken_xpm[] =
-		{
-		  "16 24 4 1",
-		  "@ c #000000",
-		  "  c #ffffff",
-		  "+ c none",
-		  "x c #ff0000",
-		  // pixels
-		  "@@@@@@@+++++++++",
-		  "@    @++++++++++",
-		  "@   @+++++++++++",
-		  "@   @++@++++++++",
-		  "@    @@+++++++++",
-		  "@     @+++@+++++",
-		  "@     @++@@++++@",
-		  "@ xxx  @@  @++@@",
-		  "@  xxx    xx@@ @",
-		  "@   xxx  xxx   @",
-		  "@    xxxxxx    @",
-		  "@     xxxx     @",
-		  "@    xxxxxx    @",
-		  "@   xxx  xxx   @",
-		  "@  xxx    xxx  @",
-		  "@ xxx      xxx @",
-		  "@              @",
-		  "@              @",
-		  "@              @",
-		  "@              @",
-		  "@              @",
-		  "@              @",
-		  "@              @",
-		  "@@@@@@@@@@@@@@@@",
-		  NULL
-		};
-
-static Fl_Pixmap broken_image(broken_xpm);
-
-//
-// Simple margin stack for Fl_Help_View::format()...
-//
-
-struct fl_margins {
-  int depth_;
-  int margins_[100];
-
-  fl_margins() { clear();  }
-
-  int clear() {
-//    puts("fl_margins::clear()");
-
-    depth_ = 0;
-    return margins_[0] = 4;
-  }
-
-  int current() { return margins_[depth_]; }
-
-  int pop() {
-//    printf("fl_margins::pop(): depth_=%d, xx=%d\n", depth_,
-//           depth_ > 0 ? margins_[depth_ - 1] : 4);
-
-    if (depth_ > 0) {
-      depth_ --;
-      return margins_[depth_];
-    } else return 4;
-  }
-
-  int push(int indent) {
-    int xx;
-
-    xx = margins_[depth_] + indent;
-
-//    printf("fl_margins::push(indent=%d): depth_=%d, xx=%d\n", indent,
-//           depth_ + 1, xx);
-
-    if (depth_ < 99) {
-      depth_ ++;
-      margins_[depth_] = xx;
-    }
-
-    return xx;
-  }
-};
-
-//
-// All the stuff needed to implement text selection in Fl_Help_View
-//
-
-/* matt:
- * We are trying to keep binary compatibility with previous versions
- * of FLTK. This means that we are limited to adding static variables
- * only to not enlarge the Fl_Help_View class. Lucky for us, only one
- * text can be selected system wide, so we can remember the selection
- * in a single set of variables.
- *
- * Still to do:
- * - &word; style characters mess up our count inside a word boundary
- * - we can only select words, no individual characters
- * - no dragging of the selection into another widget
- * - selection must be cleared if another widget get focus!
- * - write a comment for every new function
- */
-
-/*
-The following functions are also used to draw stuff and should be replaced with
-local copies that are much faster when merely counting:
-
-fl_color(Fl_Color);
-fl_rectf(int, int, int, int);
-fl_push_clip(int, int, int, int);
-fl_xyline(int, int, int);
-fl_rect()
-fl_line()
-img->draw()
-*/
-
-// We don't put the offscreen buffer in the help view class because
-// we'd need to include x.H in the header...
-static Fl_Offscreen fl_help_view_buffer;
-int Fl_Help_View::selection_first = 0;
-int Fl_Help_View::selection_last = 0;
-int Fl_Help_View::selection_push_first = 0;
-int Fl_Help_View::selection_push_last = 0;
-int Fl_Help_View::selection_drag_first = 0;
-int Fl_Help_View::selection_drag_last = 0;
-int Fl_Help_View::selected = 0;
-int Fl_Help_View::draw_mode = 0;
-int Fl_Help_View::mouse_x = 0;
-int Fl_Help_View::mouse_y = 0;
-int Fl_Help_View::current_pos = 0;
-Fl_Help_View *Fl_Help_View::current_view = 0L;
-Fl_Color Fl_Help_View::hv_selection_color;
-Fl_Color Fl_Help_View::hv_selection_text_color;
-
-/*
- * Limitation: if a word contains &code; notations, we will calculate a wrong length.
- *
- * This function must be optimized for speed!
- */
-void Fl_Help_View::hv_draw(const char *t, int x, int y)
-{
-  if (selected && current_view==this && current_pos<selection_last && current_pos>=selection_first) {
-    Fl_Color c = fl_color();
-    fl_color(hv_selection_color);
-    int w = (int)fl_width(t);
-    if (current_pos+(int)strlen(t)<selection_last) 
-      w += (int)fl_width(' ');
-    fl_rectf(x, y+fl_descent()-fl_height(), w, fl_height());
-    fl_color(hv_selection_text_color);
-    fl_draw(t, x, y);
-    fl_color(c);
-  } else {
-    fl_draw(t, x, y);
-  }
-  if (draw_mode) {
-    int w = (int)fl_width(t);
-    if (mouse_x>=x && mouse_x<x+w) {
-      if (mouse_y>=y-fl_height()+fl_descent()&&mouse_y<=y+fl_descent()) {
-        int f = current_pos;
-        int l = f+strlen(t); // use 'quote_char' to calculate the true length of the HTML string
-        if (draw_mode==1) {
-          selection_push_first = f;
-          selection_push_last = l;
-        } else {
-          selection_drag_first = f;
-          selection_drag_last = l;
-        }
-      }
-    }
-  }
-}
-
-
-/** Adds a text block to the list. */
-Fl_Help_Block *					// O - Pointer to new block
-Fl_Help_View::add_block(const char   *s,	// I - Pointer to start of block text
-                	int           xx,	// I - X position of block
-			int           yy,	// I - Y position of block
-			int           ww,	// I - Right margin of block
-			int           hh,	// I - Height of block
-			unsigned char border)	// I - Draw border?
-{
-  Fl_Help_Block	*temp;				// New block
-
-
-//  printf("add_block(s = %p, xx = %d, yy = %d, ww = %d, hh = %d, border = %d)\n",
-//         s, xx, yy, ww, hh, border);
-
-  if (nblocks_ >= ablocks_)
-  {
-    ablocks_ += 16;
-
-    if (ablocks_ == 16)
-      blocks_ = (Fl_Help_Block *)malloc(sizeof(Fl_Help_Block) * ablocks_);
-    else
-      blocks_ = (Fl_Help_Block *)realloc(blocks_, sizeof(Fl_Help_Block) * ablocks_);
-  }
-
-  temp = blocks_ + nblocks_;
-  memset(temp, 0, sizeof(Fl_Help_Block));
-  temp->start   = s;
-  temp->end     = s;
-  temp->x       = xx;
-  temp->y       = yy;
-  temp->w       = ww;
-  temp->h       = hh;
-  temp->border  = border;
-  temp->bgcolor = bgcolor_;
-  nblocks_ ++;
-
-  return (temp);
-}
-
-
-/** Adds a new link to the list. */
-void Fl_Help_View::add_link(const char *n,	// I - Name of link
-                      int        xx,	// I - X position of link
-		      int        yy,	// I - Y position of link
-		      int        ww,	// I - Width of link text
-		      int        hh)	// I - Height of link text
-{
-  Fl_Help_Link	*temp;			// New link
-  char		*target;		// Pointer to target name
-
-
-  if (nlinks_ >= alinks_)
-  {
-    alinks_ += 16;
-
-    if (alinks_ == 16)
-      links_ = (Fl_Help_Link *)malloc(sizeof(Fl_Help_Link) * alinks_);
-    else
-      links_ = (Fl_Help_Link *)realloc(links_, sizeof(Fl_Help_Link) * alinks_);
-  }
-
-  temp = links_ + nlinks_;
-
-  temp->x       = xx;
-  temp->y       = yy;
-  temp->w       = xx + ww;
-  temp->h       = yy + hh;
-
-  strlcpy(temp->filename, n, sizeof(temp->filename));
-
-  if ((target = strrchr(temp->filename, '#')) != NULL)
-  {
-    *target++ = '\0';
-    strlcpy(temp->name, target, sizeof(temp->name));
-  }
-  else
-    temp->name[0] = '\0';
-
-  nlinks_ ++;
-}
-
-
-/** Adds a new target to the list. */
-void Fl_Help_View::add_target(const char *n,	// I - Name of target
-			      int        yy)	// I - Y position of target
-{
-  Fl_Help_Target	*temp;			// New target
-
-
-  if (ntargets_ >= atargets_)
-  {
-    atargets_ += 16;
-
-    if (atargets_ == 16)
-      targets_ = (Fl_Help_Target *)malloc(sizeof(Fl_Help_Target) * atargets_);
-    else
-      targets_ = (Fl_Help_Target *)realloc(targets_, sizeof(Fl_Help_Target) * atargets_);
-  }
-
-  temp = targets_ + ntargets_;
-
-  temp->y = yy;
-  strlcpy(temp->name, n, sizeof(temp->name));
-
-  ntargets_ ++;
-}
-
-/** Compares two targets.*/
-int							// O - Result of comparison
-Fl_Help_View::compare_targets(const Fl_Help_Target *t0,	// I - First target
-                             const Fl_Help_Target *t1)	// I - Second target
-{
-  return (strcasecmp(t0->name, t1->name));
-}
-
-/** Computes the alignment for a line in a block.*/
-int						// O - New line
-Fl_Help_View::do_align(Fl_Help_Block *block,	// I - Block to add to
-                      int          line,	// I - Current line
-		      int          xx,		// I - Current X position
-		      int          a,		// I - Current alignment
-		      int          &l)		// IO - Starting link
-{
-  int	offset;					// Alignment offset
-
-
-  switch (a)
-  {
-    case RIGHT :	// Right align
-	offset = block->w - xx;
-	break;
-    case CENTER :	// Center
-	offset = (block->w - xx) / 2;
-	break;
-    default :		// Left align
-	offset = 0;
-	break;
-  }
-
-  block->line[line] = block->x + offset;
-
-  if (line < 31)
-    line ++;
-
-  while (l < nlinks_)
-  {
-    links_[l].x += offset;
-    links_[l].w += offset;
-    l ++;
-  }
-
-  return (line);
-}
-
-/** Draws the Fl_Help_View widget. */
-void
-Fl_Help_View::draw()
-{
-  int			i;		// Looping var
-  const Fl_Help_Block	*block;		// Pointer to current block
-  const char		*ptr,		// Pointer to text in block
-			*attrs;		// Pointer to start of element attributes
-  char			*s,		// Pointer into buffer
-			buf[1024],	// Text buffer
-			attr[1024];	// Attribute buffer
-  int			xx, yy, ww, hh;	// Current positions and sizes
-  int			line;		// Current line
-  Fl_Font               font;
-  Fl_Fontsize           fsize;          // Current font and size
-  Fl_Color              fcolor;         // current font color 
-  int			head, pre,	// Flags for text
-			needspace;	// Do we need whitespace?
-  Fl_Boxtype		b = box() ? box() : FL_DOWN_BOX;
-					// Box to draw...
-  int			underline,	// Underline text?
-                        xtra_ww;        // Extra width for underlined space between words
-
-  // Draw the scrollbar(s) and box first...
-  ww = w();
-  hh = h();
-  i  = 0;
-
-  draw_box(b, x(), y(), ww, hh, bgcolor_);
-
-  if ( hscrollbar_.visible() || scrollbar_.visible() ) {
-    int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-    int hor_vis = hscrollbar_.visible();
-    int ver_vis = scrollbar_.visible();
-    // Scrollbar corner
-    int scorn_x = x() + ww - (ver_vis?scrollsize:0) - Fl::box_dw(b) + Fl::box_dx(b);
-    int scorn_y = y() + hh - (hor_vis?scrollsize:0) - Fl::box_dh(b) + Fl::box_dy(b);
-    if ( hor_vis ) {
-      if ( hscrollbar_.h() != scrollsize ) {		// scrollsize changed?
-	hscrollbar_.resize(x(), scorn_y, scorn_x - x(), scrollsize);
-	init_sizes();
-      }
-      draw_child(hscrollbar_);
-      hh -= scrollsize;
-    }
-    if ( ver_vis ) {
-      if ( scrollbar_.w() != scrollsize ) {		// scrollsize changed?
-	scrollbar_.resize(scorn_x, y(), scrollsize, scorn_y - y());
-	init_sizes();
-      }
-      draw_child(scrollbar_);
-      ww -= scrollsize;
-    }
-    if ( hor_vis && ver_vis ) {
-      // Both scrollbars visible? Draw little gray box in corner
-      fl_color(FL_GRAY);
-      fl_rectf(scorn_x, scorn_y, scrollsize, scrollsize);
-    }
-  }
-
-  if (!value_)
-    return;
-
-  if (current_view == this && selected) {
-    hv_selection_color      = FL_SELECTION_COLOR;
-    hv_selection_text_color = fl_contrast(textcolor_, FL_SELECTION_COLOR);
-  }
-  current_pos = 0;
-
-  // Clip the drawing to the inside of the box...
-  fl_push_clip(x() + Fl::box_dx(b), y() + Fl::box_dy(b),
-               ww - Fl::box_dw(b), hh - Fl::box_dh(b));
-  fl_color(textcolor_);
-
-  // Draw all visible blocks...
-  for (i = 0, block = blocks_; i < nblocks_; i ++, block ++)
-    if ((block->y + block->h) >= topline_ && block->y < (topline_ + h()))
-    {
-      line      = 0;
-      xx        = block->line[line];
-      yy        = block->y - topline_;
-      hh        = 0;
-      pre       = 0;
-      head      = 0;
-      needspace = 0;
-      underline = 0;
-
-      initfont(font, fsize, fcolor);
-
-      for (ptr = block->start, s = buf; ptr < block->end;)
-      {
-	if ((*ptr == '<' || isspace((*ptr)&255)) && s > buf)
-	{
-	  if (!head && !pre)
-	  {
-            // Check width...
-            *s = '\0';
-            s  = buf;
-            ww = (int)fl_width(buf);
-
-            if (needspace && xx > block->x)
-	      xx += (int)fl_width(' ');
-
-            if ((xx + ww) > block->w)
-	    {
-	      if (line < 31)
-	        line ++;
-	      xx = block->line[line];
-	      yy += hh;
-	      hh = 0;
-	    }
-
-            hv_draw(buf, xx + x() - leftline_, yy + y());
-	    if (underline) {
-              xtra_ww = isspace((*ptr)&255)?(int)fl_width(' '):0;
-              fl_xyline(xx + x() - leftline_, yy + y() + 1,
-	                xx + x() - leftline_ + ww + xtra_ww);
-            }
-            current_pos = ptr-value_;
-
-            xx += ww;
-	    if ((fsize + 2) > hh)
-	      hh = fsize + 2;
-
-	    needspace = 0;
-	  }
-	  else if (pre)
-	  {
-	    while (isspace((*ptr)&255))
-	    {
-	      if (*ptr == '\n')
-	      {
-	        *s = '\0';
-                s = buf;
-
-                hv_draw(buf, xx + x() - leftline_, yy + y());
-		if (underline) fl_xyline(xx + x() - leftline_, yy + y() + 1,
-	                        	 xx + x() - leftline_ +
-					     (int)fl_width(buf));
-
-                current_pos = ptr-value_;
-		if (line < 31)
-	          line ++;
-		xx = block->line[line];
-		yy += hh;
-		hh = fsize + 2;
-	      }
-	      else if (*ptr == '\t')
-	      {
-		// Do tabs every 8 columns...
-		while (((s - buf) & 7))
-	          *s++ = ' ';
-	      }
-	      else
-	        *s++ = ' ';
-
-              if ((fsize + 2) > hh)
-	        hh = fsize + 2;
-
-              ptr ++;
-	    }
-
-            if (s > buf)
-	    {
-	      *s = '\0';
-	      s = buf;
-
-              hv_draw(buf, xx + x() - leftline_, yy + y());
-	      ww = (int)fl_width(buf);
-	      if (underline) fl_xyline(xx + x() - leftline_, yy + y() + 1,
-	                               xx + x() - leftline_ + ww);
-              xx += ww;
-              current_pos = ptr-value_;
-	    }
-
-	    needspace = 0;
-	  }
-	  else
-	  {
-            s = buf;
-
-	    while (isspace((*ptr)&255))
-              ptr ++;
-            current_pos = ptr-value_;
-	  }
-	}
-
-	if (*ptr == '<')
-	{
-	  ptr ++;
-
-          if (strncmp(ptr, "!--", 3) == 0)
-	  {
-	    // Comment...
-	    ptr += 3;
-	    if ((ptr = strstr(ptr, "-->")) != NULL)
-	    {
-	      ptr += 3;
-	      continue;
-	    }
-	    else
-	      break;
-	  }
-
-	  while (*ptr && *ptr != '>' && !isspace((*ptr)&255))
-            if (s < (buf + sizeof(buf) - 1))
-	      *s++ = *ptr++;
-	    else
-	      ptr ++;
-
-	  *s = '\0';
-	  s = buf;
-
-	  attrs = ptr;
-	  while (*ptr && *ptr != '>')
-            ptr ++;
-
-	  if (*ptr == '>')
-            ptr ++;
-
-          // end of command reached, set the supposed start of printed eord here
-          current_pos = ptr-value_;
-	  if (strcasecmp(buf, "HEAD") == 0)
-            head = 1;
-	  else if (strcasecmp(buf, "BR") == 0)
-	  {
-	    if (line < 31)
-	      line ++;
-	    xx = block->line[line];
-            yy += hh;
-	    hh = 0;
-	  }
-	  else if (strcasecmp(buf, "HR") == 0)
-	  {
-	    fl_line(block->x + x(), yy + y(), block->w + x(),
-	            yy + y());
-
-	    if (line < 31)
-	      line ++;
-	    xx = block->line[line];
-            yy += 2 * hh;
-	    hh = 0;
-	  }
-	  else if (strcasecmp(buf, "CENTER") == 0 ||
-        	   strcasecmp(buf, "P") == 0 ||
-        	   strcasecmp(buf, "H1") == 0 ||
-		   strcasecmp(buf, "H2") == 0 ||
-		   strcasecmp(buf, "H3") == 0 ||
-		   strcasecmp(buf, "H4") == 0 ||
-		   strcasecmp(buf, "H5") == 0 ||
-		   strcasecmp(buf, "H6") == 0 ||
-		   strcasecmp(buf, "UL") == 0 ||
-		   strcasecmp(buf, "OL") == 0 ||
-		   strcasecmp(buf, "DL") == 0 ||
-		   strcasecmp(buf, "LI") == 0 ||
-		   strcasecmp(buf, "DD") == 0 ||
-		   strcasecmp(buf, "DT") == 0 ||
-		   strcasecmp(buf, "PRE") == 0)
-	  {
-            if (tolower(buf[0]) == 'h')
-	    {
-	      font  = FL_HELVETICA_BOLD;
-	      fsize = textsize_ + '7' - buf[1];
-	    }
-	    else if (strcasecmp(buf, "DT") == 0)
-	    {
-	      font  = textfont_ | FL_ITALIC;
-	      fsize = textsize_;
-	    }
-	    else if (strcasecmp(buf, "PRE") == 0)
-	    {
-	      font  = FL_COURIER;
-	      fsize = textsize_;
-	      pre   = 1;
-	    }
-
-            if (strcasecmp(buf, "LI") == 0)
-	    {
-//            fl_font(FL_SYMBOL, fsize); // The default SYMBOL font on my XP box is not Unicode...
-              char buf[8];
-              wchar_t b[] = {0x2022, 0x0};
-//            buf[fl_unicode2utf(b, 1, buf)] = 0;
-              unsigned dstlen = fl_utf8fromwc(buf, 8, b, 1);
-              buf[dstlen] = 0;
-              hv_draw(buf, xx - fsize + x() - leftline_, yy + y());
-	    }
-
-	    pushfont(font, fsize);
-	  }
-	  else if (strcasecmp(buf, "A") == 0 &&
-	           get_attr(attrs, "HREF", attr, sizeof(attr)) != NULL)
-	  {
-	    fl_color(linkcolor_);
-	    underline = 1;
-	  }
-	  else if (strcasecmp(buf, "/A") == 0)
-	  {
-	    fl_color(textcolor_);
-	    underline = 0;
-	  }
-	  else if (strcasecmp(buf, "FONT") == 0)
-	  {
-	    if (get_attr(attrs, "COLOR", attr, sizeof(attr)) != NULL) {
-	      textcolor_ = get_color(attr, textcolor_);
-	    }
-
-            if (get_attr(attrs, "FACE", attr, sizeof(attr)) != NULL) {
-	      if (!strncasecmp(attr, "helvetica", 9) ||
-	          !strncasecmp(attr, "arial", 5) ||
-		  !strncasecmp(attr, "sans", 4)) font = FL_HELVETICA;
-              else if (!strncasecmp(attr, "times", 5) ||
-	               !strncasecmp(attr, "serif", 5)) font = FL_TIMES;
-              else if (!strncasecmp(attr, "symbol", 6)) font = FL_SYMBOL;
-	      else font = FL_COURIER;
-            }
-
-            if (get_attr(attrs, "SIZE", attr, sizeof(attr)) != NULL) {
-              if (isdigit(attr[0] & 255)) {
-	        // Absolute size
-	        fsize = (int)(textsize_ * pow(1.2, atof(attr) - 3.0));
-	      } else {
-	        // Relative size
-	        fsize = (int)(fsize * pow(1.2, atof(attr) - 3.0));
-	      }
-	    }
-
-            pushfont(font, fsize);
-	  }
-	  else if (strcasecmp(buf, "/FONT") == 0)
-	  {
-	    popfont(font, fsize, textcolor_);
-	  }
-	  else if (strcasecmp(buf, "U") == 0)
-	    underline = 1;
-	  else if (strcasecmp(buf, "/U") == 0)
-	    underline = 0;
-	  else if (strcasecmp(buf, "B") == 0 ||
-	           strcasecmp(buf, "STRONG") == 0)
-	    pushfont(font |= FL_BOLD, fsize);
-	  else if (strcasecmp(buf, "TD") == 0 ||
-	           strcasecmp(buf, "TH") == 0)
-          {
-	    int tx, ty, tw, th;
-
-	    if (tolower(buf[1]) == 'h')
-	      pushfont(font |= FL_BOLD, fsize);
-	    else
-	      pushfont(font = textfont_, fsize);
-
-            tx = block->x - 4 - leftline_;
-	    ty = block->y - topline_ - fsize - 3;
-            tw = block->w - block->x + 7;
-	    th = block->h + fsize - 5;
-
-            if (tx < 0)
-	    {
-	      tw += tx;
-	      tx  = 0;
-	    }
-
-	    if (ty < 0)
-	    {
-	      th += ty;
-	      ty  = 0;
-	    }
-
-            tx += x();
-	    ty += y();
-
-            if (block->bgcolor != bgcolor_)
-	    {
-	      fl_color(block->bgcolor);
-              fl_rectf(tx, ty, tw, th);
-              fl_color(textcolor_);
-	    }
-
-            if (block->border)
-              fl_rect(tx, ty, tw, th);
-	  }
-	  else if (strcasecmp(buf, "I") == 0 ||
-                   strcasecmp(buf, "EM") == 0)
-	    pushfont(font |= FL_ITALIC, fsize);
-	  else if (strcasecmp(buf, "CODE") == 0 ||
-	           strcasecmp(buf, "TT") == 0)
-	    pushfont(font = FL_COURIER, fsize);
-	  else if (strcasecmp(buf, "KBD") == 0)
-	    pushfont(font = FL_COURIER_BOLD, fsize);
-	  else if (strcasecmp(buf, "VAR") == 0)
-	    pushfont(font = FL_COURIER_ITALIC, fsize);
-	  else if (strcasecmp(buf, "/HEAD") == 0)
-            head = 0;
-	  else if (strcasecmp(buf, "/H1") == 0 ||
-		   strcasecmp(buf, "/H2") == 0 ||
-		   strcasecmp(buf, "/H3") == 0 ||
-		   strcasecmp(buf, "/H4") == 0 ||
-		   strcasecmp(buf, "/H5") == 0 ||
-		   strcasecmp(buf, "/H6") == 0 ||
-		   strcasecmp(buf, "/B") == 0 ||
-		   strcasecmp(buf, "/STRONG") == 0 ||
-		   strcasecmp(buf, "/I") == 0 ||
-		   strcasecmp(buf, "/EM") == 0 ||
-		   strcasecmp(buf, "/CODE") == 0 ||
-		   strcasecmp(buf, "/TT") == 0 ||
-		   strcasecmp(buf, "/KBD") == 0 ||
-		   strcasecmp(buf, "/VAR") == 0)
-	    popfont(font, fsize, fcolor);
-	  else if (strcasecmp(buf, "/PRE") == 0)
-	  {
-	    popfont(font, fsize, fcolor);
-	    pre = 0;
-	  }
-	  else if (strcasecmp(buf, "IMG") == 0)
-	  {
-	    Fl_Shared_Image *img = 0;
-	    int		width, height;
-	    char	wattr[8], hattr[8];
-
-
-            get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
-            get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
-	    width  = get_length(wattr);
-	    height = get_length(hattr);
-
-	    if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
-	      img = get_image(attr, width, height);
-	      if (!width) width = img->w();
-	      if (!height) height = img->h();
-	    }
-
-	    if (!width || !height) {
-              if (get_attr(attrs, "ALT", attr, sizeof(attr)) == NULL) {
-	        strcpy(attr, "IMG");
-              }
-	    }
-
-	    ww = width;
-
-	    if (needspace && xx > block->x)
-	      xx += (int)fl_width(' ');
-
-	    if ((xx + ww) > block->w)
-	    {
-	      if (line < 31)
-		line ++;
-
-	      xx = block->line[line];
-	      yy += hh;
-	      hh = 0;
-	    }
-
-	    if (img) {
-	      img->draw(xx + x() - leftline_,
-	                yy + y() - fl_height() + fl_descent() + 2);
-	    }
-
-	    xx += ww;
-	    if ((height + 2) > hh)
-	      hh = height + 2;
-
-	    needspace = 0;
-	  }
-	}
-	else if (*ptr == '\n' && pre)
-	{
-	  *s = '\0';
-	  s = buf;
-
-          hv_draw(buf, xx + x() - leftline_, yy + y());
-
-	  if (line < 31)
-	    line ++;
-	  xx = block->line[line];
-	  yy += hh;
-	  hh = fsize + 2;
-	  needspace = 0;
-
-	  ptr ++;
-          current_pos = ptr-value_;
-	}
-	else if (isspace((*ptr)&255))
-	{
-	  if (pre)
-	  {
-	    if (*ptr == ' ')
-	      *s++ = ' ';
-	    else
-	    {
-	      // Do tabs every 8 columns...
-	      while (((s - buf) & 7))
-	        *s++ = ' ';
-            }
-	  }
-
-          ptr ++;
-          if (!pre) current_pos = ptr-value_;
-	  needspace = 1;
-	}
-	else if (*ptr == '&')
-	{
-	  ptr ++;
-
-          int qch = quote_char(ptr);
-
-	  if (qch < 0)
-	    *s++ = '&';
-	  else {
-            int l;
-            l = fl_utf8encode((unsigned int) qch, s);
-            if (l < 1) l = 1;
-            s += l;
-	    ptr = strchr(ptr, ';') + 1;
-	  }
-
-          if ((fsize + 2) > hh)
-	    hh = fsize + 2;
-	}
-	else
-	{
-	  *s++ = *ptr++;
-
-          if ((fsize + 2) > hh)
-	    hh = fsize + 2;
-        }
-      }
-
-      *s = '\0';
-
-      if (s > buf && !pre && !head)
-      {
-	ww = (int)fl_width(buf);
-
-        if (needspace && xx > block->x)
-	  xx += (int)fl_width(' ');
-
-	if ((xx + ww) > block->w)
-	{
-	  if (line < 31)
-	    line ++;
-	  xx = block->line[line];
-	  yy += hh;
-	  hh = 0;
-	}
-      }
-
-      if (s > buf && !head)
-      {
-        hv_draw(buf, xx + x() - leftline_, yy + y());
-	if (underline) fl_xyline(xx + x() - leftline_, yy + y() + 1,
-	                         xx + x() - leftline_ + ww);
-        current_pos = ptr-value_;
-      }
-    }
-
-  fl_pop_clip();
-}
-
-
-
-/** Finds the specified string \p s at starting position \p p.
-
-    \return the matching position or -1 if not found
-*/
-int						// O - Matching position or -1 if not found
-Fl_Help_View::find(const char *s,		// I - String to find
-                   int        p)		// I - Starting position
-{
-  int		i,				// Looping var
-		c;				// Current character
-  Fl_Help_Block	*b;				// Current block
-  const char	*bp,				// Block matching pointer
-		*bs,				// Start of current comparison
-		*sp;				// Search string pointer
-
-
-  // Range check input and value...
-  if (!s || !value_) return -1;
-
-  if (p < 0 || p >= (int)strlen(value_)) p = 0;
-  else if (p > 0) p ++;
-
-  // Look for the string...
-  for (i = nblocks_, b = blocks_; i > 0; i --, b ++) {
-    if (b->end < (value_ + p))
-      continue;
-
-    if (b->start < (value_ + p)) bp = value_ + p;
-    else bp = b->start;
-
-    for (sp = s, bs = bp; *sp && *bp && bp < b->end; bp ++) {
-      if (*bp == '<') {
-        // skip to end of element...
-	while (*bp && bp < b->end && *bp != '>') bp ++;
-	continue;
-      } else if (*bp == '&') {
-        // decode HTML entity...
-	if ((c = quote_char(bp + 1)) < 0) c = '&';
-	else bp = strchr(bp + 1, ';') + 1;
-      } else c = *bp;
-
-      if (tolower(*sp) == tolower(c)) sp ++;
-      else {
-        // No match, so reset to start of search...
-	sp = s;
-	bs ++;
-	bp = bs;
-      }
-    }
-
-    if (!*sp) {
-      // Found a match!
-      topline(b->y - b->h);
-      return (b->end - value_);
-    }
-  }
-
-  // No match!
-  return (-1);
-}
-
-/** Formats the help text. */
-void Fl_Help_View::format() {
-  int		i;		// Looping var
-  int		done;		// Are we done yet?
-  Fl_Help_Block	*block,		// Current block
-		*cell;		// Current table cell
-  int		cells[MAX_COLUMNS],
-				// Cells in the current row...
-		row;		// Current table row (block number)
-  const char	*ptr,		// Pointer into block
-		*start,		// Pointer to start of element
-		*attrs;		// Pointer to start of element attributes
-  char		*s,		// Pointer into buffer
-		buf[1024],	// Text buffer
-		attr[1024],	// Attribute buffer
-		wattr[1024],	// Width attribute buffer
-		hattr[1024],	// Height attribute buffer
-		linkdest[1024];	// Link destination
-  int		xx, yy, ww, hh;	// Size of current text fragment
-  int		line;		// Current line in block
-  int		links;		// Links for current line
-  Fl_Font       font;
-  Fl_Fontsize   fsize;          // Current font and size
-  Fl_Color      fcolor;         // Current font color
-  unsigned char	border;		// Draw border?
-  int		talign,		// Current alignment
-		newalign,	// New alignment
-		head,		// In the <HEAD> section?
-		pre,		// <PRE> text?
-		needspace;	// Do we need whitespace?
-  int		table_width,	// Width of table
-		table_offset;	// Offset of table
-  int		column,		// Current table column number
-		columns[MAX_COLUMNS];
-				// Column widths
-  Fl_Color	tc, rc;		// Table/row background color
-  Fl_Boxtype	b = box() ? box() : FL_DOWN_BOX;
-				// Box to draw...
-  fl_margins	margins;	// Left margin stack...
-
-
-  // Reset document width...
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  hsize_ = w() - scrollsize - Fl::box_dw(b);
-
-  done = 0;
-  while (!done)
-  {
-    // Reset state variables...
-    done       = 1;
-    nblocks_   = 0;
-    nlinks_    = 0;
-    ntargets_  = 0;
-    size_      = 0;
-    bgcolor_   = color();
-    textcolor_ = textcolor();
-    linkcolor_ = fl_contrast(FL_BLUE, color());
-
-    tc = rc = bgcolor_;
-
-    strcpy(title_, "Untitled");
-
-    if (!value_)
-      return;
-
-    // Setup for formatting...
-    initfont(font, fsize, fcolor);
-
-    line         = 0;
-    links        = 0;
-    xx           = margins.clear();
-    yy           = fsize + 2;
-    ww           = 0;
-    column       = 0;
-    border       = 0;
-    hh           = 0;
-    block        = add_block(value_, xx, yy, hsize_, 0);
-    row          = 0;
-    head         = 0;
-    pre          = 0;
-    talign       = LEFT;
-    newalign     = LEFT;
-    needspace    = 0;
-    linkdest[0]  = '\0';
-    table_offset = 0;
-
-    // Html text character loop
-    for (ptr = value_, s = buf; *ptr;)
-    {
-      // End of word?
-      if ((*ptr == '<' || isspace((*ptr)&255)) && s > buf)
-      {
-        // Get width of word parsed so far...
-        *s = '\0';
-        ww = (int)fl_width(buf);
-
-	if (!head && !pre)
-	{
-          // Check width...
-          if (ww > hsize_) {
-	    hsize_ = ww;
-	    done   = 0;
-	    break;
-	  }
-
-          if (needspace && xx > block->x)
-	    ww += (int)fl_width(' ');
-
-  //        printf("line = %d, xx = %d, ww = %d, block->x = %d, block->w = %d\n",
-  //	       line, xx, ww, block->x, block->w);
-
-          if ((xx + ww) > block->w)
-	  {
-            line     = do_align(block, line, xx, newalign, links);
-	    xx       = block->x;
-	    yy       += hh;
-	    block->h += hh;
-	    hh       = 0;
-	  }
-
-          if (linkdest[0])
-	    add_link(linkdest, xx, yy - fsize, ww, fsize);
-
-	  xx += ww;
-	  if ((fsize + 2) > hh)
-	    hh = fsize + 2;
-
-	  needspace = 0;
-	}
-	else if (pre)
-	{
-          // Add a link as needed...
-          if (linkdest[0])
-	    add_link(linkdest, xx, yy - hh, ww, hh);
-
-	  xx += ww;
-	  if ((fsize + 2) > hh)
-	    hh = fsize + 2;
-
-          // Handle preformatted text...
-	  while (isspace((*ptr)&255))
-	  {
-	    if (*ptr == '\n')
-	    {
-              if (xx > hsize_) break;
-
-              line     = do_align(block, line, xx, newalign, links);
-              xx       = block->x;
-	      yy       += hh;
-	      block->h += hh;
-	      hh       = fsize + 2;
-	    }
-	    else
-              xx += (int)fl_width(' ');
-
-            if ((fsize + 2) > hh)
-	      hh = fsize + 2;
-
-            ptr ++;
-	  }
-
-          if (xx > hsize_) {
-	    hsize_ = xx;
-	    done   = 0;
-	    break;
-	  }
-
-	  needspace = 0;
-	}
-	else
-	{
-          // Handle normal text or stuff in the <HEAD> section...
-	  while (isspace((*ptr)&255))
-            ptr ++;
-	}
-
-	s = buf;
-      }
-
-      if (*ptr == '<')
-      {
-	// Handle html tags..
-	start = ptr;
-	ptr ++;
-
-        if (strncmp(ptr, "!--", 3) == 0)
-	{
-	  // Comment...
-	  ptr += 3;
-	  if ((ptr = strstr(ptr, "-->")) != NULL)
-	  {
-	    ptr += 3;
-	    continue;
-	  }
-	  else
-	    break;
-	}
-
-	while (*ptr && *ptr != '>' && !isspace((*ptr)&255))
-          if (s < (buf + sizeof(buf) - 1))
-            *s++ = *ptr++;
-	  else
-	    ptr ++;
-
-	*s = '\0';
-	s = buf;
-
-//        puts(buf);
-
-	attrs = ptr;
-	while (*ptr && *ptr != '>')
-          ptr ++;
-
-	if (*ptr == '>')
-          ptr ++;
-
-	if (strcasecmp(buf, "HEAD") == 0)
-          head = 1;
-	else if (strcasecmp(buf, "/HEAD") == 0)
-          head = 0;
-	else if (strcasecmp(buf, "TITLE") == 0)
-	{
-          // Copy the title in the document...
-          for (s = title_;
-	       *ptr != '<' && *ptr && s < (title_ + sizeof(title_) - 1);
-	       *s++ = *ptr++);
-
-	  *s = '\0';
-	  s = buf;
-	}
-	else if (strcasecmp(buf, "A") == 0)
-	{
-          if (get_attr(attrs, "NAME", attr, sizeof(attr)) != NULL)
-	    add_target(attr, yy - fsize - 2);
-
-	  if (get_attr(attrs, "HREF", attr, sizeof(attr)) != NULL)
-	    strlcpy(linkdest, attr, sizeof(linkdest));
-	}
-	else if (strcasecmp(buf, "/A") == 0)
-          linkdest[0] = '\0';
-	else if (strcasecmp(buf, "BODY") == 0)
-	{
-          bgcolor_   = get_color(get_attr(attrs, "BGCOLOR", attr, sizeof(attr)),
-	                	 color());
-          textcolor_ = get_color(get_attr(attrs, "TEXT", attr, sizeof(attr)),
-	                	 textcolor());
-          linkcolor_ = get_color(get_attr(attrs, "LINK", attr, sizeof(attr)),
-	                	 fl_contrast(FL_BLUE, color()));
-	}
-	else if (strcasecmp(buf, "BR") == 0)
-	{
-          line     = do_align(block, line, xx, newalign, links);
-          xx       = block->x;
-	  block->h += hh;
-          yy       += hh;
-	  hh       = 0;
-	}
-	else if (strcasecmp(buf, "CENTER") == 0 ||
-        	 strcasecmp(buf, "P") == 0 ||
-        	 strcasecmp(buf, "H1") == 0 ||
-		 strcasecmp(buf, "H2") == 0 ||
-		 strcasecmp(buf, "H3") == 0 ||
-		 strcasecmp(buf, "H4") == 0 ||
-		 strcasecmp(buf, "H5") == 0 ||
-		 strcasecmp(buf, "H6") == 0 ||
-		 strcasecmp(buf, "UL") == 0 ||
-		 strcasecmp(buf, "OL") == 0 ||
-		 strcasecmp(buf, "DL") == 0 ||
-		 strcasecmp(buf, "LI") == 0 ||
-		 strcasecmp(buf, "DD") == 0 ||
-		 strcasecmp(buf, "DT") == 0 ||
-		 strcasecmp(buf, "HR") == 0 ||
-		 strcasecmp(buf, "PRE") == 0 ||
-		 strcasecmp(buf, "TABLE") == 0)
-	{
-          block->end = start;
-          line       = do_align(block, line, xx, newalign, links);
-	  newalign   = strcasecmp(buf, "CENTER") ? LEFT : CENTER;
-          xx         = block->x;
-          block->h   += hh;
-
-          if (strcasecmp(buf, "UL") == 0 ||
-	      strcasecmp(buf, "OL") == 0 ||
-	      strcasecmp(buf, "DL") == 0)
-          {
-	    block->h += fsize + 2;
-	    xx       = margins.push(4 * fsize);
-	  }
-          else if (strcasecmp(buf, "TABLE") == 0)
-	  {
-	    if (get_attr(attrs, "BORDER", attr, sizeof(attr)))
-	      border = (uchar)atoi(attr);
-	    else
-	      border = 0;
-
-            tc = rc = get_color(get_attr(attrs, "BGCOLOR", attr, sizeof(attr)), bgcolor_);
-
-	    block->h += fsize + 2;
-
-            format_table(&table_width, columns, start);
-
-            if ((xx + table_width) > hsize_) {
-#ifdef DEBUG
-              printf("xx=%d, table_width=%d, hsize_=%d\n", xx, table_width,
-	             hsize_);
-#endif // DEBUG
-	      hsize_ = xx + table_width;
-	      done   = 0;
-	      break;
-	    }
-
-            switch (get_align(attrs, talign))
-	    {
-	      default :
-	          table_offset = 0;
-	          break;
-
-	      case CENTER :
-	          table_offset = (hsize_ - table_width) / 2 - textsize_;
-	          break;
-
-	      case RIGHT :
-	          table_offset = hsize_ - table_width - textsize_;
-	          break;
-	    }
-
-	    column = 0;
-	  }
-
-          if (tolower(buf[0]) == 'h' && isdigit(buf[1]))
-	  {
-	    font  = FL_HELVETICA_BOLD;
-	    fsize = textsize_ + '7' - buf[1];
-	  }
-	  else if (strcasecmp(buf, "DT") == 0)
-	  {
-	    font  = textfont_ | FL_ITALIC;
-	    fsize = textsize_;
-	  }
-	  else if (strcasecmp(buf, "PRE") == 0)
-	  {
-	    font  = FL_COURIER;
-	    fsize = textsize_;
-	    pre   = 1;
-	  }
-	  else
-	  {
-	    font  = textfont_;
-	    fsize = textsize_;
-	  }
-
-	  pushfont(font, fsize);
-
-          yy = block->y + block->h;
-          hh = 0;
-
-          if ((tolower(buf[0]) == 'h' && isdigit(buf[1])) ||
-	      strcasecmp(buf, "DD") == 0 ||
-	      strcasecmp(buf, "DT") == 0 ||
-	      strcasecmp(buf, "P") == 0)
-            yy += fsize + 2;
-	  else if (strcasecmp(buf, "HR") == 0)
-	  {
-	    hh += 2 * fsize;
-	    yy += fsize;
-	  }
-
-          if (row)
-	    block = add_block(start, xx, yy, block->w, 0);
-	  else
-	    block = add_block(start, xx, yy, hsize_, 0);
-
-	  needspace = 0;
-	  line      = 0;
-
-	  if (strcasecmp(buf, "CENTER") == 0)
-	    newalign = talign = CENTER;
-	  else
-	    newalign = get_align(attrs, talign);
-	}
-	else if (strcasecmp(buf, "/CENTER") == 0 ||
-		 strcasecmp(buf, "/P") == 0 ||
-		 strcasecmp(buf, "/H1") == 0 ||
-		 strcasecmp(buf, "/H2") == 0 ||
-		 strcasecmp(buf, "/H3") == 0 ||
-		 strcasecmp(buf, "/H4") == 0 ||
-		 strcasecmp(buf, "/H5") == 0 ||
-		 strcasecmp(buf, "/H6") == 0 ||
-		 strcasecmp(buf, "/PRE") == 0 ||
-		 strcasecmp(buf, "/UL") == 0 ||
-		 strcasecmp(buf, "/OL") == 0 ||
-		 strcasecmp(buf, "/DL") == 0 ||
-		 strcasecmp(buf, "/TABLE") == 0)
-	{
-          line       = do_align(block, line, xx, newalign, links);
-          xx         = block->x;
-          block->end = ptr;
-
-          if (strcasecmp(buf, "/UL") == 0 ||
-	      strcasecmp(buf, "/OL") == 0 ||
-	      strcasecmp(buf, "/DL") == 0)
-	  {
-	    xx       = margins.pop();
-	    block->h += fsize + 2;
-	  }
-          else if (strcasecmp(buf, "/TABLE") == 0) 
-          {
-	    block->h += fsize + 2;
-            xx       = margins.current();
-          }
-	  else if (strcasecmp(buf, "/PRE") == 0)
-	  {
-	    pre = 0;
-	    hh  = 0;
-	  }
-	  else if (strcasecmp(buf, "/CENTER") == 0)
-	    talign = LEFT;
-
-          popfont(font, fsize, fcolor);
-
-	  //#if defined(__GNUC__)
-          //#warning FIXME this isspace & 255 test will probably not work on a utf8 stream... And we use it everywhere!
-	  //#endif /*__GNUC__*/
-          while (isspace((*ptr)&255))
-	    ptr ++;
-
-          block->h += hh;
-          yy       += hh;
-
-          if (tolower(buf[2]) == 'l')
-            yy += fsize + 2;
-
-          if (row)
-	    block = add_block(ptr, xx, yy, block->w, 0);
-	  else
-	    block = add_block(ptr, xx, yy, hsize_, 0);
-
-	  needspace = 0;
-	  hh        = 0;
-	  line      = 0;
-	  newalign  = talign;
-	}
-	else if (strcasecmp(buf, "TR") == 0)
-	{
-          block->end = start;
-          line       = do_align(block, line, xx, newalign, links);
-          xx         = block->x;
-          block->h   += hh;
-
-          if (row)
-	  {
-            yy = blocks_[row].y + blocks_[row].h;
-
-	    for (cell = blocks_ + row + 1; cell <= block; cell ++)
-	      if ((cell->y + cell->h) > yy)
-		yy = cell->y + cell->h;
-
-            block = blocks_ + row;
-
-            block->h = yy - block->y + 2;
-
-	    for (i = 0; i < column; i ++)
-	      if (cells[i])
-	      {
-		cell = blocks_ + cells[i];
-		cell->h = block->h;
-	      }
-	  }
-
-          memset(cells, 0, sizeof(cells));
-
-	  yy        = block->y + block->h - 4;
-	  hh        = 0;
-          block     = add_block(start, xx, yy, hsize_, 0);
-	  row       = block - blocks_;
-	  needspace = 0;
-	  column    = 0;
-	  line      = 0;
-
-          rc = get_color(get_attr(attrs, "BGCOLOR", attr, sizeof(attr)), tc);
-	}
-	else if (strcasecmp(buf, "/TR") == 0 && row)
-	{
-          line       = do_align(block, line, xx, newalign, links);
-          block->end = start;
-	  block->h   += hh;
-	  talign     = LEFT;
-
-          xx = blocks_[row].x;
-          yy = blocks_[row].y + blocks_[row].h;
-
-	  for (cell = blocks_ + row + 1; cell <= block; cell ++)
-	    if ((cell->y + cell->h) > yy)
-	      yy = cell->y + cell->h;
-
-          block = blocks_ + row;
-
-          block->h = yy - block->y + 2;
-
-	  for (i = 0; i < column; i ++)
-	    if (cells[i])
-	    {
-	      cell = blocks_ + cells[i];
-	      cell->h = block->h;
-	    }
-
-	  yy        = block->y + block->h /*- 4*/;
-          block     = add_block(start, xx, yy, hsize_, 0);
-	  needspace = 0;
-	  row       = 0;
-	  line      = 0;
-	}
-	else if ((strcasecmp(buf, "TD") == 0 ||
-                  strcasecmp(buf, "TH") == 0) && row)
-	{
-          int	colspan;		// COLSPAN attribute
-
-
-          line       = do_align(block, line, xx, newalign, links);
-          block->end = start;
-	  block->h   += hh;
-
-          if (strcasecmp(buf, "TH") == 0)
-	    font = textfont_ | FL_BOLD;
-	  else
-	    font = textfont_;
-
-          fsize = textsize_;
-
-          xx = blocks_[row].x + fsize + 3 + table_offset;
-	  for (i = 0; i < column; i ++)
-	    xx += columns[i] + 6;
-
-          margins.push(xx - margins.current());
-
-          if (get_attr(attrs, "COLSPAN", attr, sizeof(attr)) != NULL)
-	    colspan = atoi(attr);
-	  else
-	    colspan = 1;
-
-          for (i = 0, ww = -6; i < colspan; i ++)
-	    ww += columns[column + i] + 6;
-
-          if (block->end == block->start && nblocks_ > 1)
-	  {
-	    nblocks_ --;
-	    block --;
-	  }
-
-	  pushfont(font, fsize);
-
-	  yy        = blocks_[row].y;
-	  hh        = 0;
-          block     = add_block(start, xx, yy, xx + ww, 0, border);
-	  needspace = 0;
-	  line      = 0;
-	  newalign  = get_align(attrs, tolower(buf[1]) == 'h' ? CENTER : LEFT);
-	  talign    = newalign;
-
-          cells[column] = block - blocks_;
-
-	  column += colspan;
-
-          block->bgcolor = get_color(get_attr(attrs, "BGCOLOR", attr,
-	                                      sizeof(attr)), rc);
-	}
-	else if ((strcasecmp(buf, "/TD") == 0 ||
-                  strcasecmp(buf, "/TH") == 0) && row)
-	{
-          line = do_align(block, line, xx, newalign, links);
-          popfont(font, fsize, fcolor);
-	  xx = margins.pop();
-	  talign = LEFT;
-	}
-	else if (strcasecmp(buf, "FONT") == 0)
-	{
-          if (get_attr(attrs, "FACE", attr, sizeof(attr)) != NULL) {
-	    if (!strncasecmp(attr, "helvetica", 9) ||
-	        !strncasecmp(attr, "arial", 5) ||
-		!strncasecmp(attr, "sans", 4)) font = FL_HELVETICA;
-            else if (!strncasecmp(attr, "times", 5) ||
-	             !strncasecmp(attr, "serif", 5)) font = FL_TIMES;
-            else if (!strncasecmp(attr, "symbol", 6)) font = FL_SYMBOL;
-	    else font = FL_COURIER;
-          }
-
-          if (get_attr(attrs, "SIZE", attr, sizeof(attr)) != NULL) {
-            if (isdigit(attr[0] & 255)) {
-	      // Absolute size
-	      fsize = (int)(textsize_ * pow(1.2, atoi(attr) - 3.0));
-	    } else {
-	      // Relative size
-	      fsize = (int)(fsize * pow(1.2, atoi(attr)));
-	    }
-	  }
-
-          pushfont(font, fsize);
-	}
-	else if (strcasecmp(buf, "/FONT") == 0)
-	  popfont(font, fsize, fcolor);
-	else if (strcasecmp(buf, "B") == 0 ||
-        	 strcasecmp(buf, "STRONG") == 0)
-	  pushfont(font |= FL_BOLD, fsize);
-	else if (strcasecmp(buf, "I") == 0 ||
-        	 strcasecmp(buf, "EM") == 0)
-	  pushfont(font |= FL_ITALIC, fsize);
-	else if (strcasecmp(buf, "CODE") == 0 ||
-	         strcasecmp(buf, "TT") == 0)
-	  pushfont(font = FL_COURIER, fsize);
-	else if (strcasecmp(buf, "KBD") == 0)
-	  pushfont(font = FL_COURIER_BOLD, fsize);
-	else if (strcasecmp(buf, "VAR") == 0)
-	  pushfont(font = FL_COURIER_ITALIC, fsize);
-	else if (strcasecmp(buf, "/B") == 0 ||
-		 strcasecmp(buf, "/STRONG") == 0 ||
-		 strcasecmp(buf, "/I") == 0 ||
-		 strcasecmp(buf, "/EM") == 0 ||
-		 strcasecmp(buf, "/CODE") == 0 ||
-		 strcasecmp(buf, "/TT") == 0 ||
-		 strcasecmp(buf, "/KBD") == 0 ||
-		 strcasecmp(buf, "/VAR") == 0)
-	  popfont(font, fsize, fcolor);
-	else if (strcasecmp(buf, "IMG") == 0)
-	{
-	  Fl_Shared_Image	*img = 0;
-	  int		width;
-	  int		height;
-
-
-          get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
-          get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
-	  width  = get_length(wattr);
-	  height = get_length(hattr);
-
-	  if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
-	    img    = get_image(attr, width, height);
-	    width  = img->w();
-	    height = img->h();
-	  }
-
-	  ww = width;
-
-          if (ww > hsize_) {
-	    hsize_ = ww;
-	    done   = 0;
-	    break;
-	  }
-
-	  if (needspace && xx > block->x)
-	    ww += (int)fl_width(' ');
-
-	  if ((xx + ww) > block->w)
-	  {
-	    line     = do_align(block, line, xx, newalign, links);
-	    xx       = block->x;
-	    yy       += hh;
-	    block->h += hh;
-	    hh       = 0;
-	  }
-
-	  if (linkdest[0])
-	    add_link(linkdest, xx, yy - height, ww, height);
-
-	  xx += ww;
-	  if ((height + 2) > hh)
-	    hh = height + 2;
-
-	  needspace = 0;
-	}
-      }
-      else if (*ptr == '\n' && pre)
-      {
-	if (linkdest[0])
-	  add_link(linkdest, xx, yy - hh, ww, hh);
-
-        if (xx > hsize_) {
-	  hsize_ = xx;
-          done   = 0;
-	  break;
-	}
-
-	line      = do_align(block, line, xx, newalign, links);
-	xx        = block->x;
-	yy        += hh;
-	block->h  += hh;
-	needspace = 0;
-	ptr ++;
-      }
-      else if (isspace((*ptr)&255))
-      {
-	needspace = 1;
-	if ( pre ) {
-	  xx += (int)fl_width(' ');
-        }
-	ptr ++;
-      }
-      else if (*ptr == '&' && s < (buf + sizeof(buf) - 1))
-      {
-        // Handle html '&' codes, eg. "&amp;"
-	ptr ++;
-
-        int qch = quote_char(ptr);
-
-	if (qch < 0)
-	  *s++ = '&';
-	else {
-          int l;
-          l = fl_utf8encode((unsigned int) qch, s);
-          if (l < 1) l = 1;
-          s += l;
-	  ptr = strchr(ptr, ';') + 1;
-	}
-
-	if ((fsize + 2) > hh)
-          hh = fsize + 2;
-      }
-      else
-      {
-	if (s < (buf + sizeof(buf) - 1))
-          *s++ = *ptr++;
-	else
-          ptr ++;
-
-	if ((fsize + 2) > hh)
-          hh = fsize + 2;
-      }
-    }
-
-    if (s > buf && !head)
-    {
-      *s = '\0';
-      ww = (int)fl_width(buf);
-
-  //    printf("line = %d, xx = %d, ww = %d, block->x = %d, block->w = %d\n",
-  //	   line, xx, ww, block->x, block->w);
-
-      if (ww > hsize_) {
-	hsize_ = ww;
-	done   = 0;
-	break;
-      }
-
-      if (needspace && xx > block->x)
-	ww += (int)fl_width(' ');
-
-      if ((xx + ww) > block->w)
-      {
-	line     = do_align(block, line, xx, newalign, links);
-	xx       = block->x;
-	yy       += hh;
-	block->h += hh;
-	hh       = 0;
-      }
-
-      if (linkdest[0])
-	add_link(linkdest, xx, yy - fsize, ww, fsize);
-
-      xx += ww;
-    }
-
-    do_align(block, line, xx, newalign, links);
-
-    block->end = ptr;
-    size_      = yy + hh;
-  }
-
-//  printf("margins.depth_=%d\n", margins.depth_);
-
-  if (ntargets_ > 1)
-    qsort(targets_, ntargets_, sizeof(Fl_Help_Target),
-          (compare_func_t)compare_targets);
-
-  int dx = Fl::box_dw(b) - Fl::box_dx(b);
-  int dy = Fl::box_dh(b) - Fl::box_dy(b);
-  int ss = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  int dw = Fl::box_dw(b) + ss;
-  int dh = Fl::box_dh(b);
-
-  if (hsize_ > (w() - dw)) {
-    hscrollbar_.show();
-
-    dh += ss;
-
-    if (size_ < (h() - dh)) {
-      scrollbar_.hide();
-      hscrollbar_.resize(x() + Fl::box_dx(b), y() + h() - ss - dy,
-                         w() - Fl::box_dw(b), ss);
-    } else {
-      scrollbar_.show();
-      scrollbar_.resize(x() + w() - ss - dx, y() + Fl::box_dy(b),
-                        ss, h() - ss - Fl::box_dh(b));
-      hscrollbar_.resize(x() + Fl::box_dx(b), y() + h() - ss - dy,
-                         w() - ss - Fl::box_dw(b), ss);
-    }
-  } else {
-    hscrollbar_.hide();
-
-    if (size_ < (h() - dh)) scrollbar_.hide();
-    else {
-      scrollbar_.resize(x() + w() - ss - dx, y() + Fl::box_dy(b),
-                        ss, h() - Fl::box_dh(b));
-      scrollbar_.show();
-    }
-  }
-
-  // Reset scrolling if it needs to be...
-  if (scrollbar_.visible()) {
-    int temph = h() - Fl::box_dh(b);
-    if (hscrollbar_.visible()) temph -= ss;
-    if ((topline_ + temph) > size_) topline(size_ - temph);
-    else topline(topline_);
-  } else topline(0);
-
-  if (hscrollbar_.visible()) {
-    int tempw = w() - ss - Fl::box_dw(b);
-    if ((leftline_ + tempw) > hsize_) leftline(hsize_ - tempw);
-    else leftline(leftline_);
-  } else leftline(0);
-}
-
-
-/** Formats a table */
-void
-Fl_Help_View::format_table(int        *table_width,	// O - Total table width
-                           int        *columns,		// O - Column widths
-	                   const char *table)		// I - Pointer to start of table
-{
-  int		column,					// Current column
-		num_columns,				// Number of columns
-		colspan,				// COLSPAN attribute
-		width,					// Current width
-		temp_width,				// Temporary width
-		max_width,				// Maximum width
-		incell,					// In a table cell?
-		pre,					// <PRE> text?
-		needspace;				// Need whitespace?
-  char		*s,					// Pointer into buffer
-		buf[1024],				// Text buffer
-		attr[1024],				// Other attribute
-		wattr[1024],				// WIDTH attribute
-		hattr[1024];				// HEIGHT attribute
-  const char	*ptr,					// Pointer into table
-		*attrs,					// Pointer to attributes
-		*start;					// Start of element
-  int		minwidths[MAX_COLUMNS];			// Minimum widths for each column
-  Fl_Font       font;
-  Fl_Fontsize   fsize;				        // Current font and size
-  Fl_Color      fcolor;                                 // Currrent font color
-
-  // Clear widths...
-  *table_width = 0;
-  for (column = 0; column < MAX_COLUMNS; column ++)
-  {
-    columns[column]   = 0;
-    minwidths[column] = 0;
-  }
-
-  num_columns = 0;
-  colspan     = 0;
-  max_width   = 0;
-  pre         = 0;
-  needspace   = 0;
-  fstack_.top(font, fsize, fcolor);
-
-  // Scan the table...
-  for (ptr = table, column = -1, width = 0, s = buf, incell = 0; *ptr;)
-  {
-    if ((*ptr == '<' || isspace((*ptr)&255)) && s > buf && incell)
-    {
-      // Check width...
-      if (needspace)
-      {
-        *s++      = ' ';
-	needspace = 0;
-      }
-
-      *s         = '\0';
-      temp_width = (int)fl_width(buf);
-      s          = buf;
-
-      if (temp_width > minwidths[column])
-        minwidths[column] = temp_width;
-
-      width += temp_width;
-
-      if (width > max_width)
-        max_width = width;
-    }
-
-    if (*ptr == '<')
-    {
-      start = ptr;
-
-      for (s = buf, ptr ++; *ptr && *ptr != '>' && !isspace((*ptr)&255);)
-        if (s < (buf + sizeof(buf) - 1))
-          *s++ = *ptr++;
-	else
-	  ptr ++;
-
-      *s = '\0';
-      s = buf;
-
-      attrs = ptr;
-      while (*ptr && *ptr != '>')
-        ptr ++;
-
-      if (*ptr == '>')
-        ptr ++;
-
-      if (strcasecmp(buf, "BR") == 0 ||
-	  strcasecmp(buf, "HR") == 0)
-      {
-        width     = 0;
-	needspace = 0;
-      }
-      else if (strcasecmp(buf, "TABLE") == 0 && start > table)
-        break;
-      else if (strcasecmp(buf, "CENTER") == 0 ||
-               strcasecmp(buf, "P") == 0 ||
-               strcasecmp(buf, "H1") == 0 ||
-	       strcasecmp(buf, "H2") == 0 ||
-	       strcasecmp(buf, "H3") == 0 ||
-	       strcasecmp(buf, "H4") == 0 ||
-	       strcasecmp(buf, "H5") == 0 ||
-	       strcasecmp(buf, "H6") == 0 ||
-	       strcasecmp(buf, "UL") == 0 ||
-	       strcasecmp(buf, "OL") == 0 ||
-	       strcasecmp(buf, "DL") == 0 ||
-	       strcasecmp(buf, "LI") == 0 ||
-	       strcasecmp(buf, "DD") == 0 ||
-	       strcasecmp(buf, "DT") == 0 ||
-	       strcasecmp(buf, "PRE") == 0)
-      {
-        width     = 0;
-	needspace = 0;
-
-        if (tolower(buf[0]) == 'h' && isdigit(buf[1]))
-	{
-	  font  = FL_HELVETICA_BOLD;
-	  fsize = textsize_ + '7' - buf[1];
-	}
-	else if (strcasecmp(buf, "DT") == 0)
-	{
-	  font  = textfont_ | FL_ITALIC;
-	  fsize = textsize_;
-	}
-	else if (strcasecmp(buf, "PRE") == 0)
-	{
-	  font  = FL_COURIER;
-	  fsize = textsize_;
-	  pre   = 1;
-	}
-	else if (strcasecmp(buf, "LI") == 0)
-	{
-	  width  += 4 * fsize;
-	  font   = textfont_;
-	  fsize  = textsize_;
-	}
-	else
-	{
-	  font  = textfont_;
-	  fsize = textsize_;
-	}
-
-	pushfont(font, fsize);
-      }
-      else if (strcasecmp(buf, "/CENTER") == 0 ||
-	       strcasecmp(buf, "/P") == 0 ||
-	       strcasecmp(buf, "/H1") == 0 ||
-	       strcasecmp(buf, "/H2") == 0 ||
-	       strcasecmp(buf, "/H3") == 0 ||
-	       strcasecmp(buf, "/H4") == 0 ||
-	       strcasecmp(buf, "/H5") == 0 ||
-	       strcasecmp(buf, "/H6") == 0 ||
-	       strcasecmp(buf, "/PRE") == 0 ||
-	       strcasecmp(buf, "/UL") == 0 ||
-	       strcasecmp(buf, "/OL") == 0 ||
-	       strcasecmp(buf, "/DL") == 0)
-      {
-        width     = 0;
-	needspace = 0;
-
-        popfont(font, fsize, fcolor);
-      }
-      else if (strcasecmp(buf, "TR") == 0 || strcasecmp(buf, "/TR") == 0 ||
-               strcasecmp(buf, "/TABLE") == 0)
-      {
-//        printf("%s column = %d, colspan = %d, num_columns = %d\n",
-//	       buf, column, colspan, num_columns);
-
-        if (column >= 0)
-	{
-	  // This is a hack to support COLSPAN...
-	  max_width /= colspan;
-
-	  while (colspan > 0)
-	  {
-	    if (max_width > columns[column])
-	      columns[column] = max_width;
-
-	    column ++;
-	    colspan --;
-	  }
-	}
-
-	if (strcasecmp(buf, "/TABLE") == 0)
-	  break;
-
-	needspace = 0;
-	column    = -1;
-	width     = 0;
-	max_width = 0;
-	incell    = 0;
-      }
-      else if (strcasecmp(buf, "TD") == 0 ||
-               strcasecmp(buf, "TH") == 0)
-      {
-//        printf("BEFORE column = %d, colspan = %d, num_columns = %d\n",
-//	       column, colspan, num_columns);
-
-        if (column >= 0)
-	{
-	  // This is a hack to support COLSPAN...
-	  max_width /= colspan;
-
-	  while (colspan > 0)
-	  {
-	    if (max_width > columns[column])
-	      columns[column] = max_width;
-
-	    column ++;
-	    colspan --;
-	  }
-	}
-	else
-	  column ++;
-
-        if (get_attr(attrs, "COLSPAN", attr, sizeof(attr)) != NULL)
-	  colspan = atoi(attr);
-	else
-	  colspan = 1;
-
-//        printf("AFTER column = %d, colspan = %d, num_columns = %d\n",
-//	       column, colspan, num_columns);
-
-        if ((column + colspan) >= num_columns)
-	  num_columns = column + colspan;
-
-	needspace = 0;
-	width     = 0;
-	incell    = 1;
-
-        if (strcasecmp(buf, "TH") == 0)
-	  font = textfont_ | FL_BOLD;
-	else
-	  font = textfont_;
-
-        fsize = textsize_;
-
-	pushfont(font, fsize);
-
-        if (get_attr(attrs, "WIDTH", attr, sizeof(attr)) != NULL)
-	  max_width = get_length(attr);
-	else
-	  max_width = 0;
-
-//        printf("max_width = %d\n", max_width);
-      }
-      else if (strcasecmp(buf, "/TD") == 0 ||
-               strcasecmp(buf, "/TH") == 0)
-      {
-	incell = 0;
-        popfont(font, fsize, fcolor);
-      }
-      else if (strcasecmp(buf, "B") == 0 ||
-               strcasecmp(buf, "STRONG") == 0)
-	pushfont(font |= FL_BOLD, fsize);
-      else if (strcasecmp(buf, "I") == 0 ||
-               strcasecmp(buf, "EM") == 0)
-	pushfont(font |= FL_ITALIC, fsize);
-      else if (strcasecmp(buf, "CODE") == 0 ||
-               strcasecmp(buf, "TT") == 0)
-	pushfont(font = FL_COURIER, fsize);
-      else if (strcasecmp(buf, "KBD") == 0)
-	pushfont(font = FL_COURIER_BOLD, fsize);
-      else if (strcasecmp(buf, "VAR") == 0)
-	pushfont(font = FL_COURIER_ITALIC, fsize);
-      else if (strcasecmp(buf, "/B") == 0 ||
-	       strcasecmp(buf, "/STRONG") == 0 ||
-	       strcasecmp(buf, "/I") == 0 ||
-	       strcasecmp(buf, "/EM") == 0 ||
-	       strcasecmp(buf, "/CODE") == 0 ||
-	       strcasecmp(buf, "/TT") == 0 ||
-	       strcasecmp(buf, "/KBD") == 0 ||
-	       strcasecmp(buf, "/VAR") == 0)
-	popfont(font, fsize, fcolor);
-      else if (strcasecmp(buf, "IMG") == 0 && incell)
-      {
-	Fl_Shared_Image	*img = 0;
-	int		iwidth, iheight;
-
-
-        get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
-        get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
-	iwidth  = get_length(wattr);
-	iheight = get_length(hattr);
-
-        if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
-	  img     = get_image(attr, iwidth, iheight);
-	  iwidth  = img->w();
-	  iheight = img->h();
-	}
-
-	if (iwidth > minwidths[column])
-          minwidths[column] = iwidth;
-
-        width += iwidth;
-	if (needspace)
-	  width += (int)fl_width(' ');
-
-	if (width > max_width)
-          max_width = width;
-
-	needspace = 0;
-      }
-    }
-    else if (*ptr == '\n' && pre)
-    {
-      width     = 0;
-      needspace = 0;
-      ptr ++;
-    }
-    else if (isspace((*ptr)&255))
-    {
-      needspace = 1;
-
-      ptr ++;
-    }
-    else if (*ptr == '&' && s < (buf + sizeof(buf) - 1))
-    {
-      ptr ++;
-
-      int qch = quote_char(ptr);
-
-      if (qch < 0)
-	*s++ = '&';
-      else {
-//        int l;
-//        l = fl_utf8encode((unsigned int) qch, s);
-//        if (l < 1) l = 1;
-//        s += l;
-	*s++ = qch;
-	ptr = strchr(ptr, ';') + 1;
-      }
-    }
-    else
-    {
-      if (s < (buf + sizeof(buf) - 1))
-        *s++ = *ptr++;
-      else
-        ptr ++;
-    }
-  }
-
-  // Now that we have scanned the entire table, adjust the table and
-  // cell widths to fit on the screen...
-  if (get_attr(table + 6, "WIDTH", attr, sizeof(attr)))
-    *table_width = get_length(attr);
-  else
-    *table_width = 0;
-
-#ifdef DEBUG
-  printf("num_columns = %d, table_width = %d\n", num_columns, *table_width);
-#endif // DEBUG
-
-  if (num_columns == 0)
-    return;
-
-  // Add up the widths...
-  for (column = 0, width = 0; column < num_columns; column ++)
-    width += columns[column];
-
-#ifdef DEBUG
-  printf("width = %d, w() = %d\n", width, w());
-  for (column = 0; column < num_columns; column ++)
-    printf("    columns[%d] = %d, minwidths[%d] = %d\n", column, columns[column],
-           column, minwidths[column]);
-#endif // DEBUG
-
-  // Adjust the width if needed...
-  int scale_width = *table_width;
-
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  if (scale_width == 0) {
-    if (width > (hsize_ - scrollsize)) scale_width = hsize_ - scrollsize;
-    else scale_width = width;
-  }
-
-  if (width < scale_width) {
-#ifdef DEBUG
-    printf("Scaling table up to %d from %d...\n", scale_width, width);
-#endif // DEBUG
-
-    *table_width = 0;
-
-    scale_width = (scale_width - width) / num_columns;
-
-#ifdef DEBUG
-    printf("adjusted scale_width = %d\n", scale_width);
-#endif // DEBUG
-
-    for (column = 0; column < num_columns; column ++) {
-      columns[column] += scale_width;
-
-      (*table_width) += columns[column];
-    }
-  }
-  else if (width > scale_width) {
-#ifdef DEBUG
-    printf("Scaling table down to %d from %d...\n", scale_width, width);
-#endif // DEBUG
-
-    for (column = 0; column < num_columns; column ++) {
-      width       -= minwidths[column];
-      scale_width -= minwidths[column];
-    }
-
-#ifdef DEBUG
-    printf("adjusted width = %d, scale_width = %d\n", width, scale_width);
-#endif // DEBUG
-
-    if (width > 0) {
-      for (column = 0; column < num_columns; column ++) {
-	columns[column] -= minwidths[column];
-	columns[column] = scale_width * columns[column] / width;
-	columns[column] += minwidths[column];
-      }
-    }
-
-    *table_width = 0;
-    for (column = 0; column < num_columns; column ++) {
-      (*table_width) += columns[column];
-    }
-  }
-  else if (*table_width == 0)
-    *table_width = width;
-
-#ifdef DEBUG
-  printf("FINAL table_width = %d\n", *table_width);
-  for (column = 0; column < num_columns; column ++)
-    printf("    columns[%d] = %d\n", column, columns[column]);
-#endif // DEBUG
-}
-
-
-/** Frees memory used for the document. */
-void
-Fl_Help_View::free_data() {
-  // Release all images...
-  if (value_) {
-    const char	*ptr,		// Pointer into block
-		*attrs;		// Pointer to start of element attributes
-    char	*s,		// Pointer into buffer
-		buf[1024],	// Text buffer
-		attr[1024],	// Attribute buffer
-		wattr[1024],	// Width attribute buffer
-		hattr[1024];	// Height attribute buffer
-
-    for (ptr = value_; *ptr;)
-    {
-      if (*ptr == '<')
-      {
-	ptr ++;
-
-        if (strncmp(ptr, "!--", 3) == 0)
-	{
-	  // Comment...
-	  ptr += 3;
-	  if ((ptr = strstr(ptr, "-->")) != NULL)
-	  {
-	    ptr += 3;
-	    continue;
-	  }
-	  else
-	    break;
-	}
-
-        s = buf;
-
-	while (*ptr && *ptr != '>' && !isspace((*ptr)&255))
-          if (s < (buf + sizeof(buf) - 1))
-            *s++ = *ptr++;
-	  else
-	    ptr ++;
-
-	*s = '\0';
-
-	attrs = ptr;
-	while (*ptr && *ptr != '>')
-          ptr ++;
-
-	if (*ptr == '>')
-          ptr ++;
-
-	if (strcasecmp(buf, "IMG") == 0)
-	{
-	  Fl_Shared_Image	*img;
-	  int		width;
-	  int		height;
-
-          get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
-          get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
-	  width  = get_length(wattr);
-	  height = get_length(hattr);
-
-	  if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
-	    // Get and release the image to free it from memory...
-	    img = get_image(attr, width, height);
-	    if ((void*)img != &broken_image) {
-	      img->release();
-	    }
-	  }
-	}
-      }
-      else
-        ptr ++;
-    }
-
-    free((void *)value_);
-    value_ = 0;
-  }
-
-  // Free all of the arrays...
-  if (nblocks_) {
-    free(blocks_);
-
-    ablocks_ = 0;
-    nblocks_ = 0;
-    blocks_  = 0;
-  }
-
-  if (nlinks_) {
-    free(links_);
-
-    alinks_ = 0;
-    nlinks_ = 0;
-    links_  = 0;
-  }
-
-  if (ntargets_) {
-    free(targets_);
-
-    atargets_ = 0;
-    ntargets_ = 0;
-    targets_  = 0;
-  }
-}
-
-/** Gets an alignment attribute. */
-int					// O - Alignment
-Fl_Help_View::get_align(const char *p,	// I - Pointer to start of attrs
-                        int        a)	// I - Default alignment
-{
-  char	buf[255];			// Alignment value
-
-
-  if (get_attr(p, "ALIGN", buf, sizeof(buf)) == NULL)
-    return (a);
-
-  if (strcasecmp(buf, "CENTER") == 0)
-    return (CENTER);
-  else if (strcasecmp(buf, "RIGHT") == 0)
-    return (RIGHT);
-  else
-    return (LEFT);
-}
-
-
-/** Gets an attribute value from the string. */
-const char *					// O - Pointer to buf or NULL
-Fl_Help_View::get_attr(const char *p,		// I - Pointer to start of attributes
-                      const char *n,		// I - Name of attribute
-		      char       *buf,		// O - Buffer for attribute value
-		      int        bufsize)	// I - Size of buffer
-{
-  char	name[255],				// Name from string
-	*ptr,					// Pointer into name or value
-	quote;					// Quote
-
-
-  buf[0] = '\0';
-
-  while (*p && *p != '>')
-  {
-    while (isspace((*p)&255))
-      p ++;
-
-    if (*p == '>' || !*p)
-      return (NULL);
-
-    for (ptr = name; *p && !isspace((*p)&255) && *p != '=' && *p != '>';)
-      if (ptr < (name + sizeof(name) - 1))
-        *ptr++ = *p++;
-      else
-        p ++;
-
-    *ptr = '\0';
-
-    if (isspace((*p)&255) || !*p || *p == '>')
-      buf[0] = '\0';
-    else
-    {
-      if (*p == '=')
-        p ++;
-
-      for (ptr = buf; *p && !isspace((*p)&255) && *p != '>';)
-        if (*p == '\'' || *p == '\"')
-	{
-	  quote = *p++;
-
-	  while (*p && *p != quote)
-	    if ((ptr - buf + 1) < bufsize)
-	      *ptr++ = *p++;
-	    else
-	      p ++;
-
-          if (*p == quote)
-	    p ++;
-	}
-	else if ((ptr - buf + 1) < bufsize)
-	  *ptr++ = *p++;
-	else
-	  p ++;
-
-      *ptr = '\0';
-    }
-
-    if (strcasecmp(n, name) == 0)
-      return (buf);
-    else
-      buf[0] = '\0';
-
-    if (*p == '>')
-      return (NULL);
-  }
-
-  return (NULL);
-}
-
-
-/** Gets a color attribute. */
-Fl_Color				// O - Color value
-Fl_Help_View::get_color(const char *n,	// I - Color name
-                        Fl_Color   c)	// I - Default color value
-{
-  int	i;				// Looping var
-  int	rgb, r, g, b;			// RGB values
-  static const struct {			// Color name table
-    const char *name;
-    int r, g, b;
-  }	colors[] = {
-    { "black",		0x00, 0x00, 0x00 },
-    { "red",		0xff, 0x00, 0x00 },
-    { "green",		0x00, 0x80, 0x00 },
-    { "yellow",		0xff, 0xff, 0x00 },
-    { "blue",		0x00, 0x00, 0xff },
-    { "magenta",	0xff, 0x00, 0xff },
-    { "fuchsia",	0xff, 0x00, 0xff },
-    { "cyan",		0x00, 0xff, 0xff },
-    { "aqua",		0x00, 0xff, 0xff },
-    { "white",		0xff, 0xff, 0xff },
-    { "gray",		0x80, 0x80, 0x80 },
-    { "grey",		0x80, 0x80, 0x80 },
-    { "lime",		0x00, 0xff, 0x00 },
-    { "maroon",		0x80, 0x00, 0x00 },
-    { "navy",		0x00, 0x00, 0x80 },
-    { "olive",		0x80, 0x80, 0x00 },
-    { "purple",		0x80, 0x00, 0x80 },
-    { "silver",		0xc0, 0xc0, 0xc0 },
-    { "teal",		0x00, 0x80, 0x80 }
-  };
-
-
-  if (!n || !n[0]) return c;
-
-  if (n[0] == '#') {
-    // Do hex color lookup
-    rgb = strtol(n + 1, NULL, 16);
-
-    if (strlen(n) > 4) {
-      r = rgb >> 16;
-      g = (rgb >> 8) & 255;
-      b = rgb & 255;
-    } else {
-      r = (rgb >> 8) * 17;
-      g = ((rgb >> 4) & 15) * 17;
-      b = (rgb & 15) * 17;
-    }
-    return (fl_rgb_color((uchar)r, (uchar)g, (uchar)b));
-  } else {
-    for (i = 0; i < (int)(sizeof(colors) / sizeof(colors[0])); i ++)
-      if (!strcasecmp(n, colors[i].name)) {
-        return fl_rgb_color(colors[i].r, colors[i].g, colors[i].b);
-      }
-    return c;
-  }
-}
-
-
-/** Gets an inline image.
-
-  The image reference count is maintained accordingly, such that
-  the image can be released exactly once when the document is closed.
-
-  \return a pointer to a cached Fl_Shared_Image, if the image can be loaded,
-  	  otherwise a pointer to an internal Fl_Pixmap (broken_image).
-
-  \todo Fl_Help_View::get_image() returns a pointer to the internal
-  Fl_Pixmap broken_image, but this is _not_ compatible with the
-  return type Fl_Shared_Image (release() must not be called).
-*/
-
-/* Implementation note: (A.S. Apr 05, 2009)
-
-  Fl_Help_View::get_image() uses a static global flag (initial_load)
-  to determine, if it is called from the initial loading of a document
-  (load() or value()), or from resize() or draw().
-
-  A better solution would be to manage all loaded images in an own
-  structure like Fl_Help_Target (Fl_Help_Image ?) to avoid using this
-  global flag, but this would break the ABI !
-
-  This should be fixed in FLTK 1.3 !
-
-
-  If initial_load is true, then Fl_Shared_Image::get() is called to
-  load the image, and the reference count of the shared image is
-  increased by one.
-
-  If initial_load is false, then Fl_Shared_Image::find() is called to
-  load the image, and the image is released immediately. This avoids
-  increasing the reference count when calling get_image() from draw()
-  or resize().
-
-  Calling Fl_Shared_Image::find() instead of Fl_Shared_Image::get() avoids
-  doing unnecessary i/o for "broken images" within each resize/redraw.
-
-  Each image must be released exactly once in the destructor or before
-  a new document is loaded: see free_data().
-*/
-
-Fl_Shared_Image *
-Fl_Help_View::get_image(const char *name, int W, int H) {
-  const char	*localname;		// Local filename
-  char		dir[FL_PATH_MAX];	// Current directory
-  char		temp[FL_PATH_MAX],	// Temporary filename
-		*tempptr;		// Pointer into temporary name
-  Fl_Shared_Image *ip;			// Image pointer...
-
-  // See if the image can be found...
-  if (strchr(directory_, ':') != NULL && strchr(name, ':') == NULL) {
-    if (name[0] == '/') {
-      strlcpy(temp, directory_, sizeof(temp));
-
-      if ((tempptr = strrchr(strchr(directory_, ':') + 3, '/')) != NULL) {
-        strlcpy(tempptr, name, sizeof(temp) - (tempptr - temp));
-      } else {
-        strlcat(temp, name, sizeof(temp));
-      }
-    } else {
-      snprintf(temp, sizeof(temp), "%s/%s", directory_, name);
-    }
-
-    if (link_) localname = (*link_)(this, temp);
-    else localname = temp;
-  } else if (name[0] != '/' && strchr(name, ':') == NULL) {
-    if (directory_[0]) snprintf(temp, sizeof(temp), "%s/%s", directory_, name);
-    else {
-      fl_getcwd(dir, sizeof(dir));
-      snprintf(temp, sizeof(temp), "file:%s/%s", dir, name);
-    }
-
-    if (link_) localname = (*link_)(this, temp);
-    else localname = temp;
-  } else if (link_) localname = (*link_)(this, name);
-  else localname = name;
-
-  if (!localname) return 0;
-
-  if (strncmp(localname, "file:", 5) == 0) localname += 5;
-
-  if (initial_load) {
-    if ((ip = Fl_Shared_Image::get(localname, W, H)) == NULL) {
-      ip = (Fl_Shared_Image *)&broken_image;
-    }
-  } else { // draw or resize
-    if ((ip = Fl_Shared_Image::find(localname, W, H)) == NULL) {
-      ip = (Fl_Shared_Image *)&broken_image;
-    } else {
-      ip->release();
-    }
-  }
-
-  return ip;
-}
-
-
-/** Gets a length value, either absolute or %. */
-int
-Fl_Help_View::get_length(const char *l) {	// I - Value
-  int	val;					// Integer value
-
-  if (!l[0]) return 0;
-
-  val = atoi(l);
-  if (l[strlen(l) - 1] == '%') {
-    if (val > 100) val = 100;
-    else if (val < 0) val = 0;
-
-    int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-    val = val * (hsize_ - scrollsize) / 100;
-  }
-
-  return val;
-}
-
-
-Fl_Help_Link *Fl_Help_View::find_link(int xx, int yy)
-{
-  int		i;
-  Fl_Help_Link	*linkp;
-  for (i = nlinks_, linkp = links_; i > 0; i --, linkp ++) {
-    if (xx >= linkp->x && xx < linkp->w &&
-        yy >= linkp->y && yy < linkp->h)
-      break;
-  }
-  return i ? linkp : 0L;
-}
-
-void Fl_Help_View::follow_link(Fl_Help_Link *linkp)
-{
-  char		target[32];	// Current target
-
-  clear_selection();
-
-  strlcpy(target, linkp->name, sizeof(target));
-
-  set_changed();
-
-  if (strcmp(linkp->filename, filename_) != 0 && linkp->filename[0])
-  {
-    char	dir[FL_PATH_MAX];	// Current directory
-    char	temp[FL_PATH_MAX],	// Temporary filename
-	      *tempptr;	// Pointer into temporary filename
-
-
-    if (strchr(directory_, ':') != NULL &&
-        strchr(linkp->filename, ':') == NULL)
-    {
-      if (linkp->filename[0] == '/')
-      {
-        strlcpy(temp, directory_, sizeof(temp));
-        if ((tempptr = strrchr(strchr(directory_, ':') + 3, '/')) != NULL)
-	  strlcpy(tempptr, linkp->filename, sizeof(temp));
-	else
-	  strlcat(temp, linkp->filename, sizeof(temp));
-      }
-      else
-	snprintf(temp, sizeof(temp), "%s/%s", directory_, linkp->filename);
-    }
-    else if (linkp->filename[0] != '/' && strchr(linkp->filename, ':') == NULL)
-    {
-      if (directory_[0])
-	snprintf(temp, sizeof(temp), "%s/%s", directory_, linkp->filename);
-      else
-      {
-	  fl_getcwd(dir, sizeof(dir));
-	snprintf(temp, sizeof(temp), "file:%s/%s", dir, linkp->filename);
-      }
-    }
-    else
-      strlcpy(temp, linkp->filename, sizeof(temp));
-
-    if (linkp->name[0])
-      snprintf(temp + strlen(temp), sizeof(temp) - strlen(temp), "#%s",
-	       linkp->name);
-
-    load(temp);
-  }
-  else if (target[0])
-    topline(target);
-  else
-    topline(0);
-
-  leftline(0);
-}
-
-/** Removes the current text selection. */
-void Fl_Help_View::clear_selection()
-{
-  if (current_view==this)
-    clear_global_selection();
-}
-/** Selects all the text in the view. */
-void Fl_Help_View::select_all()
-{
-  clear_global_selection();
-  if (!value_) return;
-  current_view = this;
-  selection_drag_last = selection_last = strlen(value_);
-  selected = 1;
-}
-
-void Fl_Help_View::clear_global_selection()
-{
-  if (selected) redraw();
-  selection_push_first = selection_push_last = 0;
-  selection_drag_first = selection_drag_last = 0;
-  selection_first = selection_last = 0;
-  selected = 0;
-}
-
-char Fl_Help_View::begin_selection()
-{
-  clear_global_selection();
-
-  if (!fl_help_view_buffer) fl_help_view_buffer = fl_create_offscreen(1, 1);
-
-  mouse_x = Fl::event_x();
-  mouse_y = Fl::event_y();
-  draw_mode = 1;
-
-    current_view = this;
-    fl_begin_offscreen(fl_help_view_buffer);
-    draw();
-    fl_end_offscreen();
-
-  draw_mode = 0;
-
-  if (selection_push_last) return 1;
-  else return 0;
-}
-
-char Fl_Help_View::extend_selection()
-{
-  if (Fl::event_is_click())
-    return 0;
-
-//  printf("old selection_first=%d, selection_last=%d\n",
-//         selection_first, selection_last);
-
-  int sf = selection_first, sl = selection_last;
-
-  selected = 1;
-  mouse_x = Fl::event_x();
-  mouse_y = Fl::event_y();
-  draw_mode = 2;
-
-    fl_begin_offscreen(fl_help_view_buffer);
-    draw();
-    fl_end_offscreen();
-
-  draw_mode = 0;
-
-  if (selection_push_first < selection_drag_first) {
-    selection_first = selection_push_first;
-  } else {
-    selection_first = selection_drag_first;
-  }
-
-  if (selection_push_last > selection_drag_last) {
-    selection_last = selection_push_last;
-  } else {
-    selection_last = selection_drag_last;
-  }
-
-//  printf("new selection_first=%d, selection_last=%d\n",
-//         selection_first, selection_last);
-
-  if (sf!=selection_first || sl!=selection_last) {
-//    puts("REDRAW!!!\n");
-    return 1;
-  } else {
-//    puts("");
-    return 0;
-  }
-}
-
-// convert a command with up to four letters into an unsigned int
-static unsigned int command(const char *cmd)
-{
-  unsigned int ret = (tolower(cmd[0])<<24);
-  char c = cmd[1];
-  if (c=='>' || c==' ' || c==0) return ret;
-  ret |= (tolower(c)<<16);
-  c = cmd[2];
-  if (c=='>' || c==' ' || c==0) return ret;
-  ret |= (tolower(c)<<8);
-  c = cmd[3];
-  if (c=='>' || c==' ' || c==0) return ret;
-  ret |= tolower(c);
-  c = cmd[4];
-  if (c=='>' || c==' ' || c==0) return ret;
-  return 0;
-}
-
-#define CMD(a, b, c, d) ((a<<24)|(b<<16)|(c<<8)|d)
-
-void Fl_Help_View::end_selection(int clipboard) 
-{
-  if (!selected || current_view!=this) 
-    return;
-  // convert the select part of our html text into some kind of somewhat readable ASCII
-  // and store it in the selection buffer
-  char p = 0, pre = 0;;
-  int len = strlen(value_);
-  char *txt = (char*)malloc(len+1), *d = txt;
-  const char *s = value_, *cmd, *src;
-  for (;;) {
-    char c = *s++;
-    if (c==0) break;
-    if (c=='<') { // begin of some html command. Skip until we find a '>'
-      cmd = s;
-      for (;;) {
-        c = *s++;
-        if (c==0 || c=='>') break;
-      }
-      if (c==0) break;
-      // do something with this command... .
-      // the replacement string must not be longer that the command itself plus '<' and '>'
-      src = 0;
-      switch (command(cmd)) {
-        case CMD('p','r','e', 0 ): pre = 1; break;
-        case CMD('/','p','r','e'): pre = 0; break;
-        case CMD('t','d', 0 , 0 ):
-        case CMD('p', 0 , 0 , 0 ):
-        case CMD('/','p', 0 , 0 ):
-        case CMD('b','r', 0 , 0 ): src = "\n"; break;
-        case CMD('l','i', 0 , 0 ): src = "\n * "; break;
-        case CMD('/','h','1', 0 ):
-        case CMD('/','h','2', 0 ):
-        case CMD('/','h','3', 0 ):
-        case CMD('/','h','4', 0 ):
-        case CMD('/','h','5', 0 ):
-        case CMD('/','h','6', 0 ): src = "\n\n"; break;
-        case CMD('t','r', 0 , 0 ):
-        case CMD('h','1', 0 , 0 ):
-        case CMD('h','2', 0 , 0 ):
-        case CMD('h','3', 0 , 0 ):
-        case CMD('h','4', 0 , 0 ):
-        case CMD('h','5', 0 , 0 ):
-        case CMD('h','6', 0 , 0 ): src = "\n\n"; break;
-        case CMD('d','t', 0 , 0 ): src = "\n "; break;
-        case CMD('d','d', 0 , 0 ): src = "\n - "; break;
-      }
-      int n = s-value_;
-      if (src && n>selection_first && n<=selection_last) {
-        while (*src) {
-          *d++ = *src++;
-        }
-        c = src[-1];
-        p = isspace(c&255) ? ' ' : c;
-      }
-      continue;
-    }
-    if (c=='&') { // special characters
-      int xx = quote_char(s);
-      if (xx>=0) {
-        c = (char)xx;
-        for (;;) {
-          char cc = *s++;
-          if (!cc || cc==';') break;
-        }
-      }
-    }
-    int n = s-value_;
-    if (n>selection_first && n<=selection_last) {
-      if (!pre && isspace(c&255)) c = ' ';
-      if (p!=' '||c!=' ')
-        *d++ = c;
-      p = c;
-    }
-  }
-  *d = 0;
-  Fl::copy(txt, strlen(txt), clipboard);
-  free(txt);
-}
-
-#define ctrl(x) ((x)&0x1f)
-
-/** Handles events in the widget. */
-int				// O - 1 if we handled it, 0 otherwise
-Fl_Help_View::handle(int event)	// I - Event to handle
-{
-  static Fl_Help_Link *linkp;   // currently clicked link
-
-  int xx = Fl::event_x() - x() + leftline_;
-  int yy = Fl::event_y() - y() + topline_;
-
-  switch (event)
-  {
-    case FL_FOCUS:
-      redraw();
-      return 1;
-    case FL_UNFOCUS:
-      clear_selection();
-      redraw();
-      return 1;
-    case FL_ENTER :
-      Fl_Group::handle(event);
-      return 1;
-    case FL_LEAVE :
-      fl_cursor(FL_CURSOR_DEFAULT);
-      break;
-    case FL_MOVE:
-      if (find_link(xx, yy)) fl_cursor(FL_CURSOR_HAND);
-      else fl_cursor(FL_CURSOR_DEFAULT);
-      return 1;
-    case FL_PUSH:
-      if (Fl_Group::handle(event)) return 1;
-      linkp = find_link(xx, yy);
-      if (linkp) {
-        fl_cursor(FL_CURSOR_HAND);
-        return 1;
-      }
-      if (begin_selection()) {
-        fl_cursor(FL_CURSOR_INSERT);
-        return 1;
-      }
-      fl_cursor(FL_CURSOR_DEFAULT);
-      return 1;
-    case FL_DRAG:
-      if (linkp) {
-        if (Fl::event_is_click()) {
-          fl_cursor(FL_CURSOR_HAND);
-        } else {
-          fl_cursor(FL_CURSOR_DEFAULT); // should be "FL_CURSOR_CANCEL" if we had it
-        }
-        return 1;
-      }
-      if (current_view==this && selection_push_last) {
-        if (extend_selection()) redraw();
-        fl_cursor(FL_CURSOR_INSERT);
-        return 1;
-      }
-      fl_cursor(FL_CURSOR_DEFAULT);
-      return 1;
-    case FL_RELEASE:
-      if (linkp) {
-        if (Fl::event_is_click()) {
-          follow_link(linkp);
-        }
-        fl_cursor(FL_CURSOR_DEFAULT);
-        linkp = 0;
-        return 1;
-      }
-      if (current_view==this && selection_push_last) {
-        end_selection();
-        return 1;
-      }
-      return 1;
-    case FL_SHORTCUT: {
-      char ascii = Fl::event_text()[0];
-      switch (ascii) {
-        case ctrl('A'): select_all(); redraw(); return 1;
-        case ctrl('C'):
-        case ctrl('X'): end_selection(1); return 1;
-      }
-      break; }
-  }
-  return (Fl_Group::handle(event));
-}
-
-/** 
-  The constructor creates the Fl_Help_View widget at the specified
-  position and size.
-*/
-Fl_Help_View::Fl_Help_View(int        xx,	// I - Left position
-                	   int        yy,	// I - Top position
-			   int        ww,	// I - Width in pixels
-			   int        hh,	// I - Height in pixels
-			   const char *l)
-    : Fl_Group(xx, yy, ww, hh, l),
-      scrollbar_(xx + ww - Fl::scrollbar_size(), yy,
-                 Fl::scrollbar_size(), hh - Fl::scrollbar_size()),
-      hscrollbar_(xx, yy + hh - Fl::scrollbar_size(),
-                  ww - Fl::scrollbar_size(), Fl::scrollbar_size())
-{
-  color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
-
-  title_[0]     = '\0';
-  defcolor_     = FL_FOREGROUND_COLOR;
-  bgcolor_      = FL_BACKGROUND_COLOR;
-  textcolor_    = FL_FOREGROUND_COLOR;
-  linkcolor_    = FL_SELECTION_COLOR;
-  textfont_     = FL_TIMES;
-  textsize_     = 12;
-  value_        = NULL;
-
-  ablocks_      = 0;
-  nblocks_      = 0;
-  blocks_       = (Fl_Help_Block *)0;
-
-  link_         = (Fl_Help_Func *)0;
-
-  alinks_       = 0;
-  nlinks_       = 0;
-  links_        = (Fl_Help_Link *)0;
-
-  atargets_     = 0;
-  ntargets_     = 0;
-  targets_      = (Fl_Help_Target *)0;
-
-  directory_[0] = '\0';
-  filename_[0]  = '\0';
-
-  topline_      = 0;
-  leftline_     = 0;
-  size_         = 0;
-  hsize_        = 0;
-  scrollbar_size_ = 0;
-
-  scrollbar_.value(0, hh, 0, 1);
-  scrollbar_.step(8.0);
-  scrollbar_.show();
-  scrollbar_.callback(scrollbar_callback);
-
-  hscrollbar_.value(0, ww, 0, 1);
-  hscrollbar_.step(8.0);
-  hscrollbar_.show();
-  hscrollbar_.callback(hscrollbar_callback);
-  hscrollbar_.type(FL_HORIZONTAL);
-  end();
-
-  resize(xx, yy, ww, hh);
-}
-
-
-/** Destroys the Fl_Help_View widget.
-
-  The destructor destroys the widget and frees all memory that has been
-  allocated for the current document.
-*/
-Fl_Help_View::~Fl_Help_View()
-{
-  clear_selection();
-  free_data();
-}
-
-
-/** Loads the specified file.
-
-  This method loads the specified file or URL.
-*/
-int				// O - 0 on success, -1 on error
-Fl_Help_View::load(const char *f)// I - Filename to load (may also have target)
-{
-  FILE		*fp;		// File to read from
-  long		len;		// Length of file
-  char		*target;	// Target in file
-  char		*slash;		// Directory separator
-  const char	*localname;	// Local filename
-  char		error[1024];	// Error buffer
-  char		newname[FL_PATH_MAX];	// New filename buffer
-
-  // printf("load(%s)\n",f); fflush(stdout);
-
-  if (strncmp(f, "ftp:", 4) == 0 ||
-      strncmp(f, "http:", 5) == 0 ||
-      strncmp(f, "https:", 6) == 0 ||
-      strncmp(f, "ipp:", 4) == 0 ||
-      strncmp(f, "mailto:", 7) == 0 ||
-      strncmp(f, "news:", 5) == 0) {
-    char urimsg[FL_PATH_MAX];
-    if ( fl_open_uri(f, urimsg, sizeof(urimsg)) == 0 ) {
-      clear_selection();
-
-      strlcpy(newname, f, sizeof(newname));
-      if ((target = strrchr(newname, '#')) != NULL)
-	*target++ = '\0';
-
-      if (link_)
-	localname = (*link_)(this, newname);
-      else
-	localname = filename_;
-
-      if (!localname)
-	return (0);
-
-      free_data();
-
-      strlcpy(filename_, newname, sizeof(filename_));
-      strlcpy(directory_, newname, sizeof(directory_));
-
-      // Note: We do not support Windows backslashes, since they are illegal
-      //       in URLs...
-      if ((slash = strrchr(directory_, '/')) == NULL)
-	directory_[0] = '\0';
-      else if (slash > directory_ && slash[-1] != '/')
-	*slash = '\0';
-
-      snprintf(error, sizeof(error),
-	       "<HTML><HEAD><TITLE>Error</TITLE></HEAD>"
-	       "<BODY><H1>Error</H1>"
-	       "<P>Unable to follow the link \"%s\" - "
-	       "%s.</P></BODY>",
-	       f, urimsg);
-      value(error);
-      //return(-1);
-    }
-    return(0);
-  }
-
-  clear_selection();
-
-  strlcpy(newname, f, sizeof(newname));
-  if ((target = strrchr(newname, '#')) != NULL)
-    *target++ = '\0';
-
-  if (link_)
-    localname = (*link_)(this, newname);
-  else
-    localname = filename_;
-
-  if (!localname)
-    return (0);
-
-  free_data();
-
-  strlcpy(filename_, newname, sizeof(filename_));
-  strlcpy(directory_, newname, sizeof(directory_));
-
-  // Note: We do not support Windows backslashes, since they are illegal
-  //       in URLs...
-  if ((slash = strrchr(directory_, '/')) == NULL)
-    directory_[0] = '\0';
-  else if (slash > directory_ && slash[-1] != '/')
-    *slash = '\0';
-
-  if (strncmp(localname, "file:", 5) == 0)
-    localname += 5;	// Adjust for local filename...
-
-  if ((fp = fl_fopen(localname, "rb")) != NULL)
-  {
-    fseek(fp, 0, SEEK_END);
-    len = ftell(fp);
-    rewind(fp);
-
-    value_ = (const char *)calloc(len + 1, 1);
-    if (fread((void *)value_, 1, len, fp)==0) { /* use default 0 */ }
-    fclose(fp);
-  }
-  else
-  {
-    snprintf(error, sizeof(error),
-	     "<HTML><HEAD><TITLE>Error</TITLE></HEAD>"
-	     "<BODY><H1>Error</H1>"
-	     "<P>Unable to follow the link \"%s\" - "
-	     "%s.</P></BODY>",
-	     localname, strerror(errno));
-    value_ = strdup(error);
-  }
-
-  initial_load = 1;
-  format();
-  initial_load = 0;
-
-  if (target)
-    topline(target);
-  else
-    topline(0);
-
-  return (0);
-}
-
-
-/** Resizes the help widget. */
-
-void
-Fl_Help_View::resize(int xx,	// I - New left position
-                     int yy,	// I - New top position
-		     int ww,	// I - New width
-		     int hh)	// I - New height
-{
-  Fl_Boxtype		b = box() ? box() : FL_DOWN_BOX;
-					// Box to draw...
-
-
-  Fl_Widget::resize(xx, yy, ww, hh);
-
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  scrollbar_.resize(x() + w() - scrollsize - Fl::box_dw(b) + Fl::box_dx(b),
-                    y() + Fl::box_dy(b), scrollsize, h() - scrollsize - Fl::box_dh(b));
-  hscrollbar_.resize(x() + Fl::box_dx(b),
-                     y() + h() - scrollsize - Fl::box_dh(b) + Fl::box_dy(b),
-                     w() - scrollsize - Fl::box_dw(b), scrollsize);
-
-  format();
-}
-
-
-/** Scrolls the text to the indicated position, given a named destination.
-
-  \param[in] n target name
-*/
-void
-Fl_Help_View::topline(const char *n)	// I - Target name
-{
-  Fl_Help_Target key,			// Target name key
-		*target;		// Pointer to matching target
-
-
-  if (ntargets_ == 0)
-    return;
-
-  strlcpy(key.name, n, sizeof(key.name));
-
-  target = (Fl_Help_Target *)bsearch(&key, targets_, ntargets_, sizeof(Fl_Help_Target),
-                                 (compare_func_t)compare_targets);
-
-  if (target != NULL)
-    topline(target->y);
-}
-
-
-/** Scrolls the text to the indicated position, given a pixel line.
-
-  If the given pixel value \p top is out of range, then the text is
-  scrolled to the top or bottom of the document, resp.
-
-  \param[in] top top line number in pixels (0 = start of document)
-*/
-void
-Fl_Help_View::topline(int top)	// I - Top line number
-{
-  if (!value_)
-    return;
-
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  if (size_ < (h() - scrollsize) || top < 0)
-    top = 0;
-  else if (top > size_)
-    top = size_;
-
-  topline_ = top;
-
-  scrollbar_.value(topline_, h() - scrollsize, 0, size_);
-
-  do_callback();
-
-  redraw();
-}
-
-
-/** Scrolls the text to the indicated position, given a pixel column.
-
-  If the given pixel value \p left is out of range, then the text is
-  scrolled to the left or right side of the document, resp.
-
-  \param[in] left left column number in pixels (0 = left side)
-*/
-void
-Fl_Help_View::leftline(int left)	// I - Left position
-{
-  if (!value_)
-    return;
-
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  if (hsize_ < (w() - scrollsize) || left < 0)
-    left = 0;
-  else if (left > hsize_)
-    left = hsize_;
-
-  leftline_ = left;
-
-  hscrollbar_.value(leftline_, w() - scrollsize, 0, hsize_);
-
-  redraw();
-}
-
-
-/** Sets the current help text buffer to the string provided and reformats the text.
-
-  The provided character string \p val is copied internally and will be
-  freed when value() is called again, or when the widget is destroyed.
-
-  If \p val is NULL, then the widget is cleared.
-*/
-void
-Fl_Help_View::value(const char *val)	// I - Text to view
-{
-  clear_selection();
-  free_data();
-  set_changed();
-
-  if (!val)
-    return;
-
-  value_ = strdup(val);
-
-  initial_load = 1;
-  format();
-  initial_load = 0;
-
-  topline(0);
-  leftline(0);
-}
-
-
-#ifdef ENC
-# undef ENC
-#endif
-// part b in the table seems to be mac_roman - beku
-# define ENC(a, b) a
-
-
-/** Returns the character code associated with a quoted char. */
-static int			// O - Code or -1 on error
-quote_char(const char *p) {	// I - Quoted string
-  int	i;			// Looping var
-  static struct {
-    const char	*name;
-    int		namelen;
-    int		code;
-  }	*nameptr,		// Pointer into name array
-	names[] = {		// Quoting names
-    { "Aacute;", 7, ENC(193,231) },
-    { "aacute;", 7, ENC(225,135) },
-    { "Acirc;",  6, ENC(194,229) },
-    { "acirc;",  6, ENC(226,137) },
-    { "acute;",  6, ENC(180,171) },
-    { "AElig;",  6, ENC(198,174) },
-    { "aelig;",  6, ENC(230,190) },
-    { "Agrave;", 7, ENC(192,203) },
-    { "agrave;", 7, ENC(224,136) },
-    { "amp;",    4, ENC('&','&') },
-    { "Aring;",  6, ENC(197,129) },
-    { "aring;",  6, ENC(229,140) },
-    { "Atilde;", 7, ENC(195,204) },
-    { "atilde;", 7, ENC(227,139) },
-    { "Auml;",   5, ENC(196,128) },
-    { "auml;",   5, ENC(228,138) },
-    { "brvbar;", 7, ENC(166, -1) },
-    { "bull;",   5, ENC(149,165) },
-    { "Ccedil;", 7, ENC(199,199) },
-    { "ccedil;", 7, ENC(231,141) },
-    { "cedil;",  6, ENC(184,252) },
-    { "cent;",   5, ENC(162,162) },
-    { "copy;",   5, ENC(169,169) },
-    { "curren;", 7, ENC(164, -1) },
-    { "deg;",    4, ENC(176,161) },
-    { "divide;", 7, ENC(247,214) },
-    { "Eacute;", 7, ENC(201,131) },
-    { "eacute;", 7, ENC(233,142) },
-    { "Ecirc;",  6, ENC(202,230) },
-    { "ecirc;",  6, ENC(234,144) },
-    { "Egrave;", 7, ENC(200,233) },
-    { "egrave;", 7, ENC(232,143) },
-    { "ETH;",    4, ENC(208, -1) },
-    { "eth;",    4, ENC(240, -1) },
-    { "Euml;",   5, ENC(203,232) },
-    { "euml;",   5, ENC(235,145) },
-    { "euro;",   5, ENC(128,219) },
-    { "frac12;", 7, ENC(189, -1) },
-    { "frac14;", 7, ENC(188, -1) },
-    { "frac34;", 7, ENC(190, -1) },
-    { "gt;",     3, ENC('>','>') },
-    { "Iacute;", 7, ENC(205,234) },
-    { "iacute;", 7, ENC(237,146) },
-    { "Icirc;",  6, ENC(206,235) },
-    { "icirc;",  6, ENC(238,148) },
-    { "iexcl;",  6, ENC(161,193) },
-    { "Igrave;", 7, ENC(204,237) },
-    { "igrave;", 7, ENC(236,147) },
-    { "iquest;", 7, ENC(191,192) },
-    { "Iuml;",   5, ENC(207,236) },
-    { "iuml;",   5, ENC(239,149) },
-    { "laquo;",  6, ENC(171,199) },
-    { "lt;",     3, ENC('<','<') },
-    { "macr;",   5, ENC(175,248) },
-    { "micro;",  6, ENC(181,181) },
-    { "middot;", 7, ENC(183,225) },
-    { "nbsp;",   5, ENC(' ',' ') },
-    { "not;",    4, ENC(172,194) },
-    { "Ntilde;", 7, ENC(209,132) },
-    { "ntilde;", 7, ENC(241,150) },
-    { "Oacute;", 7, ENC(211,238) },
-    { "oacute;", 7, ENC(243,151) },
-    { "Ocirc;",  6, ENC(212,239) },
-    { "ocirc;",  6, ENC(244,153) },
-    { "Ograve;", 7, ENC(210,241) },
-    { "ograve;", 7, ENC(242,152) },
-    { "ordf;",   5, ENC(170,187) },
-    { "ordm;",   5, ENC(186,188) },
-    { "Oslash;", 7, ENC(216,175) },
-    { "oslash;", 7, ENC(248,191) },
-    { "Otilde;", 7, ENC(213,205) },
-    { "otilde;", 7, ENC(245,155) },
-    { "Ouml;",   5, ENC(214,133) },
-    { "ouml;",   5, ENC(246,154) },
-    { "para;",   5, ENC(182,166) },
-    { "premil;", 7, ENC(137,228) },
-    { "plusmn;", 7, ENC(177,177) },
-    { "pound;",  6, ENC(163,163) },
-    { "quot;",   5, ENC('\"','\"') },
-    { "raquo;",  6, ENC(187,200) },
-    { "reg;",    4, ENC(174,168) },
-    { "sect;",   5, ENC(167,164) },
-    { "shy;",    4, ENC(173,'-') },
-    { "sup1;",   5, ENC(185, -1) },
-    { "sup2;",   5, ENC(178, -1) },
-    { "sup3;",   5, ENC(179, -1) },
-    { "szlig;",  6, ENC(223,167) },
-    { "THORN;",  6, ENC(222, -1) },
-    { "thorn;",  6, ENC(254, -1) },
-    { "times;",  6, ENC(215,'x') },
-    { "trade;",  6, ENC(153,170) },
-    { "Uacute;", 7, ENC(218,242) },
-    { "uacute;", 7, ENC(250,156) },
-    { "Ucirc;",  6, ENC(219,243) },
-    { "ucirc;",  6, ENC(251,158) },
-    { "Ugrave;", 7, ENC(217,244) },
-    { "ugrave;", 7, ENC(249,157) },
-    { "uml;",    4, ENC(168,172) },
-    { "Uuml;",   5, ENC(220,134) },
-    { "uuml;",   5, ENC(252,159) },
-    { "Yacute;", 7, ENC(221, -1) },
-    { "yacute;", 7, ENC(253, -1) },
-    { "yen;",    4, ENC(165,180) },
-    { "Yuml;",   5, ENC(159,217) },
-    { "yuml;",   5, ENC(255,216) }
-  };
-
-  if (!strchr(p, ';')) return -1;
-  if (*p == '#') {
-    if (*(p+1) == 'x' || *(p+1) == 'X') return strtol(p+2, NULL, 16);
-    else return atoi(p+1);
-  }
-  for (i = (int)(sizeof(names) / sizeof(names[0])), nameptr = names; i > 0; i --, nameptr ++)
-    if (strncmp(p, nameptr->name, nameptr->namelen) == 0)
-      return nameptr->code;
-
-  return -1;
-}
-
-
-/** The vertical scrollbar callback. */
-static void
-scrollbar_callback(Fl_Widget *s, void *)
-{
-  ((Fl_Help_View *)(s->parent()))->topline(int(((Fl_Scrollbar*)s)->value()));
-}
-
-
-/** The horizontal scrollbar callback. */
-static void
-hscrollbar_callback(Fl_Widget *s, void *)
-{
-  ((Fl_Help_View *)(s->parent()))->leftline(int(((Fl_Scrollbar*)s)->value()));
-}
-
-
-//
-// End of "$Id: Fl_Help_View.cxx 8063 2010-12-19 21:20:10Z matt $".
-//
diff --git a/common/fltk/src/Fl_Image.cxx b/common/fltk/src/Fl_Image.cxx
deleted file mode 100644
index 58157be..0000000
--- a/common/fltk/src/Fl_Image.cxx
+++ /dev/null
@@ -1,604 +0,0 @@
-//
-// "$Id: Fl_Image.cxx 8611 2011-04-20 14:01:04Z AlbrechtS $"
-//
-// Image drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Image.H>
-#include "flstring.h"
-
-#ifdef WIN32
-void fl_release_dc(HWND, HDC); // from Fl_win32.cxx
-#endif
-
-void fl_restore_clip(); // from fl_rect.cxx
-
-//
-// Base image class...
-//
-
-/**
-  The destructor is a virtual method that frees all memory used
-  by the image.
-*/
-Fl_Image::~Fl_Image() {
-}
-
-/**
-  If the image has been cached for display, delete the cache
-  data. This allows you to change the data used for the image and
-  then redraw it without recreating an image object.
-*/
-void Fl_Image::uncache() {
-}
-
-void Fl_Image::draw(int XP, int YP, int, int, int, int) {
-  draw_empty(XP, YP);
-}
-
-/**
-  The protected method draw_empty() draws a box with
-  an X in it. It can be used to draw any image that lacks image
-  data.
-*/
-void Fl_Image::draw_empty(int X, int Y) {
-  if (w() > 0 && h() > 0) {
-    fl_color(FL_FOREGROUND_COLOR);
-    fl_rect(X, Y, w(), h());
-    fl_line(X, Y, X + w() - 1, Y + h() - 1);
-    fl_line(X, Y + h() - 1, X + w() - 1, Y);
-  }
-}
-
-/**
-  The copy() method creates a copy of the specified
-  image. If the width and height are provided, the image is
-  resized to the specified size. The image should be deleted (or in
-  the case of Fl_Shared_Image, released) when you are done
-  with it.
-*/
-Fl_Image *Fl_Image::copy(int W, int H) {
-  return new Fl_Image(W, H, d());
-}
-
-/**
-  The color_average() method averages the colors in
-  the image with the FLTK color value c. The i
-  argument specifies the amount of the original image to combine
-  with the color, so a value of 1.0 results in no color blend, and
-  a value of 0.0 results in a constant image of the specified
-  color. <I>The original image data is not altered by this
-  method.</I>
-*/
-void Fl_Image::color_average(Fl_Color, float) {
-}
-
-/**
-  The desaturate() method converts an image to
-  grayscale. If the image contains an alpha channel (depth = 4),
-  the alpha channel is preserved. <I>This method does not alter
-  the original image data.</I>
-*/
-void Fl_Image::desaturate() {
-}
-
-/**
-  The label() methods are an obsolete way to set the
-  image attribute of a widget or menu item. Use the
-  image() or deimage() methods of the
-  Fl_Widget and Fl_Menu_Item classes
-  instead.
-*/
-void Fl_Image::label(Fl_Widget* widget) {
-  widget->image(this);
-}
-
-/**
-  The label() methods are an obsolete way to set the
-  image attribute of a widget or menu item. Use the
-  image() or deimage() methods of the
-  Fl_Widget and Fl_Menu_Item classes
-  instead.
-*/
-void Fl_Image::label(Fl_Menu_Item* m) {
-  Fl::set_labeltype(_FL_IMAGE_LABEL, labeltype, measure);
-  m->label(_FL_IMAGE_LABEL, (const char*)this);
-}
-
-void
-Fl_Image::labeltype(const Fl_Label *lo,		// I - Label
-                    int            lx,		// I - X position
-		    int            ly,		// I - Y position
-		    int            lw,		// I - Width of label
-		    int            lh,		// I - Height of label
-		    Fl_Align       la) {	// I - Alignment
-  Fl_Image	*img;				// Image pointer
-  int		cx, cy;				// Image position
-
-  img = (Fl_Image *)(lo->value);
-
-  if (la & FL_ALIGN_LEFT) cx = 0;
-  else if (la & FL_ALIGN_RIGHT) cx = img->w() - lw;
-  else cx = (img->w() - lw) / 2;
-
-  if (la & FL_ALIGN_TOP) cy = 0;
-  else if (la & FL_ALIGN_BOTTOM) cy = img->h() - lh;
-  else cy = (img->h() - lh) / 2;
-
-  fl_color((Fl_Color)lo->color);
-
-  img->draw(lx, ly, lw, lh, cx, cy);
-}
-
-void
-Fl_Image::measure(const Fl_Label *lo,		// I - Label
-                  int            &lw,		// O - Width of image
-		  int            &lh) {		// O - Height of image
-  Fl_Image *img;				// Image pointer
-
-  img = (Fl_Image *)(lo->value);
-
-  lw = img->w();
-  lh = img->h();
-}
-
-
-//
-// RGB image class...
-//
-
-int fl_convert_pixmap(const char*const* cdata, uchar* out, Fl_Color bg);
-
-/** The constructor creates a new RGBA image from the specified Fl_Pixmap. */
-Fl_RGB_Image::Fl_RGB_Image(const Fl_Pixmap *pxm, Fl_Color bg):
-  Fl_Image(pxm->w(), pxm->h(), 4), id_(0), mask_(0)
-{
-  array = new uchar[w() * h() * d()];
-  alloc_array = 1;
-  fl_convert_pixmap(pxm->data(), (uchar*)array, bg);
-  data((const char **)&array, 1);
-}
-
-/**  The destructor free all memory and server resources that are used by  the image. */
-Fl_RGB_Image::~Fl_RGB_Image() {
-  uncache();
-  if (alloc_array) delete[] (uchar *)array;
-}
-
-void Fl_RGB_Image::uncache() {
-#ifdef __APPLE_QUARTZ__
-  if (id_) {
-    CGImageRelease((CGImageRef)id_);
-    id_ = 0;
-  }
-#else
-  if (id_) {
-    fl_delete_offscreen((Fl_Offscreen)id_);
-    id_ = 0;
-  }
-
-  if (mask_) {
-    fl_delete_bitmask((Fl_Bitmask)mask_);
-    mask_ = 0;
-  }
-#endif
-}
-
-Fl_Image *Fl_RGB_Image::copy(int W, int H) {
-  Fl_RGB_Image	*new_image;	// New RGB image
-  uchar		*new_array;	// New array for image data
-
-  // Optimize the simple copy where the width and height are the same,
-  // or when we are copying an empty image...
-  if ((W == w() && H == h()) ||
-      !w() || !h() || !d() || !array) {
-    if (array) {
-      // Make a copy of the image data and return a new Fl_RGB_Image...
-      new_array = new uchar[w() * h() * d()];
-      if (ld() && ld()!=w()*d()) {
-        const uchar *src = array;
-        uchar *dst = new_array;
-        int dy, dh = h(), wd = w()*d(), wld = ld();
-        for (dy=0; dy<dh; dy++) {
-          memcpy(dst, src, wd);
-          src += wld;
-          dst += wd;
-        }
-      } else {
-        memcpy(new_array, array, w() * h() * d());
-      }
-      new_image = new Fl_RGB_Image(new_array, w(), h(), d());
-      new_image->alloc_array = 1;
-
-      return new_image;
-    } else return new Fl_RGB_Image(array, w(), h(), d(), ld());
-  }
-  if (W <= 0 || H <= 0) return 0;
-
-  // OK, need to resize the image data; allocate memory and 
-  uchar		*new_ptr;	// Pointer into new array
-  const uchar	*old_ptr;	// Pointer into old array
-  int		c,		// Channel number
-		sy,		// Source coordinate
-		dx, dy,		// Destination coordinates
-		xerr, yerr,	// X & Y errors
-		xmod, ymod,	// X & Y moduli
-		xstep, ystep,	// X & Y step increments
-    line_d; // stride from line to line
-
-
-  // Figure out Bresenheim step/modulus values...
-  xmod   = w() % W;
-  xstep  = (w() / W) * d();
-  ymod   = h() % H;
-  ystep  = h() / H;
-  line_d = ld() ? ld() : w() * d();
-
-  // Allocate memory for the new image...
-  new_array = new uchar [W * H * d()];
-  new_image = new Fl_RGB_Image(new_array, W, H, d());
-  new_image->alloc_array = 1;
-
-  // Scale the image using a nearest-neighbor algorithm...
-  for (dy = H, sy = 0, yerr = H, new_ptr = new_array; dy > 0; dy --) {
-    for (dx = W, xerr = W, old_ptr = array + sy * line_d; dx > 0; dx --) {
-      for (c = 0; c < d(); c ++) *new_ptr++ = old_ptr[c];
-
-      old_ptr += xstep;
-      xerr    -= xmod;
-
-      if (xerr <= 0) {
-	xerr    += W;
-	old_ptr += d();
-      }
-    }
-
-    sy   += ystep;
-    yerr -= ymod;
-    if (yerr <= 0) {
-      yerr += H;
-      sy ++;
-    }
-  }
-
-  return new_image;
-}
-
-void Fl_RGB_Image::color_average(Fl_Color c, float i) {
-  // Don't average an empty image...
-  if (!w() || !h() || !d() || !array) return;
-
-  // Delete any existing pixmap/mask objects...
-  uncache();
-
-  // Allocate memory as needed...
-  uchar		*new_array,
-		*new_ptr;
-
-  if (!alloc_array) new_array = new uchar[h() * w() * d()];
-  else new_array = (uchar *)array;
-
-  // Get the color to blend with...
-  uchar		r, g, b;
-  unsigned	ia, ir, ig, ib;
-
-  Fl::get_color(c, r, g, b);
-  if (i < 0.0f) i = 0.0f;
-  else if (i > 1.0f) i = 1.0f;
-
-  ia = (unsigned)(256 * i);
-  ir = r * (256 - ia);
-  ig = g * (256 - ia);
-  ib = b * (256 - ia);
-
-  // Update the image data to do the blend...
-  const uchar	*old_ptr;
-  int		x, y;
-  int   line_i = ld() ? ld() - (w()*d()) : 0; // increment from line end to beginning of next line
-
-  if (d() < 3) {
-    ig = (r * 31 + g * 61 + b * 8) / 100 * (256 - ia);
-
-    for (new_ptr = new_array, old_ptr = array, y = 0; y < h(); y ++, old_ptr += line_i)
-      for (x = 0; x < w(); x ++) {
-	*new_ptr++ = (*old_ptr++ * ia + ig) >> 8;
-	if (d() > 1) *new_ptr++ = *old_ptr++;
-      }
-  } else {
-    for (new_ptr = new_array, old_ptr = array, y = 0; y < h(); y ++, old_ptr += line_i)
-      for (x = 0; x < w(); x ++) {
-	*new_ptr++ = (*old_ptr++ * ia + ir) >> 8;
-	*new_ptr++ = (*old_ptr++ * ia + ig) >> 8;
-	*new_ptr++ = (*old_ptr++ * ia + ib) >> 8;
-	if (d() > 3) *new_ptr++ = *old_ptr++;
-      }
-  }
-
-  // Set the new pointers/values as needed...
-  if (!alloc_array) {
-    array       = new_array;
-    alloc_array = 1;
-
-    ld(0);
-  }
-}
-
-void Fl_RGB_Image::desaturate() {
-  // Don't desaturate an empty image...
-  if (!w() || !h() || !d() || !array) return;
-
-  // Can only desaturate color images...
-  if (d() < 3) return;
-
-  // Delete any existing pixmap/mask objects...
-  uncache();
-
-  // Allocate memory for a grayscale image...
-  uchar		*new_array,
-		*new_ptr;
-  int		new_d;
-
-  new_d     = d() - 2;
-  new_array = new uchar[h() * w() * new_d];
-
-  // Copy the image data, converting to grayscale...
-  const uchar	*old_ptr;
-  int		x, y;
-  int   line_i = ld() ? ld() - (w()*d()) : 0; // increment from line end to beginning of next line
-
-  for (new_ptr = new_array, old_ptr = array, y = 0; y < h(); y ++, old_ptr += line_i)
-    for (x = 0; x < w(); x ++, old_ptr += d()) {
-      *new_ptr++ = (uchar)((31 * old_ptr[0] + 61 * old_ptr[1] + 8 * old_ptr[2]) / 100);
-      if (d() > 3) *new_ptr++ = old_ptr[3];
-    }
-
-  // Free the old array as needed, and then set the new pointers/values...
-  if (alloc_array) delete[] (uchar *)array;
-
-  array       = new_array;
-  alloc_array = 1;
-
-  ld(0);
-  d(new_d);
-}
-
-#if !defined(WIN32) && !defined(__APPLE_QUARTZ__)
-// Composite an image with alpha on systems that don't have accelerated
-// alpha compositing...
-static void alpha_blend(Fl_RGB_Image *img, int X, int Y, int W, int H, int cx, int cy) {
-  int ld = img->ld();
-  if (ld == 0) ld = img->w() * img->d();
-  uchar *srcptr = (uchar*)img->array + cy * ld + cx * img->d();
-  int srcskip = ld - img->d() * W;
-
-  uchar *dst = new uchar[W * H * 3];
-  uchar *dstptr = dst;
-
-  fl_read_image(dst, X, Y, W, H, 0);
-
-  uchar srcr, srcg, srcb, srca;
-  uchar dstr, dstg, dstb, dsta;
-
-  if (img->d() == 2) {
-    // Composite grayscale + alpha over RGB...
-    for (int y = H; y > 0; y--, srcptr+=srcskip)
-      for (int x = W; x > 0; x--) {
-	srcg = *srcptr++;
-	srca = *srcptr++;
-
-	dstr = dstptr[0];
-	dstg = dstptr[1];
-	dstb = dstptr[2];
-	dsta = 255 - srca;
-
-	*dstptr++ = (srcg * srca + dstr * dsta) >> 8;
-	*dstptr++ = (srcg * srca + dstg * dsta) >> 8;
-	*dstptr++ = (srcg * srca + dstb * dsta) >> 8;
-      }
-  } else {
-    // Composite RGBA over RGB...
-    for (int y = H; y > 0; y--, srcptr+=srcskip)
-      for (int x = W; x > 0; x--) {
-	srcr = *srcptr++;
-	srcg = *srcptr++;
-	srcb = *srcptr++;
-	srca = *srcptr++;
-
-	dstr = dstptr[0];
-	dstg = dstptr[1];
-	dstb = dstptr[2];
-	dsta = 255 - srca;
-
-	*dstptr++ = (srcr * srca + dstr * dsta) >> 8;
-	*dstptr++ = (srcg * srca + dstg * dsta) >> 8;
-	*dstptr++ = (srcb * srca + dstb * dsta) >> 8;
-      }
-  }
-
-  fl_draw_image(dst, X, Y, W, H, 3, 0);
-
-  delete[] dst;
-}
-#endif // !WIN32 && !__APPLE_QUARTZ__
-
-void Fl_RGB_Image::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
-  fl_graphics_driver->draw(this, XP, YP, WP, HP, cx, cy);
-}
-
-static int start(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int w, int h, int &cx, int &cy, 
-		 int &X, int &Y, int &W, int &H)
-{
-  // account for current clip region (faster on Irix):
-  fl_clip_box(XP,YP,WP,HP,X,Y,W,H);
-  cx += X-XP; cy += Y-YP;
-  // clip the box down to the size of image, quit if empty:
-  if (cx < 0) {W += cx; X -= cx; cx = 0;}
-  if (cx+W > w) W = w-cx;
-  if (W <= 0) return 1;
-  if (cy < 0) {H += cy; Y -= cy; cy = 0;}
-  if (cy+H > h) H = h-cy;
-  if (H <= 0) return 1;
-  return 0;
-}
-
-#ifdef __APPLE__
-void Fl_Quartz_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  // Don't draw an empty image...
-  if (!img->d() || !img->array) {
-    img->draw_empty(XP, YP);
-    return;
-  }
-  if (start(img, XP, YP, WP, HP, img->w(), img->h(), cx, cy, X, Y, W, H)) {
-    return;
-  }
-  if (!img->id_) {
-    CGColorSpaceRef lut = 0;
-    if (img->d()<=2)
-      lut = CGColorSpaceCreateDeviceGray();
-    else
-      lut = CGColorSpaceCreateDeviceRGB();
-    CGDataProviderRef src = CGDataProviderCreateWithData( 0L, img->array, img->w()*img->h()*img->d(), 0L);
-    img->id_ = CGImageCreate( img->w(), img->h(), 8, img->d()*8, img->ld()?img->ld():img->w()*img->d(),
-			lut, (img->d()&1)?kCGImageAlphaNone:kCGImageAlphaLast,
-			src, 0L, false, kCGRenderingIntentDefault);
-    CGColorSpaceRelease(lut);
-    CGDataProviderRelease(src);
-  }
-  if (img->id_ && fl_gc) {
-    CGRect rect = { { X, Y }, { W, H } };
-    Fl_X::q_begin_image(rect, cx, cy, img->w(), img->h());
-    CGContextDrawImage(fl_gc, rect, (CGImageRef)img->id_);
-    Fl_X::q_end_image();
-  }
-}
-
-#elif defined(WIN32)
-void Fl_GDI_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  // Don't draw an empty image...
-  if (!img->d() || !img->array) {
-    img->draw_empty(XP, YP);
-    return;
-  }
-  if (start(img, XP, YP, WP, HP, img->w(), img->h(), cx, cy, X, Y, W, H)) {
-    return;
-  }
-  if (!img->id_) {
-    img->id_ = fl_create_offscreen(img->w(), img->h());
-    if ((img->d() == 2 || img->d() == 4) && fl_can_do_alpha_blending()) {
-      fl_begin_offscreen((Fl_Offscreen)img->id_);
-      fl_draw_image(img->array, 0, 0, img->w(), img->h(), img->d()|FL_IMAGE_WITH_ALPHA, img->ld());
-      fl_end_offscreen();
-    } else {
-      fl_begin_offscreen((Fl_Offscreen)img->id_);
-      fl_draw_image(img->array, 0, 0, img->w(), img->h(), img->d(), img->ld());
-      fl_end_offscreen();
-      if (img->d() == 2 || img->d() == 4) {
-        img->mask_ = fl_create_alphamask(img->w(), img->h(), img->d(), img->ld(), img->array);
-      }
-    }
-  }
-  if (img->mask_) {
-    HDC new_gc = CreateCompatibleDC(fl_gc);
-    int save = SaveDC(new_gc);
-    SelectObject(new_gc, (void*)img->mask_);
-    BitBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, SRCAND);
-    SelectObject(new_gc, (void*)img->id_);
-    BitBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, SRCPAINT);
-    RestoreDC(new_gc,save);
-    DeleteDC(new_gc);
-  } else if (img->d()==2 || img->d()==4) {
-    fl_copy_offscreen_with_alpha(X, Y, W, H, (Fl_Offscreen)img->id_, cx, cy);
-  } else {
-    fl_copy_offscreen(X, Y, W, H, (Fl_Offscreen)img->id_, cx, cy);
-  }
-}
-
-#else
-void Fl_Xlib_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  // Don't draw an empty image...
-  if (!img->d() || !img->array) {
-    img->draw_empty(XP, YP);
-    return;
-  }
-  if (start(img, XP, YP, WP, HP, img->w(), img->h(), cx, cy, X, Y, W, H)) {
-    return;
-  }
-  if (!img->id_) {
-    if (img->d() == 1 || img->d() == 3) {
-      img->id_ = fl_create_offscreen(img->w(), img->h());
-      fl_begin_offscreen((Fl_Offscreen)img->id_);
-      fl_draw_image(img->array, 0, 0, img->w(), img->h(), img->d(), img->ld());
-      fl_end_offscreen();
-    }
-  }
-  if (img->id_) {
-    if (img->mask_) {
-      // I can't figure out how to combine a mask with existing region,
-      // so cut the image down to a clipped rectangle:
-      int nx, ny; fl_clip_box(X,Y,W,H,nx,ny,W,H);
-      cx += nx-X; X = nx;
-      cy += ny-Y; Y = ny;
-      // make X use the bitmap as a mask:
-      XSetClipMask(fl_display, fl_gc, img->mask_);
-      int ox = X-cx; if (ox < 0) ox += img->w();
-      int oy = Y-cy; if (oy < 0) oy += img->h();
-      XSetClipOrigin(fl_display, fl_gc, X-cx, Y-cy);
-    }
-    
-    fl_copy_offscreen(X, Y, W, H, img->id_, cx, cy);
-    
-    if (img->mask_) {
-      // put the old clip region back
-      XSetClipOrigin(fl_display, fl_gc, 0, 0);
-      fl_restore_clip();
-    }
-  } else {
-    // Composite image with alpha manually each time...
-    alpha_blend(img, X, Y, W, H, cx, cy);
-  }
-}
-
-#endif
-
-void Fl_RGB_Image::label(Fl_Widget* widget) {
-  widget->image(this);
-}
-
-void Fl_RGB_Image::label(Fl_Menu_Item* m) {
-  Fl::set_labeltype(_FL_IMAGE_LABEL, labeltype, measure);
-  m->label(_FL_IMAGE_LABEL, (const char*)this);
-}
-
-
-//
-// End of "$Id: Fl_Image.cxx 8611 2011-04-20 14:01:04Z AlbrechtS $".
-//
diff --git a/common/fltk/src/Fl_Input.cxx b/common/fltk/src/Fl_Input.cxx
deleted file mode 100644
index d38d5cf..0000000
--- a/common/fltk/src/Fl_Input.cxx
+++ /dev/null
@@ -1,822 +0,0 @@
-//
-// "$Id: Fl_Input.cxx 8726 2011-05-23 18:32:47Z AlbrechtS $"
-//
-// Input widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This is the "user interface", it decodes user actions into what to
-// do to the text.  See also Fl_Input_.cxx, where the text is actually
-// manipulated (and some ui, in particular the mouse, is done...).
-// In theory you can replace this code with another subclass to change
-// the keybindings.
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Input.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_ask.H>
-#include "flstring.h"
-
-#if defined(FL_DLL)	// really needed for c'tors for MS VC++ only
-#include <FL/Fl_Float_Input.H>
-#include <FL/Fl_Int_Input.H>
-#include <FL/Fl_Multiline_Input.H>
-#include <FL/Fl_Output.H>
-#include <FL/Fl_Multiline_Output.H>
-#include <FL/Fl_Secret_Input.H>
-#endif
-
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-
-void Fl_Input::draw() {
-  if (input_type() == FL_HIDDEN_INPUT) return;
-  Fl_Boxtype b = box();
-  if (damage() & FL_DAMAGE_ALL) draw_box(b, color());
-  Fl_Input_::drawtext(x()+Fl::box_dx(b), y()+Fl::box_dy(b),
-		      w()-Fl::box_dw(b), h()-Fl::box_dh(b));
-}
-
-// kludge so shift causes selection to extend:
-int Fl_Input::shift_position(int p) {
-  return position(p, Fl::event_state(FL_SHIFT) ? mark() : p);
-}
-
-int Fl_Input::shift_up_down_position(int p) {
-  return up_down_position(p, Fl::event_state(FL_SHIFT));
-}
-
-// Old text from FLTK 1.1 for reference:
-// If you define NORMAL_INPUT_MOVE as zero you will get the peculiar fltk
-// behavior where moving off the end of an input field will move the
-// cursor into the next field:
-// define it as 1 to prevent cursor movement from going to next field:
-//
-// Note: this has been replaced by Fl::option(Fl::OPTION_ARROW_FOCUS)
-// in FLTK 1.3.  This option has "inverted" values:
-//   1 = Arrow keys move focus (previously 0)
-//   0 = Arrow keys don't move focus (previously 1)
-// Hence we define ...
-//
-#define NORMAL_INPUT_MOVE (Fl::option(Fl::OPTION_ARROW_FOCUS) ? 0 : 1)
-
-#define ctrl(x) ((x)^0x40)
-
-// List of characters that are legal in a floating point input field.
-// This text string is created at run-time to take the current locale
-// into account (for example, continental Europe uses a comma instead
-// of a decimal point). For back compatibility reasons, we always 
-// allow the decimal point.
-#ifdef HAVE_LOCALECONV
-static const char *standard_fp_chars = ".eE+-"; 
-static const char *legal_fp_chars = 0L;
-#else
-static const char *legal_fp_chars = ".eE+-"; 
-#endif
-
-// Move cursor up specified #lines
-//    If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
-//
-int Fl_Input::kf_lines_up(int repeat_num) {
-  int i = position();
-  if (!line_start(i)) {
-    //UNNEEDED if (input_type()==FL_MULTILINE_INPUT && !Fl::option(Fl::OPTION_ARROW_FOCUS)) return 1;
-    return NORMAL_INPUT_MOVE;
-  }
-  while(repeat_num--) {
-    i = line_start(i);
-    if (!i) break;
-    i--;
-  }
-  shift_up_down_position(line_start(i));
-  return 1;
-}
-
-// Move cursor down specified #lines
-//    If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
-//
-int Fl_Input::kf_lines_down(int repeat_num) {
-  int i = position();
-  if (line_end(i) >= size()) {
-    //UNNEEDED if (input_type()==FL_MULTILINE_INPUT && !Fl::option(Fl::OPTION_ARROW_FOCUS)) return 1;
-    return NORMAL_INPUT_MOVE;
-  }
-  while (repeat_num--) {  
-    i = line_end(i);
-    if (i >= size()) break;
-    i++;
-  }
-  shift_up_down_position(i);
-  return 1;
-}
-
-// Move up a page
-int Fl_Input::kf_page_up() {
-  return kf_lines_up(linesPerPage());
-}
-
-// Move down a page
-int Fl_Input::kf_page_down() {
-  return kf_lines_down(linesPerPage());
-}
-
-// Toggle insert mode
-int Fl_Input::kf_insert_toggle() {
-  if (readonly()) { fl_beep(); return 1; }
-  return 1;				// \todo: needs insert mode
-}
-
-// Delete word right
-int Fl_Input::kf_delete_word_right() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) return cut();
-  cut(position(), word_end(position()));
-  return 1;
-}
-
-// Delete word left
-int Fl_Input::kf_delete_word_left() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) return cut();
-  cut(word_start(position()), position());
-  return 1;
-}
-
-// Delete to start of line
-int Fl_Input::kf_delete_sol() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) return cut();
-  cut(line_start(position()), position());
-  return 1;
-}
-
-// Delete to end of line
-int Fl_Input::kf_delete_eol() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) return cut();
-  cut(position(), line_end(position()));
-  return 1;
-}
-
-int Fl_Input::kf_delete_char_right() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) return cut();
-  else return cut(1);
-}
-
-int Fl_Input::kf_delete_char_left() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) cut();
-  else cut(-1);
-  return 1;
-}
-
-// Move cursor to start of line
-int Fl_Input::kf_move_sol() {
-  return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
-}
-
-// Move cursor to end of line
-int Fl_Input::kf_move_eol() {
-  return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
-}
-
-// Clear to end of line
-int Fl_Input::kf_clear_eol() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (position()>=size()) return 0;
-  int i = line_end(position());
-  if (i == position() && i < size()) i++;
-  cut(position(), i);
-  return copy_cuts();
-}
-
-// Move cursor one character to the left
-//    If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
-//
-int Fl_Input::kf_move_char_left() {
-  int i = shift_position(position()-1) + NORMAL_INPUT_MOVE;
-  return Fl::option(Fl::OPTION_ARROW_FOCUS) ? i : 1;
-}
-
-// Move cursor one character to the right
-//    If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
-//
-int Fl_Input::kf_move_char_right() {
-  int i = shift_position(position()+1) + NORMAL_INPUT_MOVE;
-  return Fl::option(Fl::OPTION_ARROW_FOCUS) ? i : 1;
-}
-
-// Move cursor word-left
-int Fl_Input::kf_move_word_left() {
-  shift_position(word_start(position()));
-  return 1; 
-}
-
-// Move cursor word-right
-int Fl_Input::kf_move_word_right() {
-  shift_position(word_end(position()));
-  return 1;
-}
-
-// Move cursor up one line and to the start of line (paragraph up)
-int Fl_Input::kf_move_up_and_sol() {
-  if (line_start(position())==position() && position()>0)
-    return shift_position(line_start(position()-1)) + NORMAL_INPUT_MOVE;
-  else
-    return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
-}
-
-// Move cursor down one line and to the end of line (paragraph down)
-int Fl_Input::kf_move_down_and_eol() {
-  if (line_end(position())==position() && position()<size())
-    return shift_position(line_end(position()+1)) + NORMAL_INPUT_MOVE;
-  else
-    return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
-}
-
-// Move to top of document
-int Fl_Input::kf_top() {
-  shift_position(0);
-  return 1;
-}
-
-// Move to bottom of document
-int Fl_Input::kf_bottom() {
-  shift_position(size());
-  return 1; 
-}
-
-// Select all text in the widget
-int Fl_Input::kf_select_all() {
-  position(0,size());
-  return 1;
-}
-
-// Undo.
-int Fl_Input::kf_undo() {
-  if (readonly()) { fl_beep(); return 1; }
-  return undo();
-}
-
-// Redo. (currently unimplemented.. toggles undo() instead)
-int Fl_Input::kf_redo() {
-  if (readonly()) { fl_beep(); return 1; }
-  return kf_undo();			// currently we don't support multilevel undo
-}
-
-// Do a copy operation
-int Fl_Input::kf_copy() {
-  return copy(1);
-}
-
-// Do a paste operation
-int Fl_Input::kf_paste() {
-  if (readonly()) { fl_beep(); return 1; }
-  Fl::paste(*this, 1);
-  return 1;
-}
-
-// Do a cut with copy
-int Fl_Input::kf_copy_cut() {
-  if (readonly()) { fl_beep(); return 1; }
-  copy(1);
-  return cut();
-}
-
-// Handle a keystroke.
-//     Returns 1 if handled by us, 0 if not.
-//
-int Fl_Input::handle_key() {
-  
-  char ascii = Fl::event_text()[0];
-  
-  int del;
-  if (Fl::compose(del)) {
-    
-    // Insert characters into numeric fields after checking for legality:
-    if (input_type() == FL_FLOAT_INPUT || input_type() == FL_INT_INPUT) {
-      Fl::compose_reset(); // ignore any foreign letters...
-      
-      // initialize the list of legal characters inside a floating point number
-#ifdef HAVE_LOCALECONV
-      if (!legal_fp_chars) {
-        int len = strlen(standard_fp_chars);
-        struct lconv *lc = localeconv();
-        if (lc) {
-          if (lc->decimal_point) len += strlen(lc->decimal_point);
-          if (lc->mon_decimal_point) len += strlen(lc->mon_decimal_point);
-          if (lc->positive_sign) len += strlen(lc->positive_sign);
-          if (lc->negative_sign) len += strlen(lc->negative_sign);
-        }
-        // the following line is not a true memory leak because the array is only
-        // allocated once if required, and automatically freed when the program quits
-        char *chars = (char*)malloc(len+1);
-	legal_fp_chars = chars;
-        strcpy(chars, standard_fp_chars);
-        if (lc) {
-          if (lc->decimal_point) strcat(chars, lc->decimal_point);
-          if (lc->mon_decimal_point) strcat(chars, lc->mon_decimal_point);
-          if (lc->positive_sign) strcat(chars, lc->positive_sign);
-          if (lc->negative_sign) strcat(chars, lc->negative_sign);
-        }
-      }
-#endif // HAVE_LOCALECONV
-      
-      // find the insert position
-      int ip = position()<mark() ? position() : mark();
-      // This is complex to allow "0xff12" hex to be typed:
-      if (   (!ip && (ascii == '+' || ascii == '-')) 
-          || (ascii >= '0' && ascii <= '9') 
-          || (ip==1 && index(0)=='0' && (ascii=='x' || ascii == 'X')) 
-          || (ip>1 && index(0)=='0' && (index(1)=='x'||index(1)=='X') 
-              && ((ascii>='A'&& ascii<='F') || (ascii>='a'&& ascii<='f'))) 
-          || (input_type()==FL_FLOAT_INPUT && ascii && strchr(legal_fp_chars, ascii))) 
-      {
-	if (readonly()) fl_beep();
-	else replace(position(), mark(), &ascii, 1);
-      }
-      return 1;
-    }
-    
-    if (del || Fl::event_length()) {
-      if (readonly()) fl_beep();
-      else replace(position(), del ? position()-del : mark(),
-	           Fl::event_text(), Fl::event_length());
-    }
-    return 1;
-  }
-  
-  unsigned int mods = Fl::event_state() & (FL_META|FL_CTRL|FL_ALT);
-  unsigned int shift = Fl::event_state() & FL_SHIFT;
-  unsigned int multiline = (input_type() == FL_MULTILINE_INPUT) ? 1 : 0;
-  //
-  // The following lists apps that support these keypresses.
-  // Prefixes: '!' indicates NOT supported, '?' indicates un-verified.
-  //
-  //    HIG=Human Interface Guide, 
-  //    TE=TextEdit.app, SA=Safari.app, WOX=MS Word/OSX -- OSX 10.4.x
-  //    NP=Notepad, WP=WordPad, WOW=MS Word/Windows     -- WinXP
-  //    GE=gedit, KE=kedit                              -- Ubuntu8.04
-  //    OF=old FLTK behavior (<=1.1.10)
-  //
-  // Example: (NP,WP,!WO) means supported in notepad + wordpad, but NOT word.
-  //
-  switch (Fl::event_key()) {
-
-    case FL_Insert:
-      // Note: Mac has no "Insert" key; it's the "Help" key.
-      //       This keypress is apparently not possible on macs.
-      //
-      if (mods==0 && shift) return kf_paste();			// Shift-Insert   (WP,NP,WOW,GE,KE,OF)
-      if (mods==0)          return kf_insert_toggle();		// Insert         (Standard)
-      if (mods==FL_CTRL)    return kf_copy();			// Ctrl-Insert    (WP,NP,WOW,GE,KE,OF)
-      return 0;							// ignore other combos, pass to parent
-
-    case FL_Delete: {
-#ifdef __APPLE__
-      if (mods==0)          return kf_delete_char_right();	// Delete         (OSX-HIG,TE,SA,WOX)
-      if (mods==FL_CTRL)    return kf_delete_char_right();	// Ctrl-Delete    (??? TE,!SA,!WOX)
-      if (mods==FL_ALT)     return kf_delete_word_right();	// Alt-Delete     (OSX-HIG,TE,SA)
-      return 0;							// ignore other combos, pass to parent
-#else
-      int selected = (position() != mark()) ? 1 : 0;
-      if (mods==0 && shift && selected)
-                            return kf_copy_cut();		// Shift-Delete with selection (WP,NP,WOW,GE,KE,OF)
-      if (mods==0 && shift && !selected)
-                            return kf_delete_char_right();	// Shift-Delete no selection (WP,NP,WOW,GE,KE,!OF)
-      if (mods==0)          return kf_delete_char_right();	// Delete         (Standard)
-      if (mods==FL_CTRL)    return kf_delete_word_right();	// Ctrl-Delete    (WP,!NP,WOW,GE,KE,!OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-    }
-
-    case FL_Left:
-#ifdef __APPLE__
-      if (mods==0)          return kf_move_char_left();		// Left           (OSX-HIG)
-      if (mods==FL_ALT)     return kf_move_word_left();		// Alt-Left       (OSX-HIG)
-      if (mods==FL_META)    return kf_move_sol();		// Meta-Left      (OSX-HIG)
-      if (mods==FL_CTRL)    return kf_move_sol();		// Ctrl-Left      (TE/SA)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_move_char_left();		// Left           (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_move_word_left();		// Ctrl-Left      (WP,NP,WOW,GE,KE,!OF)
-      if (mods==FL_META)    return kf_move_char_left();		// Meta-Left      (WP,NP,?WOW,GE,KE)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Right:
-#ifdef __APPLE__
-      if (mods==0)          return kf_move_char_right();	// Right          (OSX-HIG)
-      if (mods==FL_ALT)     return kf_move_word_right();	// Alt-Right      (OSX-HIG)
-      if (mods==FL_META)    return kf_move_eol();		// Meta-Right     (OSX-HIG)
-      if (mods==FL_CTRL)    return kf_move_eol();		// Ctrl-Right     (TE/SA)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_move_char_right();	// Right          (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_move_word_right();	// Ctrl-Right     (WP,NP,WOW,GE,KE,!OF)
-      if (mods==FL_META)    return kf_move_char_right();	// Meta-Right     (WP,NP,?WOW,GE,KE,!OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Up:
-#ifdef __APPLE__
-      if (mods==0)          return kf_lines_up(1);		// Up             (OSX-HIG)
-      if (mods==FL_CTRL)    return kf_page_up();		// Ctrl-Up        (TE !HIG)
-      if (mods==FL_ALT)     return kf_move_up_and_sol();	// Alt-Up         (OSX-HIG)
-      if (mods==FL_META)    return kf_top();			// Meta-Up        (OSX-HIG)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_lines_up(1);		// Up             (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_move_up_and_sol();	// Ctrl-Up        (WP,!NP,WOW,GE,!KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Down:
-#ifdef __APPLE__
-      if (mods==0)          return kf_lines_down(1);		// Dn             (OSX-HIG)
-      if (mods==FL_CTRL)    return kf_page_down();		// Ctrl-Dn        (TE !HIG)
-      if (mods==FL_ALT)     return kf_move_down_and_eol();	// Alt-Dn         (OSX-HIG)
-      if (mods==FL_META)    return kf_bottom();			// Meta-Dn        (OSX-HIG)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_lines_down(1);		// Dn             (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_move_down_and_eol();	// Ctrl-Down      (WP,!NP,WOW,GE,!KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Page_Up:
-      // Fl_Input has no scroll control, so instead we move the cursor by one page
-      // OSX-HIG recommends Alt increase one semantic unit, Meta next higher..
-#ifdef __APPLE__
-      if (mods==0)          return kf_page_up();		// PgUp           (OSX-HIG)
-      if (mods==FL_ALT)     return kf_page_up();		// Alt-PageUp     (OSX-HIG)
-      if (mods==FL_META)    return kf_top();			// Meta-PageUp    (OSX-HIG,!TE)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_page_up();		// PageUp         (WP,NP,WOW,GE,KE)
-      if (mods==FL_CTRL)    return kf_page_up();		// Ctrl-PageUp    (!WP,!NP,!WOW,!GE,KE,OF)
-      if (mods==FL_ALT)     return kf_page_up();		// Alt-PageUp     (!WP,!NP,!WOW,!GE,KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Page_Down:
-#ifdef __APPLE__
-      // Fl_Input has no scroll control, so instead we move the cursor by one page
-      // OSX-HIG recommends Alt increase one semantic unit, Meta next higher..
-      if (mods==0)          return kf_page_down();		// PgDn           (OSX-HIG)
-      if (mods==FL_ALT)     return kf_page_down();		// Alt-PageDn     (OSX-HIG)
-      if (mods==FL_META)    return kf_bottom();			// Meta-PageDn    (OSX-HIG,!TE)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_page_down();		// PageDn         (WP,NP,WOW,GE,KE)
-      if (mods==FL_CTRL)    return kf_page_down();		// Ctrl-PageDn    (!WP,!NP,!WOW,!GE,KE,OF)
-      if (mods==FL_ALT)     return kf_page_down();		// Alt-PageDn     (!WP,!NP,!WOW,!GE,KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Home:
-#ifdef __APPLE__
-      if (mods==0)          return kf_top();			// Home           (OSX-HIG)
-      if (mods==FL_ALT)     return kf_top();			// Alt-Home       (???)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_move_sol();		// Home           (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_top();			// Ctrl-Home      (WP,NP,WOW,GE,KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_End:
-#ifdef __APPLE__
-      if (mods==0)          return kf_bottom();			// End            (OSX-HIG)
-      if (mods==FL_ALT)     return kf_bottom();			// Alt-End        (???)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_move_eol();		// End            (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_bottom();			// Ctrl-End       (WP,NP,WOW,GE,KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_BackSpace:
-#ifdef __APPLE__
-      if (mods==0)          return kf_delete_char_left();	// Backspace      (OSX-HIG)
-      if (mods==FL_CTRL)    return kf_delete_char_left();	// Ctrl-Backspace (TE/SA)
-      if (mods==FL_ALT)     return kf_delete_word_left();	// Alt-Backspace  (OSX-HIG)
-      if (mods==FL_META)    return kf_delete_sol();		// Meta-Backspace (OSX-HIG,!TE)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_delete_char_left();	// Backspace      (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_delete_word_left();	// Ctrl-Backspace (WP,!NP,WOW,GE,KE,!OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Enter:
-    case FL_KP_Enter:
-      if (when() & FL_WHEN_ENTER_KEY) {
-        position(size(), 0);
-        maybe_do_callback();
-        return 1;
-      } else if (multiline && !readonly()) {
-        return replace(position(), mark(), "\n", 1);
-      } return 0;			// reserved for shortcuts
-
-    case FL_Tab:
-      // Handle special case for multiline input with 'old tab behavior';
-      // tab handled as a normal insertable character.
-      //
-      if (mods==0 && !shift 		// Tab?
-	   && !tab_nav()		// old tab behavior enabled?
-	   && multiline) {		// multiline input?
-        break;				// insert tab character
-      }
-      if (mods==0) return 0;					// Tab, Shift-Tab? nav focus      (Standard/OSX-HIG)
-      return 0;							// ignore other combos, pass to parent
-
-    case 'a':
-      if (mods==FL_COMMAND) return kf_select_all();		// Ctrl-A, Mac:Meta-A             (Standard/OSX-HIG)
-      break;							// handle other combos elsewhere
-    case 'c':
-      if (mods==FL_COMMAND) return kf_copy();			// Ctrl-C, Mac:Meta-C             (Standard/OSX-HIG)
-      break;							// handle other combos elsewhere
-    case 'v':
-      if (mods==FL_COMMAND) return kf_paste();			// Ctrl-V, Mac:Meta-V             (Standard/OSX-HIG)
-      break;							// handle other combos elsewhere
-    case 'x':
-      if (mods==FL_COMMAND) return kf_copy_cut();		// Ctrl-X, Mac:Meta-X             (Standard/OSX-HIG)
-      break;
-    case 'z':
-      if (mods==FL_COMMAND && !shift) return kf_undo();		// Ctrl-Z, Mac:Meta-Z             (Standard/OSX-HIG)
-      if (mods==FL_COMMAND && shift)  return kf_redo();		// Shift-Ctrl-Z, Mac:Shift-Meta-Z (Standard/OSX-HIG)
-      break;							// handle other combos elsewhere
-  }
-  
-  switch (ascii) {
-    case ctrl('H'):
-      return kf_delete_char_left();				// Ctrl-H                           (!WP,!NP,!WOW,!WOX,TE,SA,GE,KE,OF)
-    case ctrl('I'): 						// Ctrl-I (literal Tab)             (!WP,NP,!WOW,!GE,KE,OF)
-    case ctrl('J'):						// Ctrl-J (literal Line Feed/Enter) (Standard)
-    case ctrl('L'):						// Ctrl-L (literal Form Feed)       (Standard)
-    case ctrl('M'):						// Ctrl-M (literal Cr)              (Standard)
-      if (readonly()) { fl_beep(); return 1; }
-      // insert a few selected control characters literally:
-      if (input_type() != FL_FLOAT_INPUT && input_type() != FL_INT_INPUT)
-        return replace(position(), mark(), &ascii, 1);
-      break;
-  }
-  
-  return 0;		// ignored
-}
-
-int Fl_Input::handle(int event) {
-  static int dnd_save_position, dnd_save_mark, drag_start = -1, newpos;
-  static Fl_Widget *dnd_save_focus;
-  switch (event) {
-    case FL_FOCUS:
-      switch (Fl::event_key()) {
-        case FL_Right:
-          position(0);
-          break;
-        case FL_Left:
-          position(size());
-          break;
-        case FL_Down:
-          up_down_position(0);
-          break;
-        case FL_Up:
-          up_down_position(line_start(size()));
-          break;
-        case FL_Tab:
-          position(size(),0);
-          break;
-        default:
-          position(position(),mark());// turns off the saved up/down arrow position
-          break;
-      }
-      break;
-      
-    case FL_KEYBOARD:
-      // Handle special case for multiline input with 'old tab behavior'
-      // where tab is entered as a character: make sure user attempt to 'tab over'
-      // widget doesn't destroy the field, replacing it with a tab character.
-      //
-      if (Fl::event_key() == FL_Tab 			// Tab key?
-          && !Fl::event_state(FL_SHIFT)			// no shift?
-          && !tab_nav()					// with tab navigation disabled?
-	  && input_type() == FL_MULTILINE_INPUT		// with a multiline input?
-          && (mark()==0 && position()==size())) {	// while entire field selected?
-        // Set cursor to the end of the selection...
-        if (mark() > position())
-          position(mark());
-        else
-          position(position());
-        return (1);
-      } else {
-        if (active_r() && window() && this == Fl::belowmouse()) 
-          window()->cursor(FL_CURSOR_NONE);
-        return handle_key();
-      }
-      //NOTREACHED
-      
-    case FL_PUSH:
-      if (Fl::dnd_text_ops()) {
-        int oldpos = position(), oldmark = mark();
-        Fl_Boxtype b = box();
-        Fl_Input_::handle_mouse(x()+Fl::box_dx(b), y()+Fl::box_dy(b),
-                                w()-Fl::box_dw(b), h()-Fl::box_dh(b), 0);
-        newpos = position(); 
-        position( oldpos, oldmark );
-        if (Fl::focus()==this && !Fl::event_state(FL_SHIFT) && input_type()!=FL_SECRET_INPUT &&
-           ( (newpos >= mark() && newpos < position()) || 
-             (newpos >= position() && newpos < mark()) ) ) {
-          // user clicked in the selection, may be trying to drag
-          drag_start = newpos;
-          return 1;
-        }
-        drag_start = -1;
-      }
-      
-      if (Fl::focus() != this) {
-        Fl::focus(this);
-        handle(FL_FOCUS);
-      }
-      break;
-      
-    case FL_DRAG:
-      if (Fl::dnd_text_ops()) {
-        if (drag_start >= 0) {
-          if (Fl::event_is_click()) return 1; // debounce the mouse
-                                              // save the position because sometimes we don't get DND_ENTER:
-          dnd_save_position = position();
-          dnd_save_mark = mark();
-          // drag the data:
-          copy(0); Fl::dnd();
-          return 1;
-        }
-      }
-      break;
-      
-    case FL_RELEASE:
-      if (Fl::event_button() == 2) {
-        Fl::event_is_click(0); // stop double click from picking a word
-        Fl::paste(*this, 0);
-      } else if (!Fl::event_is_click()) {
-        // copy drag-selected text to the clipboard.
-        copy(0);
-      } else if (Fl::event_is_click() && drag_start >= 0) {
-        // user clicked in the field and wants to reset the cursor position...
-        position(drag_start, drag_start);
-        drag_start = -1;
-      } else if (Fl::event_clicks()) {
-        // user double or triple clicked to select word or whole text
-        copy(0);
-      }
-      
-      // For output widgets, do the callback so the app knows the user
-      // did something with the mouse...
-      if (readonly()) do_callback();
-      
-      return 1;
-      
-    case FL_DND_ENTER:
-      Fl::belowmouse(this); // send the leave events first
-      dnd_save_position = position();
-      dnd_save_mark = mark();
-      dnd_save_focus = Fl::focus();
-      if (dnd_save_focus != this) {
-        Fl::focus(this);
-        handle(FL_FOCUS);
-      }
-      // fall through:
-    case FL_DND_DRAG: 
-      //int p = mouse_position(X, Y, W, H);
-#if DND_OUT_XXXX
-      if (Fl::focus()==this && (p>=dnd_save_position && p<=dnd_save_mark ||
-                                p>=dnd_save_mark && p<=dnd_save_position)) {
-        position(dnd_save_position, dnd_save_mark);
-        return 0;
-      }
-#endif
-      {
-        Fl_Boxtype b = box();
-        Fl_Input_::handle_mouse(x()+Fl::box_dx(b), y()+Fl::box_dy(b),
-                                w()-Fl::box_dw(b), h()-Fl::box_dh(b), 0);
-      }
-      return 1;
-      
-    case FL_DND_LEAVE:
-      position(dnd_save_position, dnd_save_mark);
-#if DND_OUT_XXXX
-      if (!focused())
-#endif
-        if (dnd_save_focus != this) {
-          Fl::focus(dnd_save_focus);
-          handle(FL_UNFOCUS);
-        }
-#if !(defined(__APPLE__) || defined(WIN32))
-      Fl::first_window()->cursor(FL_CURSOR_MOVE);
-#endif
-      return 1;
-      
-    case FL_DND_RELEASE:
-      take_focus();
-      return 1;
-      
-      /* TODO: this will scroll the area, but stop if the cursor would become invisible.
-       That clipping happens in drawtext(). Do we change the clipping or should 
-       we move the cursor (ouch)?
-       case FL_MOUSEWHEEL:
-       if (Fl::e_dy > 0) {
-       yscroll( yscroll() - Fl::e_dy*15 );
-       } else if (Fl::e_dy < 0) {
-       yscroll( yscroll() - Fl::e_dy*15 );
-       }
-       return 1;
-       */
-  }
-  Fl_Boxtype b = box();
-  return Fl_Input_::handletext(event,
-                               x()+Fl::box_dx(b), y()+Fl::box_dy(b),
-                               w()-Fl::box_dw(b), h()-Fl::box_dh(b));
-}
-
-/**
- Creates a new Fl_Input widget using the given position, size,
- and label string. The default boxtype is FL_DOWN_BOX.
- */
-Fl_Input::Fl_Input(int X, int Y, int W, int H, const char *l)
-: Fl_Input_(X, Y, W, H, l) {
-}
-
-/*
-  The following constructors must not be in the header file(s) if we
-  build a shared object (DLL). Instead they are defined here to force
-  the constructor (and default destructor as well) to be defined in
-  the DLL and exported (STR #2632).
-  
-  Note: if you change any of them, do the same changes in the specific
-  header file as well.  This redundant definition was chosen to enable
-  inline constructors in the header files (for static linking) as well
-  as those here for dynamic linking (Windows DLL).
-*/
-#if defined(FL_DLL)
-
-Fl_Float_Input::Fl_Float_Input(int X,int Y,int W,int H,const char *l)
-    : Fl_Input(X,Y,W,H,l) {
-  type(FL_FLOAT_INPUT);
-}
-
-Fl_Int_Input::Fl_Int_Input(int X,int Y,int W,int H,const char *l)
-    : Fl_Input(X,Y,W,H,l) {
-  type(FL_INT_INPUT);
-}
-
-Fl_Multiline_Input::Fl_Multiline_Input(int X,int Y,int W,int H,const char *l)
-    : Fl_Input(X,Y,W,H,l) {
-  type(FL_MULTILINE_INPUT);
-}
-
-Fl_Output::Fl_Output(int X,int Y,int W,int H, const char *l)
-    : Fl_Input(X, Y, W, H, l) {
-  type(FL_NORMAL_OUTPUT);
-}
-
-Fl_Multiline_Output::Fl_Multiline_Output(int X,int Y,int W,int H,const char *l)
-    : Fl_Output(X,Y,W,H,l) {
-  type(FL_MULTILINE_OUTPUT);
-}
-
-Fl_Secret_Input::Fl_Secret_Input(int X,int Y,int W,int H,const char *l)
-    : Fl_Input(X,Y,W,H,l) {
-  type(FL_SECRET_INPUT);
-}
-
-#endif // FL_DLL
-
-//
-// End of "$Id: Fl_Input.cxx 8726 2011-05-23 18:32:47Z AlbrechtS $".
-//
diff --git a/common/fltk/src/Fl_Input_.cxx b/common/fltk/src/Fl_Input_.cxx
deleted file mode 100644
index 276c387..0000000
--- a/common/fltk/src/Fl_Input_.cxx
+++ /dev/null
@@ -1,1272 +0,0 @@
-//
-// "$Id: Fl_Input_.cxx 8413 2011-02-11 16:37:06Z manolo $"
-//
-// Common input widget routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Input_.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_ask.H>
-#include <math.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <stdlib.h>
-#include <ctype.h>
-
-#define MAXBUF 1024
-#if defined(USE_X11) && !USE_XFT
-const int secret_char = '*'; // asterisk to hide secret input
-#else
-const int secret_char = 0x2022; // bullet to hide secret input
-#endif
-static int l_secret;
-
-extern void fl_draw(const char*, int, float, float);
-
-////////////////////////////////////////////////////////////////
-
-/** \internal
-  Converts a given text segment into the text that will be rendered on screen.
-
-  This copies the text from \p p to \p buf, replacing characters with <tt>^X</tt>
-  and <tt>\\nnn</tt> as necessary.
-
-  The destination buffer is limited to \c MAXBUF (currently at 1024). All
-  following text is truncated.
-
-  \param [in] p pointer to source buffer
-  \param [in] buf pointer to destination buffer
-  \return pointer to the end of the destination buffer
-*/
-const char* Fl_Input_::expand(const char* p, char* buf) const {
-  char* o = buf;
-  char* e = buf+(MAXBUF-4);
-  const char* lastspace = p;
-  char* lastspace_out = o;
-  int width_to_lastspace = 0;
-  int word_count = 0;
-  int word_wrap;
-//  const char *pe = p + strlen(p);
-
-  if (input_type()==FL_SECRET_INPUT) {
-    while (o<e && p < value_+size_) {
-      if (fl_utf8len((char)p[0]) >= 1) {
-	l_secret = fl_utf8encode(secret_char, o);
-	o += l_secret;
-      }
-      p++;
-    }
-
-  } else while (o<e) {
-    if (wrap() && (p >= value_+size_ || isspace(*p & 255))) {
-      word_wrap = w() - Fl::box_dw(box()) - 2;
-      width_to_lastspace += (int)fl_width(lastspace_out, o-lastspace_out);
-      if (p > lastspace+1) {
-	if (word_count && width_to_lastspace > word_wrap) {
-	  p = lastspace; o = lastspace_out; break;
-	}
-	word_count++;
-      }
-      lastspace = p;
-      lastspace_out = o;
-    }
-
-    if (p >= value_+size_) break;
-    int c = *p++ & 255;
-    if (c < ' ' || c == 127) {
-      if (c=='\n' && input_type()==FL_MULTILINE_INPUT) {p--; break;}
-      if (c == '\t' && input_type()==FL_MULTILINE_INPUT) {
-        for (c = fl_utf_nb_char((uchar*)buf, o-buf)%8; c<8 && o<e; c++) {
-          *o++ = ' ';
-        }
-      } else {
-	*o++ = '^';
-	*o++ = c ^ 0x40;
-      }
-    } else {
-      *o++ = c;
-    }
-  }
-  *o = 0;
-  return p;
-}
-
-/** \internal
-  Calculates the width in pixels of part of a text buffer.
-
-  This call takes a string, usually created by expand, and calculates
-  the width of the string when rendered with the given font.
-
-  \param [in] p pointer to the start of the original string
-  \param [in] e pointer to the end of the original string
-  \param [in] buf pointer to the buffer as returned by expand()
-  \return width of string in pixels
-*/
-double Fl_Input_::expandpos(
-  const char* p,	// real string
-  const char* e,	// pointer into real string
-  const char* buf,	// conversion of real string by expand()
-  int* returnn		// return offset into buf here
-) const {
-  int n = 0;
-  int chr = 0;
-  int l;
-  if (input_type()==FL_SECRET_INPUT) {
-    while (p<e) {
-      l = fl_utf8len((char)p[0]);
-      if (l >= 1) n += l_secret;
-      p += l;
-    }
-  } else while (p<e) {
-    int c = *p & 255;
-    if (c < ' ' || c == 127) {
-      if (c == '\t' && input_type()==FL_MULTILINE_INPUT) {
-         n += 8-(chr%8);
-         chr += 7-(chr%8);
-      } else n += 2;
-    } else {
-      n++;
-    }
-    chr += fl_utf8len((char)p[0]) >= 1;
-    p++;
-  }
-  if (returnn) *returnn = n;
-  return fl_width(buf, n);
-}
-
-////////////////////////////////////////////////////////////////
-
-/** \internal
-  Marks a range of characters for update.
-
-  This call marks all characters from \p to the end of the 
-  text buffer for update. At least these characters
-  will be redrawn in the next update cycle.
-
-  Characters from \p mu_p to end of widget are redrawn.
-  If \p erase_cursor_only, small part at \p mu_p is redrawn.
-  Right now minimal update just keeps unchanged characters from
-  being erased, so they don't blink.
-
-  \param [in] p start of update range
-*/
-void Fl_Input_::minimal_update(int p) {
-  if (damage() & FL_DAMAGE_ALL) return; // don't waste time if it won't be done
-  if (damage() & FL_DAMAGE_EXPOSE) {
-    if (p < mu_p) mu_p = p;
-  } else {
-    mu_p = p;
-  }
-
-  damage(FL_DAMAGE_EXPOSE);
-  erase_cursor_only = 0;
-}
-
-/** \internal
-  Marks a range of characters for update.
-
-  This call marks a text range for update. At least all characters
-  from \p p to \p q will be redrawn in the next update cycle.
-
-  \param [in] p start of update range
-  \param [in] q end of update range
-*/
-void Fl_Input_::minimal_update(int p, int q) {
-  if (q < p) p = q;
-  minimal_update(p);
-}
-
-////////////////////////////////////////////////////////////////
-
-/* Horizontal cursor position in pixels while moving up or down. */
-double Fl_Input_::up_down_pos = 0;
-
-/* Flag to remember last cursor move. */
-int Fl_Input_::was_up_down = 0;
-
-/**
-  Sets the current font and font size.
-*/
-void Fl_Input_::setfont() const {
-  fl_font(textfont(), textsize());
-}
-
-/**
-  Draws the text in the passed bounding box.  
-
-  If <tt>damage() & FL_DAMAGE_ALL</tt> is true, this assumes the 
-  area has already been erased to color(). Otherwise it does
-  minimal update and erases the area itself.
-
-  \param X, Y, W, H area that must be redrawn
-*/
-void Fl_Input_::drawtext(int X, int Y, int W, int H) {
-  int do_mu = !(damage()&FL_DAMAGE_ALL);
-
-  if (Fl::focus()!=this && !size()) {
-    if (do_mu) { // we have to erase it if cursor was there
-      draw_box(box(), X-Fl::box_dx(box()), Y-Fl::box_dy(box()),
-               W+Fl::box_dw(box()), H+Fl::box_dh(box()), color());
-    }
-    return;
-  }
-
-  int selstart, selend;
-  if (Fl::focus()!=this && /*Fl::selection_owner()!=this &&*/ Fl::pushed()!=this)
-    selstart = selend = 0;
-  else if (position() <= mark()) {
-    selstart = position(); selend = mark();
-  } else {
-    selend = position(); selstart = mark();
-  }
-
-  setfont();
-  const char *p, *e;
-  char buf[MAXBUF];
-
-  // count how many lines and put the last one into the buffer:
-  // And figure out where the cursor is:
-  int height = fl_height();
-  int threshold = height/2;
-  int lines;
-  int curx, cury;
-  for (p=value(), curx=cury=lines=0; ;) {
-    e = expand(p, buf);
-    if (position() >= p-value() && position() <= e-value()) {
-      curx = int(expandpos(p, value()+position(), buf, 0)+.5);
-      if (Fl::focus()==this && !was_up_down) up_down_pos = curx;
-      cury = lines*height;
-      int newscroll = xscroll_;
-      if (curx > newscroll+W-threshold) {
-	// figure out scrolling so there is space after the cursor:
-	newscroll = curx+threshold-W;
-	// figure out the furthest left we ever want to scroll:
-	int ex = int(expandpos(p, e, buf, 0))+2-W;
-	// use minimum of both amounts:
-	if (ex < newscroll) newscroll = ex;
-      } else if (curx < newscroll+threshold) {
-	newscroll = curx-threshold;
-      }
-      if (newscroll < 0) newscroll = 0;
-      if (newscroll != xscroll_) {
-	xscroll_ = newscroll;
-	mu_p = 0; erase_cursor_only = 0;
-      }
-    }
-    lines++;
-    if (e >= value_+size_) break;
-    p = e+1;
-  }
-
-  // adjust the scrolling:
-  if (input_type()==FL_MULTILINE_INPUT) {
-    int newy = yscroll_;
-    if (cury < newy) newy = cury;
-    if (cury > newy+H-height) newy = cury-H+height;
-    if (newy < -1) newy = -1;
-    if (newy != yscroll_) {yscroll_ = newy; mu_p = 0; erase_cursor_only = 0;}
-  } else {
-    yscroll_ = -(H-height)/2;
-  }
-
-  fl_push_clip(X, Y, W, H);
-  Fl_Color tc = active_r() ? textcolor() : fl_inactive(textcolor());
-
-  p = value();
-  // visit each line and draw it:
-  int desc = height-fl_descent();
-  float xpos = (float)(X - xscroll_ + 1);
-  int ypos = -yscroll_;
-  for (; ypos < H;) {
-
-    // re-expand line unless it is the last one calculated above:
-    if (lines>1) e = expand(p, buf);
-
-    if (ypos <= -height) goto CONTINUE; // clipped off top
-
-    if (do_mu) {	// for minimal update:
-      const char* pp = value()+mu_p; // pointer to where minimal update starts
-      if (e < pp) goto CONTINUE2; // this line is before the changes
-      if (readonly()) erase_cursor_only = 0; // this isn't the most efficient way
-      if (erase_cursor_only && p > pp) goto CONTINUE2; // this line is after
-      // calculate area to erase:
-      float r = (float)(X+W);
-      float xx;
-      if (p >= pp) {
-	xx = (float)X;
-	if (erase_cursor_only) r = xpos+2;
-	else if (readonly()) xx -= 3;
-      } else {
-	xx = xpos + (float)expandpos(p, pp, buf, 0);
-	if (erase_cursor_only) r = xx+2;
-	else if (readonly()) xx -= 3;
-      }
-      // clip to and erase it:
-      fl_push_clip((int)xx-1-height/8, Y+ypos, (int)(r-xx+2+height/4), height);
-      draw_box(box(), X-Fl::box_dx(box()), Y-Fl::box_dy(box()),
-               W+Fl::box_dw(box()), H+Fl::box_dh(box()), color());
-      // it now draws entire line over it
-      // this should not draw letters to left of erased area, but
-      // that is nyi.
-    }
-
-    // Draw selection area if required:
-    if (selstart < selend && selstart <= e-value() && selend > p-value()) {
-      const char* pp = value()+selstart;
-      float x1 = xpos;
-      int offset1 = 0;
-      if (pp > p) {
-	fl_color(tc);
-	x1 += (float)expandpos(p, pp, buf, &offset1);
-	fl_draw(buf, offset1, xpos, (float)(Y+ypos+desc));
-      }
-      pp = value()+selend;
-      float x2 = (float)(X+W);
-      int offset2;
-      if (pp <= e) x2 = xpos + (float)expandpos(p, pp, buf, &offset2);
-      else offset2 = strlen(buf);
-      fl_color(selection_color());
-      fl_rectf((int)(x1+0.5), Y+ypos, (int)(x2-x1+0.5), height);
-      fl_color(fl_contrast(textcolor(), selection_color()));
-      fl_draw(buf+offset1, offset2-offset1, x1, (float)(Y+ypos+desc));
-      if (pp < e) {
-	fl_color(tc);
-	fl_draw(buf+offset2, strlen(buf+offset2), x2, (float)(Y+ypos+desc));
-      }
-    } else {
-      // draw unselected text
-      fl_color(tc);
-      fl_draw(buf, strlen(buf), xpos, (float)(Y+ypos+desc));
-    }
-
-    if (do_mu) fl_pop_clip();
-
-  CONTINUE2:
-    // draw the cursor:
-    if (Fl::focus() == this && selstart == selend &&
-	position() >= p-value() && position() <= e-value()) {
-      fl_color(cursor_color());
-      // cursor position may need to be recomputed (see STR #2486)
-      curx = int(expandpos(p, value()+position(), buf, 0)+.5);
-      if (readonly()) {
-        fl_line((int)(xpos+curx-2.5f), Y+ypos+height-1,
-	        (int)(xpos+curx+0.5f), Y+ypos+height-4,
-	        (int)(xpos+curx+3.5f), Y+ypos+height-1);
-      } else {
-        fl_rectf((int)(xpos+curx+0.5), Y+ypos, 2, height);
-      }
-    }
-
-  CONTINUE:
-    ypos += height;
-    if (e >= value_+size_) break;
-    if (*e == '\n' || *e == ' ') e++;
-    p = e;
-  }
-
-  // for minimal update, erase all lines below last one if necessary:
-  if (input_type()==FL_MULTILINE_INPUT && do_mu && ypos<H
-      && (!erase_cursor_only || p <= value()+mu_p)) {
-    if (ypos < 0) ypos = 0;
-    fl_push_clip(X, Y+ypos, W, H-ypos);
-    draw_box(box(), X-Fl::box_dx(box()), Y-Fl::box_dy(box()),
-             W+Fl::box_dw(box()), H+Fl::box_dh(box()), color());
-    fl_pop_clip();
-  }
-
-  fl_pop_clip();
-  if (Fl::focus() == this) {
-       fl_set_spot(textfont(), textsize(),
-               (int)xpos+curx, Y+ypos-fl_descent(), W, H, window());
-  }
-}
-
-/** \internal
-  Simple function that determines if a character could be part of a word.
-  \todo This function is not ucs4-aware.
-*/
-static int isword(char c) {
-  return (c&128 || isalnum(c) || strchr("#%&-/@\\_~", c));
-}
-
-/**
-  Finds the end of a word.
-
-  This call calculates the end of a word based on the given 
-  index \p i. Calling this function repeatedly will move
-  forwards to the end of the text.
- 
-  \param [in] i starting index for the search
-  \return end of the word
-*/
-int Fl_Input_::word_end(int i) const {
-  if (input_type() == FL_SECRET_INPUT) return size();
-  //while (i < size() && !isword(index(i))) i++;
-  while (i < size() && !isword(index(i))) i++;
-  while (i < size() && isword(index(i))) i++;
-  return i;
-}
-
-/**
-  Finds the start of a word.
-
-  This call calculates the start of a word based on the given 
-  index \p i. Calling this function repeatedly will move
-  backwards to the beginning of the text.
- 
-  \param [in] i starting index for the search
-  \return start of the word
-*/
-int Fl_Input_::word_start(int i) const {
-  if (input_type() == FL_SECRET_INPUT) return 0;
-//   if (i >= size() || !isword(index(i)))
-//     while (i > 0 && !isword(index(i-1))) i--;
-  while (i > 0 && !isword(index(i-1))) i--;
-  while (i > 0 && isword(index(i-1))) i--;
-  return i;
-}
-
-/**
-  Finds the end of a line.
-
-  This call calculates the end of a line based on the given 
-  index \p i. 
- 
-  \param [in] i starting index for the search
-  \return end of the line
-*/
-int Fl_Input_::line_end(int i) const {
-  if (input_type() != FL_MULTILINE_INPUT) return size();
-
-  if (wrap()) {
-    // go to the start of the paragraph:
-    int j = i;
-    while (j > 0 && index(j-1) != '\n') j--;
-    // now measure lines until we get past i, end of that line is real eol:
-    setfont();
-    for (const char* p=value()+j; ;) {
-      char buf[MAXBUF];
-      p = expand(p, buf);
-      if (p-value() >= i) return p-value();
-      p++;
-    }
-  } else {
-    while (i < size() && index(i) != '\n') i++;
-    return i;
-  }
-}
-
-/**
-  Finds the start of a line.
-
-  This call calculates the start of a line based on the given 
-  index \p i. 
- 
-  \param [in] i starting index for the search
-  \return start of the line
-*/
-int Fl_Input_::line_start(int i) const {
-  if (input_type() != FL_MULTILINE_INPUT) return 0;
-  int j = i;
-  while (j > 0 && index(j-1) != '\n') j--;
-  if (wrap()) {
-    // now measure lines until we get past i, start of that line is real eol:
-    setfont();
-    for (const char* p=value()+j; ;) {
-      char buf[MAXBUF];
-      const char* e = expand(p, buf);
-      if (e-value() >= i) return p-value();
-      p = e+1;
-    }
-  } else return j;
-}
-
-/** 
-  Handles mouse clicks and mouse moves.
-  \todo Add comment and parameters
-*/
-void Fl_Input_::handle_mouse(int X, int Y, int /*W*/, int /*H*/, int drag) {
-  was_up_down = 0;
-  if (!size()) return;
-  setfont();
-
-  const char *p, *e;
-  char buf[MAXBUF];
-
-  int theline = (input_type()==FL_MULTILINE_INPUT) ?
-    (Fl::event_y()-Y+yscroll_)/fl_height() : 0;
-
-  int newpos = 0;
-  for (p=value();; ) {
-    e = expand(p, buf);
-    theline--; if (theline < 0) break;
-    if (e >= value_+size_) break;
-    p = e+1;
-  }
-  const char *l, *r, *t; double f0 = Fl::event_x()-X+xscroll_;
-  for (l = p, r = e; l<r; ) {
-    double f;
-    int cw = fl_utf8len((char)l[0]);
-    if (cw < 1) cw = 1;
-    t = l+cw;
-    f = X-xscroll_+expandpos(p, t, buf, 0);
-    if (f <= Fl::event_x()) {l = t; f0 = Fl::event_x()-f;}
-    else r = t-cw;
-  }
-  if (l < e) { // see if closer to character on right:
-    double f1;
-    int cw = fl_utf8len((char)l[0]);
-    if (cw > 0) {
-      f1 = X-xscroll_+expandpos(p, l + cw, buf, 0) - Fl::event_x();
-      if (f1 < f0) l = l+cw;
-    }
-  }
-  newpos = l-value();
-
-  int newmark = drag ? mark() : newpos;
-  if (Fl::event_clicks()) {
-    if (newpos >= newmark) {
-      if (newpos == newmark) {
-	if (newpos < size()) newpos++;
-	else newmark--;
-      }
-      if (Fl::event_clicks() > 1) {
-	newpos = line_end(newpos);
-	newmark = line_start(newmark);
-      } else {
-	newpos = word_end(newpos);
-	newmark = word_start(newmark);
-      }
-    } else {
-      if (Fl::event_clicks() > 1) {
-	newpos = line_start(newpos);
-	newmark = line_end(newmark);
-      } else {
-	newpos = word_start(newpos);
-	newmark = word_end(newmark);
-      }
-    }
-    // if the multiple click does not increase the selection, revert
-    // to single-click behavior:
-    if (!drag && (mark() > position() ?
-                  (newmark >= position() && newpos <= mark()) :
-                  (newmark >= mark() && newpos <= position()))) {
-      Fl::event_clicks(0);
-      newmark = newpos = l-value();
-    }
-  }
-  position(newpos, newmark);
-}
-
-/**
-  Sets the index for the cursor and mark.
-
-  The input widget maintains two pointers into the string. The
-  \e position (\c p) is where the cursor is. The
-  \e mark (\c m) is the other end of the selected text. If they
-  are equal then there is no selection. Changing this does not
-  affect the clipboard (use copy() to do that).
-    
-  Changing these values causes a redraw(). The new
-  values are bounds checked. 
-
-  \param p index for the cursor position
-  \param m index for the mark
-  \return 0 if no positions changed
-  \see position(int), position(), mark(int)
-*/
-int Fl_Input_::position(int p, int m) {
-  int is_same = 0;
-  was_up_down = 0;
-  if (p<0) p = 0;
-  if (p>size()) p = size();
-  if (m<0) m = 0;
-  if (m>size()) m = size();
-  if (p == m) is_same = 1;
-
-  while (p < position_ && p > 0 && (size() - p) > 0 &&
-       (fl_utf8len((char)(value() + p)[0]) < 1)) { p--; }
-  int ul = fl_utf8len((char)(value() + p)[0]);
-  while (p < size() && p > position_ && ul < 0) {
-       p++;
-       ul = fl_utf8len((char)(value() + p)[0]);
-  }
-
-  while (m < mark_ && m > 0 && (size() - m) > 0 &&
-       (fl_utf8len((char)(value() + m)[0]) < 1)) { m--; }
-  ul = fl_utf8len((char)(value() + m)[0]);
-  while (m < size() && m > mark_ && ul < 0) {
-       m++;
-       ul = fl_utf8len((char)(value() + m)[0]);
-  }
-  if (is_same) m = p;
-  if (p == position_ && m == mark_) return 0;
-
-
-  //if (Fl::selection_owner() == this) Fl::selection_owner(0);
-  if (p != m) {
-    if (p != position_) minimal_update(position_, p);
-    if (m != mark_) minimal_update(mark_, m);
-  } else {
-    // new position is a cursor
-    if (position_ == mark_) {
-      // old position was just a cursor
-      if (Fl::focus() == this && !(damage()&FL_DAMAGE_EXPOSE)) {
-	minimal_update(position_); erase_cursor_only = 1;
-      }
-    } else { // old position was a selection
-      minimal_update(position_, mark_);
-    }
-  }
-  position_ = p;
-  mark_ = m;
-  return 1;
-}
-
-/**
-  Moves the cursor to the column given by \p up_down_pos.
-
-  This function is helpful when implementing up and down 
-  cursor movement. It moves the cursor from the beginning
-  of a line to the column indicated by the global variable
-  \p up_down_pos in pixel units.
-
-  \param [in] i index into the beginning of a line of text
-  \param [in] keepmark if set, move only the cursor, but not the mark
-  \return index to new cursor position
-*/
-int Fl_Input_::up_down_position(int i, int keepmark) {
-  // unlike before, i must be at the start of the line already!
-
-  setfont();
-  char buf[MAXBUF];
-  const char* p = value()+i;
-  const char* e = expand(p, buf);
-  const char *l, *r, *t;
-  for (l = p, r = e; l<r; ) {
-    t = l+(r-l+1)/2;
-    int f = (int)expandpos(p, t, buf, 0);
-    if (f <= up_down_pos) l = t; else r = t-1;
-  }
-  int j = l-value();
-  j = position(j, keepmark ? mark_ : j);
-  was_up_down = 1;
-  return j;
-}
-
-/**
-  Put the current selection into the clipboard.
-
-  This function copies the current selection between mark() and
-  position() into the specified \c clipboard. This does not
-  replace the old clipboard contents if position() and
-  mark() are equal. Clipboard 0 maps to the current text
-  selection and clipboard 1 maps to the cut/paste clipboard.
-
-  \param clipboard the clipboard destination 0 or 1
-  \return 0 if no text is selected, 1 if the selection was copied
-  \see Fl::copy(const char *, int, int)
-*/
-int Fl_Input_::copy(int clipboard) {
-  int b = position();
-  int e = mark();
-  if (b != e) {
-    if (b > e) {b = mark(); e = position();}
-    if (input_type() == FL_SECRET_INPUT) e = b;
-    Fl::copy(value()+b, e-b, clipboard);
-    return 1;
-  }
-  return 0;
-}
-
-#define MAXFLOATSIZE 40
-
-static char* undobuffer;
-static int undobufferlength;
-static Fl_Input_* undowidget;
-static int undoat;	// points after insertion
-static int undocut;	// number of characters deleted there
-static int undoinsert;	// number of characters inserted
-static int yankcut;	// length of valid contents of buffer, even if undocut=0
-
-static void undobuffersize(int n) {
-  if (n > undobufferlength) {
-    if (undobuffer) {
-      do {undobufferlength *= 2;} while (undobufferlength < n);
-      undobuffer = (char*)realloc(undobuffer, undobufferlength);
-    } else {
-      undobufferlength = n+9;
-      undobuffer = (char*)malloc(undobufferlength);
-    }
-  }
-}
-
-/**
-  Deletes text from \p b to \p e and inserts the new string \p text.
-
-  All changes to the text buffer go through this function.
-  It deletes the region between \p a and \p b (either one may be less or
-  equal to the other), and then inserts the string \p text
-  at that point and moves the mark() and
-  position() to the end of the insertion. Does the callback if
-  <tt>when() & FL_WHEN_CHANGED</tt> and there is a change.
-
-  Set \p b and \p e equal to not delete anything.
-  Set \p text to \c NULL to not insert anything.
-
-  \p ilen can be zero or <tt>strlen(text)</tt>, which
-  saves a tiny bit of time if you happen to already know the
-  length of the insertion, or can be used to insert a portion of a
-  string.
-  
-  \p b and \p e are clamped to the
-  <tt>0..size()</tt> range, so it is safe to pass any values.
-  
-  cut() and insert() are just inline functions that call replace().
-
-  \param [in] b beginning index of text to be deleted
-  \param [in] e ending index of text to be deleted and insertion position
-  \param [in] text string that will be inserted
-  \param [in] ilen length of \p text or 0 for \c nul terminated strings
-  \return 0 if nothing changed
-*/
-int Fl_Input_::replace(int b, int e, const char* text, int ilen) {
-  int ul, om, op;
-  was_up_down = 0;
-
-  if (b<0) b = 0;
-  if (e<0) e = 0;
-  if (b>size_) b = size_;
-  if (e>size_) e = size_;
-  if (e<b) {int t=b; b=e; e=t;}
-  while (b != e && b > 0 && (size_ - b) > 0 &&
-       (fl_utf8len((value_ + b)[0]) < 1)) { b--; }
-  ul = fl_utf8len((char)(value_ + e)[0]);
-  while (e < size_ && e > 0 && ul < 0) {
-       e++;
-       ul = fl_utf8len((char)(value_ + e)[0]);
-  }
-  if (text && !ilen) ilen = strlen(text);
-  if (e<=b && !ilen) return 0; // don't clobber undo for a null operation
-  if (size_+ilen-(e-b) > maximum_size_) {
-    ilen = maximum_size_-size_+(e-b);
-    if (ilen < 0) ilen = 0;
-  }
-
-  put_in_buffer(size_+ilen);
-
-  if (e>b) {
-    if (undowidget == this && b == undoat) {
-      undobuffersize(undocut+(e-b));
-      memcpy(undobuffer+undocut, value_+b, e-b);
-      undocut += e-b;
-    } else if (undowidget == this && e == undoat && !undoinsert) {
-      undobuffersize(undocut+(e-b));
-      memmove(undobuffer+(e-b), undobuffer, undocut);
-      memcpy(undobuffer, value_+b, e-b);
-      undocut += e-b;
-    } else if (undowidget == this && e == undoat && (e-b)<undoinsert) {
-      undoinsert -= e-b;
-    } else {
-      undobuffersize(e-b);
-      memcpy(undobuffer, value_+b, e-b);
-      undocut = e-b;
-      undoinsert = 0;
-    }
-    memmove(buffer+b, buffer+e, size_-e+1);
-    size_ -= e-b;
-    undowidget = this;
-    undoat = b;
-    if (input_type() == FL_SECRET_INPUT) yankcut = 0; else yankcut = undocut;
-  }
-
-  if (ilen) {
-    if (undowidget == this && b == undoat)
-      undoinsert += ilen;
-    else {
-      undocut = 0;
-      undoinsert = ilen;
-    }
-    memmove(buffer+b+ilen, buffer+b, size_-b+1);
-    memcpy(buffer+b, text, ilen);
-    size_ += ilen;
-  }
-  undowidget = this;
-  om = mark_;
-  op = position_;
-  mark_ = position_ = undoat = b+ilen;
-
-  // Insertions into the word at the end of the line will cause it to
-  // wrap to the next line, so we must indicate that the changes may start
-  // right after the whitespace before the current word.  This will
-  // result in sub-optimal update when such wrapping does not happen
-  // but it is too hard to figure out for now...
-  if (wrap()) {
-    // if there is a space in the pasted text, the whole line may have rewrapped
-    int i;
-    for (i=0; i<ilen; i++)
-      if (text[i]==' ') break;
-    if (i==ilen)
-      while (b > 0 && !isspace(index(b) & 255) && index(b)!='\n') b--;
-    else
-      while (b > 0 && index(b)!='\n') b--;
-  }
-
-  // make sure we redraw the old selection or cursor:
-  if (om < b) b = om;
-  if (op < b) b = op;
-
-  minimal_update(b);
-
-  mark_ = position_ = undoat;
-
-  set_changed();
-  if (when()&FL_WHEN_CHANGED) do_callback();
-  return 1;
-}
-
-/**
-  Undoes previous changes to the text buffer.
-
-  This call undoes a number of previous calls to replace().
-
-  \return non-zero if any change was made.
-*/
-int Fl_Input_::undo() {
-  was_up_down = 0;
-  if ( undowidget != this || (!undocut && !undoinsert) ) return 0;
-
-  int ilen = undocut;
-  int xlen = undoinsert;
-  int b = undoat-xlen;
-  int b1 = b;
-
-  put_in_buffer(size_+ilen);
-
-  if (ilen) {
-    memmove(buffer+b+ilen, buffer+b, size_-b+1);
-    memcpy(buffer+b, undobuffer, ilen);
-    size_ += ilen;
-    b += ilen;
-  }
-
-  if (xlen) {
-    undobuffersize(xlen);
-    memcpy(undobuffer, buffer+b, xlen);
-    memmove(buffer+b, buffer+b+xlen, size_-xlen-b+1);
-    size_ -= xlen;
-  }
-
-  undocut = xlen;
-  if (xlen) yankcut = xlen;
-  undoinsert = ilen;
-  undoat = b;
-  mark_ = b /* -ilen */;
-  position_ = b;
-
-  if (wrap())
-    while (b1 > 0 && index(b1)!='\n') b1--;
-  minimal_update(b1);
-  set_changed();
-  if (when()&FL_WHEN_CHANGED) do_callback();
-  return 1;
-}
-
-/**
-  Copies the \e yank buffer to the clipboard.
-
-  This method copies all the previous contiguous cuts from the undo
-  information to the clipboard. This function implements 
-  the \c ^K shortcut key.
-
-  \return 0 if the operation did not change the clipboard
-  \see copy(int), cut()
-*/
-int Fl_Input_::copy_cuts() {
-  // put the yank buffer into the X clipboard
-  if (!yankcut || input_type()==FL_SECRET_INPUT) return 0;
-  Fl::copy(undobuffer, yankcut, 1);
-  return 1;
-}
-
-/** \internal
-  Checks the when() field and does a callback if indicated.
-*/
-void Fl_Input_::maybe_do_callback() {
-  if (changed() || (when()&FL_WHEN_NOT_CHANGED)) {
-    do_callback();
-  }
-}
-
-/** 
-  Handles all kinds of text field related events.
-
-  This is called by derived classes.
-  \todo Add comment and parameters
-*/
-int Fl_Input_::handletext(int event, int X, int Y, int W, int H) {
-  switch (event) {
-
-  case FL_ENTER:
-  case FL_MOVE:
-    if (active_r() && window()) window()->cursor(FL_CURSOR_INSERT);
-    return 1;
-
-  case FL_LEAVE:
-    if (active_r() && window()) window()->cursor(FL_CURSOR_DEFAULT);
-    return 1;
-
-  case FL_FOCUS:
-    fl_set_spot(textfont(), textsize(), x(), y(), w(), h(), window());
-    if (mark_ == position_) {
-      minimal_update(size()+1);
-    } else //if (Fl::selection_owner() != this)
-      minimal_update(mark_, position_);
-    return 1;
-
-  case FL_UNFOCUS:
-    if (active_r() && window()) window()->cursor(FL_CURSOR_DEFAULT);
-    if (mark_ == position_) {
-      if (!(damage()&FL_DAMAGE_EXPOSE)) {minimal_update(position_); erase_cursor_only = 1;}
-    } else //if (Fl::selection_owner() != this)
-      minimal_update(mark_, position_);
-  case FL_HIDE:
-    fl_reset_spot();
-    if (!readonly() && (when() & FL_WHEN_RELEASE))
-      maybe_do_callback();
-    return 1;
-
-  case FL_PUSH:
-    if (active_r() && window()) window()->cursor(FL_CURSOR_INSERT);
-
-    handle_mouse(X, Y, W, H, Fl::event_state(FL_SHIFT));
-
-    if (Fl::focus() != this) {
-      Fl::focus(this);
-      handle(FL_FOCUS);
-    }
-    return 1;
-
-  case FL_DRAG:
-    handle_mouse(X, Y, W, H, 1);
-    return 1;
-
-  case FL_RELEASE:
-    copy(0);
-    return 1;
-
-  case FL_PASTE: {
-    // Don't allow pastes into readonly widgets...
-    if (readonly()) {
-      fl_beep(FL_BEEP_ERROR);
-      return 1;
-    }
-
-    // See if we have anything to paste...
-    if (!Fl::event_text() || !Fl::event_length()) return 1;
-
-    // strip trailing control characters and spaces before pasting:
-    const char* t = Fl::event_text();
-    const char* e = t+Fl::event_length();
-    if (input_type() != FL_MULTILINE_INPUT) while (e > t && isspace(*(e-1) & 255)) e--;
-    if (!t || e <= t) return 1; // Int/float stuff will crash without this test
-    if (input_type() == FL_INT_INPUT) {
-      while (isspace(*t & 255) && t < e) t ++;
-      const char *p = t;
-      if (*p == '+' || *p == '-') p ++;
-      if (strncmp(p, "0x", 2) == 0) {
-        p += 2;
-        while (isxdigit(*p & 255) && p < e) p ++;
-      } else {
-        while (isdigit(*p & 255) && p < e) p ++;
-      }
-      if (p < e) {
-        fl_beep(FL_BEEP_ERROR);
-        return 1;
-      } else return replace(0, size(), t, e - t);
-    } else if (input_type() == FL_FLOAT_INPUT) {
-      while (isspace(*t & 255) && t < e) t ++;
-      const char *p = t;
-      if (*p == '+' || *p == '-') p ++;
-      while (isdigit(*p & 255) && p < e) p ++;
-      if (*p == '.') {
-        p ++;
-        while (isdigit(*p & 255) && p < e) p ++;
-	if (*p == 'e' || *p == 'E') {
-	  p ++;
-	  if (*p == '+' || *p == '-') p ++;
-	  while (isdigit(*p & 255) && p < e) p ++;
-	}
-      }
-      if (p < e) {
-        fl_beep(FL_BEEP_ERROR);
-        return 1;
-      } else return replace(0, size(), t, e - t);
-    }
-    return replace(position(), mark(), t, e-t);}
-
-  case FL_SHORTCUT:
-    if (!(shortcut() ? Fl::test_shortcut(shortcut()) : test_shortcut())) 
-      return 0;
-    if (Fl::visible_focus() && handle(FL_FOCUS)) {
-      Fl::focus(this);
-      return 1;
-    } // else fall through
-
-  default:
-    return 0;
-  }
-}
-
-/*------------------------------*/
-
-/**
-  Creates a new Fl_Input_ widget.
-
-  This function creates a new Fl_Input_ widget and adds it to the current
-  Fl_Group. The value() is set to \c NULL.
-  The default boxtype is \c FL_DOWN_BOX.
-
-  \param X, Y, W, H the dimensions of the new widget
-  \param l an optional label text
-*/
-Fl_Input_::Fl_Input_(int X, int Y, int W, int H, const char* l)
-: Fl_Widget(X, Y, W, H, l) {
-  box(FL_DOWN_BOX);
-  color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
-  align(FL_ALIGN_LEFT);
-  textsize_ = FL_NORMAL_SIZE;
-  textfont_ = FL_HELVETICA;
-  textcolor_ = FL_FOREGROUND_COLOR;
-  cursor_color_ = FL_FOREGROUND_COLOR; // was FL_BLUE
-  mark_ = position_ = size_ = 0;
-  bufsize = 0;
-  buffer  = 0;
-  value_ = "";
-  xscroll_ = yscroll_ = 0;
-  maximum_size_ = 32767;
-  shortcut_ = 0;
-  set_flag(SHORTCUT_LABEL);
-  tab_nav(1);
-}
-
-/**
- Copies the value from a possibly static entry into the internal buffer.
-
- \param [in] len size of the current text
-*/
-void Fl_Input_::put_in_buffer(int len) {
-  if (value_ == buffer && bufsize > len) {
-    buffer[size_] = 0;
-    return;
-  }
-  if (!bufsize) {
-    if (len > size_) len += 9; // let a few characters insert before realloc
-    bufsize = len+1; 
-    buffer = (char*)malloc(bufsize);
-  } else if (bufsize <= len) {
-    // we may need to move old value in case it points into buffer:
-    int moveit = (value_ >= buffer && value_ < buffer+bufsize);
-    // enlarge current buffer
-    if (len > size_) {
-      do {bufsize *= 2;} while (bufsize <= len);
-    } else {
-      bufsize = len+1;
-    }
-    // Note: the following code is equivalent to:
-    //
-    //   if (moveit) value_ = value_ - buffer;
-    //   char* nbuffer = (char*)realloc(buffer, bufsize);
-    //   if (moveit) value_ = value_ + nbuffer;
-    //   buffer = nbuffer;
-    //
-    // We just optimized the pointer arithmetic for value_...
-    //
-    char* nbuffer = (char*)realloc(buffer, bufsize);
-    if (moveit) value_ += (nbuffer-buffer);
-    buffer = nbuffer;
-  }
-  memmove(buffer, value_, size_); buffer[size_] = 0;
-  value_ = buffer;
-}
-
-/**
-  Changes the widget text.
-
-  This function changes the text and sets the mark and the point to 
-  the end of it. The string is \e not copied. If the user edits the
-  string it is copied to the internal buffer then. This can save a
-  great deal of time and memory if your program is rapidly
-  changing the values of text fields, but this will only work if
-  the passed string remains unchanged until either the
-  Fl_Input is destroyed or value() is called again.
-
-  You can use the \p len parameter to directly set the length
-  if you know it already or want to put \c nul characters in the text.
-
-  \param [in] str the new text 
-  \param [in] len the length of the new text
-  \return non-zero if the new value is different than the current one
-*/
-int Fl_Input_::static_value(const char* str, int len) {
-  clear_changed();
-  if (undowidget == this) undowidget = 0;
-  if (str == value_ && len == size_) return 0;
-  if (len) { // non-empty new value:
-    if (xscroll_ || yscroll_) {
-      xscroll_ = yscroll_ = 0;
-      minimal_update(0);
-    } else {
-      int i = 0;
-      // find first different character:
-      if (value_) {
-	for (; i<size_ && i<len && str[i]==value_[i]; i++);
-	if (i==size_ && i==len) return 0;
-      }
-      minimal_update(i);
-    }
-    value_ = str;
-    size_ = len;
-  } else { // empty new value:
-    if (!size_) return 0; // both old and new are empty.
-    size_ = 0;
-    value_ = "";
-    xscroll_ = yscroll_ = 0;
-    minimal_update(0);
-  }
-  position(readonly() ? 0 : size());
-  return 1;
-}
-
-/**
-  Changes the widget text.
-
-  This function changes the text and sets the mark and the point to 
-  the end of it. The string is \e not copied. If the user edits the
-  string it is copied to the internal buffer then. This can save a
-  great deal of time and memory if your program is rapidly
-  changing the values of text fields, but this will only work if
-  the passed string remains unchanged until either the
-  Fl_Input is destroyed or value() is called again.
-
-  \param [in] str the new text 
-  \return non-zero if the new value is different than the current one
-*/
-int Fl_Input_::static_value(const char* str) {
-  return static_value(str, str ? strlen(str) : 0);
-}
-
-/**
-  Changes the widget text.
-
-  This function changes the text and sets the mark and the
-  point to the end of it. The string is copied to the internal
-  buffer. Passing \c NULL is the same as "". 
-
-  You can use the \p length parameter to directly set the length
-  if you know it already or want to put \c nul characters in the text.
-
-  \param [in] str the new text 
-  \param [in] len the length of the new text
-  \return non-zero if the new value is different than the current one
-  \see Fl_Input_::value(const char* str), Fl_Input_::value()
-*/
-int Fl_Input_::value(const char* str, int len) {
-  int r = static_value(str, len);
-  if (len) put_in_buffer(len);
-  return r;
-}
-
-/** 
-  Changes the widget text.
-
-  This function changes the text and sets the mark and the
-  point to the end of it. The string is copied to the internal
-  buffer. Passing \c NULL is the same as \c "". 
-
-  \param [in] str the new text 
-  \return non-zero if the new value is different than the current one
-  \see Fl_Input_::value(const char* str, int len), Fl_Input_::value()
-*/
-int Fl_Input_::value(const char* str) {
-  return value(str, str ? strlen(str) : 0);
-}
-
-/**
-  Changes the size of the widget.
-  This call updates the text layout so that the cursor is visible.
-  \param [in] X, Y, W, H new size of the widget
-  \see Fl_Widget::resize(int, int, int, int)
-*/
-void Fl_Input_::resize(int X, int Y, int W, int H) {
-  if (W != w()) xscroll_ = 0;
-  if (H != h()) yscroll_ = 0;
-  Fl_Widget::resize(X, Y, W, H);
-}
-
-/**
-  Destroys the widget.
-
-  The destructor clears all allocated buffers and removes the widget
-  from the parent Fl_Group.
-*/
-Fl_Input_::~Fl_Input_() {
-  if (undowidget == this) undowidget = 0;
-  if (bufsize) free((void*)buffer);
-}
-
-/** \internal
-  Returns the number of lines displayed on a single page.
-  \return widget height divided by the font height
-*/
-int Fl_Input_::linesPerPage() {
-  int n = 1;
-  if (input_type() == FL_MULTILINE_INPUT) {
-    fl_font(textfont(),textsize()); //ensure current font is set to ours
-    n = h()/fl_height(); // number of lines to scroll
-    if (n<=0) n = 1;
-  }
-  return n;
-}
-
-/**
-  Returns the character at index \p i.
-
-  This function returns the UTF-8 character at \p i 
-  as a ucs4 character code.
-
-  \param [in] i index into the value field
-  \return the character at index \p i
-*/
-unsigned int Fl_Input_::index(int i) const 
-{
-  int len = 0;
-  return fl_utf8decode(value_+i, value_+size_, &len);
-}
-
-//
-// End of "$Id: Fl_Input_.cxx 8413 2011-02-11 16:37:06Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Light_Button.cxx b/common/fltk/src/Fl_Light_Button.cxx
deleted file mode 100644
index 9025fcf..0000000
--- a/common/fltk/src/Fl_Light_Button.cxx
+++ /dev/null
@@ -1,174 +0,0 @@
-//
-// "$Id: Fl_Light_Button.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Lighted button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Subclass of Fl_Button where the "box" indicates whether it is
-// pushed or not, and the "down box" is drawn small and square on
-// the left to indicate the current state.
-
-// The default down_box of zero draws a rectangle designed to look
-// just like Flame's buttons.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-
-void Fl_Light_Button::draw() {
-  if (box()) draw_box(this==Fl::pushed() ? fl_down(box()) : box(), color());
-  Fl_Color col = value() ? (active_r() ? selection_color() :
-                            fl_inactive(selection_color())) : color();
-  int W;
-  int dx, dy;
-
-  W  = labelsize();
-  dx = Fl::box_dx(box()) + 2;
-  dy = (h() - W) / 2;
-  // if (dy < 0) dy = 0;         // neg. offset o.k. for vertical centering
-
-  if (down_box()) {
-    // draw other down_box() styles:
-    switch (down_box()) {
-      case FL_DOWN_BOX :
-      case FL_UP_BOX :
-      case _FL_PLASTIC_DOWN_BOX :
-      case _FL_PLASTIC_UP_BOX :
-        // Check box...
-        draw_box(down_box(), x()+dx, y()+dy, W, W, FL_BACKGROUND2_COLOR);
-	if (value()) {
-	  if (Fl::scheme() && !strcmp(Fl::scheme(), "gtk+")) {
-	    fl_color(FL_SELECTION_COLOR);
-	  } else {
-	    fl_color(col);
-	  }
-	  int tx = x() + dx + 3;
-	  int tw = W - 6;
-	  int d1 = tw/3;
-	  int d2 = tw-d1;
-	  int ty = y() + dy + (W+d2)/2-d1-2;
-	  for (int n = 0; n < 3; n++, ty++) {
-	    fl_line(tx, ty, tx+d1, ty+d1);
-	    fl_line(tx+d1, ty+d1, tx+tw-1, ty+d1-d2+1);
-	  }
-	}
-        break;
-      case _FL_ROUND_DOWN_BOX :
-      case _FL_ROUND_UP_BOX :
-        // Radio button...
-        draw_box(down_box(), x()+dx, y()+dy, W, W, FL_BACKGROUND2_COLOR);
-	if (value()) {
-	  int tW = (W - Fl::box_dw(down_box())) / 2 + 1;
-	  if ((W - tW) & 1) tW++; // Make sure difference is even to center
-	  int tdx = dx + (W - tW) / 2;
-	  int tdy = dy + (W - tW) / 2;
-
-	  if (Fl::scheme() && !strcmp(Fl::scheme(), "gtk+")) {
-	    fl_color(FL_SELECTION_COLOR);
-	    tW --;
-	    fl_pie(x() + tdx - 1, y() + tdy - 1, tW + 3, tW + 3, 0.0, 360.0);
-	    fl_arc(x() + tdx - 1, y() + tdy - 1, tW + 3, tW + 3, 0.0, 360.0);
-	    fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.2f));
-	  } else fl_color(col);
-
-	  switch (tW) {
-	    // Larger circles draw fine...
-	    default :
-              fl_pie(x() + tdx, y() + tdy, tW, tW, 0.0, 360.0);
-	      break;
-
-            // Small circles don't draw well on many systems...
-	    case 6 :
-	      fl_rectf(x() + tdx + 2, y() + tdy, tW - 4, tW);
-	      fl_rectf(x() + tdx + 1, y() + tdy + 1, tW - 2, tW - 2);
-	      fl_rectf(x() + tdx, y() + tdy + 2, tW, tW - 4);
-	      break;
-
-	    case 5 :
-	    case 4 :
-	    case 3 :
-	      fl_rectf(x() + tdx + 1, y() + tdy, tW - 2, tW);
-	      fl_rectf(x() + tdx, y() + tdy + 1, tW, tW - 2);
-	      break;
-
-	    case 2 :
-	    case 1 :
-	      fl_rectf(x() + tdx, y() + tdy, tW, tW);
-	      break;
-	  }
-
-	  if (Fl::scheme() && !strcmp(Fl::scheme(), "gtk+")) {
-	    fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.5));
-	    fl_arc(x() + tdx, y() + tdy, tW + 1, tW + 1, 60.0, 180.0);
-	  }
-	}
-        break;
-      default :
-        draw_box(down_box(), x()+dx, y()+dy, W, W, col);
-        break;
-    }
-  } else {
-    // if down_box() is zero, draw light button style:
-    int hh = h()-2*dy - 2;
-    int ww = W/2+1;
-    int xx = dx;
-    if (w()<ww+2*xx) xx = (w()-ww)/2;
-    if (Fl::scheme() && !strcmp(Fl::scheme(), "plastic")) {
-      col = active_r() ? selection_color() : fl_inactive(selection_color());
-      fl_color(value() ? col : fl_color_average(col, FL_BLACK, 0.5f));
-      fl_pie(x()+xx, y()+dy+1, ww, hh, 0, 360);
-    } else {
-      draw_box(FL_THIN_DOWN_BOX, x()+xx, y()+dy+1, ww, hh, col);
-    }
-    dx = (ww + 2 * dx - W) / 2;
-  }
-  draw_label(x()+W+2*dx, y(), w()-W-2*dx, h());
-  if (Fl::focus() == this) draw_focus();
-}
-
-int Fl_Light_Button::handle(int event) {
-  switch (event) {
-  case FL_RELEASE:
-    if (box()) redraw();
-  default:
-    return Fl_Button::handle(event);
-  }
-}
-
-/**
-  Creates a new Fl_Light_Button widget using the given
-  position, size, and label string.
-  <P>The destructor deletes the check button.
-*/
-Fl_Light_Button::Fl_Light_Button(int X, int Y, int W, int H, const char* l)
-: Fl_Button(X, Y, W, H, l) {
-  type(FL_TOGGLE_BUTTON);
-  selection_color(FL_YELLOW);
-  align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
-}
-
-//
-// End of "$Id: Fl_Light_Button.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Menu.cxx b/common/fltk/src/Fl_Menu.cxx
deleted file mode 100644
index 81568d0..0000000
--- a/common/fltk/src/Fl_Menu.cxx
+++ /dev/null
@@ -1,1060 +0,0 @@
-//
-// "$Id: Fl_Menu.cxx 8775 2011-06-03 14:07:52Z manolo $"
-//
-// Menu code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Warning: this menu code is quite a mess!
-
-// This file contains code for implementing Fl_Menu_Item, and for
-// methods for bringing up popup menu hierarchies without using the
-// Fl_Menu_ widget.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_Window.H>
-#include <FL/Fl_Menu_.H>
-#include <FL/fl_draw.H>
-#include <stdio.h>
-#include "flstring.h"
-
-/** Size of the menu starting from this menu item */
-int Fl_Menu_Item::size() const {
-  const Fl_Menu_Item* m = this;
-  int nest = 0;
-  for (;;) {
-    if (!m->text) {
-      if (!nest) return (m-this+1);
-      nest--;
-    } else if (m->flags & FL_SUBMENU) {
-      nest++;
-    }
-    m++;
-  }
-}
-
-// Advance a pointer to next visible or invisible item of a menu array, 
-// skipping the contents of submenus.
-static const Fl_Menu_Item* next_visible_or_not(const Fl_Menu_Item* m) {
-  int nest = 0;
-  do {
-    if (!m->text) {
-      if (!nest) return m;
-      nest--;
-    } else if (m->flags&FL_SUBMENU) {
-      nest++;
-    }
-    m++;
-  }
-  while (nest);
-  return m;
-}
-
-/**
-  Advance a pointer by n items through a menu array, skipping
-  the contents of submenus and invisible items.  There are two calls so
-  that you can advance through const and non-const data.
-*/
-const Fl_Menu_Item* Fl_Menu_Item::next(int n) const {
-  if (n < 0) return 0; // this is so selected==-1 returns NULL
-  const Fl_Menu_Item* m = this;
-  if (!m->visible()) n++;
-  while (n) {
-    m = next_visible_or_not(m);
-    if (m->visible()) n--;
-  }
-  return m;
-}
-
-// appearance of current menus are pulled from this parent widget:
-static const Fl_Menu_* button=0;
-
-////////////////////////////////////////////////////////////////
-
-// tiny window for title of menu:
-class menutitle : public Fl_Menu_Window {
-  void draw();
-public:
-  const Fl_Menu_Item* menu;
-  menutitle(int X, int Y, int W, int H, const Fl_Menu_Item*);
-};
-
-// each vertical menu has one of these:
-class menuwindow : public Fl_Menu_Window {
-  void draw();
-  void drawentry(const Fl_Menu_Item*, int i, int erase);
-public:
-  menutitle* title;
-  int handle(int);
-#if defined (__APPLE__) || defined (USE_X11)
-  int early_hide_handle(int);
-#endif
-  int itemheight;	// zero == menubar
-  int numitems;
-  int selected;
-  int drawn_selected;	// last redraw has this selected
-  int shortcutWidth;
-  const Fl_Menu_Item* menu;
-  menuwindow(const Fl_Menu_Item* m, int X, int Y, int W, int H,
-	     const Fl_Menu_Item* picked, const Fl_Menu_Item* title,
-	     int menubar = 0, int menubar_title = 0, int right_edge = 0);
-  ~menuwindow();
-  void set_selected(int);
-  int find_selected(int mx, int my);
-  int titlex(int);
-  void autoscroll(int);
-  void position(int x, int y);
-  int is_inside(int x, int y);
-};
-
-#define LEADING 4 // extra vertical leading
-
-extern char fl_draw_shortcut;
-
-/** 
-  Measures width of label, including effect of & characters. 
-  Optionally, can get height if hp is not NULL. 
-*/
-int Fl_Menu_Item::measure(int* hp, const Fl_Menu_* m) const {
-  Fl_Label l;
-  l.value   = text;
-  l.image   = 0;
-  l.deimage = 0;
-  l.type    = labeltype_;
-  l.font    = labelsize_ || labelfont_ ? labelfont_ : (m ? m->textfont() : FL_HELVETICA);
-  l.size    = labelsize_ ? labelsize_ : m ? m->textsize() : FL_NORMAL_SIZE;
-  l.color   = FL_FOREGROUND_COLOR; // this makes no difference?
-  fl_draw_shortcut = 1;
-  int w = 0; int h = 0;
-  l.measure(w, hp ? *hp : h);
-  fl_draw_shortcut = 0;
-  if (flags & (FL_MENU_TOGGLE|FL_MENU_RADIO)) w += 14;
-  return w;
-}
-
-/** Draws the menu item in bounding box x,y,w,h, optionally selects the item. */
-void Fl_Menu_Item::draw(int x, int y, int w, int h, const Fl_Menu_* m,
-			int selected) const {
-  Fl_Label l;
-  l.value   = text;
-  l.image   = 0;
-  l.deimage = 0;
-  l.type    = labeltype_;
-  l.font    = labelsize_ || labelfont_ ? labelfont_ : (m ? m->textfont() : FL_HELVETICA);
-  l.size    = labelsize_ ? labelsize_ : m ? m->textsize() : FL_NORMAL_SIZE;
-  l.color   = labelcolor_ ? labelcolor_ : m ? m->textcolor() : int(FL_FOREGROUND_COLOR);
-  if (!active()) l.color = fl_inactive((Fl_Color)l.color);
-  Fl_Color color = m ? m->color() : FL_GRAY;
-  if (selected) {
-    Fl_Color r = m ? m->selection_color() : FL_SELECTION_COLOR;
-    Fl_Boxtype b = m && m->down_box() ? m->down_box() : FL_FLAT_BOX;
-    if (fl_contrast(r,color)!=r) { // back compatibility boxtypes
-      if (selected == 2) { // menu title
-	r = color;
-	b = m ? m->box() : FL_UP_BOX;
-      } else {
-	r = (Fl_Color)(FL_COLOR_CUBE-1); // white
-	l.color = fl_contrast((Fl_Color)labelcolor_, r);
-      }
-    } else {
-      l.color = fl_contrast((Fl_Color)labelcolor_, r);
-    }
-    if (selected == 2) { // menu title
-      fl_draw_box(b, x, y, w, h, r);
-      x += 3;
-      w -= 8;
-    } else {
-      fl_draw_box(b, x+1, y-(LEADING-2)/2, w-2, h+(LEADING-2), r);
-    }
-  }
-
-  if (flags & (FL_MENU_TOGGLE|FL_MENU_RADIO)) {
-    int d = (h - FL_NORMAL_SIZE + 1) / 2;
-    int W = h - 2 * d;
-
-    if (flags & FL_MENU_RADIO) {
-      fl_draw_box(FL_ROUND_DOWN_BOX, x+2, y+d, W, W, FL_BACKGROUND2_COLOR);
-      if (value()) {
-	int tW = (W - Fl::box_dw(FL_ROUND_DOWN_BOX)) / 2 + 1;
-	if ((W - tW) & 1) tW++;	// Make sure difference is even to center
-	int td = Fl::box_dx(FL_ROUND_DOWN_BOX) + 1;
-        if (Fl::scheme()) {
-	  // Offset the radio circle...
-	  td ++;
-
-	  if (!strcmp(Fl::scheme(), "gtk+")) {
-	    fl_color(FL_SELECTION_COLOR);
-	    tW --;
-	    fl_pie(x + td + 1, y + d + td - 1, tW + 3, tW + 3, 0.0, 360.0);
-	    fl_arc(x + td + 1, y + d + td - 1, tW + 3, tW + 3, 0.0, 360.0);
-	    fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.2f));
-	  } else fl_color(labelcolor_);
-	} else fl_color(labelcolor_);
-
-	switch (tW) {
-	  // Larger circles draw fine...
-	  default :
-            fl_pie(x + td + 2, y + d + td, tW, tW, 0.0, 360.0);
-	    break;
-
-          // Small circles don't draw well on many systems...
-	  case 6 :
-	    fl_rectf(x + td + 4, y + d + td, tW - 4, tW);
-	    fl_rectf(x + td + 3, y + d + td + 1, tW - 2, tW - 2);
-	    fl_rectf(x + td + 2, y + d + td + 2, tW, tW - 4);
-	    break;
-
-	  case 5 :
-	  case 4 :
-	  case 3 :
-	    fl_rectf(x + td + 3, y + d + td, tW - 2, tW);
-	    fl_rectf(x + td + 2, y + d + td + 1, tW, tW - 2);
-	    break;
-
-	  case 2 :
-	  case 1 :
-	    fl_rectf(x + td + 2, y + d + td, tW, tW);
-	    break;
-	}
-
-	if (Fl::scheme() && !strcmp(Fl::scheme(), "gtk+")) {
-	  fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.5));
-	  fl_arc(x + td + 2, y + d + td, tW + 1, tW + 1, 60.0, 180.0);
-	}
-      }
-    } else {
-      fl_draw_box(FL_DOWN_BOX, x+2, y+d, W, W, FL_BACKGROUND2_COLOR);
-      if (value()) {
-	if (Fl::scheme() && !strcmp(Fl::scheme(), "gtk+")) {
-	  fl_color(FL_SELECTION_COLOR);
-	} else {
-	  fl_color(labelcolor_);
-	}
-	int tx = x + 5;
-	int tw = W - 6;
-	int d1 = tw/3;
-	int d2 = tw-d1;
-	int ty = y + d + (W+d2)/2-d1-2;
-	for (int n = 0; n < 3; n++, ty++) {
-	  fl_line(tx, ty, tx+d1, ty+d1);
-	  fl_line(tx+d1, ty+d1, tx+tw-1, ty+d1-d2+1);
-	}
-      }
-    }
-    x += W + 3;
-    w -= W + 3;
-  }
-
-  if (!fl_draw_shortcut) fl_draw_shortcut = 1;
-  l.draw(x+3, y, w>6 ? w-6 : 0, h, FL_ALIGN_LEFT);
-  fl_draw_shortcut = 0;
-}
-
-menutitle::menutitle(int X, int Y, int W, int H, const Fl_Menu_Item* L) :
-  Fl_Menu_Window(X, Y, W, H, 0) {
-  end();
-  set_modal();
-  clear_border();
-  set_menu_window();
-  menu = L;
-  if (L->labelcolor_ || Fl::scheme() || L->labeltype_ > FL_NO_LABEL) clear_overlay();
-}
-
-menuwindow::menuwindow(const Fl_Menu_Item* m, int X, int Y, int Wp, int Hp,
-		       const Fl_Menu_Item* picked, const Fl_Menu_Item* t, 
-		       int menubar, int menubar_title, int right_edge)
-  : Fl_Menu_Window(X, Y, Wp, Hp, 0)
-{
-  int scr_x, scr_y, scr_w, scr_h;
-  int tx = X, ty = Y;
-
-  Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h);
-  if (!right_edge || right_edge > scr_x+scr_w) right_edge = scr_x+scr_w;
-
-  end();
-  set_modal();
-  clear_border();
-  set_menu_window();
-  menu = m;
-  if (m) m = m->first(); // find the first item that needs to be rendered
-  drawn_selected = -1;
-  if (button) {
-    box(button->box());
-    if (box() == FL_NO_BOX || box() == FL_FLAT_BOX) box(FL_UP_BOX);
-  } else {
-    box(FL_UP_BOX);
-  }
-  color(button && !Fl::scheme() ? button->color() : FL_GRAY);
-  selected = -1;
-  {
-    int j = 0;
-    if (m) for (const Fl_Menu_Item* m1=m; ; m1 = m1->next(), j++) {
-      if (picked) {
-        if (m1 == picked) {selected = j; picked = 0;}
-        else if (m1 > picked) {selected = j-1; picked = 0; Wp = Hp = 0;}
-    }
-    if (!m1->text) break;
-  }
-  numitems = j;}
-
-  if (menubar) {
-    itemheight = 0;
-    title = 0;
-    return;
-  }
-
-  itemheight = 1;
-
-  int hotKeysw = 0;
-  int hotModsw = 0;
-  int Wtitle = 0;
-  int Htitle = 0;
-  if (t) Wtitle = t->measure(&Htitle, button) + 12;
-  int W = 0;
-  if (m) for (; m->text; m = m->next()) {
-    int hh; 
-    int w1 = m->measure(&hh, button);
-    if (hh+LEADING>itemheight) itemheight = hh+LEADING;
-    if (m->flags&(FL_SUBMENU|FL_SUBMENU_POINTER)) w1 += 14;
-    if (w1 > W) W = w1;
-    // calculate the maximum width of all shortcuts
-    if (m->shortcut_) {
-      // s is a pointerto the utf8 string for the entire shortcut
-      // k points only to the key part (minus the modifier keys)
-      const char *k, *s = fl_shortcut_label(m->shortcut_, &k);
-      if (fl_utf_nb_char((const unsigned char*)k, strlen(k))<=4) {
-        // a regular shortcut has a right-justified modifier followed by a left-justified key
-        w1 = int(fl_width(s, k-s));
-        if (w1 > hotModsw) hotModsw = w1;
-        w1 = int(fl_width(k))+4;
-        if (w1 > hotKeysw) hotKeysw = w1;
-      } else {
-        // a shortcut with a long modifier is right-justified to the menu
-        w1 = int(fl_width(s))+4;
-        if (w1 > (hotModsw+hotKeysw)) {
-          hotModsw = w1-hotKeysw;
-        }
-      }
-    }
-    if (m->labelcolor_ || Fl::scheme() || m->labeltype_ > FL_NO_LABEL) clear_overlay();
-  }
-  shortcutWidth = hotKeysw;
-  if (selected >= 0 && !Wp) X -= W/2;
-  int BW = Fl::box_dx(box());
-  W += hotKeysw+hotModsw+2*BW+7;
-  if (Wp > W) W = Wp;
-  if (Wtitle > W) W = Wtitle;
-
-  if (X < scr_x) X = scr_x; if (X > scr_x+scr_w-W) X = right_edge-W; //X= scr_x+scr_w-W;
-  x(X); w(W);
-  h((numitems ? itemheight*numitems-LEADING : 0)+2*BW+3);
-  if (selected >= 0) {
-    Y = Y+(Hp-itemheight)/2-selected*itemheight-BW;
-  } else {
-    Y = Y+Hp;
-    // if the menu hits the bottom of the screen, we try to draw
-    // it above the menubar instead. We will not adjust any menu
-    // that has a selected item.
-    if (Y+h()>scr_y+scr_h && Y-h()>=scr_y) {
-      if (Hp>1) {
-        // if we know the height of the Fl_Menu_, use it
-        Y = Y-Hp-h();
-      } else if (t) {
-        // assume that the menubar item height relates to the first
-        // menuitem as well
-        Y = Y-itemheight-h()-Fl::box_dh(box());
-      } else {
-        // draw the menu to the right
-        Y = Y-h()+itemheight+Fl::box_dy(box());
-      }
-    }
-  }
-  if (m) y(Y); else {y(Y-2); w(1); h(1);}
-
-  if (t) {
-    if (menubar_title) {
-      int dy = Fl::box_dy(button->box())+1;
-      int ht = button->h()-dy*2;
-      title = new menutitle(tx, ty-ht-dy, Wtitle, ht, t);
-    } else {
-      int dy = 2;
-      int ht = Htitle+2*BW+3;
-      title = new menutitle(X, Y-ht-dy, Wtitle, ht, t);
-    }
-  } else {
-    title = 0;
-  }
-}
-
-menuwindow::~menuwindow() {
-  hide();
-  delete title;
-}
-
-void menuwindow::position(int X, int Y) {
-  if (title) {title->position(X, title->y()+Y-y());}
-  Fl_Menu_Window::position(X, Y);
-  // x(X); y(Y); // don't wait for response from X
-}
-
-// scroll so item i is visible on screen
-void menuwindow::autoscroll(int n) {
-  int scr_x, scr_y, scr_w, scr_h;
-  int Y = y()+Fl::box_dx(box())+2+n*itemheight;
-
-  Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h);
-  if (Y <= scr_y) Y = scr_y-Y+10;
-  else {
-    Y = Y+itemheight-scr_h-scr_y;
-    if (Y < 0) return;
-    Y = -Y-10;
-  }
-  Fl_Menu_Window::position(x(), y()+Y);
-  // y(y()+Y); // don't wait for response from X
-}
-
-////////////////////////////////////////////////////////////////
-
-void menuwindow::drawentry(const Fl_Menu_Item* m, int n, int eraseit) {
-  if (!m) return; // this happens if -1 is selected item and redrawn
-
-  int BW = Fl::box_dx(box());
-  int xx = BW;
-  int W = w();
-  int ww = W-2*BW-1;
-  int yy = BW+1+n*itemheight;
-  int hh = itemheight - LEADING;
-
-  if (eraseit && n != selected) {
-    fl_push_clip(xx+1, yy-(LEADING-2)/2, ww-2, hh+(LEADING-2));
-    draw_box(box(), 0, 0, w(), h(), button ? button->color() : color());
-    fl_pop_clip();
-  }
-
-  m->draw(xx, yy, ww, hh, button, n==selected);
-
-  // the shortcuts and arrows assume fl_color() was left set by draw():
-  if (m->submenu()) {
-    int sz = (hh-7)&-2;
-    int y1 = yy+(hh-sz)/2;
-    int x1 = xx+ww-sz-3;
-    fl_polygon(x1+2, y1, x1+2, y1+sz, x1+sz/2+2, y1+sz/2);
-  } else if (m->shortcut_) {
-    Fl_Font f = m->labelsize_ || m->labelfont_ ? (Fl_Font)m->labelfont_ :
-                    button ? button->textfont() : FL_HELVETICA;
-    fl_font(f, m->labelsize_ ? m->labelsize_ :
-                   button ? button->textsize() : FL_NORMAL_SIZE);
-    const char *k, *s = fl_shortcut_label(m->shortcut_, &k);
-    if (fl_utf_nb_char((const unsigned char*)k, strlen(k))<=4) {
-      // righ-align the modifiers and left-align the key
-      char buf[32]; strcpy(buf, s); buf[k-s] = 0;
-      fl_draw(buf, xx, yy, ww-shortcutWidth, hh, FL_ALIGN_RIGHT);
-      fl_draw(  k, xx+ww-shortcutWidth, yy, shortcutWidth, hh, FL_ALIGN_LEFT);
-    } else {
-      // right-align to the menu
-      fl_draw(s, xx, yy, ww-4, hh, FL_ALIGN_RIGHT);
-    }
-  }
-
-  if (m->flags & FL_MENU_DIVIDER) {
-    fl_color(FL_DARK3);
-    fl_xyline(BW-1, yy+hh+(LEADING-2)/2, W-2*BW+2);
-    fl_color(FL_LIGHT3);
-    fl_xyline(BW-1, yy+hh+((LEADING-2)/2+1), W-2*BW+2);
-  }
-}
-
-void menutitle::draw() {
-  menu->draw(0, 0, w(), h(), button, 2);
-}
-
-void menuwindow::draw() {
-  if (damage() != FL_DAMAGE_CHILD) {	// complete redraw
-    fl_draw_box(box(), 0, 0, w(), h(), button ? button->color() : color());
-    if (menu) {
-      const Fl_Menu_Item* m; int j;
-      for (m=menu->first(), j=0; m->text; j++, m = m->next()) drawentry(m, j, 0);
-    }
-  } else {
-    if (damage() & FL_DAMAGE_CHILD && selected!=drawn_selected) { // change selection
-      drawentry(menu->next(drawn_selected), drawn_selected, 1);
-      drawentry(menu->next(selected), selected, 1);
-    }
-  }	    
-  drawn_selected = selected;
-}
-
-void menuwindow::set_selected(int n) {
-  if (n != selected) {selected = n; damage(FL_DAMAGE_CHILD);}
-}
-
-////////////////////////////////////////////////////////////////
-
-int menuwindow::find_selected(int mx, int my) {
-  if (!menu || !menu->text) return -1;
-  mx -= x();
-  my -= y();
-  if (my < 0 || my >= h()) return -1;
-  if (!itemheight) { // menubar
-    int xx = 3; int n = 0;
-    const Fl_Menu_Item* m = menu ? menu->first() : 0;
-    for (; ; m = m->next(), n++) {
-      if (!m->text) return -1;
-      xx += m->measure(0, button) + 16;
-      if (xx > mx) break;
-    }
-    return n;
-  }
-  if (mx < Fl::box_dx(box()) || mx >= w()) return -1;
-  int n = (my-Fl::box_dx(box())-1)/itemheight;
-  if (n < 0 || n>=numitems) return -1;
-  return n;
-}
-
-// return horizontal position for item n in a menubar:
-int menuwindow::titlex(int n) {
-  const Fl_Menu_Item* m;
-  int xx = 3;
-  for (m=menu->first(); n--; m = m->next()) xx += m->measure(0, button) + 16;
-  return xx;
-}
-
-// return 1, if the given root coordinates are inside the window
-int menuwindow::is_inside(int mx, int my) {
-  if ( mx < x_root() || mx >= x_root() + w() ||
-       my < y_root() || my >= y_root() + h()) {
-    return 0;
-  }
-  if (itemheight == 0 && find_selected(mx, my) == -1) {
-    // in the menubar but out from any menu header
-    return 0;
-    }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-// Fl_Menu_Item::popup(...)
-
-// Because Fl::grab() is done, all events go to one of the menu windows.
-// But the handle method needs to look at all of them to find out
-// what item the user is pointing at.  And it needs a whole lot
-// of other state variables to determine what is going on with
-// the currently displayed menus.
-// So the main loop (handlemenu()) puts all the state in a structure
-// and puts a pointer to it in a static location, so the handle()
-// on menus can refer to it and alter it.  The handle() method
-// changes variables in this state to indicate what item is
-// picked, but does not actually alter the display, instead the
-// main loop does that.  This is because the X mapping and unmapping
-// of windows is slow, and we don't want to fall behind the events.
-
-// values for menustate.state:
-#define INITIAL_STATE 0	// no mouse up or down since popup() called
-#define PUSH_STATE 1	// mouse has been pushed on a normal item
-#define DONE_STATE 2	// exit the popup, the current item was picked
-#define MENU_PUSH_STATE 3 // mouse has been pushed on a menu title
-
-struct menustate {
-  const Fl_Menu_Item* current_item; // what mouse is pointing at
-  int menu_number; // which menu it is in
-  int item_number; // which item in that menu, -1 if none
-  menuwindow* p[20]; // pointers to menus
-  int nummenus;
-  int menubar; // if true p[0] is a menubar
-  int state;
-  menuwindow* fakemenu; // kludge for buttons in menubar
-  int is_inside(int mx, int my);
-};
-static menustate* p=0;
-
-// return 1 if the coordinates are inside any of the menuwindows
-int menustate::is_inside(int mx, int my) {
-  int i;
-  for (i=nummenus-1; i>=0; i--) {
-    if (p[i]->is_inside(mx, my))
-      return 1;
-  }
-  return 0;
-}
-
-static inline void setitem(const Fl_Menu_Item* i, int m, int n) {
-  p->current_item = i;
-  p->menu_number = m;
-  p->item_number = n;
-}
-
-static void setitem(int m, int n) {
-  menustate &pp = *p;
-  pp.current_item = (n >= 0) ? pp.p[m]->menu->next(n) : 0;
-  pp.menu_number = m;
-  pp.item_number = n;
-}
-
-static int forward(int menu) { // go to next item in menu menu if possible
-  menustate &pp = *p;
-  // Fl_Menu_Button can generate menu=-1. This line fixes it and selectes the first item.
-  if (menu==-1) 
-    menu = 0;
-  menuwindow &m = *(pp.p[menu]);
-  int item = (menu == pp.menu_number) ? pp.item_number : m.selected;
-  while (++item < m.numitems) {
-    const Fl_Menu_Item* m1 = m.menu->next(item);
-    if (m1->activevisible()) {setitem(m1, menu, item); return 1;}
-  }
-  return 0;
-}
-
-static int backward(int menu) { // previous item in menu menu if possible
-  menustate &pp = *p;
-  menuwindow &m = *(pp.p[menu]);
-  int item = (menu == pp.menu_number) ? pp.item_number : m.selected;
-  if (item < 0) item = m.numitems;
-  while (--item >= 0) {
-    const Fl_Menu_Item* m1 = m.menu->next(item);
-    if (m1->activevisible()) {setitem(m1, menu, item); return 1;}
-  }
-  return 0;
-}
-
-int menuwindow::handle(int e) {
-#if defined (__APPLE__) || defined (USE_X11)
-  // This off-route takes care of the "detached menu" bug on OS X.
-  // Apple event handler requires that we hide all menu windows right
-  // now, so that Carbon can continue undisturbed with handling window
-  // manager events, like dragging the application window.
-  int ret = early_hide_handle(e);
-  menustate &pp = *p;
-  if (pp.state == DONE_STATE) {
-    hide();
-    if (pp.fakemenu) {
-      pp.fakemenu->hide();
-      if (pp.fakemenu->title)
-        pp.fakemenu->title->hide();
-    }
-    int i = pp.nummenus;
-    while (i>0) {
-      menuwindow *mw = pp.p[--i];
-      if (mw) {
-        mw->hide();
-        if (mw->title) 
-          mw->title->hide();
-      }
-    }
-  }
-  return ret;
-}
-
-int menuwindow::early_hide_handle(int e) {
-#endif
-  menustate &pp = *p;
-  switch (e) {
-  case FL_KEYBOARD:
-    switch (Fl::event_key()) {
-    case FL_BackSpace:
-    BACKTAB:
-      if (!backward(pp.menu_number)) {pp.item_number = -1;backward(pp.menu_number);}
-      return 1;
-    case FL_Up:
-      if (pp.menubar && pp.menu_number == 0) {
-        // Do nothing...
-      } else if (backward(pp.menu_number)) {
-        // Do nothing...
-      } else if (pp.menubar && pp.menu_number==1) {
-        setitem(0, pp.p[0]->selected);
-      }
-      return 1;
-    case FL_Tab:
-      if (Fl::event_shift()) goto BACKTAB;
-    case FL_Down:
-      if (pp.menu_number || !pp.menubar) {
-        if (!forward(pp.menu_number) && Fl::event_key()==FL_Tab) {
-          pp.item_number = -1;
-          forward(pp.menu_number);
-        }
-      } else if (pp.menu_number < pp.nummenus-1) {
-        forward(pp.menu_number+1);
-      }
-      return 1;
-    case FL_Right:
-      if (pp.menubar && (pp.menu_number<=0 || (pp.menu_number==1 && pp.nummenus==2)))
-	forward(0);
-      else if (pp.menu_number < pp.nummenus-1) forward(pp.menu_number+1);
-      return 1;
-    case FL_Left:
-      if (pp.menubar && pp.menu_number<=1) backward(0);
-      else if (pp.menu_number>0)
-	setitem(pp.menu_number-1, pp.p[pp.menu_number-1]->selected);
-      return 1;
-    case FL_Enter:
-    case FL_KP_Enter:
-    case ' ':
-      pp.state = DONE_STATE;
-      return 1;
-    case FL_Escape:
-      setitem(0, -1, 0);
-      pp.state = DONE_STATE;
-      return 1;
-    }
-    break;
-  case FL_SHORTCUT: 
-    {
-      for (int mymenu = pp.nummenus; mymenu--;) {
-	menuwindow &mw = *(pp.p[mymenu]);
-	int item; const Fl_Menu_Item* m = mw.menu->find_shortcut(&item);
-	if (m) {
-	  setitem(m, mymenu, item);
-	  if (!m->submenu()) pp.state = DONE_STATE;
-	  return 1;
-	}
-      }
-    }
-    break;
-    case FL_MOVE:
-#if ! (defined(WIN32) || defined(__APPLE__))
-      if (pp.state == DONE_STATE) {
-	return 1; // Fix for STR #2619
-      }
-      /* FALLTHROUGH */
-#endif
-  case FL_ENTER:
-  case FL_PUSH:
-  case FL_DRAG:
-    {
-      int mx = Fl::event_x_root();
-      int my = Fl::event_y_root();
-      int item=0; int mymenu = pp.nummenus-1;
-      // Clicking or dragging outside menu cancels it...
-      if ((!pp.menubar || mymenu) && !pp.is_inside(mx, my)) {
-	setitem(0, -1, 0);
-	if (e==FL_PUSH)
-	  pp.state = DONE_STATE;
-	return 1;
-      }
-      for (mymenu = pp.nummenus-1; ; mymenu--) {
-	item = pp.p[mymenu]->find_selected(mx, my);
-	if (item >= 0) 
-	  break;
-	if (mymenu <= 0) {
-	  // buttons in menubars must be deselected if we move outside of them!
-	  if (pp.menu_number==-1 && e==FL_PUSH) {
-	    pp.state = DONE_STATE;
-	    return 1;
-	  }
-	  if (pp.current_item && pp.menu_number==0 && !pp.current_item->submenu()) {
-	    if (e==FL_PUSH)
-	      pp.state = DONE_STATE;
-	    setitem(0, -1, 0);
-	    return 1;
-	  }
-	  // all others can stay selected
-	  return 0;
-	}
-      }
-      if (my == 0 && item > 0) setitem(mymenu, item - 1);
-      else setitem(mymenu, item);
-      if (e == FL_PUSH) {
-	if (pp.current_item && pp.current_item->submenu() // this is a menu title
-	    && item != pp.p[mymenu]->selected // and it is not already on
-	    && !pp.current_item->callback_) // and it does not have a callback
-	  pp.state = MENU_PUSH_STATE;
-	else
-	  pp.state = PUSH_STATE;
-      }
-    }
-    return 1;
-  case FL_RELEASE:
-    // Mouse must either be held down/dragged some, or this must be
-    // the second click (not the one that popped up the menu):
-    if (   !Fl::event_is_click() 
-        || pp.state == PUSH_STATE 
-        || (pp.menubar && pp.current_item && !pp.current_item->submenu()) // button
-	) {
-#if 0 // makes the check/radio items leave the menu up
-      const Fl_Menu_Item* m = pp.current_item;
-      if (m && button && (m->flags & (FL_MENU_TOGGLE|FL_MENU_RADIO))) {
-	((Fl_Menu_*)button)->picked(m);
-	pp.p[pp.menu_number]->redraw();
-      } else
-#endif
-      // do nothing if they try to pick inactive items
-      if (!pp.current_item || pp.current_item->activevisible())
-	pp.state = DONE_STATE;
-    }
-    return 1;
-  }
-  return Fl_Window::handle(e);
-}
-
-/**
-  Pulldown() is similar to popup(), but a rectangle is
-  provided to position the menu.  The menu is made at least W
-  wide, and the picked item is centered over the rectangle
-  (like Fl_Choice uses).  If picked is zero or not
-  found, the menu is aligned just below the rectangle (like a pulldown
-  menu).
-  <P>The title and menubar arguments are used
-  internally by the Fl_Menu_Bar widget.
-*/
-const Fl_Menu_Item* Fl_Menu_Item::pulldown(
-    int X, int Y, int W, int H,
-    const Fl_Menu_Item* initial_item,
-    const Fl_Menu_* pbutton,
-    const Fl_Menu_Item* t,
-    int menubar) const {
-  Fl_Group::current(0); // fix possible user error...
-
-  button = pbutton;
-  if (pbutton && pbutton->window()) {
-    for (Fl_Window* w = pbutton->window(); w; w = w->window()) {
-      X += w->x();
-      Y += w->y();
-    }
-  } else {
-    X += Fl::event_x_root()-Fl::event_x();
-    Y += Fl::event_y_root()-Fl::event_y();
-  }
-  menuwindow mw(this, X, Y, W, H, initial_item, t, menubar);
-  Fl::grab(mw);
-  menustate pp; p = &pp;
-  pp.p[0] = &mw;
-  pp.nummenus = 1;
-  pp.menubar = menubar;
-  pp.state = INITIAL_STATE;
-  pp.fakemenu = 0; // kludge for buttons in menubar
-
-  // preselected item, pop up submenus if necessary:
-  if (initial_item && mw.selected >= 0) {
-    setitem(0, mw.selected);
-    goto STARTUP;
-  }
-
-  pp.current_item = 0; pp.menu_number = 0; pp.item_number = -1;
-  if (menubar) {
-    // find the initial menu
-    if (!mw.handle(FL_DRAG)) {
-      Fl::grab(0);
-      return 0;
-    }
-  }
-  initial_item = pp.current_item;
-  if (initial_item) goto STARTUP;
-
-  // the main loop, runs until p.state goes to DONE_STATE:
-  for (;;) {
-
-    // make sure all the menus are shown:
-    {
-      for (int k = menubar; k < pp.nummenus; k++) {
-        if (!pp.p[k]->shown()) {
-	  if (pp.p[k]->title) pp.p[k]->title->show();
-	  pp.p[k]->show();
-        }
-      }
-    }
-
-    // get events:
-    {
-      const Fl_Menu_Item* oldi = pp.current_item;
-      Fl::wait();
-      if (pp.state == DONE_STATE) break; // done.
-      if (pp.current_item == oldi) continue;
-    }
-
-    // only do rest if item changes:
-    if(pp.fakemenu) {delete pp.fakemenu; pp.fakemenu = 0;} // turn off "menubar button"
-
-    if (!pp.current_item) { // pointing at nothing
-      // turn off selection in deepest menu, but don't erase other menus:
-      pp.p[pp.nummenus-1]->set_selected(-1);
-      continue;
-    }
-
-    if(pp.fakemenu) {delete pp.fakemenu; pp.fakemenu = 0;}
-    initial_item = 0; // stop the startup code
-    pp.p[pp.menu_number]->autoscroll(pp.item_number);
-
-  STARTUP:
-    menuwindow& cw = *pp.p[pp.menu_number];
-    const Fl_Menu_Item* m = pp.current_item;
-    if (!m->activevisible()) { // pointing at inactive item
-      cw.set_selected(-1);
-      initial_item = 0; // turn off startup code
-      continue;
-    }
-    cw.set_selected(pp.item_number);
-
-    if (m==initial_item) initial_item=0; // stop the startup code if item found
-    if (m->submenu()) {
-      const Fl_Menu_Item* title = m;
-      const Fl_Menu_Item* menutable;
-      if (m->flags&FL_SUBMENU) menutable = m+1;
-      else menutable = (Fl_Menu_Item*)(m)->user_data_;
-      // figure out where new menu goes:
-      int nX, nY;
-      if (!pp.menu_number && pp.menubar) {	// menu off a menubar:
-	nX = cw.x() + cw.titlex(pp.item_number);
-	nY = cw.y() + cw.h();
-	initial_item = 0;
-      } else {
-	nX = cw.x() + cw.w();
-	nY = cw.y() + pp.item_number * cw.itemheight;
-	title = 0;
-      }
-      if (initial_item) { // bring up submenu containing initial item:
-	menuwindow* n = new menuwindow(menutable,X,Y,W,H,initial_item,title,0,0,cw.x());
-	pp.p[pp.nummenus++] = n;
-	// move all earlier menus to line up with this new one:
-	if (n->selected>=0) {
-	  int dy = n->y()-nY;
-	  int dx = n->x()-nX;
-	  for (int menu = 0; menu <= pp.menu_number; menu++) {
-	    menuwindow* tt = pp.p[menu];
-	    int nx = tt->x()+dx; if (nx < 0) {nx = 0; dx = -tt->x();}
-	    int ny = tt->y()+dy; if (ny < 0) {ny = 0; dy = -tt->y();}
-	    tt->position(nx, ny);
-	  }
-	  setitem(pp.nummenus-1, n->selected);
-	  goto STARTUP;
-	}
-      } else if (pp.nummenus > pp.menu_number+1 &&
-		 pp.p[pp.menu_number+1]->menu == menutable) {
-	// the menu is already up:
-	while (pp.nummenus > pp.menu_number+2) delete pp.p[--pp.nummenus];
-	pp.p[pp.nummenus-1]->set_selected(-1);
-      } else {
-	// delete all the old menus and create new one:
-	while (pp.nummenus > pp.menu_number+1) delete pp.p[--pp.nummenus];
-	pp.p[pp.nummenus++]= new menuwindow(menutable, nX, nY,
-					  title?1:0, 0, 0, title, 0, menubar, cw.x());
-      }
-    } else { // !m->submenu():
-      while (pp.nummenus > pp.menu_number+1) delete pp.p[--pp.nummenus];
-      if (!pp.menu_number && pp.menubar) {
-	// kludge so "menubar buttons" turn "on" by using menu title:
-	pp.fakemenu = new menuwindow(0,
-				  cw.x()+cw.titlex(pp.item_number),
-				  cw.y()+cw.h(), 0, 0,
-				  0, m, 0, 1);
-	pp.fakemenu->title->show();
-      }
-    }
-  }
-  const Fl_Menu_Item* m = pp.current_item;
-  delete pp.fakemenu;
-  while (pp.nummenus>1) delete pp.p[--pp.nummenus];
-  mw.hide();
-  Fl::grab(0);
-  return m;
-}
-
-/**
-  This method is called by widgets that want to display menus.
-
-  The menu stays up until the user picks an item or dismisses it.
-  The selected item (or NULL if none) is returned. <I>This does not
-  do the callbacks or change the state of check or radio items.</I>
-
-  X,Y is the position of the mouse cursor, relative to the
-  window that got the most recent event (usually you can pass 
-  Fl::event_x() and Fl::event_y() unchanged here).
-
-  \p title is a character string title for the menu.  If
-  non-zero a small box appears above the menu with the title in it.
-
-  The menu is positioned so the cursor is centered over the item 
-  picked.  This will work even if \p picked is in a submenu.
-  If \p picked is zero or not in the menu item table the menu is
-  positioned with the cursor in the top-left corner.
-
-  \p button is a pointer to an Fl_Menu_ from which the color and
-  boxtypes for the menu are pulled.  If NULL then defaults are used.
-*/
-const Fl_Menu_Item* Fl_Menu_Item::popup(
-  int X, int Y,
-  const char* title,
-  const Fl_Menu_Item* picked,
-  const Fl_Menu_* button
-  ) const {
-  static Fl_Menu_Item dummy; // static so it is all zeros
-  dummy.text = title;
-  return pulldown(X, Y, 0, 0, picked, button, title ? &dummy : 0);
-}
-
-/**
-  Search only the top level menu for a shortcut.  
-  Either &x in the label or the shortcut fields are used.
-
-  This tests the current event, which must be an FL_KEYBOARD or 
-  FL_SHORTCUT, against a shortcut value.
-
-  \param ip returns the index of the item, if \p ip is not NULL.
-  \param require_alt if true: match only if Alt key is pressed.
-
-  \return found Fl_Menu_Item or NULL
-*/
-const Fl_Menu_Item* Fl_Menu_Item::find_shortcut(int* ip, const bool require_alt) const {
-  const Fl_Menu_Item* m = this;
-  if (m) for (int ii = 0; m->text; m = next_visible_or_not(m), ii++) {
-    if (m->active()) {
-      if (Fl::test_shortcut(m->shortcut_)
-	 || Fl_Widget::test_shortcut(m->text, require_alt)) {
-	if (ip) *ip=ii;
-	return m;
-      }
-    }
-  }
-  return 0;
-}
-
-// Recursive search of all submenus for anything with this key as a
-// shortcut.  Only uses the shortcut field, ignores &x in the labels:
-/**
-  This is designed to be called by a widgets handle() method in
-  response to a FL_SHORTCUT event.  If the current event matches
-  one of the items shortcut, that item is returned.  If the keystroke
-  does not match any shortcuts then NULL is returned.  This only
-  matches the shortcut() fields, not the letters in the title
-  preceeded by '
-*/
-const Fl_Menu_Item* Fl_Menu_Item::test_shortcut() const {
-  const Fl_Menu_Item* m = this;
-  const Fl_Menu_Item* ret = 0;
-  if (m) for (; m->text; m = next_visible_or_not(m)) {
-    if (m->active()) {
-      // return immediately any match of an item in top level menu:
-      if (Fl::test_shortcut(m->shortcut_)) return m;
-      // if (Fl_Widget::test_shortcut(m->text)) return m;
-      // only return matches from lower menu if nothing found in top menu:
-      if (!ret && m->submenu()) {
-	const Fl_Menu_Item* s =
-	  (m->flags&FL_SUBMENU) ? m+1:(const Fl_Menu_Item*)m->user_data_;
-	ret = s->test_shortcut();
-      }
-    }
-  }
-  return ret;
-}
-
-//
-// End of "$Id: Fl_Menu.cxx 8775 2011-06-03 14:07:52Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Menu_.cxx b/common/fltk/src/Fl_Menu_.cxx
deleted file mode 100644
index 934430d..0000000
--- a/common/fltk/src/Fl_Menu_.cxx
+++ /dev/null
@@ -1,435 +0,0 @@
-//
-// "$Id: Fl_Menu_.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Common menu code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// This is a base class for all items that have a menu:
-//	Fl_Menu_Bar, Fl_Menu_Button, Fl_Choice
-// This provides storage for a menu item, functions to add/modify/delete
-// items, and a call for when the user picks a menu item.
-
-// More code in Fl_Menu_add.cxx
-
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_.H>
-#include "flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-#define SAFE_STRCAT(s) { len += strlen(s); if ( len >= namelen ) { *name='\0'; return(-2); } else strcat(name,(s)); }
-
-/** Get the menu 'pathname' for the specified menuitem.
-
-    If finditem==NULL, mvalue() is used (the most recently picked menuitem).
-
-    \b Example:
-    \code
-      Fl_Menu_Bar *menubar = 0;
-      void my_menu_callback(Fl_Widget*,void*) {
-        char name[80];
-        if ( menubar->item_pathname(name, sizeof(name)-1) == 0 ) {   // recently picked item
-          if ( strcmp(name, "File/&Open") == 0 ) { .. }              // open invoked
-          if ( strcmp(name, "File/&Save") == 0 ) { .. }              // save invoked
-          if ( strcmp(name, "Edit/&Copy") == 0 ) { .. }              // copy invoked
-        }
-      }
-      int main() {
-        [..]
-        menubar = new Fl_Menu_Bar(..);
-        menubar->add("File/&Open",  0, my_menu_callback);
-        menubar->add("File/&Save",  0, my_menu_callback);
-        menubar->add("Edit/&Copy",  0, my_menu_callback);
-        [..]
-      }
-    \endcode
-
-    \returns
-	-   0 : OK (name has menuitem's pathname)
-	-  -1 : item not found (name="")
-	-  -2 : 'name' not large enough (name="")
-    \see find_item()
-*/
-int Fl_Menu_::item_pathname(char *name, int namelen, const Fl_Menu_Item *finditem) const {
-    int len = 0;
-    finditem = finditem ? finditem : mvalue();    
-    name[0] = '\0';
-    for ( int t=0; t<size(); t++ ) {
-        const Fl_Menu_Item *m = &(menu()[t]);
-	if ( m->submenu() ) {				// submenu? descend
-	    if (*name) SAFE_STRCAT("/");
-	    if (m->label()) SAFE_STRCAT(m->label());
-	    if ( m == finditem ) return(0);		// found? done.
-	} else {
-	    if (m->label()) {				// menu item?
-		if ( m == finditem ) {			// found? tack on itemname, done.
-		    SAFE_STRCAT("/");
-		    SAFE_STRCAT(m->label());
-		    return(0);
-		}
-	    } else {					// end of submenu? pop
-	        char *ss = strrchr(name, '/');
-		if ( ss ) { *ss = 0; len = strlen(name); }	// "File/Edit" -> "File"
-		else { name[0] = '\0'; len = 0; }		// "File" -> ""
-		continue;
-	    }
-	}
-    }
-    *name = '\0';
-    return(-1);						// item not found
-}
-
-/**
- Find the menu item for a given menu \p pathname, such as "Edit/Copy".
- 
- This method finds a menu item in the menu array, also traversing submenus, but
- not submenu pointers.
-
- To get the menu item's index, use find_index(const char*)
-
-  \b Example:
-  \code
-    Fl_Menu_Bar *menubar = new Fl_Menu_Bar(..);
-    menubar->add("File/&Open");
-    menubar->add("File/&Save");
-    menubar->add("Edit/&Copy");
-    // [..]
-    Fl_Menu_Item *item;
-    if ( ( item = (Fl_Menu_Item*)menubar->find_item("File/&Open") ) != NULL ) {
-	item->labelcolor(FL_RED);
-    }
-    if ( ( item = (Fl_Menu_Item*)menubar->find_item("Edit/&Copy") ) != NULL ) {
-	item->labelcolor(FL_GREEN);
-    }
-  \endcode
-
-  \param pathname The path and name of the menu item
-  \returns The item found, or NULL if not found
-  \see find_index(const char*), find_item(Fl_Callback*), item_pathname() 
-*/
-const Fl_Menu_Item * Fl_Menu_::find_item(const char *pathname) {
-  int i = find_index(pathname);
-  return( (i==-1) ? 0 : (const Fl_Menu_Item*)(menu_+i));
-}
-
-/**
- Find the index the menu array for given \p item.
- 
- A way to convert a menu item pointer into an index.
-
- Current implementation is fast and not expensive.
-
- \code
-   // Convert an index-to-item
-   int index = 12;
-   const Fl_Menu_Item *item = mymenu->menu() + index;
-
-   // Convert an item-to-index
-   int index = mymenu->find_index(item);
-   if ( index == -1 ) { ..error.. }
- \endcode
-
- \param item The *item to be found
- \returns    The index of the item, or -1 if not found.
- \see        menu()
-*/
-int Fl_Menu_::find_index(const Fl_Menu_Item *item) const {
-  Fl_Menu_Item *max = menu_+size();
-  if (item<menu_ || item>=max) return(-1);
-  return(item-menu_);
-}
-
-/**
- Find the index into the menu array for a given callback \p cb.
- 
- This method finds a menu item's index position, also traversing submenus, but
- not submenu pointers. This is useful if an application uses internationalisation
- and a menu item can not be found using its label. This search is also much faster.
- 
- \param cb Find the first item with this callback
- \returns  The index of the item with the specific callback, or -1 if not found
- \see      find_index(const char*)
- */
-int Fl_Menu_::find_index(Fl_Callback *cb) const {
-  for ( int t=0; t < size(); t++ )
-    if (menu_[t].callback_==cb)
-      return(t);
-  return(-1);
-}
-
-/**
- Find the menu item index for a given menu \p pathname, such as "Edit/Copy".
- 
- This method finds a menu item's index position for the given menu pathname,
- also traversing submenus, but not submenu pointers.
-
- To get the menu item pointer for a pathname, use find_item()
-
- \param pathname The path and name of the menu item index to find
- \returns        The index of the matching item, or -1 if not found.
- \see            item_pathname()
-
-*/
-int Fl_Menu_::find_index(const char *pathname) const {
-  char menupath[1024] = "";	// File/Export
-  for ( int t=0; t < size(); t++ ) {
-    Fl_Menu_Item *m = menu_ + t;
-    if (m->flags&FL_SUBMENU) {
-      // IT'S A SUBMENU
-      // we do not support searches through FL_SUBMENU_POINTER links
-      if (menupath[0]) strlcat(menupath, "/", sizeof(menupath));
-      strlcat(menupath, m->label(), sizeof(menupath));
-      if (!strcmp(menupath, pathname)) return(t);
-    } else {
-      if (!m->label()) {
-	// END OF SUBMENU? Pop back one level.
-	char *ss = strrchr(menupath, '/');
-	if ( ss ) *ss = 0;
-	else menupath[0] = '\0';
-	continue;
-      }
-      // IT'S A MENU ITEM
-      char itempath[1024];	// eg. Edit/Copy
-      strcpy(itempath, menupath);
-      if (itempath[0]) strlcat(itempath, "/", sizeof(itempath));
-      strlcat(itempath, m->label(), sizeof(itempath));
-      if (!strcmp(itempath, pathname)) return(t);
-    }
-  }
-  return(-1);
-}
-
-/**
- Find the menu item for the given callback \p cb.
- 
- This method finds a menu item in a menu array, also traversing submenus, but
- not submenu pointers. This is useful if an application uses 
- internationalisation and a menu item can not be found using its label. This
- search is also much faster.
- 
- \param cb find the first item with this callback
- \returns The item found, or NULL if not found
- \see find_item(const char*)
- */
-const Fl_Menu_Item * Fl_Menu_::find_item(Fl_Callback *cb) {
-  for ( int t=0; t < size(); t++ ) {
-    const Fl_Menu_Item *m = menu_ + t;
-    if (m->callback_==cb) {
-      return m;
-    }
-  }
-  return (const Fl_Menu_Item *)0;
-}
-
-/**
-  The value is the index into menu() of the last item chosen by
-  the user.  It is zero initially.  You can set it as an integer, or set
-  it with a pointer to a menu item.  The set routines return non-zero if
-  the new value is different than the old one.
-*/
-int Fl_Menu_::value(const Fl_Menu_Item* m) {
-  clear_changed();
-  if (value_ != m) {value_ = m; return 1;}
-  return 0;
-}
-
-/** 
- When user picks a menu item, call this.  It will do the callback.
- Unfortunately this also casts away const for the checkboxes, but this
- was necessary so non-checkbox menus can really be declared const...
-*/
-const Fl_Menu_Item* Fl_Menu_::picked(const Fl_Menu_Item* v) {
-  if (v) {
-    if (v->radio()) {
-      if (!v->value()) { // they are turning on a radio item
-	set_changed();
-	((Fl_Menu_Item*)v)->setonly();
-      }
-      redraw();
-    } else if (v->flags & FL_MENU_TOGGLE) {
-      set_changed();
-      ((Fl_Menu_Item*)v)->flags ^= FL_MENU_VALUE;
-      redraw();
-    } else if (v != value_) { // normal item
-      set_changed();
-    }
-    value_ = v;
-    if (when()&(FL_WHEN_CHANGED|FL_WHEN_RELEASE)) {
-      if (changed() || when()&FL_WHEN_NOT_CHANGED) {
-	if (value_ && value_->callback_) value_->do_callback((Fl_Widget*)this);
-	else do_callback();
-      }
-    }
-  }
-  return v;
-}
-
-/** Turns the radio item "on" for the menu item and turns off adjacent radio items set. */
-void Fl_Menu_Item::setonly() {
-  flags |= FL_MENU_RADIO | FL_MENU_VALUE;
-  Fl_Menu_Item* j;
-  for (j = this; ; ) {	// go down
-    if (j->flags & FL_MENU_DIVIDER) break; // stop on divider lines
-    j++;
-    if (!j->text || !j->radio()) break; // stop after group
-    j->clear();
-  }
-  for (j = this-1; ; j--) { // go up
-    if (!j->text || (j->flags&FL_MENU_DIVIDER) || !j->radio()) break;
-    j->clear();
-  }
-}
-
-/**
- Creates a new Fl_Menu_ widget using the given position, size,
- and label string.  menu() is initialized to null.
- */
-Fl_Menu_::Fl_Menu_(int X,int Y,int W,int H,const char* l)
-: Fl_Widget(X,Y,W,H,l) {
-  set_flag(SHORTCUT_LABEL);
-  box(FL_UP_BOX);
-  when(FL_WHEN_RELEASE_ALWAYS);
-  value_ = menu_ = 0;
-  alloc = 0;
-  selection_color(FL_SELECTION_COLOR);
-  textfont(FL_HELVETICA);
-  textsize(FL_NORMAL_SIZE);
-  textcolor(FL_FOREGROUND_COLOR);
-  down_box(FL_NO_BOX);
-}
-
-/**
-  This returns the number of Fl_Menu_Item structures that make up the
-  menu, correctly counting submenus.  This includes the "terminator"
-  item at the end.  To copy a menu array you need to copy
-  size()*sizeof(Fl_Menu_Item) bytes.  If the menu is
-  NULL this returns zero (an empty menu will return 1).
-*/
-int Fl_Menu_::size() const {
-  if (!menu_) return 0;
-  return menu_->size();
-}
-
-/**
-    Sets the menu array pointer directly.  If the old menu is private it is
-    deleted.  NULL is allowed and acts the same as a zero-length
-    menu.  If you try to modify the array (with add(), replace(), or
-    remove()) a private copy is automatically done.
-*/
-void Fl_Menu_::menu(const Fl_Menu_Item* m) {
-  clear();
-  value_ = menu_ = (Fl_Menu_Item*)m;
-}
-
-// this version is ok with new Fl_Menu_add code with fl_menu_array_owner:
-
-/** 
-  Sets the menu array pointer with a copy of m that will be automatically deleted. 
-  If userdata \p ud is not NULL, then all user data pointers are changed in the menus as well.
-  See void Fl_Menu_::menu(const Fl_Menu_Item* m). 
-*/
-void Fl_Menu_::copy(const Fl_Menu_Item* m, void* ud) {
-  int n = m->size();
-  Fl_Menu_Item* newMenu = new Fl_Menu_Item[n];
-  memcpy(newMenu, m, n*sizeof(Fl_Menu_Item));
-  menu(newMenu);
-  alloc = 1; // make destructor free array, but not strings
-  // for convenience, provide way to change all the user data pointers:
-  if (ud) for (; n--;) {
-    if (newMenu->callback_) newMenu->user_data_ = ud;
-    newMenu++;
-  }
-}
-
-Fl_Menu_::~Fl_Menu_() {
-  clear();
-}
-
-// Fl_Menu::add() uses this to indicate the owner of the dynamically-
-// expanding array.  We must not free this array:
-Fl_Menu_* fl_menu_array_owner = 0;
-
-/**
-  Same as menu(NULL), set the array pointer to null, indicating
-  a zero-length menu.
-  
-  Menus must not be cleared during a callback to the same menu.
-*/
-void Fl_Menu_::clear() {
-  if (alloc) {
-    if (alloc>1) for (int i = size(); i--;)
-      if (menu_[i].text) free((void*)menu_[i].text);
-    if (this == fl_menu_array_owner)
-      fl_menu_array_owner = 0;
-    else
-      delete[] menu_;
-    menu_ = 0;
-    value_ = 0;
-    alloc = 0;
-  }
-}
-
-/**
- Clears the specified submenu pointed to by \p index of all menu items.
-
- This method is useful for clearing a submenu so that it can be
- re-populated with new items. Example: a "File/Recent Files/..." submenu
- that shows the last few files that have been opened.
-
- The specified \p index must point to a submenu.
- 
- The submenu is cleared with remove().
- If the menu array was directly set with menu(x), then copy() 
- is done to make a private array.
-
- \warning Since this method can change the internal menu array, any menu
- item pointers or indecies the application may have cached can become
- stale, and should be recalculated/refreshed.
-
- \b Example:
- \code
-   int index = menubar->find_index("File/Recent");    // get index of "File/Recent" submenu
-   if ( index != -1 ) menubar->clear_submenu(index);  // clear the submenu
-   menubar->add("File/Recent/Aaa");
-   menubar->add("File/Recent/Bbb");
-   [..]
- \endcode
-
- \param index The index of the submenu to be cleared
- \returns 0 on success, -1 if the index is out of range or not a submenu
- \see remove(int)
- */
-int Fl_Menu_::clear_submenu(int index) {
-  if ( index < 0 || index >= size() ) return(-1);
-  if ( ! (menu_[index].flags & FL_SUBMENU) ) return(-1);
-  ++index;					// advance to first item in submenu
-  while ( index < size() ) {                    // keep remove()ing top item until end is reached
-    if ( menu_[index].text == 0 ) break;	// end of this submenu? done
-    remove(index);				// remove items/submenus
-  }
-  return(0);
-}
-
-//
-// End of "$Id: Fl_Menu_.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Menu_Bar.cxx b/common/fltk/src/Fl_Menu_Bar.cxx
deleted file mode 100644
index 8e114e3..0000000
--- a/common/fltk/src/Fl_Menu_Bar.cxx
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-// "$Id: Fl_Menu_Bar.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Menu bar widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_Bar.H>
-#include <FL/fl_draw.H>
-
-void Fl_Menu_Bar::draw() {
-  draw_box();
-  if (!menu() || !menu()->text) return;
-  const Fl_Menu_Item* m;
-  int X = x()+6;
-  for (m=menu()->first(); m->text; m = m->next()) {
-    int W = m->measure(0,this) + 16;
-    m->draw(X, y(), W, h(), this);
-    X += W;
-    if (m->flags & FL_MENU_DIVIDER) {
-      int y1 = y() + Fl::box_dy(box());
-      int y2 = y1 + h() - Fl::box_dh(box()) - 1;
-
-      // Draw a vertical divider between menus...
-      fl_color(FL_DARK3);
-      fl_yxline(X - 6, y1, y2);
-      fl_color(FL_LIGHT3);
-      fl_yxline(X - 5, y1, y2);
-    }
-  }
-}
-
-int Fl_Menu_Bar::handle(int event) {
-  const Fl_Menu_Item* v;
-  if (menu() && menu()->text) switch (event) {
-  case FL_ENTER:
-  case FL_LEAVE:
-    return 1;
-  case FL_PUSH:
-    v = 0;
-  J1:
-    v = menu()->pulldown(x(), y(), w(), h(), v, this, 0, 1);
-    picked(v);
-    return 1;
-  case FL_SHORTCUT:
-    if (visible_r()) {
-      v = menu()->find_shortcut(0, true);
-      if (v && v->submenu()) goto J1;
-    }
-    return test_shortcut() != 0;
-  }
-  return 0;
-}
-
-//
-// End of "$Id: Fl_Menu_Bar.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Menu_Button.cxx b/common/fltk/src/Fl_Menu_Button.cxx
deleted file mode 100644
index bfd2207..0000000
--- a/common/fltk/src/Fl_Menu_Button.cxx
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// "$Id: Fl_Menu_Button.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Menu button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/fl_draw.H>
-
-
-static Fl_Menu_Button	*pressed_menu_button_ = 0;
-
-void Fl_Menu_Button::draw() {
-  if (!box() || type()) return;
-  draw_box(pressed_menu_button_ == this ? fl_down(box()) : box(), color());
-  draw_label();
-  if (Fl::focus() == this) draw_focus();
-  // ** if (box() == FL_FLAT_BOX) return; // for XForms compatibility
-  int H = (labelsize()-3)&-2;
-  int X = x()+w()-H*2;
-  int Y = y()+(h()-H)/2;
-  fl_color(active_r() ? FL_DARK3 : fl_inactive(FL_DARK3));
-  fl_line(X+H/2, Y+H, X, Y, X+H, Y);
-  fl_color(active_r() ? FL_LIGHT3 : fl_inactive(FL_LIGHT3));
-  fl_line(X+H, Y, X+H/2, Y+H);
-}
-
-/**
-  Act exactly as though the user clicked the button or typed the
-  shortcut key.  The menu appears, it waits for the user to pick an item,
-  and if they pick one it sets value() and does the callback or
-  sets changed() as described above.  The menu item is returned
-  or NULL if the user dismisses the menu.
-*/
-const Fl_Menu_Item* Fl_Menu_Button::popup() {
-  const Fl_Menu_Item* m;
-  pressed_menu_button_ = this;
-  redraw();
-  Fl_Widget_Tracker mb(this);
-  if (!box() || type()) {
-    m = menu()->popup(Fl::event_x(), Fl::event_y(), label(), mvalue(), this);
-  } else {
-    m = menu()->pulldown(x(), y(), w(), h(), 0, this);
-  }
-  picked(m);
-  pressed_menu_button_ = 0;
-  if (mb.exists()) redraw();
-  return m;
-}
-
-int Fl_Menu_Button::handle(int e) {
-  if (!menu() || !menu()->text) return 0;
-  switch (e) {
-  case FL_ENTER: /* FALLTHROUGH */
-  case FL_LEAVE:
-    return (box() && !type()) ? 1 : 0;
-  case FL_PUSH:
-    if (!box()) {
-      if (Fl::event_button() != 3) return 0;
-    } else if (type()) {
-      if (!(type() & (1 << (Fl::event_button()-1)))) return 0;
-    }
-    if (Fl::visible_focus()) Fl::focus(this);
-    popup();
-    return 1;
-  case FL_KEYBOARD:
-    if (!box()) return 0;
-    if (Fl::event_key() == ' ' &&
-        !(Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META))) {
-      popup();
-      return 1;
-    } else return 0;
-  case FL_SHORTCUT:
-    if (Fl_Widget::test_shortcut()) {popup(); return 1;}
-    return test_shortcut() != 0;
-  case FL_FOCUS: /* FALLTHROUGH */
-  case FL_UNFOCUS:
-    if (box() && Fl::visible_focus()) {
-      redraw();
-      return 1;
-    }
-  default:
-    return 0;
-  }
-}
-
-/**
-  Creates a new Fl_Menu_Button widget using the given position,
-  size, and label string. The default boxtype is FL_UP_BOX.
-  <P>The constructor sets menu() to NULL.  See 
-  Fl_Menu_ for the methods to set or change the menu.
-*/
-Fl_Menu_Button::Fl_Menu_Button(int X,int Y,int W,int H,const char *l)
-: Fl_Menu_(X,Y,W,H,l) {
-  down_box(FL_NO_BOX);
-}
-
-//
-// End of "$Id: Fl_Menu_Button.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Menu_Window.cxx b/common/fltk/src/Fl_Menu_Window.cxx
deleted file mode 100644
index 956f88b..0000000
--- a/common/fltk/src/Fl_Menu_Window.cxx
+++ /dev/null
@@ -1,110 +0,0 @@
-//
-// "$Id: Fl_Menu_Window.cxx 8198 2011-01-06 10:24:58Z manolo $"
-//
-// Menu window code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This is the window type used by Fl_Menu to make the pop-ups.
-// It draws in the overlay planes if possible.
-
-// Also here is the implementation of the mouse & keyboard grab,
-// which are used so that clicks outside the program's windows
-// can be used to dismiss the menus.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Menu_Window.H>
-
-// WIN32 note: HAVE_OVERLAY is false
-#if HAVE_OVERLAY
-extern XVisualInfo *fl_find_overlay_visual();
-extern XVisualInfo *fl_overlay_visual;
-extern Colormap fl_overlay_colormap;
-extern unsigned long fl_transparent_pixel;
-static GC gc;	// the GC used by all X windows
-extern uchar fl_overlay; // changes how fl_color(x) works
-#endif
-
-#include <stdio.h>
-
-void Fl_Menu_Window::show() {
-#if HAVE_OVERLAY
-  if (!shown() && overlay() && fl_find_overlay_visual()) {
-    XInstallColormap(fl_display, fl_overlay_colormap);
-    fl_background_pixel = int(fl_transparent_pixel);
-    Fl_X::make_xid(this, fl_overlay_visual, fl_overlay_colormap);
-    fl_background_pixel = -1;
-  } else
-#endif
-    Fl_Single_Window::show();
-}
-
-void Fl_Menu_Window::flush() {
-#if HAVE_OVERLAY
-  if (!fl_overlay_visual || !overlay()) {Fl_Single_Window::flush(); return;}
-  Fl_X *myi = Fl_X::i(this);
-  fl_window = myi->xid;
-  if (!gc) {
-	  gc = XCreateGC(fl_display, myi->xid, 0, 0);
-# if defined(FLTK_USE_CAIRO)
-	  if(Fl::autolink_context()) Fl::cairo_make_current(gc); // capture gc changes automatically to update the cairo context adequately
-# endif
-  }
-  fl_gc = gc;
-  fl_overlay = 1;
-  fl_clip_region(myi->region); myi->region = 0; current_ = this;
-  draw();
-  fl_overlay = 0;
-#else
-  Fl_Single_Window::flush();
-#endif
-}
-
-/** Erases the window, does nothing if HAVE_OVERLAY is not defined config.h */
-void Fl_Menu_Window::erase() {
-#if HAVE_OVERLAY
-  if (!gc || !shown()) return;
-//XSetForeground(fl_display, gc, 0);
-//XFillRectangle(fl_display, fl_xid(this), gc, 0, 0, w(), h());
-  XClearWindow(fl_display, fl_xid(this));
-#endif
-}
-
-// Fix the colormap flashing on Maximum Impact Graphics by erasing the
-// menu before unmapping it:
-void Fl_Menu_Window::hide() {
-  erase();
-  Fl_Single_Window::hide();
-}
-
-/**  Destroys the window and all of its children.*/
-Fl_Menu_Window::~Fl_Menu_Window() {
-  hide();
-}
-
-//
-// End of "$Id: Fl_Menu_Window.cxx 8198 2011-01-06 10:24:58Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Menu_add.cxx b/common/fltk/src/Fl_Menu_add.cxx
deleted file mode 100644
index 2ce2804..0000000
--- a/common/fltk/src/Fl_Menu_add.cxx
+++ /dev/null
@@ -1,496 +0,0 @@
-//
-// "$Id: Fl_Menu_add.cxx 8110 2010-12-23 08:02:52Z manolo $"
-//
-// Menu utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Methods to alter the menu in an Fl_Menu_ widget.
-
-// These are for Forms emulation and for dynamically changing the
-// menus.  They are in this source file so they are not linked in if
-// not used, which is what will happen if the program only uses
-// constant menu tables.
-
-// Not at all guaranteed to be Forms compatible, especially with any
-// string with a % sign in it!
-
-#include <FL/Fl_Menu_.H>
-#include "flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-// If the array is this, we will double-reallocate as necessary:
-static Fl_Menu_Item* local_array = 0;
-static int local_array_alloc = 0; // number allocated
-static int local_array_size = 0; // == size(local_array)
-extern Fl_Menu_* fl_menu_array_owner; // in Fl_Menu_.cxx
-
-// For historical reasons there are matching methods that work on a
-// user-allocated array of Fl_Menu_Item.  These methods are quite
-// depreciated and should not be used.  These old methods use the
-// above pointers to detect if the array belongs to an Fl_Menu_
-// widget, and if so it reallocates as necessary.
-
-
-
-// Insert a single Fl_Menu_Item into an array of size at offset n,
-// if this is local_array it will be reallocated if needed.
-static Fl_Menu_Item* array_insert(
-  Fl_Menu_Item* array,  // array to modify
-  int size,             // size of array
-  int n,                // index of new insert position
-  const char *text,     // text of new item (copy is made)
-  int flags             // flags for new item
-) {
-  if (array == local_array && size >= local_array_alloc) {
-    local_array_alloc = 2*size;
-    Fl_Menu_Item* newarray = new Fl_Menu_Item[local_array_alloc];
-    memmove(newarray, array, size*sizeof(Fl_Menu_Item));
-    delete[] local_array;
-    local_array = array = newarray;
-  }
-  // move all the later items:
-  memmove(array+n+1, array+n, sizeof(Fl_Menu_Item)*(size-n));
-  // create the new item:
-  Fl_Menu_Item* m = array+n;
-  m->text = text ? strdup(text) : 0;
-  m->shortcut_ = 0;
-  m->callback_ = 0;
-  m->user_data_ = 0;
-  m->flags = flags;
-  m->labeltype_ = m->labelsize_ = m->labelcolor_ = 0;
-  m->labelfont_ = FL_HELVETICA; 
-  return array;
-}
-
-
-
-// Comparison that does not care about deleted '&' signs:
-static int compare(const char* a, const char* b) {
-  for (;;) {
-    int n = *a-*b;
-    if (n) {
-      if (*a == '&') a++;
-      else if (*b == '&') b++;
-      else return n;
-    } else if (*a) {
-      a++; b++;
-    } else {
-      return 0;
-    }
-  }
-}
-
-
-
-/** Adds an item.  The text is split at '/' characters to automatically
-   produce submenus (actually a totally unnecessary feature as you can
-   now add submenu titles directly by setting SUBMENU in the flags):
-*/
-int Fl_Menu_Item::add(
-  const char *mytext,
-  int sc,
-  Fl_Callback *cb,	
-  void *data,
-  int myflags
-) {
-  return(insert(-1,mytext,sc,cb,data,myflags));		// -1: append
-}
-
-
-
-/** 
- Inserts an item at position \p index.
-    
- If \p index is -1, the item is added the same way as Fl_Menu_Item::add().
-
- If 'mytext' contains any un-escaped front slashes (/), it's assumed 
- a menu pathname is being specified, and the value of \p index 
- will be ignored.
-
- In all other aspects, the behavior of insert() is the same as add().
- 
- \param index insert new items here
- \param mytext new label string, details see above
- \param sc keyboard shortcut for new item
- \param cb callback function for new item
- \param data user data for new item
- \param myflags menu flags as described in FL_Menu_Item
- \returns the index into the menu() array, where the entry was added
-*/
-int Fl_Menu_Item::insert(
-  int index,
-  const char *mytext,
-  int sc,
-  Fl_Callback *cb,	
-  void *data,
-  int myflags
-) {
-  Fl_Menu_Item *array = this;
-  Fl_Menu_Item *m = this;
-  const char *p;
-  char *q;
-  char buf[1024];
-
-  int msize = array==local_array ? local_array_size : array->size();
-  int flags1 = 0;
-  const char* item;
-
-  // split at slashes to make submenus:
-  for (;;) {
-
-    // leading slash makes us assume it is a filename:
-    if (*mytext == '/') {item = mytext; break;}
-
-    // leading underscore causes divider line:
-    if (*mytext == '_') {mytext++; flags1 = FL_MENU_DIVIDER;}
-
-    // copy to buf, changing \x to x:
-    q = buf;
-    for (p=mytext; *p && *p != '/'; *q++ = *p++) if (*p=='\\' && p[1]) p++;
-    *q = 0;
-
-    item = buf;
-    if (*p != '/') break; /* not a menu title */
-    index = -1;           /* any submenu specified overrides insert position */
-    mytext = p+1;         /* point at item title */
-
-    /* find a matching menu title: */
-    for (; m->text; m = m->next())
-      if (m->flags&FL_SUBMENU && !compare(item, m->text)) break;
-
-    if (!m->text) { /* create a new menu */
-      int n = (index==-1) ? m-array : index;
-      array = array_insert(array, msize, n, item, FL_SUBMENU|flags1);
-      msize++;
-      array = array_insert(array, msize, n+1, 0, 0);
-      msize++;
-      m = array+n;
-    }
-    m++;	/* go into the submenu */
-    flags1 = 0;
-  }
-
-  /* find a matching menu item: */
-  for (; m->text; m = m->next())
-    if (!(m->flags&FL_SUBMENU) && !compare(m->text,item)) break;
-
-  if (!m->text) {	/* add a new menu item */
-    int n = (index==-1) ? m-array : index;
-    array = array_insert(array, msize, n, item, myflags|flags1);
-    msize++;
-    if (myflags & FL_SUBMENU) { // add submenu delimiter
-      array = array_insert(array, msize, n+1, 0, 0);
-      msize++;
-    }
-    m = array+n;
-  }
-
-  /* fill it in */
-  m->shortcut_ = sc;
-  m->callback_ = cb;
-  m->user_data_ = data;
-  m->flags = myflags|flags1;
-
-  if (array == local_array) local_array_size = msize;
-  return m-array;
-}
-
-
-
-/**
-  Adds a new menu item.
-  
-  \param[in] label    The text label for the menu item.
-  \param[in] shortcut Optional keyboard shortcut that can be an int or string; (FL_CTRL+'a') or "^a". Default 0 if none.
-  \param[in] callback Optional callback invoked when user clicks the item. Default 0 if none.
-  \param[in] userdata Optional user data passed as an argument to the callback. Default 0 if none.
-  \param[in] flags    Optional flags that control the type of menu item; see below. Default is 0 for none.
-  \returns            The index into the menu() array, where the entry was added.
-  
-  \par Description
-  If the menu array was directly set with menu(x), then copy() is done 
-  to make a private array.
-  \par 
-  Since this method can change the internal menu array, any menu item
-  pointers or indecies the application may have cached can become stale,
-  and should be recalculated/refreshed.
-  \par
-  A menu item's callback must not add() items to its parent menu during the callback.
-
-  <B>Detailed Description of Parameters</B>
-  \par label
-  The menu item's label. This option is required.
-  \par
-  The characters "&", "/", "\", and "_" are treated as special characters in the label string. 
-  The "&" character specifies that the following character is an accelerator and will be underlined.
-  The "\" character is used to escape the next character in the string. 
-  Labels starting with the "_" character cause a divider to be placed after that menu item.
-  \par 
-  A label of the form "File/Quit" will create the submenu "File"
-  with a menu item called "Quit". The "/" character is ignored if it appears
-  as the first character of the label string, e.g.  "/File/Quit".
-  \par 
-  The label string is copied to new memory and can be freed.
-  The other arguments (including the shortcut) are copied into the
-  menu item unchanged.
-  \par 
-  If an item exists already with that name then it is replaced with
-  this new one.  Otherwise this new one is added to the end of the
-  correct menu or submenu.  The return value is the offset into the array
-  that the new entry was placed at.
-  
-  \par shortcut
-  The keyboard shortcut for this menu item. 
-  \par 
-  This parameter is optional, and defaults to 0 to indicate no shortcut.
-  \par
-  The shortcut can either be a raw integer value (eg. FL_CTRL+'A')
-  or a string (eg. "^c" or "^97").
-  \par
-  Raw integer shortcuts can be a combination of keyboard chars (eg. 'A')
-  and optional keyboard modifiers (see Fl::event_state(), e.g. FL_SHIFT, etc).
-  In addition, FL_COMMAND can be used to denote FL_META under Mac OS X and
-  FL_CTRL under other platforms.
-  \par
-  String shortcuts can be specified in one of two ways:
-  \par
-  \verbatim
-   [#+^]<ascii_value>    e.g. "97", "^97", "+97", "#97"
-   [#+^]<ascii_char>     e.g. "a", "^a", "+a", "#a"
-  \endverbatim
-  \par
-  ..where \<ascii_value\> is a decimal value representing an
-  ascii character (eg. 97 is the ascii code for 'a'), and the optional
-  prefixes enhance the value that follows. Multiple prefixes must
-  appear in the order below.
-  \par
-  \verbatim
-   # - Alt
-   + - Shift
-   ^ - Control
-  \endverbatim
-  \par
-  Internally, the text shortcuts are converted to integer values using
-  fl_old_shortcut(const char*).
-
-  \par callback
-  The callback to invoke when this menu item is selected. 
-  \par 
-  This parameter is optional, and defaults to 0 for no callback.
-
-  \par userdata
-  The callback's 'user data' that is passed to the callback. 
-  \par 
-  This parameter is optional, and defaults to 0.
-
-  \par flags
-  These are bit flags to define what kind of menu item this is. 
-  \par
-  This parameter is optional, and defaults to 0 to define a 'regular' menu item.
-  \par 
-  These flags can be 'OR'ed together:
-  \code
-      FL_MENU_INACTIVE     // Deactivate menu item (gray out)
-      FL_MENU_TOGGLE       // Item is a checkbox toggle (shows checkbox for on/off state)
-      FL_MENU_VALUE        // The on/off state for checkbox/radio buttons (if set, state is 'on')
-      FL_MENU_RADIO        // Item is a radio button (one checkbox of many can be on)
-      FL_MENU_INVISIBLE    // Item will not show up (shortcut will work)
-      FL_SUBMENU_POINTER   // Indicates user_data() is a pointer to another menu array
-      FL_SUBMENU           // This item is a submenu to other items
-      FL_MENU_DIVIDER      // Creates divider line below this item. Also ends a group of radio buttons.
-  \endcode
-
-  \todo Raw integer shortcut needs examples. 
-        Dependent on responses to http://fltk.org/newsgroups.php?gfltk.development+v:10086 and results of STR#2344
- */
-int Fl_Menu_::add(const char *label,int shortcut,Fl_Callback *callback,void *userdata,int flags) {
-  return(insert(-1,label,shortcut,callback,userdata,flags));	// -1: append
-}
-
-
-
-/**
-  Inserts a new menu item at the specified \p index position.
-
-  If \p index is -1, the menu item is appended; same behavior as add().
-
-  To properly insert a menu item, \p label must be the name of the item (eg. "Quit"),
-  and not a 'menu pathname' (eg. "File/Quit").  If a menu pathname is specified, 
-  the value of \p index is \em ignored, the new item's position defined by the pathname.
-  
-  For more details, see add(). Except for the \p index parameter, add()
-  has more detailed information on parameters and behavior, and is
-  functionally equivalent.
-
-  \param[in] index    The menu array's index position where the new item
-                      is inserted. If -1, behavior is the same as add().
-  \param[in] label    The text label for the menu item. If the label 
-                      is a menu pathname, \p index is ignored, and the pathname
-		      indicates the position of the new item.
-  \param[in] shortcut Optional keyboard shortcut. Can be an int (FL_CTRL+'a')
-                      or a string ("^a"). Default is 0.
-  \param[in] callback Optional callback invoked when user clicks the item.
-                      Default 0 if none.
-  \param[in] userdata Optional user data passed as an argument to the callback.
-                      Default 0 if none.
-  \param[in] flags    Optional flags that control the type of menu item; 
-                      see add() for more info. Default is 0 for none.
-  \returns            The index into the menu() array, where the entry was added.
-
-  \see                add()
-
- */
-int Fl_Menu_::insert(
-  int index,
-  const char *label,
-  int shortcut,
-  Fl_Callback *callback,
-  void *userdata,
-  int flags
-) {
-  // make this widget own the local array:
-  if (this != fl_menu_array_owner) {
-    if (fl_menu_array_owner) {
-      Fl_Menu_* o = fl_menu_array_owner;
-      // the previous owner get's its own correctly-sized array:
-      int value_offset = o->value_-local_array;
-      int n = local_array_size;
-      Fl_Menu_Item* newMenu = o->menu_ = new Fl_Menu_Item[n];
-      memcpy(newMenu, local_array, n*sizeof(Fl_Menu_Item));
-      if (o->value_) o->value_ = newMenu+value_offset;
-    }
-    if (menu_) {
-      // this already has a menu array, use it as the local one:
-      delete[] local_array;
-      if (!alloc) copy(menu_); // duplicate a user-provided static array
-      // add to the menu's current array:
-      local_array_alloc = local_array_size = size();
-      local_array = menu_;
-    } else {
-      // start with a blank array:
-      alloc = 2; // indicates that the strings can be freed
-      if (local_array) {
-	menu_ = local_array;
-      } else {
-	local_array_alloc = 15;
-	local_array = menu_ = new Fl_Menu_Item[local_array_alloc];
-        memset(local_array, 0, sizeof(Fl_Menu_Item) * local_array_alloc);
-      }
-      memset(menu_, 0, sizeof(Fl_Menu_Item));
-      local_array_size = 1;
-    }
-    fl_menu_array_owner = this;
-  }
-  int r = menu_->insert(index,label,shortcut,callback,userdata,flags);
-  // if it rellocated array we must fix the pointer:
-  int value_offset = value_-menu_;
-  menu_ = local_array; // in case it reallocated it
-  if (value_) value_ = menu_+value_offset;
-  return r;
-}
-
-
-
-/**
-  This is a Forms (and SGI GL library) compatible add function, it
-  adds many menu items, with '|' separating the menu items, and tab
-  separating the menu item names from an optional shortcut string.
-
-  The passed string is split at any '|' characters and then
-  add(s,0,0,0,0) is done with each section. This is
-  often useful if you are just using the value, and is compatible
-  with Forms and other GL programs. The section strings use the
-  same special characters as described for the long version of add().
-
-  No items must be added to a menu during a callback to the same menu.
- 
-  \param str string containing multiple menu labels as described above
-  \returns the index into the menu() array, where the entry was added
-*/
-int Fl_Menu_::add(const char *str) {
-  char buf[1024];
-  int r = 0;
-  while (*str) {
-    int sc = 0;
-    char *c;
-    for (c = buf; c < (buf + sizeof(buf) - 2) && *str && *str != '|'; str++) {
-      if (*str == '\t') {*c++ = 0; sc = fl_old_shortcut(str);}
-      else *c++ = *str;
-    }
-    *c = 0;
-    r = add(buf, sc, 0, 0, 0);
-    if (*str) str++;
-  }
-  return r;
-}
-
-
-
-/**
-  Changes the text of item \p i.  This is the only way to get
-  slash into an add()'ed menu item.  If the menu array was directly set
-  with menu(x) then copy() is done to make a private array.
- 
-  \param i index into menu array
-  \param str new label for menu item at index i
-*/
-void Fl_Menu_::replace(int i, const char *str) {
-  if (i<0 || i>=size()) return;
-  if (!alloc) copy(menu_);
-  if (alloc > 1) {
-    free((void *)menu_[i].text);
-    str = strdup(str);
-  }
-  menu_[i].text = str;
-}
-
-
-
-/**
-  Deletes item \p i from the menu.  If the menu array was directly
-  set with menu(x) then copy() is done to make a private array.
-  
-  No items must be removed from a menu during a callback to the same menu.
- 
-  \param i index into menu array
-*/
-void Fl_Menu_::remove(int i) {
-  int n = size();
-  if (i<0 || i>=n) return;
-  if (!alloc) copy(menu_);
-  // find the next item, skipping submenus:
-  Fl_Menu_Item* item = menu_+i;
-  const Fl_Menu_Item* next_item = item->next();
-  // delete the text only if all items were created with add():
-  if (alloc > 1) {
-    for (Fl_Menu_Item* m = item; m < next_item; m++)
-      if (m->text) free((void*)(m->text));
-  }
-  // MRS: "n" is the menu size(), which includes the trailing NULL entry...
-  memmove(item, next_item, (menu_+n-next_item)*sizeof(Fl_Menu_Item));
-}
-
-//
-// End of "$Id: Fl_Menu_add.cxx 8110 2010-12-23 08:02:52Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Menu_global.cxx b/common/fltk/src/Fl_Menu_global.cxx
deleted file mode 100644
index c5d5a76..0000000
--- a/common/fltk/src/Fl_Menu_global.cxx
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// "$Id: Fl_Menu_global.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Global menu shortcut code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Make all the shortcuts in this menu global.
-// Currently only one menu at a time and you cannot destruct the menu,
-// is this sufficient?
-
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_.H>
-
-static Fl_Menu_* the_widget;
-
-static int handler(int e) {
-  if (e != FL_SHORTCUT || Fl::modal()) return 0;
-  Fl::first_window(the_widget->window());
-  return the_widget->handle(e);
-}
-
-/**
-  Make the shortcuts for this menu work no matter what window has the
-  focus when you type it.  This is done by using 
-  Fl::add_handler().  This Fl_Menu_ widget does not
-  have to be visible (ie the window it is in can be hidden, or it does
-  not have to be put in a window at all).
-  <P>Currently there can be only one global()menu.  Setting a new
-  one will replace the old one.  There is no way to remove the 
-  global() setting (so don't destroy the widget!)
-*/
-void Fl_Menu_::global() {
-  if (!the_widget) Fl::add_handler(handler);
-  the_widget = this;
-}
-
-//
-// End of "$Id: Fl_Menu_global.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Multi_Label.cxx b/common/fltk/src/Fl_Multi_Label.cxx
deleted file mode 100644
index df117db..0000000
--- a/common/fltk/src/Fl_Multi_Label.cxx
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// "$Id: Fl_Multi_Label.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Multi-label widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Allows two labels to be used on a widget (by having one of them
-// be one of these it allows an infinte number!)
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Multi_Label.H>
-
-static void multi_labeltype(
-    const Fl_Label* o, int x, int y, int w, int h, Fl_Align a)
-{
-  Fl_Multi_Label* b = (Fl_Multi_Label*)(o->value);
-  Fl_Label local = *o;
-  local.value = b->labela;
-  local.type = b->typea;
-  int W = w; int H = h; local.measure(W, H);
-  local.draw(x,y,w,h,a);
-  if (a & FL_ALIGN_BOTTOM) h -= H;
-  else if (a & FL_ALIGN_TOP) {y += H; h -= H;}
-  else if (a & FL_ALIGN_RIGHT) w -= W;
-  else if (a & FL_ALIGN_LEFT) {x += W; w -= W;}
-  else {int d = (h+H)/2; y += d; h -= d;}
-  local.value = b->labelb;
-  local.type = b->typeb;
-  local.draw(x,y,w,h,a);
-}
-
-// measurement is only correct for left-to-right appending...
-static void multi_measure(const Fl_Label* o, int& w, int& h) {
-  Fl_Multi_Label* b = (Fl_Multi_Label*)(o->value);
-  Fl_Label local = *o;
-  local.value = b->labela;
-  local.type = b->typea;
-  local.measure(w,h);
-  local.value = b->labelb;
-  local.type = b->typeb;
-  int W = 0; int H = 0; local.measure(W,H);
-  w += W; if (H>h) h = H;
-}
-
-void Fl_Multi_Label::label(Fl_Widget* o) {
-  Fl::set_labeltype(_FL_MULTI_LABEL, multi_labeltype, multi_measure);
-  o->label(_FL_MULTI_LABEL, (const char*)this);
-}
-
-void Fl_Multi_Label::label(Fl_Menu_Item* o) {
-  Fl::set_labeltype(_FL_MULTI_LABEL, multi_labeltype, multi_measure);
-  o->label(_FL_MULTI_LABEL, (const char*)this);
-}
-
-//
-// End of "$Id: Fl_Multi_Label.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Native_File_Chooser.cxx b/common/fltk/src/Fl_Native_File_Chooser.cxx
deleted file mode 100644
index 1b3024f..0000000
--- a/common/fltk/src/Fl_Native_File_Chooser.cxx
+++ /dev/null
@@ -1,47 +0,0 @@
-// "$Id: Fl_Native_File_Chooser.cxx 8378 2011-02-05 22:35:51Z matt $"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Use Windows' chooser
-#ifdef WIN32
-#include "Fl_Native_File_Chooser_WIN32.cxx"
-#endif
-
-// Use Apple's chooser
-#ifdef __APPLE__
-#include <FL/Fl_Native_File_Chooser.H>
-#endif
-
-// All else falls back to FLTK's own chooser
-#if ! defined(__APPLE__) && !defined(WIN32)
-#include "Fl_Native_File_Chooser_FLTK.cxx"
-#endif
-
-const char *Fl_Native_File_Chooser::file_exists_message = "File exists. Are you sure you want to overwrite?";
-
-//
-// End of "$Id: Fl_Native_File_Chooser.cxx 8378 2011-02-05 22:35:51Z matt $".
-//
diff --git a/common/fltk/src/Fl_Native_File_Chooser_FLTK.cxx b/common/fltk/src/Fl_Native_File_Chooser_FLTK.cxx
deleted file mode 100644
index a11c1f9..0000000
--- a/common/fltk/src/Fl_Native_File_Chooser_FLTK.cxx
+++ /dev/null
@@ -1,462 +0,0 @@
-// "$Id: Fl_Native_File_Chooser_FLTK.cxx 8282 2011-01-16 18:26:51Z manolo $"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 Greg Ercolano.
-// API changes + filter improvements by Nathan Vander Wilt 2005
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Native_File_Chooser.H>
-#include <FL/Fl_File_Icon.H>
-#define FLTK_CHOOSER_SINGLE    Fl_File_Chooser::SINGLE
-#define FLTK_CHOOSER_DIRECTORY Fl_File_Chooser::DIRECTORY
-#define FLTK_CHOOSER_MULTI     Fl_File_Chooser::MULTI
-#define FLTK_CHOOSER_CREATE    Fl_File_Chooser::CREATE
-
-#include "Fl_Native_File_Chooser_common.cxx"
-#include <sys/stat.h>
-#include <string.h>
-
-/**
-  The constructor. Internally allocates the native widgets.
-  Optional \p val presets the type of browser this will be, 
-  which can also be changed with type().
-*/
-Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) {
-  //// CANT USE THIS -- MESSES UP LINKING/CREATES DEPENDENCY ON fltk_images.
-  //// Have app call this from main() instead.
-  ////
-  ////  static int init = 0;		// 'first time' initialize flag
-  ////  if ( init == 0 ) {
-  ////    // Initialize when instanced for first time
-  ////    Fl_File_Icon::load_system_icons();
-  ////    init = 1;
-  ////  }
-  _btype       = val;
-  _options     = NO_OPTIONS;
-  _filter      = NULL;
-  _filtvalue   = 0;
-  _parsedfilt  = NULL;
-  _preset_file = NULL;
-  _prevvalue   = NULL;
-  _directory   = NULL;
-  _errmsg      = NULL;
-  _file_chooser = new Fl_File_Chooser(NULL, NULL, 0, NULL);
-  type(val);			// do this after _file_chooser created
-  _nfilters    = 0;
-} 
-
-/**
-  Destructor. 
-  Deallocates any resources allocated to this widget.
-*/
-Fl_Native_File_Chooser::~Fl_Native_File_Chooser() {
-  delete _file_chooser;
-  _filter      = strfree(_filter);
-  _parsedfilt  = strfree(_parsedfilt);
-  _preset_file = strfree(_preset_file);
-  _prevvalue   = strfree(_prevvalue);
-  _directory   = strfree(_directory);
-  _errmsg      = strfree(_errmsg);
-}
-
-// PRIVATE: SET ERROR MESSAGE
-void Fl_Native_File_Chooser::errmsg(const char *msg) {
-  _errmsg = strfree(_errmsg);
-  _errmsg = strnew(msg);
-}
-
-// PRIVATE: translate Native types to Fl_File_Chooser types
-int Fl_Native_File_Chooser::type_fl_file(int val) {
-  switch (val) {
-    case BROWSE_FILE:
-      return(FLTK_CHOOSER_SINGLE);
-    case BROWSE_DIRECTORY:
-      return(FLTK_CHOOSER_SINGLE | FLTK_CHOOSER_DIRECTORY);
-    case BROWSE_MULTI_FILE:
-      return(FLTK_CHOOSER_MULTI);
-    case BROWSE_MULTI_DIRECTORY:
-      return(FLTK_CHOOSER_DIRECTORY | FLTK_CHOOSER_MULTI);
-    case BROWSE_SAVE_FILE:
-      return(FLTK_CHOOSER_SINGLE | FLTK_CHOOSER_CREATE);
-    case BROWSE_SAVE_DIRECTORY:
-      return(FLTK_CHOOSER_DIRECTORY | FLTK_CHOOSER_MULTI | FLTK_CHOOSER_CREATE);
-    default:
-      return(FLTK_CHOOSER_SINGLE);
-  }
-}
-
-/**
-  Sets the current Fl_Native_File_Chooser::Type of browser.
- */
-void Fl_Native_File_Chooser::type(int val) {
-  _btype = val;
-  _file_chooser->type(type_fl_file(val));
-}
-
-/**
-  Gets the current Fl_Native_File_Chooser::Type of browser.
- */
-int Fl_Native_File_Chooser::type() const {
-  return(_btype);
-}
-
-/**
-  Sets the platform specific chooser options to \p val.
-  \p val is expected to be one or more Fl_Native_File_Chooser::Option flags ORed together.
-  Some platforms have OS-specific functions that can be enabled/disabled via this method.
-  <P>
-  \code
-  Flag              Description                                       Win       Mac       Other
-  --------------    -----------------------------------------------   -------   -------   -------
-  NEW_FOLDER        Shows the 'New Folder' button.                    Ignored   Used      Used
-  PREVIEW           Enables the 'Preview' mode by default.            Ignored   Ignored   Used
-  SAVEAS_CONFIRM    Confirm dialog if BROWSE_SAVE_FILE file exists.   Ignored   Used      Used
-  \endcode
-*/
-void Fl_Native_File_Chooser::options(int val) {
-  _options = val;
-}
-
-/**
-  Gets the platform specific Fl_Native_File_Chooser::Option flags.
-*/
-int Fl_Native_File_Chooser::options() const {
-  return(_options);
-}
-
-/**
-  Post the chooser's dialog. Blocks until dialog has been completed or cancelled.
-  \returns
-     - 0  -- user picked a file
-     - 1  -- user cancelled
-     - -1 -- failed; errmsg() has reason
-*/
-int Fl_Native_File_Chooser::show() {
-  // FILTER
-  if ( _parsedfilt ) {
-    _file_chooser->filter(_parsedfilt);
-  }
-
-  // FILTER VALUE
-  //     Set this /after/ setting the filter
-  //
-  _file_chooser->filter_value(_filtvalue);
-
-  // DIRECTORY
-  if ( _directory && _directory[0] ) {
-    _file_chooser->directory(_directory);
-  } else {
-    _file_chooser->directory(_prevvalue);
-  }
-
-  // PRESET FILE
-  if ( _preset_file ) {
-    _file_chooser->value(_preset_file);
-  }
-
-  // OPTIONS: PREVIEW
-  _file_chooser->preview( (options() & PREVIEW) ? 1 : 0);
-
-  // OPTIONS: NEW FOLDER
-  if ( options() & NEW_FOLDER )
-    _file_chooser->type(_file_chooser->type() | FLTK_CHOOSER_CREATE);	// on
-
-  // SHOW
-  _file_chooser->show();
-
-  // BLOCK WHILE BROWSER SHOWN
-  while ( _file_chooser->shown() ) {
-    Fl::wait();
-  }
-
-  if ( _file_chooser->value() && _file_chooser->value()[0] ) {
-    _prevvalue = strfree(_prevvalue);
-    _prevvalue = strnew(_file_chooser->value());
-    _filtvalue = _file_chooser->filter_value();	// update filter value
-
-    // HANDLE SHOWING 'SaveAs' CONFIRM
-    if ( options() & SAVEAS_CONFIRM && type() == BROWSE_SAVE_FILE ) {
-      struct stat buf;
-      if ( stat(_file_chooser->value(), &buf) != -1 ) {
-	if ( buf.st_mode & S_IFREG ) {		// Regular file + exists?
-	  if ( exist_dialog() == 0 ) {
-	    return(1);
-	  }
-	}
-      }
-    }
-  }
-
-  if ( _file_chooser->count() ) return(0);
-  else return(1);
-}
-
-/**
-  Returns a system dependent error message for the last method that failed. 
-  This message should at least be flagged to the user in a dialog box, or to some kind of error log. 
-  Contents will be valid only for methods that document errmsg() will have info on failures.
- */
-const char *Fl_Native_File_Chooser::errmsg() const {
-  return(_errmsg ? _errmsg : "No error");
-}
-
-/**
-  Return the filename the user choose.
-  Use this if only expecting a single filename.
-  If more than one filename is expected, use filename(int) instead.
-  Return value may be "" if no filename was chosen (eg. user cancelled).
- */
-const char* Fl_Native_File_Chooser::filename() const {
-  if ( _file_chooser->count() > 0 ) return(_file_chooser->value());
-  return("");
-}
-
-/**
-  Return one of the filenames the user selected.
-  Use count() to determine how many filenames the user selected.
-  <P>
-  \b Example:
-  \code
-  if ( fnfc->show() == 0 ) {
-    // Print all filenames user selected
-    for (int n=0; n<fnfc->count(); n++ ) {
-      printf("%d) '%s'\n", n, fnfc->filename(n));
-    }
-  }
-  \endcode
- */
-const char* Fl_Native_File_Chooser::filename(int i) const {
-  if ( i < _file_chooser->count() )
-    return(_file_chooser->value(i+1));	// convert fltk 1 based to our 0 based
-  return("");
-}
-
-/**
-  Set the title of the file chooser's dialog window.
-  Can be NULL if no title desired.
-  The default title varies according to the platform, so you are advised to set the title explicitly.
-*/
-void Fl_Native_File_Chooser::title(const char *val) {
-  _file_chooser->label(val);
-}
-
-/**
-  Get the title of the file chooser's dialog window.
-  Return value may be NULL if no title was set.
-*/
-const char *Fl_Native_File_Chooser::title() const {
-  return(_file_chooser->label());
-}
-
-/**
-  Sets the filename filters used for browsing. 
-  The default is NULL, which browses all files.
-  <P>
-  The filter string can be any of:
-  <P>
-    - A single wildcard (eg. "*.txt")
-    - Multiple wildcards (eg. "*.{cxx,h,H}")
-    - A descriptive name followed by a "\t" and a wildcard (eg. "Text Files\t*.txt")
-    - A list of separate wildcards with a "\n" between each (eg. "*.{cxx,H}\n*.txt")
-    - A list of descriptive names and wildcards (eg. "C++ Files\t*.{cxx,H}\nTxt Files\t*.txt")
-  <P>
-  The format of each filter is a wildcard, or an optional user description 
-  followed by '\\t' and the wildcard.
-  <P>
-  On most platforms, each filter is available to the user via a pulldown menu 
-  in the file chooser. The 'All Files' option is always available to the user. 
-*/
-void Fl_Native_File_Chooser::filter(const char *val) {
-  _filter = strfree(_filter);
-  _filter = strnew(val);
-  parse_filter();
-}
-
-/**
-  Returns the filter string last set.
-  Can be NULL if no filter was set.
- */
-const char *Fl_Native_File_Chooser::filter() const {
-  return(_filter);
-}
-
-/**
-Gets how many filters were available, not including "All Files" 
-*/
-int Fl_Native_File_Chooser::filters() const {
-  return(_nfilters);
-}
-
-/**
-  Sets which filter will be initially selected.
-
-  The first filter is indexed as 0. 
-  If filter_value()==filters(), then "All Files" was chosen. 
-  If filter_value() > filters(), then a custom filter was set.
- */
-void Fl_Native_File_Chooser::filter_value(int val) {
-  _filtvalue = val;
-}
-
-/**
-  Returns which filter value was last selected by the user.
-  This is only valid if the chooser returns success.
- */
-int Fl_Native_File_Chooser::filter_value() const {
-  return(_filtvalue);
-}
-
-/**
-  Returns the number of filenames (or directory names) the user selected.
-  <P>
-  \b Example:
-  \code
-  if ( fnfc->show() == 0 ) {
-    // Print all filenames user selected
-    for (int n=0; n<fnfc->count(); n++ ) {
-      printf("%d) '%s'\n", n, fnfc->filename(n));
-    }
-  }
-  \endcode
-*/
-int Fl_Native_File_Chooser::count() const {
-  return(_file_chooser->count());
-}
-
-/**
-  Preset the directory the browser will show when opened.
-  If \p val is NULL, or no directory is specified, the chooser will attempt
-  to use the last non-cancelled folder.
-*/
-void Fl_Native_File_Chooser::directory(const char *val) {
-  _directory = strfree(_directory);
-  _directory = strnew(val);
-}
-
-/**
-  Returns the current preset directory() value.
-*/
-const char *Fl_Native_File_Chooser::directory() const {
-  return(_directory);
-}
-
-// PRIVATE: Convert our filter format to fltk's chooser format
-//     FROM                                     TO (FLTK)
-//     -------------------------                --------------------------
-//     "*.cxx"                                  "*.cxx Files(*.cxx)"
-//     "C Files\t*.{cxx,h}"                     "C Files(*.{cxx,h})"
-//     "C Files\t*.{cxx,h}\nText Files\t*.txt"  "C Files(*.{cxx,h})\tText Files(*.txt)"
-//
-//     Returns a modified version of the filter that the caller is responsible
-//     for freeing with strfree().
-//
-void Fl_Native_File_Chooser::parse_filter() {
-  _parsedfilt = strfree(_parsedfilt);	// clear previous parsed filter (if any)
-  _nfilters = 0;
-  char *in = _filter;
-  if ( !in ) return;
-
-  int has_name = strchr(in, '\t') ? 1 : 0;
-
-  char mode = has_name ? 'n' : 'w';	// parse mode: n=title, w=wildcard
-  char wildcard[1024] = "";		// parsed wildcard
-  char name[1024] = "";
-
-  // Parse filter user specified
-  for ( ; 1; in++ ) {
-    /*** DEBUG
-    printf("WORKING ON '%c': mode=<%c> name=<%s> wildcard=<%s>\n",
-			*in, mode,     name,     wildcard);
-    ***/
-
-    switch (*in) {
-      // FINISHED PARSING NAME?
-      case '\t':
-        if ( mode != 'n' ) goto regchar;
-        mode = 'w';
-        break; 
-      // ESCAPE NEXT CHAR
-      case '\\':
-	++in;
-	goto regchar; 
-      // FINISHED PARSING ONE OF POSSIBLY SEVERAL FILTERS?
-      case '\r':
-      case '\n':
-      case '\0':
-	// APPEND NEW FILTER TO LIST
-	if ( wildcard[0] ) {
-	  // OUT: "name(wild)\tname(wild)"
-	  char comp[2048];
-	  sprintf(comp, "%s%.511s(%.511s)", ((_parsedfilt)?"\t":""),
-					    name, wildcard);
-	  _parsedfilt = strapp(_parsedfilt, comp);
-	  _nfilters++;
-	  //DEBUG printf("DEBUG: PARSED FILT NOW <%s>\n", _parsedfilt);
-	}
-	// RESET
-	wildcard[0] = name[0] = '\0';
-	mode = strchr(in, '\t') ? 'n' : 'w';
-	// DONE?
-	if ( *in == '\0' ) return;	// done
-	else continue;			// not done yet, more filters
-
-      // Parse all other chars
-      default:				// handle all non-special chars
-      regchar:				// handle regular char
-	switch ( mode ) {
-	  case 'n': chrcat(name, *in);     continue;
-	  case 'w': chrcat(wildcard, *in); continue;
-	}
-	break;
-    }
-  }
-  //NOTREACHED
-}
-
-/**
-  Sets the default filename for the chooser.
-  Use directory() to set the default directory.
-  Mainly used to preset the filename for save dialogs, 
-  and on most platforms can be used for opening files as well. 
- */
-void Fl_Native_File_Chooser::preset_file(const char* val) {
-  _preset_file = strfree(_preset_file);
-  _preset_file = strnew(val);
-}
-
-/**
-  Get the preset filename.
-  */
-const char* Fl_Native_File_Chooser::preset_file() const {
-  return(_preset_file);
-}
-
-
-int Fl_Native_File_Chooser::exist_dialog() {
-  return(fl_choice("%s", fl_cancel, fl_ok, NULL, file_exists_message));
-}
-
-//
-// End of "$Id: Fl_Native_File_Chooser_FLTK.cxx 8282 2011-01-16 18:26:51Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Native_File_Chooser_MAC.mm b/common/fltk/src/Fl_Native_File_Chooser_MAC.mm
deleted file mode 100644
index c17b4a0..0000000
--- a/common/fltk/src/Fl_Native_File_Chooser_MAC.mm
+++ /dev/null
@@ -1,632 +0,0 @@
-// "$Id: Fl_Native_File_Chooser_MAC.mm 8784 2011-06-06 12:11:04Z manolo $"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-// TODO:
-//	o When doing 'open file', only dir is preset, not filename.
-//        Possibly 'preset_file' could be used to select the filename.
-//
-
-#ifdef __APPLE__
-
-#include "Fl_Native_File_Chooser_common.cxx"		// strnew/strfree/strapp/chrcat
-#include <libgen.h>		// dirname(3)
-#include <sys/types.h>		// stat(2)
-#include <sys/stat.h>		// stat(2)
-
-
-#include <FL/Fl.H>
-#include <FL/Fl_Native_File_Chooser.H>
-#include <FL/Fl_File_Chooser.H>
-#include <FL/filename.H>
-
-// FREE PATHNAMES ARRAY, IF IT HAS ANY CONTENTS
-void Fl_Native_File_Chooser::clear_pathnames() {
-  if ( _pathnames ) {
-    while ( --_tpathnames >= 0 ) {
-      _pathnames[_tpathnames] = strfree(_pathnames[_tpathnames]);
-    }
-    delete [] _pathnames;
-    _pathnames = NULL;
-  }
-  _tpathnames = 0;
-}
-
-// SET A SINGLE PATHNAME
-void Fl_Native_File_Chooser::set_single_pathname(const char *s) {
-  clear_pathnames();
-  _pathnames = new char*[1];
-  _pathnames[0] = strnew(s);
-  _tpathnames = 1;
-}
-
-// CONSTRUCTOR
-Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) {
-  _btype          = val;
-  _panel = NULL;
-  _options        = NO_OPTIONS;
-  _pathnames      = NULL;
-  _tpathnames     = 0;
-  _title          = NULL;
-  _filter         = NULL;
-  _filt_names     = NULL;
-  memset(_filt_patt, 0, sizeof(char*) * MAXFILTERS);
-  _filt_total     = 0;
-  _filt_value     = 0;
-  _directory      = NULL;
-  _preset_file    = NULL;
-  _errmsg         = NULL;
-}
-
-// DESTRUCTOR
-Fl_Native_File_Chooser::~Fl_Native_File_Chooser() {
-  // _opts		// nothing to manage
-  // _options		// nothing to manage
-  // _keepstate		// nothing to manage
-  // _tempitem		// nothing to manage
-  clear_pathnames();
-  _directory   = strfree(_directory);
-  _title       = strfree(_title);
-  _preset_file = strfree(_preset_file);
-  _filter      = strfree(_filter);
-  //_filt_names		// managed by clear_filters()
-  //_filt_patt[i]	// managed by clear_filters()
-  //_filt_total		// managed by clear_filters()
-  clear_filters();
-  //_filt_value		// nothing to manage
-  _errmsg = strfree(_errmsg);
-}
-
-// GET TYPE OF BROWSER
-int Fl_Native_File_Chooser::type() const {
-  return(_btype);
-}
-
-// SET OPTIONS
-void Fl_Native_File_Chooser::options(int val) {
-  _options = val;
-}
-
-// GET OPTIONS
-int Fl_Native_File_Chooser::options() const {
-  return(_options);
-}
-
-// SHOW THE BROWSER WINDOW
-//     Returns:
-//         0 - user picked a file
-//         1 - user cancelled
-//        -1 - failed; errmsg() has reason
-//
-int Fl_Native_File_Chooser::show() {
-
-  // Make sure fltk interface updates before posting our dialog
-  Fl::flush();
-  
-  // POST BROWSER
-  int err = post();
-
-  _filt_total = 0;
-
-  return(err);
-}
-
-// SET ERROR MESSAGE
-//     Internal use only.
-//
-void Fl_Native_File_Chooser::errmsg(const char *msg) {
-  _errmsg = strfree(_errmsg);
-  _errmsg = strnew(msg);
-}
-
-// RETURN ERROR MESSAGE
-const char *Fl_Native_File_Chooser::errmsg() const {
-  return(_errmsg ? _errmsg : "No error");
-}
-
-// GET FILENAME
-const char* Fl_Native_File_Chooser::filename() const {
-  if ( _pathnames && _tpathnames > 0 ) return(_pathnames[0]);
-  return("");
-}
-
-// GET FILENAME FROM LIST OF FILENAMES
-const char* Fl_Native_File_Chooser::filename(int i) const {
-  if ( _pathnames && i < _tpathnames ) return(_pathnames[i]);
-  return("");
-}
-
-// GET TOTAL FILENAMES CHOSEN
-int Fl_Native_File_Chooser::count() const {
-  return(_tpathnames);
-}
-
-// PRESET PATHNAME
-//     Value can be NULL for none.
-//
-void Fl_Native_File_Chooser::directory(const char *val) {
-  _directory = strfree(_directory);
-  _directory = strnew(val);
-}
-
-// GET PRESET PATHNAME
-//     Returned value can be NULL if none set.
-//
-const char* Fl_Native_File_Chooser::directory() const {
-  return(_directory);
-}
-
-// SET TITLE
-//     Value can be NULL if no title desired.
-//
-void Fl_Native_File_Chooser::title(const char *val) {
-  _title = strfree(_title);
-  _title = strnew(val);
-}
-
-// GET TITLE
-//     Returned value can be NULL if none set.
-//
-const char *Fl_Native_File_Chooser::title() const {
-  return(_title);
-}
-
-// SET FILTER
-//     Can be NULL if no filter needed
-//
-void Fl_Native_File_Chooser::filter(const char *val) {
-  _filter = strfree(_filter);
-  _filter = strnew(val);
-
-  // Parse filter user specified
-  //     IN: _filter = "C Files\t*.{cxx,h}\nText Files\t*.txt"
-  //    OUT: _filt_names   = "C Files\tText Files"
-  //         _filt_patt[0] = "*.{cxx,h}"
-  //         _filt_patt[1] = "*.txt"
-  //         _filt_total   = 2
-  //
-  parse_filter(_filter);
-}
-
-// GET FILTER
-//     Returned value can be NULL if none set.
-//
-const char *Fl_Native_File_Chooser::filter() const {
-  return(_filter);
-}
-
-// CLEAR ALL FILTERS
-//    Internal use only.
-//
-void Fl_Native_File_Chooser::clear_filters() {
-  _filt_names = strfree(_filt_names);
-  for (int i=0; i<_filt_total; i++) {
-    _filt_patt[i] = strfree(_filt_patt[i]);
-  }
-  _filt_total = 0;
-}
-
-// PARSE USER'S FILTER SPEC
-//    Parses user specified filter ('in'),
-//    breaks out into _filt_patt[], _filt_names, and _filt_total.
-//
-//    Handles:
-//    IN:                                   OUT:_filt_names    OUT: _filt_patt
-//    ------------------------------------  ------------------ ---------------
-//    "*.{ma,mb}"                           "*.{ma,mb} Files"  "*.{ma,mb}"
-//    "*.[abc]"                             "*.[abc] Files"    "*.[abc]"
-//    "*.txt"                               "*.txt Files"      "*.c"
-//    "C Files\t*.[ch]"                     "C Files"          "*.[ch]"
-//    "C Files\t*.[ch]\nText Files\t*.cxx"  "C Files"          "*.[ch]"
-//
-//    Parsing Mode:
-//         IN:"C Files\t*.{cxx,h}"
-//             |||||||  |||||||||
-//       mode: nnnnnnn  wwwwwwwww
-//             \_____/  \_______/
-//              Name     Wildcard
-//
-void Fl_Native_File_Chooser::parse_filter(const char *in) {
-  clear_filters();
-  if ( ! in ) return;
-  int has_name = strchr(in, '\t') ? 1 : 0;
-
-  char mode = has_name ? 'n' : 'w';	// parse mode: n=title, w=wildcard
-  char wildcard[1024] = "";		// parsed wildcard
-  char name[1024] = "";
-
-  // Parse filter user specified
-  for ( ; 1; in++ ) {
-
-    //// DEBUG
-    //// printf("WORKING ON '%c': mode=<%c> name=<%s> wildcard=<%s>\n",
-    ////                    *in,  mode,     name,     wildcard);
-    
-    switch (*in) {
-      // FINISHED PARSING NAME?
-      case '\t':
-	if ( mode != 'n' ) goto regchar;
-	mode = 'w';
-	break;
-
-      // ESCAPE NEXT CHAR
-      case '\\':
-	++in;
-	goto regchar;
-
-      // FINISHED PARSING ONE OF POSSIBLY SEVERAL FILTERS?
-      case '\r':
-      case '\n':
-      case '\0':
-	// TITLE
-	//     If user didn't specify a name, make one
-	//
-	if ( name[0] == '\0' ) {
-	  sprintf(name, "%.*s Files", (int)sizeof(name)-10, wildcard);
-	}
-	// APPEND NEW FILTER TO LIST
-	if ( wildcard[0] ) {
-	  // Add to filtername list
-	  //     Tab delimit if more than one. We later break
-	  //     tab delimited string into CFArray with 
-	  //     CFStringCreateArrayBySeparatingStrings()
-	  //
-	  if ( _filt_total ) {
-	      _filt_names = strapp(_filt_names, "\t");
-	  }
-	  _filt_names = strapp(_filt_names, name);
-
-	  // Add filter to the pattern array
-	  _filt_patt[_filt_total++] = strnew(wildcard);
-	}
-	// RESET
-	wildcard[0] = name[0] = '\0';
-	mode = strchr(in, '\t') ? 'n' : 'w';
-	// DONE?
-	if ( *in == '\0' ) return;	// done
-	else continue;			// not done yet, more filters
-
-      // Parse all other chars
-      default:				// handle all non-special chars
-      regchar:				// handle regular char
-	switch ( mode ) {
-	  case 'n': chrcat(name, *in);     continue;
-	  case 'w': chrcat(wildcard, *in); continue;
-	}
-	break;
-    }
-  }
-  //NOTREACHED
-}
-
-// SET PRESET FILE
-//     Value can be NULL for none.
-//
-void Fl_Native_File_Chooser::preset_file(const char* val) {
-  _preset_file = strfree(_preset_file);
-  _preset_file = strnew(val);
-}
-
-// PRESET FILE
-//     Returned value can be NULL if none set.
-//
-const char* Fl_Native_File_Chooser::preset_file() const {
-  return(_preset_file);
-}
-
-void Fl_Native_File_Chooser::filter_value(int val) {
-  _filt_value = val;
-}
-
-int Fl_Native_File_Chooser::filter_value() const {
-  return(_filt_value);
-}
-
-int Fl_Native_File_Chooser::filters() const {
-  return(_filt_total);
-}
-
-#import <Cocoa/Cocoa.h>
-#define UNLIKELYPREFIX "___fl_very_unlikely_prefix_"
-#ifndef MAC_OS_X_VERSION_10_6
-#define MAC_OS_X_VERSION_10_6 1060
-#endif
-
-int Fl_Native_File_Chooser::get_saveas_basename(void) {
-  char *q = strdup( [[(NSSavePanel*)_panel filename] fileSystemRepresentation] );
-  id delegate = [(NSSavePanel*)_panel delegate];
-  if (delegate != nil) {
-    const char *d = [[(NSSavePanel*)_panel directory] fileSystemRepresentation];
-    int l = strlen(d) + 1;
-    int lu = strlen(UNLIKELYPREFIX);
-    // Remove UNLIKELYPREFIX between directory and filename parts
-    memmove(q + l, q + l + lu, strlen(q + l + lu) + 1);
-  }
-  set_single_pathname( q );
-  free(q);
-  return 0;
-}
-
-// SET THE TYPE OF BROWSER
-void Fl_Native_File_Chooser::type(int val) {
-  _btype = val;
-}
-
-/* Input
- filter=  "C files\t*.{c,h}\nText files\t*.txt\n"
- patterns[0] = "*.{c,h}"
- patterns[1] = "*.txt"
- count = 2
- Return:
- "C files (*.{c,h})\nText files (*.txt)\n"
- */
-static char *prepareMacFilter(int count, const char *filter, char **patterns) {
-  int rank = 0, l = 0;
-  for (int i = 0; i < count; i++) {
-    l += strlen(patterns[i]) + 3;
-    }
-  const char *p = filter;
-  char *q; q = new char[strlen(p) + l + 1];
-  const char *r, *s;
-  char *t;
-  t = q;
-  do {	// copy to t what is in filter removing what is between \t and \n, if any
-    r = strchr(p, '\n');
-    if (!r) r = p + strlen(p);
-    s = strchr(p, '\t');
-    if (s && s < r) { 
-      memcpy(q, p, s - p); 
-      q += s - p; 
-      if (rank < count) { sprintf(q, " (%s)", patterns[rank]); q += strlen(q); }
-    }
-    else { 
-      memcpy(q, p, r - p); 
-      q += r - p; 
-    }
-    rank++;
-    *(q++) = '\n'; 
-    if (*p) p = r + 1;
-  } while(*p);
-  *q = 0;
-  return t;
-}
-  
-@interface FLopenDelegate : NSObject 
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-<NSOpenSavePanelDelegate>
-#endif
-{
-  NSPopUpButton *nspopup;
-  char **filter_pattern;
-}
-- (FLopenDelegate*)setPopup:(NSPopUpButton*)popup filter_pattern:(char**)pattern;
-- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename;
-@end
-@implementation FLopenDelegate
-- (FLopenDelegate*)setPopup:(NSPopUpButton*)popup filter_pattern:(char**)pattern
-{
-  nspopup = popup;
-  filter_pattern = pattern;
-  return self;
-}
-- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename
-{
-  if ( [nspopup indexOfSelectedItem] == [nspopup numberOfItems] - 1) return YES;
-  const char *pathname = [filename fileSystemRepresentation];
-  if ( fl_filename_isdir(pathname) ) return YES;
-  if ( fl_filename_match(pathname, filter_pattern[ [nspopup indexOfSelectedItem] ]) ) return YES;
-  return NO;
-}
-@end
-
-@interface FLsaveDelegate : NSObject 
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-<NSOpenSavePanelDelegate>
-#endif
-{
-}
-- (NSString *)panel:(id)sender userEnteredFilename:(NSString *)filename confirmed:(BOOL)okFlag;
-@end
-@implementation FLsaveDelegate
-- (NSString *)panel:(id)sender userEnteredFilename:(NSString *)filename confirmed:(BOOL)okFlag
-{
-  if (! okFlag) return filename;
-  // User has clicked save, and no overwrite confirmation should occur.
-  // To get the latter, we need to change the name we return (hence the prefix):
-  return [@ UNLIKELYPREFIX stringByAppendingString:filename];
-}
-@end
-  
-static NSPopUpButton *createPopupAccessory(NSSavePanel *panel, const char *filter, const char *title, int rank)
-{
-  NSPopUpButton *popup;
-  NSRect rectview = NSMakeRect(5, 5, 350, 30 );
-  NSView *view = [[[NSView alloc] initWithFrame:rectview] autorelease];
-  NSRect rectbox = NSMakeRect(0, 3, 140, 20 );
-  NSBox *box = [[[NSBox alloc] initWithFrame:rectbox] autorelease];
-  NSRect rectpop = NSMakeRect(105, 0, 246, 30 );
-  popup = [[[NSPopUpButton alloc ] initWithFrame:rectpop pullsDown:NO] autorelease];
-  [view addSubview:box];
-  [view addSubview:popup];
-  [box setBorderType:NSNoBorder];
-  NSString *nstitle = [[NSString alloc] initWithUTF8String:title];
-  [box setTitle:nstitle];
-  [nstitle release];
-  NSFont *font = [NSFont controlContentFontOfSize:NSRegularControlSize];
-  [box setTitleFont:font];
-  [box sizeToFit];
-  // horizontally move box to fit the locale-dependent width of its title
-  NSRect r=[box frame];
-  NSPoint o = r.origin;
-  o.x = rectpop.origin.x - r.size.width + 15;
-  [box setFrameOrigin:o];
-  CFStringRef tab = CFSTR("\n");
-  CFStringRef tmp_cfs;
-  tmp_cfs = CFStringCreateWithCString(NULL, filter, kCFStringEncodingUTF8);
-  CFArrayRef array = CFStringCreateArrayBySeparatingStrings(NULL, tmp_cfs, tab);
-  CFRelease(tmp_cfs);
-  CFRelease(tab);
-  [popup addItemsWithTitles:(NSArray*)array];
-  NSMenuItem *item = [popup itemWithTitle:@""];
-  if (item) [popup removeItemWithTitle:@""];
-  CFRelease(array);
-  [popup selectItemAtIndex:rank];
-  [panel setAccessoryView:view];
-  return popup;
-}
-  
-// POST BROWSER
-//     Internal use only.
-//     Assumes '_opts' has been initialized.
-//
-//     Returns:
-//         0 - user picked a file
-//         1 - user cancelled
-//        -1 - failed; errmsg() has reason
-//     
-int Fl_Native_File_Chooser::post() {
-  // INITIALIZE BROWSER
-  if ( _filt_total == 0 ) {	// Make sure they match
-    _filt_value = 0;		// TBD: move to someplace more logical?
-  }
-  NSAutoreleasePool *localPool;
-  localPool = [[NSAutoreleasePool alloc] init];
-  switch (_btype) {
-    case BROWSE_FILE:
-    case BROWSE_MULTI_FILE:
-    case BROWSE_DIRECTORY:
-    case BROWSE_MULTI_DIRECTORY:
-      _panel =  [NSOpenPanel openPanel];
-      break;	  
-    case BROWSE_SAVE_DIRECTORY:
-    case BROWSE_SAVE_FILE:
-      _panel =  [NSSavePanel savePanel];
-      break;
-  }
-  int retval;
-  NSString *nstitle = [NSString stringWithUTF8String: (_title ? _title : "No Title")];
-  [(NSSavePanel*)_panel setTitle:nstitle];
-  switch (_btype) {
-    case BROWSE_MULTI_FILE:
-      [(NSOpenPanel*)_panel setAllowsMultipleSelection:YES];
-      break;
-    case BROWSE_MULTI_DIRECTORY:
-      [(NSOpenPanel*)_panel setAllowsMultipleSelection:YES];
-      /* FALLTHROUGH */
-    case BROWSE_DIRECTORY:
-      [(NSOpenPanel*)_panel setCanChooseDirectories:YES];
-      break;
-    case BROWSE_SAVE_DIRECTORY:
-      [(NSSavePanel*)_panel setCanCreateDirectories:YES];
-      break;
-  }
-  
-  // SHOW THE DIALOG
-  if ( [(NSSavePanel*)_panel isKindOfClass:[NSOpenPanel class]] ) {
-    NSPopUpButton *popup = nil;
-    if (_filt_total) {
-      char *t = prepareMacFilter(_filt_total, _filter, _filt_patt);
-      popup = createPopupAccessory((NSSavePanel*)_panel, t, Fl_File_Chooser::show_label, 0);
-      delete[] t;
-      [[popup menu] addItem:[NSMenuItem separatorItem]];
-      [popup addItemWithTitle:[[NSString alloc] initWithUTF8String:Fl_File_Chooser::all_files_label]];
-      [popup setAction:@selector(validateVisibleColumns)];
-      [popup setTarget:(NSObject*)_panel];
-      static FLopenDelegate *openDelegate = nil;
-      if (openDelegate == nil) {
-	// not to be ever freed
-	openDelegate = [[FLopenDelegate alloc] init];
-      }
-      [openDelegate setPopup:popup filter_pattern:_filt_patt];
-      [(NSOpenPanel*)_panel setDelegate:openDelegate];
-    }
-    NSString *dir = nil;
-    NSString *fname = nil;
-    NSString *preset = nil;
-    if (_preset_file) {
-      preset = [[NSString alloc] initWithUTF8String:_preset_file];
-      if (strchr(_preset_file, '/') != NULL) 
-	dir = [[NSString alloc] initWithString:[preset stringByDeletingLastPathComponent]];
-      fname = [preset lastPathComponent];
-    }
-    if (_directory && !dir) dir = [[NSString alloc] initWithUTF8String:_directory];
-    retval = [(NSOpenPanel*)_panel runModalForDirectory:dir file:fname types:nil];	
-    [dir release];
-    [preset release];
-    if (_filt_total) {
-      _filt_value = [popup indexOfSelectedItem];
-    }
-    if ( retval == NSOKButton ) {
-      clear_pathnames();
-      NSArray *array = [(NSOpenPanel*)_panel filenames];
-      _tpathnames = [array count];
-      _pathnames = new char*[_tpathnames];
-      for(int i = 0; i < _tpathnames; i++) {
-	_pathnames[i] = strnew([(NSString*)[array objectAtIndex:i] fileSystemRepresentation]);
-      }
-    }
-  }
-  else {
-    NSString *dir = nil;
-    NSString *fname = nil;
-    NSString *preset = nil;
-    NSPopUpButton *popup = nil;
-    [(NSSavePanel*)_panel setAllowsOtherFileTypes:YES];
-    if ( !(_options & SAVEAS_CONFIRM) ) {
-      static FLsaveDelegate *saveDelegate = nil;
-      if (saveDelegate == nil)saveDelegate = [[FLsaveDelegate alloc] init]; // not to be ever freed
-      [(NSSavePanel*)_panel setDelegate:saveDelegate];
-    }
-    if (_preset_file) {
-      preset = [[NSString alloc] initWithUTF8String:_preset_file];
-      if (strchr(_preset_file, '/') != NULL) {
-	dir = [[NSString alloc] initWithString:[preset stringByDeletingLastPathComponent]];
-      }
-      fname = [preset lastPathComponent];
-    }
-    if (_directory && !dir) dir = [[NSString alloc] initWithUTF8String:_directory];
-    if (_filt_total) {
-      char *t = prepareMacFilter(_filt_total, _filter, _filt_patt);
-      popup = createPopupAccessory((NSSavePanel*)_panel, t, [[(NSSavePanel*)_panel nameFieldLabel] UTF8String], _filt_value);
-      delete[] t;
-    }
-    retval = [(NSSavePanel*)_panel runModalForDirectory:dir file:fname];
-    if (_filt_total) {
-      _filt_value = [popup indexOfSelectedItem];
-    }
-    [dir release];
-    [preset release];
-    if ( retval == NSOKButton ) get_saveas_basename();
-  }
-  [localPool release];
-  return (retval == NSOKButton ? 0 : 1);
-}
-
-#endif // __APPLE__
-
-//
-// End of "$Id: Fl_Native_File_Chooser_MAC.mm 8784 2011-06-06 12:11:04Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Native_File_Chooser_WIN32.cxx b/common/fltk/src/Fl_Native_File_Chooser_WIN32.cxx
deleted file mode 100644
index 71b5a92..0000000
--- a/common/fltk/src/Fl_Native_File_Chooser_WIN32.cxx
+++ /dev/null
@@ -1,860 +0,0 @@
-// "$Id: Fl_Native_File_Chooser_WIN32.cxx 8454 2011-02-20 21:46:11Z manolo $"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 Greg Ercolano.
-// API changes + filter improvements by Nathan Vander Wilt 2005
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Any application to multi-folder implementation:
-//     http://www.codeproject.com/dialog/selectfolder.asp
-//
-
-#ifndef FL_DOXYGEN		// PREVENT DOXYGEN'S USE OF THIS FILE
-
-#include <stdio.h>		// debugging
-#include <wchar.h>		//MG
-#include "Fl_Native_File_Chooser_common.cxx"		// strnew/strfree/strapp/chrcat
-typedef const wchar_t *LPCWSTR; //MG
-LPCWSTR utf8towchar(const char *in); //MG
-char *wchartoutf8(LPCWSTR in);  //MG
-
-#include <FL/Fl_Native_File_Chooser.H>
-
-#define LCURLY_CHR	'{'
-#define RCURLY_CHR	'}'
-#define LBRACKET_CHR	'['
-#define RBRACKET_CHR	']'
-#define MAXFILTERS	80
-
-void fl_OleInitialize();	// in Fl.cxx (Windows only)
-
-// STATIC: PRINT WINDOWS 'DOUBLE NULL' STRING (DEBUG)
-#ifdef DEBUG
-static void dnullprint(char *wp) {
-  if ( ! wp ) return;
-  for ( int t=0; true; t++ ) {
-    if ( wp[t] == '\0' && wp[t+1] == '\0' ) {
-      printf("\\0\\0");
-      fflush(stdout);
-      return;
-    } else if ( wp[t] == '\0' ) {
-      printf("\\0");
-    } else { 
-      printf("%c",wp[t]);
-    }
-  }
-}
-#endif
-
-// RETURN LENGTH OF DOUBLENULL STRING
-//    Includes single nulls in count, excludes trailing doublenull.
-//
-//         1234 567
-//         |||/\|||
-//    IN: "one\0two\0\0"
-//   OUT: 7
-//
-static int dnulllen(const char *wp) {
-  int len = 0;
-  while ( ! ( *(wp+0) == 0 && *(wp+1) == 0 ) ) {
-    ++wp;
-    ++len;
-  }
-  return(len);
-}
-
-// STATIC: Append a string to another, leaving terminated with DOUBLE NULL.
-//     Automatically handles extending length of string.
-//     wp can be NULL (a new wp will be allocated and initialized).
-//     string must be NULL terminated.
-//     The pointer wp may be modified on return.
-//
-static void dnullcat(char*&wp, const char *string, int n = -1 ) {
-  //DEBUG printf("DEBUG: dnullcat IN: <"); dnullprint(wp); printf(">\n");
-  int inlen = ( n < 0 ) ? strlen(string) : n;
-  if ( ! wp ) {
-    wp = new char[inlen + 4];
-    *(wp+0) = '\0';
-    *(wp+1) = '\0';
-  } else {
-    int wplen = dnulllen(wp);
-    // Make copy of wp into larger buffer
-    char *tmp = new char[wplen + inlen + 4];
-    memcpy(tmp, wp, wplen+2);	// copy of wp plus doublenull
-    delete [] wp;			// delete old wp
-    wp = tmp;			// use new copy
-    //DEBUG printf("DEBUG: dnullcat COPY: <"); dnullprint(wp); printf("> (wplen=%d)\n", wplen);
-  }
-
-  // Find end of double null string
-  //     *wp2 is left pointing at second null.
-  //
-  char *wp2 = wp;
-  if ( *(wp2+0) != '\0' && *(wp2+1) != '\0' ) {
-    for ( ; 1; wp2++ ) {
-      if ( *(wp2+0) == '\0' && *(wp2+1) == '\0' ) {
-        wp2++;
-        break;
-      }
-    }
-  }
-
-  if ( n == -1 ) n = strlen(string);
-  strncpy(wp2, string, n);
-
-  // Leave string double-null terminated
-  *(wp2+n+0) = '\0';
-  *(wp2+n+1) = '\0';
-  //DEBUG printf("DEBUG: dnullcat OUT: <"); dnullprint(wp); printf(">\n\n");
-}
-
-// CTOR
-Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) {
-  _btype           = val;
-  _options         = NO_OPTIONS;
-  memset((void*)&_ofn, 0, sizeof(OPENFILENAMEW));
-  _ofn.lStructSize = sizeof(OPENFILENAMEW);
-  _ofn.hwndOwner   = NULL;
-  memset((void*)&_binf, 0, sizeof(BROWSEINFO));
-  _pathnames       = NULL;
-  _tpathnames      = 0;
-  _directory       = NULL;
-  _title           = NULL;
-  _filter          = NULL;
-  _parsedfilt      = NULL;
-  _nfilters        = 0;
-  _preset_file     = NULL;
-  _errmsg          = NULL;
-}
-
-// DTOR
-Fl_Native_File_Chooser::~Fl_Native_File_Chooser() {
-  //_pathnames                // managed by clear_pathnames()
-  //_tpathnames               // managed by clear_pathnames()
-  _directory   = strfree(_directory);
-  _title       = strfree(_title);
-  _filter      = strfree(_filter);
-  //_parsedfilt               // managed by clear_filters()
-  //_nfilters                 // managed by clear_filters()
-  _preset_file = strfree(_preset_file);
-  _errmsg      = strfree(_errmsg);
-  clear_filters();
-  clear_pathnames();
-  ClearOFN();
-  ClearBINF();
-}
-
-// SET TYPE OF BROWSER
-void Fl_Native_File_Chooser::type(int val) {
-  _btype = val;
-}
-
-// GET TYPE OF BROWSER
-int Fl_Native_File_Chooser::type() const {
-  return( _btype );
-}
-
-// SET OPTIONS
-void Fl_Native_File_Chooser::options(int val) {
-  _options = val;
-}
-
-// GET OPTIONS
-int Fl_Native_File_Chooser::options() const {
-  return(_options);
-}
-
-// PRIVATE: SET ERROR MESSAGE
-void Fl_Native_File_Chooser::errmsg(const char *val) {
-  _errmsg = strfree(_errmsg);
-  _errmsg = strnew(val);
-}
-
-// FREE PATHNAMES ARRAY, IF IT HAS ANY CONTENTS
-void Fl_Native_File_Chooser::clear_pathnames() {
-  if ( _pathnames ) {
-    while ( --_tpathnames >= 0 ) {
-      _pathnames[_tpathnames] = strfree(_pathnames[_tpathnames]);
-    }
-    delete [] _pathnames;
-    _pathnames = NULL;
-  }
-  _tpathnames = 0;
-}
-
-// SET A SINGLE PATHNAME
-void Fl_Native_File_Chooser::set_single_pathname(const char *s) {
-  clear_pathnames();
-  _pathnames = new char*[1];
-  _pathnames[0] = strnew(s);
-  _tpathnames = 1;
-}
-
-// ADD PATHNAME TO EXISTING ARRAY
-void Fl_Native_File_Chooser::add_pathname(const char *s) {
-  if ( ! _pathnames ) {
-    // Create first element in array
-    ++_tpathnames;
-    _pathnames = new char*[_tpathnames];
-  } else {
-    // Grow array by 1
-    char **tmp = new char*[_tpathnames+1];		// create new buffer
-    memcpy((void*)tmp, (void*)_pathnames, 
-		       sizeof(char*)*_tpathnames);	// copy old
-    delete [] _pathnames;				// delete old
-    _pathnames = tmp;					// use new
-    ++_tpathnames;
-  }
-  _pathnames[_tpathnames-1] = strnew(s);
-}
-
-// FREE A PIDL (Pointer to IDentity List)
-void Fl_Native_File_Chooser::FreePIDL(ITEMIDLIST *pidl) {
-  IMalloc *imalloc = NULL;
-  if ( SUCCEEDED(SHGetMalloc(&imalloc)) ) {
-    imalloc->Free(pidl);
-    imalloc->Release();
-    imalloc = NULL;
-  }
-}
-
-// CLEAR MICROSOFT OFN (OPEN FILE NAME) CLASS
-void Fl_Native_File_Chooser::ClearOFN() {
-  // Free any previously allocated lpstrFile before zeroing out _ofn
-  if ( _ofn.lpstrFile ) {
-    delete [] _ofn.lpstrFile;
-    _ofn.lpstrFile = NULL;
-  }
-  if ( _ofn.lpstrInitialDir ) {
-    delete [] (TCHAR*) _ofn.lpstrInitialDir; //msvc6 compilation fix
-    _ofn.lpstrInitialDir = NULL;
-  }
-  _ofn.lpstrFilter = NULL;		// (deleted elsewhere)
-  int temp = _ofn.nFilterIndex;		// keep the filter_value
-  memset((void*)&_ofn, 0, sizeof(_ofn));
-  _ofn.lStructSize  = sizeof(OPENFILENAMEW);
-  _ofn.nFilterIndex = temp;
-}
-
-// CLEAR MICROSOFT BINF (BROWSER INFO) CLASS
-void Fl_Native_File_Chooser::ClearBINF() {
-  if ( _binf.pidlRoot ) {
-    FreePIDL((ITEMIDLIST*)_binf.pidlRoot);
-    _binf.pidlRoot = NULL;
-  }
-  memset((void*)&_binf, 0, sizeof(_binf));
-}
-
-// CONVERT WINDOWS BACKSLASHES TO UNIX FRONTSLASHES
-void Fl_Native_File_Chooser::Win2Unix(char *s) {
-  for ( ; *s; s++ )
-    if ( *s == '\\' ) *s = '/';
-}
-
-// CONVERT UNIX FRONTSLASHES TO WINDOWS BACKSLASHES
-void Fl_Native_File_Chooser::Unix2Win(char *s) {
-  for ( ; *s; s++ )
-    if ( *s == '/' ) *s = '\\';
-}
-
-// SHOW FILE BROWSER
-int Fl_Native_File_Chooser::showfile() {
-  ClearOFN();
-  clear_pathnames();
-  size_t fsize = MAX_PATH;
-  _ofn.Flags |= OFN_NOVALIDATE;		// prevent disabling of front slashes
-  _ofn.Flags |= OFN_HIDEREADONLY;	// hide goofy readonly flag
-  // USE NEW BROWSER
-  _ofn.Flags |= OFN_EXPLORER;		// use newer explorer windows
-  _ofn.Flags |= OFN_ENABLESIZING;	// allow window to be resized (hey, why not?)
-
-  // XXX: The docs for OFN_NOCHANGEDIR says the flag is 'ineffective' on XP/2K/NT!
-  //      But let's set it anyway..
-  //
-  _ofn.Flags |= OFN_NOCHANGEDIR;	// prevent dialog for messing up the cwd
-
-  switch ( _btype ) {
-    case BROWSE_DIRECTORY:
-    case BROWSE_MULTI_DIRECTORY:
-    case BROWSE_SAVE_DIRECTORY:
-      abort();				// never happens: handled by showdir()
-    case BROWSE_FILE:
-      fsize = 65536;			// XXX: there must be a better way
-      break;
-    case BROWSE_MULTI_FILE:
-      _ofn.Flags |= OFN_ALLOWMULTISELECT;
-      fsize = 65536;			// XXX: there must be a better way
-      break;
-    case BROWSE_SAVE_FILE:
-      if ( options() & SAVEAS_CONFIRM && type() == BROWSE_SAVE_FILE ) {
-	  _ofn.Flags |= OFN_OVERWRITEPROMPT;
-      }
-      break;
-  }
-  // SPACE FOR RETURNED FILENAME
-  _ofn.lpstrFile    = new WCHAR[fsize];
-  _ofn.nMaxFile     = fsize-1;
-  _ofn.lpstrFile[0] = 0;
-  _ofn.lpstrFile[1] = 0;		// dnull
-  // PARENT WINDOW
-  _ofn.hwndOwner = GetForegroundWindow();
-  // DIALOG TITLE
-  if (_title) {
-    static WCHAR wtitle[200];
-    wcscpy(wtitle, utf8towchar(_title));
-    _ofn.lpstrTitle =  wtitle;
-  } else {
-    _ofn.lpstrTitle = NULL;
-  }
-  // FILTER
-  if (_parsedfilt != NULL) {	// to convert a null-containing char string into a widechar string
-    static WCHAR wpattern[MAX_PATH];
-    const char *p = _parsedfilt;
-    while(*(p + strlen(p) + 1) != 0) p += strlen(p) + 1;
-    p += strlen(p) + 2;
-    MultiByteToWideChar(CP_UTF8, 0, _parsedfilt, p - _parsedfilt, wpattern, MAX_PATH);
-    _ofn.lpstrFilter = wpattern;
-  } else {
-    _ofn.lpstrFilter = NULL;
-  }
-  // PRESET FILE
-  //     If set, supercedes _directory. See KB Q86920 for details
-  //
-  if ( _preset_file ) {
-    size_t len = strlen(_preset_file);
-    if ( len >= _ofn.nMaxFile ) {
-      char msg[80];
-      sprintf(msg, "preset_file() filename is too long: %ld is >=%ld", (long)len, (long)fsize);
-      return(-1);
-    }
-    wcscpy(_ofn.lpstrFile, utf8towchar(_preset_file));
-//  Unix2Win(_ofn.lpstrFile);
-    len = wcslen(_ofn.lpstrFile);
-    _ofn.lpstrFile[len+0] = 0;	// multiselect needs dnull
-    _ofn.lpstrFile[len+1] = 0;
-  }
-  if ( _directory ) {
-    // PRESET DIR
-    //     XXX: See KB Q86920 for doc bug:
-    //     http://support.microsoft.com/default.aspx?scid=kb;en-us;86920
-    //
-    _ofn.lpstrInitialDir    = new WCHAR[MAX_PATH];
-    wcscpy((WCHAR *)_ofn.lpstrInitialDir, utf8towchar(_directory));
-    // Unix2Win((char*)_ofn.lpstrInitialDir);
-  }
-  // SAVE THE CURRENT DIRECTORY
-  //     XXX: Save the cwd because GetOpenFileName() is probably going to
-  //     change it, in spite of the OFN_NOCHANGEDIR flag, due to its docs
-  //     saying the flag is 'ineffective'. %^(
-  //
-  char oldcwd[MAX_PATH];
-  GetCurrentDirectory(MAX_PATH, oldcwd);
-  oldcwd[MAX_PATH-1] = '\0';
-  // OPEN THE DIALOG WINDOW
-  int err;
-  if ( _btype == BROWSE_SAVE_FILE ) {
-    err = GetSaveFileNameW(&_ofn);
-  } else {
-    err = GetOpenFileNameW(&_ofn);
-  }
-  if ( err == 0 ) {
-    // EXTENDED ERROR CHECK
-    int err = CommDlgExtendedError();
-    // CANCEL?
-    if ( err == 0 ) return(1);	// user hit 'cancel'
-    // AN ERROR OCCURRED
-    char msg[80];
-    sprintf(msg, "CommDlgExtendedError() code=%d", err);
-    errmsg(msg);
-    // XXX: RESTORE CWD
-    if ( oldcwd[0] ) SetCurrentDirectory(oldcwd);
-    return(-1);
-  }
-  // XXX: RESTORE CWD
-  if ( oldcwd[0] ) {
-    SetCurrentDirectory(oldcwd);
-  }
-  // PREPARE PATHNAMES FOR RETURN
-  switch ( _btype ) {
-    case BROWSE_FILE: 
-    case BROWSE_SAVE_FILE:
-      set_single_pathname(wchartoutf8(_ofn.lpstrFile));
-      // Win2Unix(_pathnames[_tpathnames-1]);
-      break;
-    case BROWSE_MULTI_FILE: {
-      // EXTRACT MULTIPLE FILENAMES
-      const WCHAR *dirname = _ofn.lpstrFile;
-      int dirlen = wcslen(dirname);
-      if ( dirlen > 0 ) {
-	// WALK STRING SEARCHING FOR 'DOUBLE-NULL'
-	//     eg. "/dir/name\0foo1\0foo2\0foo3\0\0"
-	//
-	char pathname[MAX_PATH]; 
-	for ( const WCHAR *s = dirname + dirlen + 1; 
-		 *s; s+= (wcslen(s)+1)) {
-		strcpy(pathname, wchartoutf8(dirname));
-		strcat(pathname, "\\");
-		strcat(pathname, wchartoutf8(s));
-		add_pathname(pathname);
-	}
-      }
-      // XXX
-      //    Work around problem where pasted forward-slash pathname
-      //    into the file browser causes new "Explorer" interface
-      //    not to grok forward slashes, passing back as a 'filename'..!
-      //
-      if ( _tpathnames == 0 ) {
-	add_pathname(wchartoutf8(dirname)); 
-	// Win2Unix(_pathnames[_tpathnames-1]);
-      }
-      break;
-    }
-    case BROWSE_DIRECTORY:
-    case BROWSE_MULTI_DIRECTORY:
-    case BROWSE_SAVE_DIRECTORY:
-      abort();			// never happens: handled by showdir()
-  }
-  return(0);
-}
-
-// Used by SHBrowseForFolder(), sets initial selected dir.
-// Ref: Usenet: microsoft.public.vc.mfc, Dec 8 2000, 1:38p David Lowndes
-//              Subject: How to specify to select an initial folder .."
-//
-int CALLBACK Fl_Native_File_Chooser::Dir_CB(HWND win, UINT msg, LPARAM param, LPARAM data) {
-  switch (msg) {
-    case BFFM_INITIALIZED:
-      if (data) ::SendMessage(win, BFFM_SETSELECTION, TRUE, data);
-      break;
-    case BFFM_SELCHANGED:
-      TCHAR path[MAX_PATH];
-      if ( SHGetPathFromIDList((ITEMIDLIST*)param, path) ) {
-	::SendMessage(win, BFFM_ENABLEOK, 0, 1);
-      } else {
-	// disable ok button if not a path
-	::SendMessage(win, BFFM_ENABLEOK, 0, 0);
-      }
-      break;
-    case BFFM_VALIDATEFAILED:
-      // we could pop up an annoying message here. 
-      // also needs set ulFlags |= BIF_VALIDATE
-      break;
-    default:
-      break;
-  }
-  return(0);
-}
-
-// SHOW DIRECTORY BROWSER
-int Fl_Native_File_Chooser::showdir() {
-  // initialize OLE only once
-  fl_OleInitialize();		// init needed by BIF_USENEWUI
-  ClearBINF();
-  clear_pathnames();
-  // PARENT WINDOW
-  _binf.hwndOwner = GetForegroundWindow();
-  // DIALOG TITLE
-  _binf.lpszTitle = _title ? _title : NULL;
-  // FLAGS
-  _binf.ulFlags = 0; 		// initialize
-
-  // TBD: make sure matches to runtime system, if need be.
-  //(what if _WIN32_IE doesn't match system? does the program not run?)
-  //
-  // TBD: match all 3 types of directories
-  //
-  // NOTE: *Don't* use BIF_SHAREABLE. It /disables/ mapped network shares
-  //       from being visible in BROWSE_DIRECTORY mode. 
-  //       See Walter Garm's comments in ./TODO.
-
-#if defined(BIF_NONEWFOLDERBUTTON)				// Version 6.0
-  if ( _btype == BROWSE_DIRECTORY ) _binf.ulFlags |= BIF_NONEWFOLDERBUTTON;
-  _binf.ulFlags |= BIF_USENEWUI | BIF_RETURNONLYFSDIRS;
-#elif defined(BIF_USENEWUI)					// Version 5.0
-  if ( _btype == BROWSE_DIRECTORY ) _binf.ulFlags |= BIF_EDITBOX;
-  else if ( _btype == BROWSE_SAVE_DIRECTORY ) _binf.ulFlags |= BIF_USENEWUI;
-  _binf.ulFlags |= BIF_RETURNONLYFSDIRS;
-#elif defined(BIF_EDITBOX)					// Version 4.71
-  _binf.ulFlags |= BIF_RETURNONLYFSDIRS | BIF_EDITBOX;
-#else								// Version Old
-  _binf.ulFlags |= BIF_RETURNONLYFSDIRS;
-#endif
-
-  // BUFFER
-  char displayname[MAX_PATH];
-  _binf.pszDisplayName = displayname;
-  // PRESET DIR
-  char presetname[MAX_PATH];
-  if ( _directory ) {
-    strcpy(presetname, _directory);
-    // Unix2Win(presetname);
-    _binf.lParam = (LPARAM)presetname;
-  }
-  else _binf.lParam = 0;
-  _binf.lpfn = Dir_CB;
-  // OPEN BROWSER
-  ITEMIDLIST *pidl = SHBrowseForFolder(&_binf);
-  // CANCEL?
-  if ( pidl == NULL ) return(1);
-
-  // GET THE PATHNAME(S) THE USER SELECTED
-  // TBD: expand NetHood shortcuts from this PIDL??
-  // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shbrowseforfolder.asp
-
-  TCHAR path[MAX_PATH];
-  if ( SHGetPathFromIDList(pidl, path) ) {
-    // Win2Unix(path);
-    add_pathname(path);
-  }
-  FreePIDL(pidl);
-  if ( !strlen(path) ) return(1);             // don't return empty pathnames
-  return(0);
-}
-
-// RETURNS:
-//    0 - user picked a file
-//    1 - user cancelled
-//   -1 - failed; errmsg() has reason
-//
-int Fl_Native_File_Chooser::show() {
-  if ( _btype == BROWSE_DIRECTORY || 
-       _btype == BROWSE_MULTI_DIRECTORY || 
-       _btype == BROWSE_SAVE_DIRECTORY ) {
-    return(showdir());
-  } else {
-    return(showfile());
-  }
-}
-
-// RETURN ERROR MESSAGE
-const char *Fl_Native_File_Chooser::errmsg() const {
-  return(_errmsg ? _errmsg : "No error");
-}
-
-// GET FILENAME
-const char* Fl_Native_File_Chooser::filename() const {
-  if ( _pathnames && _tpathnames > 0 ) return(_pathnames[0]);
-  return("");
-}
-
-// GET FILENAME FROM LIST OF FILENAMES
-const char* Fl_Native_File_Chooser::filename(int i) const {
-  if ( _pathnames && i < _tpathnames ) return(_pathnames[i]);
-  return("");
-}
-
-// GET TOTAL FILENAMES CHOSEN
-int Fl_Native_File_Chooser::count() const {
-  return(_tpathnames);
-}
-
-// PRESET PATHNAME
-//     Can be NULL if no preset is desired.
-//
-void Fl_Native_File_Chooser::directory(const char *val) {
-  _directory = strfree(_directory);
-  _directory = strnew(val);
-}
-
-// GET PRESET PATHNAME
-//    Can return NULL if none set.
-//
-const char *Fl_Native_File_Chooser::directory() const {
-  return(_directory);
-}
-
-// SET TITLE
-//     Can be NULL if no title desired.
-//
-void Fl_Native_File_Chooser::title(const char *val) {
-  _title = strfree(_title);
-  _title = strnew(val);
-}
-
-// GET TITLE
-//    Can return NULL if none set.
-//
-const char *Fl_Native_File_Chooser::title() const {
-  return(_title);
-}
-
-// SET FILTER
-//     Can be NULL if no filter needed
-//
-void Fl_Native_File_Chooser::filter(const char *val) {
-  _filter = strfree(_filter);
-  clear_filters();
-  if ( val ) {
-    _filter = strnew(val);
-    parse_filter(_filter);
-  }
-  add_filter("All Files", "*.*");	// always include 'all files' option
-
-#ifdef DEBUG
-  nullprint(_parsedfilt);
-#endif /*DEBUG*/
-}
-
-// GET FILTER
-//    Can return NULL if none set.
-//
-const char *Fl_Native_File_Chooser::filter() const {
-  return(_filter);
-}
-
-// CLEAR FILTERS
-void Fl_Native_File_Chooser::clear_filters() {
-  _nfilters = 0;
-  _parsedfilt = strfree(_parsedfilt);
-}
-
-// ADD A FILTER
-void Fl_Native_File_Chooser::add_filter(const char *name_in,	// name of filter (optional: can be null)
-	                    const char *winfilter) {    	// windows style filter (eg. "*.cxx;*.h")
-  // No name? Make one..
-  char name[1024];
-  if ( !name_in || name_in[0] == '\0' ) {
-    sprintf(name, "%.*s Files", int(sizeof(name)-10), winfilter);
-  } else {
-    sprintf(name, "%.*s", int(sizeof(name)-10), name_in);
-  }
-  dnullcat(_parsedfilt, name);
-  dnullcat(_parsedfilt, winfilter);
-  _nfilters++;
-  //DEBUG printf("DEBUG: ADD FILTER name=<%s> winfilter=<%s>\n", name, winfilter);
-}
-
-// CONVERT FLTK STYLE PATTERN MATCHES TO WINDOWS 'DOUBLENULL' PATTERN
-//    Handles:
-//        IN              OUT
-//        -----------     -----------------------------
-//        *.{ma,mb}       "*.{ma,mb} Files\0*.ma;*.mb\0\0"
-//        *.[abc]         "*.[abc] Files\0*.a;*.b;*.c\0\0"
-//        *.txt           "*.txt Files\0*.txt\0\0"
-//        C Files\t*.[ch] "C Files\0*.c;*.h\0\0"
-//
-//    Example:
-//         IN: "*.{ma,mb}"
-//        OUT: "*.ma;*.mb Files\0*.ma;*.mb\0All Files\0*.*\0\0"
-//              ---------------  ---------  ---------  ---
-//                     |             |          |       |
-//                   Title       Wildcards    Title    Wildcards
-//
-// Parsing Mode:
-//         IN:"C Files\t*.{cxx,h}"
-//             |||||||  |||||||||
-//       mode: nnnnnnn  ww{{{{{{{
-//             \_____/  \_______/
-//              Name     Wildcard
-//
-void Fl_Native_File_Chooser::parse_filter(const char *in) {
-  clear_filters();
-  if ( ! in ) return;
-
-  int has_name = strchr(in, '\t') ? 1 : 0;
-
-  char mode = has_name ? 'n' : 'w';	// parse mode: n=name, w=wildcard
-  int nwildcards = 0;
-  char wildcards[MAXFILTERS][1024];	// parsed wildcards (can be several)
-  char wildprefix[512] = "";
-  char name[512] = "";
-
-  // Init
-  int t;
-  for ( t=0; t<MAXFILTERS; t++ ) {
-    wildcards[t][0] = '\0';
-  }
-
-  // Parse
-  for ( ; 1; in++ ) {
-
-    //// DEBUG
-    //// printf("WORKING ON '%c': mode=<%c> name=<%s> wildprefix=<%s> nwildcards=%d wildcards[n]=<%s>\n",
-    ////        *in, mode, name, wildprefix, nwildcards, wildcards[nwildcards]);
-
-    switch (*in) {
-      case ',':
-      case '|':
-	if ( mode == LCURLY_CHR ) {
-	  // create new wildcard, copy in prefix
-	  strcat(wildcards[nwildcards++], wildprefix);
-	  continue;
-	} else {
-	  goto regchar;
-	}
-	continue;
-
-      // FINISHED PARSING A NAME?
-      case '\t':
-	if ( mode != 'n' ) goto regchar;
-	// finish parsing name? switch to wildcard mode
-	mode = 'w';
-	break;
-
-      // ESCAPE NEXT CHAR
-      case '\\':
-	++in;
-	goto regchar;
-
-      // FINISHED PARSING ONE OF POSSIBLY SEVERAL FILTERS?
-      case '\r':
-      case '\n':
-      case '\0':
-      {
-	if ( mode == 'w' ) {		// finished parsing wildcard?
-	  if ( nwildcards == 0 ) {
-	    strcpy(wildcards[nwildcards++], wildprefix);
-	  }
-	  // Append wildcards in Microsoft's "*.one;*.two" format
-	  char comp[4096] = "";
-	  for ( t=0; t<nwildcards; t++ ) {
-	    if ( t != 0 ) strcat(comp, ";");
-	    strcat(comp, wildcards[t]);
-	  }
-	  // Add if not empty
-	  if ( comp[0] ) {
-	    add_filter(name, comp);
-	  }
-	}
-	// RESET
-	for ( t=0; t<MAXFILTERS; t++ ) {
-	  wildcards[t][0] = '\0';
-	}
-	nwildcards = 0;
-	wildprefix[0] = name[0] = '\0';
-	mode = strchr(in,'\t') ? 'n' : 'w';
-	// DONE?
-	if ( *in == '\0' ) return;	// done
-	continue;			// not done yet, more filters
-      }
-
-      // STARTING A WILDCARD?
-      case LBRACKET_CHR:
-      case LCURLY_CHR:
-	mode = *in;
-	if ( *in == LCURLY_CHR ) {
-	  // create new wildcard
-	  strcat(wildcards[nwildcards++], wildprefix);
-	}
-	continue;
-
-      // ENDING A WILDCARD?
-      case RBRACKET_CHR:
-      case RCURLY_CHR:
-	mode = 'w';	// back to wildcard mode
-	continue;
-
-      // ALL OTHER NON-SPECIAL CHARACTERS
-      default:
-      regchar:		// handle regular char
-	switch ( mode ) {
-	  case LBRACKET_CHR: 
-	    // create new wildcard
-	    ++nwildcards;
-	    // copy in prefix
-	    strcpy(wildcards[nwildcards-1], wildprefix);
-	    // append search char
-	    chrcat(wildcards[nwildcards-1], *in);
-	    continue;
-
-	  case LCURLY_CHR:
-	    if ( nwildcards > 0 ) {
-	      chrcat(wildcards[nwildcards-1], *in);
-	    }
-	    continue;
-
-	  case 'n':
-	    chrcat(name, *in);
-	    continue;
-
-	  case 'w':
-	    chrcat(wildprefix, *in);
-	    for ( t=0; t<nwildcards; t++ ) {
-	      chrcat(wildcards[t], *in);
-	    }
-	    continue;
-	}
-	break;
-    }
-  }
-}
-
-// SET 'CURRENTLY SELECTED FILTER'
-void Fl_Native_File_Chooser::filter_value(int i) {
-  _ofn.nFilterIndex = i + 1;
-}
-
-// RETURN VALUE OF 'CURRENTLY SELECTED FILTER'
-int Fl_Native_File_Chooser::filter_value() const {
-  return(_ofn.nFilterIndex ? _ofn.nFilterIndex-1 : _nfilters+1);
-}
-
-// PRESET FILENAME FOR 'SAVE AS' CHOOSER
-void Fl_Native_File_Chooser::preset_file(const char* val) {
-  _preset_file = strfree(_preset_file);
-  _preset_file = strnew(val);
-}
-
-// GET PRESET FILENAME FOR 'SAVE AS' CHOOSER
-const char* Fl_Native_File_Chooser::preset_file() const {
-  return(_preset_file);
-}
-
-int Fl_Native_File_Chooser::filters() const {
-  return(_nfilters);
-}
-
-char *wchartoutf8(LPCWSTR in)
-{
-  static char *out = NULL;
-  static int lchar = 0;
-  if (in == NULL)return NULL;
-  int utf8len  = WideCharToMultiByte(CP_UTF8, 0, in, -1, NULL, 0, NULL, NULL);
-  if (utf8len > lchar) {
-    lchar = utf8len;
-    out = (char *)realloc(out, lchar * sizeof(char));
-  }
-  WideCharToMultiByte(CP_UTF8, 0, in, -1, out, utf8len, NULL, NULL);
-  return out;
-}
-
-LPCWSTR utf8towchar(const char *in)
-{
-  static WCHAR *wout = NULL;
-  static int lwout = 0;
-  if (in == NULL)return NULL;
-  int wlen = MultiByteToWideChar(CP_UTF8, 0, in, -1, NULL, 0);
-  if (wlen > lwout) {
-    lwout = wlen;
-    wout = (WCHAR *)realloc(wout, lwout * sizeof(WCHAR));
-  }
-  MultiByteToWideChar(CP_UTF8, 0, in, -1, wout, wlen);
-  return wout;
-}
-
-#endif /*!FL_DOXYGEN*/
-
-//
-// End of "$Id: Fl_Native_File_Chooser_WIN32.cxx 8454 2011-02-20 21:46:11Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Native_File_Chooser_common.cxx b/common/fltk/src/Fl_Native_File_Chooser_common.cxx
deleted file mode 100644
index f5d45f1..0000000
--- a/common/fltk/src/Fl_Native_File_Chooser_common.cxx
+++ /dev/null
@@ -1,85 +0,0 @@
-// "$Id: Fl_Native_File_Chooser_common.cxx 7977 2010-12-08 13:16:27Z AlbrechtS $"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <string.h>
-#include <FL/Enumerations.H>
-
-// COPY A STRING WITH 'new'
-//    Value can be NULL
-//
-static char *strnew(const char *val) {
-  if ( val == NULL ) return(NULL);
-  char *s = new char[strlen(val)+1];
-  strcpy(s, val);
-  return(s);
-}
-
-// FREE STRING CREATED WITH strnew(), NULLS OUT STRING
-//    Value can be NULL
-//
-static char *strfree(char *val) {
-  if ( val ) delete [] val;
-  return(NULL);
-}
-
-// 'DYNAMICALLY' APPEND ONE STRING TO ANOTHER
-//    Returns newly allocated string, or NULL 
-//    if s && val == NULL.
-//    's' can be NULL; returns a strnew(val).
-//    'val' can be NULL; s is returned unmodified.
-//
-//    Usage:
-//	char *s = strnew("foo");	// s = "foo"
-//      s = strapp(s, "bar");		// s = "foobar"
-//
-#if !defined(WIN32)
-static char *strapp(char *s, const char *val) {
-  if ( ! val ) {
-    return(s);			// Nothing to append? return s
-  }
-  if ( ! s ) {
-    return(strnew(val));	// New string? return copy of val
-  }
-  char *news = new char[strlen(s)+strlen(val)+1];
-  strcpy(news, s);
-  strcat(news, val);
-  delete [] s;			// delete old string
-  return(news);			// return new copy
-}
-#endif
-
-// APPEND A CHARACTER TO A STRING
-//     This does NOT allocate space for the new character.
-//
-static void chrcat(char *s, char c) {
-  char tmp[2] = { c, '\0' };
-  strcat(s, tmp);
-}
-
-//
-// End of "$Id: Fl_Native_File_Chooser_common.cxx 7977 2010-12-08 13:16:27Z AlbrechtS $".
-//
diff --git a/common/fltk/src/Fl_Overlay_Window.cxx b/common/fltk/src/Fl_Overlay_Window.cxx
deleted file mode 100644
index f75a3d9..0000000
--- a/common/fltk/src/Fl_Overlay_Window.cxx
+++ /dev/null
@@ -1,176 +0,0 @@
-//
-// "$Id: Fl_Overlay_Window.cxx 8198 2011-01-06 10:24:58Z manolo $"
-//
-// Overlay window code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \fn virtual void Fl_Overlay_Window::draw_overlay() = 0
-  You must subclass Fl_Overlay_Window and provide this method.
-  It is just like a draw() method, except it draws the overlay.
-  The overlay will have already been "cleared" when this is called.  You
-  can use any of the routines described in &lt;FL/fl_draw.H&gt;.
-*/
-
-// A window using double-buffering and able to draw an overlay
-// on top of that.  Uses the hardware to draw the overlay if
-// possible, otherwise it just draws in the front buffer.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Overlay_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-
-void Fl_Overlay_Window::show() {
-  Fl_Double_Window::show();
-  if (overlay_ && overlay_ != this) overlay_->show();
-}
-
-void Fl_Overlay_Window::hide() {
-  Fl_Double_Window::hide();
-}
-
-void Fl_Overlay_Window::flush() {
-#ifdef BOXX_BUGS
-  if (overlay_ && overlay_ != this && overlay_->shown()) {
-    // all drawing to windows hidden by overlay windows is ignored, fix this
-    XUnmapWindow(fl_display, fl_xid(overlay_));
-    Fl_Double_Window::flush(0);
-    XMapWindow(fl_display, fl_xid(overlay_));
-    return;
-  }
-#endif
-  int erase_overlay = (damage()&FL_DAMAGE_OVERLAY) | (overlay_ == this);
-  clear_damage((uchar)(damage()&~FL_DAMAGE_OVERLAY));
-  Fl_Double_Window::flush(erase_overlay);
-  if (overlay_ == this) draw_overlay();
-}
-
-void Fl_Overlay_Window::resize(int X, int Y, int W, int H) {
-  Fl_Double_Window::resize(X,Y,W,H);
-  if (overlay_ && overlay_!=this) overlay_->resize(0,0,w(),h());
-}
-
-/**
-  Destroys the window and all child widgets.
-*/
-Fl_Overlay_Window::~Fl_Overlay_Window() {
-  hide();
-//  delete overlay; this is done by ~Fl_Group
-}
-
-#if !HAVE_OVERLAY
-
-int Fl_Overlay_Window::can_do_overlay() {return 0;}
-
-/**
-  Call this to indicate that the overlay data has changed and needs to
-  be redrawn.  The overlay will be clear until the first time this is
-  called, so if you want an initial display you must call this after
-  calling show().
-*/
-void Fl_Overlay_Window::redraw_overlay() {
-  overlay_ = this;
-  clear_damage((uchar)(damage()|FL_DAMAGE_OVERLAY));
-  Fl::damage(FL_DAMAGE_CHILD);
-}
-
-#else
-
-extern XVisualInfo *fl_find_overlay_visual();
-extern XVisualInfo *fl_overlay_visual;
-extern Colormap fl_overlay_colormap;
-extern unsigned long fl_transparent_pixel;
-static GC gc;	// the GC used by all X windows
-extern uchar fl_overlay; // changes how fl_color(x) works
-
-class _Fl_Overlay : public Fl_Window {
-  friend class Fl_Overlay_Window;
-  void flush();
-  void show();
-public:
-  _Fl_Overlay(int x, int y, int w, int h) :
-    Fl_Window(x,y,w,h) {set_flag(INACTIVE);}
-};
-
-int Fl_Overlay_Window::can_do_overlay() {
-  return fl_find_overlay_visual() != 0;
-}
-
-void _Fl_Overlay::show() {
-  if (shown()) {Fl_Window::show(); return;}
-  fl_background_pixel = int(fl_transparent_pixel);
-  Fl_X::make_xid(this, fl_overlay_visual, fl_overlay_colormap);
-  fl_background_pixel = -1;
-  // find the outermost window to tell wm about the colormap:
-  Fl_Window *w = window();
-  for (;;) {Fl_Window *w1 = w->window(); if (!w1) break; w = w1;}
-  XSetWMColormapWindows(fl_display, fl_xid(w), &(Fl_X::i(this)->xid), 1);
-}
-
-void _Fl_Overlay::flush() {
-  fl_window = fl_xid(this);
-  if (!gc) {
-	  gc = XCreateGC(fl_display, fl_xid(this), 0, 0);
-  }
-  fl_gc = gc;
-#if defined(FLTK_USE_CAIRO)
-      if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
-#endif
-  fl_overlay = 1;
-  Fl_Overlay_Window *w = (Fl_Overlay_Window *)parent();
-  Fl_X *myi = Fl_X::i(this);
-  if (damage() != FL_DAMAGE_EXPOSE) XClearWindow(fl_display, fl_xid(this));
-  fl_clip_region(myi->region); myi->region = 0;
-  w->draw_overlay();
-  fl_overlay = 0;
-}
-
-void Fl_Overlay_Window::redraw_overlay() {
-  if (!fl_display) return; // this prevents fluid -c from opening display
-  if (!overlay_) {
-    if (can_do_overlay()) {
-      Fl_Group::current(this);
-      overlay_ = new _Fl_Overlay(0,0,w(),h());
-      Fl_Group::current(0);
-    } else {
-      overlay_ = this;	// fake the overlay
-    }
-  }
-  if (shown()) {
-    if (overlay_ == this) {
-      clear_damage(damage()|FL_DAMAGE_OVERLAY);
-      Fl::damage(FL_DAMAGE_CHILD);
-    } else if (!overlay_->shown())
-      overlay_->show();
-    else
-      overlay_->redraw();
-  }
-}
-
-#endif
-
-//
-// End of "$Id: Fl_Overlay_Window.cxx 8198 2011-01-06 10:24:58Z manolo $".
-//
diff --git a/common/fltk/src/Fl_PNG_Image.cxx b/common/fltk/src/Fl_PNG_Image.cxx
deleted file mode 100644
index 07e9121..0000000
--- a/common/fltk/src/Fl_PNG_Image.cxx
+++ /dev/null
@@ -1,233 +0,0 @@
-//
-// "$Id: Fl_PNG_Image.cxx 8656 2011-05-12 08:07:27Z manolo $"
-//
-// Fl_PNG_Image routines.
-//
-// Copyright 1997-2011 by Easy Software Products.
-// Image support by Matthias Melcher, Copyright 2000-2009.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-
-//
-//   Fl_PNG_Image::Fl_PNG_Image() - Load a PNG image file.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_PNG_Image.H>
-#include <FL/Fl_Shared_Image.H>
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-
-#if defined(HAVE_LIBPNG) && defined(HAVE_LIBZ)
-extern "C"
-{
-#  include <zlib.h>
-#  ifdef HAVE_PNG_H
-#    include <png.h>
-#  else
-#    include <libpng/png.h>
-#  endif // HAVE_PNG_H
-}
-
-typedef struct  {
-  png_structp pp;
-  const unsigned char *current;
-  const unsigned char *last;
-} fl_png_memory;
-
-static void png_read_data_from_mem( png_structp png_ptr, //pointer to our data
-				   png_bytep data,  // where to copy the image data for libpng computing
-				   png_size_t length) // length of data to copy
-{
-  fl_png_memory *png_mem_data = (fl_png_memory*)png_get_io_ptr(png_ptr); // get the pointer to our struct
-  if (png_mem_data->current + length > png_mem_data->last) {
-    png_error(png_mem_data->pp, "Invalid attempt to read row data");
-    return;
-  }
-  /* copy data from image buffer */
-  memcpy (data, png_mem_data->current, length);
-  /* advance in the memory data */
-  png_mem_data->current += length;
-}
-#endif // HAVE_LIBPNG && HAVE_LIBZ
-
-
-/**
-  The constructor loads the named PNG image from the given png filename.
-
-  The destructor frees all memory and server resources that are used by
-  the image.
-
-  \param[in] filename	Name of PNG file to read
-*/
-Fl_PNG_Image::Fl_PNG_Image (const char *filename): Fl_RGB_Image(0,0,0)
-{
-  load_png_(filename, NULL, 0);
-}
-
-/** 
- \brief Constructor that reads a PNG image from memory.
-
- Construct an image from a block of memory inside the application. Fluid offers
- "binary Data" chunks as a great way to add image data into the C++ source code.
- name_png can be NULL. If a name is given, the image is added to the list of 
- shared images (see: Fl_Shared_Image) and will be available by that name.
- 
- \param name_png  A name given to this image or NULL
- \param buffer	  Pointer to the start of the PNG image in memory
- \param maxsize   Size in bytes of the memory buffer containing the PNG image
- */
-Fl_PNG_Image::Fl_PNG_Image (
-      const char *name_png, const unsigned char *buffer, int maxsize): Fl_RGB_Image(0,0,0)
-{
-  load_png_(name_png, buffer, maxsize);
-}
-
-void Fl_PNG_Image::load_png_(const char *name_png, const unsigned char *buffer_png, int maxsize)
-{
-#if defined(HAVE_LIBPNG) && defined(HAVE_LIBZ)
-  int i;	  // Looping var
-  FILE *fp = NULL;	  // File pointer
-  int channels;	  // Number of color channels
-  png_structp pp; // PNG read pointer
-  png_infop info; // PNG info pointers
-  png_bytep *rows;// PNG row pointers
-  fl_png_memory png_mem_data;
-  int from_memory = (buffer_png != NULL); // true if reading image from memory
-
-  if (!from_memory) {
-    if ((fp = fl_fopen(name_png, "rb")) == NULL) return;
-  }
-  else name_png = "In-memory PNG data";
-
-  // Setup the PNG data structures...
-  pp = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-  if (pp) info = png_create_info_struct(pp);
-  if (!pp || !info) {
-    if (pp) png_destroy_read_struct(&pp, NULL, NULL);
-    if (!from_memory) fclose(fp);
-    Fl::warning("Cannot allocate memory to read PNG file or data \"%s\".\n", name_png);
-    return;
-  }
-  
-  if (setjmp(png_jmpbuf(pp)))
-  {
-    png_destroy_read_struct(&pp, &info, NULL);
-    if (!from_memory) fclose(fp);
-    Fl::warning("PNG file or data \"%s\" contains errors!\n", name_png);
-    return;
-  }
-
-  if (from_memory) {
-    png_mem_data.current = buffer_png;
-    png_mem_data.last = buffer_png + maxsize;
-    png_mem_data.pp = pp;
-    // Initialize the function pointer to the PNG read "engine"...
-    png_set_read_fn (pp, (png_voidp) &png_mem_data, png_read_data_from_mem);
-  } else {
-    png_init_io(pp, fp); // Initialize the PNG file read "engine"...
-  }  
-
-  // Get the image dimensions and convert to grayscale or RGB...
-  png_read_info(pp, info);
-
-  if (png_get_color_type(pp, info) == PNG_COLOR_TYPE_PALETTE)
-    png_set_expand(pp);
-
-  if (png_get_color_type(pp, info) & PNG_COLOR_MASK_COLOR)
-    channels = 3;
-  else
-    channels = 1;
-
-  int num_trans = 0;
-  png_get_tRNS(pp, info, 0, &num_trans, 0);
-  if ((png_get_color_type(pp, info) & PNG_COLOR_MASK_ALPHA) || (num_trans != 0))
-    channels ++;
-
-  w((int)(png_get_image_width(pp, info)));
-  h((int)(png_get_image_height(pp, info)));
-  d(channels);
-
-  if (png_get_bit_depth(pp, info) < 8)
-  {
-    png_set_packing(pp);
-    png_set_expand(pp);
-  }
-  else if (png_get_bit_depth(pp, info) == 16)
-    png_set_strip_16(pp);
-
-#  if defined(HAVE_PNG_GET_VALID) && defined(HAVE_PNG_SET_TRNS_TO_ALPHA)
-  // Handle transparency...
-  if (png_get_valid(pp, info, PNG_INFO_tRNS))
-    png_set_tRNS_to_alpha(pp);
-#  endif // HAVE_PNG_GET_VALID && HAVE_PNG_SET_TRNS_TO_ALPHA
-
-  array = new uchar[w() * h() * d()];
-  alloc_array = 1;
-
-  // Allocate pointers...
-  rows = new png_bytep[h()];
-
-  for (i = 0; i < h(); i ++)
-    rows[i] = (png_bytep)(array + i * w() * d());
-
-  // Read the image, handling interlacing as needed...
-  for (i = png_set_interlace_handling(pp); i > 0; i --)
-    png_read_rows(pp, rows, NULL, h());
-
-#ifdef WIN32
-  // Some Windows graphics drivers don't honor transparency when RGB == white
-  if (channels == 4) {
-    // Convert RGB to 0 when alpha == 0...
-    uchar *ptr = (uchar *)array;
-    for (i = w() * h(); i > 0; i --, ptr += 4)
-      if (!ptr[3]) ptr[0] = ptr[1] = ptr[2] = 0;
-  }
-#endif // WIN32
-
-  // Free memory and return...
-  delete[] rows;
-
-  png_read_end(pp, info);
-  png_destroy_read_struct(&pp, &info, NULL);
-
-  if (from_memory) {
-    if (w() && h() && name_png) {
-      Fl_Shared_Image *si = new Fl_Shared_Image(name_png, this);
-      si->add();
-    }
-  } else {
-    fclose(fp);
-  }
-#endif // HAVE_LIBPNG && HAVE_LIBZ
-}
-
-
-//
-// End of "$Id: Fl_PNG_Image.cxx 8656 2011-05-12 08:07:27Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Pack.cxx b/common/fltk/src/Fl_Pack.cxx
deleted file mode 100644
index 5889b9f..0000000
--- a/common/fltk/src/Fl_Pack.cxx
+++ /dev/null
@@ -1,157 +0,0 @@
-//
-// "$Id: Fl_Pack.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Packing widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Based on code by Curtis Edwards
-// Group that compresses all it's children together and resizes to surround
-// them on each redraw (only if box() is zero)
-// Bugs: ?
-
-#include <FL/Fl.H>
-#include <FL/Fl_Pack.H>
-#include <FL/fl_draw.H>
-
-/**
-  Creates a new Fl_Pack widget using the given position, size,
-  and label string. The default boxtype is FL_NO_BOX.
-  <P>The destructor <I>also deletes all the children</I>. This allows a
-  whole tree to be deleted at once, without having to keep a pointer to
-  all the children in the user code. A kludge has been done so the 
-  Fl_Pack and all of it's children can be automatic (local)
-  variables, but you must declare the Fl_Pack<I>first</I>, so
-  that it is destroyed last.
-*/
-Fl_Pack::Fl_Pack(int X, int Y, int W, int H,const char *l)
-: Fl_Group(X, Y, W, H, l) {
-  resizable(0);
-  spacing_ = 0;
-  // type(VERTICAL); // already set like this
-}
-
-void Fl_Pack::draw() {
-  int tx = x()+Fl::box_dx(box());
-  int ty = y()+Fl::box_dy(box());
-  int tw = w()-Fl::box_dw(box());
-  int th = h()-Fl::box_dh(box());
-  int rw, rh;
-  int current_position = horizontal() ? tx : ty;
-  int maximum_position = current_position;
-  uchar d = damage();
-  Fl_Widget*const* a = array();
-  if (horizontal()) {
-    rw = -spacing_;
-    rh = th;
-    
-    for (int i = children(); i--;)
-      if (child(i)->visible()) {
-        if (child(i) != this->resizable()) rw += child(i)->w();
-        rw += spacing_;
-      }
-  } else {
-    rw = tw;
-    rh = -spacing_;
-    
-    for (int i = children(); i--;)
-      if (child(i)->visible()) {
-        if (child(i) != this->resizable()) rh += child(i)->h();
-        rh += spacing_;
-      }
-  }
-  for (int i = children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o->visible()) {
-      int X,Y,W,H;
-      if (horizontal()) {
-        X = current_position;
-        W = o->w();
-        Y = ty;
-        H = th;
-      } else {
-        X = tx;
-        W = tw;
-        Y = current_position;
-        H = o->h();
-      }
-      // Last child, if resizable, takes all remaining room
-      if(i == 0 && o == this->resizable()) {
-        if(horizontal())
-          W = tw - rw;
-        else
-          H = th - rh;
-      }
-      if (spacing_ && current_position>maximum_position && box() &&
-        (X != o->x() || Y != o->y() || d&FL_DAMAGE_ALL)) {
-        fl_color(color());
-        if (horizontal())
-          fl_rectf(maximum_position, ty, spacing_, th);
-        else
-          fl_rectf(tx, maximum_position, tw, spacing_);
-      }
-      if (X != o->x() || Y != o->y() || W != o->w() || H != o->h()) {
-        o->resize(X,Y,W,H);
-        o->clear_damage(FL_DAMAGE_ALL);
-      }
-      if (d&FL_DAMAGE_ALL) {
-        draw_child(*o);
-        draw_outside_label(*o);
-      } else update_child(*o);
-      // child's draw() can change it's size, so use new size:
-      current_position += (horizontal() ? o->w() : o->h());
-      if (current_position > maximum_position)
-        maximum_position = current_position;
-      current_position += spacing_;
-    }
-  }
-  
-  if (horizontal()) {
-    if (maximum_position < tx+tw && box()) {
-      fl_color(color());
-      fl_rectf(maximum_position, ty, tx+tw-maximum_position, th);
-    }
-    tw = maximum_position-tx;
-  } else {
-    if (maximum_position < ty+th && box()) {
-      fl_color(color());
-      fl_rectf(tx, maximum_position, tw, ty+th-maximum_position);
-    }
-    th = maximum_position-ty;
-  }
-  
-  tw += Fl::box_dw(box()); if (tw <= 0) tw = 1;
-  th += Fl::box_dh(box()); if (th <= 0) th = 1;
-  if (tw != w() || th != h()) {
-    Fl_Widget::resize(x(),y(),tw,th);
-    d = FL_DAMAGE_ALL;
-  }
-  if (d&FL_DAMAGE_ALL) {
-    draw_box();
-    draw_label();
-  }
-}
-
-//
-// End of "$Id: Fl_Pack.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Paged_Device.cxx b/common/fltk/src/Fl_Paged_Device.cxx
deleted file mode 100644
index d3ea07b..0000000
--- a/common/fltk/src/Fl_Paged_Device.cxx
+++ /dev/null
@@ -1,297 +0,0 @@
-//
-// "$Id: Fl_Paged_Device.cxx 8621 2011-04-23 15:46:30Z AlbrechtS $"
-//
-// implementation of Fl_Paged_Device class for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-/** \file Fl_Paged_Device.cxx
- \brief implementation of class Fl_Paged_Device.
- */
-
-#include <FL/Fl_Paged_Device.H>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-const char *Fl_Paged_Device::class_id = "Fl_Paged_Device";
-
-
-/**
- @brief Draws the widget on the printed page.
- *
- The widget's position on the printed page is determined by the last call to origin()
- and by the optional delta_x and delta_y arguments.
- Its dimensions are in points unless there was a previous call to scale().
- @param[in] widget Any FLTK widget (e.g., standard, custom, window).
- @param[in] delta_x Optional horizontal offset for positioning the widget relatively
- to the current origin of graphics functions.
- @param[in] delta_y Same as above, vertically.
- */
-void Fl_Paged_Device::print_widget(Fl_Widget* widget, int delta_x, int delta_y) 
-{ 
-  int old_x, old_y, new_x, new_y, is_window;
-  if ( ! widget->visible() ) return;
-  is_window = (widget->as_window() != NULL);
-  widget->damage(FL_DAMAGE_ALL);
-  // set origin to the desired top-left position of the widget
-  origin(&old_x, &old_y);
-  new_x = old_x + delta_x;
-  new_y = old_y + delta_y;
-  if (!is_window) {
-    new_x -= widget->x();
-    new_y -= widget->y();
-  }
-  if (new_x != old_x || new_y != old_y) {
-    translate(new_x - old_x, new_y - old_y );
-  }
-  // if widget is a window, clip all drawings to the window area
-  if (is_window) fl_push_clip(0, 0, widget->w(), widget->h() );
-  // we do some trickery to recognize OpenGL windows and draw them via a plugin
-  int drawn_by_plugin = 0;
-  if (widget->as_gl_window()) {
-    Fl_Plugin_Manager pm("fltk:device");  
-    Fl_Device_Plugin *pi = (Fl_Device_Plugin*)pm.plugin("opengl.device.fltk.org");
-    if (pi) {
-      int width, height;
-      this->printable_rect(&width, &height);
-      drawn_by_plugin = pi->print(widget, 0, 0, height);
-    }
-  }
-  if (!drawn_by_plugin) {
-    widget->draw();
-  }
-  if (is_window) fl_pop_clip();
-  // find subwindows of widget and print them
-  traverse(widget);
-  // reset origin to where it was
-  if (new_x != old_x || new_y != old_y) {
-    untranslate();
-  }
-}
-
-
-void Fl_Paged_Device::traverse(Fl_Widget *widget)
-{
-  Fl_Group *g = widget->as_group();
-  if (!g) return;
-  int n = g->children();
-  for (int i = 0; i < n; i++) {
-    Fl_Widget *c = g->child(i);
-    if ( !c->visible() ) continue;
-    if ( c->as_window() ) {
-      print_widget(c, c->x(), c->y());
-    }
-    else traverse(c);
-  }
-}
-
-/**
- @brief Computes the page coordinates of the current origin of graphics functions.
- *
- @param[out] x If non-null, *x is set to the horizontal page offset of graphics origin.
- @param[out] y Same as above, vertically.
- */
-void Fl_Paged_Device::origin(int *x, int *y)
-{
-  if (x) *x = x_offset;
-  if (y) *y = y_offset;
-}
-
-/**
- @brief Prints a rectangular part of an on-screen window.
-
- @param win The window from where to capture.
- @param x The rectangle left
- @param y The rectangle top
- @param w The rectangle width
- @param h The rectangle height
- @param delta_x Optional horizontal offset from current graphics origin where to print the captured rectangle.
- @param delta_y As above, vertically.
- */
-void Fl_Paged_Device::print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y)
-{
-  Fl_Surface_Device *current = Fl_Surface_Device::surface();
-  Fl_Display_Device::display_device()->set_current();
-  Fl_Window *save_front = Fl::first_window();
-  win->show();
-  fl_gc = NULL;
-  Fl::check();
-  win->make_current();
-  uchar *image_data;
-  image_data = fl_read_image(NULL, x, y, w, h);
-  if (save_front != win) save_front->show();
-  current->set_current();
-  fl_draw_image(image_data, delta_x, delta_y, w, h, 3);
-  delete[] image_data;
-#ifdef WIN32
-  fl_gc = GetDC(fl_xid(win));
-  ReleaseDC(fl_xid(win), fl_gc);
-#endif
-}
-
-/**
- @brief Starts a print job.
-
- @param[in] pagecount the total number of pages of the job
- @param[out] frompage if non-null, *frompage is set to the first page the user wants printed
- @param[out] topage if non-null, *topage is set to the last page the user wants printed
- @return 0 if OK, non-zero if any error
- */
-int Fl_Paged_Device::start_job(int pagecount, int *frompage, int *topage) {return 1;}
-
-/**
- @brief Starts a new printed page
-
- The page coordinates are initially in points, i.e., 1/72 inch, 
- and with origin at the top left of the printable page area.
- @return 0 if OK, non-zero if any error
- */
-int Fl_Paged_Device::start_page (void) {return 1;}
-
-/**
- @brief Computes the width and height of the printable area of the page.
-
- Values are in the same unit as that used by FLTK drawing functions,
- are unchanged by calls to origin(), but are changed by scale() calls.
- Values account for the user-selected paper type and print orientation.
- @return 0 if OK, non-zero if any error
- */
-int Fl_Paged_Device::printable_rect(int *w, int *h) {return 1;}
-
-/**
- @brief Computes the dimensions of margins that lie between the printable page area and
- the full page.
-
- Values are in the same unit as that used by FLTK drawing functions. They are changed
- by scale() calls.
- @param[out] left If non-null, *left is set to the left margin size.
- @param[out] top If non-null, *top is set to the top margin size.
- @param[out] right If non-null, *right is set to the right margin size.
- @param[out] bottom If non-null, *bottom is set to the bottom margin size.
- */
-void Fl_Paged_Device::margins(int *left, int *top, int *right, int *bottom) {}
-
-/**
- @brief Sets the position in page coordinates of the origin of graphics functions.
-
- Arguments should be expressed relatively to the result of a previous printable_rect() call.
- That is, <tt>printable_rect(&w, &h); origin(w/2, 0);</tt> sets the graphics origin at the
- top center of the page printable area.
- Origin() calls are not affected by rotate() calls.
- Successive origin() calls don't combine their effects.
- @param[in] x Horizontal position in page coordinates of the desired origin of graphics functions.
- @param[in] y Same as above, vertically.
- */
-void Fl_Paged_Device::origin(int x, int y) {}
-
-/**
- @brief Changes the scaling of page coordinates.
-
- This function also resets the origin of graphics functions at top left of printable page area.
- After a scale() call, do a printable_rect() call to get the new dimensions of the printable page area.
- Successive scale() calls don't combine their effects.
- @param scale_x Horizontal dimensions of plot are multiplied by this quantity.
- @param scale_y Same as above, vertically. 
-  The value 0. is equivalent to setting \p scale_y = \p scale_x. Thus, scale(factor);
-  is equivalent to scale(factor, factor);
- */
-void Fl_Paged_Device::scale (float scale_x, float scale_y) {}
-
-/**
- @brief Rotates the graphics operations relatively to paper.
-
- The rotation is centered on the current graphics origin. 
- Successive rotate() calls don't combine their effects.
- @param angle Rotation angle in counter-clockwise degrees.
- */
-void Fl_Paged_Device::rotate(float angle) {}
-
-/**
- @brief To be called at the end of each page.
-
- @return 0 if OK, non-zero if any error.
- */
-int Fl_Paged_Device::end_page (void) {return 1;}
-
-/**
- @brief To be called at the end of a print job.
- */
-void Fl_Paged_Device::end_job (void) {}
-
-/**
- @brief Translates the current graphics origin accounting for the current rotation.
-
- This function is only useful after a rotate() call. 
- Each translate() call must be matched by an untranslate() call.
- Successive translate() calls add up their effects.
- */
-void Fl_Paged_Device::translate(int x, int y) {}
-
-/**
- @brief Undoes the effect of a previous translate() call.
- */
-void Fl_Paged_Device::untranslate(void) {}
-
-const Fl_Paged_Device::page_format Fl_Paged_Device::page_formats[NO_PAGE_FORMATS] = { 
-  // order of enum Page_Format
-  // comes from appendix B of 5003.PPD_Spec_v4.3.pdf
-  
-  // A* // index(Ai) = i
-  {2384, 3370, "A0"},
-  {1684, 2384, "A1"},
-  {1191, 1684, "A2"},
-  { 842, 1191, "A3"},
-  { 595,  842, "A4"},
-  { 420,  595, "A5"},
-  { 297,  420, "A6"},
-  { 210,  297, "A7"},
-  { 148,  210, "A8"},
-  { 105,  148, "A9"},
-  
-  // B* // index(Bi) = i+10
-  {2920, 4127, "B0"},
-  {2064, 2920, "B1"},
-  {1460, 2064, "B2"},
-  {1032, 1460, "B3"},
-  { 729, 1032, "B4"},
-  { 516,  729, "B5"},
-  { 363,  516, "B6"},
-  { 258,  363, "B7"},
-  { 181,  258, "B8"},
-  { 127,  181, "B9"},
-  {  91,  127, "B10"},
-  
-  // others
-  { 459,  649, "EnvC5"}, // envelope
-  { 312,  624, "EnvDL"}, // envelope
-  { 522,  756, "Executive"},
-  { 595,  935, "Folio"},
-  {1224,  792, "Ledger"}, // landscape
-  { 612, 1008, "Legal"},
-  { 612,  792, "Letter"},
-  { 792, 1224, "Tabloid"},
-  { 297,  684, "Env10"} // envelope
-};
-
-//
-// End of "$Id: Fl_Paged_Device.cxx 8621 2011-04-23 15:46:30Z AlbrechtS $".
-//
diff --git a/common/fltk/src/Fl_Pixmap.cxx b/common/fltk/src/Fl_Pixmap.cxx
deleted file mode 100644
index 461d970..0000000
--- a/common/fltk/src/Fl_Pixmap.cxx
+++ /dev/null
@@ -1,563 +0,0 @@
-//
-// "$Id: Fl_Pixmap.cxx 8360 2011-02-02 12:42:47Z manolo $"
-//
-// Pixmap drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \fn Fl_Pixmap::Fl_Pixmap(const char **data)
-  The constructors create a new pixmap from the specified XPM data.*/
-
-/** \fn Fl_Pixmap::Fl_Pixmap(const unsigned char * const *data)
-  The constructors create a new pixmap from the specified XPM data.*/
-
-/** \fn Fl_Pixmap::Fl_Pixmap(const unsigned char **data)
-  The constructors create a new pixmap from the specified XPM data.*/
-
-// Draws X pixmap data, keeping it stashed in a server pixmap so it
-// redraws fast.
-
-// See fl_draw_pixmap.cxx for code used to get the actual data into pixmap.
-// Implemented without using the xpm library (which I can't use because
-// it interferes with the color cube used by fl_draw_image).
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Printer.H>
-
-#include <stdio.h>
-#include "flstring.h"
-#include <ctype.h>
-
-#ifdef WIN32
-extern void fl_release_dc(HWND, HDC);      // located in Fl_win32.cxx
-#endif
-
-#ifdef __APPLE_QUARTZ__
-extern Fl_Offscreen fl_create_offscreen_with_alpha(int w, int h);
-#endif
-
-extern uchar **fl_mask_bitmap; // used by fl_draw_pixmap.cxx to store mask
-void fl_restore_clip(); // in fl_rect.cxx
-
-void Fl_Pixmap::measure() {
-  int W, H;
-
-  // ignore empty or bad pixmap data:
-  if (w()<0 && data()) {
-    fl_measure_pixmap(data(), W, H);
-    w(W); h(H);
-  }
-}
-
-void Fl_Pixmap::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
-  fl_graphics_driver->draw(this, XP, YP, WP, HP, cx, cy);
-}
-
-static int start(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int w, int h, int &cx, int &cy, 
-		 int &X, int &Y, int &W, int &H)
-{
-  // ignore empty or bad pixmap data:
-  if (!pxm->data()) {
-    return 2;
-  }
-  if (WP == -1) {
-    WP = w;
-    HP = h;
-  }
-  if (!w) {
-    return 2;
-  }
-  // account for current clip region (faster on Irix):
-  fl_clip_box(XP,YP,WP,HP,X,Y,W,H);
-  cx += X-XP; cy += Y-YP;
-  // clip the box down to the size of image, quit if empty:
-  if (cx < 0) {W += cx; X -= cx; cx = 0;}
-  if (cx+W > w) W = w-cx;
-  if (W <= 0) return 1;
-  if (cy < 0) {H += cy; Y -= cy; cy = 0;}
-  if (cy+H > h) H = h-cy;
-  if (H <= 0) return 1;
-  return 0;
-}
-
-#ifdef __APPLE__
-void Fl_Quartz_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (pxm->w() < 0) pxm->measure();
-  int code = start(pxm, XP, YP, WP, HP, pxm->w(), pxm->h(), cx, cy, X, Y, W, H);
-  if (code) {
-    if (code == 2) pxm->draw_empty(XP, YP);
-    return;
-    }
-  if (!pxm->id_) {
-    pxm->id_ = fl_create_offscreen_with_alpha(pxm->w(), pxm->h());
-    fl_begin_offscreen((Fl_Offscreen)pxm->id_);
-    fl_draw_pixmap(pxm->data(), 0, 0, FL_GREEN);
-    fl_end_offscreen();
-    }
-  fl_copy_offscreen(X, Y, W, H, (Fl_Offscreen)pxm->id_, cx, cy);
-}
-
-#elif defined(WIN32)
-void Fl_GDI_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (pxm->w() < 0) pxm->measure();
-  int code = start(pxm, XP, YP, WP, HP, pxm->w(), pxm->h(), cx, cy, X, Y, W, H);
-  if (code) {
-    if (code == 2) pxm->draw_empty(XP, YP);
-    return;
-  }
-  if (!pxm->id_) {
-    pxm->id_ = fl_create_offscreen(pxm->w(), pxm->h());
-    fl_begin_offscreen((Fl_Offscreen)pxm->id_);
-    uchar *bitmap = 0;
-    fl_mask_bitmap = &bitmap;
-    fl_draw_pixmap(pxm->data(), 0, 0, FL_BLACK);
-    fl_mask_bitmap = 0;
-    if (bitmap) {
-      pxm->mask_ = fl_create_bitmask(pxm->w(), pxm->h(), bitmap);
-      delete[] bitmap;
-    }
-    fl_end_offscreen();
-  }
-  if (Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) {
-    typedef BOOL (WINAPI* fl_transp_func)  (HDC,int,int,int,int,HDC,int,int,int,int,UINT);
-    static HMODULE hMod = NULL;
-    static fl_transp_func fl_TransparentBlt = NULL;
-    if (!hMod) {
-      hMod = LoadLibrary("MSIMG32.DLL");
-      if(hMod) fl_TransparentBlt = (fl_transp_func)GetProcAddress(hMod, "TransparentBlt");
-    }
-    if (fl_TransparentBlt) {
-      Fl_Offscreen tmp_id = fl_create_offscreen(pxm->w(), pxm->h());
-      fl_begin_offscreen(tmp_id);
-      uchar *bitmap = 0;
-      fl_mask_bitmap = &bitmap;
-      // draw pixmap to offscreen
-      fl_draw_pixmap(pxm->data(), 0, 0); 
-      fl_end_offscreen();
-      HDC new_gc = CreateCompatibleDC(fl_gc);
-      int save = SaveDC(new_gc);
-      SelectObject(new_gc, (void*)tmp_id);
-      // print all of offscreen but its parts in background color
-      extern UINT win_pixmap_bg_color; // computed by fl_draw_pixmap()
-      fl_TransparentBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, pxm->w(), pxm->h(), win_pixmap_bg_color );
-      RestoreDC(new_gc,save);
-      DeleteDC(new_gc);
-      fl_delete_offscreen(tmp_id);
-    }
-    else {
-      fl_copy_offscreen(X, Y, W, H, (Fl_Offscreen)pxm->id_, cx, cy);
-    }
-  }
-  else if (pxm->mask_) {
-    HDC new_gc = CreateCompatibleDC(fl_gc);
-    int save = SaveDC(new_gc);
-    SelectObject(new_gc, (void*)pxm->mask_);
-    BitBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, SRCAND);
-    SelectObject(new_gc, (void*)pxm->id_);
-    BitBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, SRCPAINT);
-    RestoreDC(new_gc,save);
-    DeleteDC(new_gc);
-  } else {
-    fl_copy_offscreen(X, Y, W, H, (Fl_Offscreen)pxm->id_, cx, cy);
-  }
-}
-
-#else // Xlib
-void Fl_Xlib_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (pxm->w() < 0) pxm->measure();
-  int code = start(pxm, XP, YP, WP, HP, pxm->w(), pxm->h(), cx, cy, X, Y, W, H);
-  if (code) {
-    if (code == 2) pxm->draw_empty(XP, YP);
-    return;
-  }
-  if (!pxm->id_) {
-    pxm->id_ = fl_create_offscreen(pxm->w(), pxm->h());
-    fl_begin_offscreen((Fl_Offscreen)pxm->id_);
-    uchar *bitmap = 0;
-    fl_mask_bitmap = &bitmap;
-    fl_draw_pixmap(pxm->data(), 0, 0, FL_BLACK);
-    fl_mask_bitmap = 0;
-    if (bitmap) {
-      pxm->mask_ = fl_create_bitmask(pxm->w(), pxm->h(), bitmap);
-      delete[] bitmap;
-    }
-    fl_end_offscreen();
-  }
-  if (pxm->mask_) {
-    // I can't figure out how to combine a mask with existing region,
-    // so cut the image down to a clipped rectangle:
-    int nx, ny; fl_clip_box(X,Y,W,H,nx,ny,W,H);
-    cx += nx-X; X = nx;
-    cy += ny-Y; Y = ny;
-    // make X use the bitmap as a mask:
-    XSetClipMask(fl_display, fl_gc, pxm->mask_);
-    int ox = X-cx; if (ox < 0) ox += pxm->w();
-    int oy = Y-cy; if (oy < 0) oy += pxm->h();
-    XSetClipOrigin(fl_display, fl_gc, X-cx, Y-cy);
-  }
-  fl_copy_offscreen(X, Y, W, H, pxm->id_, cx, cy);
-  if (pxm->mask_) {
-    // put the old clip region back
-    XSetClipOrigin(fl_display, fl_gc, 0, 0);
-    fl_restore_clip();
-  }
-}
-
-#endif
-
-/**
-  The destructor free all memory and server resources that are used by
-  the pixmap.
-*/
-Fl_Pixmap::~Fl_Pixmap() {
-  uncache();
-  delete_data();
-}
-
-void Fl_Pixmap::uncache() {
-  if (id_) {
-    fl_delete_offscreen((Fl_Offscreen)id_);
-    id_ = 0;
-  }
-
-  if (mask_) {
-    fl_delete_bitmask((Fl_Bitmask)mask_);
-    mask_ = 0;
-  }
-}
-
-void Fl_Pixmap::label(Fl_Widget* widget) {
-  widget->image(this);
-}
-
-void Fl_Pixmap::label(Fl_Menu_Item* m) {
-  Fl::set_labeltype(_FL_IMAGE_LABEL, labeltype, Fl_Image::measure);
-  m->label(_FL_IMAGE_LABEL, (const char*)this);
-}
-
-void Fl_Pixmap::copy_data() {
-  if (alloc_data) return;
-
-  char		**new_data,	// New data array
-		**new_row;	// Current row in image
-  int		i,		// Looping var
-		ncolors,	// Number of colors in image
-		chars_per_pixel,// Characters per color
-		chars_per_line;	// Characters per line 
-
-  // Figure out how many colors there are, and how big they are...
-  sscanf(data()[0],"%*d%*d%d%d", &ncolors, &chars_per_pixel);
-  chars_per_line = chars_per_pixel * w() + 1;
-
-  // Allocate memory for the new array...
-  if (ncolors < 0) new_data = new char *[h() + 2];
-  else new_data = new char *[h() + ncolors + 1];
-
-  new_data[0] = new char[strlen(data()[0]) + 1];
-  strcpy(new_data[0], data()[0]);
-
-  // Copy colors...
-  if (ncolors < 0) {
-    // Copy FLTK colormap values...
-    ncolors = -ncolors;
-    new_row = new_data + 1;
-    *new_row = new char[ncolors * 4];
-    memcpy(*new_row, data()[1], ncolors * 4);
-    ncolors = 1;
-    new_row ++;
-  } else {
-    // Copy standard XPM colormap values...
-    for (i = 0, new_row = new_data + 1; i < ncolors; i ++, new_row ++) {
-      *new_row = new char[strlen(data()[i + 1]) + 1];
-      strcpy(*new_row, data()[i + 1]);
-    }
-  }
-
-  // Copy image data...
-  for (i = 0; i < h(); i ++, new_row ++) {
-    *new_row = new char[chars_per_line];
-    memcpy(*new_row, data()[i + ncolors + 1], chars_per_line);
-  }
-
-  // Update pointers...
-  data((const char **)new_data, h() + ncolors + 1);
-  alloc_data = 1;  
-}
-
-Fl_Image *Fl_Pixmap::copy(int W, int H) {
-  Fl_Pixmap	*new_image;	// New pixmap
-
-  // Optimize the simple copy where the width and height are the same...
-  if (W == w() && H == h()) {
-    // Make an exact copy of the image and return it...
-    new_image = new Fl_Pixmap(data());
-    new_image->copy_data();
-    return new_image;
-  }
-  if (W <= 0 || H <= 0) return 0;
-
-  // OK, need to resize the image data; allocate memory and 
-  char		**new_data,	// New array for image data
-		**new_row,	// Pointer to row in image data
-		*new_ptr,	// Pointer into new array
-		new_info[255];	// New information line
-  const char	*old_ptr;	// Pointer into old array
-  int		i,		// Looping var
-		c,		// Channel number
-		sy,		// Source coordinate
-		dx, dy,		// Destination coordinates
-		xerr, yerr,	// X & Y errors
-		xmod, ymod,	// X & Y moduli
-		xstep, ystep;	// X & Y step increments
-  int		ncolors,	// Number of colors in image
-		chars_per_pixel,// Characters per color
-		chars_per_line;	// Characters per line 
-
-  // Figure out how many colors there are, and how big they are...
-  sscanf(data()[0],"%*d%*d%d%d", &ncolors, &chars_per_pixel);
-  chars_per_line = chars_per_pixel * W + 1;
-
-  sprintf(new_info, "%d %d %d %d", W, H, ncolors, chars_per_pixel);
-
-  // Figure out Bresenheim step/modulus values...
-  xmod   = w() % W;
-  xstep  = (w() / W) * chars_per_pixel;
-  ymod   = h() % H;
-  ystep  = h() / H;
-
-  // Allocate memory for the new array...
-  if (ncolors < 0) new_data = new char *[H + 2];
-  else new_data = new char *[H + ncolors + 1];
-  new_data[0] = new char[strlen(new_info) + 1];
-  strcpy(new_data[0], new_info);
-
-  // Copy colors...
-  if (ncolors < 0) {
-    // Copy FLTK colormap values...
-    ncolors = -ncolors;
-    new_row = new_data + 1;
-    *new_row = new char[ncolors * 4];
-    memcpy(*new_row, data()[1], ncolors * 4);
-    ncolors = 1;
-    new_row ++;
-  } else {
-    // Copy standard XPM colormap values...
-    for (i = 0, new_row = new_data + 1; i < ncolors; i ++, new_row ++) {
-      *new_row = new char[strlen(data()[i + 1]) + 1];
-      strcpy(*new_row, data()[i + 1]);
-    }
-  }
-
-  // Scale the image using a nearest-neighbor algorithm...
-  for (dy = H, sy = 0, yerr = H; dy > 0; dy --, new_row ++) {
-    *new_row = new char[chars_per_line];
-    new_ptr  = *new_row;
-
-    for (dx = W, xerr = W, old_ptr = data()[sy + ncolors + 1];
-	 dx > 0;
-	 dx --) {
-      for (c = 0; c < chars_per_pixel; c ++) *new_ptr++ = old_ptr[c];
-
-      old_ptr += xstep;
-      xerr    -= xmod;
-
-      if (xerr <= 0) {
-	xerr    += W;
-	old_ptr += chars_per_pixel;
-      }
-    }
-
-    *new_ptr = '\0';
-    sy       += ystep;
-    yerr     -= ymod;
-    if (yerr <= 0) {
-      yerr += H;
-      sy ++;
-    }
-  }
-
-  new_image = new Fl_Pixmap((char*const*)new_data);
-  new_image->alloc_data = 1;
-
-  return new_image;
-}
-
-void Fl_Pixmap::color_average(Fl_Color c, float i) {
-  // Delete any existing pixmap/mask objects...
-  uncache();
-
-  // Allocate memory as needed...
-  copy_data();
-
-  // Get the color to blend with...
-  uchar		r, g, b;
-  unsigned	ia, ir, ig, ib;
-
-  Fl::get_color(c, r, g, b);
-  if (i < 0.0f) i = 0.0f;
-  else if (i > 1.0f) i = 1.0f;
-
-  ia = (unsigned)(256 * i);
-  ir = r * (256 - ia);
-  ig = g * (256 - ia);
-  ib = b * (256 - ia);
-
-  // Update the colormap to do the blend...
-  char		line[255];	// New colormap line
-  int		color,		// Looping var
-		ncolors,	// Number of colors in image
-		chars_per_pixel;// Characters per color
-
-
-  sscanf(data()[0],"%*d%*d%d%d", &ncolors, &chars_per_pixel);
-
-  if (ncolors < 0) {
-    // Update FLTK colormap...
-    ncolors = -ncolors;
-    uchar *cmap = (uchar *)(data()[1]);
-    for (color = 0; color < ncolors; color ++, cmap += 4) {
-      cmap[1] = (ia * cmap[1] + ir) >> 8;
-      cmap[2] = (ia * cmap[2] + ig) >> 8;
-      cmap[3] = (ia * cmap[3] + ib) >> 8;
-    }
-  } else {
-    // Update standard XPM colormap...
-    for (color = 0; color < ncolors; color ++) {
-      // look for "c word", or last word if none:
-      const char *p = data()[color + 1] + chars_per_pixel + 1;
-      const char *previous_word = p;
-      for (;;) {
-	while (*p && isspace(*p)) p++;
-	char what = *p++;
-	while (*p && !isspace(*p)) p++;
-	while (*p && isspace(*p)) p++;
-	if (!*p) {p = previous_word; break;}
-	if (what == 'c') break;
-	previous_word = p;
-	while (*p && !isspace(*p)) p++;
-      }
-
-      if (fl_parse_color(p, r, g, b)) {
-        r = (ia * r + ir) >> 8;
-        g = (ia * g + ig) >> 8;
-        b = (ia * b + ib) >> 8;
-
-        if (chars_per_pixel > 1) sprintf(line, "%c%c c #%02X%02X%02X",
-	                                 data()[color + 1][0],
-	                                 data()[color + 1][1], r, g, b);
-        else sprintf(line, "%c c #%02X%02X%02X", data()[color + 1][0], r, g, b);
-
-        delete[] (char *)data()[color + 1];
-	((char **)data())[color + 1] = new char[strlen(line) + 1];
-	strcpy((char *)data()[color + 1], line);
-      }
-    }
-  }
-}
-
-void Fl_Pixmap::delete_data() {
-  if (alloc_data) {
-    for (int i = 0; i < count(); i ++) delete[] (char *)data()[i];
-    delete[] (char **)data();
-  }
-}
-
-void Fl_Pixmap::set_data(const char * const * p) {
-  int	height,		// Number of lines in image
-	ncolors;	// Number of colors in image
-
-  if (p) {
-    sscanf(p[0],"%*d%d%d", &height, &ncolors);
-    if (ncolors < 0) data(p, height + 2);
-    else data(p, height + ncolors + 1);
-  }
-}
-
-
-void Fl_Pixmap::desaturate() {
-  // Delete any existing pixmap/mask objects...
-  uncache();
-
-  // Allocate memory as needed...
-  copy_data();
-
-  // Update the colormap to grayscale...
-  char		line[255];	// New colormap line
-  int		i,		// Looping var
-		ncolors,	// Number of colors in image
-		chars_per_pixel;// Characters per color
-  uchar		r, g, b;
-
-  sscanf(data()[0],"%*d%*d%d%d", &ncolors, &chars_per_pixel);
-
-  if (ncolors < 0) {
-    // Update FLTK colormap...
-    ncolors = -ncolors;
-    uchar *cmap = (uchar *)(data()[1]);
-    for (i = 0; i < ncolors; i ++, cmap += 4) {
-      g = (uchar)((cmap[1] * 31 + cmap[2] * 61 + cmap[3] * 8) / 100);
-      cmap[1] = cmap[2] = cmap[3] = g;
-    }
-  } else {
-    // Update standard XPM colormap...
-    for (i = 0; i < ncolors; i ++) {
-      // look for "c word", or last word if none:
-      const char *p = data()[i + 1] + chars_per_pixel + 1;
-      const char *previous_word = p;
-      for (;;) {
-	while (*p && isspace(*p)) p++;
-	char what = *p++;
-	while (*p && !isspace(*p)) p++;
-	while (*p && isspace(*p)) p++;
-	if (!*p) {p = previous_word; break;}
-	if (what == 'c') break;
-	previous_word = p;
-	while (*p && !isspace(*p)) p++;
-      }
-
-      if (fl_parse_color(p, r, g, b)) {
-        g = (uchar)((r * 31 + g * 61 + b * 8) / 100);
-
-        if (chars_per_pixel > 1) sprintf(line, "%c%c c #%02X%02X%02X", data()[i + 1][0],
-	                                 data()[i + 1][1], g, g, g);
-        else sprintf(line, "%c c #%02X%02X%02X", data()[i + 1][0], g, g, g);
-
-        delete[] (char *)data()[i + 1];
-	((char **)data())[i + 1] = new char[strlen(line) + 1];
-	strcpy((char *)data()[i + 1], line);
-      }
-    }
-  }
-}
-
-//
-// End of "$Id: Fl_Pixmap.cxx 8360 2011-02-02 12:42:47Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Positioner.cxx b/common/fltk/src/Fl_Positioner.cxx
deleted file mode 100644
index 1a50630..0000000
--- a/common/fltk/src/Fl_Positioner.cxx
+++ /dev/null
@@ -1,161 +0,0 @@
-//
-// "$Id: Fl_Positioner.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Positioner widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// The positioner widget from Forms, gives 2D input
-// Written by: Mark Overmars
-
-#include <FL/Fl.H>
-#include <FL/Fl_Positioner.H>
-#include <FL/fl_draw.H>
-
-static double flinear(double val, double smin, double smax, double gmin, double gmax)
-{
-  if (smin == smax) return gmax;
-  else return gmin + (gmax - gmin) * (val - smin) / (smax - smin);
-}
-
-void Fl_Positioner::draw(int X, int Y, int W, int H) {
-  int x1 = X + 4;
-  int y1 = Y + 4;
-  int w1 = W - 2 * 4;
-  int h1 = H - 2 * 4;
-  int xx = int(flinear(xvalue(), xmin, xmax, x1, x1+w1-1)+.5);
-  int yy = int(flinear(yvalue(), ymin, ymax, y1, y1+h1-1)+.5);
-  draw_box(box(), X, Y, W, H, color());
-  fl_color(selection_color());
-  fl_xyline(x1, yy, x1+w1);
-  fl_yxline(xx, y1, y1+h1);
-}
-
-void Fl_Positioner::draw() {
-  draw(x(), y(), w(), h());
-  draw_label();
-}
-
-/** Returns the current position in x and y.*/
-int Fl_Positioner::value(double X, double Y) {
-  clear_changed();
-  if (X == xvalue_ && Y == yvalue_) return 0;
-  xvalue_ = X; yvalue_ = Y;
-  redraw();
-  return 1;
-}
-
-/** Sets the X axis coordinate.*/
-int Fl_Positioner::xvalue(double X) {
-  return(value(X, yvalue_));
-}
-
-/** Sets the Y axis coordinate.*/
-int Fl_Positioner::yvalue(double Y) {
-  return(value(xvalue_, Y));
-}
-
-int Fl_Positioner::handle(int event, int X, int Y, int W, int H) {
-  switch (event) {
-  case FL_PUSH:
-  case FL_DRAG:
-  case FL_RELEASE: {
-    double x1 = X + 4;
-    double y1 = Y + 4;
-    double w1 = W - 2 * 4;
-    double h1 = H - 2 * 4;
-    double xx = flinear(Fl::event_x(), x1, x1+w1-1.0, xmin, xmax);
-    if (xstep_) xx = int(xx/xstep_+0.5) * xstep_;
-    if (xmin < xmax) {
-      if (xx < xmin) xx = xmin;
-      if (xx > xmax) xx = xmax;
-    } else {
-      if (xx > xmin) xx = xmin;
-      if (xx < xmax) xx = xmax;
-    }
-    double yy = flinear(Fl::event_y(), y1, y1+h1-1.0, ymin, ymax);
-    if (ystep_) yy = int(yy/ystep_+0.5) * ystep_;
-    if (ymin < ymax) {
-      if (yy < ymin) yy = ymin;
-      if (yy > ymax) yy = ymax;
-    } else {
-      if (yy > ymin) yy = ymin;
-      if (yy < ymax) yy = ymax;
-    }
-    if (xx != xvalue_ || yy != yvalue_) {
-      xvalue_ = xx; yvalue_ = yy;
-      set_changed();
-      redraw();
-                   } }
-    if (!(when() & FL_WHEN_CHANGED ||
-	  (when() & FL_WHEN_RELEASE && event == FL_RELEASE))) return 1;
-    if (changed() || when()&FL_WHEN_NOT_CHANGED) {
-      if (event == FL_RELEASE) clear_changed();
-      do_callback();
-    }
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-int Fl_Positioner::handle(int e) {
-  return handle(e, x(), y(), w(), h());
-}
-
-/**
-  Creates a new Fl_Positioner widget using the given position,
-  size, and label string. The default boxtype is FL_NO_BOX.
-*/
-Fl_Positioner::Fl_Positioner(int X, int Y, int W, int H, const char* l)
-: Fl_Widget(X, Y, W, H, l) {
-  box(FL_DOWN_BOX);
-  selection_color(FL_RED);
-  align(FL_ALIGN_BOTTOM);
-  when(FL_WHEN_CHANGED);
-  xmin = ymin = 0;
-  xmax = ymax = 1;
-  xvalue_ = yvalue_ = .5;
-  xstep_ = ystep_ = 0;
-}
-
-/** Sets the X axis bounds.*/
-void Fl_Positioner::xbounds(double a, double b) {
-  if (a != xmin || b != xmax) {
-    xmin = a; xmax = b;
-    redraw();
-  }
-}
-
-/** Sets the Y axis bounds.*/
-void Fl_Positioner::ybounds(double a, double b) {
-  if (a != ymin || b != ymax) {
-    ymin = a; ymax = b;
-    redraw();
-  }
-}
-
-//
-// End of "$Id: Fl_Positioner.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_PostScript.cxx b/common/fltk/src/Fl_PostScript.cxx
deleted file mode 100644
index e7de956..0000000
--- a/common/fltk/src/Fl_PostScript.cxx
+++ /dev/null
@@ -1,1597 +0,0 @@
-//
-// "$Id: Fl_PostScript.cxx 8623 2011-04-24 17:09:41Z AlbrechtS $"
-//
-// PostScript device support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/fl_ask.H>
-#include <FL/fl_draw.H>
-#include <stdio.h>
-#include <FL/Fl_PostScript.H>
-#include <FL/Fl_Native_File_Chooser.H>
-#if defined(USE_X11)
-#include "Fl_Font.H"
-#if USE_XFT
-#include <X11/Xft/Xft.h>
-#endif
-#endif
-
-const char *Fl_PostScript_Graphics_Driver::class_id = "Fl_PostScript_Graphics_Driver";
-const char *Fl_PostScript_File_Device::class_id = "Fl_PostScript_File_Device";
-/** \brief Label of the PostScript file chooser window */
-const char *Fl_PostScript_File_Device::file_chooser_title = "Select a .ps file";
-
-/**
- @brief The constructor.
- */
-Fl_PostScript_Graphics_Driver::Fl_PostScript_Graphics_Driver(void)
-{
-  close_cmd_ = 0;
-  //lang_level_ = 3;
-  lang_level_ = 2;
-  mask = 0;
-  ps_filename_ = NULL;
-  scale_x = scale_y = 1.;
-  bg_r = bg_g = bg_b = 255;
-}
-
-/** \brief The destructor. */
-Fl_PostScript_Graphics_Driver::~Fl_PostScript_Graphics_Driver() {
-  if(ps_filename_) free(ps_filename_);
-}
-
-/**
- @brief The constructor.
- */
-Fl_PostScript_File_Device::Fl_PostScript_File_Device(void)
-{
-#ifdef __APPLE__
-  gc = fl_gc; // the display context is used by fl_text_extents()
-#endif
-  Fl_Surface_Device::driver( new Fl_PostScript_Graphics_Driver() );
-}
-
-/**
- \brief Returns the PostScript driver of this drawing surface.
- */
-Fl_PostScript_Graphics_Driver *Fl_PostScript_File_Device::driver()
-{
-  return (Fl_PostScript_Graphics_Driver*)Fl_Surface_Device::driver();
-}
-
-
-/**
- @brief Begins the session where all graphics requests will go to a local PostScript file.
- *
- Opens a file dialog entitled with Fl_PostScript_File_Device::file_chooser_title to select an output PostScript file.
- @param pagecount The total number of pages to be created.
- @param format Desired page format.
- @param layout Desired page layout.
- @return 0 if OK, 1 if user cancelled the file dialog, 2 if fopen failed on user-selected output file.
- */
-int Fl_PostScript_File_Device::start_job (int pagecount, enum Fl_Paged_Device::Page_Format format, 
-					  enum Fl_Paged_Device::Page_Layout layout)
-{
-  Fl_Native_File_Chooser fnfc;
-  fnfc.title(Fl_PostScript_File_Device::file_chooser_title);
-  fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE);
-  fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM);
-  fnfc.filter("PostScript\t*.ps\n");
-  // Show native chooser
-  if ( fnfc.show() ) return 1;
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->output = fopen(fnfc.filename(), "w");
-  if(ps->output == NULL) return 2;
-  ps->ps_filename_ = strdup(fnfc.filename());
-  ps->start_postscript(pagecount, format, layout);
-  this->set_current();
-  return 0;
-}
-
-static int dont_close(FILE *f) 
-{
-  return 0;
-}
-
-/**
- @brief Begins the session where all graphics requests will go to FILE pointer.
- *
- @param ps_output A writable FILE pointer that will receive PostScript output and that should not be closed
- until after end_job() has been called.
- @param pagecount The total number of pages to be created.
- @param format Desired page format.
- @param layout Desired page layout.
- @return always 0.
- */
-int Fl_PostScript_File_Device::start_job (FILE *ps_output, int pagecount, 
-    enum Fl_Paged_Device::Page_Format format, enum Fl_Paged_Device::Page_Layout layout)
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->output = ps_output;
-  ps->ps_filename_ = NULL;
-  ps->start_postscript(pagecount, format, layout);
-  ps->close_command(dont_close); // so that end_job() doesn't close the file
-  this->set_current();
-  return 0;
-}
-
-/**
- @brief The destructor.
- */
-Fl_PostScript_File_Device::~Fl_PostScript_File_Device() {
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  if (ps) delete ps;
-}
-
-#ifndef FL_DOXYGEN
-
-#if ! (defined(__APPLE__) || defined(WIN32) )
-  #include "print_panel.cxx"
-#endif
-
-//  Prolog string 
-
-static const char * prolog =
-"%%BeginProlog\n"
-"/L { /y2 exch def\n"
-"/x2 exch def\n"
-"/y1 exch def\n"
-"/x1 exch def\n"
-"newpath   x1 y1 moveto x2 y2 lineto\n"
-"stroke}\n"
-"bind def\n"
-
-
-"/R { /dy exch def\n"
-"/dx exch def\n"
-"/y exch def\n"
-"/x exch def\n"
-"newpath\n"
-"x y moveto\n"
-"dx 0 rlineto\n"
-"0 dy rlineto\n"
-"dx neg 0 rlineto\n"
-"closepath stroke\n"
-"} bind def\n"
-
-"/CL {\n"
-"/dy exch def\n"
-"/dx exch def\n"
-"/y exch def\n"
-"/x exch def\n"
-"newpath\n"
-"x y moveto\n"
-"dx 0 rlineto\n"
-"0 dy rlineto\n"
-"dx neg 0 rlineto\n"
-"closepath\n"
-"clip\n"
-"} bind def\n"
-
-"/FR { /dy exch def\n"
-"/dx exch def\n"
-"/y exch def\n"
-"/x exch def\n"
-"currentlinewidth 0 setlinewidth newpath\n"
-"x y moveto\n"
-"dx 0 rlineto\n"
-"0 dy rlineto\n"
-"dx neg 0 rlineto\n"
-"closepath fill setlinewidth\n"
-"} bind def\n"
-
-"/GS { gsave } bind  def\n"
-"/GR { grestore } bind def\n"
-
-"/SP { showpage } bind def\n"
-"/LW { setlinewidth } bind def\n"
-"/CF /Courier def\n"
-"/SF { /CF exch def } bind def\n"
-"/fsize 12 def\n"
-"/FS { /fsize exch def fsize CF findfont exch scalefont setfont }def \n"
-
-
-"/GL { setgray } bind def\n"
-"/SRGB { setrgbcolor } bind def\n"
-
-//  color images 
-
-"/CI { GS /py exch def /px exch def /sy exch def /sx exch def\n"
-"translate \n"
-"sx sy scale px py 8 \n"
-"[ px 0 0 py neg 0 py ]\n"
-"currentfile /ASCIIHexDecode filter\n false 3"
-" colorimage GR\n"
-"} bind def\n"
-
-//  gray images 
-
-"/GI { GS /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale px py 8 \n"
-
-
-"[ px 0 0 py neg 0 py ]\n"
-"currentfile /ASCIIHexDecode filter\n"
-"image GR\n"
-"} bind def\n"
-
-// single-color bitmask 
-
-"/MI { GS /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale px py true \n"
-"[ px 0 0 py neg 0 py ]\n"
-"currentfile /ASCIIHexDecode filter\n"
-"imagemask GR\n"
-"} bind def\n"
-
-
-//  path 
-
-"/BFP { newpath moveto }  def\n"
-"/BP { newpath } bind def \n"
-"/PL { lineto } bind def \n"
-"/PM { moveto } bind def \n"
-"/MT { moveto } bind def \n"
-"/LT { lineto } bind def \n"
-"/EFP { closepath fill } bind def\n"  //was:stroke
-"/ELP { stroke } bind def\n"  
-"/ECP { closepath stroke } bind def\n"  // Closed (loop)
-"/LW { setlinewidth } bind def\n"
-
-// ////////////////////////// misc ////////////////
-"/TR { translate } bind def\n"
-"/CT { concat } bind def\n"
-"/RCT { matrix invertmatrix concat} bind def\n"
-"/SC { scale } bind def\n"
-//"/GPD { currentpagedevice /PageSize get} def\n"
-
-// show at position with desired width
-// usage:
-// width (string) x y show_pos_width
-"/show_pos_width {GS moveto dup dup stringwidth pop exch length 2 div dup 2 le {pop 9999} if "
-"1 sub exch 3 index exch sub exch "
-"div 0 2 index 1 -1 scale ashow pop pop GR} bind def\n" // spacing altered to match desired width
-//"/show_pos_width {GS moveto dup stringwidth pop 3 2 roll exch div -1 matrix scale concat "
-//"show GR } bind def\n" // horizontally scaled text to match desired width
-
-;
-
-
-static const char * prolog_2 =  // prolog relevant only if lang_level >1
-
-// color image dictionaries
-"/CII {GS /inter exch def /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale\n"
-"/DeviceRGB setcolorspace\n"
-"/IDD 8 dict def\n"
-"IDD begin\n"
-"/ImageType 1 def\n"
-"/Width px def\n"
-"/Height py def\n"
-"/BitsPerComponent 8 def\n"
-"/Interpolate inter def\n"
-"/DataSource currentfile /ASCIIHexDecode filter def\n"
-"/MultipleDataSources false def\n"
-"/ImageMatrix [ px 0 0 py neg 0 py ] def\n"
-"/Decode [ 0 1 0 1 0 1 ] def\n"
-"end\n"
-"IDD image GR} bind def\n"
-
-// gray image dict 
-"/GII {GS /inter exch def /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale\n"
-"/DeviceGray setcolorspace\n"
-"/IDD 8 dict def\n"
-"IDD begin\n"
-"/ImageType 1 def\n"
-"/Width px def\n"
-"/Height py def\n"
-"/BitsPerComponent 8 def\n"
-
-"/Interpolate inter def\n"
-"/DataSource currentfile /ASCIIHexDecode filter def\n"
-"/MultipleDataSources false def\n"
-"/ImageMatrix [ px 0 0 py neg 0 py ] def\n"
-"/Decode [ 0 1 ] def\n"
-"end\n"
-"IDD image GR} bind def\n"
-
-// Create a custom PostScript font derived from PostScript standard text fonts
-// The encoding of this custom font is as follows:
-// 0000-00FF  coincides with Unicode, that is to ASCII + Latin-1
-// 0100-017F  coincides with Unicode, that is to Latin Extended-A
-// 0180-01A6  encodes miscellaneous characters present in PostScript standard text fonts
-
-// use ISOLatin1Encoding for all text fonts
-"/ToISO { dup findfont dup length dict copy begin /Encoding ISOLatin1Encoding def currentdict end definefont pop } def\n"
-"/Helvetica ToISO /Helvetica-Bold ToISO /Helvetica-Oblique ToISO /Helvetica-BoldOblique ToISO \n"
-"/Courier ToISO /Courier-Bold ToISO /Courier-Oblique ToISO /Courier-BoldOblique ToISO \n"
-"/Times-Roman ToISO /Times-Bold ToISO /Times-Italic ToISO /Times-BoldItalic ToISO \n"
-
-// define LatinExtA, the encoding of Latin-extended-A + some additional characters
-// see http://www.adobe.com/devnet/opentype/archives/glyphlist.txt for their names
-"/LatinExtA \n"
-"[ "
-" /Amacron /amacron /Abreve /abreve /Aogonek /aogonek\n" // begin of Latin Extended-A code page
-" /Cacute  /cacute  /Ccircumflex  /ccircumflex  /Cdotaccent  /cdotaccent  /Ccaron  /ccaron \n"
-" /Dcaron  /dcaron   /Dcroat  /dcroat\n"
-" /Emacron  /emacron  /Ebreve  /ebreve  /Edotaccent  /edotaccent  /Eogonek  /eogonek  /Ecaron  /ecaron\n"
-" /Gcircumflex  /gcircumflex  /Gbreve  /gbreve  /Gdotaccent  /gdotaccent  /Gcommaaccent  /gcommaaccent \n"
-" /Hcircumflex /hcircumflex  /Hbar  /hbar  \n"
-" /Itilde  /itilde  /Imacron  /imacron  /Ibreve  /ibreve  /Iogonek  /iogonek /Idotaccent  /dotlessi  \n"
-" /IJ  /ij  /Jcircumflex  /jcircumflex\n"
-" /Kcommaaccent  /kcommaaccent  /kgreenlandic  \n"
-" /Lacute  /lacute  /Lcommaaccent  /lcommaaccent   /Lcaron  /lcaron  /Ldotaccent /ldotaccent   /Lslash  /lslash \n"
-" /Nacute  /nacute  /Ncommaaccent  /ncommaaccent  /Ncaron  /ncaron  /napostrophe  /Eng  /eng  \n"
-" /Omacron  /omacron /Obreve  /obreve  /Ohungarumlaut  /ohungarumlaut  /OE  /oe \n"
-" /Racute  /racute  /Rcommaaccent  /rcommaaccent  /Rcaron  /rcaron \n"
-" /Sacute /sacute  /Scircumflex  /scircumflex  /Scedilla /scedilla /Scaron  /scaron \n"
-" /Tcommaaccent  /tcommaaccent  /Tcaron  /tcaron  /Tbar  /tbar \n"
-" /Utilde  /utilde /Umacron /umacron  /Ubreve  /ubreve  /Uring  /uring  /Uhungarumlaut  /uhungarumlaut  /Uogonek /uogonek \n"
-" /Wcircumflex  /wcircumflex  /Ycircumflex  /ycircumflex  /Ydieresis \n"
-" /Zacute /zacute /Zdotaccent /zdotaccent /Zcaron /zcaron \n"
-" /longs \n" // end of Latin Extended-A code page
-" /florin  /circumflex  /caron  /breve  /dotaccent  /ring \n" // remaining characters from PostScript standard text fonts
-" /ogonek  /tilde  /hungarumlaut  /endash /emdash \n"
-" /quoteleft  /quoteright  /quotesinglbase  /quotedblleft  /quotedblright \n"
-" /quotedblbase  /dagger  /daggerdbl  /bullet  /ellipsis \n"
-" /perthousand  /guilsinglleft  /guilsinglright  /fraction  /Euro \n"
-" /trademark /partialdiff  /Delta /summation  /radical \n"
-" /infinity /notequal /lessequal /greaterequal /lozenge \n"
-" /fi /fl /apple \n"
-" ] def \n"
-// deal with alternative PostScript names of some characters
-" /mycharstrings /Helvetica findfont /CharStrings get def\n"
-" /PSname2 { dup mycharstrings exch known {LatinExtA 3 -1 roll 3 -1 roll put}{pop pop} ifelse } def \n"
-" 16#20 /Gdot PSname2 16#21 /gdot PSname2 16#30 /Idot PSname2 16#3F /Ldot PSname2 16#40 /ldot PSname2 16#7F /slong PSname2 \n"
-
-// proc that gives LatinExtA encoding to a font
-"/ToLatinExtA { findfont dup length dict copy begin /Encoding LatinExtA def currentdict end definefont pop } def\n"
-// create Ext-versions of standard fonts that use LatinExtA encoding \n"
-"/HelveticaExt /Helvetica ToLatinExtA \n"
-"/Helvetica-BoldExt /Helvetica-Bold ToLatinExtA /Helvetica-ObliqueExt /Helvetica-Oblique ToLatinExtA  \n"
-"/Helvetica-BoldObliqueExt /Helvetica-BoldOblique ToLatinExtA  \n"
-"/CourierExt /Courier ToLatinExtA /Courier-BoldExt /Courier-Bold ToLatinExtA  \n"
-"/Courier-ObliqueExt /Courier-Oblique ToLatinExtA /Courier-BoldObliqueExt /Courier-BoldOblique ToLatinExtA \n"
-"/Times-RomanExt /Times-Roman ToLatinExtA /Times-BoldExt /Times-Bold ToLatinExtA  \n"
-"/Times-ItalicExt /Times-Italic ToLatinExtA /Times-BoldItalicExt /Times-BoldItalic ToLatinExtA \n"
-
-// proc to create a Type 0 font with 2-byte encoding 
-// that merges a text font with ISO encoding + same font with LatinExtA encoding
-"/To2byte { 6 dict begin /FontType 0 def \n"
-"/FDepVector 3 1 roll findfont exch findfont 2 array astore def \n"
-"/FontMatrix [1  0  0  1  0  0] def /FMapType 6 def /Encoding [ 0 1 0 ] def\n"
-// 100: Hexa count of ISO array; A7: hexa count of LatinExtA array
-"/SubsVector < 01 0100 00A7 > def\n" 
-"currentdict end definefont pop } def\n"
-// create Type 0 versions of standard fonts
-"/Helvetica2B /HelveticaExt /Helvetica To2byte \n"
-"/Helvetica-Bold2B /Helvetica-BoldExt /Helvetica-Bold To2byte \n"
-"/Helvetica-Oblique2B /Helvetica-ObliqueExt /Helvetica-Oblique To2byte \n"
-"/Helvetica-BoldOblique2B /Helvetica-BoldObliqueExt /Helvetica-BoldOblique To2byte \n"
-"/Courier2B /CourierExt /Courier To2byte \n"
-"/Courier-Bold2B /Courier-BoldExt /Courier-Bold To2byte \n"
-"/Courier-Oblique2B /Courier-ObliqueExt /Courier-Oblique To2byte \n"
-"/Courier-BoldOblique2B /Courier-BoldObliqueExt /Courier-BoldOblique To2byte \n"
-"/Times-Roman2B /Times-RomanExt /Times-Roman To2byte \n"
-"/Times-Bold2B /Times-BoldExt /Times-Bold To2byte \n"
-"/Times-Italic2B /Times-ItalicExt /Times-Italic To2byte \n"
-"/Times-BoldItalic2B /Times-BoldItalicExt /Times-BoldItalic To2byte \n"
-;
-
-static const char * prolog_2_pixmap =  // prolog relevant only if lang_level == 2 for pixmaps/masked color images
-"/pixmap_mat {[ pixmap_sx 0 0 pixmap_sy neg 0 pixmap_sy ]}  bind def\n"
-
-"/pixmap_dict {"
-"<< /PatternType 1 "
-"/PaintType 1 "
-"/TilingType 2 "
-"/BBox [0  0  pixmap_sx  pixmap_sy] "
-"/XStep pixmap_sx "
-"/YStep pixmap_sy\n"
-"/PaintProc "
-"{ begin "
-"pixmap_w pixmap_h scale "
-"pixmap_sx pixmap_sy 8 "
-"pixmap_mat "
-"currentfile /ASCIIHexDecode filter "
-"false 3 "
-"colorimage "
-"end "
-"} bind "
-">>\n"
-"} bind def\n"
-
-"/pixmap_plot {"
-"GS "
-"/pixmap_sy exch def /pixmap_sx exch def\n"
-"/pixmap_h exch def /pixmap_w exch def\n"
-"translate\n"
-"pixmap_dict matrix makepattern setpattern\n"
-"pixmap_w pixmap_h scale\n"
-"pixmap_sx pixmap_sy\n"
-"true\n"
-"pixmap_mat\n"
-"currentfile /ASCIIHexDecode filter\n"
-"imagemask\n"
-"GR\n"
-"} bind def\n"
-;
-
-static const char * prolog_3 = // prolog relevant only if lang_level >2
-
-// masked color images 
-"/CIM {GS /inter exch def /my exch def /mx exch def /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale\n"
-"/DeviceRGB setcolorspace\n"
-
-"/IDD 8 dict def\n"
-
-"IDD begin\n"
-"/ImageType 1 def\n"
-"/Width px def\n"
-"/Height py def\n"
-"/BitsPerComponent 8 def\n"
-"/Interpolate inter def\n"
-"/DataSource currentfile /ASCIIHexDecode filter def\n"
-"/MultipleDataSources false def\n"
-"/ImageMatrix [ px 0 0 py neg 0 py ] def\n"
-
-"/Decode [ 0 1 0 1 0 1 ] def\n"
-"end\n"
-
-"/IMD 8 dict def\n"
-"IMD begin\n"
-"/ImageType 1 def\n"
-"/Width mx def\n"           
-"/Height my def\n"
-"/BitsPerComponent 1 def\n"
-//  "/Interpolate inter def\n"
-"/ImageMatrix [ mx 0 0 my neg 0 my ] def\n"
-"/Decode [ 1 0 ] def\n"
-"end\n"
-
-"<<\n"
-"/ImageType 3\n"
-"/InterleaveType 2\n"
-"/MaskDict IMD\n"
-"/DataDict IDD\n"
-">> image GR\n"
-"} bind def\n"
-
-
-//  masked gray images 
-"/GIM {GS /inter exch def /my exch def /mx exch def /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale\n"
-"/DeviceGray setcolorspace\n"
-
-"/IDD 8 dict def\n"
-
-"IDD begin\n"
-"/ImageType 1 def\n"
-"/Width px def\n"
-"/Height py def\n"
-"/BitsPerComponent 8 def\n"
-"/Interpolate inter def\n"
-"/DataSource currentfile /ASCIIHexDecode filter def\n"
-"/MultipleDataSources false def\n"
-"/ImageMatrix [ px 0 0 py neg 0 py ] def\n"
-
-"/Decode [ 0 1 ] def\n"
-"end\n"
-
-"/IMD 8 dict def\n"
-
-"IMD begin\n"
-"/ImageType 1 def\n"
-"/Width mx def\n"           
-"/Height my def\n"
-"/BitsPerComponent 1 def\n"
-"/ImageMatrix [ mx 0 0 my neg 0 my ] def\n"
-"/Decode [ 1 0 ] def\n"
-"end\n"
-
-"<<\n"
-"/ImageType 3\n"
-"/InterleaveType 2\n"
-"/MaskDict IMD\n"
-"/DataDict IDD\n"
-">> image GR\n"
-"} bind def\n"
-
-
-"\n"
-;
-
-// end prolog 
-
-int Fl_PostScript_Graphics_Driver::start_postscript (int pagecount, 
-    enum Fl_Paged_Device::Page_Format format, enum Fl_Paged_Device::Page_Layout layout)
-//returns 0 iff OK
-{
-  int w, h, x;
-  if (format == Fl_Paged_Device::A4) {
-    left_margin = 18;
-    top_margin = 18;
-  }
-  else {
-    left_margin = 12;
-    top_margin = 12;
-  }
-  page_format_ = (enum Fl_Paged_Device::Page_Format)(format | layout);
-  
-  fputs("%!PS-Adobe-3.0\n", output);
-  fputs("%%Creator: FLTK\n", output);
-  if (lang_level_>1)
-    fprintf(output, "%%%%LanguageLevel: %i\n" , lang_level_);
-  if ((pages_ = pagecount))
-    fprintf(output, "%%%%Pages: %i\n", pagecount);
-  else
-    fputs("%%Pages: (atend)\n", output);
-  fprintf(output, "%%%%BeginFeature: *PageSize %s\n", Fl_Paged_Device::page_formats[format].name );
-  w = Fl_Paged_Device::page_formats[format].width;
-  h = Fl_Paged_Device::page_formats[format].height;
-  if (lang_level_ == 3 && (layout & Fl_Paged_Device::LANDSCAPE) ) { x = w; w = h; h = x; }
-  fprintf(output, "<</PageSize[%d %d]>>setpagedevice\n", w, h );
-  fputs("%%EndFeature\n", output);
-  fputs("%%EndComments\n", output);
-  fputs(prolog, output);
-  if (lang_level_ > 1) {
-    fputs(prolog_2, output);
-    }
-  if (lang_level_ == 2) {
-    fputs(prolog_2_pixmap, output);
-    }
-  if (lang_level_ > 2)
-    fputs(prolog_3, output);
-  if (lang_level_ >= 3) {
-    fputs("/CS { clipsave } bind def\n", output);
-    fputs("/CR { cliprestore } bind def\n", output);
-  } else {
-    fputs("/CS { GS } bind def\n", output);
-    fputs("/CR { GR } bind def\n", output);
-  }
-  page_policy_ = 1;
-  
-  
-  fputs("%%EndProlog\n",output);
-  if (lang_level_ >= 2)
-    fprintf(output,"<< /Policies << /Pagesize 1 >> >> setpagedevice\n");
-  
-  reset();
-  nPages=0;
-  return 0;
-}
-
-void Fl_PostScript_Graphics_Driver::recover(){
-  color(cr_,cg_,cb_);
-  line_style(linestyle_,linewidth_,linedash_);
-  font(Fl_Graphics_Driver::font(), Fl_Graphics_Driver::size());
-}
-
-void Fl_PostScript_Graphics_Driver::reset(){
-  gap_=1;
-  clip_=0;
-  cr_=cg_=cb_=0;
-  Fl_Graphics_Driver::font(FL_HELVETICA, 12);
-  linewidth_=0;
-  linestyle_=FL_SOLID;
-  strcpy(linedash_,"");
-  Clip *c=clip_;   ////just not to have memory leaks for badly writen code (forgotten clip popping)
-  
-  while(c){
-    clip_=clip_->prev;
-    delete c;
-    c=clip_;
-  }
-  
-}
-
-void Fl_PostScript_Graphics_Driver::page_policy(int p){
-  page_policy_ = p;
-  if(lang_level_>=2)
-    fprintf(output,"<< /Policies << /Pagesize %i >> >> setpagedevice\n", p);
-}
-
-// //////////////////// paging //////////////////////////////////////////
-
-
-
-void Fl_PostScript_Graphics_Driver::page(double pw, double ph, int media) {
-  
-  if (nPages){
-    fprintf(output, "CR\nGR\nGR\nGR\nSP\nrestore\n");
-  }
-  ++nPages;
-  fprintf(output, "%%%%Page: %i %i\n" , nPages , nPages);
-  if (pw>ph){
-    fprintf(output, "%%%%PageOrientation: Landscape\n");
-  }else{
-    fprintf(output, "%%%%PageOrientation: Portrait\n");
-  }
-  
-  fprintf(output, "%%%%BeginPageSetup\n");
-  if((media & Fl_Paged_Device::MEDIA) &&(lang_level_>1)){
-    int r = media & Fl_Paged_Device::REVERSED;
-    if(r) r = 2;
-    fprintf(output, "<< /PageSize [%i %i] /Orientation %i>> setpagedevice\n", (int)(pw+.5), (int)(ph+.5), r);
-  }
-  fprintf(output, "%%%%EndPageSetup\n");
-  
-  pw_ = pw;
-  ph_ = ph;
-  reset();
-  
-  fprintf(output, "save\n");
-  fprintf(output, "GS\n");
-  fprintf(output, "%g %g TR\n", (double)0 /*lm_*/ , ph_ /* - tm_*/);
-  fprintf(output, "1 -1 SC\n");
-  line_style(0);
-  fprintf(output, "GS\n");
-  
-  if (!((media & Fl_Paged_Device::MEDIA) &&(lang_level_>1))){
-    if (pw > ph) {
-      if(media & Fl_Paged_Device::REVERSED) {
-        fprintf(output, "-90 rotate %i 0 translate\n", int(-pw));
-	}
-      else {
-        fprintf(output, "90 rotate -%i -%i translate\n", (lang_level_ == 2 ? int(pw - ph) : 0), int(ph));
-	}
-      }
-      else {
-	if(media & Fl_Paged_Device::REVERSED)
-	  fprintf(output, "180 rotate %i %i translate\n", int(-pw), int(-ph));
-	}
-  }
-  fprintf(output, "GS\nCS\n");
-}
-
-void Fl_PostScript_Graphics_Driver::page(int format){
-  
-  
-  if(format &  Fl_Paged_Device::LANDSCAPE){
-    ph_=Fl_Paged_Device::page_formats[format & 0xFF].width;
-    pw_=Fl_Paged_Device::page_formats[format & 0xFF].height;
-  }else{
-    pw_=Fl_Paged_Device::page_formats[format & 0xFF].width;
-    ph_=Fl_Paged_Device::page_formats[format & 0xFF].height;
-  }
-  page(pw_,ph_,format & 0xFF00);//,orientation only;
-}
-
-void Fl_PostScript_Graphics_Driver::rect(int x, int y, int w, int h) {
-  // Commented code does not work, i can't find the bug ;-(
-  // fprintf(output, "GS\n");
-  //  fprintf(output, "%i, %i, %i, %i R\n", x , y , w, h);
-  //  fprintf(output, "GR\n");
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y);
-  fprintf(output, "%i %i LT\n", x+w-1 , y);
-  fprintf(output, "%i %i LT\n", x+w-1 , y+h-1);
-  fprintf(output, "%i %i LT\n", x , y+h-1);
-  fprintf(output, "ECP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::rectf(int x, int y, int w, int h) {
-  fprintf(output, "%g %g %i %i FR\n", x-0.5, y-0.5, w, h);
-}
-
-void Fl_PostScript_Graphics_Driver::line(int x1, int y1, int x2, int y2) {
-  fprintf(output, "GS\n");
-  fprintf(output, "%i %i %i %i L\n", x1 , y1, x2 ,y2);
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::line(int x0, int y0, int x1, int y1, int x2, int y2) {
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x0 , y0);
-  fprintf(output, "%i %i LT\n", x1 , y1);
-  fprintf(output, "%i %i LT\n", x2 , y2);
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::xyline(int x, int y, int x1, int y2, int x3){
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y );
-  fprintf(output, "%i %i LT\n", x1 , y );
-  fprintf(output, "%i %i LT\n", x1 , y2);
-  fprintf(output,"%i %i LT\n", x3 , y2);
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-
-void Fl_PostScript_Graphics_Driver::xyline(int x, int y, int x1, int y2){
-  
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y);
-  fprintf(output,"%i %i LT\n", x1 , y);
-  fprintf(output, "%i %i LT\n", x1 , y2 );
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::xyline(int x, int y, int x1){
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y);
-  fprintf(output, "%i %i LT\n", x1 , y );
-  fprintf(output, "ELP\n");
-  
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::yxline(int x, int y, int y1, int x2, int y3){
-  fprintf(output, "GS\n");
-  
-  fprintf(output,"BP\n");
-  fprintf(output,"%i %i MT\n", x , y);
-  fprintf(output, "%i %i LT\n", x , y1 );
-  fprintf(output, "%i %i LT\n", x2 , y1 );
-  fprintf(output , "%i %i LT\n", x2 , y3);
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::yxline(int x, int y, int y1, int x2){
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y);
-  fprintf(output, "%i %i LT\n", x , y1);
-  fprintf(output, "%i %i LT\n", x2 , y1);
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::yxline(int x, int y, int y1){
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y);
-  fprintf(output, "%i %i LT\n", x , y1);
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::loop(int x0, int y0, int x1, int y1, int x2, int y2) {
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x0 , y0);
-  fprintf(output, "%i %i LT\n", x1 , y1);
-  fprintf(output, "%i %i LT\n", x2 , y2);
-  fprintf(output, "ECP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x0 , y0);
-  fprintf(output, "%i %i LT\n", x1 , y1);
-  fprintf(output, "%i %i LT\n", x2 , y2);
-  fprintf(output, "%i %i LT\n", x3 , y3);
-  fprintf(output, "ECP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::polygon(int x0, int y0, int x1, int y1, int x2, int y2) {
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x0 , y0);
-  fprintf(output,"%i %i LT\n", x1 , y1);
-  fprintf(output, "%i %i LT\n", x2 , y2);
-  fprintf(output, "EFP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x0 , y0 );
-  fprintf(output, "%i %i LT\n", x1 , y1 );
-  fprintf(output, "%i %i LT\n", x2 , y2 );
-  fprintf(output, "%i %i LT\n", x3 , y3 );
-  
-  fprintf(output, "EFP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::point(int x, int y){
-  rectf(x,y,1,1);
-}
-
-static int dashes_flat[5][7]={
-{-1,0,0,0,0,0,0},
-{3,1,-1,0,0,0,0},
-{1,1,-1,0,0,0,0},
-{3,1,1,1,-1,0,0},
-{3,1,1,1,1,1,-1}
-};
-
-
-//yeah, hack...
-static double dashes_cap[5][7]={
-{-1,0,0,0,0,0,0},
-{2,2,-1,0,0,0,0},
-{0.01,1.99,-1,0,0,0,0},
-{2,2,0.01,1.99,-1,0,0},
-{2,2,0.01,1.99,0.01,1.99,-1}
-};
-
-
-void Fl_PostScript_Graphics_Driver::line_style(int style, int width, char* dashes){
-  //line_styled_=1;
-  
-  linewidth_=width;
-  linestyle_=style;
-  //dashes_= dashes;
-  if(dashes){
-    if(dashes != linedash_)
-      strcpy(linedash_,dashes);
-    
-  }else
-    linedash_[0]=0;
-  char width0 = 0;
-  if(!width){
-    width=1; //for screen drawing compatibility
-    width0=1;
-  }
-  
-  fprintf(output, "%i setlinewidth\n", width);
-  
-  if(!style && (!dashes || !(*dashes)) && width0) //system lines
-    style = FL_CAP_SQUARE;
-  
-  int cap = (style &0xf00) >> 8;
-  if(cap) cap--;
-  fprintf(output,"%i setlinecap\n", cap);
-  
-  int join = (style & 0xf000) >> 12;
-  
-  if(join) join--;
-  fprintf(output,"%i setlinejoin\n", join);
-  
-  
-  fprintf(output, "[");
-  if(dashes && *dashes){
-    while(*dashes){
-      fprintf(output, "%i ", *dashes);
-      dashes++;
-    }
-  }else{
-    int * ds; 
-    if(style & 0x200){ // round and square caps, dash length need to be adjusted
-      double *dt = dashes_cap[style & 0xff];
-      while (*dt >= 0){
-	fprintf(output, "%g ",width * (*dt));
-	dt++;
-      }
-    }else{
-      
-      ds = dashes_flat[style & 0xff];
-      while (*ds >= 0){
-	fprintf(output, "%i ",width * (*ds));
-        ds++;
-      }
-    }
-  }
-  fprintf(output, "] 0 setdash\n");
-}
-
-static const char *_fontNames[] = {
-"Helvetica2B", 
-"Helvetica-Bold2B",
-"Helvetica-Oblique2B",
-"Helvetica-BoldOblique2B",
-"Courier2B",
-"Courier-Bold2B",
-"Courier-Oblique2B",
-"Courier-BoldOblique2B",
-"Times-Roman2B",
-"Times-Bold2B",
-"Times-Italic2B",
-"Times-BoldItalic2B",
-"Symbol",
-"Courier2B",
-"Courier-Bold2B",
-"ZapfDingbats"
-};
-
-void Fl_PostScript_Graphics_Driver::font(int f, int s) {
-  Fl_Graphics_Driver *driver = Fl_Display_Device::display_device()->driver();
-  driver->font(f,s); // Use display fonts for font measurement
-  Fl_Graphics_Driver::font(f, s);
-  Fl_Font_Descriptor *desc = driver->font_descriptor();
-  this->font_descriptor(desc);
-  if (f < FL_FREE_FONT) {
-    float ps_size = s;
-    fprintf(output, "/%s SF\n" , _fontNames[f]);
-#if defined(USE_X11) 
-#if USE_XFT
-    // Xft font height is sometimes larger than the required size (see STR 2566).
-    // Increase the PostScript font size by 15% without exceeding the display font height 
-    int max = desc->font->height;
-    ps_size = s * 1.15;
-    if (ps_size > max) ps_size = max;
-#else
-    // Non-Xft fonts can be smaller than required.
-    // Set the PostScript font size to the display font height 
-    char *name = desc->font->font_name_list[0];
-    char *p = strstr(name, "--");
-    if (p) {
-      sscanf(p + 2, "%f", &ps_size);
-    }
-#endif // USE_XFT
-#endif // USE_X11
-    fprintf(output,"%.1f FS\n", ps_size);
-  }
-}
-
-double Fl_PostScript_Graphics_Driver::width(const char *s, int n) {
-  return Fl_Display_Device::display_device()->driver()->width(s, n);
-}
-
-int Fl_PostScript_Graphics_Driver::height() {
-  return Fl_Display_Device::display_device()->driver()->height();
-}
-
-int Fl_PostScript_Graphics_Driver::descent() {
-  return Fl_Display_Device::display_device()->driver()->descent();
-}
-
-void Fl_PostScript_Graphics_Driver::text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h) {
-  Fl_Display_Device::display_device()->driver()->text_extents(c, n, dx, dy, w, h);
-}
-
-
-void Fl_PostScript_Graphics_Driver::color(Fl_Color c) {
-  Fl::get_color(c, cr_, cg_, cb_);
-  color(cr_, cg_, cb_);
-}
-
-void Fl_PostScript_Graphics_Driver::color(unsigned char r, unsigned char g, unsigned char b) {
-  Fl_Graphics_Driver::color( fl_rgb_color(r, g, b) );
-  cr_ = r; cg_ = g; cb_ = b;
-  if (r == g && g == b) {
-    double gray = r/255.0;
-    fprintf(output, "%g GL\n", gray);
-  } else {
-    double fr, fg, fb;
-    fr = r/255.0;
-    fg = g/255.0;
-    fb = b/255.0;
-    fprintf(output, "%g %g %g SRGB\n", fr , fg , fb);
-  }
-}
-
-void Fl_PostScript_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y)
-{
-  fprintf(output, "GS %d %d translate %d rotate\n", x, y, - angle);
-  this->transformed_draw(str, n, 0, 0);
-  fprintf(output, "GR\n");
-}
-
-
-// computes the mask for the RGB image img of all pixels with color != bg
-static uchar *calc_mask(uchar *img, int w, int h, Fl_Color bg)
-{
-  uchar red, green, blue, r, g, b;
-  uchar bit, byte, *q;
-  Fl::get_color(bg, red, green, blue);
-  int W = (w+7)/8; // width of mask
-  uchar* mask = new uchar[W * h];
-  q = mask;
-  while (h-- > 0) { // for each row
-    bit = 0x80; // byte with last bit set
-    byte = 0; // next mask byte to compute
-    for (int j = 0; j < w; j++) { // for each column
-      r = *img++; // the pixel color components
-      g = *img++;
-      b = *img++;
-      // if pixel doesn't have bg color, put it in mask
-      if (r != red || g != green || b != blue) byte |= bit;
-      bit = bit>>1; // shift bit one step to the right
-      if (bit == 0) { // single set bit has fallen out
-	*q++ = byte; // enter byte in mask
-	byte = 0; // reset next mask byte to zero
-	bit = 0x80; // and this byte
-	}
-      }
-    if (bit != 0x80) *q++ = byte; // enter last columns' byte in mask
-    }
-  return mask;
-}
-
-// write to PostScript a bitmap image of a UTF8 string
-static void transformed_draw_extra(const char* str, int n, double x, double y, int w, 
-      FILE *output, Fl_Graphics_Driver *driver, bool rtl) {
-  // scale for bitmask computation
-#if defined(USE_X11) && !USE_XFT
-  float scale = 1; // don't scale because we can't expect to have scalable fonts
-#else
-  float scale = 2;
-#endif
-  Fl_Fontsize old_size = driver->size();
-  Fl_Font fontnum = driver->font();
-  int w_scaled =  (int)(w * (scale + 0.5));
-  int h = (int)(driver->height() * scale);
-  // create an offscreen image of the string
-  Fl_Color text_color = driver->color();
-  Fl_Color bg_color = fl_contrast(FL_WHITE, text_color);
-  Fl_Offscreen off = fl_create_offscreen(w_scaled, (int)(h+3*scale) );
-  fl_begin_offscreen(off);
-  fl_color(bg_color);
-  // color offscreen background with a shade contrasting with the text color
-  fl_rectf(0, 0, w_scaled, (int)(h+3*scale) );
-  fl_color(text_color);
-#if defined(USE_X11) && !USE_XFT
-  // force seeing this font as new so it's applied to the offscreen graphics context
-  fl_graphics_driver->font_descriptor(NULL);
-  fl_font(fontnum, 0);
-#endif
-  fl_font(fontnum, (Fl_Fontsize)(scale * old_size) );
-  int w2 = (int)fl_width(str, n);
-  // draw string in offscreen
-  if (rtl) fl_rtl_draw(str, n, w2, (int)(h * 0.8) );
-  else fl_draw(str, n, 1, (int)(h * 0.8) );
-  // read (most of) the offscreen image
-  uchar *img = fl_read_image(NULL, 1, 1, w2, h, 0);
-  fl_end_offscreen();
-  driver->font(fontnum, old_size);
-  fl_delete_offscreen(off);
-  // compute the mask of what is not the background
-  uchar *mask = calc_mask(img, w2, h, bg_color);
-  delete[] img;
-  // write the string image to PostScript as a scaled bitmask
-  scale = w2 / float(w);
-  fprintf(output, "%g %g %g %g %d %d MI\n", x, y - h*0.77/scale, w2/scale, h/scale, w2, h);
-  uchar *di;
-  int wmask = (w2+7)/8;
-  for (int j = h - 1; j >= 0; j--){
-    di = mask + j * wmask;
-    for (int i = 0; i < wmask; i++){
-      //if (!(i%80)) fprintf(output, "\n"); // don't have lines longer than 255 chars
-      fprintf(output, "%2.2x", *di );
-      di++;
-    }
-    fprintf(output,"\n");
-  }
-  fprintf(output,">\n");
-  delete[] mask;
-}
-
-static int is_in_table(unsigned utf) {
-  unsigned i;
-  static unsigned extra_table_roman[] = { // unicodes/*names*/ of other characters from PostScript standard fonts
-    0x192/*florin*/, 0x2C6/*circumflex*/, 0x2C7/*caron*/, 
-    0x2D8/*breve*/, 0x2D9/*dotaccent*/, 0x2DA/*ring*/, 0x2DB/*ogonek*/, 0x2DC/*tilde*/, 0x2DD/*hungarumlaut*/,
-    0x2013/*endash*/, 0x2014/*emdash*/, 0x2018/*quoteleft*/, 0x2019/*quoteright*/, 
-    0x201A/*quotesinglbase*/, 0x201C/*quotedblleft*/, 0x201D/*quotedblright*/, 0x201E/*quotedblbase*/, 
-    0x2020/*dagger*/, 0x2021/*daggerdbl*/, 0x2022/*bullet*/,
-    0x2026/*ellipsis*/, 0x2030/*perthousand*/, 0x2039/*guilsinglleft*/, 0x203A/*guilsinglright*/, 
-    0x2044/*fraction*/, 0x20AC/*Euro*/, 0x2122/*trademark*/, 
-    0x2202/*partialdiff*/, 0x2206/*Delta*/, 0x2211/*summation*/, 0x221A/*radical*/,
-    0x221E/*infinity*/, 0x2260/*notequal*/, 0x2264/*lessequal*/, 
-    0x2265/*greaterequal*/, 
-    0x25CA/*lozenge*/, 0xFB01/*fi*/, 0xFB02/*fl*/,
-    0xF8FF/*apple*/
-  };
-  for ( i = 0; i < sizeof(extra_table_roman)/sizeof(int); i++) {
-    if (extra_table_roman[i] == utf) return i + 0x180;
-  }
-  return 0;
-}
-
-// outputs in PostScript a UTF8 string using the same width in points as on display
-void Fl_PostScript_Graphics_Driver::transformed_draw(const char* str, int n, double x, double y) {
-  int len, code;
-  if (!n || !str || !*str) return;
-  // compute display width of string
-  int w = (int)width(str, n);
-  if (w == 0) return;
-  if (Fl_Graphics_Driver::font() >= FL_FREE_FONT) {
-    transformed_draw_extra(str, n, x, y, w, output, this, false);
-    return;
-    }
-  fprintf(output, "%d <", w);
-  // transforms UTF8 encoding to our custom PostScript encoding as follows:
-  // extract each unicode character
-  // if unicode <= 0x17F, unicode and PostScript codes are identical
-  // if unicode is one of the values listed in extra_table_roman above
-  //    its PostScript code is 0x180 + the character's rank in extra_table_roman
-  // if unicode is something else, draw all string as bitmap image
-
-  const char *last = str + n;
-  const char *str2 = str;
-  while (str2 < last) {
-    // Extract each unicode character of string.
-    unsigned utf = fl_utf8decode(str2, last, &len);
-    str2 += len;
-    if (utf <= 0x17F) { // until Latin Extended-A
-      ;
-      }
-    else if ( (code = is_in_table(utf)) != 0) { // other handled characters
-      utf = code;
-      }
-    else { // unhandled character: draw all string as bitmap image
-      fprintf(output, "> pop pop\n"); // close and ignore the opened hex string
-      transformed_draw_extra(str, n, x, y, w, output, this, false);
-      return;
-    }
-    fprintf(output, "%4.4X", utf);
-  }
-  fprintf(output, "> %g %g show_pos_width\n", x, y);
-}
-
-void Fl_PostScript_Graphics_Driver::rtl_draw(const char* str, int n, int x, int y) {
-  int w = (int)width(str, n);
-  transformed_draw_extra(str, n, x - w, y, w, output, this, true);
-}
-
-void Fl_PostScript_Graphics_Driver::concat(){
-  fprintf(output,"[%g %g %g %g %g %g] CT\n", fl_matrix->a , fl_matrix->b , fl_matrix->c , fl_matrix->d , fl_matrix->x , fl_matrix->y);
-}
-
-void Fl_PostScript_Graphics_Driver::reconcat(){
-  fprintf(output, "[%g %g %g %g %g %g] RCT\n" , fl_matrix->a , fl_matrix->b , fl_matrix->c , fl_matrix->d , fl_matrix->x , fl_matrix->y);
-}
-
-/////////////////  transformed (double) drawings ////////////////////////////////
-
-
-void Fl_PostScript_Graphics_Driver::begin_points(){
-  fprintf(output, "GS\n");
-  concat();
-  
-  fprintf(output, "BP\n");
-  gap_=1;
-  shape_=POINTS;
-}
-
-void Fl_PostScript_Graphics_Driver::begin_line(){
-  fprintf(output, "GS\n");
-  concat();
-  fprintf(output, "BP\n");
-  gap_=1;
-  shape_=LINE;
-}
-
-void Fl_PostScript_Graphics_Driver::begin_loop(){
-  fprintf(output, "GS\n");
-  concat();
-  fprintf(output, "BP\n");
-  gap_=1;
-  shape_=LOOP;
-}
-
-void Fl_PostScript_Graphics_Driver::begin_polygon(){
-  fprintf(output, "GS\n");
-  concat();
-  fprintf(output, "BP\n");
-  gap_=1;
-  shape_=POLYGON;
-}
-
-void Fl_PostScript_Graphics_Driver::vertex(double x, double y){
-  if(shape_==POINTS){
-    fprintf(output,"%g %g MT\n", x , y);
-    gap_=1;
-    return;
-  }
-  if(gap_){
-    fprintf(output,"%g %g MT\n", x , y);
-    gap_=0;
-  }else
-    fprintf(output, "%g %g LT\n", x , y);
-}
-
-void Fl_PostScript_Graphics_Driver::curve(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3){
-  if(shape_==NONE) return;
-  if(gap_)
-    fprintf(output,"%g %g MT\n", x , y);
-  else
-    fprintf(output, "%g %g LT\n", x , y);
-  gap_=0;
-  
-  fprintf(output, "%g %g %g %g %g %g curveto \n", x1 , y1 , x2 , y2 , x3 , y3);
-}
-
-
-void Fl_PostScript_Graphics_Driver::circle(double x, double y, double r){
-  if(shape_==NONE){
-    fprintf(output, "GS\n");
-    concat();
-    //    fprintf(output, "BP\n");
-    fprintf(output,"%g %g %g 0 360 arc\n", x , y , r);
-    reconcat();
-    //    fprintf(output, "ELP\n");
-    fprintf(output, "GR\n");
-  }else
-    
-    fprintf(output, "%g %g %g 0 360 arc\n", x , y , r);
-  
-}
-
-void Fl_PostScript_Graphics_Driver::arc(double x, double y, double r, double start, double a){
-  if(shape_==NONE) return;
-  gap_=0;
-  if(start>a)
-    fprintf(output, "%g %g %g %g %g arc\n", x , y , r , -start, -a);
-  else
-    fprintf(output, "%g %g %g %g %g arcn\n", x , y , r , -start, -a);
-  
-}
-
-void Fl_PostScript_Graphics_Driver::arc(int x, int y, int w, int h, double a1, double a2) {
-  fprintf(output, "GS\n");
-  //fprintf(output, "BP\n");
-  begin_line();
-  fprintf(output, "%g %g TR\n", x + w/2.0 -0.5 , y + h/2.0 - 0.5);
-  fprintf(output, "%g %g SC\n", (w-1)/2.0 , (h-1)/2.0 );
-  arc(0,0,1,a2,a1);
-  //  fprintf(output, "0 0 1 %g %g arc\n" , -a1 , -a2);
-  fprintf(output, "%g %g SC\n", 2.0/(w-1) , 2.0/(h-1) );
-  fprintf(output, "%g %g TR\n", -x - w/2.0 +0.5 , -y - h/2.0 +0.5);
-  end_line();
-  
-  //  fprintf(output, "%g setlinewidth\n",  2/sqrt(w*h));
-  //  fprintf(output, "ELP\n");
-  //  fprintf(output, 2.0/w , 2.0/w , " SC\n";
-  //  fprintf(output, (-x - w/2.0) , (-y - h/2)  , " TR\n";
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::pie(int x, int y, int w, int h, double a1, double a2) {
-  
-  fprintf(output, "GS\n");
-  fprintf(output, "%g %g TR\n", x + w/2.0 -0.5 , y + h/2.0 - 0.5);
-  fprintf(output, "%g %g SC\n", (w-1)/2.0 , (h-1)/2.0 );
-  begin_polygon();
-  vertex(0,0);
-  arc(0.0,0.0, 1, a2, a1);
-  end_polygon();
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::end_points(){
-  gap_=1;
-  reconcat();
-  fprintf(output, "ELP\n"); //??
-  fprintf(output, "GR\n");
-  shape_=NONE;
-}
-
-void Fl_PostScript_Graphics_Driver::end_line(){
-  gap_=1;
-  reconcat();
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-  shape_=NONE;
-}
-void Fl_PostScript_Graphics_Driver::end_loop(){
-  gap_=1;
-  reconcat();
-  fprintf(output, "ECP\n");
-  fprintf(output, "GR\n");
-  shape_=NONE;
-}
-
-void Fl_PostScript_Graphics_Driver::end_polygon(){
-  
-  gap_=1;
-  reconcat();
-  fprintf(output, "EFP\n");
-  fprintf(output, "GR\n");
-  shape_=NONE;
-}
-
-void Fl_PostScript_Graphics_Driver::transformed_vertex(double x, double y){
-  reconcat();
-  if(gap_){
-    fprintf(output, "%g %g MT\n", x , y);
-    gap_=0;
-  }else
-    fprintf(output, "%g %g LT\n", x , y);
-  concat();
-}
-
-/////////////////////////////   Clipping /////////////////////////////////////////////
-
-void Fl_PostScript_Graphics_Driver::push_clip(int x, int y, int w, int h) {
-  Clip * c=new Clip();
-  clip_box(x,y,w,h,c->x,c->y,c->w,c->h);
-  c->prev=clip_;
-  clip_=c;
-  fprintf(output, "CR\nCS\n");
-  if(lang_level_<3)
-    recover();
-  fprintf(output, "%g %g %i %i CL\n", clip_->x-0.5 , clip_->y-0.5 , clip_->w  , clip_->h);
-  
-}
-
-void Fl_PostScript_Graphics_Driver::push_no_clip() {
-  Clip * c = new Clip();
-  c->prev=clip_;
-  clip_=c;
-  clip_->x = clip_->y = clip_->w = clip_->h = -1;
-  fprintf(output, "CR\nCS\n");
-  if(lang_level_<3)
-    recover();
-}
-
-void Fl_PostScript_Graphics_Driver::pop_clip() {
-  if(!clip_)return;
-  Clip * c=clip_;
-  clip_=clip_->prev;
-  delete c;
-  fprintf(output, "CR\nCS\n");
-  if(clip_ && clip_->w >0)
-    fprintf(output, "%g %g %i %i CL\n", clip_->x - 0.5, clip_->y - 0.5, clip_->w  , clip_->h);
-  // uh, -0.5 is to match screen clipping, for floats there should be something beter
-  if(lang_level_<3)
-    recover();
-}
-
-int Fl_PostScript_Graphics_Driver::clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H){
-  if(!clip_){
-    X=x;Y=y;W=w;H=h;
-    return 1;
-  }
-  if(clip_->w < 0){
-    X=x;Y=y;W=w;H=h;
-    return 1;
-  }
-  int ret=0;
-  if (x > (X=clip_->x)) {X=x; ret=1;}
-  if (y > (Y=clip_->y)) {Y=y; ret=1;}
-  if ((x+w) < (clip_->x+clip_->w)) {
-    W=x+w-X;
-    
-    ret=1;
-    
-  }else
-    W = clip_->x + clip_->w - X;
-  if(W<0){
-    W=0;
-    return 1;
-  }
-  if ((y+h) < (clip_->y+clip_->h)) {
-    H=y+h-Y;
-    ret=1;
-  }else
-    H = clip_->y + clip_->h - Y;
-  if(H<0){
-    W=0;
-    H=0;
-    return 1;
-  }
-  return ret;
-}
-
-int Fl_PostScript_Graphics_Driver::not_clipped(int x, int y, int w, int h){
-  if(!clip_) return 1;
-  if(clip_->w < 0) return 1;
-  int X, Y, W, H;
-  clip_box(x, y, w, h, X, Y, W, H);
-  if(W) return 1;
-  return 0;
-}
-
-
-void Fl_PostScript_File_Device::margins(int *left, int *top, int *right, int *bottom) // to implement
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  if(left) *left = (int)(ps->left_margin / ps->scale_x + .5);
-  if(right) *right = (int)(ps->left_margin / ps->scale_x + .5);
-  if(top) *top = (int)(ps->top_margin / ps->scale_y + .5);
-  if(bottom) *bottom = (int)(ps->top_margin / ps->scale_y + .5);
-}
-
-int Fl_PostScript_File_Device::printable_rect(int *w, int *h)
-//returns 0 iff OK
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  if(w) *w = (int)((ps->pw_ - 2 * ps->left_margin) / ps->scale_x + .5);
-  if(h) *h = (int)((ps->ph_ - 2 * ps->top_margin) / ps->scale_y + .5);
-  return 0;
-}
-
-void Fl_PostScript_File_Device::origin(int *x, int *y)
-{
-  Fl_Paged_Device::origin(x, y);
-}
-
-void Fl_PostScript_File_Device::origin(int x, int y)
-{
-  x_offset = x;
-  y_offset = y;
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  fprintf(ps->output, "GR GR GS %d %d TR  %f %f SC %d %d TR %f rotate GS\n", 
-	  ps->left_margin, ps->top_margin, ps->scale_x, ps->scale_y, x, y, ps->angle);
-}
-
-void Fl_PostScript_File_Device::scale (float s_x, float s_y)
-{
-  if (s_y == 0.) s_y = s_x;
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->scale_x = s_x;
-  ps->scale_y = s_y;
-  fprintf(ps->output, "GR GR GS %d %d TR  %f %f SC %f rotate GS\n", 
-	  ps->left_margin, ps->top_margin, ps->scale_x, ps->scale_y, ps->angle);
-}
-
-void Fl_PostScript_File_Device::rotate (float rot_angle)
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->angle = - rot_angle;
-  fprintf(ps->output, "GR GR GS %d %d TR  %f %f SC %d %d TR %f rotate GS\n", 
-	  ps->left_margin, ps->top_margin, ps->scale_x, ps->scale_y, x_offset, y_offset, ps->angle);
-}
-
-void Fl_PostScript_File_Device::translate(int x, int y)
-{
-  fprintf(driver()->output, "GS %d %d translate GS\n", x, y);
-}
-
-void Fl_PostScript_File_Device::untranslate(void)
-{
-  fprintf(driver()->output, "GR GR\n");
-}
-
-int Fl_PostScript_File_Device::start_page (void)
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->page(ps->page_format_);
-  x_offset = 0;
-  y_offset = 0;
-  ps->scale_x = ps->scale_y = 1.;
-  ps->angle = 0;
-  fprintf(ps->output, "GR GR GS %d %d translate GS\n", ps->left_margin, ps->top_margin);
-  return 0;
-}
-
-int Fl_PostScript_File_Device::end_page (void)
-{
-  return 0;
-}
-
-void Fl_PostScript_File_Device::end_job (void)
-// finishes PostScript & closes file
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  if (ps->nPages) {  // for eps nPages is 0 so it is fine ....
-    fprintf(ps->output, "CR\nGR\nGR\nGR\nSP\n restore\n");
-    if (!ps->pages_){
-      fprintf(ps->output, "%%%%Trailer\n");
-      fprintf(ps->output, "%%%%Pages: %i\n" , ps->nPages);
-    };
-  } else
-    fprintf(ps->output, "GR\n restore\n");
-  fputs("%%EOF",ps->output);
-  ps->reset();
-  fflush(ps->output);
-  if(ferror(ps->output)) {
-    fl_alert ("Error during PostScript data output.");
-    }
-  if (ps->close_cmd_) {
-    (*ps->close_cmd_)(ps->output);
-  } else {
-    fclose(ps->output);
-    }
-  while (ps->clip_){
-    Fl_PostScript_Graphics_Driver::Clip * c= ps->clip_;
-    ps->clip_= ps->clip_->prev;
-    delete c;
-  }
-  Fl_Display_Device::display_device()->set_current();
-}
-
-#if ! (defined(__APPLE__) || defined(WIN32) )
-int Fl_PostScript_Printer::start_job(int pages, int *firstpage, int *lastpage) {
-  enum Fl_Paged_Device::Page_Format format;
-  enum Fl_Paged_Device::Page_Layout layout;
-
-  // first test version for print dialog
-  if (!print_panel) make_print_panel();
-  print_load();
-  print_selection->deactivate();
-  print_all->setonly();
-  print_all->do_callback();
-  print_from->value("1");
-  { char tmp[10]; snprintf(tmp, sizeof(tmp), "%d", pages); print_to->value(tmp); }
-  print_panel->show(); // this is modal
-  while (print_panel->shown()) Fl::wait();
-  
-  if (!print_start) // user clicked cancel
-    return 1;
-
-  // get options
-
-  format = print_page_size->value() ? Fl_Paged_Device::A4 : Fl_Paged_Device::LETTER;
-  { // page range choice
-    int from = 1, to = pages;
-    if (print_pages->value()) {
-      sscanf(print_from->value(), "%d", &from);
-      sscanf(print_to->value(), "%d", &to);
-    }
-    if (from < 1) from = 1;
-    if (to > pages) to = pages;
-    if (to < from) to = from;
-    if (firstpage) *firstpage = from;
-    if (lastpage) *lastpage = to;
-    pages = to - from + 1;
-  }
-  
-  if (print_output_mode[0]->value()) layout = Fl_Paged_Device::PORTRAIT;
-  else if (print_output_mode[1]->value()) layout = Fl_Paged_Device::LANDSCAPE;
-  else if (print_output_mode[2]->value()) layout = Fl_Paged_Device::PORTRAIT;
-  else layout = Fl_Paged_Device::LANDSCAPE;
-
-  int print_pipe = print_choice->value();	// 0 = print to file, >0 = printer (pipe)
-
-  const char *media = print_page_size->text(print_page_size->value());
-  const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
-  if (!print_pipe) printer = "<File>";
-
-  if (!print_pipe) // fall back to file printing
-    return Fl_PostScript_File_Device::start_job (pages, format, layout);
-
-  // Print: pipe the output into the lp command...
-
-  char command[1024];
-  snprintf(command, sizeof(command), "lp -s -d %s -n %d -t '%s' -o media=%s",
-             printer, print_collate_button->value() ? 1 : (int)(print_copies->value() + 0.5),
-	     "FLTK", media);
-
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->output = popen(command, "w");
-  if (!ps->output) {
-    fl_alert("could not run command: %s\n",command);
-    return 1;
-  }
-  ps->close_command(pclose);
-  this->set_current();
-  return ps->start_postscript(pages, format, layout); // start printing
-}
-
-#endif // ! (defined(__APPLE__) || defined(WIN32) )
-
-#endif // FL_DOXYGEN
-
-//
-// End of "$Id: Fl_PostScript.cxx 8623 2011-04-24 17:09:41Z AlbrechtS $".
-//
diff --git a/common/fltk/src/Fl_Preferences.cxx b/common/fltk/src/Fl_Preferences.cxx
deleted file mode 100644
index e343821..0000000
--- a/common/fltk/src/Fl_Preferences.cxx
+++ /dev/null
@@ -1,1803 +0,0 @@
-//
-// "$Id: Fl_Preferences.cxx 8291 2011-01-19 06:33:48Z manolo $"
-//
-// Preferences methods for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2002-2010 by Matthias Melcher.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Plugin.H>
-#include <FL/filename.H>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <sys/stat.h>
-#include <time.h>
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include <windows.h>
-#  include <direct.h>
-#  include <io.h>
-// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
-// on Windows, which is supposed to be POSIX compliant...
-#  define access _access
-#  define mkdir _mkdir
-#elif defined (__APPLE__)
-#  include <ApplicationServices/ApplicationServices.h>
-#  include <unistd.h>
-#  include <dlfcn.h>
-#else
-#  include <unistd.h>
-#  include <dlfcn.h>
-#endif
-
-#ifdef WIN32
-#  include <windows.h>
-#  include <rpc.h>
-// function pointer for the UuidCreate Function
-// RPC_STATUS RPC_ENTRY UuidCreate(UUID __RPC_FAR *Uuid);
-typedef RPC_STATUS (WINAPI* uuid_func)(UUID __RPC_FAR *Uuid);
-#else
-#  include <sys/time.h>
-#endif // WIN32
-
-#ifdef __CYGWIN__
-#  include <wchar.h>
-#endif
-
-char Fl_Preferences::nameBuffer[128];
-char Fl_Preferences::uuidBuffer[40];
-Fl_Preferences *Fl_Preferences::runtimePrefs = 0;
-
-/**
- * Returns a UUID as generated by the system.
- *
- * A UUID is a "universally unique identifier" which is commonly used in
- * configuration files to create identities. A UUID in ASCII looks like this:
- * <tt>937C4900-51AA-4C11-8DD3-7AB59944F03E</tt>. It has always 36 bytes plus
- * a trailing zero.
- *
- * \return a pointer to a static buffer containing the new UUID in ASCII format.
- *         The buffer is overwritten during every call to this function!
- */
-const char *Fl_Preferences::newUUID() {
-#ifdef __APPLE__
-  CFUUIDRef theUUID = CFUUIDCreate(NULL);
-  CFUUIDBytes b = CFUUIDGetUUIDBytes(theUUID);
-  sprintf(uuidBuffer, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
-          b.byte0, b.byte1, b.byte2, b.byte3, b.byte4, b.byte5, b.byte6, b.byte7,
-          b.byte8, b.byte9, b.byte10, b.byte11, b.byte12, b.byte13, b.byte14, b.byte15);
-  CFRelease(theUUID);
-#elif defined (WIN32)
-  // First try and use the win API function UuidCreate(), but if that is not
-  // available, fall back to making something up from scratch.
-  // We do not want to link against the Rpcrt4.dll, as we will rarely use it,
-  // so we load the DLL dynamically, if it is available, and work from there.
-  static HMODULE hMod = NULL;
-  UUID ud;
-  UUID *pu = &ud;
-  int got_uuid = 0;
-
-  if (!hMod) {		// first time in?
-    hMod = LoadLibrary("Rpcrt4.dll");
-  }
-
-  if (hMod) {		// do we have a usable handle to Rpcrt4.dll?
-    uuid_func uuid_crt = (uuid_func)GetProcAddress(hMod, "UuidCreate");
-    if (uuid_crt != NULL) {
-      RPC_STATUS rpc_res = uuid_crt(pu);
-      if ( // is the return status OK for our needs?
-          (rpc_res == RPC_S_OK) ||		// all is well
-          (rpc_res == RPC_S_UUID_LOCAL_ONLY) || // only unique to this machine
-          (rpc_res == RPC_S_UUID_NO_ADDRESS)	// probably only locally unique
-        ) {
-        got_uuid = -1;
-        sprintf(uuidBuffer, "%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
-            pu->Data1, pu->Data2, pu->Data3, pu->Data4[0], pu->Data4[1],
-            pu->Data4[2], pu->Data4[3], pu->Data4[4],
-            pu->Data4[5], pu->Data4[6], pu->Data4[7]);
-      }
-    }
-  }
-  if (got_uuid == 0) {		// did not make a UUID - use fallback logic
-    unsigned char b[16];
-    time_t t = time(0);		// first 4 byte
-    b[0] = (unsigned char)t;
-    b[1] = (unsigned char)(t>>8);
-    b[2] = (unsigned char)(t>>16);
-    b[3] = (unsigned char)(t>>24);
-    int r = rand();		// four more bytes
-    b[4] = (unsigned char)r;
-    b[5] = (unsigned char)(r>>8);
-    b[6] = (unsigned char)(r>>16);
-    b[7] = (unsigned char)(r>>24);
-    // Now we try to find 4 more "random" bytes. We extract the
-    // lower 4 bytes from the address of t - it is created on the
-    // stack so *might* be in a different place each time...
-    // This is now done via a union to make it compile OK on 64-bit systems.
-    union { void *pv; unsigned char a[sizeof(void*)]; } v;
-    v.pv = (void *)(&t);
-    // NOTE: This assume that all WinXX systems are little-endian
-    b[8] = v.a[0];
-    b[9] = v.a[1];
-    b[10] = v.a[2];
-    b[11] = v.a[3];
-    TCHAR name[MAX_COMPUTERNAME_LENGTH + 1]; // only used to make last four bytes
-    DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1;
-    // GetComputerName() does not depend on any extra libs, and returns something
-    // analogous to gethostname()
-    GetComputerName(name, &nSize);
-    //  use the first 4 TCHAR's of the name to create the last 4 bytes of our UUID
-    for (int ii = 0; ii < 4; ii++) {
-      b[12 + ii] = (unsigned char)name[ii];
-    }
-    sprintf(uuidBuffer, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
-            b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7],
-            b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15]);
-  }
-#else
-  // warning Unix implementation of Fl_Preferences::newUUID() incomplete!
-  // #include <uuid/uuid.h>
-  // void uuid_generate(uuid_t out);
-  unsigned char b[16];
-  time_t t = time(0);			// first 4 byte
-  b[0] = (unsigned char)t;
-  b[1] = (unsigned char)(t>>8);
-  b[2] = (unsigned char)(t>>16);
-  b[3] = (unsigned char)(t>>24);
-  int r = rand(); 			// four more bytes
-  b[4] = (unsigned char)r;
-  b[5] = (unsigned char)(r>>8);
-  b[6] = (unsigned char)(r>>16);
-  b[7] = (unsigned char)(r>>24);
-  unsigned long a = (unsigned long)&t;	// four more bytes
-  b[8] = (unsigned char)a;
-  b[9] = (unsigned char)(a>>8);
-  b[10] = (unsigned char)(a>>16);
-  b[11] = (unsigned char)(a>>24);
-  // Now we try to find 4 more "random" bytes. We extract the
-  // lower 4 bytes from the address of t - it is created on the
-  // stack so *might* be in a different place each time...
-  // This is now done via a union to make it compile OK on 64-bit systems.
-  union { void *pv; unsigned char a[sizeof(void*)]; } v;
-  v.pv = (void *)(&t);
-  // NOTE: May need to handle big- or little-endian systems here
-# if WORDS_BIGENDIAN
-  b[8] = v.a[sizeof(void*) - 1];
-  b[9] = v.a[sizeof(void*) - 2];
-  b[10] = v.a[sizeof(void*) - 3];
-  b[11] = v.a[sizeof(void*) - 4];
-# else /* data ordered for a little-endian system */
-  b[8] = v.a[0];
-  b[9] = v.a[1];
-  b[10] = v.a[2];
-  b[11] = v.a[3];
-# endif
-  char name[80];			// last four bytes
-  gethostname(name, 79);
-  memcpy(b+12, name, 4);
-  sprintf(uuidBuffer, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
-          b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7],
-          b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15]);
-#endif
-
-  return uuidBuffer;
-}
-
-/**
-   The constructor creates a group that manages name/value pairs and
-   child groups. Groups are ready for reading and writing at any time.
-   The root argument is either Fl_Preferences::USER
-   or Fl_Preferences::SYSTEM.
-
-   This constructor creates the <i>base</i> instance for all
-   following entries and reads existing databases into memory. The
-   vendor argument is a unique text string identifying the
-   development team or vendor of an application.  A domain name or
-   an EMail address are great unique names, e.g.
-   "researchATmatthiasm.com" or "fltk.org". The
-   application argument can be the working title or final
-   name of your application. Both vendor and
-   application must be valid relative UNIX pathnames and
-   may contain '/'s to create deeper file structures.
-
-   A set of Preferences marked "run-time" exists exactly one per application and
-   only as long as the application runs. It can be used as a database for
-   volatile information. FLTK uses it to register plugins at run-time.
-
-   \param[in] root can be \c USER or \c SYSTEM for user specific or system wide
-              preferences
-   \param[in] vendor unique text describing the company or author of this file
-   \param[in] application unique text describing the application
-*/
-Fl_Preferences::Fl_Preferences( Root root, const char *vendor, const char *application ) {
-  node = new Node( "." );
-  rootNode = new RootNode( this, root, vendor, application );
-  node->setRoot(rootNode);
-}
-
-/**
-   \brief Use this constructor to create or read a preferences file at an
-   arbitrary position in the file system.
-
-   The file name is generated in the form
-   <tt><i>path</i>/<i>application</i>.prefs</tt>. If \p application
-   is \c NULL, \p path must contain the full file name.
-
-   \param[in] path path to the directory that contains the preferences file
-   \param[in] vendor unique text describing the company or author of this file
-   \param[in] application unique text describing the application
- */
-Fl_Preferences::Fl_Preferences( const char *path, const char *vendor, const char *application ) {
-  node = new Node( "." );
-  rootNode = new RootNode( this, path, vendor, application );
-  node->setRoot(rootNode);
-}
-
-/**
-   \brief Generate or read a new group of entries within another group.
-
-   Use the \p group argument to name the group that you would like to access.
-   \p Group can also contain a path to a group further down the hierarchy by
-   separating group names with a forward slash '/'.
-
-   \param[in] parent reference object for the new group
-   \param[in] group name of the group to access (may contain '/'s)
- */
-Fl_Preferences::Fl_Preferences( Fl_Preferences &parent, const char *group ) {
-  rootNode = parent.rootNode;
-  node = parent.node->addChild( group );
-}
-
-/**
-   \brief Create or access a group of preferences using a name.
-   \param[in] parent the parameter parent is a pointer to the parent group.
-              \p Parent may be \p NULL. It then refers to an application internal
-              database which exists only once, and remains in RAM only until the
-              application quits. This database is used to manage plugins and other
-              data indexes by strings.
-   \param[in] group a group name that is used as a key into the database
-   \see Fl_Preferences( Fl_Preferences&, const char *group )
- */
-Fl_Preferences::Fl_Preferences( Fl_Preferences *parent, const char *group ) {
-  if (parent==0) {
-    if (!runtimePrefs) {
-      runtimePrefs = new Fl_Preferences();
-      runtimePrefs->node = new Node( "." );
-      runtimePrefs->rootNode = new RootNode( runtimePrefs );
-      runtimePrefs->node->setRoot(rootNode);
-    }
-    parent = runtimePrefs;
-  }
-  rootNode = parent->rootNode;
-  node = parent->node->addChild( group );
-}
-
-/**
- \brief Open a child group using a given index.
-
- Use the \p groupIndex argument to find the group that you would like to access.
- If the given index is invalid (negative or too high), a new group is created
- with a UUID as a name.
-
- The index needs to be fixed. It is currently backward. Index 0 points
- to the last member in the 'list' of preferences.
-
- \param[in] parent reference object for the new group
- \param[in] groupIndex zero based index into child groups
- */
-Fl_Preferences::Fl_Preferences( Fl_Preferences &parent, int groupIndex ) {
-  rootNode = parent.rootNode;
-  if (groupIndex<0 || groupIndex>=parent.groups()) {
-    node = parent.node->addChild( newUUID() );
-  } else {
-    node = parent.node->childNode( groupIndex );
-  }
-}
-
-/**
- \see Fl_Preferences( Fl_Preferences&, int groupIndex )
- */
-Fl_Preferences::Fl_Preferences( Fl_Preferences *parent, int groupIndex ) {
-  rootNode = parent->rootNode;
-  if (groupIndex<0 || groupIndex>=parent->groups()) {
-    node = parent->node->addChild( newUUID() );
-  } else {
-    node = parent->node->childNode( groupIndex );
-  }
-}
-
-/**
- Create a new dataset access point using a dataset ID.
-
- ID's are a great way to remember shortcuts to database entries that are deeply
- nested in a preferences database, as long as the database root is not deleted.
- An ID can be retrieved from any Fl_Preferences dataset, and can then be used
- to create multiple new references to the same dataset.
-
- ID's can be put very helpful when put into the <tt>user_data()</tt> field of
- widget callbacks.
- */
-Fl_Preferences::Fl_Preferences( Fl_Preferences::ID id ) {
-  node = (Node*)id;
-  rootNode = node->findRoot();
-}
-
-/**
- Create another reference to a Preferences group.
- */
-Fl_Preferences::Fl_Preferences(const Fl_Preferences &rhs)
-: node(rhs.node),
-  rootNode(rhs.rootNode)
-{ }
-
-/**
- Assign another reference to a Preference group.
- */
-Fl_Preferences &Fl_Preferences::operator=(const Fl_Preferences &rhs) {
-  if (&rhs != this) {
-    node = rhs.node;
-    rootNode = rhs.rootNode;
-  }
-  return *this;
-}
-
-/**
-   The destructor removes allocated resources. When used on the
-   \em base preferences group, the destructor flushes all
-   changes to the preferences file and deletes all internal
-   databases.
-
-   The destructor does not remove any data from the database. It merely
-   deletes your reference to the database.
- */
-Fl_Preferences::~Fl_Preferences() {
-  if (node && !node->parent()) delete rootNode;
-  // DO NOT delete nodes! The root node will do that after writing the preferences
-  // zero all pointer to avoid memory errors, even though
-  // Valgrind does not complain (Cygwind does though)
-  node = 0L;
-  rootNode = 0L;
-}
-
-/**
-   Returns the number of groups that are contained within a group.
-
-   \return 0 for no groups at all
- */
-int Fl_Preferences::groups() {
-  return node->nChildren();
-}
-
-/**
-   Returns the name of the Nth (\p num_group) group.
-   There is no guaranteed order of group names. The index must
-   be within the range given by groups().
-
-   \param[in] num_group number indexing the requested group
-   \return 'C' string pointer to the group name
- */
-const char *Fl_Preferences::group( int num_group ) {
-  return node->child( num_group );
-}
-
-/**
-   Returns non-zero if a group with this name exists.
-   Group names are relative to the Preferences node and can contain a path.
-   "." describes the current node, "./" describes the topmost node.
-   By preceding a groupname with a "./", its path becomes relative to the topmost node.
-
-   \param[in] key name of group that is searched for
-   \return 0 if no group by that name was found
- */
-char Fl_Preferences::groupExists( const char *key ) {
-  return node->search( key ) ? 1 : 0 ;
-}
-
-/**
-   Deletes a group.
-
-   Removes a group and all keys and groups within that group
-   from the database.
-
-   \param[in] group name of the group to delete
-   \return 0 if call failed
- */
-char Fl_Preferences::deleteGroup( const char *group ) {
-  Node *nd = node->search( group );
-  if ( nd ) return nd->remove();
-  return 0;
-}
-
-/**
- Delete all groups.
- */
-char Fl_Preferences::deleteAllGroups() {
-  node->deleteAllChildren();
-  return 1;
-}
-
-/**
-   Returns the number of entries (name/value pairs) in a group.
-
-   \return number of entries
- */
-int Fl_Preferences::entries() {
-  return node->nEntry();
-}
-
-/**
-   Returns the name of an entry. There is no guaranteed order of
-   entry names. The index must be within the range given by
-   entries().
-
-   \param[in] index number indexing the requested entry
-   \return pointer to value cstring
- */
-const char *Fl_Preferences::entry( int index ) {
-  return node->entry(index).name;
-}
-
-/**
-   Returns non-zero if an entry with this name exists.
-
-   \param[in] key name of entry that is searched for
-   \return 0 if entry was not found
- */
-char Fl_Preferences::entryExists( const char *key ) {
-  return node->getEntry( key )>=0 ? 1 : 0 ;
-}
-
-/**
-   Deletes a single name/value pair.
-
-   This function removes the entry \p key from the database.
-
-   \param[in] key name of entry to delete
-   \return 0 if deleting the entry failed
- */
-char Fl_Preferences::deleteEntry( const char *key ) {
-  return node->deleteEntry( key );
-}
-
-/**
- Delete all entries.
- */
-char Fl_Preferences::deleteAllEntries() {
-  node->deleteAllEntries();
-  return 1;
-}
-
-/**
- Delete all groups and all entries.
- */
-char Fl_Preferences::clear() {
-  char ret1 = deleteAllGroups();
-  char ret2 = deleteAllEntries();
-  return ret1 & ret2;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0).
-
- \param[in] key name of entry
- \param[out] value returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, int &value, int defaultValue ) {
-  const char *v = node->get( key );
-  value = v ? atoi( v ) : defaultValue;
-  return ( v != 0 );
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] value set this entry to \p value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, int value ) {
-  sprintf( nameBuffer, "%d", value );
-  node->set( key, nameBuffer );
-  return 1;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0).
-
- \param[in] key name of entry
- \param[out] value returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, float &value, float defaultValue ) {
-  const char *v = node->get( key );
-  value = v ? (float)atof( v ) : defaultValue;
-  return ( v != 0 );
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] value set this entry to \p value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, float value ) {
-  sprintf( nameBuffer, "%g", value );
-  node->set( key, nameBuffer );
-  return 1;
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] value set this entry to \p value
- \param[in] precision number of decimal digits to represent value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, float value, int precision ) {
-  sprintf( nameBuffer, "%.*g", precision, value );
-  node->set( key, nameBuffer );
-  return 1;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0).
-
- \param[in] key name of entry
- \param[out] value returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, double &value, double defaultValue ) {
-  const char *v = node->get( key );
-  value = v ? atof( v ) : defaultValue;
-  return ( v != 0 );
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] value set this entry to \p value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, double value ) {
-  sprintf( nameBuffer, "%g", value );
-  node->set( key, nameBuffer );
-  return 1;
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] value set this entry to \p value
- \param[in] precision number of decimal digits to represent value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, double value, int precision ) {
-  sprintf( nameBuffer, "%.*g", precision, value );
-  node->set( key, nameBuffer );
-  return 1;
-}
-
-// remove control sequences from a string
-static char *decodeText( const char *src ) {
-  int len = 0;
-  const char *s = src;
-  for ( ; *s; s++, len++ ) {
-    if ( *s == '\\' ) {
-      if ( isdigit( s[1] ) ) {
-        s+=3; 
-      } else { 
-        s+=1;
-      }
-    }
-  }
-  char *dst = (char*)malloc( len+1 ), *d = dst;
-  for ( s = src; *s; s++ ) {
-    char c = *s;
-    if ( c == '\\' ) {
-      if ( s[1] == '\\' ) { *d++ = c; s++; }
-      else if ( s[1] == 'n' ) { *d++ = '\n'; s++; }
-      else if ( s[1] == 'r' ) { *d++ = '\r'; s++; }
-      else if ( isdigit( s[1] ) ) { *d++ = ((s[1]-'0')<<6) + ((s[2]-'0')<<3) + (s[3]-'0'); s+=3; }
-      else s++; // error
-    }
-    else
-      *d++ = c;
-  }
-  *d = 0;
-  return dst;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0).
- 'maxSize' is the maximum length of text that will be read.
- The text buffer must allow for one additional byte for a trailling zero.
-
- \param[in] key name of entry
- \param[out] text returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \param[in] maxSize maximum length of value plus one byte for a trailing zero
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, char *text, const char *defaultValue, int maxSize ) {
-  const char *v = node->get( key );
-  if ( v && strchr( v, '\\' ) ) {
-    char *w = decodeText( v );
-    strlcpy(text, w, maxSize);
-    free( w );
-    return 1;
-  }
-  if ( !v ) v = defaultValue;
-  if ( v ) strlcpy(text, v, maxSize);
-  else text = 0;
-  return ( v != defaultValue );
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0). get() allocates memory of
- sufficient size to hold the value. The buffer must be free'd by
- the developer using 'free(value)'.
-
- \param[in] key name of entry
- \param[out] text returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, char *&text, const char *defaultValue ) {
-  const char *v = node->get( key );
-  if ( v && strchr( v, '\\' ) ) {
-    text = decodeText( v );
-    return 1;
-  }
-  if ( !v ) v = defaultValue;
-  if ( v )
-    text = strdup( v );
-  else
-    text = 0;
-  return ( v != defaultValue );
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] text set this entry to \p value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, const char *text ) {
-  const char *s = text ? text : "";
-  int n=0, ns=0;
-  for ( ; *s; s++ ) { n++; if ( *s<32 || *s=='\\' || *s==0x7f ) ns+=4; }
-  if ( ns ) {
-    char *buffer = (char*)malloc( n+ns+1 ), *d = buffer;
-    for ( s=text; *s; ) {
-      char c = *s;
-      if ( c=='\\' ) { *d++ = '\\'; *d++ = '\\'; s++; }
-      else if ( c=='\n' ) { *d++ = '\\'; *d++ = 'n'; s++; }
-      else if ( c=='\r' ) { *d++ = '\\'; *d++ = 'r'; s++; }
-      else if ( c<32 || c==0x7f )
-	{ *d++ = '\\'; *d++ = '0'+((c>>6)&3); *d++ = '0'+((c>>3)&7); *d++ = '0'+(c&7);  s++; }
-      else *d++ = *s++;
-    }
-    *d = 0;
-    node->set( key, buffer );
-    free( buffer );
-  }
-  else
-    node->set( key, text );
-  return 1;
-}
-
-// convert a hex string to binary data
-static void *decodeHex( const char *src, int &size ) {
-  size = strlen( src )/2;
-  unsigned char *data = (unsigned char*)malloc( size ), *d = data;
-  const char *s = src;
-  for ( int i=size; i>0; i-- ) {
-    int v;
-    char x = tolower(*s++);
-    if ( x >= 'a' ) v = x-'a'+10; else v = x-'0';
-    v = v<<4;
-    x = tolower(*s++);
-    if ( x >= 'a' ) v += x-'a'+10; else v += x-'0';
-    *d++ = (uchar)v;
-  }
-  return (void*)data;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0).
- 'maxSize' is the maximum length of text that will be read.
-
- \param[in] key name of entry
- \param[out] data value returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \param[in] defaultSize size of default value array
- \param[in] maxSize maximum length of value
- \return 0 if the default value was used
-
- \todo maxSize should receive the number of bytes that were read.
- */
-char Fl_Preferences::get( const char *key, void *data, const void *defaultValue, int defaultSize, int maxSize ) {
-  const char *v = node->get( key );
-  if ( v ) {
-    int dsize;
-    void *w = decodeHex( v, dsize );
-    memmove( data, w, dsize>maxSize?maxSize:dsize );
-    free( w );
-    return 1;
-  }
-  if ( defaultValue )
-    memmove( data, defaultValue, defaultSize>maxSize?maxSize:defaultSize );
-  return 0;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0). get() allocates memory of
- sufficient size to hold the value. The buffer must be free'd by
- the developer using 'free(value)'.
-
- \param[in] key name of entry
- \param[out] data returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \param[in] defaultSize size of default value array
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, void *&data, const void *defaultValue, int defaultSize ) {
-  const char *v = node->get( key );
-  if ( v ) {
-    int dsize;
-    data = decodeHex( v, dsize );
-    return 1;
-  }
-  if ( defaultValue ) {
-    data = (void*)malloc( defaultSize );
-    memmove( data, defaultValue, defaultSize );
-  }
-  else
-    data = 0;
-  return 0;
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] data set this entry to \p value
- \param[in] dsize size of data array
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, const void *data, int dsize ) {
-  char *buffer = (char*)malloc( dsize*2+1 ), *d = buffer;;
-  unsigned char *s = (unsigned char*)data;
-  for ( ; dsize>0; dsize-- ) {
-    static char lu[] = "0123456789abcdef";
-    unsigned char v = *s++;
-    *d++ = lu[v>>4];
-    *d++ = lu[v&0xf];
-  }
-  *d = 0;
-  node->set( key, buffer );
-  free( buffer );
-  return 1;
-}
-
-/**
- Returns the size of the value part of an entry.
-
- \param[in] key name of entry
- \return size of value
- */
-int Fl_Preferences::size( const char *key ) {
-  const char *v = node->get( key );
-  return v ? strlen( v ) : 0 ;
-}
-
-/**
- \brief Creates a path that is related to the preferences file and
- that is usable for additional application data.
-
- This function creates a directory that is named after the preferences
- database without the \c .prefs extension and located in the same directory.
- It then fills the given buffer with the complete path name.
-
- Exmaple:
- \code
- Fl_Preferences prefs( USER, "matthiasm.com", "test" );
- char path[FL_PATH_MAX];
- prefs.getUserdataPath( path );
- \endcode
- creates the preferences database in (MS Windows):
- \code
- c:/Documents and Settings/matt/Application Data/matthiasm.com/test.prefs
- \endcode
- and returns the userdata path:
- \code
- c:/Documents and Settings/matt/Application Data/matthiasm.com/test/
- \endcode
-
- \param[out] path buffer for user data path
- \param[in] pathlen size of path buffer (should be at least \c FL_PATH_MAX)
- \return 0 if path was not created or pathname can't fit into buffer
- */
-char Fl_Preferences::getUserdataPath( char *path, int pathlen ) {
-  if ( rootNode )
-    return rootNode->getPath( path, pathlen );
-  return 0;
-}
-
-/**
- Writes all preferences to disk. This function works only with
- the base preferences group. This function is rarely used as
- deleting the base preferences flushes automatically.
- */
-void Fl_Preferences::flush() {
-  if ( rootNode && node->dirty() )
-    rootNode->write();
-}
-
-//-----------------------------------------------------------------------------
-// helper class to create dynamic group and entry names on the fly
-//
-
-/**
-   Creates a group name or entry name on the fly.
-
-   This version creates a simple unsigned integer as an entry name.
-
-   \code
-     int n, i;
-     Fl_Preferences prev( appPrefs, "PreviousFiles" );
-     prev.get( "n", 0 );
-     for ( i=0; i<n; i++ )
-       prev.get( Fl_Preferences::Name(i), prevFile[i], "" );
-   \endcode
- */
-Fl_Preferences::Name::Name( unsigned int n ) {
-  data_ = (char*)malloc(20);
-  sprintf(data_, "%u", n);
-}
-
-/**
-   Creates a group name or entry name on the fly.
-
-   This version creates entry names as in 'printf'.
-
-   \code
-     int n, i;
-     Fl_Preferences prefs( USER, "matthiasm.com", "test" );
-     prev.get( "nFiles", 0 );
-     for ( i=0; i<n; i++ )
-       prev.get( Fl_Preferences::Name( "File%d", i ), prevFile[i], "" );
-    \endcode
- */
-Fl_Preferences::Name::Name( const char *format, ... ) {
-  data_ = (char*)malloc(1024);
-  va_list args;
-  va_start(args, format);
-  vsnprintf(data_, 1024, format, args);
-  va_end(args);
-}
-
-// delete the name
-Fl_Preferences::Name::~Name() {
-  if (data_) {
-    free(data_);
-    data_ = 0L;
-  }
-}
-
-//-----------------------------------------------------------------------------
-// internal methods, do not modify or use as they will change without notice
-//
-
-int Fl_Preferences::Node::lastEntrySet = -1;
-
-// recursively create a path in the file system
-static char makePath( const char *path ) {
-  if (access(path, 0)) {
-    const char *s = strrchr( path, '/' );
-    if ( !s ) return 0;
-    int len = s-path;
-    char *p = (char*)malloc( len+1 );
-    memcpy( p, path, len );
-    p[len] = 0;
-    makePath( p );
-    free( p );
-#if defined(WIN32) && !defined(__CYGWIN__)
-    return ( mkdir( path ) == 0 );
-#else
-    return ( mkdir( path, 0777 ) == 0 );
-#endif // WIN32 && !__CYGWIN__
-  }
-  return 1;
-}
-
-#if 0
-// strip the filename and create a path
-static void makePathForFile( const char *path ) {
-  const char *s = strrchr( path, '/' );
-  if ( !s ) return;
-  int len = s-path;
-  char *p = (char*)malloc( len+1 );
-  memcpy( p, path, len );
-  p[len] = 0;
-  makePath( p );
-  free( p );
-}
-#endif
-
-// create the root node
-// - construct the name of the file that will hold our preferences
-Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs, Root root, const char *vendor, const char *application )
-: prefs_(prefs),
-  filename_(0L),
-  vendor_(0L),
-  application_(0L) {
-
-  char filename[ FL_PATH_MAX ]; filename[0] = 0;
-#ifdef WIN32
-#  define FLPREFS_RESOURCE	"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
-#  define FLPREFS_RESOURCEW	L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
-  int appDataLen = strlen(vendor) + strlen(application) + 8;
-  DWORD type, nn;
-  LONG err;
-  HKEY key;
-
-  switch (root) {
-    case SYSTEM:
-      err = RegOpenKeyW( HKEY_LOCAL_MACHINE, FLPREFS_RESOURCEW, &key );
-      if (err == ERROR_SUCCESS) {
-        nn = FL_PATH_MAX - appDataLen; 
-        err = RegQueryValueExW( key, L"Common AppData", 0L, &type,
-                                (BYTE*)filename, &nn ); 
-        if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) {
-          filename[0] = 0;
-          filename[1] = 0;
-        }
-        RegCloseKey(key);
-      }
-      break;
-    case USER:
-      err = RegOpenKeyW( HKEY_CURRENT_USER, FLPREFS_RESOURCEW, &key );
-      if (err == ERROR_SUCCESS) {
-        nn = FL_PATH_MAX - appDataLen;
-        err = RegQueryValueExW( key, L"AppData", 0L, &type,
-                                (BYTE*)filename, &nn ); 
-        if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) {
-          filename[0] = 0;
-          filename[1] = 0;
-	}
-        RegCloseKey(key);
-      }
-      break;
-  } 
-  if (!filename[1] && !filename[0]) {
-    strcpy(filename, "C:\\FLTK");
-  } else {
-#if 0
-    xchar *b = (xchar*)_wcsdup((xchar *)filename);
-#else
-    // cygwin does not come with _wcsdup. Use malloc +  wcscpy.
-    // For implementation of wcsdup functionality See
-    // - http://linenum.info/p/glibc/2.7/wcsmbs/wcsdup.c
-    xchar *b = (xchar*) malloc((wcslen((xchar *) filename) + 1) * sizeof(xchar));
-    wcscpy(b, (xchar *) filename);
-#endif
-    //  filename[fl_unicode2utf(b, wcslen((xchar*)b), filename)] = 0;
-    unsigned len = fl_utf8fromwc(filename, (FL_PATH_MAX-1), b, wcslen(b));
-    filename[len] = 0;
-    free(b);
-  }
-  snprintf(filename + strlen(filename), sizeof(filename) - strlen(filename),
-           "/%s/%s.prefs", vendor, application);
-  for (char *s = filename; *s; s++) if (*s == '\\') *s = '/';
-#elif defined ( __APPLE__ )
-  // TODO: verify that this is the Apple sanctioned way of finding these folders
-  // (On MSWindows, this frequently leads to issues with internationalized systems)
-  // Carbon: err = FindFolder( kLocalDomain, kPreferencesFolderType, 1, &spec.vRefNum, &spec.parID );
-  switch (root) {
-    case SYSTEM:
-      strcpy(filename, "/Library/Preferences");
-      break;
-    case USER:
-      sprintf(filename, "%s/Library/Preferences", fl_getenv("HOME"));
-      break;
-  }
-  snprintf(filename + strlen(filename), sizeof(filename) - strlen(filename),
-           "/%s/%s.prefs", vendor, application );
-#else
-  const char *e;
-  switch (root) {
-    case USER:
-      if ((e = fl_getenv("HOME")) != NULL) {
-	strlcpy(filename, e, sizeof(filename));
-
-	if (filename[strlen(filename)-1] != '/') {
-	  strlcat(filename, "/.fltk/", sizeof(filename));
-	} else {
-	  strlcat(filename, ".fltk/", sizeof(filename));
-	}
-	break;
-      } 
-    case SYSTEM:
-      strcpy(filename, "/etc/fltk/");
-      break;
-  } 
-  snprintf(filename + strlen(filename), sizeof(filename) - strlen(filename),
-           "%s/%s.prefs", vendor, application);
-#endif 
-  filename_    = strdup(filename);
-  vendor_      = strdup(vendor);
-  application_ = strdup(application); 
-  read();
-}
-
-// create the root node
-// - construct the name of the file that will hold our preferences
-Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs, const char *path, const char *vendor, const char *application )
-: prefs_(prefs),
-  filename_(0L),
-  vendor_(0L),
-  application_(0L) {
-
-  if (!vendor)
-    vendor = "unknown";
-  if (!application) {
-    application = "unknown";
-    filename_ = strdup(path);
-  } else {
-    char filename[ FL_PATH_MAX ]; filename[0] = 0;
-    snprintf(filename, sizeof(filename), "%s/%s.prefs", path, application);
-    filename_  = strdup(filename);
-  }
-  vendor_      = strdup(vendor);
-  application_ = strdup(application); 
-  read();
-}
-
-// create a root node that exists only on RAM and can not be read or written to
-// a file
-Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs )
-: prefs_(prefs),
-  filename_(0L),
-  vendor_(0L),
-  application_(0L) {
-}
-
-// destroy the root node and all depending nodes
-Fl_Preferences::RootNode::~RootNode() {
-  if ( prefs_->node->dirty() )
-    write();
-  if ( filename_ ) {
-    free( filename_ );
-    filename_ = 0L;
-  }
-  if ( vendor_ ) {
-    free( vendor_ );
-    vendor_ = 0L;
-  }
-  if ( application_ ) {
-    free( application_ );
-    application_ = 0L;
-  }
-  delete prefs_->node;
-  prefs_->node = 0L;
-}
-
-// read a preferences file and construct the group tree and with all entry leafs
-int Fl_Preferences::RootNode::read() {
-  if (!filename_)   // RUNTIME preferences
-    return -1; 
-  char buf[1024];
-  FILE *f = fl_fopen( filename_, "rb" );
-  if ( !f )
-    return -1; 
-  if (fgets( buf, 1024, f )==0) { /* ignore */ }
-  if (fgets( buf, 1024, f )==0) { /* ignore */ }
-  if (fgets( buf, 1024, f )==0) { /* ignore */ }
-  Node *nd = prefs_->node;
-  for (;;) {
-    if ( !fgets( buf, 1024, f ) ) break;	// EOF or Error
-    if ( buf[0]=='[' ) {			// read a new group
-      int end = strcspn( buf+1, "]\n\r" );
-      buf[ end+1 ] = 0;
-      nd = prefs_->node->find( buf+1 );
-    } else if ( buf[0]=='+' ) {			// value of previous name/value pair spans multiple lines
-      int end = strcspn( buf+1, "\n\r" );
-      if ( end != 0 ) {				// if entry is not empty
-	buf[ end+1 ] = 0;
-	nd->add( buf+1 );
-      }
-    } else {					 // read a name/value pair
-      int end = strcspn( buf, "\n\r" );
-      if ( end != 0 ) {				// if entry is not empty
-	buf[ end ] = 0;
-	nd->set( buf );
-      }
-    }
-  }
-  fclose( f );
-  return 0;
-}
-
-// write the group tree and all entry leafs
-int Fl_Preferences::RootNode::write() {
-  if (!filename_)   // RUNTIME preferences
-    return -1; 
-  fl_make_path_for_file(filename_);
-  FILE *f = fl_fopen( filename_, "wb" );
-  if ( !f )
-    return -1; 
-  fprintf( f, "; FLTK preferences file format 1.0\n" );
-  fprintf( f, "; vendor: %s\n", vendor_ );
-  fprintf( f, "; application: %s\n", application_ );
-  prefs_->node->write( f );
-  fclose( f );
-#if !(defined(__APPLE__) || defined(WIN32))
-  // unix: make sure that system prefs are user-readable
-  if (strncmp(filename_, "/etc/fltk/", 10) == 0) {
-    char *p;
-    p = filename_ + 9;
-    do {			 // for each directory to the pref file
-      *p = 0;
-      fl_chmod(filename_, 0755); // rwxr-xr-x
-      *p = '/';
-      p = strchr(p+1, '/');
-    } while (p);
-    fl_chmod(filename_, 0644);   // rw-r--r--
-  }
-#endif
-  return 0;
-}
-
-// get the path to the preferences directory
-char Fl_Preferences::RootNode::getPath( char *path, int pathlen ) {
-  if (!filename_)   // RUNTIME preferences
-    return -1; 
-  strlcpy( path, filename_, pathlen); 
-
-  char *s;
-  for ( s = path; *s; s++ ) if ( *s == '\\' ) *s = '/';
-  s = strrchr( path, '.' );
-  if ( !s ) return 0;
-  *s = 0;
-  char ret = fl_make_path( path );
-#if !(defined(__APPLE__) || defined(WIN32))
-  // unix: make sure that system prefs dir. is user-readable
-  if (strncmp(path, "/etc/fltk/", 10) == 0) {
-    fl_chmod(path, 0755); // rwxr-xr-x
-  }
-#endif
-  strcpy( s, "/" );
-  return ret;
-}
-
-// create a node that represents a group
-// - path must be a single word, prferable alnum(), dot and underscore only. Space is ok.
-Fl_Preferences::Node::Node( const char *path ) {
-  if ( path ) path_ = strdup( path ); else path_ = 0;
-  child_ = 0; next_ = 0; parent_ = 0;
-  entry_ = 0;
-  nEntry_ = NEntry_ = 0;
-  dirty_ = 0;
-  top_ = 0;
-  indexed_ = 0;
-  index_ = 0;
-  nIndex_ = NIndex_ = 0;
-}
-
-void Fl_Preferences::Node::deleteAllChildren() {
-  Node *nx;
-  for ( Node *nd = child_; nd; nd = nx ) {
-    nx = nd->next_;
-    delete nd;
-  }
-  child_ = 0L;
-  dirty_ = 1;
-  updateIndex();
-}
-
-void Fl_Preferences::Node::deleteAllEntries() {
-  if ( entry_ ) {
-    for ( int i = 0; i < nEntry_; i++ ) {
-      if ( entry_[i].name ) {
-	free( entry_[i].name );
-	entry_[i].name = 0L;
-      }
-      if ( entry_[i].value ) {
-	free( entry_[i].value );
-	entry_[i].value = 0L;
-      }
-    }
-    free( entry_ );
-    entry_ = 0L;
-    nEntry_ = 0;
-    NEntry_ = 0;
-  }
-  dirty_ = 1;
-}
-
-// delete this and all depending nodes
-Fl_Preferences::Node::~Node() {
-  deleteAllChildren();
-  deleteAllEntries();
-  deleteIndex();
-  if ( path_ ) {
-    free( path_ );
-    path_ = 0L;
-  }
-  next_ = 0L;
-  parent_ = 0L;
-}
-
-// recursively check if any entry is dirty (was changed after loading a fresh prefs file)
-char Fl_Preferences::Node::dirty() {
-  if ( dirty_ ) return 1;
-  if ( next_ && next_->dirty() ) return 1;
-  if ( child_ && child_->dirty() ) return 1;
-  return 0;
-}
-
-// write this node (recursively from the last neighbor back to this)
-// write all entries
-// write all children
-int Fl_Preferences::Node::write( FILE *f ) {
-  if ( next_ ) next_->write( f );
-  fprintf( f, "\n[%s]\n\n", path_ );
-  for ( int i = 0; i < nEntry_; i++ ) {
-    char *src = entry_[i].value;
-    if ( src ) {		// hack it into smaller pieces if needed
-      fprintf( f, "%s:", entry_[i].name );
-      int cnt, written;
-      for ( cnt = 0; cnt < 60; cnt++ )
-	if ( src[cnt]==0 ) break;
-      written = fwrite( src, cnt, 1, f );
-      fprintf( f, "\n" );
-      src += cnt;
-      for (;*src;) {
-	for ( cnt = 0; cnt < 80; cnt++ )
-	  if ( src[cnt]==0 ) break;
-        fputc( '+', f );
-	written = fwrite( src, cnt, 1, f );
-        fputc( '\n', f );
-	src += cnt;
-      }
-    }
-    else
-      fprintf( f, "%s\n", entry_[i].name );
-  }
-  if ( child_ ) child_->write( f );
-  dirty_ = 0;
-  return 0;
-}
-
-// set the parent node and create the full path
-void Fl_Preferences::Node::setParent( Node *pn ) {
-  parent_ = pn;
-  next_ = pn->child_;
-  pn->child_ = this;
-  sprintf( nameBuffer, "%s/%s", pn->path_, path_ );
-  free( path_ );
-  path_ = strdup( nameBuffer );
-}
-
-// find the corresponding root node
-Fl_Preferences::RootNode *Fl_Preferences::Node::findRoot() {
-  Node *n = this;
-  do {
-    if (n->top_)
-      return n->root_;
-    n = n->parent();
-  } while (n);
-  return 0L;
-}
-
-// add a child to this node and set its path (try to find it first...)
-Fl_Preferences::Node *Fl_Preferences::Node::addChild( const char *path ) {
-  sprintf( nameBuffer, "%s/%s", path_, path );
-  char *name = strdup( nameBuffer );
-  Node *nd = find( name );
-  free( name );
-  dirty_ = 1;
-  updateIndex();
-  return nd;
-}
-
-// create and set, or change an entry within this node
-void Fl_Preferences::Node::set( const char *name, const char *value )
-{
-  for ( int i=0; i<nEntry_; i++ ) {
-    if ( strcmp( name, entry_[i].name ) == 0 ) {
-      if ( !value ) return; // annotation
-      if ( strcmp( value, entry_[i].value ) != 0 ) {
-	if ( entry_[i].value )
-	  free( entry_[i].value );
-	entry_[i].value = strdup( value );
-	dirty_ = 1;
-      }
-      lastEntrySet = i;
-      return;
-    }
-  }
-  if ( NEntry_==nEntry_ ) {
-    NEntry_ = NEntry_ ? NEntry_*2 : 10;
-    entry_ = (Entry*)realloc( entry_, NEntry_ * sizeof(Entry) );
-  }
-  entry_[ nEntry_ ].name = strdup( name );
-  entry_[ nEntry_ ].value = value?strdup( value ):0;
-  lastEntrySet = nEntry_;
-  nEntry_++;
-  dirty_ = 1;
-}
-
-// create or set a value (or annotation) from a single line in the file buffer
-void Fl_Preferences::Node::set( const char *line ) {
-  // hmm. If we assume that we always read this file in the beginning,
-  // we can handle the dirty flag 'quick and dirty'
-  char dirt = dirty_;
-  if ( line[0]==';' || line[0]==0 || line[0]=='#' ) {
-    set( line, 0 );
-  } else {
-    const char *c = strchr( line, ':' );
-    if ( c ) {
-      unsigned int len = c-line+1;
-      if ( len >= sizeof( nameBuffer ) )
-        len = sizeof( nameBuffer );
-      strlcpy( nameBuffer, line, len );
-      set( nameBuffer, c+1 );
-    } else {
-      set( line, "" );
-    }
-  }
-  dirty_ = dirt;
-}
-
-// add more data to an existing entry
-void Fl_Preferences::Node::add( const char *line ) {
-  if ( lastEntrySet<0 || lastEntrySet>=nEntry_ ) return;
-  char *&dst = entry_[ lastEntrySet ].value;
-  int a = strlen( dst );
-  int b = strlen( line );
-  dst = (char*)realloc( dst, a+b+1 );
-  memcpy( dst+a, line, b+1 );
-  dirty_ = 1;
-}
-
-// get the value for a name, returns 0 if no such name
-const char *Fl_Preferences::Node::get( const char *name ) {
-  int i = getEntry( name );
-  return i>=0 ? entry_[i].value : 0 ;
-}
-
-// find the index of an entry, returns -1 if no such entry
-int Fl_Preferences::Node::getEntry( const char *name ) {
-  for ( int i=0; i<nEntry_; i++ ) {
-    if ( strcmp( name, entry_[i].name ) == 0 ) {
-      return i;
-    }
-  }
-  return -1;
-}
-
-// remove one entry form this group
-char Fl_Preferences::Node::deleteEntry( const char *name ) {
-  int ix = getEntry( name );
-  if ( ix == -1 ) return 0;
-  memmove( entry_+ix, entry_+ix+1, (nEntry_-ix-1) * sizeof(Entry) );
-  nEntry_--;
-  dirty_ = 1;
-  return 1;
-}
-
-// find a group somewhere in the tree starting here
-// - this method will always return a valid node (except for memory allocation problems)
-// - if the node was not found, 'find' will create the required branch
-Fl_Preferences::Node *Fl_Preferences::Node::find( const char *path ) {
-  int len = strlen( path_ );
-  if ( strncmp( path, path_, len ) == 0 ) {
-    if ( path[ len ] == 0 )
-      return this;
-    if ( path[ len ] == '/' ) {
-      Node *nd;
-      for ( nd = child_; nd; nd = nd->next_ ) {
-	Node *nn = nd->find( path );
-	if ( nn ) return nn;
-      }
-      const char *s = path+len+1;
-      const char *e = strchr( s, '/' );
-      if (e) strlcpy( nameBuffer, s, e-s+1 );
-      else strlcpy( nameBuffer, s, sizeof(nameBuffer));
-      nd = new Node( nameBuffer );
-      nd->setParent( this );
-      return nd->find( path );
-    }
-  }
-  return 0;
-}
-
-// find a group somewhere in the tree starting here
-// caller must not set 'offset' argument
-// - if the node does not exist, 'search' returns NULL
-// - if the pathname is "." (current node) return this node
-// - if the pathname is "./" (root node) return the topmost node
-// - if the pathname starts with "./", start the search at the root node instead
-Fl_Preferences::Node *Fl_Preferences::Node::search( const char *path, int offset ) { 
-  if ( offset == 0 ) {
-    if ( path[0] == '.' ) {
-      if ( path[1] == 0 ) {
-	return this; // user was searching for current node
-      } else if ( path[1] == '/' ) {
-	Node *nn = this;
-	while ( nn->parent() ) nn = nn->parent();
-	if ( path[2]==0 ) {		// user is searching for root ( "./" )
-	  return nn;
-	}
-	return nn->search( path+2, 2 ); // do a relative search on the root node
-      }
-    }
-    offset = strlen( path_ ) + 1;
-  }
-  int len = strlen( path_ );
-  if ( len < offset-1 ) return 0;
-  len -= offset;
-  if ( ( len <= 0 ) || ( strncmp( path, path_+offset, len ) == 0 ) ) {
-    if ( len > 0 && path[ len ] == 0 )
-      return this;
-    if ( len <= 0 || path[ len ] == '/' ) {
-      for ( Node *nd = child_; nd; nd = nd->next_ ) {
-	Node *nn = nd->search( path, offset );
-	if ( nn ) return nn;
-      }
-      return 0;
-    }
-  }
-  return 0;
-}
-
-// return the number of child nodes (groups)
-int Fl_Preferences::Node::nChildren() {
-  if (indexed_) {
-    return nIndex_;
-  } else {
-    int cnt = 0;
-    for ( Node *nd = child_; nd; nd = nd->next_ )
-      cnt++;
-    return cnt;
-  }
-}
-
-// return the node name
-const char *Fl_Preferences::Node::name() {
-  if ( path_ ) {
-    char *r = strrchr( path_, '/' );
-    return r ? r+1 : path_ ;
-  } else {
-    return 0L ;
-  }
-}
-
-// return the n'th child node's name
-const char *Fl_Preferences::Node::child( int ix ) {
-  Node *nd = childNode( ix );
-  if ( nd )
-    return nd->name();
-  else
-    return 0L ;
-}
-
-// return the n'th child node
-Fl_Preferences::Node *Fl_Preferences::Node::childNode( int ix ) {
-  createIndex();
-  if (indexed_) {
-    // usually faster access in correct order, but needing more memory
-    return index_[ix];
-  } else {
-    // slow access and reverse order
-    int n = nChildren();
-    ix = n - ix -1;
-    Node *nd;
-    for ( nd = child_; nd; nd = nd->next_ ) {
-      if ( !ix-- ) break;
-      if ( !nd ) break;
-    }
-    return nd;
-  }
-}
-
-// remove myself from the list and delete me (and all children)
-char Fl_Preferences::Node::remove() {
-  Node *nd = 0, *np;
-  if ( parent() ) {
-    nd = parent()->child_; np = 0L;
-    for ( ; nd; np = nd, nd = nd->next_ ) {
-      if ( nd == this ) {
-	if ( np )
-	  np->next_ = nd->next_;
-	else
-	  parent()->child_ = nd->next_;
-	break;
-      }
-    }
-    parent()->dirty_ = 1;
-    parent()->updateIndex();
-  }
-  delete this;
-  return ( nd != 0 );
-}
-
-void Fl_Preferences::Node::createIndex() {
-  if (indexed_) return;
-  int n = nChildren();
-  if (n>NIndex_) {
-    NIndex_ = n + 16;
-    index_ = (Node**)realloc(index_, NIndex_*sizeof(Node**));
-  }
-  Node *nd;
-  int i = 0;
-  for (nd = child_; nd; nd = nd->next_, i++) {
-    index_[n-i-1] = nd;
-  }
-  nIndex_ = n;
-  indexed_ = 1;
-}
-
-void Fl_Preferences::Node::updateIndex() {
-  indexed_ = 0;
-}
-
-void Fl_Preferences::Node::deleteIndex() {
-  if (index_) free(index_);
-  NIndex_ = nIndex_ = 0;
-  index_ = 0;
-  indexed_ = 0;
-}
-
-/**
- * \brief Create a plugin.
- *
- * \param[in] klass plugins are grouped in classes
- * \param[in] name every plugin should have a unique name
- */
-Fl_Plugin::Fl_Plugin(const char *klass, const char *name)
-: id(0) {
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: creating a plugin, class \"%s\", name \"%s\"\n",
-         klass, name);
-#endif
-  Fl_Plugin_Manager pm(klass);
-  id = pm.addPlugin(name, this);
-}
-
-/**
- * \brief Clear the plugin and remove it from the database.
- */
-Fl_Plugin::~Fl_Plugin() {
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: deleting a plugin\n");
-#endif
-  if (id)
-    Fl_Plugin_Manager::remove(id);
-}
-
-/**
- * \brief Manage all plugins belonging to one class.
- */
-Fl_Plugin_Manager::Fl_Plugin_Manager(const char *klass)
-: Fl_Preferences(0, Fl_Preferences::Name("%s/%s", "plugins", klass)) {
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: creating a plugin manager for class \"%s\"\n", klass);
-#endif
-}
-
-/**
- * \brief Remove the plugin manager.
- *
- * Calling this does not remove the database itself or any plugins. It just
- * removes the reference to the database.
- */
-Fl_Plugin_Manager::~Fl_Plugin_Manager() {
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: deleting a plugin manager\n");
-#endif
-}
-
-static unsigned char x2i(char hi, char lo) {
-  return ((hi-'A')<<4) | (lo-'A');
-}
-
-static void i2x(unsigned char v, char *d) {
-  d[0] = ((v>>4)&0x0f)+'A'; d[1] = (v&0x0f)+'A';
-}
-
-static void *a2p(const char *s) {
-  union { void *ret; unsigned char d[sizeof(void*)]; } v;
-  v.ret = 0L;
-  int i=0, n=sizeof(void*);
-  for (i=0; i<n; i++) {
-    v.d[i] = x2i(s[2*i], s[2*i+1]);
-  }
-  return v.ret;
-}
-
-static void p2a(void *vp, char *d) {
-  union { void *vp; unsigned char s[sizeof(void*)]; } v;
-  v.vp = vp;
-  int i=0, n=sizeof(void*);
-  for (i=0; i<n; i++) {
-    i2x(v.s[i], d+i*2);
-  }
-  d[2*i] = 0;
-}
-
-/**
- * \brief Return the address of a plugin by index.
- */
-Fl_Plugin *Fl_Plugin_Manager::plugin(int index) {
-  char buf[34];
-  Fl_Plugin *ret = 0;
-  Fl_Preferences pin(this, index);
-  pin.get("address", buf, "", 34);
-  if (buf[0]=='@') ret = (Fl_Plugin*)a2p(buf+1);
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: returning plugin at index %d: (%s) %p\n", index, buf, ret);
-#endif
-  return ret;
-}
-
-/**
- * \brief Return the address of a plugin by name.
- */
-Fl_Plugin *Fl_Plugin_Manager::plugin(const char *name) {
-  char buf[34];
-  Fl_Plugin *ret = 0;
-  if (groupExists(name)) {
-    Fl_Preferences pin(this, name);
-    pin.get("address", buf, "", 34);
-    if (buf[0]=='@') ret = (Fl_Plugin*)a2p(buf+1);
-#ifdef FL_PLUGIN_VERBOSE
-    printf("Fl_Plugin: returning plugin named \"%s\": (%s) %p\n", name, buf, ret);
-#endif
-    return ret;
-  } else {
-#ifdef FL_PLUGIN_VERBOSE
-    printf("Fl_Plugin: no plugin found named \"%s\"\n", name);
-#endif
-    return 0L;
-  }
-}
-
-/**
- * \brief This function adds a new plugin to the database.
- *
- * There is no need to call this function explicitly. Every Fl_Plugin constructor
- * will call this function at initialization time.
- */
-Fl_Preferences::ID Fl_Plugin_Manager::addPlugin(const char *name, Fl_Plugin *plugin) {
-  char buf[34];
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: adding plugin named \"%s\" at 0x%p\n", name, plugin);
-#endif
-  Fl_Preferences pin(this, name);
-  buf[0] = '@'; p2a(plugin, buf+1);
-  pin.set("address", buf);
-  return pin.id();
-}
-
-/**
- * \brief Remove any plugin.
- *
- * There is no need to call this function explicitly. Every Fl_Plugin destructor
- * will call this function at destruction time.
- */
-void Fl_Plugin_Manager::removePlugin(Fl_Preferences::ID id) {
-  Fl_Preferences::remove(id);
-}
-
-/**
- * \brief Load a module from disk.
- *
- * A module must be a dynamically linkable file for the given operating system.
- * When loading a module, its +init function will be called which in turn calls
- * the constructor of all statically initialized Fl_Plugin classes and adds
- * them to the database.
- */
-int Fl_Plugin_Manager::load(const char *filename) {
-  // the functions below will autmaticaly load plugins that are defined:
-  // Fl_My_Plugin plugin();
-#if defined(WIN32) && !defined(__CYGWIN__)
-  HMODULE dl = LoadLibrary(filename);
-#else
-  void * dl = dlopen(filename, RTLD_LAZY);
-#endif
-  // There is no way of unloading a plugin!
-  return (dl!=0) ? 0 : -1;
-}
-
-/**
- * \brief Use this function to load a whole directory full of modules.
- */
-int Fl_Plugin_Manager::loadAll(const char *filepath, const char *pattern) {
-  struct dirent **dir;
-  int i, n = fl_filename_list(filepath, &dir);
-  for (i=0; i<n; i++) {
-    struct dirent *e = dir[i];
-    if (pattern==0 || fl_filename_match(e->d_name, pattern)) {
-      load(Fl_Preferences::Name("%s%s", filepath, e->d_name));
-    }
-    free(e);
-  }
-  free(dir);
-  return 0;
-}
-
-//
-// End of "$Id: Fl_Preferences.cxx 8291 2011-01-19 06:33:48Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Printer.cxx b/common/fltk/src/Fl_Printer.cxx
deleted file mode 100644
index 8c8bfeb..0000000
--- a/common/fltk/src/Fl_Printer.cxx
+++ /dev/null
@@ -1,201 +0,0 @@
-//
-// "$Id: Fl_Printer.cxx 8565 2011-04-06 13:43:09Z manolo $"
-//
-// Encompasses platform-specific printing-support code and 
-// PostScript output code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Printer.H>
-
-#ifdef __APPLE__
-//#include "Fl_Quartz_Printer.mm"
-#elif defined(WIN32)
-#include "Fl_GDI_Printer.cxx"
-#endif
-
-#include "Fl_PostScript.cxx"
-
-// print dialog customization strings
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_title = "Print";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_printer = "Printer:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_range = "Print Range";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_copies = "Copies";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_all = "All";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_pages = "Pages";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_from = "From:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_to = "To:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_properties = "Properties...";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_copyNo = "# Copies:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_print_button = "Print";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_cancel_button = "Cancel";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_print_to_file = "Print To File";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_title = "Printer Properties";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_pagesize = "Page Size:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_mode = "Output Mode:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_use = "Use";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_save = "Save";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_cancel = "Cancel";
-
-const char *Fl_Printer::class_id = "Fl_Printer";
-#if defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN)
-const char *Fl_System_Printer::class_id = Fl_Printer::class_id;
-#endif
-#if !( defined(__APPLE__) || defined(WIN32) )
-const char *Fl_PostScript_Printer::class_id = Fl_Printer::class_id;
-#endif
-
-#if defined(__APPLE__) || defined(WIN32)
-void Fl_System_Printer::set_current(void)
-{
-#ifdef __APPLE__
-  fl_gc = (CGContextRef)gc;
-#elif defined(WIN32)
-  fl_gc = (HDC)gc;
-#endif
-  this->Fl_Surface_Device::set_current();
-}
-
-void Fl_System_Printer::origin(int *x, int *y)
-{
-  Fl_Paged_Device::origin(x, y);
-}
-
-#endif
-
-Fl_Printer::Fl_Printer(void) {
-#if defined(WIN32) || defined(__APPLE__)
-  printer = new Fl_System_Printer();
-#else
-  printer = new Fl_PostScript_Printer();
-#endif
-}
-
-int Fl_Printer::start_job(int pagecount, int *frompage, int *topage)
-{
-  return printer->start_job(pagecount, frompage, topage);
-}
-
-int Fl_Printer::start_page(void)
-{
-  return printer->start_page();
-}
-
-int Fl_Printer::printable_rect(int *w, int *h)
-{
-  return printer->printable_rect(w, h);
-}
-
-void Fl_Printer::margins(int *left, int *top, int *right, int *bottom)
-{
-  printer->margins(left, top, right, bottom);
-}
-
-void Fl_Printer::origin(int *x, int *y)
-{
-  printer->origin(x, y);
-}
-
-void Fl_Printer::origin(int x, int y)
-{
-  printer->origin(x, y);
-}
-
-void Fl_Printer::scale(float scale_x, float scale_y)
-{
-  printer->scale(scale_x, scale_y);
-}
-
-void Fl_Printer::rotate(float angle)
-{
-  printer->rotate(angle);
-}
-
-void Fl_Printer::translate(int x, int y)
-{
-  printer->translate(x, y);
-}
-
-void Fl_Printer::untranslate(void)
-{
-  printer->untranslate();
-}
-
-int Fl_Printer::end_page (void)
-{
-  return printer->end_page();
-}
-
-void Fl_Printer::end_job (void)
-{
-  printer->end_job();
-}
-
-void Fl_Printer::print_widget(Fl_Widget* widget, int delta_x, int delta_y)
-{
-  printer->print_widget(widget, delta_x, delta_y);
-}
-
-void Fl_Printer::print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y)
-{
-  printer->print_window_part(win, x, y, w, h, delta_x, delta_y);
-}
-
-void Fl_Printer::set_current(void)
-{
-  printer->set_current();
-}
-
-Fl_Graphics_Driver* Fl_Printer::driver(void)
-{
-  return printer->driver();
-}
-
-Fl_Printer::~Fl_Printer(void)
-{
-  delete printer;
-}
-
-
-//
-// End of "$Id: Fl_Printer.cxx 8565 2011-04-06 13:43:09Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Progress.cxx b/common/fltk/src/Fl_Progress.cxx
deleted file mode 100644
index 192b38d..0000000
--- a/common/fltk/src/Fl_Progress.cxx
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// "$Id: Fl_Progress.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Progress bar widget routines.
-//
-// Copyright 2000-2010 by Michael Sweet.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-
-//
-//   Fl_Progress::draw()        - Draw the check button.
-//   Fl_Progress::Fl_Progress() - Construct a Fl_Progress widget.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Progress.H>
-#include <FL/fl_draw.H>
-
-
-//
-// Fl_Progress is a progress bar widget based off Fl_Widget that shows a
-// standard progress bar...
-//
-
-
-//
-// 'Fl_Progress::draw()' - Draw the progress bar.
-//
-
-/** Draws the progress bar. */
-void Fl_Progress::draw()
-{
-  int	progress;	// Size of progress bar...
-  int	bx, by, bw, bh;	// Box areas...
-  int	tx, tw;		// Temporary X + width
-
-
-  // Get the box borders...
-  bx = Fl::box_dx(box());
-  by = Fl::box_dy(box());
-  bw = Fl::box_dw(box());
-  bh = Fl::box_dh(box());
-
-  tx = x() + bx;
-  tw = w() - bw;
-
-  // Draw the progress bar...
-  if (maximum_ > minimum_)
-    progress = (int)(w() * (value_ - minimum_) / (maximum_ - minimum_) + 0.5f);
-  else
-    progress = 0;
-
-  // Draw the box and label...
-  if (progress > 0) {
-    Fl_Color c = labelcolor();
-    labelcolor(fl_contrast(labelcolor(), selection_color()));
-
-    fl_push_clip(x(), y(), progress + bx, h());
-      draw_box(box(), x(), y(), w(), h(), active_r() ? selection_color() : fl_inactive(selection_color()));
-      draw_label(tx, y() + by, tw, h() - bh);
-    fl_pop_clip();
-
-    labelcolor(c);
-
-    if (progress<w()) {
-      fl_push_clip(tx + progress, y(), w() - progress, h());
-        draw_box(box(), x(), y(), w(), h(), active_r() ? color() : fl_inactive(color()));
-        draw_label(tx, y() + by, tw, h() - bh);
-      fl_pop_clip();
-    }
-  } else {
-    draw_box(box(), x(), y(), w(), h(), active_r() ? color() : fl_inactive(color()));
-    draw_label(tx, y() + by, tw, h() - bh);
-  }
-}
-
-
-/**  
-    The constructor creates the progress bar using the position, size, and label.
-    
-    You can set the background color with color() and the
-    progress bar color with selection_color(), or you can set both colors
-    together with color(unsigned bg, unsigned sel).
-    
-    The default colors are FL_BACKGROUND2_COLOR and FL_YELLOW, resp.
-*/
-Fl_Progress::Fl_Progress(int X, int Y, int W, int H, const char* L)
-: Fl_Widget(X, Y, W, H, L) {
-  align(FL_ALIGN_INSIDE);
-  box(FL_DOWN_BOX);
-  color(FL_BACKGROUND2_COLOR, FL_YELLOW);
-  minimum(0.0f);
-  maximum(100.0f);
-  value(0.0f);
-}
-
-
-//
-// End of "$Id: Fl_Progress.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Quartz_Printer.mm b/common/fltk/src/Fl_Quartz_Printer.mm
deleted file mode 100644
index 9aceec2..0000000
--- a/common/fltk/src/Fl_Quartz_Printer.mm
+++ /dev/null
@@ -1,308 +0,0 @@
-//
-// "$Id: Fl_Quartz_Printer.mm 8467 2011-02-23 14:36:18Z manolo $"
-//
-// Mac OS X-specific printing support (objective-c++) for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef __APPLE__
-#include <FL/Fl_Printer.H>
-
-#include <FL/Fl.H>
-#include <FL/fl_ask.H>
-#include <FL/fl_draw.H>
-#import <Cocoa/Cocoa.h>
-
-extern void fl_quartz_restore_line_style_();
-
-Fl_System_Printer::Fl_System_Printer(void)
-{
-  x_offset = 0;
-  y_offset = 0;
-  scale_x = scale_y = 1.;
-  gc = 0;
-  driver(Fl_Display_Device::display_device()->driver());
-}
-
-Fl_System_Printer::~Fl_System_Printer(void) {}
-
-int Fl_System_Printer::start_job (int pagecount, int *frompage, int *topage)
-//printing using a Quartz graphics context
-//returns 0 iff OK
-{
-  OSStatus status = 0;
-  Fl_X::q_release_context();
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  if( [NSPrintPanel instancesRespondToSelector:@selector(runModalWithPrintInfo:)] &&
-     [NSPrintInfo instancesRespondToSelector:@selector(PMPrintSession)] ) {
-    NSAutoreleasePool *localPool;
-    localPool = [[NSAutoreleasePool alloc] init]; 
-    NSPrintInfo *info = [NSPrintInfo sharedPrintInfo];
-    NSPageLayout *layout = [NSPageLayout pageLayout];
-    NSInteger retval = [layout runModal];
-    if(retval == NSOKButton) {
-      NSPrintPanel *panel = [NSPrintPanel printPanel];
-      retval = (NSInteger)[panel runModalWithPrintInfo:info];//from 10.5 only
-    }
-    if(retval != NSOKButton) {
-      Fl::first_window()->show();
-      [localPool release];
-      return 1;
-    }
-    printSession = (PMPrintSession)[info PMPrintSession];
-    pageFormat = (PMPageFormat)[info PMPageFormat];
-    printSettings = (PMPrintSettings)[info PMPrintSettings];
-    UInt32 from32, to32;
-    PMGetFirstPage(printSettings, &from32); 
-    if (frompage) *frompage = (int)from32;
-    PMGetLastPage(printSettings, &to32); 
-    if (topage) *topage = (int)to32;
-    if(topage && *topage > pagecount) *topage = pagecount;
-    status = PMSessionBeginCGDocumentNoDialog(printSession, printSettings, pageFormat);
-    [localPool release];
-  }
-  else {
-#endif
-    
-#if !__LP64__
-    Boolean accepted;
-    status = PMCreateSession(&printSession);
-    if (status != noErr) return 1;
-    status = PMCreatePageFormat(&pageFormat);
-    status = PMSessionDefaultPageFormat(printSession, pageFormat);
-    if (status != noErr) return 1;
-    // get pointer to the PMSessionPageSetupDialog Carbon function
-    typedef OSStatus (*dialog_f)(PMPrintSession, PMPageFormat, Boolean *);
-    static dialog_f f = NULL;
-    if (!f) f = (dialog_f)Fl_X::get_carbon_function("PMSessionPageSetupDialog");
-    status = (*f)(printSession, pageFormat, &accepted);
-    if (status != noErr || !accepted) {
-      Fl::first_window()->show();
-      return 1;
-    }
-    status = PMCreatePrintSettings(&printSettings);
-    if (status != noErr || printSettings == kPMNoPrintSettings) return 1;
-    status = PMSessionDefaultPrintSettings (printSession, printSettings);
-    if (status != noErr) return 1;
-    PMSetPageRange(printSettings, 1, (UInt32)kPMPrintAllPages);
-    // get pointer to the PMSessionPrintDialog Carbon function
-    typedef OSStatus (*dialog_f2)(PMPrintSession, PMPrintSettings, PMPageFormat, Boolean *);
-    static dialog_f2 f2 = NULL;
-    if (!f2) f2 = (dialog_f2)Fl_X::get_carbon_function("PMSessionPrintDialog");
-    status = (*f2)(printSession, printSettings, pageFormat, &accepted);
-    if (!accepted) status = kPMCancel;
-    if (status != noErr) {
-      Fl::first_window()->show();
-      return 1;
-    }
-    UInt32 from32, to32;
-    PMGetFirstPage(printSettings, &from32); 
-    if (frompage) *frompage = (int)from32;
-    PMGetLastPage(printSettings, &to32); 
-    if (topage) *topage = (int)to32;
-    if(topage && *topage > pagecount) *topage = pagecount;
-    CFStringRef mystring[1];
-    mystring[0] = kPMGraphicsContextCoreGraphics;
-    CFArrayRef array = CFArrayCreate(NULL, (const void **)mystring, 1, &kCFTypeArrayCallBacks);
-    status = PMSessionSetDocumentFormatGeneration(printSession, kPMDocumentFormatDefault, array, NULL);
-    CFRelease(array);
-    status = PMSessionBeginDocumentNoDialog(printSession, printSettings, pageFormat);
-#endif //__LP64__
-    
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-  if (status != noErr) return 1;
-  y_offset = x_offset = 0;
-  this->set_current();
-  return 0;
-}
-
-void Fl_System_Printer::margins(int *left, int *top, int *right, int *bottom)
-{
-  PMPaper paper;
-  PMGetPageFormatPaper(pageFormat, &paper);
-  PMOrientation orientation;
-  PMGetOrientation(pageFormat, &orientation);
-  PMPaperMargins margins;
-  PMPaperGetMargins(paper, &margins);
-  if(orientation == kPMPortrait) {
-    if (left) *left = (int)(margins.left / scale_x + 0.5);
-    if (top) *top = (int)(margins.top / scale_y + 0.5);
-    if (right) *right = (int)(margins.right / scale_x + 0.5);
-    if (bottom) *bottom = (int)(margins.bottom / scale_y + 0.5);
-    }
-  else {
-    if (left) *left = (int)(margins.top / scale_x + 0.5);
-    if (top) *top = (int)(margins.left / scale_y + 0.5);
-    if (right) *right = (int)(margins.bottom / scale_x + 0.5);
-    if (bottom) *bottom = (int)(margins.right / scale_y + 0.5);
-  }
-}
-
-int Fl_System_Printer::printable_rect(int *w, int *h)
-//returns 0 iff OK
-{
-  OSStatus status;
-  PMRect pmRect;
-  int x, y;
-  
-  status = PMGetAdjustedPageRect(pageFormat, &pmRect);
-  if (status != noErr) return 1;
-  
-  x = (int)pmRect.left;
-  y = (int)pmRect.top;
-  *w = int((int)(pmRect.right - x) / scale_x + 1);
-  *h = int((int)(pmRect.bottom - y) / scale_y + 1);
-  return 0;
-}
-
-void Fl_System_Printer::origin(int x, int y)
-{
-  x_offset = x;
-  y_offset = y;
-  CGContextRestoreGState(fl_gc);
-  CGContextRestoreGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-  CGContextScaleCTM(fl_gc, scale_x, scale_y);
-  CGContextTranslateCTM(fl_gc, x, y);
-  CGContextRotateCTM(fl_gc, angle);
-  CGContextSaveGState(fl_gc);
-}
-
-void Fl_System_Printer::scale (float s_x, float s_y)
-{
-  if (s_y == 0.) s_y = s_x;
-  scale_x = s_x;
-  scale_y = s_y;
-  CGContextRestoreGState(fl_gc);
-  CGContextRestoreGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-  CGContextScaleCTM(fl_gc, scale_x, scale_y);
-  CGContextRotateCTM(fl_gc, angle);
-  x_offset = y_offset = 0;
-  CGContextSaveGState(fl_gc);
-}
-
-void Fl_System_Printer::rotate (float rot_angle)
-{
-  angle = - rot_angle * M_PI / 180.;
-  CGContextRestoreGState(fl_gc);
-  CGContextRestoreGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-  CGContextScaleCTM(fl_gc, scale_x, scale_y);
-  CGContextTranslateCTM(fl_gc, x_offset, y_offset);
-  CGContextRotateCTM(fl_gc, angle);
-  CGContextSaveGState(fl_gc);
-}
-
-void Fl_System_Printer::translate(int x, int y)
-{
-  CGContextSaveGState(fl_gc);
-  CGContextTranslateCTM(fl_gc, x, y );
-  CGContextSaveGState(fl_gc);
-}
-
-void Fl_System_Printer::untranslate(void)
-{
-  CGContextRestoreGState(fl_gc);
-  CGContextRestoreGState(fl_gc);
-}
-
-int Fl_System_Printer::start_page (void)
-{	
-  OSStatus status = PMSessionBeginPageNoDialog(printSession, pageFormat, NULL);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-  if ( PMSessionGetCGGraphicsContext != NULL ) {
-    status = PMSessionGetCGGraphicsContext(printSession, &fl_gc);
-  }
-  else {
-#endif
-#if ! __LP64__
-    status = PMSessionGetGraphicsContext(printSession,NULL,(void **)&fl_gc);
-#endif
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-  }
-#endif
-  PMRect pmRect;
-  float win_scale_x, win_scale_y;
-
-  PMPaper paper;
-  PMGetPageFormatPaper(pageFormat, &paper);
-  PMPaperMargins margins;
-  PMPaperGetMargins(paper, &margins);
-  PMOrientation orientation;
-  PMGetOrientation(pageFormat, &orientation);
-  
-  status = PMGetAdjustedPageRect(pageFormat, &pmRect);
-  double h = pmRect.bottom - pmRect.top;
-  x_offset = 0;
-  y_offset = 0; 
-  angle = 0;
-  scale_x = scale_y = 1;
-  win_scale_x = win_scale_y = 1;
-  if(orientation == kPMPortrait)
-    CGContextTranslateCTM(fl_gc, margins.left, margins.bottom + h);
-  else
-    CGContextTranslateCTM(fl_gc, margins.top, margins.right + h);
-  CGContextScaleCTM(fl_gc, win_scale_x, - win_scale_y);
-  fl_quartz_restore_line_style_();
-  CGContextSetShouldAntialias(fl_gc, false);
-  CGContextSaveGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-  fl_line_style(FL_SOLID);
-  fl_window = (void *)1; // TODO: something better
-  fl_clip_region(0);
-  if( status == noErr) gc = fl_gc;
-  return status != noErr;
-}
-
-int Fl_System_Printer::end_page (void)
-{	
-  CGContextFlush(fl_gc);
-  CGContextRestoreGState(fl_gc);
-  CGContextRestoreGState(fl_gc);
-  OSStatus status = PMSessionEndPageNoDialog(printSession);
-  gc = NULL;
-  return status != noErr;
-}
-
-void Fl_System_Printer::end_job (void)
-{
-  OSStatus status;
-  
-  status = PMSessionError(printSession);
-  if (status != noErr) {
-    fl_alert ("PM Session error %d", (int)status);
-  }
-  PMSessionEndDocumentNoDialog(printSession);
-  Fl_Display_Device::display_device()->set_current();
-  fl_gc = 0;
-  Fl::first_window()->show();
-}
-
-#endif // __APPLE__
-
-//
-// End of "$Id: Fl_Quartz_Printer.mm 8467 2011-02-23 14:36:18Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Repeat_Button.cxx b/common/fltk/src/Fl_Repeat_Button.cxx
deleted file mode 100644
index 65ed3ef..0000000
--- a/common/fltk/src/Fl_Repeat_Button.cxx
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// "$Id: Fl_Repeat_Button.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Repeat button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Repeat_Button.H>
-
-#define INITIALREPEAT .5
-#define REPEAT .1
-
-void Fl_Repeat_Button::repeat_callback(void *v) {
-  Fl_Button *b = (Fl_Button*)v;
-  Fl::add_timeout(REPEAT,repeat_callback,b);
-  b->do_callback();
-}
-
-int Fl_Repeat_Button::handle(int event) {
-  int newval;
-  switch (event) {
-  case FL_HIDE:
-  case FL_DEACTIVATE:
-  case FL_RELEASE:
-    newval = 0; goto J1;
-  case FL_PUSH:
-  case FL_DRAG:
-    if (Fl::visible_focus()) Fl::focus(this);
-    newval = Fl::event_inside(this);
-  J1:
-    if (!active()) 
-      newval = 0;
-    if (value(newval)) {
-      if (newval) {
-	Fl::add_timeout(INITIALREPEAT,repeat_callback,this);
-	do_callback();
-      } else {
-	Fl::remove_timeout(repeat_callback,this);
-      }
-    }
-    return 1;
-  default:
-    return Fl_Button::handle(event);
-  }
-}
-
-//
-// End of "$Id: Fl_Repeat_Button.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Return_Button.cxx b/common/fltk/src/Fl_Return_Button.cxx
deleted file mode 100644
index 42db047..0000000
--- a/common/fltk/src/Fl_Return_Button.cxx
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// "$Id: Fl_Return_Button.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Return button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/fl_draw.H>
-
-int fl_return_arrow(int x, int y, int w, int h) {
-  int size = w; if (h<size) size = h;
-  int d = (size+2)/4; if (d<3) d = 3;
-  int t = (size+9)/12; if (t<1) t = 1;
-  int x0 = x+(w-2*d-2*t-1)/2;
-  int x1 = x0+d;
-  int y0 = y+h/2;
-  fl_color(FL_LIGHT3);
-  fl_line(x0, y0, x1, y0+d);
-  fl_yxline(x1, y0+d, y0+t, x1+d+2*t, y0-d);
-  fl_yxline(x1, y0-t, y0-d);
-  fl_color(fl_gray_ramp(0));
-  fl_line(x0, y0, x1, y0-d);
-  fl_color(FL_DARK3);
-  fl_xyline(x1+1, y0-t, x1+d, y0-d, x1+d+2*t);
-  return 1;
-}
-
-void Fl_Return_Button::draw() {
-  if (type() == FL_HIDDEN_BUTTON) return;
-  draw_box(value() ? (down_box()?down_box():fl_down(box())) : box(),
-	   value() ? selection_color() : color());
-  int W = h();
-  if (w()/3 < W) W = w()/3;
-  fl_return_arrow(x()+w()-W-4, y(), W, h());
-  draw_label(x(), y(), w()-W+4, h());
-  if (Fl::focus() == this) draw_focus();
-}
-
-int Fl_Return_Button::handle(int event) {
-  if (event == FL_SHORTCUT &&
-      (Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter)) {
-    simulate_key_action();
-    do_callback();
-    return 1;
-  } else
-    return Fl_Button::handle(event);
-}
-
-//
-// End of "$Id: Fl_Return_Button.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Roller.cxx b/common/fltk/src/Fl_Roller.cxx
deleted file mode 100644
index 8cfbf17..0000000
--- a/common/fltk/src/Fl_Roller.cxx
+++ /dev/null
@@ -1,185 +0,0 @@
-//
-// "$Id: Fl_Roller.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Roller widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Rapid-App style knob
-
-#include <FL/Fl.H>
-#include <FL/Fl_Roller.H>
-#include <FL/fl_draw.H>
-#include <math.h>
-
-int Fl_Roller::handle(int event) {
-  static int ipos;
-  int newpos = horizontal() ? Fl::event_x() : Fl::event_y();
-  switch (event) {
-  case FL_PUSH:
-    if (Fl::visible_focus()) {
-      Fl::focus(this);
-      redraw();
-    }
-    handle_push();
-    ipos = newpos;
-    return 1;
-  case FL_DRAG:
-    handle_drag(clamp(round(increment(previous_value(),newpos-ipos))));
-    return 1;
-  case FL_RELEASE:
-    handle_release();
-    return 1;
-  case FL_KEYBOARD :
-    switch (Fl::event_key()) {
-      case FL_Up:
-        if (horizontal()) return 0;
-	handle_drag(clamp(increment(value(),-1)));
-	return 1;
-      case FL_Down:
-        if (horizontal()) return 0;
-	handle_drag(clamp(increment(value(),1)));
-	return 1;
-      case FL_Left:
-        if (!horizontal()) return 0;
-	handle_drag(clamp(increment(value(),-1)));
-	return 1;
-      case FL_Right:
-        if (!horizontal()) return 0;
-	handle_drag(clamp(increment(value(),1)));
-	return 1;
-      default:
-        return 0;
-    }
-    // break not required because of switch...
-  case FL_FOCUS :
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    } else return 0;
-  case FL_ENTER :
-  case FL_LEAVE :
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-void Fl_Roller::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  int X = x()+Fl::box_dx(box());
-  int Y = y()+Fl::box_dy(box());
-  int W = w()-Fl::box_dw(box())-1;
-  int H = h()-Fl::box_dh(box())-1;
-  if (W<=0 || H <=0) return;
-  int offset = step() ? int(value()/step()) : 0;
-  const double ARC = 1.5; // 1/2 the number of radians visible
-  const double delta = .2; // radians per knurl
-  if (horizontal()) { // horizontal one
-    // draw shaded ends of wheel:
-    int h1 = W/4+1; // distance from end that shading starts
-    fl_color(color()); fl_rectf(X+h1,Y,W-2*h1,H);
-    for (int i=0; h1; i++) {
-      fl_color((Fl_Color)(FL_GRAY-i-1));
-      int h2 = FL_GRAY-i-1 > FL_DARK3 ? 2*h1/3+1 : 0;
-      fl_rectf(X+h2,Y,h1-h2,H);
-      fl_rectf(X+W-h1,Y,h1-h2,H);
-      h1 = h2;
-    }
-    if (active_r()) {
-      // draw ridges:
-      double junk;
-      for (double yy = -ARC+modf(offset*sin(ARC)/(W/2)/delta,&junk)*delta;;
-	   yy += delta) {
-	int yy1 = int((sin(yy)/sin(ARC)+1)*W/2);
-	if (yy1 <= 0) continue; else if (yy1 >= W-1) break;
-	fl_color(FL_DARK3); fl_yxline(X+yy1,Y+1,Y+H-1);
-	if (yy < 0) yy1--; else yy1++;
-	fl_color(FL_LIGHT1);fl_yxline(X+yy1,Y+1,Y+H-1);
-      }
-      // draw edges:
-      h1 = W/8+1; // distance from end the color inverts
-      fl_color(FL_DARK2);
-      fl_xyline(X+h1,Y+H-1,X+W-h1);
-      fl_color(FL_DARK3);
-      fl_yxline(X,Y+H,Y,X+h1);
-      fl_xyline(X+W-h1,Y,X+W);
-      fl_color(FL_LIGHT2);
-      fl_xyline(X+h1,Y-1,X+W-h1);
-      fl_yxline(X+W,Y,Y+H,X+W-h1);
-      fl_xyline(X+h1,Y+H,X);
-    }
-  } else { // vertical one
-    // draw shaded ends of wheel:
-    int h1 = H/4+1; // distance from end that shading starts
-    fl_color(color()); fl_rectf(X,Y+h1,W,H-2*h1);
-    for (int i=0; h1; i++) {
-      fl_color((Fl_Color)(FL_GRAY-i-1));
-      int h2 = FL_GRAY-i-1 > FL_DARK3 ? 2*h1/3+1 : 0;
-      fl_rectf(X,Y+h2,W,h1-h2);
-      fl_rectf(X,Y+H-h1,W,h1-h2);
-      h1 = h2;
-    }
-    if (active_r()) {
-      // draw ridges:
-      double junk;
-      for (double yy = -ARC+modf(offset*sin(ARC)/(H/2)/delta,&junk)*delta;
-	   ; yy += delta) {
-	int yy1 = int((sin(yy)/sin(ARC)+1)*H/2);
-	if (yy1 <= 0) continue; else if (yy1 >= H-1) break;
-	fl_color(FL_DARK3); fl_xyline(X+1,Y+yy1,X+W-1);
-	if (yy < 0) yy1--; else yy1++;
-	fl_color(FL_LIGHT1);fl_xyline(X+1,Y+yy1,X+W-1);
-      }
-      // draw edges:
-      h1 = H/8+1; // distance from end the color inverts
-      fl_color(FL_DARK2);
-      fl_yxline(X+W-1,Y+h1,Y+H-h1);
-      fl_color(FL_DARK3);
-      fl_xyline(X+W,Y,X,Y+h1);
-      fl_yxline(X,Y+H-h1,Y+H);
-      fl_color(FL_LIGHT2);
-      fl_yxline(X,Y+h1,Y+H-h1);
-      fl_xyline(X,Y+H,X+W,Y+H-h1);
-      fl_yxline(X+W,Y+h1,Y);
-    }
-  }
-
-  if (Fl::focus() == this) draw_focus(FL_THIN_UP_FRAME, x(), y(), w(), h());
-}
-
-/**
-  Creates a new Fl_Roller widget using the given position,
-  size, and label string. The default boxtype is FL_NO_BOX.
-  <P>Inherited destructor destroys the valuator.
-*/
-Fl_Roller::Fl_Roller(int X,int Y,int W,int H,const char* L)
-  : Fl_Valuator(X,Y,W,H,L) {
-  box(FL_UP_BOX);
-  step(1,1000);
-}
-
-//
-// End of "$Id: Fl_Roller.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Round_Button.cxx b/common/fltk/src/Fl_Round_Button.cxx
deleted file mode 100644
index f972076..0000000
--- a/common/fltk/src/Fl_Round_Button.cxx
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// "$Id: Fl_Round_Button.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Round button for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// A subclass of Fl_Button that always draws as a round circle.  This
-// circle is smaller than the widget size and can be surrounded by
-// another box type, for compatibility with Forms.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Round_Button.H>
-
-/**
-  Creates a new Fl_Round_Button widget using the given
-  position, size, and label string.
-*/
-Fl_Round_Button::Fl_Round_Button(int X,int Y,int W,int H, const char *l)
-: Fl_Light_Button(X,Y,W,H,l) {
-  box(FL_NO_BOX);
-  down_box(FL_ROUND_DOWN_BOX);
-  selection_color(FL_FOREGROUND_COLOR);
-}
-
-//
-// End of "$Id: Fl_Round_Button.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Scroll.cxx b/common/fltk/src/Fl_Scroll.cxx
deleted file mode 100644
index d93b43b..0000000
--- a/common/fltk/src/Fl_Scroll.cxx
+++ /dev/null
@@ -1,420 +0,0 @@
-//
-// "$Id: Fl_Scroll.cxx 8591 2011-04-14 13:21:12Z manolo $"
-//
-// Scroll widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Tiled_Image.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/fl_draw.H>
-
-/** Clear all but the scrollbars... */
-void Fl_Scroll::clear() {
-  // Note: the scrollbars are removed from the group before calling
-  // Fl_Group::clear() to take advantage of the optimized widget removal
-  // and deletion. Finally they are added to Fl_Scroll's group again. This
-  // is MUCH faster than removing the widgets one by one (STR #2409).
-
-  remove(scrollbar);
-  remove(hscrollbar);
-  Fl_Group::clear();
-  add(hscrollbar);
-  add(scrollbar);
-}
-
-/** Insure the scrollbars are the last children */
-void Fl_Scroll::fix_scrollbar_order() {
-  Fl_Widget** a = (Fl_Widget**)array();
-  if (a[children()-1] != &scrollbar) {
-    int i,j; for (i = j = 0; j < children(); j++)
-      if (a[j] != &hscrollbar && a[j] != &scrollbar) a[i++] = a[j];
-    a[i++] = &hscrollbar;
-    a[i++] = &scrollbar;
-  }
-}
-
-// Draw widget's background and children within a specific clip region
-//    So widget can just redraw damaged parts.
-//
-void Fl_Scroll::draw_clip(void* v,int X, int Y, int W, int H) {
-  fl_push_clip(X,Y,W,H);
-  Fl_Scroll* s = (Fl_Scroll*)v;
-  // erase background as needed...
-  switch (s->box()) {
-    case FL_NO_BOX :
-    case FL_UP_FRAME :
-    case FL_DOWN_FRAME :
-    case FL_THIN_UP_FRAME :
-    case FL_THIN_DOWN_FRAME :
-    case FL_ENGRAVED_FRAME :
-    case FL_EMBOSSED_FRAME :
-    case FL_BORDER_FRAME :
-    case _FL_SHADOW_FRAME :
-    case _FL_ROUNDED_FRAME :
-    case _FL_OVAL_FRAME :
-    case _FL_PLASTIC_UP_FRAME :
-    case _FL_PLASTIC_DOWN_FRAME :
-        if (s->parent() == (Fl_Group *)s->window() && Fl::scheme_bg_) {
-	  Fl::scheme_bg_->draw(X-(X%((Fl_Tiled_Image *)Fl::scheme_bg_)->image()->w()),
-	                       Y-(Y%((Fl_Tiled_Image *)Fl::scheme_bg_)->image()->h()),
-	                       W+((Fl_Tiled_Image *)Fl::scheme_bg_)->image()->w(),
-			       H+((Fl_Tiled_Image *)Fl::scheme_bg_)->image()->h());
-	  break;
-        }
-
-    default :
-	fl_color(s->color());
-	fl_rectf(X,Y,W,H);
-	break;
-  }
-  Fl_Widget*const* a = s->array();
-  for (int i=s->children()-2; i--;) {
-    Fl_Widget& o = **a++;
-    s->draw_child(o);
-    s->draw_outside_label(o);
-  }
-  fl_pop_clip();
-}
-
-/**
-   Calculate visibility/size/position of scrollbars, find children's bounding box.
-   The \p si paramater will be filled with data from the calculations.
-   Derived classes can make use of this call to figure out the scrolling area
-   eg. during resize() handling.
-   \param[in] si -- ScrollInfo structure
-   \returns Structure containing the calculated info.
-*/
-void Fl_Scroll::recalc_scrollbars(ScrollInfo &si) {
-
-  // inner box of widget (excluding scrollbars)
-  si.innerbox_x = x()+Fl::box_dx(box());
-  si.innerbox_y = y()+Fl::box_dy(box());
-  si.innerbox_w = w()-Fl::box_dw(box());
-  si.innerbox_h = h()-Fl::box_dh(box());
-
-  // accumulate a bounding box for all the children
-  si.child_l = si.innerbox_x;
-  si.child_r = si.innerbox_x;
-  si.child_b = si.innerbox_y;
-  si.child_t = si.innerbox_y;
-  int first = 1;
-  Fl_Widget*const* a = array();
-  for (int i=children()-2; i--;) {
-    Fl_Widget* o = *a++;
-    if ( first ) {
-        first = 0;
-	si.child_l = o->x();
-	si.child_r = o->x()+o->w();
-	si.child_b = o->y()+o->h();
-	si.child_t = o->y();
-    } else {
-	if (o->x() < si.child_l) si.child_l = o->x();
-	if (o->y() < si.child_t) si.child_t = o->y();
-	if (o->x()+o->w() > si.child_r) si.child_r = o->x()+o->w();
-	if (o->y()+o->h() > si.child_b) si.child_b = o->y()+o->h();
-    }
-  }
-
-  // Turn the scrollbars on and off as necessary.
-  // See if children would fit if we had no scrollbars...
-  {
-    int X = si.innerbox_x;
-    int Y = si.innerbox_y;
-    int W = si.innerbox_w;
-    int H = si.innerbox_h;
-
-    si.scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-    si.vneeded = 0;
-    si.hneeded = 0;
-    if (type() & VERTICAL) {
-      if ((type() & ALWAYS_ON) || si.child_t < Y || si.child_b > Y+H) {
-	si.vneeded = 1;
-	W -= si.scrollsize;
-	if (scrollbar.align() & FL_ALIGN_LEFT) X += si.scrollsize;
-      }
-    }
-    if (type() & HORIZONTAL) {
-      if ((type() & ALWAYS_ON) || si.child_l < X || si.child_r > X+W) {
-	si.hneeded = 1;
-	H -= si.scrollsize;
-	if (scrollbar.align() & FL_ALIGN_TOP) Y += si.scrollsize;
-	// recheck vertical since we added a horizontal scrollbar
-	if (!si.vneeded && (type() & VERTICAL)) {
-	  if ((type() & ALWAYS_ON) || si.child_t < Y || si.child_b > Y+H) {
-	    si.vneeded = 1;
-	    W -= si.scrollsize;
-	    if (scrollbar.align() & FL_ALIGN_LEFT) X += si.scrollsize;
-	  }
-	}
-      }
-    }
-    si.innerchild_x = X;
-    si.innerchild_y = Y;
-    si.innerchild_w = W;
-    si.innerchild_h = H;
-  }
-
-  // calculate hor scrollbar position
-  si.hscroll_x = si.innerchild_x;
-  si.hscroll_y = (scrollbar.align() & FL_ALIGN_TOP) 
-		     ? si.innerbox_y
-		     : si.innerbox_y + si.innerbox_h - si.scrollsize;
-  si.hscroll_w = si.innerchild_w;
-  si.hscroll_h = si.scrollsize;
-
-  // calculate ver scrollbar position
-  si.vscroll_x = (scrollbar.align() & FL_ALIGN_LEFT)
-                     ? si.innerbox_x
-		     : si.innerbox_x + si.innerbox_w - si.scrollsize;
-  si.vscroll_y = si.innerchild_y;
-  si.vscroll_w = si.scrollsize;
-  si.vscroll_h = si.innerchild_h;
-
-  // calculate h/v scrollbar values (pos/size/first/total)
-  si.hpos = si.innerchild_x - si.child_l;
-  si.hsize = si.innerchild_w;
-  si.hfirst = 0;
-  si.htotal = si.child_r - si.child_l;
-  if ( si.hpos < 0 ) { si.htotal += (-si.hpos); si.hfirst = si.hpos; }
-
-  si.vpos = si.innerchild_y - si.child_t;
-  si.vsize = si.innerchild_h;
-  si.vfirst = 0;
-  si.vtotal = si.child_b - si.child_t;
-  if ( si.vpos < 0 ) { si.vtotal += (-si.vpos); si.vfirst = si.vpos; }
-
-//  printf("DEBUG --- ScrollInfo ---\n");
-//  printf("DEBUG        scrollsize: %d\n", si.scrollsize);
-//  printf("DEBUG  hneeded, vneeded: %d %d\n", si.hneeded, si.vneeded);
-//  printf("DEBUG     innerbox xywh: %d %d %d %d\n", si.innerbox_x,   si.innerbox_y,   si.innerbox_w,   si.innerbox_h);
-//  printf("DEBUG   innerchild xywh: %d %d %d %d\n", si.innerchild_x, si.innerchild_y, si.innerchild_w, si.innerchild_h);
-//  printf("DEBUG        child lrbt: %d %d %d %d\n", si.child_l, si.child_r, si.child_b, si.child_t);
-//  printf("DEBUG      hscroll xywh: %d %d %d %d\n", si.hscroll_x, si.hscroll_y, si.hscroll_w, si.hscroll_h);
-//  printf("DEBUG      vscroll xywh: %d %d %d %d\n", si.vscroll_x, si.vscroll_y, si.vscroll_w, si.vscroll_h);
-//  printf("DEBUG  horz scroll vals: %d %d %d %d\n", si.hpos, si.hsize, si.hfirst, si.htotal);
-//  printf("DEBUG  vert scroll vals: %d %d %d %d\n", si.vpos, si.vsize, si.vfirst, si.vtotal);
-//  printf("DEBUG \n");
-}
-
-/**
-  Returns the bounding box for the interior of the scrolling area, inside
-  the scrollbars.
-  
-  Currently this is only reliable after draw(), and before any resizing of
-  the Fl_Scroll or any child widgets occur.
-  
-  \todo The visibility of the scrollbars ought to be checked/calculated
-  outside of the draw() method (STR #1895).
-*/
-void Fl_Scroll::bbox(int& X, int& Y, int& W, int& H) {
-  X = x()+Fl::box_dx(box());
-  Y = y()+Fl::box_dy(box());
-  W = w()-Fl::box_dw(box());
-  H = h()-Fl::box_dh(box());
-  if (scrollbar.visible()) {
-    W -= scrollbar.w();
-    if (scrollbar.align() & FL_ALIGN_LEFT) X += scrollbar.w();
-  }
-  if (hscrollbar.visible()) {
-    H -= hscrollbar.h();
-    if (scrollbar.align() & FL_ALIGN_TOP) Y += hscrollbar.h();
-  }
-}
-
-void Fl_Scroll::draw() {
-  fix_scrollbar_order();
-  int X,Y,W,H; bbox(X,Y,W,H);
-
-  uchar d = damage();
-
-  if (d & FL_DAMAGE_ALL) { // full redraw
-    draw_box(box(),x(),y(),w(),h(),color());
-    draw_clip(this, X, Y, W, H);
-  } else {
-    if (d & FL_DAMAGE_SCROLL) {
-      // scroll the contents:
-      fl_scroll(X, Y, W, H, oldx-xposition_, oldy-yposition_, draw_clip, this);
-
-      // Erase the background as needed...
-      Fl_Widget*const* a = array();
-      int L, R, T, B;
-      L = 999999;
-      R = 0;
-      T = 999999;
-      B = 0;
-      for (int i=children()-2; i--; a++) {
-        if ((*a)->x() < L) L = (*a)->x();
-	if (((*a)->x() + (*a)->w()) > R) R = (*a)->x() + (*a)->w();
-        if ((*a)->y() < T) T = (*a)->y();
-	if (((*a)->y() + (*a)->h()) > B) B = (*a)->y() + (*a)->h();
-      }
-      if (L > X) draw_clip(this, X, Y, L - X, H);
-      if (R < (X + W)) draw_clip(this, R, Y, X + W - R, H);
-      if (T > Y) draw_clip(this, X, Y, W, T - Y);
-      if (B < (Y + H)) draw_clip(this, X, B, W, Y + H - B);
-    }
-    if (d & FL_DAMAGE_CHILD) { // draw damaged children
-      fl_push_clip(X, Y, W, H);
-      Fl_Widget*const* a = array();
-      for (int i=children()-2; i--;) update_child(**a++);
-      fl_pop_clip();
-    }
-  }
-
-  // Calculate where scrollbars should go, and draw them
-  {
-      ScrollInfo si;
-      recalc_scrollbars(si);
-
-      // Now that we know what's needed, make it so.
-      if (si.vneeded && !scrollbar.visible()) {
-	scrollbar.set_visible();
-	d = FL_DAMAGE_ALL;
-      }
-      else if (!si.vneeded && scrollbar.visible()) {
-	scrollbar.clear_visible();
-	draw_clip(this, si.vscroll_x, si.vscroll_y, si.vscroll_w, si.vscroll_h);
-	d = FL_DAMAGE_ALL;
-      }
-      if (si.hneeded && !hscrollbar.visible()) {
-	hscrollbar.set_visible();
-	d = FL_DAMAGE_ALL;
-      }
-      else if (!si.hneeded && hscrollbar.visible()) {
-	hscrollbar.clear_visible();
-	draw_clip(this, si.hscroll_x, si.hscroll_y, si.hscroll_w, si.hscroll_h);
-	d = FL_DAMAGE_ALL;
-      }
-      else if ( hscrollbar.h() != si.scrollsize || scrollbar.w() != si.scrollsize ) {
-         // scrollsize changed
-         d = FL_DAMAGE_ALL;
-      }
-
-      scrollbar.resize(si.vscroll_x, si.vscroll_y, si.vscroll_w, si.vscroll_h);
-      oldy = yposition_ = si.vpos;	// si.innerchild_y - si.child_t;
-      scrollbar.value(si.vpos, si.vsize, si.vfirst, si.vtotal);
-
-      hscrollbar.resize(si.hscroll_x, si.hscroll_y, si.hscroll_w, si.hscroll_h);
-      oldx = xposition_ = si.hpos;	// si.innerchild_x - si.child_l;
-      hscrollbar.value(si.hpos, si.hsize, si.hfirst, si.htotal);
-  }
-
-  // draw the scrollbars:
-  if (d & FL_DAMAGE_ALL) {
-    draw_child(scrollbar);
-    draw_child(hscrollbar);
-    if (scrollbar.visible() && hscrollbar.visible()) {
-      // fill in the little box in the corner
-      fl_color(color());
-      fl_rectf(scrollbar.x(), hscrollbar.y(), scrollbar.w(), hscrollbar.h());
-    }
-  } else {
-    update_child(scrollbar);
-    update_child(hscrollbar);
-  }
-}
-
-void Fl_Scroll::resize(int X, int Y, int W, int H) {
-  int dx = X-x(), dy = Y-y();
-  int dw = W-w(), dh = H-h();
-  Fl_Widget::resize(X,Y,W,H); // resize _before_ moving children around
-  fix_scrollbar_order();
-  // move all the children:
-  Fl_Widget*const* a = array();
-  for (int i=children()-2; i--;) {
-    Fl_Widget* o = *a++;
-    o->position(o->x()+dx, o->y()+dy);
-  }
-  if (dw==0 && dh==0) {
-    char pad = ( scrollbar.visible() && hscrollbar.visible() );
-    char al = ( (scrollbar.align() & FL_ALIGN_LEFT) != 0 );
-    char at = ( (scrollbar.align() & FL_ALIGN_TOP)  !=0 );
-    scrollbar.position(al?X:X+W-scrollbar.w(), (at&&pad)?Y+hscrollbar.h():Y);
-    hscrollbar.position((al&&pad)?X+scrollbar.w():X, at?Y:Y+H-hscrollbar.h());
-  } else {
-    // FIXME recalculation of scrollbars needs to be moved out fo "draw()" (STR #1895)
-    redraw(); // need full recalculation of scrollbars
-  }
-}
-
-/**  Moves the contents of the scroll group to a new position.*/
-void Fl_Scroll::scroll_to(int X, int Y) {
-  int dx = xposition_-X;
-  int dy = yposition_-Y;
-  if (!dx && !dy) return;
-  xposition_ = X;
-  yposition_ = Y;
-  Fl_Widget*const* a = array();
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o == &hscrollbar || o == &scrollbar) continue;
-    o->position(o->x()+dx, o->y()+dy);
-  }
-  if (parent() == (Fl_Group *)window() && Fl::scheme_bg_) damage(FL_DAMAGE_ALL);
-  else damage(FL_DAMAGE_SCROLL);
-}
-
-void Fl_Scroll::hscrollbar_cb(Fl_Widget* o, void*) {
-  Fl_Scroll* s = (Fl_Scroll*)(o->parent());
-  s->scroll_to(int(((Fl_Scrollbar*)o)->value()), s->yposition());
-}
-
-void Fl_Scroll::scrollbar_cb(Fl_Widget* o, void*) {
-  Fl_Scroll* s = (Fl_Scroll*)(o->parent());
-  s->scroll_to(s->xposition(), int(((Fl_Scrollbar*)o)->value()));
-}
-/**
-  Creates a new Fl_Scroll widget using the given position,
-  size, and label string. The default boxtype is FL_NO_BOX.
-  <P>The destructor <I>also deletes all the children</I>. This allows a
-  whole tree to be deleted at once, without having to keep a pointer to
-  all the children in the user code. A kludge has been done so the 
-  Fl_Scroll and all of its children can be automatic (local)
-  variables, but you must declare the Fl_Scroll<I>first</I>, so
-  that it is destroyed last.
-*/
-Fl_Scroll::Fl_Scroll(int X,int Y,int W,int H,const char* L)
-  : Fl_Group(X,Y,W,H,L), 
-    scrollbar(X+W-Fl::scrollbar_size(),Y,
-              Fl::scrollbar_size(),H-Fl::scrollbar_size()),
-    hscrollbar(X,Y+H-Fl::scrollbar_size(),
-               W-Fl::scrollbar_size(),Fl::scrollbar_size()) {
-  type(BOTH);
-  xposition_ = oldx = 0;
-  yposition_ = oldy = 0;
-  scrollbar_size_ = 0;
-  hscrollbar.type(FL_HORIZONTAL);
-  hscrollbar.callback(hscrollbar_cb);
-  scrollbar.callback(scrollbar_cb);
-}
-
-int Fl_Scroll::handle(int event) {
-  fix_scrollbar_order();
-  return Fl_Group::handle(event);
-}
-
-//
-// End of "$Id: Fl_Scroll.cxx 8591 2011-04-14 13:21:12Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Scrollbar.cxx b/common/fltk/src/Fl_Scrollbar.cxx
deleted file mode 100644
index 263e664..0000000
--- a/common/fltk/src/Fl_Scrollbar.cxx
+++ /dev/null
@@ -1,292 +0,0 @@
-//
-// "$Id: Fl_Scrollbar.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Scroll bar widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-#include <FL/Fl.H>
-#include <FL/Fl_Scrollbar.H>
-#include <FL/fl_draw.H>
-#include <math.h>
-#include "flstring.h"
-
-#define INITIALREPEAT .5
-#define REPEAT .05
-
-void Fl_Scrollbar::increment_cb() {
-  char inv = maximum()<minimum();
-  int ls = inv ? -linesize_ : linesize_;
-  int i;
-  switch (pushed_) {
-    case 1: // clicked on arrow left
-      i = -ls;
-      break;
-    default: // clicked on arrow right
-      i =  ls;
-      break;
-    case 5: // clicked into the box next to the slider on the left
-      i = -(int((maximum()-minimum())*slider_size()/(1.0-slider_size())));
-      if (inv) {
-        if (i<-ls) i = -ls;
-      } else {
-        if (i>-ls) i = -ls; // err
-      }
-      break;
-    case 6: // clicked into the box next to the slider on the right
-      i = (int((maximum()-minimum())*slider_size()/(1.0-slider_size())));
-      if (inv) {
-        if (i>ls) i = ls;
-      } else {
-        if (i<ls) i = ls; // err
-      }
-      break;
-  }
-  handle_drag(clamp(value() + i));
-}
-
-void Fl_Scrollbar::timeout_cb(void* v) {
-  Fl_Scrollbar* s = (Fl_Scrollbar*)v;
-  s->increment_cb();
-  Fl::add_timeout(REPEAT, timeout_cb, s);
-}
-
-int Fl_Scrollbar::handle(int event) {
-  // area of scrollbar:
-  int area;
-  int X=x(); int Y=y(); int W=w(); int H=h();
-
-  // adjust slider area to be inside the arrow buttons:
-  if (horizontal()) {
-    if (W >= 3*H) {X += H; W -= 2*H;}
-  } else {
-    if (H >= 3*W) {Y += W; H -= 2*W;}
-  }
-
-  // which widget part is highlighted?
-  int relx;
-  int ww;
-  if (horizontal()) {
-    relx = Fl::event_x()-X;
-    ww = W;
-  } else {
-    relx = Fl::event_y()-Y;
-    ww = H;
-  }
-  if (relx < 0) area = 1;
-  else if (relx >= ww) area = 2;
-  else {
-    int S = int(slider_size()*ww+.5);
-    int T = (horizontal() ? H : W)/2+1;
-    if (type()==FL_VERT_NICE_SLIDER || type()==FL_HOR_NICE_SLIDER) T += 4;
-    if (S < T) S = T;
-    double val =
-      (maximum()-minimum()) ? (value()-minimum())/(maximum()-minimum()) : 0.5;
-    int sliderx;
-    if (val >= 1.0) sliderx = ww-S;
-    else if (val <= 0.0) sliderx = 0;
-    else sliderx = int(val*(ww-S)+.5);
-    if (Fl::event_button() == FL_MIDDLE_MOUSE) area = 8;
-    else if (relx < sliderx) area = 5;
-    else if (relx >= sliderx+S) area = 6;
-    else area = 8;
-  }
-
-  switch (event) {
-  case FL_ENTER:
-  case FL_LEAVE:
-    return 1;
-  case FL_RELEASE:
-      damage(FL_DAMAGE_ALL);
-    if (pushed_) {
-      Fl::remove_timeout(timeout_cb, this);
-      pushed_ = 0;
-    }
-    handle_release();
-    return 1;
-  case FL_PUSH:
-    if (pushed_) return 1;
-    if (area != 8) pushed_ = area;
-    if (pushed_) {
-      handle_push();
-      Fl::add_timeout(INITIALREPEAT, timeout_cb, this);
-      increment_cb();
-      damage(FL_DAMAGE_ALL);
-      return 1;
-    }
-    return Fl_Slider::handle(event, X,Y,W,H);
-  case FL_DRAG:
-    if (pushed_) return 1;
-    return Fl_Slider::handle(event, X,Y,W,H);
-  case FL_MOUSEWHEEL :
-    if (horizontal()) {
-      if (Fl::e_dx==0) return 0;
-      int ls = maximum()>=minimum() ? linesize_ : -linesize_;
-      handle_drag(clamp(value() + ls * Fl::e_dx));
-      return 1;
-    } else {
-      if (Fl::e_dy==0) return 0;
-      int ls = maximum()>=minimum() ? linesize_ : -linesize_;
-      handle_drag(clamp(value() + ls * Fl::e_dy));
-      return 1;
-    }
-  case FL_SHORTCUT:
-  case FL_KEYBOARD: {
-    int v = value();
-    int ls = maximum()>=minimum() ? linesize_ : -linesize_;
-    if (horizontal()) {
-      switch (Fl::event_key()) {
-      case FL_Left:
-	v -= ls;
-	break;
-      case FL_Right:
-	v += ls;
-	break;
-      default:
-	return 0;
-      }
-    } else { // vertical
-      switch (Fl::event_key()) {
-      case FL_Up:
-	v -= ls;
-	break;
-      case FL_Down:
-	v += ls;
-	break;
-      case FL_Page_Up:
-	if (slider_size() >= 1.0) return 0;
-	v -= int((maximum()-minimum())*slider_size()/(1.0-slider_size()));
-	v += ls;
-	break;
-      case FL_Page_Down:
-	if (slider_size() >= 1.0) return 0;
-	v += int((maximum()-minimum())*slider_size()/(1.0-slider_size()));
-	v -= ls;
-	break;
-      case FL_Home:
-	v = int(minimum());
-	break;
-      case FL_End:
-	v = int(maximum());
-	break;
-      default:
-	return 0;
-      }
-    }
-    v = int(clamp(v));
-    if (v != value()) {
-      Fl_Slider::value(v);
-      value_damage();
-      set_changed();
-      do_callback();
-    }
-    return 1;}
-  }
-  return 0;
-}
-
-void Fl_Scrollbar::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  int X = x()+Fl::box_dx(box());
-  int Y = y()+Fl::box_dy(box());
-  int W = w()-Fl::box_dw(box());
-  int H = h()-Fl::box_dh(box());
-  if (horizontal()) {
-    if (W < 3*H) {Fl_Slider::draw(X,Y,W,H); return;}
-    Fl_Slider::draw(X+H,Y,W-2*H,H);
-    if (damage()&FL_DAMAGE_ALL) {
-      draw_box((pushed_==1) ? fl_down(slider()) : slider(),
-	       X, Y, H, H, selection_color());
-      draw_box((pushed_==2) ? fl_down(slider()) : slider(),
-	       X+W-H, Y, H, H, selection_color());
-      if (active_r())
-        fl_color(labelcolor());
-      else
-        fl_color(fl_inactive(labelcolor()));
-      int w1 = (H-4)/3; if (w1 < 1) w1 = 1;
-      int x1 = X+(H-w1-1)/2;
-      int yy1 = Y+(H-2*w1-1)/2;
-      if (Fl::scheme_ && !strcmp(Fl::scheme_, "gtk+")) {
-	fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1-1, yy1+w1, x1+w1, yy1);
-	x1 += (W-H);
-	fl_polygon(x1, yy1, x1+1, yy1+w1, x1, yy1+2*w1, x1+w1, yy1+w1);
-      } else {
-	fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1, yy1);
-	x1 += (W-H);
-	fl_polygon(x1, yy1, x1, yy1+2*w1, x1+w1, yy1+w1);
-      }
-    }
-  } else { // vertical
-    if (H < 3*W) {Fl_Slider::draw(X,Y,W,H); return;}
-    Fl_Slider::draw(X,Y+W,W,H-2*W);
-    if (damage()&FL_DAMAGE_ALL) {
-      draw_box((pushed_==1) ? fl_down(slider()) : slider(),
-	       X, Y, W, W, selection_color());
-      draw_box((pushed_==2) ? fl_down(slider()) : slider(),
-	       X, Y+H-W, W, W, selection_color());
-      if (active_r())
-        fl_color(labelcolor());
-      else
-        fl_color(fl_inactive(labelcolor()));
-      int w1 = (W-4)/3; if (w1 < 1) w1 = 1;
-      int x1 = X+(W-2*w1-1)/2;
-      int yy1 = Y+(W-w1-1)/2;
-      if (Fl::scheme_ && !strcmp(Fl::scheme_, "gtk+")) {
-	fl_polygon(x1, yy1+w1, x1+w1, yy1+w1-1, x1+2*w1, yy1+w1, x1+w1, yy1);
-	yy1 += H-W;
-	fl_polygon(x1, yy1, x1+w1, yy1+1, x1+w1, yy1+w1);
-	fl_polygon(x1+w1, yy1+1, x1+2*w1, yy1, x1+w1, yy1+w1);
-      } else {
-	fl_polygon(x1, yy1+w1, x1+2*w1, yy1+w1, x1+w1, yy1);
-	yy1 += H-W;
-	fl_polygon(x1, yy1, x1+w1, yy1+w1, x1+2*w1, yy1);
-      }
-    }
-  }
-}
-
-/**
-  Creates a new Fl_Scrollbar widget with given position, size, and label.
-  You need to do type(FL_HORIZONTAL) if you want a horizontal scrollbar.
-*/
-Fl_Scrollbar::Fl_Scrollbar(int X, int Y, int W, int H, const char* L)
-  : Fl_Slider(X, Y, W, H, L) {
-  box(FL_FLAT_BOX);
-  color(FL_DARK2);
-  slider(FL_UP_BOX);
-  linesize_ = 16;
-  pushed_ = 0;
-  step(1);
-}
-
-/**  Destroys the Scrollbar. */
-Fl_Scrollbar::~Fl_Scrollbar() {
-  if (pushed_)
-    Fl::remove_timeout(timeout_cb, this);
-}
-
-
-//
-// End of "$Id: Fl_Scrollbar.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Shared_Image.cxx b/common/fltk/src/Fl_Shared_Image.cxx
deleted file mode 100644
index 13598a9..0000000
--- a/common/fltk/src/Fl_Shared_Image.cxx
+++ /dev/null
@@ -1,476 +0,0 @@
-//
-// "$Id: Fl_Shared_Image.cxx 8306 2011-01-24 17:04:22Z matt $"
-//
-// Shared image code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-
-#include <FL/Fl.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/Fl_XBM_Image.H>
-#include <FL/Fl_XPM_Image.H>
-
-
-//
-// Global class vars...
-//
-
-Fl_Shared_Image **Fl_Shared_Image::images_ = 0;	// Shared images
-int	Fl_Shared_Image::num_images_ = 0;	// Number of shared images
-int	Fl_Shared_Image::alloc_images_ = 0;	// Allocated shared images
-
-Fl_Shared_Handler *Fl_Shared_Image::handlers_ = 0;// Additional format handlers
-int	Fl_Shared_Image::num_handlers_ = 0;	// Number of format handlers
-int	Fl_Shared_Image::alloc_handlers_ = 0;	// Allocated format handlers
-
-
-//
-// Typedef the C API sort function type the only way I know how...
-//
-
-extern "C" {
-  typedef int (*compare_func_t)(const void *, const void *);
-}
-
-
-/** Returns the Fl_Shared_Image* array */
-Fl_Shared_Image **Fl_Shared_Image::images() {
-  return images_;
-}
-/** Returns the total number of shared images in the array. */
-int Fl_Shared_Image::num_images() {
-  return num_images_;
-}
-
-
-//
-// 'Fl_Shared_Image::compare()' - Compare two shared images...
-//
-
-int
-Fl_Shared_Image::compare(Fl_Shared_Image **i0,		// I - First image
-                         Fl_Shared_Image **i1) {	// I - Second image
-  int i = strcmp((*i0)->name(), (*i1)->name());
-
-  if (i) return i;
-  else if (((*i0)->w() == 0 && (*i1)->original_) ||
-           ((*i1)->w() == 0 && (*i0)->original_)) return 0;
-  else if ((*i0)->w() != (*i1)->w()) return (*i0)->w() - (*i1)->w();
-  else return (*i0)->h() - (*i1)->h();
-}
-
-
-/** 
-  Creates an empty shared image.
-  The constructors create a new shared image record in the image cache.
-  
-  <P>The constructors are protected and cannot be used directly
-  from a program. Use the get() method instead.
-*/
-Fl_Shared_Image::Fl_Shared_Image() : Fl_Image(0,0,0) {
-  name_        = 0;
-  refcount_    = 1;
-  original_    = 0;
-  image_       = 0;
-  alloc_image_ = 0;
-}
-
-
-/** 
-  Creates a shared image from its filename and its corresponding Fl_Image* img.
-  The constructors create a new shared image record in the image cache.
-  
-  <P>The constructors are protected and cannot be used directly
-  from a program. Use the get() method instead.
-*/
-Fl_Shared_Image::Fl_Shared_Image(const char *n,		// I - Filename
-                                 Fl_Image   *img)	// I - Image
-  : Fl_Image(0,0,0) {
-  name_ = new char[strlen(n) + 1];
-  strcpy((char *)name_, n);
-
-  refcount_    = 1;
-  image_       = img;
-  alloc_image_ = !img;
-  original_    = 1;
-
-  if (!img) reload();
-  else update();
-}
-
-
-//
-// 'Fl_Shared_Image::add()' - Add a shared image to the array.
-//
-
-void
-Fl_Shared_Image::add() {
-  Fl_Shared_Image	**temp;		// New image pointer array...
-
-  if (num_images_ >= alloc_images_) {
-    // Allocate more memory...
-    temp = new Fl_Shared_Image *[alloc_images_ + 32];
-
-    if (alloc_images_) {
-      memcpy(temp, images_, alloc_images_ * sizeof(Fl_Shared_Image *));
-
-      delete[] images_;
-    }
-
-    images_       = temp;
-    alloc_images_ += 32;
-  }
-
-  images_[num_images_] = this;
-  num_images_ ++;
-
-  if (num_images_ > 1) {
-    qsort(images_, num_images_, sizeof(Fl_Shared_Image *),
-          (compare_func_t)compare);
-  }
-}
-
-
-//
-// 'Fl_Shared_Image::update()' - Update the dimensions of the shared images.
-//
-
-void
-Fl_Shared_Image::update() {
-  if (image_) {
-    w(image_->w());
-    h(image_->h());
-    d(image_->d());
-    data(image_->data(), image_->count());
-  }
-}
-
-/**
-  The destructor free all memory and server resources that are
-  used by the image. The destructor is protected and cannot be
-  used directly from a program. Use the Fl_Shared_Image::release() method
-  instead.
-*/
-Fl_Shared_Image::~Fl_Shared_Image() {
-  if (name_) delete[] (char *)name_;
-  if (alloc_image_) delete image_;
-}
-
-
-//
-/** 
-  Releases and possibly destroys (if refcount <=0) a shared image. 
-  In the latter case, it will reorganize the shared image array so that no hole will occur.
-*/
-void Fl_Shared_Image::release() {
-  int	i;	// Looping var...
-
-  refcount_ --;
-  if (refcount_ > 0) return;
-
-  for (i = 0; i < num_images_; i ++)
-    if (images_[i] == this) {
-      num_images_ --;
-
-      if (i < num_images_) {
-        memmove(images_ + i, images_ + i + 1,
-               (num_images_ - i) * sizeof(Fl_Shared_Image *));
-      }
-
-      break;
-    }
-
-  delete this;
-
-  if (num_images_ == 0 && images_) {
-    delete[] images_;
-
-    images_       = 0;
-    alloc_images_ = 0;
-  }
-}
-
-
-//
-/** Reloads the shared image from disk */
-void Fl_Shared_Image::reload() {
-  // Load image from disk...
-  int		i;		// Looping var
-  FILE		*fp;		// File pointer
-  uchar		header[64];	// Buffer for auto-detecting files
-  Fl_Image	*img;		// New image
-
-  if (!name_) return;
-
-  if ((fp = fl_fopen(name_, "rb")) != NULL) {
-    if (fread(header, 1, sizeof(header), fp)==0) { /* ignore */ }
-    fclose(fp);
-  } else {
-    return;
-  }
-
-  // Load the image as appropriate...
-  if (memcmp(header, "#define", 7) == 0) // XBM file
-    img = new Fl_XBM_Image(name_);
-  else if (memcmp(header, "/* XPM */", 9) == 0) // XPM file
-    img = new Fl_XPM_Image(name_);
-  else {
-    // Not a standard format; try an image handler...
-    for (i = 0, img = 0; i < num_handlers_; i ++) {
-      img = (handlers_[i])(name_, header, sizeof(header));
-
-      if (img) break;
-    }
-  }
-
-  if (img) {
-    if (alloc_image_) delete image_;
-
-    alloc_image_ = 1;
-
-    if ((img->w() != w() && w()) || (img->h() != h() && h())) {
-      // Make sure the reloaded image is the same size as the existing one.
-      Fl_Image *temp = img->copy(w(), h());
-      delete img;
-      image_ = temp;
-    } else {
-      image_ = img;
-    }
-
-    update();
-  }
-}
-
-
-//
-// 'Fl_Shared_Image::copy()' - Copy and resize a shared image...
-//
-
-Fl_Image *
-Fl_Shared_Image::copy(int W, int H) {
-  Fl_Image		*temp_image;	// New image file
-  Fl_Shared_Image	*temp_shared;	// New shared image
-
-  // Make a copy of the image we're sharing...
-  if (!image_) temp_image = 0;
-  else temp_image = image_->copy(W, H);
-
-  // Then make a new shared image...
-  temp_shared = new Fl_Shared_Image();
-
-  temp_shared->name_ = new char[strlen(name_) + 1];
-  strcpy((char *)temp_shared->name_, name_);
-
-  temp_shared->refcount_    = 1;
-  temp_shared->image_       = temp_image;
-  temp_shared->alloc_image_ = 1;
-
-  temp_shared->update();
-
-  return temp_shared;
-}
-
-
-//
-// 'Fl_Shared_Image::color_average()' - Blend colors...
-//
-
-void
-Fl_Shared_Image::color_average(Fl_Color c,	// I - Color to blend with
-                               float    i) {	// I - Blend fraction
-  if (!image_) return;
-
-  image_->color_average(c, i);
-  update();
-}
-
-
-//
-// 'Fl_Shared_Image::desaturate()' - Convert the image to grayscale...
-//
-
-void
-Fl_Shared_Image::desaturate() {
-  if (!image_) return;
-
-  image_->desaturate();
-  update();
-}
-
-
-//
-// 'Fl_Shared_Image::draw()' - Draw a shared image...
-//
-
-void
-Fl_Shared_Image::draw(int X, int Y, int W, int H, int cx, int cy) {
-  if (image_) image_->draw(X, Y, W, H, cx, cy);
-  else Fl_Image::draw(X, Y, W, H, cx, cy);
-}
-
-
-//
-// 'Fl_Shared_Image::uncache()' - Uncache the shared image...
-//
-
-void Fl_Shared_Image::uncache()
-{
-  if (image_) image_->uncache();
-}
-
-
-
-/** Finds a shared image from its named and size specifications */
-Fl_Shared_Image* Fl_Shared_Image::find(const char *n, int W, int H) {
-  Fl_Shared_Image	*key,		// Image key
-			**match;	// Matching image
-
-  if (num_images_) {
-    key = new Fl_Shared_Image();
-    key->name_ = new char[strlen(n) + 1];
-    strcpy((char *)key->name_, n);
-    key->w(W);
-    key->h(H);
-
-    match = (Fl_Shared_Image **)bsearch(&key, images_, num_images_,
-                                        sizeof(Fl_Shared_Image *),
-                                        (compare_func_t)compare);
-
-    delete key;
-
-    if (match) {
-      (*match)->refcount_ ++;
-      return *match;
-    }
-  }
-
-  return 0;
-}
-
-
-/** 
- \brief Find or load an image that can be shared by multiple widgets.
- 
- Gets a shared image, if it exists already ; it will return it.
- If it does not exist or if it exist but with other size, 
- then the existing image is deleted and replaced
- by a new image from the n filename of the proper dimension.
- If n is not a valid image filename, then get() will return NULL.
- 
- Shared JPEG and PNG images can also be created from memory by using their 
- named memory access constructor.
- 
- \param n name of the image
- \param W, H desired size
- 
- \see Fl_Shared_Image::find(const char *n, int W, int H)
- \see Fl_Shared_Image::release() 
- \see Fl_JPEG_Image::Fl_JPEG_Image(const char *name, const unsigned char *data)
- \see Fl_PNG_Image::Fl_PNG_Image (const char *name_png, const unsigned char *buffer, int maxsize)
-*/
-Fl_Shared_Image* Fl_Shared_Image::get(const char *n, int W, int H) {
-  Fl_Shared_Image	*temp;		// Image
-
-  if ((temp = find(n, W, H)) != NULL) return temp;
-
-  if ((temp = find(n)) == NULL) {
-    temp = new Fl_Shared_Image(n);
-
-    if (!temp->image_) {
-      delete temp;
-      return NULL;
-    }
-
-    temp->add();
-  }
-
-  if ((temp->w() != W || temp->h() != H) && W && H) {
-    temp = (Fl_Shared_Image *)temp->copy(W, H);
-    temp->add();
-  }
-
-  return temp;
-}
-
-
-
-/** Adds a shared image handler, which is basically a test function for adding new formats */
-void Fl_Shared_Image::add_handler(Fl_Shared_Handler f) {
-  int			i;		// Looping var...
-  Fl_Shared_Handler	*temp;		// New image handler array...
-
-  // First see if we have already added the handler...
-  for (i = 0; i < num_handlers_; i ++) {
-    if (handlers_[i] == f) return;
-  }
-
-  if (num_handlers_ >= alloc_handlers_) {
-    // Allocate more memory...
-    temp = new Fl_Shared_Handler [alloc_handlers_ + 32];
-
-    if (alloc_handlers_) {
-      memcpy(temp, handlers_, alloc_handlers_ * sizeof(Fl_Shared_Handler));
-
-      delete[] handlers_;
-    }
-
-    handlers_       = temp;
-    alloc_handlers_ += 32;
-  }
-
-  handlers_[num_handlers_] = f;
-  num_handlers_ ++;
-}
-
-
-
-/** Removes a shared image handler */
-void Fl_Shared_Image::remove_handler(Fl_Shared_Handler f) {
-  int	i;				// Looping var...
-
-  // First see if the handler has been added...
-  for (i = 0; i < num_handlers_; i ++) {
-    if (handlers_[i] == f) break;
-  }
-
-  if (i >= num_handlers_) return;
-
-  // OK, remove the handler from the array...
-  num_handlers_ --;
-
-  if (i < num_handlers_) {
-    // Shift later handlers down 1...
-    memmove(handlers_ + i, handlers_ + i + 1,
-           (num_handlers_ - i) * sizeof(Fl_Shared_Handler ));
-  }
-}
-
-
-//
-// End of "$Id: Fl_Shared_Image.cxx 8306 2011-01-24 17:04:22Z matt $".
-//
diff --git a/common/fltk/src/Fl_Single_Window.cxx b/common/fltk/src/Fl_Single_Window.cxx
deleted file mode 100644
index 054b76d..0000000
--- a/common/fltk/src/Fl_Single_Window.cxx
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// "$Id: Fl_Single_Window.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Single-buffered window for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//	A window with a single-buffered context
-//
-//	This is provided for systems where the base class is double
-//	buffered.  You can turn it off using this subclass in case
-//	your display looks better without it.
-
-#include <FL/Fl_Single_Window.H>
-
-void Fl_Single_Window::show() {Fl_Window::show();}
-void Fl_Single_Window::flush() {Fl_Window::flush();}
-
-//
-// End of "$Id: Fl_Single_Window.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Slider.cxx b/common/fltk/src/Fl_Slider.cxx
deleted file mode 100644
index 341589b..0000000
--- a/common/fltk/src/Fl_Slider.cxx
+++ /dev/null
@@ -1,392 +0,0 @@
-//
-// "$Id: Fl_Slider.cxx 8726 2011-05-23 18:32:47Z AlbrechtS $"
-//
-// Slider widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Slider.H>
-#include <FL/fl_draw.H>
-#include <math.h>
-#include "flstring.h"
-
-#if defined(FL_DLL)	// really needed for c'tors for MS VC++ only
-#include <FL/Fl_Hor_Slider.H>
-#endif
-
-void Fl_Slider::_Fl_Slider() {
-  slider_size_ = 0;
-  slider_ = 0; // FL_UP_BOX;
-}
-
-/**
-  Creates a new Fl_Slider widget using the given position,
-  size, and label string. The default boxtype is FL_DOWN_BOX.
-*/
-Fl_Slider::Fl_Slider(int X, int Y, int W, int H, const char* L)
-: Fl_Valuator(X, Y, W, H, L) {
-  box(FL_DOWN_BOX);
-  _Fl_Slider();
-}
-
-/**
-  Creates a new Fl_Slider widget using the given box type, position,
-  size, and label string.
-*/
-Fl_Slider::Fl_Slider(uchar t, int X, int Y, int W, int H, const char* L)
-  : Fl_Valuator(X, Y, W, H, L) {
-  type(t);
-  box(t==FL_HOR_NICE_SLIDER || t==FL_VERT_NICE_SLIDER ?
-      FL_FLAT_BOX : FL_DOWN_BOX);
-  _Fl_Slider();
-}
-
-void Fl_Slider::slider_size(double v) {
-  if (v <  0) v = 0;
-  if (v > 1) v = 1;
-  if (slider_size_ != float(v)) {
-    slider_size_ = float(v); 
-    damage(FL_DAMAGE_EXPOSE);
-  }
-}
-
-/** 
-  Sets the minimum (a) and maximum (b) values for the valuator widget. 
-  if at least one of the values is changed, a partial redraw is asked.
-*/
-void Fl_Slider::bounds(double a, double b) {
-  if (minimum() != a || maximum() != b) {
-    Fl_Valuator::bounds(a, b); 
-    damage(FL_DAMAGE_EXPOSE);
-  }
-}
-
-/**
-  Sets the size and position of the sliding knob in the box.
-  \param[in] pos position of first line displayed
-  \param[in] size size of window in lines
-  \param[in] first number of first line
-  \param[in] total total number of lines
-  Returns Fl_Valuator::value(p)
- */
-int Fl_Slider::scrollvalue(int pos, int size, int first, int total) {
-  step(1, 1);
-  if (pos+size > first+total) total = pos+size-first;
-  slider_size(size >= total ? 1.0 : double(size)/double(total));
-  bounds(first, total-size+first);
-  return value(pos);
-}
-
-// All slider interaction is done as though the slider ranges from
-// zero to one, and the left (bottom) edge of the slider is at the
-// given position.  Since when the slider is all the way to the
-// right (top) the left (bottom) edge is not all the way over, a
-// position on the widget itself covers a wider range than 0-1,
-// actually it ranges from 0 to 1/(1-size).
-
-void Fl_Slider::draw_bg(int X, int Y, int W, int H) {
-  fl_push_clip(X, Y, W, H);
-  draw_box();
-  fl_pop_clip();
-
-  Fl_Color black = active_r() ? FL_FOREGROUND_COLOR : FL_INACTIVE_COLOR;
-  if (type() == FL_VERT_NICE_SLIDER) {
-    draw_box(FL_THIN_DOWN_BOX, X+W/2-2, Y, 4, H, black);
-  } else if (type() == FL_HOR_NICE_SLIDER) {
-    draw_box(FL_THIN_DOWN_BOX, X, Y+H/2-2, W, 4, black);
-  }
-}
-
-void Fl_Slider::draw(int X, int Y, int W, int H) {
-
-  double val;
-  if (minimum() == maximum())
-    val = 0.5;
-  else {
-    val = (value()-minimum())/(maximum()-minimum());
-    if (val > 1.0) val = 1.0;
-    else if (val < 0.0) val = 0.0;
-  }
-
-  int ww = (horizontal() ? W : H);
-  int xx, S;
-  if (type()==FL_HOR_FILL_SLIDER || type() == FL_VERT_FILL_SLIDER) {
-    S = int(val*ww+.5);
-    if (minimum()>maximum()) {S = ww-S; xx = ww-S;}
-    else xx = 0;
-  } else {
-    S = int(slider_size_*ww+.5);
-    int T = (horizontal() ? H : W)/2+1;
-    if (type()==FL_VERT_NICE_SLIDER || type()==FL_HOR_NICE_SLIDER) T += 4;
-    if (S < T) S = T;
-    xx = int(val*(ww-S)+.5);
-  }
-  int xsl, ysl, wsl, hsl;
-  if (horizontal()) {
-    xsl = X+xx;
-    wsl = S;
-    ysl = Y;
-    hsl = H;
-  } else {
-    ysl = Y+xx;
-    hsl = S;
-    xsl = X;
-    wsl = W;
-  }
-
-  draw_bg(X, Y, W, H);
-
-  Fl_Boxtype box1 = slider();
-  if (!box1) {box1 = (Fl_Boxtype)(box()&-2); if (!box1) box1 = FL_UP_BOX;}
-  if (type() == FL_VERT_NICE_SLIDER) {
-    draw_box(box1, xsl, ysl, wsl, hsl, FL_GRAY);
-    int d = (hsl-4)/2;
-    draw_box(FL_THIN_DOWN_BOX, xsl+2, ysl+d, wsl-4, hsl-2*d,selection_color());
-  } else if (type() == FL_HOR_NICE_SLIDER) {
-    draw_box(box1, xsl, ysl, wsl, hsl, FL_GRAY);
-    int d = (wsl-4)/2;
-    draw_box(FL_THIN_DOWN_BOX, xsl+d, ysl+2, wsl-2*d, hsl-4,selection_color());
-  } else {
-    if (wsl>0 && hsl>0) draw_box(box1, xsl, ysl, wsl, hsl, selection_color());
-
-    if (type()!=FL_HOR_FILL_SLIDER && type() != FL_VERT_FILL_SLIDER &&
-        Fl::scheme_ && !strcmp(Fl::scheme_, "gtk+")) {
-      if (W>H && wsl>(hsl+8)) {
-        // Draw horizontal grippers
-	int yy, hh;
-	hh = hsl-8;
-	xx = xsl+(wsl-hsl-4)/2;
-	yy = ysl+3;
-
-	fl_color(fl_darker(selection_color()));
-	fl_line(xx, yy+hh, xx+hh, yy);
-	fl_line(xx+6, yy+hh, xx+hh+6, yy);
-	fl_line(xx+12, yy+hh, xx+hh+12, yy);
-
-        xx++;
-	fl_color(fl_lighter(selection_color()));
-	fl_line(xx, yy+hh, xx+hh, yy);
-	fl_line(xx+6, yy+hh, xx+hh+6, yy);
-	fl_line(xx+12, yy+hh, xx+hh+12, yy);
-      } else if (H>W && hsl>(wsl+8)) {
-        // Draw vertical grippers
-	int yy;
-	xx = xsl+4;
-	ww = wsl-8;
-	yy = ysl+(hsl-wsl-4)/2;
-
-	fl_color(fl_darker(selection_color()));
-	fl_line(xx, yy+ww, xx+ww, yy);
-	fl_line(xx, yy+ww+6, xx+ww, yy+6);
-	fl_line(xx, yy+ww+12, xx+ww, yy+12);
-
-        yy++;
-	fl_color(fl_lighter(selection_color()));
-	fl_line(xx, yy+ww, xx+ww, yy);
-	fl_line(xx, yy+ww+6, xx+ww, yy+6);
-	fl_line(xx, yy+ww+12, xx+ww, yy+12);
-      }
-    }
-  }
-
-  draw_label(xsl, ysl, wsl, hsl);
-  if (Fl::focus() == this) {
-    if (type() == FL_HOR_FILL_SLIDER || type() == FL_VERT_FILL_SLIDER) draw_focus();
-    else draw_focus(box1, xsl, ysl, wsl, hsl);
-  }
-}
-
-void Fl_Slider::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  draw(x()+Fl::box_dx(box()),
-       y()+Fl::box_dy(box()),
-       w()-Fl::box_dw(box()),
-       h()-Fl::box_dh(box()));
-}
-
-int Fl_Slider::handle(int event, int X, int Y, int W, int H) {
-  // Fl_Widget_Tracker wp(this);
-  switch (event) {
-  case FL_PUSH: {
-    Fl_Widget_Tracker wp(this);
-    if (!Fl::event_inside(X, Y, W, H)) return 0;
-    handle_push();
-    if (wp.deleted()) return 1; }
-    // fall through ...
-  case FL_DRAG: {
-
-    double val;
-    if (minimum() == maximum())
-      val = 0.5;
-    else {
-      val = (value()-minimum())/(maximum()-minimum());
-      if (val > 1.0) val = 1.0;
-      else if (val < 0.0) val = 0.0;
-    }
-
-    int ww = (horizontal() ? W : H);
-    int mx = (horizontal() ? Fl::event_x()-X : Fl::event_y()-Y);
-    int S;
-    static int offcenter;
-
-    if (type() == FL_HOR_FILL_SLIDER || type() == FL_VERT_FILL_SLIDER) {
-
-      S = 0;
-      if (event == FL_PUSH) {
-	int xx = int(val*ww+.5);
-	offcenter = mx-xx;
-	if (offcenter < -10 || offcenter > 10) offcenter = 0;
-	else return 1;
-      }
-
-    } else {
-
-      S = int(slider_size_*ww+.5); if (S >= ww) return 0;
-      int T = (horizontal() ? H : W)/2+1;
-      if (type()==FL_VERT_NICE_SLIDER || type()==FL_HOR_NICE_SLIDER) T += 4;
-      if (S < T) S = T;
-      if (event == FL_PUSH) {
-	int xx = int(val*(ww-S)+.5);
-	offcenter = mx-xx;
-	if (offcenter < 0) offcenter = 0;
-	else if (offcenter > S) offcenter = S;
-	else return 1;
-      }
-    }
-
-    int xx = mx-offcenter;
-    double v;
-    char tryAgain = 1;
-    while (tryAgain)
-    {
-      tryAgain = 0;
-      if (xx < 0) {
-        xx = 0;
-        offcenter = mx; if (offcenter < 0) offcenter = 0;
-      } else if (xx > (ww-S)) {
-        xx = ww-S;
-        offcenter = mx-xx; if (offcenter > S) offcenter = S;
-      }
-      v = round(xx*(maximum()-minimum())/(ww-S) + minimum());
-      // make sure a click outside the sliderbar moves it:
-      if (event == FL_PUSH && v == value()) {
-        offcenter = S/2;
-        event = FL_DRAG;
-        tryAgain = 1;
-      }
-    }
-    handle_drag(clamp(v));
-    } return 1;
-  case FL_RELEASE:
-    handle_release();
-    return 1;
-  case FL_KEYBOARD:
-    { Fl_Widget_Tracker wp(this);
-      switch (Fl::event_key()) {
-	case FL_Up:
-	  if (horizontal()) return 0;
-	  handle_push();
-	  if (wp.deleted()) return 1;
-	  handle_drag(clamp(increment(value(),-1)));
-	  if (wp.deleted()) return 1;
-	  handle_release();
-	  return 1;
-	case FL_Down:
-	  if (horizontal()) return 0;
-	  handle_push();
-	  if (wp.deleted()) return 1;
-	  handle_drag(clamp(increment(value(),1)));
-	  if (wp.deleted()) return 1;
-	  handle_release();
-	  return 1;
-	case FL_Left:
-	  if (!horizontal()) return 0;
-	  handle_push();
-	  if (wp.deleted()) return 1;
-	  handle_drag(clamp(increment(value(),-1)));
-	  if (wp.deleted()) return 1;
-	  handle_release();
-	  return 1;
-	case FL_Right:
-	  if (!horizontal()) return 0;
-	  handle_push();
-	  if (wp.deleted()) return 1;
-	  handle_drag(clamp(increment(value(),1)));
-	  if (wp.deleted()) return 1;
-	  handle_release();
-	  return 1;
-	default:
-	  return 0;
-      }
-    }
-    // break not required because of switch...
-  case FL_FOCUS :
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    } else return 0;
-  case FL_ENTER :
-  case FL_LEAVE :
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-int Fl_Slider::handle(int event) {
-  if (event == FL_PUSH && Fl::visible_focus()) {
-    Fl::focus(this);
-    redraw();
-  }
-
-  return handle(event,
-		x()+Fl::box_dx(box()),
-		y()+Fl::box_dy(box()),
-		w()-Fl::box_dw(box()),
-		h()-Fl::box_dh(box()));
-}
-
-/*
-  The following constructor must not be in the header file if we
-  build a shared object (DLL). Instead it is defined here to force
-  the constructor (and default destructor as well) to be defined
-  in the DLL and exported (STR #2632).
-  
-  Note: if you the ctor here, do the same changes in the specific
-  header file as well.  This redundant definition was chosen to enable
-  inline constructors in the header files (for static linking) as well
-  as the one here for dynamic linking (Windows DLL).
-*/
-
-#if defined(FL_DLL)
-
-Fl_Hor_Slider::Fl_Hor_Slider(int X,int Y,int W,int H,const char *l)
-	: Fl_Slider(X,Y,W,H,l) {type(FL_HOR_SLIDER);}
-
-#endif // FL_DLL
-
-//
-// End of "$Id: Fl_Slider.cxx 8726 2011-05-23 18:32:47Z AlbrechtS $".
-//
diff --git a/common/fltk/src/Fl_Sys_Menu_Bar.cxx b/common/fltk/src/Fl_Sys_Menu_Bar.cxx
deleted file mode 100644
index 69b47c3..0000000
--- a/common/fltk/src/Fl_Sys_Menu_Bar.cxx
+++ /dev/null
@@ -1,288 +0,0 @@
-//
-// "$Id: Fl_Sys_Menu_Bar.cxx 7518 2010-04-16 19:27:28Z manolo $"
-//
-// MacOS system menu bar widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
- * This code is a quick hack! It was written as a proof of concept.
- * It has been tested on the "menubar" sample program and provides
- * basic functionality. 
- * 
- * To use the System Menu Bar, simply replace the main Fl_Menu_Bar
- * in an application with Fl_Sys_Menu_Bar.
- *
- * FLTK features not supported by the Mac System menu
- *
- * - no invisible menu items
- * - no symbolic labels
- * - embossed labels will be underlined instead
- * - no font sizes
- * - Shortcut Characters should be English alphanumeric only, no modifiers yet
- * - no disable main menus
- * - changes to menubar in run-time don't update! 
- *     (disable, etc. - toggle and radio button do!)
- *
- * No care was taken to clean up the menu bar after destruction!
- * ::menu(bar) should only be called once!
- * Many other calls of the parent class don't work.
- * Changing the menu items has no effect on the menu bar.
- * Starting with OS X 10.5, FLTK applications must be created as
- * a bundle for the System Menu Bar (and maybe other features) to work!
- */
-
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-
-#include <FL/x.H>
-#include <FL/Fl.H>
-#include <FL/Fl_Sys_Menu_Bar.H>
-
-#include "flstring.h"
-#include <stdio.h>
-#include <ctype.h>
-#include <stdarg.h>
-
-#define MenuHandle void *
-
-typedef const Fl_Menu_Item *pFl_Menu_Item;
- 
-
-/*
- * Set a shortcut for an Apple menu item using the FLTK shortcut descriptor.
- */
-static void setMenuShortcut( MenuHandle mh, int miCnt, const Fl_Menu_Item *m )
-{
-  if ( !m->shortcut_ ) 
-    return;
-  if ( m->flags & FL_SUBMENU )
-    return;
-  if ( m->flags & FL_SUBMENU_POINTER )
-    return;
-  char key = m->shortcut_ & 0xff;
-  if ( !isalnum( key ) )
-    return;
-  
-  void *menuItem = Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::itemAtIndex, mh, miCnt);
-  Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::setKeyEquivalent, menuItem, m->shortcut_ & 0xff );
-  Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::setKeyEquivalentModifierMask, menuItem, m->shortcut_ );
-}
-
-
-/*
- * Set the Toggle and Radio flag based on FLTK flags
- */
-static void setMenuFlags( MenuHandle mh, int miCnt, const Fl_Menu_Item *m )
-{
-  if ( m->flags & FL_MENU_TOGGLE )
-  {
-	void *menuItem = Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::itemAtIndex, mh, miCnt);
-	Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::setState, menuItem, m->flags & FL_MENU_VALUE );
-  }
-  else if ( m->flags & FL_MENU_RADIO ) {
-    void *menuItem = Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::itemAtIndex, mh, miCnt);
-    Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::setState, menuItem, m->flags & FL_MENU_VALUE );
-  }
-}
-
-
-/*
- * create a sub menu for a specific menu handle
- */
-static void createSubMenu( void * mh, pFl_Menu_Item &mm )
-{
-  void *submenu;
-  int miCnt, flags;
-  
-  void *menuItem;
-  submenu = Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::initWithTitle, mm->text);
-  int cnt;
-  Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::numberOfItems, mh, &cnt);
-  cnt--;
-  menuItem = Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::itemAtIndex, mh, cnt);
-  Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::setSubmenu, menuItem, submenu);
-  if ( mm->flags & FL_MENU_INACTIVE ) {
-    Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::setEnabled, menuItem, 0);
-  }
-  mm++;
-  
-  while ( mm->text )
-  {
-    int flRank = mm - fl_sys_menu_bar->Fl_Menu_::menu();
-    Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::addNewItem, submenu, flRank, &miCnt);
-    setMenuFlags( submenu, miCnt, mm );
-    setMenuShortcut( submenu, miCnt, mm );
-    if ( mm->flags & FL_MENU_INACTIVE ) {
-      void *item = Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::itemAtIndex, submenu, miCnt);
-      Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::setEnabled, item, 0);
-    }
-    flags = mm->flags;
-    if ( mm->flags & FL_SUBMENU )
-    {
-      createSubMenu( submenu, mm );
-    }
-    else if ( mm->flags & FL_SUBMENU_POINTER )
-    {
-      const Fl_Menu_Item *smm = (Fl_Menu_Item*)mm->user_data_;
-      createSubMenu( submenu, smm );
-    }
-    if ( flags & FL_MENU_DIVIDER ) {
-      Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::addSeparatorItem, submenu);
-      }
-    mm++;
-  }
-}
- 
-
-/*
- * convert a complete Fl_Menu_Item array into a series of menus in the top menu bar
- * ALL PREVIOUS SYSTEM MENUS, EXCEPT APPLICATION MENU, ARE REPLACED BY THE NEW DATA
- */
-static void convertToMenuBar(const Fl_Menu_Item *mm)
-{
-  int count;//first, delete all existing system menus
-  Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::numberOfItems, fl_system_menu, &count);
-  for(int i = count - 1; i > 0; i--) {
-	  Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::removeItem, fl_system_menu, i);
-  }
-  //now convert FLTK stuff into MacOS menus
-  for (;;)
-  {
-    if ( !mm || !mm->text )
-      break;
-    char visible = mm->visible() ? 1 : 0;
-    int flRank = mm - fl_sys_menu_bar->Fl_Menu_::menu();
-    Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::addNewItem, fl_system_menu, flRank, NULL);
-		
-    if ( mm->flags & FL_SUBMENU )
-      createSubMenu( fl_system_menu, mm );
-    else if ( mm->flags & FL_SUBMENU_POINTER ) {
-      const Fl_Menu_Item *smm = (Fl_Menu_Item*)mm->user_data_;
-      createSubMenu( fl_system_menu, smm );
-    }
-    if ( visible ) {
-      //      InsertMenu( mh, 0 );
-    }
-    mm++;
-  }
-}
-
-
-/**
- * @brief create a system menu bar using the given list of menu structs
- *
- * \author Matthias Melcher
- *
- * @param m list of Fl_Menu_Item
- */
-void Fl_Sys_Menu_Bar::menu(const Fl_Menu_Item *m) 
-{
-  fl_open_display();
-  Fl_Menu_Bar::menu( m );
-  convertToMenuBar(m);
-}
-
-
-/**
- * @brief add to the system menu bar a new menu item
- *
- * add to the system menu bar a new menu item, with a title string, shortcut int,
- * callback, argument to the callback, and flags.
- *
- * @see Fl_Menu_::add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags) 
- */
-int Fl_Sys_Menu_Bar::add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
-{
-  fl_open_display();
-  int rank = Fl_Menu_::add(label, shortcut, cb, user_data, flags);
-  convertToMenuBar(Fl_Menu_::menu());
-  return rank;
-}
-
-/**
- * @brief insert in the system menu bar a new menu item
- *
- * insert in the system menu bar a new menu item, with a title string, shortcut int,
- * callback, argument to the callback, and flags.
- *
- * @see Fl_Menu_::insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags) 
- */
-int Fl_Sys_Menu_Bar::insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
-{
-  fl_open_display();
-  int rank = Fl_Menu_::insert(index, label, shortcut, cb, user_data, flags);
-  convertToMenuBar(Fl_Menu_::menu());
-  return rank;
-}
-
-void Fl_Sys_Menu_Bar::clear()
-{
-  Fl_Menu_::clear();
-  convertToMenuBar(NULL);
-}
-
-int Fl_Sys_Menu_Bar::clear_submenu(int index)
-{
-  int retval = Fl_Menu_::clear_submenu(index);
-  if (retval != -1) convertToMenuBar(Fl_Menu_::menu());
-  return retval;
-}
-
-/**
- * @brief remove an item from the system menu bar
- *
- * @param rank		the rank of the item to remove
- */
-void Fl_Sys_Menu_Bar::remove(int rank)
-{
-  Fl_Menu_::remove(rank);
-  convertToMenuBar(Fl_Menu_::menu());
-}
-
-
-/**
- * @brief rename an item from the system menu bar
- *
- * @param rank		the rank of the item to rename
- * @param name		the new item name as a UTF8 string
- */
-void Fl_Sys_Menu_Bar::replace(int rank, const char *name)
-{
-  doMenuOrItemOperation(renameItem, rank, name);
-  fl_sys_menu_bar->Fl_Menu_::replace(rank, name);
-}
-
-
-/*
- * Draw the menu bar. 
- * Nothing here because the OS does this for us.
- */
-void Fl_Sys_Menu_Bar::draw() {
-}
-
-
-#endif /* __APPLE__ */
-
-//
-// End of "$Id: Fl_Sys_Menu_Bar.cxx 7518 2010-04-16 19:27:28Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Table.cxx b/common/fltk/src/Fl_Table.cxx
deleted file mode 100644
index dc6f263..0000000
--- a/common/fltk/src/Fl_Table.cxx
+++ /dev/null
@@ -1,1253 +0,0 @@
-//
-// "$Id: Fl_Table.cxx 7950 2010-12-05 01:22:53Z greg.ercolano $"
-//
-// Fl_Table -- A table widget
-//
-// Copyright 2002 by Greg Ercolano.
-// Copyright (c) 2004 O'ksi'D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-// 
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-
-#include <stdio.h>		// fprintf
-#include <FL/fl_draw.H>
-#include <FL/Fl_Table.H>
-
-#if defined(USE_UTF8) && ( defined(MICROSOFT) || defined(LINUX) )
-#include <FL/fl_utf8.H>	// currently only Windows and Linux
-#endif
-
-#define SCROLLBAR_SIZE	16
-
-// Scroll display so 'row' is at top
-void Fl_Table::row_position(int row) {
-  if ( _row_position == row ) return;		// OPTIMIZATION: no change? avoid redraw
-  if ( row < 0 ) row = 0;
-  else if ( row >= rows() ) row = rows() - 1;
-  if ( table_h <= tih ) return;			// don't scroll if table smaller than window
-  double newtop = row_scroll_position(row);
-  if ( newtop > vscrollbar->maximum() ) {
-    newtop = vscrollbar->maximum();
-  }
-  vscrollbar->Fl_Slider::value(newtop);
-  table_scrolled();
-  redraw();
-  _row_position = row;	// HACK: override what table_scrolled() came up with
-}
-
-// Scroll display so 'col' is at left
-void Fl_Table::col_position(int col) {
-  if ( _col_position == col ) return;	// OPTIMIZATION: no change? avoid redraw
-  if ( col < 0 ) col = 0;
-  else if ( col >= cols() ) col = cols() - 1;
-  if ( table_w <= tiw ) return;		// don't scroll if table smaller than window
-  double newleft = col_scroll_position(col);
-  if ( newleft > hscrollbar->maximum() ) {
-    newleft = hscrollbar->maximum();
-  }
-  hscrollbar->Fl_Slider::value(newleft);
-  table_scrolled();
-  redraw();
-  _col_position = col;	// HACK: override what table_scrolled() came up with
-}
-
-// Find scroll position of a row (in pixels)
-long Fl_Table::row_scroll_position(int row) {
-  int startrow = 0;
-  long scroll = 0; 
-  // OPTIMIZATION: 
-  //     Attempt to use precomputed row scroll position
-  //
-  if ( toprow_scrollpos != -1 && row >= toprow ) {
-    scroll = toprow_scrollpos;
-    startrow = toprow;
-  }
-  for ( int t=startrow; t<row; t++ ) {
-    scroll += row_height(t);
-  }
-  return(scroll);
-}
-
-// Find scroll position of a column (in pixels)
-long Fl_Table::col_scroll_position(int col) {
-  int startcol = 0;
-  long scroll = 0;
-  // OPTIMIZATION: 
-  //     Attempt to use precomputed row scroll position
-  //
-  if ( leftcol_scrollpos != -1 && col >= leftcol ) {
-    scroll = leftcol_scrollpos;
-    startcol = leftcol;
-  }
-  for ( int t=startcol; t<col; t++ ) {
-    scroll += col_width(t);
-  }
-  return(scroll);
-}
-
-// Ctor
-Fl_Table::Fl_Table(int X, int Y, int W, int H, const char *l) : Fl_Group(X,Y,W,H,l) {
-  _rows             = 0;
-  _cols             = 0;
-  _row_header_w     = 40;
-  _col_header_h     = 18;
-  _row_header       = 0;
-  _col_header       = 0;
-  _row_header_color = color();
-  _col_header_color = color();
-  _row_resize       = 0;
-  _col_resize       = 0;
-  _row_resize_min   = 1;
-  _col_resize_min   = 1;
-  _redraw_toprow    = -1;
-  _redraw_botrow    = -1;
-  _redraw_leftcol   = -1;
-  _redraw_rightcol  = -1;
-  table_w           = 0;
-  table_h           = 0;
-  toprow            = 0;
-  botrow            = 0;
-  leftcol           = 0;
-  rightcol          = 0;
-  toprow_scrollpos  = -1;
-  leftcol_scrollpos = -1;
-  _last_cursor      = FL_CURSOR_DEFAULT;
-  _resizing_col     = -1;
-  _resizing_row     = -1;
-  _dragging_x       = -1;
-  _dragging_y       = -1;
-  _last_row         = -1;
-  _auto_drag        = 0;
-  current_col	      = -1;
-  current_row       = -1;
-  select_row        = -1;
-  select_col        = -1;
-  
-  box(FL_THIN_DOWN_FRAME);
-  
-  vscrollbar = new Fl_Scrollbar(x()+w()-SCROLLBAR_SIZE, y(),
-                                SCROLLBAR_SIZE, h()-SCROLLBAR_SIZE);
-  vscrollbar->type(FL_VERTICAL);
-  vscrollbar->callback(scroll_cb, (void*)this);
-  
-  hscrollbar = new Fl_Scrollbar(x(), y()+h()-SCROLLBAR_SIZE,
-                                w(), SCROLLBAR_SIZE);
-  hscrollbar->type(FL_HORIZONTAL);
-  hscrollbar->callback(scroll_cb, (void*)this);
-  
-  table = new Fl_Scroll(x(), y(), w(), h());
-  table->box(FL_NO_BOX);
-  table->type(0);		// don't show Fl_Scroll's scrollbars -- use our own
-  table->hide();		// hide unless children are present
-  table->end();
-  
-  table_resized();
-  redraw();
-  
-  Fl_Group::end();		// end the group's begin()
-  
-  table->begin();		// leave with fltk children getting added to the scroll
-}
-
-// Dtor
-Fl_Table::~Fl_Table() {
-  // The parent Fl_Group takes care of destroying scrollbars
-}
-
-// Set height of a row
-void Fl_Table::row_height(int row, int height) {
-  if ( row < 0 ) return;
-  if ( row < (int)_rowheights.size() && _rowheights[row] == height ) {
-    return;		// OPTIMIZATION: no change? avoid redraw
-  }
-  // Add row heights, even if none yet
-  int now_size = (int)_rowheights.size();
-  if ( row >= now_size ) {
-    _rowheights.size(row);
-    while (now_size < row)
-      _rowheights[now_size++] = height;
-  }
-  _rowheights[row] = height;
-  table_resized();
-  if ( row <= botrow ) {	// OPTIMIZATION: only redraw if onscreen or above screen
-    redraw();
-  }
-  // ROW RESIZE CALLBACK
-  if ( Fl_Widget::callback() && when() & FL_WHEN_CHANGED ) {
-    do_callback(CONTEXT_RC_RESIZE, row, 0);
-  }
-}
-
-// Set width of a column
-void Fl_Table::col_width(int col, int width)
-{
-  if ( col < 0 ) return;
-  if ( col < (int)_colwidths.size() && _colwidths[col] == width ) {
-    return;			// OPTIMIZATION: no change? avoid redraw
-  }
-  // Add column widths, even if none yet
-  int now_size = (int)_colwidths.size();
-  if ( col >= now_size ) {
-    _colwidths.size(col);
-    while (now_size < col) {
-      _colwidths[now_size++] = width;
-    }
-  }
-  _colwidths[col] = width;
-  table_resized();
-  if ( col <= rightcol ) {	// OPTIMIZATION: only redraw if onscreen or to the left
-    redraw();
-  }
-  // COLUMN RESIZE CALLBACK
-  if ( Fl_Widget::callback() && when() & FL_WHEN_CHANGED ) {
-    do_callback(CONTEXT_RC_RESIZE, 0, col);
-  }
-}
-
-// Return row/col clamped to reality
-int Fl_Table::row_col_clamp(TableContext context, int &R, int &C) {
-  int clamped = 0;
-  if ( R < 0 ) { R = 0; clamped = 1; }
-  if ( C < 0 ) { C = 0; clamped = 1; }
-  switch ( context ) {
-    case CONTEXT_COL_HEADER:
-      // Allow col headers to draw even if no rows
-      if ( R >= _rows && R != 0 ) { R = _rows - 1; clamped = 1; }
-      break;
-      
-    case CONTEXT_ROW_HEADER:
-      // Allow row headers to draw even if no columns
-      if ( C >= _cols && C != 0 ) { C = _cols - 1; clamped = 1; }
-      break;
-      
-    case CONTEXT_CELL:
-    default:
-      // CLAMP R/C TO _rows/_cols
-      if ( R >= _rows ) { R = _rows - 1; clamped = 1; }
-      if ( C >= _cols ) { C = _cols - 1; clamped = 1; }
-      break;
-  }
-  return(clamped);
-}
-
-// Return bounding region for given context
-void Fl_Table::get_bounds(TableContext context, int &X, int &Y, int &W, int &H) {
-  switch ( context ) {
-    case CONTEXT_COL_HEADER:
-      // Column header clipping.
-      X = tox;
-      Y = wiy;
-      W = tow;
-      H = col_header_height();
-      return;
-      
-    case CONTEXT_ROW_HEADER:
-      // Row header clipping.
-      X = wix;
-      Y = toy;
-      W = row_header_width();
-      H = toh;
-      return;
-      
-    case CONTEXT_TABLE:
-      // Table inner dimensions
-      X = tix; Y = tiy; W = tiw; H = tih;
-      return;
-      
-      // TODO: Add other contexts..
-    default:
-      fprintf(stderr, "Fl_Table::get_bounds(): context %d unimplemented\n", (int)context);
-      return;
-  }
-  //NOTREACHED
-}
-
-// Find row/col beneath cursor
-//
-//    Returns R/C and context.
-//    Also returns resizeflag, if mouse is hovered over a resize boundary.
-//
-Fl_Table::TableContext Fl_Table::cursor2rowcol(int &R, int &C, ResizeFlag &resizeflag) {
-  // return values
-  R = C = 0;
-  resizeflag = RESIZE_NONE;
-  // Row header?
-  int X, Y, W, H;
-  if ( row_header() ) {
-    // Inside a row heading?
-    get_bounds(CONTEXT_ROW_HEADER, X, Y, W, H);
-    if ( Fl::event_inside(X, Y, W, H) ) {
-      // Scan visible rows until found
-      for ( R = toprow; R <= botrow; R++ ) {
-        find_cell(CONTEXT_ROW_HEADER, R, 0, X, Y, W, H);
-        if ( Fl::event_y() >= Y && Fl::event_y() < (Y+H) ) {
-          // Found row?
-          //     If cursor over resize boundary, and resize enabled,
-          //     enable the appropriate resize flag.
-          //
-          if ( row_resize() ) {
-            if ( Fl::event_y() <= (Y+3-0) ) { resizeflag = RESIZE_ROW_ABOVE; }
-            if ( Fl::event_y() >= (Y+H-3) ) { resizeflag = RESIZE_ROW_BELOW; }
-          }
-          return(CONTEXT_ROW_HEADER);
-        }
-      }
-      // Must be in row header dead zone
-      return(CONTEXT_NONE);
-    }
-  }
-  // Column header?
-  if ( col_header() ) {
-    // Inside a column heading?
-    get_bounds(CONTEXT_COL_HEADER, X, Y, W, H);
-    if ( Fl::event_inside(X, Y, W, H) ) {
-      // Scan visible columns until found
-      for ( C = leftcol; C <= rightcol; C++ ) {
-        find_cell(CONTEXT_COL_HEADER, 0, C, X, Y, W, H);
-        if ( Fl::event_x() >= X && Fl::event_x() < (X+W) ) {
-          // Found column?
-          //     If cursor over resize boundary, and resize enabled,
-          //     enable the appropriate resize flag.
-          //
-          if ( col_resize() ) {
-            if ( Fl::event_x() <= (X+3-0) ) { resizeflag = RESIZE_COL_LEFT; }
-            if ( Fl::event_x() >= (X+W-3) ) { resizeflag = RESIZE_COL_RIGHT; }
-          }
-          return(CONTEXT_COL_HEADER);
-        }
-      }
-      // Must be in column header dead zone
-      return(CONTEXT_NONE);
-    }
-  }
-  // Mouse somewhere in table?
-  //     Scan visible r/c's until we find it.
-  //
-  if ( Fl::event_inside(tox, toy, tow, toh) ) {
-    for ( R = toprow; R <= botrow; R++ ) {
-      find_cell(CONTEXT_CELL, R, C, X, Y, W, H);
-      if ( Fl::event_y() < Y ) break;		// OPT: thanks lars
-      if ( Fl::event_y() >= (Y+H) ) continue;	// OPT: " "
-      for ( C = leftcol; C <= rightcol; C++ ) {
-        find_cell(CONTEXT_CELL, R, C, X, Y, W, H);
-        if ( Fl::event_inside(X, Y, W, H) ) {
-          return(CONTEXT_CELL);			// found it
-        }
-      }
-    }
-    // Must be in a dead zone of the table
-    R = C = 0;
-    return(CONTEXT_TABLE);
-  }
-  // Somewhere else
-  return(CONTEXT_NONE);
-}
-
-// Find X/Y/W/H for cell at R/C
-//     If R or C are out of range, returns -1 
-//     with X/Y/W/H set to zero.
-//
-int Fl_Table::find_cell(TableContext context, int R, int C, int &X, int &Y, int &W, int &H) {
-  if ( row_col_clamp(context, R, C) ) {		// row or col out of range? error
-    X=Y=W=H=0;
-    return(-1);
-  }
-  X = col_scroll_position(C) - hscrollbar->value() + tix;
-  Y = row_scroll_position(R) - vscrollbar->value() + tiy;
-  W = col_width(C);
-  H = row_height(R);
-  
-  switch ( context ) {
-    case CONTEXT_COL_HEADER:
-      Y = wiy;
-      H = col_header_height();
-      return(0);
-      
-    case CONTEXT_ROW_HEADER:
-      X = wix;
-      W = row_header_width();
-      return(0);
-      
-    case CONTEXT_CELL:
-      return(0);
-      
-    case CONTEXT_TABLE:
-      return(0);
-      
-      // TODO -- HANDLE OTHER CONTEXTS
-    default:
-      fprintf(stderr, "Fl_Table::find_cell: unknown context %d\n", (int)context);
-      return(-1);
-  }
-  //NOTREACHED
-}
-
-// Enable automatic scroll-selection
-void Fl_Table::_start_auto_drag() {
-  if (_auto_drag) return;
-  _auto_drag = 1;
-  Fl::add_timeout(0.3, _auto_drag_cb2, this);
-}
-
-// Disable automatic scroll-selection
-void Fl_Table::_stop_auto_drag() {
-  if (!_auto_drag) return;
-  Fl::remove_timeout(_auto_drag_cb2, this);
-  _auto_drag = 0;
-}
-
-void Fl_Table::_auto_drag_cb2(void *d) {
-  ((Fl_Table*)d)->_auto_drag_cb();
-}
-
-// Handle automatic scroll-selection if mouse selection dragged off table edge
-void Fl_Table::_auto_drag_cb() {
-  int lx = Fl::e_x;
-  int ly = Fl::e_y;
-  if (_selecting == CONTEXT_COL_HEADER)
-  { ly = y() + col_header_height(); }
-  else if (_selecting == CONTEXT_ROW_HEADER)
-  { lx = x() + row_header_width(); }
-  if (lx > x() + w() - 20) {
-    Fl::e_x = x() + w() - 20;
-    if (hscrollbar->visible())
-      ((Fl_Slider*)hscrollbar)->value(hscrollbar->clamp(hscrollbar->value() + 30));
-    hscrollbar->do_callback();
-    _dragging_x = Fl::e_x - 30;
-  }
-  else if (lx < (x() + row_header_width())) {
-    Fl::e_x = x() + row_header_width() + 1;
-    if (hscrollbar->visible()) {
-      ((Fl_Slider*)hscrollbar)->value(hscrollbar->clamp(hscrollbar->value() - 30));
-    }
-    hscrollbar->do_callback();
-    _dragging_x = Fl::e_x + 30;
-  }
-  if (ly > y() + h() - 20) {
-    Fl::e_y = y() + h() - 20;
-    if (vscrollbar->visible()) {
-      ((Fl_Slider*)vscrollbar)->value(vscrollbar->clamp(vscrollbar->value() + 30));
-    }
-    vscrollbar->do_callback();
-    _dragging_y = Fl::e_y - 30;
-  }
-  else if (ly < (y() + col_header_height())) {
-    Fl::e_y = y() + col_header_height() + 1;
-    if (vscrollbar->visible()) {
-      ((Fl_Slider*)vscrollbar)->value(vscrollbar->clamp(vscrollbar->value() - 30));
-    }
-    vscrollbar->do_callback();
-    _dragging_y = Fl::e_y + 30;
-  }
-  _auto_drag = 2;
-  handle(FL_DRAG);
-  _auto_drag = 1;
-  Fl::e_x = lx;
-  Fl::e_y = ly;
-  Fl::check();
-  Fl::flush();
-  if (Fl::event_buttons() && _auto_drag) {
-    Fl::add_timeout(0.05, _auto_drag_cb2, this);
-  }
-}
-
-// Recalculate the window dimensions
-void Fl_Table::recalc_dimensions() {
-  // Recalc to* (Table Outer), ti* (Table Inner), wi* ( Widget Inner)
-  wix = ( x() + Fl::box_dx(box())); tox = wix; tix = tox + Fl::box_dx(table->box());
-  wiy = ( y() + Fl::box_dy(box())); toy = wiy; tiy = toy + Fl::box_dy(table->box());
-  wiw = ( w() - Fl::box_dw(box())); tow = wiw; tiw = tow - Fl::box_dw(table->box());
-  wih = ( h() - Fl::box_dh(box())); toh = wih; tih = toh - Fl::box_dh(table->box());
-  // Trim window if headers enabled
-  if ( col_header() ) {
-    tiy += col_header_height(); toy += col_header_height();
-    tih -= col_header_height(); toh -= col_header_height();
-  }
-  if ( row_header() ) {
-    tix += row_header_width(); tox += row_header_width();
-    tiw -= row_header_width(); tow -= row_header_width();
-  } 
-  // Make scroll bars disappear if window large enough
-  {
-    // First pass: can hide via window size?
-    int hidev = (table_h <= tih);
-    int hideh = (table_w <= tiw); 
-    // Second pass: Check for interference
-    if ( !hideh & hidev ) { hidev = (( table_h - tih + SCROLLBAR_SIZE ) <= 0 ); } 
-    if ( !hidev & hideh ) { hideh = (( table_w - tiw + SCROLLBAR_SIZE ) <= 0 ); } 
-    // Determine scrollbar visibility, trim ti[xywh]/to[xywh]
-    if ( hidev ) { vscrollbar->hide(); } 
-    else { vscrollbar->show(); tiw -= SCROLLBAR_SIZE; tow -= SCROLLBAR_SIZE; }
-    if ( hideh ) { hscrollbar->hide(); } 
-    else { hscrollbar->show(); tih -= SCROLLBAR_SIZE; toh -= SCROLLBAR_SIZE; }
-  } 
-  // Resize the child table
-  table->resize(tox, toy, tow, toh);
-  table->init_sizes();
-}
-
-// Recalculate internals after a scroll.
-//
-//    Call this if table has been scrolled or resized.
-//    Does not handle redraw().
-//    TODO: Assumes ti[xywh] has already been recalculated.
-//
-void Fl_Table::table_scrolled() {
-  // Find top row
-  int y, row, voff = vscrollbar->value();
-  for ( row=y=0; row < _rows; row++ ) {
-    y += row_height(row);
-    if ( y > voff ) { y -= row_height(row); break; }
-  }
-  _row_position = toprow = ( row >= _rows ) ? (row - 1) : row;
-  toprow_scrollpos = y;		// OPTIMIZATION: save for later use 
-  // Find bottom row
-  voff = vscrollbar->value() + tih;
-  for ( ; row < _rows; row++ ) {
-    y += row_height(row);
-    if ( y >= voff ) { break; }
-  }
-  botrow = ( row >= _rows ) ? (row - 1) : row; 
-  // Left column
-  int x, col, hoff = hscrollbar->value();
-  for ( col=x=0; col < _cols; col++ ) {
-    x += col_width(col);
-    if ( x > hoff ) { x -= col_width(col); break; }
-  }
-  _col_position = leftcol = ( col >= _cols ) ? (col - 1) : col;
-  leftcol_scrollpos = x;	// OPTIMIZATION: save for later use 
-  // Right column
-  //    Work with data left over from leftcol calculation
-  //
-  hoff = hscrollbar->value() + tiw;
-  for ( ; col < _cols; col++ ) {
-    x += col_width(col);
-    if ( x >= hoff ) { break; }
-  }
-  rightcol = ( col >= _cols ) ? (col - 1) : col; 
-  // First tell children to scroll
-  draw_cell(CONTEXT_RC_RESIZE, 0,0,0,0,0,0);
-}
-
-// Table resized: recalc internal data
-//    Call this whenever the window is resized.
-//    Recalculates the scrollbar sizes.
-//    Makes no assumptions about any pre-initialized data.
-//
-void Fl_Table::table_resized() {
-  table_h = row_scroll_position(rows());
-  table_w = col_scroll_position(cols()); 
-  recalc_dimensions(); 
-  // Recalc scrollbar sizes
-  //    Clamp scrollbar value() after a resize.
-  //    Resize scrollbars to enforce a constant trough width after a window resize.
-  //
-  {
-    // Vertical scrollbar
-    float vscrolltab = ( table_h == 0 || tih > table_h ) ? 1 : (float)tih / table_h;
-    float hscrolltab = ( table_w == 0 || tiw > table_w ) ? 1 : (float)tiw / table_w;
-    vscrollbar->bounds(0, table_h-tih);
-    vscrollbar->precision(10);
-    vscrollbar->slider_size(vscrolltab);
-    vscrollbar->resize(wix+wiw-SCROLLBAR_SIZE, wiy,
-                       SCROLLBAR_SIZE, 
-                       wih - ((hscrollbar->visible())?SCROLLBAR_SIZE:0));
-    vscrollbar->Fl_Valuator::value(vscrollbar->clamp(vscrollbar->value()));	
-    // Horizontal scrollbar
-    hscrollbar->bounds(0, table_w-tiw);
-    hscrollbar->precision(10);
-    hscrollbar->slider_size(hscrolltab);
-    hscrollbar->resize(wix, wiy+wih-SCROLLBAR_SIZE,
-                       wiw - ((vscrollbar->visible())?SCROLLBAR_SIZE:0), 
-                       SCROLLBAR_SIZE);
-    hscrollbar->Fl_Valuator::value(hscrollbar->clamp(hscrollbar->value()));
-  }
-  
-  // Tell FLTK child widgets were resized
-  Fl_Group::init_sizes();
-  
-  // Recalc top/bot/left/right
-  table_scrolled();
-  
-  // DO *NOT* REDRAW -- LEAVE THIS UP TO THE CALLER
-  // redraw();
-}
-
-// Someone moved a scrollbar
-void Fl_Table::scroll_cb(Fl_Widget*w, void *data) {
-  Fl_Table *o = (Fl_Table*)data;
-  o->recalc_dimensions();	// recalc tix, tiy, etc.
-  o->table_scrolled();
-  o->redraw();
-}
-
-// Set number of rows
-void Fl_Table::rows(int val) {
-  int oldrows = _rows;
-  _rows = val;
-  {
-    int default_h = ( _rowheights.size() > 0 ) ? _rowheights.back() : 25;
-    int now_size = _rowheights.size();
-    _rowheights.size(val);			// enlarge or shrink as needed
-    while ( now_size < val ) {
-      _rowheights[now_size++] = default_h;	// fill new
-    }
-  }
-  table_resized();
-  
-  // OPTIMIZATION: redraw only if change is visible.
-  if ( val >= oldrows && oldrows > botrow ) {
-    // NO REDRAW
-  } else {
-    redraw();
-  }
-}
-
-// Set number of cols
-void Fl_Table::cols(int val) {
-  _cols = val;
-  {
-    int default_w = ( _colwidths.size() > 0 ) ? _colwidths[_colwidths.size()-1] : 80;
-    int now_size = _colwidths.size();
-    _colwidths.size(val);			// enlarge or shrink as needed
-    while ( now_size < val ) {
-      _colwidths[now_size++] = default_w;	// fill new
-    }
-  }
-  table_resized();
-  redraw();
-}
-
-// Change mouse cursor to different type
-void Fl_Table::change_cursor(Fl_Cursor newcursor) {
-  if ( newcursor != _last_cursor ) {
-    fl_cursor(newcursor, FL_BLACK, FL_WHITE);
-    _last_cursor = newcursor;
-  }
-}
-
-void Fl_Table::damage_zone(int r1, int c1, int r2, int c2, int r3, int c3) {
-  int R1 = r1, C1 = c1;
-  int R2 = r2, C2 = c2;
-  if (r1 > R2) R2 = r1;
-  if (r2 < R1) R1 = r2;
-  if (r3 > R2) R2 = r3;
-  if (r3 < R1) R1 = r3;
-  if (c1 > C2) C2 = c1;
-  if (c2 < C1) C1 = c2;
-  if (c3 > C2) C2 = c3;
-  if (c3 < C1) C1 = c3;
-  if (R1 < 0) {
-    if (R2 < 0) return;
-    R1 = 0;
-  }
-  if (C1 < 0) {
-    if (C2 < 0) return;
-    C1 = 0;
-  }
-  if (R1 < toprow) R1 = toprow;
-  if (R2 > botrow) R2 = botrow;
-  if (C1 < leftcol) C1 = leftcol;
-  if (C2 > rightcol) C2 = rightcol;
-  redraw_range(R1, R2, C1, C2);
-}
-
-int Fl_Table::move_cursor(int R, int C) {
-  if (select_row == -1) R++;
-  if (select_col == -1) C++;
-  R += select_row;
-  C += select_col;
-  if (R < 0) R = 0;
-  if (R >= rows()) R = rows() - 1;
-  if (C < 0) C = 0;
-  if (C >= cols()) C = cols() - 1;
-  if (R == select_row && C == select_col) return 0;
-  damage_zone(current_row, current_col, select_row, select_col, R, C);
-  select_row = R;
-  select_col = C;
-  if (!Fl::event_state(FL_SHIFT)) {
-    current_row = R;
-    current_col = C;
-  }
-  if (R < toprow + 1 || R > botrow - 1) row_position(R);
-  if (C < leftcol + 1 || C > rightcol - 1) col_position(C);
-  return 1;
-}
-
-// #define DEBUG 1
-#ifdef DEBUG
-#include "eventnames.h"
-#define PRINTEVENT \
-fprintf(stderr,"Table %s: ** Event: %s --\n", (label()?label():"none"), eventnames[event]);
-#else
-#define PRINTEVENT
-#endif
-
-// Handle FLTK events
-int Fl_Table::handle(int event) {
-  PRINTEVENT;
-  int ret = Fl_Group::handle(event);	// let FLTK group handle events first
-  if (ret) {
-    if (Fl::event_inside(hscrollbar) || Fl::event_inside(vscrollbar)) return 1;
-    if (Fl::focus() != this && contains(Fl::focus())) return 1;
-  }
-  // Which row/column are we over?
-  int R, C;  				// row/column being worked on
-  ResizeFlag resizeflag;		// which resizing area are we over? (0=none)
-  TableContext context = cursor2rowcol(R, C, resizeflag);
-  switch ( event ) {
-    case FL_PUSH:
-      if (Fl::event_button() == 1 && !Fl::event_clicks()) {
-        if (Fl::focus() != this) {
-          take_focus();
-          do_callback(CONTEXT_TABLE, -1, -1);
-          ret = 1;
-        }
-        damage_zone(current_row, current_col, select_row, select_col, R, C);
-        if (context == CONTEXT_CELL) {
-          current_row = select_row = R;
-          current_col = select_col = C;
-          _selecting = CONTEXT_CELL;
-        } else {
-          current_row = select_row = -1;
-          current_col = select_col = -1;
-        }
-      }
-      // Need this for eg. right click to pop up a menu
-      if ( Fl_Widget::callback() &&		// callback defined?
-          resizeflag == RESIZE_NONE ) {	// not resizing?
-        do_callback(context, R, C);		// do callback
-      }
-      switch ( context ) {
-        case CONTEXT_CELL:
-          // FL_PUSH on a cell?
-          ret = 1; 			// express interest in FL_RELEASE
-          break;
-          
-        case CONTEXT_NONE:
-          // FL_PUSH on table corner?
-          if ( Fl::event_button() == 1 && 
-              Fl::event_x() < x() + row_header_width()) {
-            current_col = 0;
-            select_col = cols() - 1;
-            current_row = 0;
-            select_row = rows() - 1;				
-            damage_zone(current_row, current_col, select_row, select_col);
-            ret = 1;
-          }
-          break;
-          
-        case CONTEXT_COL_HEADER:
-          // FL_PUSH on a column header?
-          if ( Fl::event_button() == 1) {
-            // Resizing? Handle it
-            if ( resizeflag ) {
-              // Start resize if left click on column border.
-              //    "ret=1" ensures we get drag events from now on.
-              //    (C-1) is used if mouse is over the left hand side 
-              //    of cell, so we resize the next column on the left.
-              //
-              _resizing_col = ( resizeflag & RESIZE_COL_LEFT ) ? C-1 : C; 
-              _resizing_row = -1;
-              _dragging_x = Fl::event_x(); 
-              ret = 1;
-            } else {
-              // Not resizing? Select the column
-              current_col = select_col = C;
-              current_row = 0;
-              select_row = rows() - 1;
-              _selecting = CONTEXT_COL_HEADER;
-              damage_zone(current_row, current_col, select_row, select_col);
-              ret = 1;
-            }
-          }
-          break;
-          
-        case CONTEXT_ROW_HEADER:
-          // FL_PUSH on a row header?
-          if ( Fl::event_button() == 1 ) {
-            // Resizing? Handle it
-            if ( resizeflag ) {
-              // Start resize if left mouse clicked on row border.
-              //    "ret = 1" ensures we get drag events from now on.
-              //    (R-1) is used if mouse is over the top of the cell,
-              //    so that we resize the row above.
-              //
-              _resizing_row = ( resizeflag & RESIZE_ROW_ABOVE ) ? R-1 : R; 
-              _resizing_col = -1;
-              _dragging_y = Fl::event_y(); 
-              ret = 1;
-            } else {
-              // Not resizing? Select the row
-              current_row = select_row = R;
-              current_col = 0;
-              select_col = cols() - 1;
-              _selecting = CONTEXT_ROW_HEADER;
-              damage_zone(current_row, current_col, select_row, select_col);
-              ret = 1;
-            }
-          }
-          break;
-          
-        default:
-          ret = 0;		// express disinterest
-          break;
-      }
-      _last_row = R;
-      break;
-      
-    case FL_DRAG:
-      if (_auto_drag == 1) {
-        ret = 1;
-        break;
-      } 
-      if ( _resizing_col > -1 ) {
-        // Dragging column?
-        //
-        //    Let user drag even /outside/ the row/col widget.
-        //    Don't allow column width smaller than 1.
-        //    Continue to show FL_CURSOR_WE at all times during drag.
-        //
-        int offset = _dragging_x - Fl::event_x();
-        int new_w = col_width(_resizing_col) - offset;
-        if ( new_w < _col_resize_min ) new_w = _col_resize_min;
-        col_width(_resizing_col, new_w);
-        _dragging_x = Fl::event_x();
-        table_resized();
-        redraw();
-        change_cursor(FL_CURSOR_WE);
-        ret = 1;
-        if ( Fl_Widget::callback() && when() & FL_WHEN_CHANGED ) {
-          do_callback(CONTEXT_RC_RESIZE, R, C);
-        }
-      }
-      else if ( _resizing_row > -1 ) {
-        // Dragging row?
-        //
-        //    Let user drag even /outside/ the row/col widget.
-        //    Don't allow row width smaller than 1.
-        //    Continue to show FL_CURSOR_NS at all times during drag.
-        //
-        int offset = _dragging_y - Fl::event_y();
-        int new_h = row_height(_resizing_row) - offset;
-        if ( new_h < _row_resize_min ) new_h = _row_resize_min;
-        row_height(_resizing_row, new_h);
-        _dragging_y = Fl::event_y();
-        table_resized();
-        redraw();
-        change_cursor(FL_CURSOR_NS);
-        ret = 1;
-        if ( Fl_Widget::callback() && when() & FL_WHEN_CHANGED ) {
-          do_callback(CONTEXT_RC_RESIZE, R, C);
-        }
-      } else {
-        if (Fl::event_button() == 1 && 
-            _selecting == CONTEXT_CELL &&
-            context == CONTEXT_CELL) {
-          if (select_row != R || select_col != C) {
-            damage_zone(current_row, current_col, select_row, select_col, R, C);
-          }
-          select_row = R;
-          select_col = C;
-          ret = 1;
-        }
-        else if (Fl::event_button() == 1 && 
-                 _selecting == CONTEXT_ROW_HEADER && 
-                 context & (CONTEXT_ROW_HEADER|CONTEXT_COL_HEADER|CONTEXT_CELL)) {
-          if (select_row != R) {
-            damage_zone(current_row, current_col, select_row, select_col, R, C);
-          }
-          select_row = R;
-          ret = 1;
-        }
-        else if (Fl::event_button() == 1 && 
-                 _selecting == CONTEXT_COL_HEADER 
-                 && context & (CONTEXT_ROW_HEADER|CONTEXT_COL_HEADER|CONTEXT_CELL)) {
-          if (select_col != C) {
-            damage_zone(current_row, current_col, select_row, select_col, R, C);
-          }
-          select_col = C;
-          ret = 1;
-        }
-      }
-      // Enable autodrag if not resizing, and mouse has moved off table edge
-      if ( _resizing_row < 0 && _resizing_col < 0 && _auto_drag == 0 && 
-          ( Fl::event_x() > x() + w() - 20 ||
-           Fl::event_x() < x() + row_header_width() || 
-           Fl::event_y() > y() + h() - 20 ||
-           Fl::event_y() < y() + col_header_height()
-           ) ) {
-            _start_auto_drag();
-          }
-      break;
-      
-    case FL_RELEASE:
-      _stop_auto_drag();
-      switch ( context ) {
-        case CONTEXT_ROW_HEADER:		// release on row header
-        case CONTEXT_COL_HEADER:		// release on col header
-        case CONTEXT_CELL:			// release on a cell
-        case CONTEXT_TABLE:			// release on dead zone
-          if ( _resizing_col == -1 &&		// not resizing a column
-              _resizing_row == -1 &&		// not resizing a row
-              Fl_Widget::callback() && 	// callback defined
-              when() & FL_WHEN_RELEASE && 	// on button release
-              _last_row == R ) {		// release on same row PUSHed?
-            // Need this for eg. left clicking on a cell to select it
-            do_callback(context, R, C);
-          }
-          break;
-          
-        default:
-          break;
-      }
-      if ( Fl::event_button() == 1 ) {
-        change_cursor(FL_CURSOR_DEFAULT);
-        _resizing_col = -1;
-        _resizing_row = -1;
-        ret = 1;
-      }
-      break;
-      
-    case FL_MOVE:
-      if ( context == CONTEXT_COL_HEADER && 		// in column header?
-          resizeflag ) {				// resize + near boundary?
-        change_cursor(FL_CURSOR_WE);			// show resize cursor
-      }
-      else if ( context == CONTEXT_ROW_HEADER && 	// in row header?
-               resizeflag ) {				// resize + near boundary?
-        change_cursor(FL_CURSOR_NS);			// show resize cursor
-      } else {
-        change_cursor(FL_CURSOR_DEFAULT);		// normal cursor
-      }
-      ret = 1;
-      break;
-      
-    case FL_ENTER:		// See FLTK event docs on the FL_ENTER widget
-      if (!ret) take_focus();
-      ret = 1;
-      //FALLTHROUGH
-      
-    case FL_LEAVE:		// We want to track the mouse if resizing is allowed.
-      if ( resizeflag ) {
-        ret = 1;
-      }
-      if ( event == FL_LEAVE ) {
-        _stop_auto_drag();
-        change_cursor(FL_CURSOR_DEFAULT);
-      }
-      break;
-      
-    case FL_FOCUS:
-      Fl::focus(this);
-      //FALLTHROUGH
-      
-    case FL_UNFOCUS:
-      _stop_auto_drag();
-      ret = 1;
-      break;
-      
-    case FL_KEYBOARD: {
-      ret = 0;
-      int is_row = select_row;
-      int is_col = select_col;
-      switch(Fl::event_key()) {
-        case FL_Home:
-          ret = move_cursor(0, -1000000);
-          break;
-        case FL_End:
-          ret = move_cursor(0, 1000000);
-          break;
-        case FL_Page_Up:
-          ret = move_cursor(-(botrow - toprow - 1), 0);
-          break;
-        case FL_Page_Down:
-          ret = move_cursor(botrow - toprow - 1 , 0);
-          break;
-        case FL_Left:
-          ret = move_cursor(0, -1);
-          break;
-        case FL_Right:
-          ret = move_cursor(0, 1);
-          break;
-        case FL_Up:
-          ret = move_cursor(-1, 0);
-          break;
-        case FL_Down:
-          ret = move_cursor(1, 0);
-          break;
-	case FL_Tab:
-	  if ( Fl::event_state() & FL_SHIFT ) {
-            ret = move_cursor(0, -1);		// shift-tab -> left
-	  } else {
-	    ret = move_cursor(0, 1);		// tab -> right
-	  }
-          break;
-      }
-      if (ret && Fl::focus() != this) {
-        do_callback(CONTEXT_TABLE, -1, -1);
-        take_focus();
-      }
-      //if (!ret && Fl_Widget::callback() && when() & FL_WHEN_NOT_CHANGED  )
-      if ( Fl_Widget::callback() && 
-          (
-           ( !ret && when() & FL_WHEN_NOT_CHANGED ) || 
-           ( is_row!= select_row || is_col!= select_col ) 
-           )
-          ) {
-        do_callback(CONTEXT_CELL, select_row, select_col); 
-        //damage_zone(current_row, current_col, select_row, select_col);
-        ret = 1;
-      }
-      break;
-    }
-      
-    default:
-      change_cursor(FL_CURSOR_DEFAULT);
-      break;
-  }
-  return(ret);
-}
-
-// Resize FLTK override
-//     Handle resize events if user resizes parent window.
-//
-void Fl_Table::resize(int X, int Y, int W, int H) {
-  // Tell group to resize, and recalc our own widget as well
-  Fl_Group::resize(X, Y, W, H);
-  table_resized();
-  redraw();
-}
-
-// Draw a cell
-void Fl_Table::_redraw_cell(TableContext context, int r, int c) {
-  if ( r < 0 || c < 0 ) return;
-  int X,Y,W,H;
-  find_cell(context, r, c, X, Y, W, H);	// find positions of cell
-  draw_cell(context, r, c, X, Y, W, H);	// call users' function to draw it
-}
-
-/**
- See if the cell at row \p r and column \p c is selected.
- \returns 1 if the cell is selected, 0 if not.
- */
-int Fl_Table::is_selected(int r, int c) {
-  int s_left, s_right, s_top, s_bottom;
-  
-  if (select_col > current_col) {
-    s_left = current_col;
-    s_right = select_col;
-  } else {
-    s_right = current_col;
-    s_left = select_col;
-  }
-  if (select_row > current_row) {
-    s_top = current_row;
-    s_bottom = select_row;
-  } else {
-    s_bottom = current_row;
-    s_top = select_row;
-  }
-  if (r >= s_top && r <= s_bottom && c >= s_left && c <= s_right) {
-    return 1;
-  }
-  return 0;
-}
-
-/**
-  Gets the region of cells selected (highlighted).
-
-  \param[in] row_top   Returns the top row of selection area
-  \param[in] col_left  Returns the left column of selection area
-  \param[in] row_bot   Returns the bottom row of selection area
-  \param[in] col_right Returns the right column of selection area
-*/
-void Fl_Table::get_selection(int& row_top, int& col_left, int& row_bot, int& col_right) {
-  if (select_col > current_col) {
-    col_left  = current_col;
-    col_right = select_col;
-  } else {
-    col_right = current_col;
-    col_left  = select_col;
-  }
-  if (select_row > current_row) {
-    row_top = current_row;
-    row_bot = select_row;
-  } else {
-    row_bot = current_row;
-    row_top = select_row;
-  }
-}
-
-/**
-  Sets the region of cells to be selected (highlighted).
-
-  So for instance, set_selection(0,0,0,0) selects the top/left cell in the table.
-  And set_selection(0,0,1,1) selects the four cells in rows 0 and 1, column 0 and 1.
-
-  \param[in] row_top   Top row of selection area
-  \param[in] col_left  Left column of selection area
-  \param[in] row_bot   Bottom row of selection area
-  \param[in] col_right Right column of selection area
-*/
-void Fl_Table::set_selection(int row_top, int col_left, int row_bot, int col_right) {
-  damage_zone(current_row, current_col, select_row, select_col);
-  current_col = col_left;
-  current_row = row_top;
-  select_col  = col_right;
-  select_row  = row_bot;
-  damage_zone(current_row, current_col, select_row, select_col);
-}
-
-// Draw the entire Fl_Table
-//    Override the draw() routine to draw the table.
-//    Then tell the group to draw over us.
-//
-void Fl_Table::draw() {   
-  draw_cell(CONTEXT_STARTPAGE, 0, 0,	 	// let user's drawing routine
-            tix, tiy, tiw, tih);		// prep new page
-  
-  // Let fltk widgets draw themselves first. Do this after
-  // draw_cell(CONTEXT_STARTPAGE) in case user moves widgets around.
-  // Use window 'inner' clip to prevent drawing into table border.
-  // (unfortunately this clips FLTK's border, so we must draw it explicity below)
-  //
-  fl_push_clip(wix, wiy, wiw, wih);
-  {
-    Fl_Group::draw();
-  }
-  fl_pop_clip();
-  
-  // Explicitly draw border around widget, if any
-  draw_box(box(), x(), y(), w(), h(), color());
-  
-  // If Fl_Scroll 'table' is hidden, draw its box
-  //    Do this after Fl_Group::draw() so we draw over scrollbars
-  //    that leak around the border.
-  //
-  if ( ! table->visible() ) {
-    if ( damage() & FL_DAMAGE_ALL || damage() & FL_DAMAGE_CHILD ) {
-      draw_box(table->box(), tox, toy, tow, toh, table->color());
-    }
-  } 
-  // Clip all further drawing to the inner widget dimensions
-  fl_push_clip(wix, wiy, wiw, wih);
-  {
-    // Only redraw a few cells?
-    if ( ! ( damage() & FL_DAMAGE_ALL ) && _redraw_leftcol != -1 ) {
-      fl_push_clip(tix, tiy, tiw, tih);
-      for ( int c = _redraw_leftcol; c <= _redraw_rightcol; c++ ) {
-        for ( int r = _redraw_toprow; r <= _redraw_botrow; r++ ) { 
-          _redraw_cell(CONTEXT_CELL, r, c);
-        }
-      }
-      fl_pop_clip();
-    }
-    if ( damage() & FL_DAMAGE_ALL ) {
-      int X,Y,W,H;
-      // Draw row headers, if any
-      if ( row_header() ) {
-        get_bounds(CONTEXT_ROW_HEADER, X, Y, W, H);
-        fl_push_clip(X,Y,W,H);
-        for ( int r = toprow; r <= botrow; r++ ) {
-          _redraw_cell(CONTEXT_ROW_HEADER, r, 0);
-        }
-        fl_pop_clip();
-      }
-      // Draw column headers, if any
-      if ( col_header() ) {
-        get_bounds(CONTEXT_COL_HEADER, X, Y, W, H);
-        fl_push_clip(X,Y,W,H);
-        for ( int c = leftcol; c <= rightcol; c++ ) {
-          _redraw_cell(CONTEXT_COL_HEADER, 0, c);
-        }
-        fl_pop_clip();
-      } 
-      // Draw all cells.
-      //    This includes cells partially obscured off edges of table.
-      //    No longer do this last; you might think it would be nice
-      //    to draw over dead zones, but on redraws it flickers. Avoid
-      //    drawing over deadzones; prevent deadzones by sizing columns.
-      //
-      fl_push_clip(tix, tiy, tiw, tih); {
-        for ( int r = toprow; r <= botrow; r++ ) {
-          for ( int c = leftcol; c <= rightcol; c++ ) {
-            _redraw_cell(CONTEXT_CELL, r, c); 
-          }
-        }
-      }
-      fl_pop_clip(); 
-      // Draw little rectangle in corner of headers
-      if ( row_header() && col_header() ) {
-        fl_rectf(wix, wiy, row_header_width(), col_header_height(), color());
-      }
-      
-      // Table has a boxtype? Close those few dead pixels
-      if ( table->box() ) {
-        if ( col_header() ) {
-          fl_rectf(tox, wiy, Fl::box_dx(table->box()), col_header_height(), color());
-        }
-        if ( row_header() ) {
-          fl_rectf(wix, toy, row_header_width(), Fl::box_dx(table->box()), color());
-        }
-      }
-      
-      // Table width smaller than window? Fill remainder with rectangle
-      if ( table_w < tiw ) {
-        fl_rectf(tix + table_w, tiy, tiw - table_w, tih, color()); 
-        // Col header? fill that too
-        if ( col_header() ) {
-          fl_rectf(tix + table_w, 
-                   wiy, 
-                   // get that corner just right..
-                   (tiw - table_w + Fl::box_dw(table->box()) - 
-                    Fl::box_dx(table->box())),
-                   col_header_height(),
-                   color());
-        }
-      } 
-      // Table height smaller than window? Fill remainder with rectangle
-      if ( table_h < tih ) {
-        fl_rectf(tix, tiy + table_h, tiw, tih - table_h, color()); 
-        if ( row_header() ) {
-          // NOTE:
-          //     Careful with that lower corner; don't use tih; when eg. 
-          //     table->box(FL_THIN_UPFRAME) and hscrollbar hidden, 
-          //     leaves a row of dead pixels.
-          //
-          fl_rectf(wix, tiy + table_h, row_header_width(), 
-                   (wiy+wih) - (tiy+table_h) - 
-                   ( hscrollbar->visible() ? SCROLLBAR_SIZE : 0),
-                   color());
-        }
-      }
-    } 
-    // Both scrollbars? Draw little box in lower right
-    if ( vscrollbar->visible() && hscrollbar->visible() ) {
-      fl_rectf(vscrollbar->x(), hscrollbar->y(), 
-               vscrollbar->w(), hscrollbar->h(), color());
-    } 
-    draw_cell(CONTEXT_ENDPAGE, 0, 0,		// let user's drawing
-              tix, tiy, tiw, tih);		// routines cleanup
-    
-    _redraw_leftcol = _redraw_rightcol = _redraw_toprow = _redraw_botrow = -1;
-  }
-  fl_pop_clip();
-}
-
-//
-// End of "$Id: Fl_Table.cxx 7950 2010-12-05 01:22:53Z greg.ercolano $".
-//
diff --git a/common/fltk/src/Fl_Table_Row.cxx b/common/fltk/src/Fl_Table_Row.cxx
deleted file mode 100644
index 6e24bba..0000000
--- a/common/fltk/src/Fl_Table_Row.cxx
+++ /dev/null
@@ -1,316 +0,0 @@
-//
-// "$Id: Fl_Table_Row.cxx 7950 2010-12-05 01:22:53Z greg.ercolano $"
-//
-// Fl_Table_Row -- A row oriented table widget
-//
-//    A class specializing in a table of rows.
-//    Handles row-specific selection behavior.
-//
-// Copyright 2002 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to "erco at seriss dot com".
-//
-//
-// TODO:
-//    o Row headings (only column headings supported currently)
-//
-
-#include <stdio.h>		// for debugging
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Table_Row.H>
-
-// Is row selected?
-int Fl_Table_Row::row_selected(int row) {
-  if ( row < 0 || row >= rows() ) return(-1);
-  return(_rowselect[row]);
-}
-
-// Change row selection type
-void Fl_Table_Row::type(TableRowSelectMode val) {
-  _selectmode = val;
-  switch ( _selectmode ) {
-    case SELECT_NONE: {
-      for ( int row=0; row<rows(); row++ ) {
-        _rowselect[row] = 0;
-      }
-      redraw();
-      break;
-    }
-    case SELECT_SINGLE: {
-      int count = 0;
-      for ( int row=0; row<rows(); row++ ) {
-        if ( _rowselect[row] ) {
-          if ( ++count > 1 ) {	// only one allowed
-            _rowselect[row] = 0;
-          }
-        }
-      }
-      redraw();
-      break;
-    }
-    case SELECT_MULTI:
-      break;
-  }
-}
-
-// Change selection state for row
-//
-//     flag:
-//        0 - clear selection
-//        1 - set selection
-//        2 - toggle selection
-//
-//     Returns:
-//        0 - selection state did not change
-//        1 - selection state changed
-//       -1 - row out of range or incorrect selection mode
-//
-int Fl_Table_Row::select_row(int row, int flag) {
-  int ret = 0;
-  if ( row < 0 || row >= rows() ) { return(-1); }
-  switch ( _selectmode ) {
-    case SELECT_NONE:
-      return(-1);
-      
-    case SELECT_SINGLE: {
-      int oldval;
-      for ( int t=0; t<rows(); t++ ) {
-        if ( t == row ) {
-          oldval = _rowselect[row];
-          if ( flag == 2 ) { _rowselect[row] ^= 1; }
-          else             { _rowselect[row] = flag; }
-          if ( oldval != _rowselect[row] ) {
-            redraw_range(row, row, leftcol, rightcol);
-            ret = 1;
-          }
-        }
-        else if ( _rowselect[t] ) {
-          _rowselect[t] = 0;
-          redraw_range(t, t, leftcol, rightcol);
-        }
-      }
-      break;
-    }
-      
-    case SELECT_MULTI: {
-      int oldval = _rowselect[row];
-      if ( flag == 2 ) { _rowselect[row] ^= 1; }
-      else             { _rowselect[row] = flag; }
-      if ( _rowselect[row] != oldval ) {		// select state changed?
-        if ( row >= toprow && row <= botrow ) {		// row visible?
-          // Extend partial redraw range
-          redraw_range(row, row, leftcol, rightcol);
-        }
-        ret = 1;
-      }
-    }
-  }
-  return(ret);
-}
-
-// Select all rows to a known state
-void Fl_Table_Row::select_all_rows(int flag) {
-  switch ( _selectmode ) {
-    case SELECT_NONE:
-      return;
-      
-    case SELECT_SINGLE:
-      if ( flag != 0 ) return;
-      //FALLTHROUGH
-      
-    case SELECT_MULTI: {
-      char changed = 0;
-      if ( flag == 2 ) {
-        for ( int row=0; row<(int)_rowselect.size(); row++ ) {
-          _rowselect[row] ^= 1;
-        }
-        changed = 1;
-      } else {
-        for ( int row=0; row<(int)_rowselect.size(); row++ ) {
-          changed |= (_rowselect[row] != flag)?1:0;
-          _rowselect[row] = flag; 
-        }
-      }
-      if ( changed ) {
-        redraw();
-      }
-    }
-  }
-}
-
-// Set number of rows
-void Fl_Table_Row::rows(int val) {
-  Fl_Table::rows(val);
-  while ( val > (int)_rowselect.size() ) { _rowselect.push_back(0); }	// enlarge
-  while ( val < (int)_rowselect.size() ) { _rowselect.pop_back(); }	// shrink
-}
-
-// #include "eventnames.h"		// debugging
-// #include <stdio.h>
-
-// Handle events
-int Fl_Table_Row::handle(int event) {
-  
-  //  fprintf(stderr, "** EVENT: %s: EVENT XY=%d,%d\n", 
-  //      eventnames[event], Fl::event_x(), Fl::event_y());	// debugging
-  
-  // Let base class handle event
-  int ret = Fl_Table::handle(event);
-  
-  // The following code disables cell selection.. why was it added? -erco 05/18/03
-  // if ( ret ) { _last_y = Fl::event_y(); return(1); }	// base class 'handled' it (eg. column resize)
-  
-  int shiftstate = (Fl::event_state() & FL_CTRL) ? FL_CTRL :
-  (Fl::event_state() & FL_SHIFT) ? FL_SHIFT : 0;
-  
-  // Which row/column are we over?
-  int R, C;  				// row/column being worked on
-  ResizeFlag resizeflag;		// which resizing area are we over? (0=none)
-  TableContext context = cursor2rowcol(R, C, resizeflag);
-  switch ( event ) {
-    case FL_PUSH:
-      if ( Fl::event_button() == 1 ) {
-        _last_push_x = Fl::event_x();	// save regardless of context
-        _last_push_y = Fl::event_y();	// " "
-        
-        // Handle selection in table.
-        //     Select cell under cursor, and enable drag selection mode.
-        //
-        if ( context == CONTEXT_CELL ) {
-          // Ctrl key? Toggle selection state
-          switch ( shiftstate ) {
-            case FL_CTRL:
-              select_row(R, 2);		// toggle
-              break;
-              
-            case FL_SHIFT: {
-              select_row(R, 1);
-              if ( _last_row > -1 ) {
-                int srow = R, erow = _last_row;
-                if ( srow > erow ) {
-                  srow = _last_row;
-                  erow = R;
-                }
-                for ( int row = srow; row <= erow; row++ ) {
-                  select_row(row, 1);
-                }
-              }
-              break;
-            }
-              
-            default:
-              select_all_rows(0);	// clear all previous selections
-              select_row(R, 1);
-              break;
-          }
-          
-          _last_row = R;
-          _dragging_select = 1;
-          ret = 1;      // FL_PUSH handled (ensures FL_DRAG will be sent)
-          // redraw();  // redraw() handled by select_row()
-        }
-      } 
-      break;
-      
-    case FL_DRAG: {
-      if ( _dragging_select ) {
-        // Dragged off table edges? Handle scrolling
-        int offtop = toy - _last_y;			// >0 if off top of table
-        int offbot = _last_y - (toy + toh);		// >0 if off bottom of table
-        
-        if ( offtop > 0 && row_position() > 0 ) {
-          // Only scroll in upward direction
-          int diff = _last_y - Fl::event_y();
-          if ( diff < 1 ) {
-            ret = 1;
-            break;
-          }
-          row_position(row_position() - diff);
-          context = CONTEXT_CELL; C = 0; R = row_position();  // HACK: fake it
-          if ( R < 0 || R > rows() ) { ret = 1; break; }      // HACK: ugly
-        }
-        else if ( offbot > 0 && botrow < rows() ) {
-          // Only scroll in downward direction
-          int diff = Fl::event_y() - _last_y;
-          if ( diff < 1 ) {
-            ret = 1;
-            break;
-          }
-          row_position(row_position() + diff);
-          context = CONTEXT_CELL; C = 0; R = botrow;		// HACK: fake it
-          if ( R < 0 || R > rows() ) { ret = 1; break; }	// HACK: ugly
-        }
-        if ( context == CONTEXT_CELL ) {
-          switch ( shiftstate ) {
-            case FL_CTRL:
-              if ( R != _last_row ) {		// toggle if dragged to new row
-                select_row(R, 2);		// 2=toggle
-              }
-              break;
-              
-            case FL_SHIFT:
-            default:
-              select_row(R, 1);
-              if ( _last_row > -1 ) {
-                int srow = R, erow = _last_row;
-                if ( srow > erow ) {
-                  srow = _last_row;
-                  erow = R;
-                }
-                for ( int row = srow; row <= erow; row++ ) {
-                  select_row(row, 1);
-                }
-              }
-              break;
-          }
-          ret = 1;				// drag handled
-          _last_row = R;
-        }
-      }
-      break;
-    }
-      
-    case FL_RELEASE:
-      if ( Fl::event_button() == 1 ) {
-        _dragging_select = 0;
-        ret = 1;			// release handled
-        // Clicked off edges of data table? 
-        //    A way for user to clear the current selection.
-        //
-        int databot = tiy + table_h,
-        dataright = tix + table_w;
-        if ( 
-            ( _last_push_x > dataright && Fl::event_x() > dataright ) ||
-            ( _last_push_y > databot && Fl::event_y() > databot )
-            ) {
-          select_all_rows(0);			// clear previous selections
-        }
-      }
-      break;
-      
-    default:
-      break;
-  }
-  _last_y = Fl::event_y();
-  return(ret);
-}
-
-//
-// End of "$Id: Fl_Table_Row.cxx 7950 2010-12-05 01:22:53Z greg.ercolano $".
-//
diff --git a/common/fltk/src/Fl_Tabs.cxx b/common/fltk/src/Fl_Tabs.cxx
deleted file mode 100644
index 14f309b..0000000
--- a/common/fltk/src/Fl_Tabs.cxx
+++ /dev/null
@@ -1,531 +0,0 @@
-//
-// "$Id: Fl_Tabs.cxx 8658 2011-05-12 15:53:59Z manolo $"
-//
-// Tab widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// This is the "file card tabs" interface to allow you to put lots and lots
-// of buttons and switches in a panel, as popularized by many toolkits.
-
-// Each child widget is a card, and its label() is printed on the card tab.
-// Clicking the tab makes that card visible.
-
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Tooltip.H>
-
-#define BORDER 2
-#define EXTRASPACE 10
-#define SELECTION_BORDER 5
-
-// Return the left edges of each tab (plus a fake left edge for a tab
-// past the right-hand one).  These positions are actually of the left
-// edge of the slope.  They are either separated by the correct distance
-// or by EXTRASPACE or by zero.
-// These positions are updated in the private arrays tab_pos[] and
-// tab_width[], resp.. If needed, these arrays are (re)allocated.
-// Return value is the index of the selected item.
-
-int Fl_Tabs::tab_positions() {
-  int nc = children();
-  if (nc != tab_count) {
-    clear_tab_positions();
-    if (nc) {
-      tab_pos   = (int*)malloc((nc+1)*sizeof(int));
-      tab_width = (int*)malloc((nc+1)*sizeof(int));
-    }
-    tab_count = nc;
-  }
-  if (nc == 0) return 0;
-  int selected = 0;
-  Fl_Widget*const* a = array();
-  int i;
-  char prev_draw_shortcut = fl_draw_shortcut;
-  fl_draw_shortcut = 1;
-
-  tab_pos[0] = Fl::box_dx(box());
-  for (i=0; i<nc; i++) {
-    Fl_Widget* o = *a++;
-    if (o->visible()) selected = i;
-
-    int wt = 0; int ht = 0;
-    o->measure_label(wt,ht);
-
-    tab_width[i] = wt + EXTRASPACE;
-    tab_pos[i+1] = tab_pos[i] + tab_width[i] + BORDER;
-  }
-  fl_draw_shortcut = prev_draw_shortcut;
-
-  int r = w();
-  if (tab_pos[i] <= r) return selected;
-  // uh oh, they are too big:
-  // pack them against right edge:
-  tab_pos[i] = r;
-  for (i = nc; i--;) {
-    int l = r-tab_width[i];
-    if (tab_pos[i+1] < l) l = tab_pos[i+1];
-    if (tab_pos[i] <= l) break;
-    tab_pos[i] = l;
-    r -= EXTRASPACE;
-  }
-  // pack them against left edge and truncate width if they still don't fit:
-  for (i = 0; i<nc; i++) {
-    if (tab_pos[i] >= i*EXTRASPACE) break;
-    tab_pos[i] = i*EXTRASPACE;
-    int W = w()-1-EXTRASPACE*(children()-i) - tab_pos[i];
-    if (tab_width[i] > W) tab_width[i] = W;
-  }
-  // adjust edges according to visiblity:
-  for (i = nc; i > selected; i--) {
-    tab_pos[i] = tab_pos[i-1] + tab_width[i-1];
-  }
-  return selected;
-}
-
-// Returns space (height) in pixels needed for tabs. Negative to put them on the bottom.
-// Returns full height, if children() = 0.
-int Fl_Tabs::tab_height() {
-  if (children() == 0) return h();
-  int H = h();
-  int H2 = y();
-  Fl_Widget*const* a = array();
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o->y() < y()+H) H = o->y()-y();
-    if (o->y()+o->h() > H2) H2 = o->y()+o->h();
-  }
-  H2 = y()+h()-H2;
-  if (H2 > H) return (H2 <= 0) ? 0 : -H2;
-  else return (H <= 0) ? 0 : H;
-}
-
-// This is used for event handling (clicks) and by fluid to pick tabs.
-// Returns 0, if children() = 0, or if the event is outside of the tabs area.
-Fl_Widget *Fl_Tabs::which(int event_x, int event_y) {
-  if (children() == 0) return 0;
-  int H = tab_height();
-  if (H < 0) {
-    if (event_y > y()+h() || event_y < y()+h()+H) return 0;
-  } else {
-    if (event_y > y()+H || event_y < y()) return 0;
-  }
-  if (event_x < x()) return 0;
-  Fl_Widget *ret = 0L;
-  int nc = children();
-  tab_positions();
-  for (int i=0; i<nc; i++) {
-    if (event_x < x()+tab_pos[i+1]) {
-      ret = child(i);
-      break;
-    }
-  }
-  return ret;
-}
-
-void Fl_Tabs::redraw_tabs()
-{
-  int H = tab_height();
-  if (H >= 0) {
-    H += Fl::box_dy(box());
-    damage(FL_DAMAGE_SCROLL, x(), y(), w(), H);
-  } else {
-    H = Fl::box_dy(box()) - H;
-    damage(FL_DAMAGE_SCROLL, x(), y() + h() - H, w(), H);
-  }
-}
-
-int Fl_Tabs::handle(int event) {
-
-  Fl_Widget *o;
-  int i;
-
-  switch (event) {
-
-  case FL_PUSH: {
-    int H = tab_height();
-    if (H >= 0) {
-      if (Fl::event_y() > y()+H) return Fl_Group::handle(event);
-    } else {
-      if (Fl::event_y() < y()+h()+H) return Fl_Group::handle(event);
-    }}
-    /* FALLTHROUGH */
-  case FL_DRAG:
-  case FL_RELEASE:
-    o = which(Fl::event_x(), Fl::event_y());
-    if (event == FL_RELEASE) {
-      push(0);
-      if (o && Fl::visible_focus() && Fl::focus()!=this) { 
-        Fl::focus(this);
-        redraw_tabs();
-      }
-      if (o && value(o)) {
-        Fl_Widget_Tracker wp(o);
-        set_changed();
-	do_callback();
-	if (wp.deleted()) return 1;
-      }
-      Fl_Tooltip::current(o);
-    } else {
-      push(o);
-    }
-    return 1;
-  case FL_MOVE: {
-    int ret = Fl_Group::handle(event);
-    Fl_Widget *o = Fl_Tooltip::current(), *n = o;
-    int H = tab_height();
-    if ( (H>=0) && (Fl::event_y()>y()+H) )
-      return ret;
-    else if ( (H<0) && (Fl::event_y() < y()+h()+H) )
-      return ret;
-    else { 
-      n = which(Fl::event_x(), Fl::event_y());
-      if (!n) n = this;
-    }
-    if (n!=o)
-      Fl_Tooltip::enter(n);
-    return ret; }
-  case FL_FOCUS:
-  case FL_UNFOCUS:
-    if (!Fl::visible_focus()) return Fl_Group::handle(event);
-    if (Fl::event() == FL_RELEASE ||
-	Fl::event() == FL_SHORTCUT ||
-	Fl::event() == FL_KEYBOARD ||
-	Fl::event() == FL_FOCUS ||
-	Fl::event() == FL_UNFOCUS) {
-      redraw_tabs();
-      if (Fl::event() == FL_FOCUS) return Fl_Group::handle(event);
-      if (Fl::event() == FL_UNFOCUS) return 0;
-      else return 1;
-    } else return Fl_Group::handle(event);
-  case FL_KEYBOARD:
-    switch (Fl::event_key()) {
-      case FL_Left:
-        if (child(0)->visible()) return 0;
-	for (i = 1; i < children(); i ++)
-	  if (child(i)->visible()) break;
-	value(child(i - 1));
-	set_changed();
-	do_callback();
-        return 1;
-      case FL_Right:
-        if (child(children() - 1)->visible()) return 0;
-	for (i = 0; i < children(); i ++)
-	  if (child(i)->visible()) break;
-	value(child(i + 1));
-	set_changed();
-	do_callback();
-        return 1;
-      case FL_Down:
-        redraw();
-        return Fl_Group::handle(FL_FOCUS);
-      default:
-        break;
-    }
-    return Fl_Group::handle(event);
-  case FL_SHORTCUT:
-    for (i = 0; i < children(); ++i) {
-      Fl_Widget *c = child(i);
-      if (c->test_shortcut(c->label())) {
-        char sc = !c->visible();
-        value(c);
-        if (sc) set_changed();
-        do_callback();
-        return 1;
-      }
-    }
-    return Fl_Group::handle(event);
-  case FL_SHOW:
-    value(); // update visibilities and fall through
-  default:
-    return Fl_Group::handle(event);
-
-  }
-}
-
-int Fl_Tabs::push(Fl_Widget *o) {
-  if (push_ == o) return 0;
-  if ( (push_ && !push_->visible()) || (o && !o->visible()) )
-    redraw_tabs();
-  push_ = o;
-  return 1;
-}
-
-/**  
-   Gets the currently visible widget/tab.
-   The value() is the first visible child (or the last child if none
-   are visible) and this also hides any other children.
-   This allows the tabs to be deleted, moved to other groups, and
-   show()/hide() called without it screwing up.
-*/
-Fl_Widget* Fl_Tabs::value() {
-  Fl_Widget* v = 0;
-  Fl_Widget*const* a = array();
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (v) o->hide();
-    else if (o->visible()) v = o;
-    else if (!i) {o->show(); v = o;}
-  }
-  return v;
-}
-
-/**
-  Sets the widget to become the current visible widget/tab.
-  Setting the value hides all other children, and makes this one
-  visible, if it is really a child.
-*/
-int Fl_Tabs::value(Fl_Widget *newvalue) {
-  Fl_Widget*const* a = array();
-  int ret = 0;
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o == newvalue) {
-      if (!o->visible()) ret = 1;
-      o->show();
-    } else {
-      o->hide();
-    }
-  }
-  return ret;
-}
-
-enum {LEFT, RIGHT, SELECTED};
-
-void Fl_Tabs::draw() {
-  Fl_Widget *v = value();
-  int H = tab_height();
-
-  if (damage() & FL_DAMAGE_ALL) { // redraw the entire thing:
-    Fl_Color c = v ? v->color() : color();
-
-    draw_box(box(), x(), y()+(H>=0?H:0), w(), h()-(H>=0?H:-H), c);
-
-    if (selection_color() != c) {
-      // Draw the top or bottom SELECTION_BORDER lines of the tab pane in the
-      // selection color so that the user knows which tab is selected...
-      int clip_y = (H >= 0) ? y() + H : y() + h() + H - SELECTION_BORDER;
-      fl_push_clip(x(), clip_y, w(), SELECTION_BORDER);
-      draw_box(box(), x(), clip_y, w(), SELECTION_BORDER, selection_color());
-      fl_pop_clip();
-    }
-    if (v) draw_child(*v);
-  } else { // redraw the child
-    if (v) update_child(*v);
-  }
-  if (damage() & (FL_DAMAGE_SCROLL|FL_DAMAGE_ALL)) {
-    int nc = children();
-    int selected = tab_positions();
-    int i;
-    Fl_Widget*const* a = array();
-    for (i=0; i<selected; i++)
-      draw_tab(x()+tab_pos[i], x()+tab_pos[i+1],
-               tab_width[i], H, a[i], LEFT);
-    for (i=nc-1; i > selected; i--)
-      draw_tab(x()+tab_pos[i], x()+tab_pos[i+1],
-               tab_width[i], H, a[i], RIGHT);
-    if (v) {
-      i = selected;
-      draw_tab(x()+tab_pos[i], x()+tab_pos[i+1],
-               tab_width[i], H, a[i], SELECTED);
-    }
-  }
-}
-
-void Fl_Tabs::draw_tab(int x1, int x2, int W, int H, Fl_Widget* o, int what) {
-  int sel = (what == SELECTED);
-  int dh = Fl::box_dh(box());
-  int dy = Fl::box_dy(box());
-  char prev_draw_shortcut = fl_draw_shortcut;
-  fl_draw_shortcut = 1;
-
-  Fl_Boxtype bt = (o==push_ &&!sel) ? fl_down(box()) : box();
-
-  // compute offsets to make selected tab look bigger
-  int yofs = sel ? 0 : BORDER;
-
-  if ((x2 < x1+W) && what == RIGHT) x1 = x2 - W;
-
-  if (H >= 0) {
-    if (sel) fl_push_clip(x1, y(), x2 - x1, H + dh - dy);
-    else fl_push_clip(x1, y(), x2 - x1, H);
-
-    H += dh;
-
-    Fl_Color c = sel ? selection_color() : o->selection_color();
-
-    draw_box(bt, x1, y() + yofs, W, H + 10 - yofs, c);
-
-    // Save the previous label color
-    Fl_Color oc = o->labelcolor();
-
-    // Draw the label using the current color...
-    o->labelcolor(sel ? labelcolor() : o->labelcolor());    
-    o->draw_label(x1, y() + yofs, W, H - yofs, FL_ALIGN_CENTER);
-
-    // Restore the original label color...
-    o->labelcolor(oc);
-
-    if (Fl::focus() == this && o->visible())
-      draw_focus(box(), x1, y(), W, H);
-
-    fl_pop_clip();
-  } else {
-    H = -H;
-
-    if (sel) fl_push_clip(x1, y() + h() - H - dy, x2 - x1, H + dy);
-    else fl_push_clip(x1, y() + h() - H, x2 - x1, H);
-
-    H += dh;
-
-    Fl_Color c = sel ? selection_color() : o->selection_color();
-
-    draw_box(bt, x1, y() + h() - H - 10, W, H + 10 - yofs, c);
-
-    // Save the previous label color
-    Fl_Color oc = o->labelcolor();
-
-    // Draw the label using the current color...
-    o->labelcolor(sel ? labelcolor() : o->labelcolor());
-    o->draw_label(x1, y() + h() - H, W, H - yofs, FL_ALIGN_CENTER);
-
-    // Restore the original label color...
-    o->labelcolor(oc);
-
-    if (Fl::focus() == this && o->visible())
-      draw_focus(box(), x1, y() + h() - H, W, H);
-
-    fl_pop_clip();
-  }
-  fl_draw_shortcut = prev_draw_shortcut;
-}
-
-/**
-    Creates a new Fl_Tabs widget using the given position, size,
-    and label string. The default boxtype is FL_THIN_UP_BOX.
-
-    Use add(Fl_Widget*) to add each child, which are usually
-    Fl_Group widgets. The children should be sized to stay
-    away from the top or bottom edge of the Fl_Tabs widget,
-    which is where the tabs will be drawn.
-
-    All children of Fl_Tabs should have the same size and exactly fit on top of 
-    each other. They should only leave space above or below where that tabs will 
-    go, but not on the sides. If the first child of Fl_Tabs is set to 
-    "resizable()", the riders will not resize when the tabs are resized.
-
-    The destructor <I>also deletes all the children</I>. This
-    allows a whole tree to be deleted at once, without having to
-    keep a pointer to all the children in the user code. A kludge
-    has been done so the Fl_Tabs and all of its children
-    can be automatic (local) variables, but you must declare the
-    Fl_Tabs widget <I>first</I> so that it is destroyed last.
-*/
-Fl_Tabs::Fl_Tabs(int X,int Y,int W, int H, const char *l) :
-  Fl_Group(X,Y,W,H,l)
-{
-  box(FL_THIN_UP_BOX);
-  push_ = 0;
-  tab_pos = 0;
-  tab_width = 0;
-  tab_count = 0;
-}
-
-Fl_Tabs::~Fl_Tabs() {
-  clear_tab_positions();
-}
-
-/**
-    Returns the position and size available to be used by its children.
-
-    If there isn't any child yet the \p tabh parameter will be used to
-    calculate the return values. This assumes that the children's labelsize
-    is the same as the Fl_Tabs' labelsize and adds a small border.
-
-    If there are already children, the values of child(0) are returned, and
-    \p tabh is ignored.
-
-    \note Children should always use the same positions and sizes.
-
-    \p tabh can be one of
-    \li    0: calculate label size, tabs on top
-    \li   -1: calculate label size, tabs on bottom
-    \li >  0: use given \p tabh value, tabs on top (height = tabh)
-    \li < -1: use given \p tabh value, tabs on bottom (height = -tabh)
-
-    \param[in]	tabh		position and optional height of tabs (see above)
-    \param[out]	rx,ry,rw,rh	(x,y,w,h) of client area for children
-
-    \since	FLTK 1.3.0
-*/
-void Fl_Tabs::client_area(int &rx, int &ry, int &rw, int &rh, int tabh) {
-
-  if (children()) {			// use existing values
-
-    rx = child(0)->x();
-    ry = child(0)->y();
-    rw = child(0)->w();
-    rh = child(0)->h();
-
-  } else {				// calculate values
-
-    int y_offset;
-    int label_height = fl_height(labelfont(), labelsize()) + BORDER*2;
-
-    if (tabh == 0)			// use default (at top)
-      y_offset = label_height;
-    else if (tabh == -1)	 	// use default (at bottom)
-      y_offset = -label_height;
-    else
-      y_offset = tabh;			// user given value
-
-    rx = x();
-    rw = w();
-
-    if (y_offset >= 0) {		// labels at top
-      ry = y() + y_offset;
-      rh = h() - y_offset;
-    } else {				// labels at bottom
-      ry = y();
-      rh = h() + y_offset;
-    }
-  }
-}
-
-void Fl_Tabs::clear_tab_positions() {
-  if (tab_pos) {
-    free(tab_pos);
-    tab_pos = 0;
-  }
-  if (tab_width){
-    free(tab_width);
-    tab_width = 0;
-  }
-}
-
-//
-// End of "$Id: Fl_Tabs.cxx 8658 2011-05-12 15:53:59Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Text_Buffer.cxx b/common/fltk/src/Fl_Text_Buffer.cxx
deleted file mode 100644
index 9714f51..0000000
--- a/common/fltk/src/Fl_Text_Buffer.cxx
+++ /dev/null
@@ -1,1794 +0,0 @@
-//
-// "$Id: Fl_Text_Buffer.cxx 8040 2010-12-15 17:38:39Z manolo $"
-//
-// Copyright 2001-2010 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <ctype.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Text_Buffer.H>
-#include <FL/fl_ask.H>
-
-
-/*
- This file is based on a port of NEdit to FLTK many years ago. NEdit at that
- point was already stretched beyond the task it was designed for which explains
- why the source code is sometimes pretty convoluted. It still is a very useful
- widget for FLTK, and we are thankful that the nedit team allowed us to 
- integrate their code.
-
- With the introduction of Unicode and UTF-8, Fl_Text_... has to go into a whole
- new generation of code. Originally designed for monospaced fonts only, many
- features make less sense in the multibyte and multiwidth world of UTF-8.
-
- Columns are a good example. There is simply no such thing. The new Fl_Text_...
- widget converts columns to pixels by multiplying them with the average 
- character width for a given font.
-
- Rectangular selections were rarely used (if at all) and make little sense when
- using variable width fonts. They have been removed.
-
- Using multiple spaces to emulate tab stops has been replaced by pixel counting
- routines. They are slower, but give the expected result for proportional fonts.
-
- And constantly recalculating character widths is just much too expensive. Lines
- of text are now subdivided into blocks of text which are measured at once 
- instead of individual characters. 
- */
-
-
-#ifndef min
-
-static int max(int i1, int i2)
-{
-  return i1 >= i2 ? i1 : i2;
-}
-
-static int min(int i1, int i2)
-{
-  return i1 <= i2 ? i1 : i2;
-}
-
-#endif
-
-
-static char *undobuffer;
-static int undobufferlength;
-static Fl_Text_Buffer *undowidget;
-static int undoat;		// points after insertion
-static int undocut;		// number of characters deleted there
-static int undoinsert;		// number of characters inserted
-static int undoyankcut;		// length of valid contents of buffer, even if undocut=0
-
-/*
- Resize the undo buffer to match at least the requested size.
- */
-static void undobuffersize(int n)
-{
-  if (n > undobufferlength) {
-    if (undobuffer) {
-      do {
-	undobufferlength *= 2;
-      } while (undobufferlength < n);
-      undobuffer = (char *) realloc(undobuffer, undobufferlength);
-    } else {
-      undobufferlength = n + 9;
-      undobuffer = (char *) malloc(undobufferlength);
-    }
-  }
-}
-
-static void def_transcoding_warning_action(Fl_Text_Buffer *text)
-{
-  fl_alert("%s", text->file_encoding_warning_message);
-}
-
-/*
- Initialize all variables.
- */
-Fl_Text_Buffer::Fl_Text_Buffer(int requestedSize, int preferredGapSize)
-{
-  mLength = 0;
-  mPreferredGapSize = preferredGapSize;
-  mBuf = (char *) malloc(requestedSize + mPreferredGapSize);
-  mGapStart = 0;
-  mGapEnd = mPreferredGapSize;
-  mTabDist = 8;
-  mPrimary.mSelected = 0;
-  mPrimary.mStart = mPrimary.mEnd = 0;
-  mSecondary.mSelected = 0;
-  mSecondary.mStart = mSecondary.mEnd = 0;
-  mHighlight.mSelected = 0;
-  mHighlight.mStart = mHighlight.mEnd = 0;
-  mModifyProcs = NULL;
-  mCbArgs = NULL;
-  mNModifyProcs = 0;
-  mNPredeleteProcs = 0;
-  mPredeleteProcs = NULL;
-  mPredeleteCbArgs = NULL;
-  mCursorPosHint = 0;
-  mCanUndo = 1;
-  input_file_was_transcoded = 0;
-  transcoding_warning_action = def_transcoding_warning_action;
-}
-
-
-/*
- Free all resources.
- */
-Fl_Text_Buffer::~Fl_Text_Buffer()
-{
-  free(mBuf);
-  if (mNModifyProcs != 0) {
-    delete[]mModifyProcs;
-    delete[]mCbArgs;
-  }
-  if (mNPredeleteProcs != 0) {
-    delete[]mPredeleteProcs;
-    delete[]mPredeleteCbArgs;
-  }
-}
-
-
-/*
- This function copies verbose whatever is in front and after the gap into a
- single buffer.
- */
-char *Fl_Text_Buffer::text() const {
-  char *t = (char *) malloc(mLength + 1);
-  memcpy(t, mBuf, mGapStart);
-  memcpy(t+mGapStart, mBuf+mGapEnd, mLength - mGapStart);
-  t[mLength] = '\0';
-  return t;
-} 
-
-
-/*
- Set the text buffer to a new string.
- */
-void Fl_Text_Buffer::text(const char *t)
-{
-  IS_UTF8_ALIGNED(t)
-  
-  call_predelete_callbacks(0, length());
-  
-  /* Save information for redisplay, and get rid of the old buffer */
-  const char *deletedText = text();
-  int deletedLength = mLength;
-  free((void *) mBuf);
-  
-  /* Start a new buffer with a gap of mPreferredGapSize at the end */
-  int insertedLength = strlen(t);
-  mBuf = (char *) malloc(insertedLength + mPreferredGapSize);
-  mLength = insertedLength;
-  mGapStart = insertedLength;
-  mGapEnd = mGapStart + mPreferredGapSize;
-  memcpy(mBuf, t, insertedLength);
-  
-  /* Zero all of the existing selections */
-  update_selections(0, deletedLength, 0);
-  
-  /* Call the saved display routine(s) to update the screen */
-  call_modify_callbacks(0, deletedLength, insertedLength, 0, deletedText);
-  free((void *) deletedText);
-}
-
-
-/*
- Creates a range of text to a new buffer and copies verbose from around the gap.
- */
-char *Fl_Text_Buffer::text_range(int start, int end) const {
-  IS_UTF8_ALIGNED2(this, (start))
-  IS_UTF8_ALIGNED2(this, (end))
-  
-  char *s = NULL;
-  
-  /* Make sure start and end are ok, and allocate memory for returned string.
-   If start is bad, return "", if end is bad, adjust it. */
-  if (start < 0 || start > mLength)
-  {
-    s = (char *) malloc(1);
-    s[0] = '\0';
-    return s;
-  }
-  if (end < start) {
-    int temp = start;
-    start = end;
-    end = temp;
-  }
-  if (end > mLength)
-    end = mLength;
-  int copiedLength = end - start;
-  s = (char *) malloc(copiedLength + 1);
-  
-  /* Copy the text from the buffer to the returned string */
-  if (end <= mGapStart) {
-    memcpy(s, mBuf + start, copiedLength);
-  } else if (start >= mGapStart) {
-    memcpy(s, mBuf + start + (mGapEnd - mGapStart), copiedLength);
-  } else {
-    int part1Length = mGapStart - start;
-    memcpy(s, mBuf + start, part1Length);
-    memcpy(s + part1Length, mBuf + mGapEnd, copiedLength - part1Length);
-  }
-  s[copiedLength] = '\0';
-  return s;
-}
-
-/*
- Return a UCS-4 character at the given index.
- Pos must be at a character boundary.
- */
-unsigned int Fl_Text_Buffer::char_at(int pos) const {  
-  if (pos < 0 || pos >= mLength)
-    return '\0';
-  
-  IS_UTF8_ALIGNED2(this, (pos))
-  
-  const char *src = address(pos);
-  return fl_utf8decode(src, 0, 0);
-} 
-
-
-/*
- Return the raw byte at the given index.
- This function ignores all unicode encoding.
- */
-char Fl_Text_Buffer::byte_at(int pos) const {
-  if (pos < 0 || pos >= mLength)
-    return '\0';
-  const char *src = address(pos);
-  return *src;
-} 
-
-
-/*
- Insert some text at the given index.
- Pos must be at a character boundary.
-*/
-void Fl_Text_Buffer::insert(int pos, const char *text)
-{
-  IS_UTF8_ALIGNED2(this, (pos))
-  IS_UTF8_ALIGNED(text)
-  
-  /* check if there is actually any text */
-  if (!text || !*text)
-    return;
-  
-  /* if pos is not contiguous to existing text, make it */
-  if (pos > mLength)
-    pos = mLength;
-  if (pos < 0)
-    pos = 0;
-  
-  /* Even if nothing is deleted, we must call these callbacks */
-  call_predelete_callbacks(pos, 0);
-  
-  /* insert and redisplay */
-  int nInserted = insert_(pos, text);
-  mCursorPosHint = pos + nInserted;
-  IS_UTF8_ALIGNED2(this, (mCursorPosHint))
-  call_modify_callbacks(pos, 0, nInserted, 0, NULL);
-}
-
-
-/*
- Replace a range of text with new text.
- Start and end must be at a character boundary.
-*/
-void Fl_Text_Buffer::replace(int start, int end, const char *text)
-{
-  // Range check...
-  if (!text)
-    return;
-  if (start < 0)
-    start = 0;
-  if (end > mLength)
-    end = mLength;
-
-  IS_UTF8_ALIGNED2(this, (start))
-  IS_UTF8_ALIGNED2(this, (end))
-  IS_UTF8_ALIGNED(text)
-  
-  call_predelete_callbacks(start, end - start);
-  const char *deletedText = text_range(start, end);
-  remove_(start, end);
-  int nInserted = insert_(start, text);
-  mCursorPosHint = start + nInserted;
-  call_modify_callbacks(start, end - start, nInserted, 0, deletedText);
-  free((void *) deletedText);
-}
-
-
-/*
- Remove a range of text.
- Start and End must be at a character boundary.
-*/
-void Fl_Text_Buffer::remove(int start, int end)
-{
-  /* Make sure the arguments make sense */
-  if (start > end) {
-    int temp = start;
-    start = end;
-    end = temp;
-  }
-  if (start > mLength)
-    start = mLength;
-  if (start < 0)
-    start = 0;
-  if (end > mLength)
-    end = mLength;
-  if (end < 0)
-    end = 0;
-
-  IS_UTF8_ALIGNED2(this, (start))
-  IS_UTF8_ALIGNED2(this, (end))  
-  
-  if (start == end)
-    return;
-  
-  call_predelete_callbacks(start, end - start);
-  /* Remove and redisplay */
-  const char *deletedText = text_range(start, end);
-  remove_(start, end);
-  mCursorPosHint = start;
-  call_modify_callbacks(start, end - start, 0, 0, deletedText);
-  free((void *) deletedText);
-}
-
-
-/*
- Copy a range of text from another text buffer.
- fromStart, fromEnd, and toPos must be at a character boundary.
- */
-void Fl_Text_Buffer::copy(Fl_Text_Buffer * fromBuf, int fromStart,
-			  int fromEnd, int toPos)
-{
-  IS_UTF8_ALIGNED2(fromBuf, fromStart)
-  IS_UTF8_ALIGNED2(fromBuf, fromEnd)
-  IS_UTF8_ALIGNED2(this, (toPos))
-  
-  int copiedLength = fromEnd - fromStart;
-  
-  /* Prepare the buffer to receive the new text.  If the new text fits in
-   the current buffer, just move the gap (if necessary) to where
-   the text should be inserted.  If the new text is too large, reallocate
-   the buffer with a gap large enough to accomodate the new text and a
-   gap of mPreferredGapSize */
-  if (copiedLength > mGapEnd - mGapStart)
-    reallocate_with_gap(toPos, copiedLength + mPreferredGapSize);
-  else if (toPos != mGapStart)
-    move_gap(toPos);
-  
-  /* Insert the new text (toPos now corresponds to the start of the gap) */
-  if (fromEnd <= fromBuf->mGapStart) {
-    memcpy(&mBuf[toPos], &fromBuf->mBuf[fromStart], copiedLength);
-  } else if (fromStart >= fromBuf->mGapStart) {
-    memcpy(&mBuf[toPos],
-	   &fromBuf->mBuf[fromStart + (fromBuf->mGapEnd - fromBuf->mGapStart)],
-	   copiedLength);
-  } else {
-    int part1Length = fromBuf->mGapStart - fromStart;
-    memcpy(&mBuf[toPos], &fromBuf->mBuf[fromStart], part1Length);
-    memcpy(&mBuf[toPos + part1Length],
-	   &fromBuf->mBuf[fromBuf->mGapEnd], copiedLength - part1Length);
-  }
-  mGapStart += copiedLength;
-  mLength += copiedLength;
-  update_selections(toPos, 0, copiedLength);
-}
-
-
-/*
- Take the previous changes and undo them. Return the previous
- cursor position in cursorPos. Returns 1 if the undo was applied.
- CursorPos will be at a character boundary.
- */ 
-int Fl_Text_Buffer::undo(int *cursorPos)
-{
-  if (undowidget != this || (!undocut && !undoinsert && !mCanUndo))
-    return 0;
-  
-  int ilen = undocut;
-  int xlen = undoinsert;
-  int b = undoat - xlen;
-  
-  if (xlen && undoyankcut && !ilen) {
-    ilen = undoyankcut;
-  }
-  
-  if (xlen && ilen) {
-    undobuffersize(ilen + 1);
-    undobuffer[ilen] = 0;
-    char *tmp = strdup(undobuffer);
-    replace(b, undoat, tmp);
-    if (cursorPos)
-      *cursorPos = mCursorPosHint;
-    free(tmp);
-  } else if (xlen) {
-    remove(b, undoat);
-    if (cursorPos)
-      *cursorPos = mCursorPosHint;
-  } else if (ilen) {
-    undobuffersize(ilen + 1);
-    undobuffer[ilen] = 0;
-    insert(undoat, undobuffer);
-    if (cursorPos)
-      *cursorPos = mCursorPosHint;
-    undoyankcut = 0;
-  }
-  
-  return 1;
-}
-
-
-/*
- Set a flag if undo function will work.
- */
-void Fl_Text_Buffer::canUndo(char flag)
-{
-  mCanUndo = flag;
-  // disabling undo also clears the last undo operation!
-  if (!mCanUndo && undowidget==this) 
-    undowidget = 0;
-}
-
-
-/*
- Change the tab width. This will cause a couple of callbacks and a complete 
- redisplay. 
- Matt: I am not entirely sure why we need to trigger callbacks because
- tabs are only a graphical hint, not changing any text at all, but I leave
- this in here for back compatibility. 
- */
-void Fl_Text_Buffer::tab_distance(int tabDist)
-{
-  /* First call the pre-delete callbacks with the previous tab setting 
-   still active. */
-  call_predelete_callbacks(0, mLength);
-  
-  /* Change the tab setting */
-  mTabDist = tabDist;
-  
-  /* Force any display routines to redisplay everything (unfortunately,
-   this means copying the whole buffer contents to provide "deletedText" */
-  const char *deletedText = text();
-  call_modify_callbacks(0, mLength, mLength, 0, deletedText);
-  free((void *) deletedText);
-}
-
-
-/*
- Select a range of text.
- Start and End must be at a character boundary.
- */
-void Fl_Text_Buffer::select(int start, int end)
-{
-  IS_UTF8_ALIGNED2(this, (start))
-  IS_UTF8_ALIGNED2(this, (end))  
-  
-  Fl_Text_Selection oldSelection = mPrimary;
-  
-  mPrimary.set(start, end);
-  redisplay_selection(&oldSelection, &mPrimary);
-}
-
-
-/*
- Clear the primary selection.
- */
-void Fl_Text_Buffer::unselect()
-{
-  Fl_Text_Selection oldSelection = mPrimary;
-  
-  mPrimary.mSelected = 0;
-  redisplay_selection(&oldSelection, &mPrimary);
-}
-
-  
-/*
- Return the primary selection range.
- */
-int Fl_Text_Buffer::selection_position(int *start, int *end)
-{
-  return mPrimary.position(start, end);
-}
-
-
-/*
- Return a copy of the selected text.
- */
-char *Fl_Text_Buffer::selection_text()
-{
-  return selection_text_(&mPrimary);
-}
-
-
-/*
- Remove the selected text.
- */
-void Fl_Text_Buffer::remove_selection()
-{
-  remove_selection_(&mPrimary);
-}
-
-
-/*
- Replace the selected text.
- */
-void Fl_Text_Buffer::replace_selection(const char *text)
-{
-  replace_selection_(&mPrimary, text);
-}
-
-
-/*
- Select text.
- Start and End must be at a character boundary.
- */
-void Fl_Text_Buffer::secondary_select(int start, int end)
-{
-  Fl_Text_Selection oldSelection = mSecondary;
-  
-  mSecondary.set(start, end);
-  redisplay_selection(&oldSelection, &mSecondary);
-}
-
-
-/*
- Deselect text.
- */
-void Fl_Text_Buffer::secondary_unselect()
-{
-  Fl_Text_Selection oldSelection = mSecondary;
-  
-  mSecondary.mSelected = 0;
-  redisplay_selection(&oldSelection, &mSecondary);
-}
-
-  
-/*
- Return the selected range.
- */
-int Fl_Text_Buffer::secondary_selection_position(int *start, int *end)
-{
-  return mSecondary.position(start, end);
-}
-
-
-/*
- Return a copy of the text in this selection.
- */
-char *Fl_Text_Buffer::secondary_selection_text()
-{
-  return selection_text_(&mSecondary);
-}
-
-
-/*
- Remove the selected text.
- */
-void Fl_Text_Buffer::remove_secondary_selection()
-{
-  remove_selection_(&mSecondary);
-}
-
-
-/*
- Replace selected text.
- */
-void Fl_Text_Buffer::replace_secondary_selection(const char *text)
-{
-  replace_selection_(&mSecondary, text);
-}
-
-
-/*
- Highlight a range of text.
- Start and End must be at a character boundary.
- */
-void Fl_Text_Buffer::highlight(int start, int end)
-{
-  Fl_Text_Selection oldSelection = mHighlight;
-  
-  mHighlight.set(start, end);
-  redisplay_selection(&oldSelection, &mHighlight);
-}
-
-
-/*
- Remove text highlighting.
- */
-void Fl_Text_Buffer::unhighlight()
-{
-  Fl_Text_Selection oldSelection = mHighlight;
-  
-  mHighlight.mSelected = 0;
-  redisplay_selection(&oldSelection, &mHighlight);
-}
-
-  
-/*
- Return position of highlight.
- */
-int Fl_Text_Buffer::highlight_position(int *start, int *end)
-{
-  return mHighlight.position(start, end);
-}
-
-
-/*
- Return a copy of highlighted text.
- */
-char *Fl_Text_Buffer::highlight_text()
-{
-  return selection_text_(&mHighlight);
-}
-
-
-/*
- Add a callback that is called whenever text is modified.
- */
-void Fl_Text_Buffer::add_modify_callback(Fl_Text_Modify_Cb bufModifiedCB,
-					 void *cbArg)
-{
-  Fl_Text_Modify_Cb *newModifyProcs =
-  new Fl_Text_Modify_Cb[mNModifyProcs + 1];
-  void **newCBArgs = new void *[mNModifyProcs + 1];
-  for (int i = 0; i < mNModifyProcs; i++) {
-    newModifyProcs[i + 1] = mModifyProcs[i];
-    newCBArgs[i + 1] = mCbArgs[i];
-  }
-  if (mNModifyProcs != 0) {
-    delete[]mModifyProcs;
-    delete[]mCbArgs;
-  }
-  newModifyProcs[0] = bufModifiedCB;
-  newCBArgs[0] = cbArg;
-  mNModifyProcs++;
-  mModifyProcs = newModifyProcs;
-  mCbArgs = newCBArgs;
-}
-
-
-/*
- Remove a callback.
- */
-void Fl_Text_Buffer::remove_modify_callback(Fl_Text_Modify_Cb bufModifiedCB, 
-                                            void *cbArg)
-{
-  int i, toRemove = -1;
-  
-  /* find the matching callback to remove */
-  for (i = 0; i < mNModifyProcs; i++) {
-    if (mModifyProcs[i] == bufModifiedCB && mCbArgs[i] == cbArg) {
-      toRemove = i;
-      break;
-    }
-  }
-  if (toRemove == -1) {
-    Fl::error
-    ("Fl_Text_Buffer::remove_modify_callback(): Can't find modify CB to remove");
-    return;
-  }
-  
-  /* Allocate new lists for remaining callback procs and args (if
-   any are left) */
-  mNModifyProcs--;
-  if (mNModifyProcs == 0) {
-    mNModifyProcs = 0;
-    delete[]mModifyProcs;
-    mModifyProcs = NULL;
-    delete[]mCbArgs;
-    mCbArgs = NULL;
-    return;
-  }
-  Fl_Text_Modify_Cb *newModifyProcs = new Fl_Text_Modify_Cb[mNModifyProcs];
-  void **newCBArgs = new void *[mNModifyProcs];
-  
-  /* copy out the remaining members and free the old lists */
-  for (i = 0; i < toRemove; i++) {
-    newModifyProcs[i] = mModifyProcs[i];
-    newCBArgs[i] = mCbArgs[i];
-  }
-  for (; i < mNModifyProcs; i++) {
-    newModifyProcs[i] = mModifyProcs[i + 1];
-    newCBArgs[i] = mCbArgs[i + 1];
-  }
-  delete[]mModifyProcs;
-  delete[]mCbArgs;
-  mModifyProcs = newModifyProcs;
-  mCbArgs = newCBArgs;
-}
-
-
-/*
- Add a callback that is called before deleting text.
- */
-void Fl_Text_Buffer::add_predelete_callback(Fl_Text_Predelete_Cb bufPreDeleteCB, 
-                                            void *cbArg)
-{
-  Fl_Text_Predelete_Cb *newPreDeleteProcs =
-  new Fl_Text_Predelete_Cb[mNPredeleteProcs + 1];
-  void **newCBArgs = new void *[mNPredeleteProcs + 1];
-  for (int i = 0; i < mNPredeleteProcs; i++) {
-    newPreDeleteProcs[i + 1] = mPredeleteProcs[i];
-    newCBArgs[i + 1] = mPredeleteCbArgs[i];
-  }
-  if (!mNPredeleteProcs != 0) {
-    delete[]mPredeleteProcs;
-    delete[]mPredeleteCbArgs;
-  }
-  newPreDeleteProcs[0] = bufPreDeleteCB;
-  newCBArgs[0] = cbArg;
-  mNPredeleteProcs++;
-  mPredeleteProcs = newPreDeleteProcs;
-  mPredeleteCbArgs = newCBArgs;
-}
-
-
-/*
- Remove a callback.
- */
-void Fl_Text_Buffer::remove_predelete_callback(Fl_Text_Predelete_Cb bufPreDeleteCB, void *cbArg)
-{
-  int i, toRemove = -1;
-  /* find the matching callback to remove */
-  for (i = 0; i < mNPredeleteProcs; i++) {
-    if (mPredeleteProcs[i] == bufPreDeleteCB &&
-	mPredeleteCbArgs[i] == cbArg) {
-      toRemove = i;
-      break;
-    }
-  }
-  if (toRemove == -1) {
-    Fl::error
-    ("Fl_Text_Buffer::remove_predelete_callback(): Can't find pre-delete CB to remove");
-    return;
-  }
-  
-  /* Allocate new lists for remaining callback procs and args (if
-   any are left) */
-  mNPredeleteProcs--;
-  if (mNPredeleteProcs == 0) {
-    mNPredeleteProcs = 0;
-    delete[]mPredeleteProcs;
-    mPredeleteProcs = NULL;
-    delete[]mPredeleteCbArgs;
-    mPredeleteCbArgs = NULL;
-    return;
-  }
-  Fl_Text_Predelete_Cb *newPreDeleteProcs =
-  new Fl_Text_Predelete_Cb[mNPredeleteProcs];
-  void **newCBArgs = new void *[mNPredeleteProcs];
-  
-  /* copy out the remaining members and free the old lists */
-  for (i = 0; i < toRemove; i++) {
-    newPreDeleteProcs[i] = mPredeleteProcs[i];
-    newCBArgs[i] = mPredeleteCbArgs[i];
-  }
-  for (; i < mNPredeleteProcs; i++) {
-    newPreDeleteProcs[i] = mPredeleteProcs[i + 1];
-    newCBArgs[i] = mPredeleteCbArgs[i + 1];
-  }
-  delete[]mPredeleteProcs;
-  delete[]mPredeleteCbArgs;
-  mPredeleteProcs = newPreDeleteProcs;
-  mPredeleteCbArgs = newCBArgs;
-}
-
-
-/*
- Return a copy of the line that contains a given index.
- Pos must be at a character boundary.
- */
-char *Fl_Text_Buffer::line_text(int pos) const {
-  return text_range(line_start(pos), line_end(pos));
-} 
-
-
-/*
- Find the beginning of the line.
- */
-int Fl_Text_Buffer::line_start(int pos) const 
-{
-  if (!findchar_backward(pos, '\n', &pos))
-    return 0;
-  return pos + 1;
-} 
-
-
-/*
- Find the end of the line.
- */
-int Fl_Text_Buffer::line_end(int pos) const {
-  if (!findchar_forward(pos, '\n', &pos))
-    pos = mLength;
-  return pos;
-} 
-
-
-/*
- Find the beginning of a word.
- NOT UNICODE SAFE.
- */
-int Fl_Text_Buffer::word_start(int pos) const {
-  // FIXME: character is ucs-4
-  while (pos>0 && (isalnum(char_at(pos)) || char_at(pos) == '_')) {
-    pos = prev_char(pos);
-  } 
-  // FIXME: character is ucs-4
-  if (!(isalnum(char_at(pos)) || char_at(pos) == '_'))
-    pos = next_char(pos);
-  return pos;
-}
-
-
-/*
- Find the end of a word.
- NOT UNICODE SAFE.
- */
-int Fl_Text_Buffer::word_end(int pos) const {
-  // FIXME: character is ucs-4
-  while (pos < length() && (isalnum(char_at(pos)) || char_at(pos) == '_'))
-  {
-    pos = next_char(pos);
-  }
-  return pos;
-}
-
-
-/*
- Count the number of characters between two positions.
- */
-int Fl_Text_Buffer::count_displayed_characters(int lineStartPos,
-					       int targetPos) const
-{
-  IS_UTF8_ALIGNED2(this, (lineStartPos))
-  IS_UTF8_ALIGNED2(this, (targetPos))
-  
-  int charCount = 0;
-  
-  int pos = lineStartPos;
-  while (pos < targetPos) {
-    pos = next_char(pos);
-    charCount++;
-  }
-  return charCount;
-} 
-
-
-/*
- Skip ahead a number of characters from a given index.
- This function breaks early if it encounters a newline character.
- */
-int Fl_Text_Buffer::skip_displayed_characters(int lineStartPos, int nChars)
-{
-  IS_UTF8_ALIGNED2(this, (lineStartPos))
-
-  int pos = lineStartPos;
-  
-  for (int charCount = 0; charCount < nChars && pos < mLength; charCount++) {
-    unsigned int c = char_at(pos);
-    if (c == '\n')
-      return pos;
-    pos = next_char(pos);
-  }
-  return pos;
-}
-
-
-/*
- Count the number of newline characters between start and end.
- startPos and endPos must be at a character boundary.
- This function is optimized for speed by not using UTF-8 calls.
- */
-int Fl_Text_Buffer::count_lines(int startPos, int endPos) const {
-  IS_UTF8_ALIGNED2(this, (startPos))
-  IS_UTF8_ALIGNED2(this, (endPos))
-  
-  int gapLen = mGapEnd - mGapStart;
-  int lineCount = 0;
-  
-  int pos = startPos;
-  while (pos < mGapStart)
-  {
-    if (pos == endPos)
-      return lineCount;
-    if (mBuf[pos++] == '\n')
-      lineCount++;
-  } 
-  while (pos < mLength) {
-    if (pos == endPos)
-      return lineCount;
-    if (mBuf[pos++ + gapLen] == '\n')
-      lineCount++;
-  }
-  return lineCount;
-}
-
-
-/*
- Skip to the first character, n lines ahead.
- StartPos must be at a character boundary.
- This function is optimized for speed by not using UTF-8 calls.
- */
-int Fl_Text_Buffer::skip_lines(int startPos, int nLines)
-{
-  IS_UTF8_ALIGNED2(this, (startPos))
-  
-  if (nLines == 0)
-    return startPos;
-  
-  int gapLen = mGapEnd - mGapStart;
-  int pos = startPos;
-  int lineCount = 0;
-  while (pos < mGapStart) {
-    if (mBuf[pos++] == '\n') {
-      lineCount++;
-      if (lineCount == nLines) {
-        IS_UTF8_ALIGNED2(this, (pos))
-	return pos;
-      }
-    }
-  }
-  while (pos < mLength) {
-    if (mBuf[pos++ + gapLen] == '\n') {
-      lineCount++;
-      if (lineCount >= nLines) {
-        IS_UTF8_ALIGNED2(this, (pos))
-	return pos;
-      }
-    }
-  }
-  IS_UTF8_ALIGNED2(this, (pos))
-  return pos;
-}
-
-
-/*
- Skip to the first character, n lines back.
- StartPos must be at a character boundary.
- This function is optimized for speed by not using UTF-8 calls.
- */
-int Fl_Text_Buffer::rewind_lines(int startPos, int nLines)
-{
-  IS_UTF8_ALIGNED2(this, (startPos))
-  
-  int pos = startPos - 1;
-  if (pos <= 0)
-    return 0;
-  
-  int gapLen = mGapEnd - mGapStart;
-  int lineCount = -1;
-  while (pos >= mGapStart) {
-    if (mBuf[pos + gapLen] == '\n') {
-      if (++lineCount >= nLines) {
-        IS_UTF8_ALIGNED2(this, (pos+1))
-	return pos + 1;
-      }
-    }
-    pos--;
-  }
-  while (pos >= 0) {
-    if (mBuf[pos] == '\n') {
-      if (++lineCount >= nLines) {
-        IS_UTF8_ALIGNED2(this, (pos+1))
-	return pos + 1;
-      }
-    }
-    pos--;
-  }
-  return 0;
-}
-
-
-/*
- Find a matching string in the buffer.
- */
-int Fl_Text_Buffer::search_forward(int startPos, const char *searchString,
-				   int *foundPos, int matchCase) const 
-{
-  IS_UTF8_ALIGNED2(this, (startPos))
-  IS_UTF8_ALIGNED(searchString)
-  
-  if (!searchString)
-    return 0;
-  int bp;
-  const char *sp;
-  if (matchCase) {
-    while (startPos < length()) {
-      bp = startPos;
-      sp = searchString;
-      for (;;) {
-        char c = *sp;
-        // we reached the end of the "needle", so we found the string!
-        if (!c) {
-          *foundPos = startPos;
-          return 1;
-        }
-        int l = fl_utf8len1(c);
-        if (memcmp(sp, address(bp), l))
-          break;
-        sp += l; bp += l;
-      }
-      startPos = next_char(startPos);
-    }
-  } else {
-    while (startPos < length()) {
-      bp = startPos;
-      sp = searchString;
-      for (;;) {
-        // we reached the end of the "needle", so we found the string!
-        if (!*sp) {
-          *foundPos = startPos;
-          return 1;
-        }
-        int l;
-        unsigned int b = char_at(bp);
-        unsigned int s = fl_utf8decode(sp, 0, &l);
-        if (fl_tolower(b)!=fl_tolower(s))
-          break;
-        sp += l; 
-        bp = next_char(bp);
-      }
-      startPos = next_char(startPos);
-    }
-  }  
-  return 0;
-}
-
-int Fl_Text_Buffer::search_backward(int startPos, const char *searchString,
-				    int *foundPos, int matchCase) const 
-{
-  IS_UTF8_ALIGNED2(this, (startPos))
-  IS_UTF8_ALIGNED(searchString)
-  
-  if (!searchString)
-    return 0;
-  int bp;
-  const char *sp;
-  if (matchCase) {
-    while (startPos >= 0) {
-      bp = startPos;
-      sp = searchString;
-      for (;;) {
-        char c = *sp;
-        // we reached the end of the "needle", so we found the string!
-        if (!c) {
-          *foundPos = startPos;
-          return 1;
-        }
-        int l = fl_utf8len1(c);
-        if (memcmp(sp, address(bp), l))
-          break;
-        sp += l; bp += l;
-      }
-      startPos = prev_char(startPos);
-    }
-  } else {
-    while (startPos >= 0) {
-      bp = startPos;
-      sp = searchString;
-      for (;;) {
-        // we reached the end of the "needle", so we found the string!
-        if (!*sp) {
-          *foundPos = startPos;
-          return 1;
-        }
-        int l;
-        unsigned int b = char_at(bp);
-        unsigned int s = fl_utf8decode(sp, 0, &l);
-        if (fl_tolower(b)!=fl_tolower(s))
-          break;
-        sp += l; 
-        bp = next_char(bp);
-      }
-      startPos = prev_char(startPos);
-    }
-  }  
-  return 0;
-}
-
-
-
-/*
- Insert a string into the buffer.
- Pos must be at a character boundary. Text must be a correct UTF-8 string.
- */
-int Fl_Text_Buffer::insert_(int pos, const char *text)
-{
-  if (!text || !*text)
-    return 0;
-  
-  int insertedLength = strlen(text);
-  
-  /* Prepare the buffer to receive the new text.  If the new text fits in
-   the current buffer, just move the gap (if necessary) to where
-   the text should be inserted.  If the new text is too large, reallocate
-   the buffer with a gap large enough to accomodate the new text and a
-   gap of mPreferredGapSize */
-  if (insertedLength > mGapEnd - mGapStart)
-    reallocate_with_gap(pos, insertedLength + mPreferredGapSize);
-  else if (pos != mGapStart)
-    move_gap(pos);
-  
-  /* Insert the new text (pos now corresponds to the start of the gap) */
-  memcpy(&mBuf[pos], text, insertedLength);
-  mGapStart += insertedLength;
-  mLength += insertedLength;
-  update_selections(pos, 0, insertedLength);
-  
-  if (mCanUndo) {
-    if (undowidget == this && undoat == pos && undoinsert) {
-      undoinsert += insertedLength;
-    } else {
-      undoinsert = insertedLength;
-      undoyankcut = (undoat == pos) ? undocut : 0;
-    }
-    undoat = pos + insertedLength;
-    undocut = 0;
-    undowidget = this;
-  }
-  
-  return insertedLength;
-}
-
-
-/*
- Remove a string from the buffer.
- Unicode safe. Start and end must be at a character boundary.
- */
-void Fl_Text_Buffer::remove_(int start, int end)
-{
-  /* if the gap is not contiguous to the area to remove, move it there */
-  
-  if (mCanUndo) {
-    if (undowidget == this && undoat == end && undocut) {
-      undobuffersize(undocut + end - start + 1);
-      memmove(undobuffer + end - start, undobuffer, undocut);
-      undocut += end - start;
-    } else {
-      undocut = end - start;
-      undobuffersize(undocut);
-    }
-    undoat = start;
-    undoinsert = 0;
-    undoyankcut = 0;
-    undowidget = this;
-  }
-  
-  if (start > mGapStart) {
-    if (mCanUndo)
-      memcpy(undobuffer, mBuf + (mGapEnd - mGapStart) + start,
-	     end - start);
-    move_gap(start);
-  } else if (end < mGapStart) {
-    if (mCanUndo)
-      memcpy(undobuffer, mBuf + start, end - start);
-    move_gap(end);
-  } else {
-    int prelen = mGapStart - start;
-    if (mCanUndo) {
-      memcpy(undobuffer, mBuf + start, prelen);
-      memcpy(undobuffer + prelen, mBuf + mGapEnd, end - start - prelen);
-    }
-  }
-  
-  /* expand the gap to encompass the deleted characters */
-  mGapEnd += end - mGapStart;
-  mGapStart -= mGapStart - start;
-  
-  /* update the length */
-  mLength -= end - start;
-  
-  /* fix up any selections which might be affected by the change */
-  update_selections(start, end - start, 0);
-}
-
-  
-/*
- simple setter.
- Unicode safe. Start and end must be at a character boundary.
- */
-void Fl_Text_Selection::set(int startpos, int endpos)
-{
-  mSelected = startpos != endpos;
-  mStart = min(startpos, endpos);
-  mEnd = max(startpos, endpos);
-}
-
-
-/*
- simple getter.
- Unicode safe. Start and end will be at a character boundary.
- */
-int Fl_Text_Selection::position(int *startpos, int *endpos) const {
-  if (!mSelected)
-    return 0;
-  *startpos = mStart;
-  *endpos = mEnd;
-  
-  return 1;
-} 
-
-
-/*
- Return if a position is inside the selected area.
- Unicode safe. Pos must be at a character boundary.
- */
-int Fl_Text_Selection::includes(int pos) const {
-  return (selected() && pos >= start() && pos < end() );
-}
-
-
-/*
- Return a duplicate of the selected text, or an empty string.
- Unicode safe.
- */
-char *Fl_Text_Buffer::selection_text_(Fl_Text_Selection * sel) const {
-  int start, end;
-  
-  /* If there's no selection, return an allocated empty string */
-  if (!sel->position(&start, &end))
-  {
-    char *s = (char *) malloc(1);
-    *s = '\0';
-    return s;
-  }
-  
-  /* Return the selected range */
-    return text_range(start, end);
-}
-
-
-/*
- Remove the selected text.
- Unicode safe.
- */
-void Fl_Text_Buffer::remove_selection_(Fl_Text_Selection * sel)
-{
-  int start, end;
-  
-  if (!sel->position(&start, &end))
-    return;
-  remove(start, end);
-  //undoyankcut = undocut;
-}
-
-
-/*
- Replace selection with text.
- Unicode safe.
- */
-void Fl_Text_Buffer::replace_selection_(Fl_Text_Selection * sel,
-					const char *text)
-{
-  Fl_Text_Selection oldSelection = *sel;
-  
-  /* If there's no selection, return */
-  int start, end;
-  if (!sel->position(&start, &end))
-    return;
-  
-  /* Do the appropriate type of replace */
-    replace(start, end, text);
-  
-  /* Unselect (happens automatically in BufReplace, but BufReplaceRect
-   can't detect when the contents of a selection goes away) */
-  sel->mSelected = 0;
-  redisplay_selection(&oldSelection, sel);
-}
-
-  
-/*
- Call all callbacks.
- Unicode safe.
- */
-void Fl_Text_Buffer::call_modify_callbacks(int pos, int nDeleted,
-					   int nInserted, int nRestyled,
-					   const char *deletedText) const {
-  IS_UTF8_ALIGNED2(this, pos)
-  for (int i = 0; i < mNModifyProcs; i++)
-    (*mModifyProcs[i]) (pos, nInserted, nDeleted, nRestyled,
-			deletedText, mCbArgs[i]);
-} 
-
-
-/*
- Call all callbacks.
- Unicode safe.
- */
-void Fl_Text_Buffer::call_predelete_callbacks(int pos, int nDeleted) const {
-  for (int i = 0; i < mNPredeleteProcs; i++)
-    (*mPredeleteProcs[i]) (pos, nDeleted, mPredeleteCbArgs[i]);
-} 
-
-
-/*
- Redisplay a new selected area.
- Unicode safe.
- */
-void Fl_Text_Buffer::redisplay_selection(Fl_Text_Selection *
-					   oldSelection,
-					   Fl_Text_Selection *
-					   newSelection) const
-{
-  int oldStart, oldEnd, newStart, newEnd, ch1Start, ch1End, ch2Start,
-  ch2End;
-  
-  /* If either selection is rectangular, add an additional character to
-   the end of the selection to request the redraw routines to wipe out
-   the parts of the selection beyond the end of the line */
-  oldStart = oldSelection->mStart;
-  newStart = newSelection->mStart;
-  oldEnd = oldSelection->mEnd;
-  newEnd = newSelection->mEnd;
-  
-  /* If the old or new selection is unselected, just redisplay the
-   single area that is (was) selected and return */
-  if (!oldSelection->mSelected && !newSelection->mSelected)
-    return;
-  if (!oldSelection->mSelected)
-  {
-    call_modify_callbacks(newStart, 0, 0, newEnd - newStart, NULL);
-    return;
-  }
-  if (!newSelection->mSelected) {
-    call_modify_callbacks(oldStart, 0, 0, oldEnd - oldStart, NULL);
-    return;
-  }
-  
-  /* If the selections are non-contiguous, do two separate updates
-   and return */
-  if (oldEnd < newStart || newEnd < oldStart) {
-    call_modify_callbacks(oldStart, 0, 0, oldEnd - oldStart, NULL);
-    call_modify_callbacks(newStart, 0, 0, newEnd - newStart, NULL);
-    return;
-  }
-  
-  /* Otherwise, separate into 3 separate regions: ch1, and ch2 (the two
-   changed areas), and the unchanged area of their intersection,
-   and update only the changed area(s) */
-  ch1Start = min(oldStart, newStart);
-  ch2End = max(oldEnd, newEnd);
-  ch1End = max(oldStart, newStart);
-  ch2Start = min(oldEnd, newEnd);
-  if (ch1Start != ch1End)
-    call_modify_callbacks(ch1Start, 0, 0, ch1End - ch1Start, NULL);
-  if (ch2Start != ch2End)
-    call_modify_callbacks(ch2Start, 0, 0, ch2End - ch2Start, NULL);
-}
-
-
-/*
- Move the gap around without changing buffer content.
- Unicode safe. Pos must be at a character boundary.
- */
-void Fl_Text_Buffer::move_gap(int pos)
-{
-  int gapLen = mGapEnd - mGapStart;
-  
-  if (pos > mGapStart)
-    memmove(&mBuf[mGapStart], &mBuf[mGapEnd], pos - mGapStart);
-  else
-    memmove(&mBuf[pos + gapLen], &mBuf[pos], mGapStart - pos);
-  mGapEnd += pos - mGapStart;
-  mGapStart += pos - mGapStart;
-}
-
-
-/*
- Create a larger gap.
- Unicode safe. Start must be at a character boundary.
- */
-void Fl_Text_Buffer::reallocate_with_gap(int newGapStart, int newGapLen)
-{
-  char *newBuf = (char *) malloc(mLength + newGapLen);
-  int newGapEnd = newGapStart + newGapLen;
-  
-  if (newGapStart <= mGapStart) {
-    memcpy(newBuf, mBuf, newGapStart);
-    memcpy(&newBuf[newGapEnd], &mBuf[newGapStart],
-	   mGapStart - newGapStart);
-    memcpy(&newBuf[newGapEnd + mGapStart - newGapStart],
-	   &mBuf[mGapEnd], mLength - mGapStart);
-  } else {			/* newGapStart > mGapStart */
-    memcpy(newBuf, mBuf, mGapStart);
-    memcpy(&newBuf[mGapStart], &mBuf[mGapEnd], newGapStart - mGapStart);
-    memcpy(&newBuf[newGapEnd],
-	   &mBuf[mGapEnd + newGapStart - mGapStart],
-	   mLength - newGapStart);
-  }
-  free((void *) mBuf);
-  mBuf = newBuf;
-  mGapStart = newGapStart;
-  mGapEnd = newGapEnd;
-  }
-
-
-/*
- Update selection range if characters were inserted.
- Unicode safe. Pos must be at a character boundary.
- */
-void Fl_Text_Buffer::update_selections(int pos, int nDeleted,
-				       int nInserted)
-{
-  mPrimary.update(pos, nDeleted, nInserted);
-  mSecondary.update(pos, nDeleted, nInserted);
-  mHighlight.update(pos, nDeleted, nInserted);
-}
-
-
-// unicode safe, assuming the arguments are on character boundaries
-void Fl_Text_Selection::update(int pos, int nDeleted, int nInserted)
-{
-  if (!mSelected || pos > mEnd)
-    return;
-  if (pos + nDeleted <= mStart) {
-    mStart += nInserted - nDeleted;
-    mEnd += nInserted - nDeleted;
-  } else if (pos <= mStart && pos + nDeleted >= mEnd) {
-    mStart = pos;
-    mEnd = pos;
-    mSelected = 0;
-  } else if (pos <= mStart && pos + nDeleted < mEnd) {
-    mStart = pos;
-    mEnd = nInserted + mEnd - nDeleted;
-  } else if (pos < mEnd) {
-    mEnd += nInserted - nDeleted;
-    if (mEnd <= mStart)
-      mSelected = 0;
-  }
-}
-
-
-/*
- Find a UCS-4 character.
- StartPos must be at a character boundary, searchChar is UCS-4 encoded.
- */
-int Fl_Text_Buffer::findchar_forward(int startPos, unsigned searchChar,
-				     int *foundPos) const 
-{
-  if (startPos >= mLength) {
-    *foundPos = mLength;
-    return 0;
-  }
-  
-  if (startPos<0)
-    startPos = 0;
-  
-  for ( ; startPos<mLength; startPos = next_char(startPos)) {
-    if (searchChar == char_at(startPos)) {
-      *foundPos = startPos;
-      return 1;
-    }
-  }
-  
-  *foundPos = mLength;
-  return 0;
-}
-
-  
-/*
- Find a UCS-4 character.
- StartPos must be at a character boundary, searchChar is UCS-4 encoded.
- */
-int Fl_Text_Buffer::findchar_backward(int startPos, unsigned int searchChar,
-				      int *foundPos) const {
-  if (startPos <= 0) {
-    *foundPos = 0;
-    return 0;
-  }
-  
-  if (startPos > mLength)
-    startPos = mLength;
-  
-  for (startPos = prev_char(startPos); startPos>=0; startPos = prev_char(startPos)) {
-    if (searchChar == char_at(startPos)) {
-      *foundPos = startPos;
-      return 1;
-    }
-  }
-  
-  *foundPos = 0;
-  return 0;
-}
-
-//#define EXAMPLE_ENCODING // shows how to process any encoding for which a decoding function exists
-#ifdef EXAMPLE_ENCODING 
-
-// returns the UCS equivalent of *p in CP1252 and advances p by 1
-unsigned cp1252toucs(char* &p)
-{
-  // Codes 0x80..0x9f from the Microsoft CP1252 character set, translated
-  // to Unicode
-  static unsigned cp1252[32] = {
-    0x20ac, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-    0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x017d, 0x008f,
-    0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-    0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x017e, 0x0178
-  };
-  unsigned char uc = *(unsigned char*)p;
-  p++;
-  return (uc < 0x80 || uc >= 0xa0 ? uc : cp1252[uc - 0x80]);
-}
-
-// returns the UCS equivalent of *p in UTF-16 and advances p by 2 (or more for surrogates)
-unsigned utf16toucs(char* &p)
-{
-  union {
-#if WORDS_BIGENDIAN
-    struct { unsigned char a, b;} chars;
-#else
-    struct { unsigned char b, a;} chars;
-#endif
-    U16 short_val;
-  } u;
-  u.chars.a = *(unsigned char*)p++;
-  u.chars.b = *(unsigned char*)p++;
-  return u.short_val;
-}
-
-// filter that produces, from an input stream fed by reading from fp,
-// a UTF-8-encoded output stream written in buffer.
-// Input can be any (e.g., 8-bit, UTF-16) encoding.
-// Output is true UTF-8.
-// p_trf points to a function that transforms encoded byte(s) into one UCS
-// and that increases the pointer by the adequate quantity
-static int general_input_filter(char *buffer, int buflen, 
-				 char *line, int sline, char* &endline, 
-				 unsigned (*p_trf)(char* &),
-				 FILE *fp)
-{
-  char *p, *q, multibyte[5];
-  int lq, r, offset;
-  p = endline = line;
-  q = buffer;
-  while (q < buffer + buflen) {
-    if (p >= endline) {
-      r = fread(line, 1, sline, fp);
-      endline = line + r; 
-      if (r == 0) return q - buffer;
-      p = line;
-    }
-    if (q + 4 /*max width of utf-8 char*/ > buffer + buflen) {
-      memmove(line, p, endline - p);
-      endline -= (p - line);
-      return q - buffer;
-    }
-    lq = fl_utf8encode( p_trf(p), multibyte );
-    memcpy(q, multibyte, lq);
-    q += lq; 
-  }
-  memmove(line, p, endline - p);
-  endline -= (p - line);
-  return q - buffer;
-}
-#endif // EXAMPLE_ENCODING
-
-/*
- filter that produces, from an input stream fed by reading from fp,
- a UTF-8-encoded output stream written in buffer.
- Input can be UTF-8. If it is not, it is decoded with CP1252.
- Output is UTF-8.
- *input_was_changed is set to true if the input was not strict UTF-8 so output
- differs from input.
- */
-static int utf8_input_filter(char *buffer, int buflen, char *line, int sline, char* &endline, 
-	      FILE *fp, int *input_was_changed)
-{
-  char *p, *q, multibyte[5];
-  int l, lp, lq, r;
-  unsigned u;
-  p = endline = line;
-  q = buffer;
-  while (q < buffer + buflen) {
-    if (p >= endline) {
-      r = fread(line, 1, sline, fp);
-      endline = line + r; 
-      if (r == 0) return q - buffer;
-      p = line;
-    }
-    l = fl_utf8len1(*p);
-    if (p + l > endline) {
-      memmove(line, p, endline - p);
-      endline -= (p - line);
-      r = fread(endline, 1, sline - (endline - line), fp);
-      endline += r;
-      p = line;
-      if (endline - line < l) break;
-    }
-    while ( l > 0) {
-      u = fl_utf8decode(p, p+l, &lp);
-      lq = fl_utf8encode(u, multibyte);
-      if (lp != l || lq != l) *input_was_changed = true;
-      if (q + lq > buffer + buflen) {
-	memmove(line, p, endline - p);
-	endline -= (p - line);
-	return q - buffer;
-      }
-      memcpy(q, multibyte, lq);
-      q += lq; 
-      p += lp;
-      l -= lp;
-    }
-  }
-  memmove(line, p, endline - p);
-  endline -= (p - line);
-  return q - buffer;
-}
-
-const char *Fl_Text_Buffer::file_encoding_warning_message = 
-"Displayed text contains the UTF-8 transcoding\n"
-"of the input file which was not UTF-8 encoded.\n"
-"Some changes may have occurred.";
-
-/*
- Insert text from a file.
- Input file can be of various encodings according to what input fiter is used.
- utf8_input_filter accepts UTF-8 or CP1252 as input encoding.
- Output is always UTF-8.
- */
- int Fl_Text_Buffer::insertfile(const char *file, int pos, int buflen)
-{
-  FILE *fp;
-  if (!(fp = fl_fopen(file, "r")))
-    return 1;
-  char *buffer = new char[buflen + 1];  
-  char *endline, line[100];
-  int l;
-  input_file_was_transcoded = false;
-  endline = line;
-  while (true) {
-#ifdef EXAMPLE_ENCODING
-    // example of 16-bit encoding: UTF-16
-    l = general_input_filter(buffer, buflen, 
-				  line, sizeof(line), endline, 
-				  utf16toucs, // use cp1252toucs to read CP1252-encoded files
-				  fp);
-    input_file_was_transcoded = true;
-#else
-    l = utf8_input_filter(buffer, buflen, line, sizeof(line), endline, 
-			  fp, &input_file_was_transcoded);
-#endif
-    if (l == 0) break;
-    buffer[l] = 0;
-    insert(pos, buffer);
-    pos += l;
-    }
-  int e = ferror(fp) ? 2 : 0;
-  fclose(fp);
-  delete[]buffer;
-  if ( (!e) && input_file_was_transcoded && transcoding_warning_action) {
-    transcoding_warning_action(this);
-    }
-  return e;
-}
-
-
-/*
- Write text to file.
- Unicode safe.
- */
-int Fl_Text_Buffer::outputfile(const char *file,
-			       int start, int end,
-			       int buflen) {
-  FILE *fp;
-  if (!(fp = fl_fopen(file, "w")))
-    return 1;
-  for (int n; (n = min(end - start, buflen)); start += n) {
-    const char *p = text_range(start, start + n);
-    int r = fwrite(p, 1, n, fp);
-    free((void *) p);
-    if (r != n)
-      break;
-  }
-  
-  int e = ferror(fp) ? 2 : 0;
-  fclose(fp);
-  return e;
-}
-
-
-/*
- Return the previous character position.
- Unicode safe.
- */
-int Fl_Text_Buffer::prev_char_clipped(int pos) const
-{
-  if (pos<=0)
-    return 0;
-
-  IS_UTF8_ALIGNED2(this, (pos))  
-
-  char c;
-  do {
-    pos--;
-    if (pos==0)
-      return 0;
-    c = byte_at(pos);
-  } while ( (c&0xc0) == 0x80);
-  
-  IS_UTF8_ALIGNED2(this, (pos))  
-  return pos;
-}
-
-
-/*
- Return the previous character position.
- Returns -1 if the beginning of the buffer is reached.
- */
-int Fl_Text_Buffer::prev_char(int pos) const
-{
-  if (pos==0) return -1;
-  return prev_char_clipped(pos);
-}
-
-
-/*
- Return the next character position.
- Returns length() if the end of the buffer is reached.
- */
-int Fl_Text_Buffer::next_char(int pos) const
-{
-  IS_UTF8_ALIGNED2(this, (pos))  
-  int n = fl_utf8len1(byte_at(pos));
-  pos += n;
-  if (pos>=mLength)
-    return mLength;
-  IS_UTF8_ALIGNED2(this, (pos))  
-  return pos;
-}
-
-
-/*
- Return the next character position.
- If the end of the buffer is reached, it returns the current position.
- */
-int Fl_Text_Buffer::next_char_clipped(int pos) const
-{
-  return next_char(pos);
-}
-
-/*
- Align an index to the current UTF-8 boundary.
- */
-int Fl_Text_Buffer::utf8_align(int pos) const 
-{
-  char c = byte_at(pos);
-  while ( (c&0xc0) == 0x80) {
-    pos--;
-    c = byte_at(pos);
-  }
-  return pos;
-}
-
-//
-// End of "$Id: Fl_Text_Buffer.cxx 8040 2010-12-15 17:38:39Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Text_Display.cxx b/common/fltk/src/Fl_Text_Display.cxx
deleted file mode 100644
index a795035..0000000
--- a/common/fltk/src/Fl_Text_Display.cxx
+++ /dev/null
@@ -1,3795 +0,0 @@
-//
-// "$Id: Fl_Text_Display.cxx 8808 2011-06-16 13:31:25Z manolo $"
-//
-// Copyright 2001-2010 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// TODO: rendering of the "optional hyphen"
-// TODO: make line numbering work again
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <limits.h>
-#include <ctype.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Text_Buffer.H>
-#include <FL/Fl_Text_Display.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Printer.H>
-
-#undef min
-#undef max
-
-// Text area margins.  Left & right margins should be at least 3 so that
-// there is some room for the overhanging parts of the cursor!
-#define TOP_MARGIN 1
-#define BOTTOM_MARGIN 1
-#define LEFT_MARGIN 3
-#define RIGHT_MARGIN 3
-
-#define NO_HINT -1
-
-/* Masks for text drawing methods.  These are or'd together to form an
- integer which describes what drawing calls to use to draw a string */
-#define FILL_MASK         0x0100
-#define SECONDARY_MASK    0x0200
-#define PRIMARY_MASK      0x0400
-#define HIGHLIGHT_MASK    0x0800
-#define BG_ONLY_MASK      0x1000
-#define TEXT_ONLY_MASK    0x2000
-#define STYLE_LOOKUP_MASK   0xff
-
-/* Maximum displayable line length (how many characters will fit across the
- widest window).  This amount of memory is temporarily allocated from the
- stack in the draw_vline() method for drawing strings */
-#define MAX_DISP_LINE_LEN 1000
-
-static int max( int i1, int i2 );
-static int min( int i1, int i2 );
-static int countlines( const char *string );
-
-/* The variables below are used in a timer event to allow smooth
- scrolling of the text area when the pointer has left the area. */
-static int scroll_direction = 0;
-static int scroll_amount = 0;
-static int scroll_y = 0;
-static int scroll_x = 0;
-
-// CET - FIXME
-#define TMPFONTWIDTH 6
-
-
-
-/**  
- \brief Creates a new text display widget.
- 
- \param X, Y, W, H position and size of widget
- \param l label text, defaults to none
- */
-Fl_Text_Display::Fl_Text_Display(int X, int Y, int W, int H, const char* l)
-: Fl_Group(X, Y, W, H, l) {
-  int i;
-  
-  mMaxsize = 0;
-  damage_range1_start = damage_range1_end = -1;
-  damage_range2_start = damage_range2_end = -1;
-  dragPos = dragging = 0;
-  dragType = DRAG_CHAR;
-  display_insert_position_hint = 0;
-  shortcut_ = 0;
-  
-  color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
-  box(FL_DOWN_FRAME);
-  textsize(FL_NORMAL_SIZE);
-  textcolor(FL_FOREGROUND_COLOR);
-  textfont(FL_HELVETICA);
-  set_flag(SHORTCUT_LABEL);
-  
-  text_area.x = 0;
-  text_area.y = 0;
-  text_area.w = 0;
-  text_area.h = 0;
-  
-  mVScrollBar = new Fl_Scrollbar(0,0,1,1);
-  mVScrollBar->callback((Fl_Callback*)v_scrollbar_cb, this);
-  mHScrollBar = new Fl_Scrollbar(0,0,1,1);
-  mHScrollBar->callback((Fl_Callback*)h_scrollbar_cb, this);
-  mHScrollBar->type(FL_HORIZONTAL);
-  
-  end();
-  
-  scrollbar_width(Fl::scrollbar_size());
-  scrollbar_align(FL_ALIGN_BOTTOM_RIGHT);
-  
-  mCursorOn = 0;
-  mCursorPos = 0;
-  mCursorOldY = -100;
-  mCursorToHint = NO_HINT;
-  mCursorStyle = NORMAL_CURSOR;
-  mCursorPreferredXPos = -1;
-  mBuffer = 0;
-  mFirstChar = 0;
-  mLastChar = 0;
-  mNBufferLines = 0;
-  mTopLineNum = mTopLineNumHint = 1;
-  mAbsTopLineNum = 1;
-  mNeedAbsTopLineNum = 0;
-  mHorizOffset = mHorizOffsetHint = 0;
-  
-  mCursor_color = FL_FOREGROUND_COLOR;
-  
-  mStyleBuffer = 0;
-  mStyleTable = 0;
-  mNStyles = 0;
-  mNVisibleLines = 1;
-  mLineStarts = new int[mNVisibleLines];
-  mLineStarts[0] = 0;
-  for (i=1; i<mNVisibleLines; i++)
-    mLineStarts[i] = -1;
-  mSuppressResync = 0;
-  mNLinesDeleted = 0;
-  mModifyingTabDistance = 0;
-  
-  mUnfinishedStyle = 0;
-  mUnfinishedHighlightCB = 0;
-  mHighlightCBArg = 0;
-  
-  mLineNumLeft = mLineNumWidth = 0;
-  mContinuousWrap = 0;
-  mWrapMarginPix = 0;
-  mSuppressResync = mNLinesDeleted = mModifyingTabDistance = 0;
-}
-
-
-
-/**
- Free a text display and release its associated memory.
- 
- Note, the text BUFFER that the text display displays is a separate
- entity and is not freed, nor are the style buffer or style table.
- */
-Fl_Text_Display::~Fl_Text_Display() {
-  if (scroll_direction) {
-    Fl::remove_timeout(scroll_timer_cb, this);
-    scroll_direction = 0;
-  }
-  if (mBuffer) {
-    mBuffer->remove_modify_callback(buffer_modified_cb, this);
-    mBuffer->remove_predelete_callback(buffer_predelete_cb, this);
-  }
-  if (mLineStarts) delete[] mLineStarts;
-}
-
-
-
-/**  
- Attach a text buffer to display, replacing the current buffer (if any)
- \param buf attach this text buffer
- */
-void Fl_Text_Display::buffer( Fl_Text_Buffer *buf ) {
-  /* If the text display is already displaying a buffer, clear it off
-   of the display and remove our callback from it */
-  if ( buf == mBuffer) return;
-  if ( mBuffer != 0 ) {
-    // we must provide a copy of the buffer that we are deleting!
-    char *deletedText = mBuffer->text();
-    buffer_modified_cb( 0, 0, mBuffer->length(), 0, deletedText, this );
-    free(deletedText);
-    mNBufferLines = 0;
-    mBuffer->remove_modify_callback( buffer_modified_cb, this );
-    mBuffer->remove_predelete_callback( buffer_predelete_cb, this );
-  }
-  
-  /* Add the buffer to the display, and attach a callback to the buffer for
-   receiving modification information when the buffer contents change */
-  mBuffer = buf;
-  if (mBuffer) {
-    mBuffer->add_modify_callback( buffer_modified_cb, this );
-    mBuffer->add_predelete_callback( buffer_predelete_cb, this );
-    
-    /* Update the display */
-    buffer_modified_cb( 0, buf->length(), 0, 0, 0, this );
-  }
-  
-  /* Resize the widget to update the screen... */
-  resize(x(), y(), w(), h());
-}
-
-
-
-/**   
- \brief Attach (or remove) highlight information in text display and redisplay.
- 
- Highlighting information consists of a style buffer which parallels the
- normal text buffer, but codes font and color information for the display;
- a style table which translates style buffer codes (indexed by buffer
- character - 'A') into fonts and colors; and a callback mechanism for
- as-needed highlighting, triggered by a style buffer entry of
- "unfinishedStyle".  Style buffer can trigger additional redisplay during
- a normal buffer modification if the buffer contains a primary Fl_Text_Selection
- (see extendRangeForStyleMods for more information on this protocol).
- 
- Style buffers, tables and their associated memory are managed by the caller.
- 
- Styles are ranged from 65 ('A') to 126.
- 
- \param styleBuffer this buffer works in parallel to the text buffer. For every
-   character in the text buffer, the stye buffer has a byte at the same offset 
-   that contains an index into an array of possible styles. 
- \param styleTable a list of styles indexed by the style buffer
- \param nStyles number of styles in the style table
- \param unfinishedStyle if this style is found, the callback below is called
- \param unfinishedHighlightCB if a character with an unfinished style is found,
-   this callback will be called
- \param cbArg and optional argument for the callback above, usually a pointer
-   to the Text Display.
- */
-void Fl_Text_Display::highlight_data(Fl_Text_Buffer *styleBuffer,
-                                     const Style_Table_Entry *styleTable,
-                                     int nStyles, char unfinishedStyle,
-                                     Unfinished_Style_Cb unfinishedHighlightCB,
-                                     void *cbArg ) {
-  mStyleBuffer = styleBuffer;
-  mStyleTable = styleTable;
-  mNStyles = nStyles;
-  mUnfinishedStyle = unfinishedStyle;
-  mUnfinishedHighlightCB = unfinishedHighlightCB;
-  mHighlightCBArg = cbArg;
-  mColumnScale = 0;
-  
-  mStyleBuffer->canUndo(0);
-  damage(FL_DAMAGE_EXPOSE);
-}
-
-
-
-/**
- \brief Find the longest line of all visible lines.
- \return the width of the longest visible line in pixels
- */
-int Fl_Text_Display::longest_vline() const {
-  int longest = 0;
-  for (int i = 0; i < mNVisibleLines; i++)
-    longest = max(longest, measure_vline(i));
-  return longest;
-}
-
-
-
-/**
- \brief Change the size of the displayed text area.
- Calling this function will trigger a recalculation of all lines visible and
- of all scrollbar sizes.
- \param X, Y, W, H new position and size of this widget
- */
-void Fl_Text_Display::resize(int X, int Y, int W, int H) {
-#ifdef DEBUG
-  printf("Fl_Text_Display::resize(X=%d, Y=%d, W=%d, H=%d)\n", X, Y, W, H);
-#endif // DEBUG
-  const int oldWidth = w();
-#ifdef DEBUG
-  printf("    oldWidth=%d, mContinuousWrap=%d, mWrapMargin=%d\n", oldWidth, mContinuousWrap, mWrapMargin);
-#endif // DEBUG
-  Fl_Widget::resize(X,Y,W,H);
-  if (!buffer()) return;
-  X += Fl::box_dx(box());
-  Y += Fl::box_dy(box());
-  W -= Fl::box_dw(box());
-  H -= Fl::box_dh(box());
-  
-  text_area.x = X+LEFT_MARGIN;
-  text_area.y = Y+TOP_MARGIN;
-  text_area.w = W-LEFT_MARGIN-RIGHT_MARGIN;
-  text_area.h = H-TOP_MARGIN-BOTTOM_MARGIN;
-  int i;
-  
-  /* Find the new maximum font height for this text display */
-  for (i = 0, mMaxsize = fl_height(textfont(), textsize()); i < mNStyles; i++)
-    mMaxsize = max(mMaxsize, fl_height(mStyleTable[i].font, mStyleTable[i].size));
-  
-  // did we have scrollbars initially?
-  unsigned int hscrollbarvisible = mHScrollBar->visible();
-  unsigned int vscrollbarvisible = mVScrollBar->visible();
-  
-  // try without scrollbars first
-  mVScrollBar->clear_visible();
-  mHScrollBar->clear_visible();
-  
-  for (int again = 1; again;) {
-    again = 0;
-    /* In continuous wrap mode, a change in width affects the total number of
-     lines in the buffer, and can leave the top line number incorrect, and
-     the top character no longer pointing at a valid line start */
-    if (mContinuousWrap && !mWrapMarginPix && W!=oldWidth) {
-      int oldFirstChar = mFirstChar;
-      mNBufferLines = count_lines(0, buffer()->length(), true);
-      mFirstChar = line_start(mFirstChar);
-      mTopLineNum = count_lines(0, mFirstChar, true)+1;
-      absolute_top_line_number(oldFirstChar);      
-#ifdef DEBUG
-      printf("    mNBufferLines=%d\n", mNBufferLines);
-#endif // DEBUG
-    }
-    
-    /* reallocate and update the line starts array, which may have changed
-     size and / or contents.  */
-    int nvlines = (text_area.h + mMaxsize - 1) / mMaxsize;
-    if (nvlines < 1) nvlines = 1;
-    if (mNVisibleLines != nvlines) {
-      mNVisibleLines = nvlines;
-      if (mLineStarts) delete[] mLineStarts;
-      mLineStarts = new int [mNVisibleLines];
-    }
-    
-    calc_line_starts(0, mNVisibleLines);
-    calc_last_char();
-    
-    // figure the scrollbars
-    if (scrollbar_width()) {
-      /* Decide if the vertical scrollbar needs to be visible */
-      if (scrollbar_align() & (FL_ALIGN_LEFT|FL_ALIGN_RIGHT) &&
-          mNBufferLines >= mNVisibleLines - 1)
-      {
-        mVScrollBar->set_visible();
-        if (scrollbar_align() & FL_ALIGN_LEFT) {
-          text_area.x = X+scrollbar_width()+LEFT_MARGIN;
-          text_area.w = W-scrollbar_width()-LEFT_MARGIN-RIGHT_MARGIN;
-          mVScrollBar->resize(X, text_area.y-TOP_MARGIN, scrollbar_width(),
-                              text_area.h+TOP_MARGIN+BOTTOM_MARGIN);
-        } else {
-          text_area.x = X+LEFT_MARGIN;
-          text_area.w = W-scrollbar_width()-LEFT_MARGIN-RIGHT_MARGIN;
-          mVScrollBar->resize(X+W-scrollbar_width(), text_area.y-TOP_MARGIN,
-                              scrollbar_width(), text_area.h+TOP_MARGIN+BOTTOM_MARGIN);
-        }
-      }
-      
-      /*
-       Decide if the horizontal scrollbar needs to be visible.  If there
-       is a vertical scrollbar, a horizontal is always created too.  This
-       is because the alternatives are unattractive:
-       * Dynamically creating a horizontal scrollbar based on the currently
-       visible lines is what the original nedit does, but it always wastes
-       space for the scrollbar even when it's not used.  Since the FLTK
-       widget dynamically allocates the space for the scrollbar and
-       rearranges the widget to make room for it, this would create a very
-       visually displeasing "bounce" effect when the vertical scrollbar is
-       dragged.  Trust me, I tried it and it looks really bad.
-       * The other alternative would be to keep track of what the longest
-       line in the entire buffer is and base the scrollbar on that.  I
-       didn't do this because I didn't see any easy way to do that using
-       the nedit code and this could involve a lengthy calculation for
-       large buffers.  If an efficient and non-costly way of doing this
-       can be found, this might be a way to go.
-       */
-      /* WAS: Suggestion: Try turning the horizontal scrollbar on when
-       you first see a line that is too wide in the window, but then
-       don't turn it off (ie mix both of your solutions). */
-      if (scrollbar_align() & (FL_ALIGN_TOP|FL_ALIGN_BOTTOM) &&
-          (mVScrollBar->visible() || longest_vline() > text_area.w))
-      {
-        if (!mHScrollBar->visible()) {
-          mHScrollBar->set_visible();
-          again = 1; // loop again to see if we now need vert. & recalc sizes
-        }
-        if (scrollbar_align() & FL_ALIGN_TOP) {
-          text_area.y = Y + scrollbar_width()+TOP_MARGIN;
-          text_area.h = H - scrollbar_width()-TOP_MARGIN-BOTTOM_MARGIN;
-          mHScrollBar->resize(text_area.x-LEFT_MARGIN, Y,
-                              text_area.w+LEFT_MARGIN+RIGHT_MARGIN, scrollbar_width());
-        } else {
-          text_area.y = Y+TOP_MARGIN;
-          text_area.h = H - scrollbar_width()-TOP_MARGIN-BOTTOM_MARGIN;
-          mHScrollBar->resize(text_area.x-LEFT_MARGIN, Y+H-scrollbar_width(),
-                              text_area.w+LEFT_MARGIN+RIGHT_MARGIN, scrollbar_width());
-        }
-      }
-    }
-  }
-  
-  // user request to change viewport
-  if (mTopLineNumHint != mTopLineNum || mHorizOffsetHint != mHorizOffset)
-    scroll_(mTopLineNumHint, mHorizOffsetHint);
-  
-  // everything will fit in the viewport
-  if (mNBufferLines < mNVisibleLines || mBuffer == NULL || mBuffer->length() == 0) {
-    scroll_(1, mHorizOffset);
-  /* if empty lines become visible, there may be an opportunity to
-   display more text by scrolling down */
-  } else {
-    while (   mNVisibleLines>=2
-           && (mLineStarts[mNVisibleLines-2]==-1) 
-           && scroll_(mTopLineNum-1, mHorizOffset))
-    { }
-  }
-  
-  // user request to display insert position
-  if (display_insert_position_hint)
-    display_insert();
-  
-  // in case horizontal offset is now greater than longest line
-  int maxhoffset = max(0, longest_vline()-text_area.w);
-  if (mHorizOffset > maxhoffset)
-    scroll_(mTopLineNumHint, maxhoffset);
-  
-  mTopLineNumHint = mTopLineNum;
-  mHorizOffsetHint = mHorizOffset;
-  display_insert_position_hint = 0;
-  
-  if (mContinuousWrap ||
-      hscrollbarvisible != mHScrollBar->visible() ||
-      vscrollbarvisible != mVScrollBar->visible())
-    redraw();
-  
-  update_v_scrollbar();
-  update_h_scrollbar();
-}
-
-
-
-/**
- \brief Refresh a rectangle of the text display.  
- \param left, top are in coordinates of the text drawing window.
- \param width, height size in pixels 
- */
-void Fl_Text_Display::draw_text( int left, int top, int width, int height ) {
-  int fontHeight, firstLine, lastLine, line;
-  
-  /* find the line number range of the display */
-  fontHeight = mMaxsize ? mMaxsize : textsize_;
-  firstLine = ( top - text_area.y - fontHeight + 1 ) / fontHeight;
-  lastLine = ( top + height - text_area.y ) / fontHeight + 1;
-  
-  fl_push_clip( left, top, width, height );
-  
-  /* draw the lines */
-  for ( line = firstLine; line <= lastLine; line++ )
-    draw_vline( line, left, left + width, 0, INT_MAX );
-  
-  /* draw the line numbers if exposed area includes them */
-  if (mLineNumWidth != 0 && left <= mLineNumLeft + mLineNumWidth)
-    draw_line_numbers(false);
-  
-  fl_pop_clip();
-}
-
-
-
-/**  
- \brief Marks text from start to end as needing a redraw.
- This function will trigger a damage event and later a redraw of parts of 
- the widget.
- \param startpos index of first character needing redraw
- \param endpos index after last character needing redraw
- */
-void Fl_Text_Display::redisplay_range(int startpos, int endpos) {
-  IS_UTF8_ALIGNED2(buffer(), startpos)
-  IS_UTF8_ALIGNED2(buffer(), endpos)
-  
-  if (damage_range1_start == -1 && damage_range1_end == -1) {
-    damage_range1_start = startpos;
-    damage_range1_end = endpos;
-  } else if ((startpos >= damage_range1_start && startpos <= damage_range1_end) ||
-             (endpos >= damage_range1_start && endpos <= damage_range1_end)) {
-    damage_range1_start = min(damage_range1_start, startpos);
-    damage_range1_end = max(damage_range1_end, endpos);
-  } else if (damage_range2_start == -1 && damage_range2_end == -1) {
-    damage_range2_start = startpos;
-    damage_range2_end = endpos;
-  } else {
-    damage_range2_start = min(damage_range2_start, startpos);
-    damage_range2_end = max(damage_range2_end, endpos);
-  }
-  damage(FL_DAMAGE_SCROLL);
-}
-
-
-
-/**
- \brief Draw a range of text.
-
- Refresh all of the text between buffer positions \p startpos and
- \p endpos not including the character at the position \p endpos.
-
- If \p endpos points beyond the end of the buffer, refresh the whole display
- after \p startpos, including blank lines which are not technically part of
- any range of characters.
-
- \param startpos index of first character to draw
- \param endpos index after last character to draw
- */
-void Fl_Text_Display::draw_range(int startpos, int endpos) {
-  startpos = buffer()->utf8_align(startpos);
-  endpos = buffer()->utf8_align(endpos);
-  
-  int i, startLine, lastLine, startIndex, endIndex;
-  
-  /* If the range is outside of the displayed text, just return */
-  if ( endpos < mFirstChar || ( startpos > mLastChar && !empty_vlines() ) ) 
-    return;
-  
-  /* Clean up the starting and ending values */
-  if ( startpos < 0 ) startpos = 0;
-  if ( startpos > mBuffer->length() ) startpos = mBuffer->length();
-  if ( endpos < 0 ) endpos = 0;
-  if ( endpos > mBuffer->length() ) endpos = mBuffer->length();
-  
-  /* Get the starting and ending lines */
-  if ( startpos < mFirstChar )
-    startpos = mFirstChar;
-  if ( !position_to_line( startpos, &startLine ) )
-    startLine = mNVisibleLines - 1;
-  if ( endpos >= mLastChar ) {
-    lastLine = mNVisibleLines - 1;
-  } else {
-    if ( !position_to_line( endpos, &lastLine ) ) {
-      /* shouldn't happen */
-      lastLine = mNVisibleLines - 1;
-    }
-  }
-  
-  /* Get the starting and ending positions within the lines */
-  startIndex = mLineStarts[ startLine ] == -1 ? 0 : startpos - mLineStarts[ startLine ];
-  if ( endpos >= mLastChar )
-    endIndex = INT_MAX;
-  else if ( mLineStarts[ lastLine ] == -1 )
-    endIndex = 0;
-  else
-    endIndex = endpos - mLineStarts[ lastLine ];
-  
-  /* If the starting and ending lines are the same, redisplay the single
-   line between "start" and "end" */
-  if ( startLine == lastLine ) {
-    draw_vline( startLine, 0, INT_MAX, startIndex, endIndex );
-    return;
-  }
-
-  /* Redisplay the first line from "start" */
-  draw_vline( startLine, 0, INT_MAX, startIndex, INT_MAX );
-
-  /* Redisplay the lines in between at their full width */
-  for ( i = startLine + 1; i < lastLine; i++ )
-    draw_vline( i, 0, INT_MAX, 0, INT_MAX );
-
-  /* Redisplay the last line to "end" */
-  draw_vline( lastLine, 0, INT_MAX, 0, endIndex );
-}
-
-
-
-/** 
- \brief Sets the position of the text insertion cursor for text display.
- Move the insertion cursor in front of the character at \p newPos.
- This function may trigger a redraw.
- \param newPos new caret position
- */
-void Fl_Text_Display::insert_position( int newPos ) {
-  IS_UTF8_ALIGNED2(buffer(), newPos)
-  
-  /* make sure new position is ok, do nothing if it hasn't changed */
-  if ( newPos == mCursorPos ) return;
-  if ( newPos < 0 ) newPos = 0;
-  if ( newPos > mBuffer->length() ) newPos = mBuffer->length();
-  
-  /* cursor movement cancels vertical cursor motion column */
-  mCursorPreferredXPos = -1;
-  
-  /* erase the cursor at its previous position */
-  redisplay_range(buffer()->prev_char_clipped(mCursorPos), buffer()->next_char(mCursorPos));
-  
-  mCursorPos = newPos;
-  
-  /* draw cursor at its new position */
-  redisplay_range(buffer()->prev_char_clipped(mCursorPos), buffer()->next_char(mCursorPos));
-}
-
-
-
-/** 
- \brief Shows the text cursor.
- This function may trigger a redraw.
- \param b show(1) or hide(0) the text cursor (caret).
- */
-void Fl_Text_Display::show_cursor(int b) {
-  mCursorOn = b;
-  redisplay_range(buffer()->prev_char_clipped(mCursorPos), buffer()->next_char(mCursorPos));
-}
-
-
-
-/**
- \brief Sets the text cursor style.
- Sets the text cursor style to one of the following:
- 
- \li Fl_Text_Display::NORMAL_CURSOR - Shows an I beam.
- \li Fl_Text_Display::CARET_CURSOR - Shows a caret under the text.
- \li Fl_Text_Display::DIM_CURSOR - Shows a dimmed I beam.
- \li Fl_Text_Display::BLOCK_CURSOR - Shows an unfilled box around the current
-      character.
- \li Fl_Text_Display::HEAVY_CURSOR - Shows a thick I beam.
- 
- This call also switches the cursor on and may trigger a redraw.
- 
- \param style new cursor style
- */
-void Fl_Text_Display::cursor_style(int style) {
-  mCursorStyle = style;
-  if (mCursorOn) show_cursor();
-}
-
-
-
-/**
- \brief Set the new text wrap mode.
- 
- If \p wrap mode is not zero, this call enables automatic word wrapping at column
- \p wrapMargin. Word-wrapping does not change the text buffer itself, only the way
- the text is displayed. Different Text Displays can have different wrap modes,
- even if they share the same Text Buffer.
-
- \param wrap new wrap mode is WRAP_NONE (don't wrap text at all), WRAP_AT_COLUMN
-      (wrap text at the given text column), WRAP_AT_PIXEL (wrap text at a pixel 
-      position), or WRAP_AT_BOUNDS (wrap text so that it fits into the 
-      widget width)
- \param wrapMargin in WRAP_AT_COLUMN mode, text will wrap at the n'th character.
-      For variable width fonts, an average character width is calculated. The
-      column width is calculated using the current textfont or the first style
-      when this function is called. If the font size changes, this function
-      must be called again. In WRAP_AT_PIXEL mode, this is the pixel position.
- \todo we need new wrap modes to wrap at the window edge and based on pixel width
-   or average character width.
- */
-void Fl_Text_Display::wrap_mode(int wrap, int wrapMargin) {
-  switch (wrap) {
-    case WRAP_NONE: 
-      mWrapMarginPix = 0;
-      mContinuousWrap = 0;
-      break;
-    case WRAP_AT_COLUMN: 
-    default:
-      mWrapMarginPix = int(col_to_x(wrapMargin));
-      mContinuousWrap = 1;
-      break;
-    case WRAP_AT_PIXEL: 
-      mWrapMarginPix = wrapMargin;
-      mContinuousWrap = 1;
-      break;
-    case WRAP_AT_BOUNDS: 
-      mWrapMarginPix = 0;
-      mContinuousWrap = 1;
-      break;
-  }
-  
-  if (buffer()) {
-    /* wrapping can change the total number of lines, re-count */
-    mNBufferLines = count_lines(0, buffer()->length(), true);
-    
-    /* changing wrap margins or changing from wrapped mode to non-wrapped
-     can leave the character at the top no longer at a line start, and/or
-     change the line number */
-    mFirstChar = line_start(mFirstChar);
-    mTopLineNum = count_lines(0, mFirstChar, true) + 1;
-    
-    reset_absolute_top_line_number();
-    
-    /* update the line starts array */
-    calc_line_starts(0, mNVisibleLines);
-    calc_last_char();
-  } else {
-    // No buffer, so just clear the state info for later...
-    mNBufferLines  = 0;
-    mFirstChar     = 0;
-    mTopLineNum    = 1;
-    mAbsTopLineNum = 0;
-  }
-  
-  resize(x(), y(), w(), h());
-}
-
-
-
-/**
- \brief Inserts "text" at the current cursor location.  
- 
- This has the same effect as inserting the text into the buffer using BufInsert 
- and then moving the insert position after the newly inserted text, except
- that it's optimized to do less redrawing.
- 
- \param text new text in UTF-8 encoding.
- */
-void Fl_Text_Display::insert(const char* text) {
-  IS_UTF8_ALIGNED2(buffer(), mCursorPos)
-  IS_UTF8_ALIGNED(text)
-  
-  int pos = mCursorPos;
-  
-  mCursorToHint = pos + strlen( text );
-  mBuffer->insert( pos, text );
-  mCursorToHint = NO_HINT;
-}
-
-
-
-/**  
- \brief Replaces text at the current insert position.
- \param text new text in UTF-8 encoding
- 
- \todo Unicode? Find out exactly what we do here and simplify.
- */
-void Fl_Text_Display::overstrike(const char* text) {
-  IS_UTF8_ALIGNED2(buffer(), mCursorPos)
-  IS_UTF8_ALIGNED(text)
-  
-  int startPos = mCursorPos;
-  Fl_Text_Buffer *buf = mBuffer;
-  int lineStart = buf->line_start( startPos );
-  int textLen = strlen( text );
-  int i, p, endPos, indent, startIndent, endIndent;
-  const char *c;
-  unsigned int ch;
-  char *paddedText = NULL;
-  
-  /* determine how many displayed character positions are covered */
-  startIndent = mBuffer->count_displayed_characters( lineStart, startPos );
-  indent = startIndent;
-  for ( c = text; *c != '\0'; c += fl_utf8len1(*c) )
-    indent++;
-  endIndent = indent;
-  
-  /* find which characters to remove, and if necessary generate additional
-   padding to make up for removed control characters at the end */
-  indent = startIndent;
-  for ( p = startPos; ; p=buffer()->next_char(p) ) {
-    if ( p == buf->length() )
-      break;
-    ch = buf->char_at( p );
-    if ( ch == '\n' )
-      break;
-    indent++;
-    if ( indent == endIndent ) {
-      p++;
-      break;
-    } else if ( indent > endIndent ) {
-      if ( ch != '\t' ) {
-        p++;
-        paddedText = new char [ textLen + FL_TEXT_MAX_EXP_CHAR_LEN + 1 ];
-        strcpy( paddedText, text );
-        for ( i = 0; i < indent - endIndent; i++ )
-          paddedText[ textLen + i ] = ' ';
-        paddedText[ textLen + i ] = '\0';
-      }
-      break;
-    }
-  }
-  endPos = p;
-  
-  mCursorToHint = startPos + textLen;
-  buf->replace( startPos, endPos, paddedText == NULL ? text : paddedText );
-  mCursorToHint = NO_HINT;
-  if ( paddedText != NULL )
-    delete [] paddedText;
-}
-
-
-
-/**
- \brief Convert a character index into a pixel position.
- 
- Translate a buffer text position to the XY location where the top left of the 
- cursor would be positioned to point to that character. Returns 0 if the 
- position is not displayed because it is \e \b vertically out of view.
- If the position is horizontally out of view, returns the X coordinate where
- the position would be if it were visible.
-
- \param pos character index
- \param[out] X, Y pixel position of character on screen
- \return 0 if character vertically out of view, X position otherwise
- */
-int Fl_Text_Display::position_to_xy( int pos, int* X, int* Y ) const {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int lineStartPos, fontHeight, lineLen;
-  int visLineNum;
-  
-  /* If position is not displayed, return false */
-  if (pos < mFirstChar || (pos > mLastChar && !empty_vlines())) {
-    return 0;
-  }
-  
-  /* Calculate Y coordinate */
-  if (!position_to_line(pos, &visLineNum)) {
-    return 0;
-  }
-  if (visLineNum < 0 || visLineNum > mNBufferLines) {
-    return 0;
-  }
-  
-  fontHeight = mMaxsize;
-  *Y = text_area.y + visLineNum * fontHeight;
-  
-  /* Get the text, length, and buffer position of the line. If the position
-   is beyond the end of the buffer and should be at the first position on
-   the first empty line, don't try to get or scan the text  */
-  lineStartPos = mLineStarts[visLineNum];
-  if ( lineStartPos == -1 ) {
-    *X = text_area.x - mHorizOffset;
-    return 1;
-  }
-  lineLen = vline_length( visLineNum );
-  *X = text_area.x + handle_vline(GET_WIDTH, lineStartPos, pos-lineStartPos, 0, 0, 0, 0, 0, 0) - mHorizOffset;
-  return 1;
-}
-
-
-
-/**
- \brief Find the line and column number of position \p pos.  
-
- This only works for displayed lines. If the line is not displayed, the 
- function returns 0 (without the mLineStarts array it could turn in to very long
- calculation involving scanning large amounts of text in the buffer).
- If continuous wrap mode is on, returns the absolute line number (as opposed
- to the wrapped line number which is used for scrolling).
- 
- \param pos character index
- \param[out] lineNum absolute (unwrapped) line number
- \param[out] column character offset to the beginning of the line
- \return 0 if \p pos is off screen, line number otherwise
- \todo a column number makes little sense in the UTF-8/variable font width 
-    environment. We will have to further define what exactly we want to return. 
-    Please check the functions that call this particular function.
- */
-int Fl_Text_Display::position_to_linecol( int pos, int* lineNum, int* column ) const {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-  
-  int retVal;
-  
-  /* In continuous wrap mode, the absolute (non-wrapped) line count is
-   maintained separately, as needed.  Only return it if we're actually
-   keeping track of it and pos is in the displayed text */
-  if (mContinuousWrap) {
-    if (!maintaining_absolute_top_line_number() || pos < mFirstChar || pos > mLastChar)
-      return 0;
-    *lineNum = mAbsTopLineNum + buffer()->count_lines(mFirstChar, pos);
-    *column = buffer()->count_displayed_characters(buffer()->line_start(pos), pos);
-    return 1;
-  }
-  
-  retVal = position_to_line( pos, lineNum );
-  if ( retVal ) {
-    *column = mBuffer->count_displayed_characters( mLineStarts[ *lineNum ], pos );
-    *lineNum += mTopLineNum;
-  }
-  return retVal;
-}
-
-
-
-/**
- \brief Check if a pixel position is within the primary selection.
- \param X, Y pixel position to test
- \return 1 if position (X, Y) is inside of the primary Fl_Text_Selection
- */
-int Fl_Text_Display::in_selection( int X, int Y ) const {
-  int pos = xy_to_position( X, Y, CHARACTER_POS );
-  IS_UTF8_ALIGNED2(buffer(), pos)
-  Fl_Text_Buffer *buf = mBuffer;
-  return buf->primary_selection()->includes(pos);
-}
-
-
-
-/**
- \brief Nobody knows what this function does.
- 
- Correct a column number based on an unconstrained position (as returned by
- TextDXYToUnconstrainedPosition) to be relative to the last actual newline
- in the buffer before the row and column position given, rather than the
- last line start created by line wrapping.  This is an adapter
- for rectangular selections and code written before continuous wrap mode,
- which thinks that the unconstrained column is the number of characters
- from the last newline.  Obviously this is time consuming, because it
- invloves character re-counting.
- 
- \param row
- \param column
- \return something unknown
- \todo What does this do and how is it useful? Column numbers mean little in 
-    this context. Which functions depend on this one?
- 
- \todo Unicode?
- */
-int Fl_Text_Display::wrapped_column(int row, int column) const {
-  int lineStart, dispLineStart;
-  
-  if (!mContinuousWrap || row < 0 || row > mNVisibleLines)
-    return column;
-  dispLineStart = mLineStarts[row];
-  if (dispLineStart == -1)
-    return column;
-  lineStart = buffer()->line_start(dispLineStart);
-  return column + buffer()->count_displayed_characters(lineStart, dispLineStart);
-}
-
-
-
-/**
- \brief Nobody knows what this function does.
- 
- Correct a row number from an unconstrained position (as returned by
- TextDXYToUnconstrainedPosition) to a straight number of newlines from the
- top line of the display.  Because rectangular selections are based on
- newlines, rather than display wrapping, and anywhere a rectangular selection
- needs a row, it needs it in terms of un-wrapped lines.
- 
- \param row
- \return something unknown
- \todo What does this do and how is it useful? Column numbers mean little in 
- this context. Which functions depend on this one?
- */
-int Fl_Text_Display::wrapped_row(int row) const {
-  if (!mContinuousWrap || row < 0 || row > mNVisibleLines)
-    return row;
-  return buffer()->count_lines(mFirstChar, mLineStarts[row]);
-}
-
-
-
-/**
- \brief Scroll the display to bring insertion cursor into view.
-
- Note: it would be nice to be able to do this without counting lines twice
- (scroll_() counts them too) and/or to count from the most efficient
- starting point, but the efficiency of this routine is not as important to
- the overall performance of the text display.
- 
- \todo Unicode?
- */
-void Fl_Text_Display::display_insert() {
-  int hOffset, topLine, X, Y;
-  hOffset = mHorizOffset;
-  topLine = mTopLineNum;
-  
-  if (insert_position() < mFirstChar) {
-    topLine -= count_lines(insert_position(), mFirstChar, false);
-  } else if (mNVisibleLines>=2 && mLineStarts[mNVisibleLines-2] != -1) {
-    int lastChar = line_end(mLineStarts[mNVisibleLines-2],true);
-    if (insert_position() >= lastChar)
-      topLine += count_lines(lastChar - (wrap_uses_character(mLastChar) ? 0 : 1),
-                             insert_position(), false);
-  }
-  
-  /* Find the new setting for horizontal offset (this is a bit ungraceful).
-   If the line is visible, just use PositionToXY to get the position
-   to scroll to, otherwise, do the vertical scrolling first, then the
-   horizontal */
-  if (!position_to_xy( mCursorPos, &X, &Y )) {
-    scroll_(topLine, hOffset);
-    if (!position_to_xy( mCursorPos, &X, &Y )) {
-#ifdef DEBUG
-      printf ("*** display_insert/position_to_xy # GIVE UP !\n"); fflush(stdout);
-#endif // DEBUG
-      return;   /* Give up, it's not worth it (but why does it fail?) */
-    }
-  }
-  if (X > text_area.x + text_area.w)
-    hOffset += X-(text_area.x + text_area.w);
-  else if (X < text_area.x)
-    hOffset += X-text_area.x;
-  
-  /* Do the scroll */
-  if (topLine != mTopLineNum || hOffset != mHorizOffset)
-    scroll_(topLine, hOffset);
-}
-
-
-/**  
- \brief Scrolls the text buffer to show the current insert position.
- This function triggers a complete recalculation, ending in a call to 
- Fl_Text_Display::display_insert()
- */
-void Fl_Text_Display::show_insert_position() {
-  display_insert_position_hint = 1;
-  resize(x(), y(), w(), h());
-}
-
-
-/*
- Cursor movement functions
- */
-
-/**  
- \brief Moves the current insert position right one character.
- \return 1 if the cursor moved, 0 if the end of the text was reached
- */
-int Fl_Text_Display::move_right() {
-  if ( mCursorPos >= mBuffer->length() )
-    return 0;
-  int p = insert_position();
-  int q = buffer()->next_char(p);
-  insert_position(q);
-  return 1;
-}
-
-
-
-/**  
- \brief Moves the current insert position left one character.
- \return 1 if the cursor moved, 0 if the beginning of the text was reached
- */
-int Fl_Text_Display::move_left() {
-  if ( mCursorPos <= 0 )
-    return 0;
-  int p = insert_position();
-  int q = buffer()->prev_char_clipped(p);
-  insert_position(q);
-  return 1;
-}
-
-
-
-/** 
- \brief Moves the current insert position up one line.
- \return 1 if the cursor moved, 0 if the beginning of the text was reached
- */
-int Fl_Text_Display::move_up() {
-  int lineStartPos, xPos, prevLineStartPos, newPos, visLineNum;
-  
-  /* Find the position of the start of the line.  Use the line starts array
-   if possible */
-  if ( position_to_line( mCursorPos, &visLineNum ) )
-    lineStartPos = mLineStarts[ visLineNum ];
-  else {
-    lineStartPos = line_start( mCursorPos );
-    visLineNum = -1;
-  }
-  if ( lineStartPos == 0 )
-    return 0;
-  
-  /* Decide what column to move to, if there's a preferred column use that */
-  if (mCursorPreferredXPos >= 0)
-    xPos = mCursorPreferredXPos;
-  else
-    xPos = handle_vline(GET_WIDTH, lineStartPos, mCursorPos-lineStartPos, 
-                        0, 0, 0, 0, 0, INT_MAX);
-  
-  /* count forward from the start of the previous line to reach the column */
-  if ( visLineNum != -1 && visLineNum != 0 )
-    prevLineStartPos = mLineStarts[ visLineNum - 1 ];
-  else
-    prevLineStartPos = rewind_lines( lineStartPos, 1 );
-  
-  int lineEnd = line_end(prevLineStartPos, true);
-  newPos = handle_vline(FIND_INDEX_FROM_ZERO, prevLineStartPos, lineEnd-prevLineStartPos, 
-                        0, 0, 0, 0, 0, xPos);
-  
-  /* move the cursor */
-  insert_position( newPos );
-  
-  /* if a preferred column wasn't aleady established, establish it */
-  mCursorPreferredXPos = xPos;
-  return 1;
-}
-
-
-
-/** 
- \brief Moves the current insert position down one line.
- \return 1 if the cursor moved, 0 if the beginning of the text was reached
- */
-int Fl_Text_Display::move_down() {
-  int lineStartPos, xPos, newPos, visLineNum;
-  
-  if ( mCursorPos == mBuffer->length() )
-    return 0;
-  
-  if ( position_to_line( mCursorPos, &visLineNum ) )
-    lineStartPos = mLineStarts[ visLineNum ];
-  else {
-    lineStartPos = line_start( mCursorPos );
-    visLineNum = -1;
-  }
-  if (mCursorPreferredXPos >= 0) {
-    xPos = mCursorPreferredXPos;
-  } else {
-    xPos = handle_vline(GET_WIDTH, lineStartPos, mCursorPos-lineStartPos, 
-                        0, 0, 0, 0, 0, INT_MAX);
-  }
-  
-  int nextLineStartPos = skip_lines( lineStartPos, 1, true );
-  int lineEnd = line_end(nextLineStartPos, true);
-  newPos = handle_vline(FIND_INDEX_FROM_ZERO, nextLineStartPos, lineEnd-nextLineStartPos, 
-                        0, 0, 0, 0, 0, xPos);
-  
-  insert_position( newPos );
-  mCursorPreferredXPos = xPos;
-  return 1;
-}
-
-
-
-/**
- \brief Count the number of lines between two positions.
-
- Same as BufCountLines, but takes into account wrapping if wrapping is
- turned on.  If the caller knows that \p startPos is at a line start, it
- can pass \p startPosIsLineStart as True to make the call more efficient
- by avoiding the additional step of scanning back to the last newline.
-
- \param startPos index to first character
- \param endPos index after last character
- \param startPosIsLineStart avoid scanning back to the line start
- \return number of lines
- */
-int Fl_Text_Display::count_lines(int startPos, int endPos,
-                                 bool startPosIsLineStart) const {
-  IS_UTF8_ALIGNED2(buffer(), startPos)
-  IS_UTF8_ALIGNED2(buffer(), endPos)
-  
-  int retLines, retPos, retLineStart, retLineEnd;
-  
-#ifdef DEBUG
-  printf("Fl_Text_Display::count_lines(startPos=%d, endPos=%d, startPosIsLineStart=%d\n",
-         startPos, endPos, startPosIsLineStart);
-#endif // DEBUG
-  
-  /* If we're not wrapping use simple (and more efficient) BufCountLines */
-  if (!mContinuousWrap)
-    return buffer()->count_lines(startPos, endPos);
-  
-  wrapped_line_counter(buffer(), startPos, endPos, INT_MAX,
-                       startPosIsLineStart, 0, &retPos, &retLines, &retLineStart,
-                       &retLineEnd);
-  
-#ifdef DEBUG
-  printf("   # after WLC: retPos=%d, retLines=%d, retLineStart=%d, retLineEnd=%d\n",
-         retPos, retLines, retLineStart, retLineEnd);
-#endif // DEBUG
-  
-  return retLines;
-}
-
-
-
-/**
- \brief Skip a number of lines forward.
-
- Same as BufCountForwardNLines, but takes into account line breaks when
- wrapping is turned on. If the caller knows that startPos is at a line start,
- it can pass "startPosIsLineStart" as True to make the call more efficient
- by avoiding the additional step of scanning back to the last newline.
- 
- \param startPos index to starting character
- \param nLines number of lines to skip ahead
- \param startPosIsLineStart avoid scanning back to the line start
- \return new position as index
- */
-int Fl_Text_Display::skip_lines(int startPos, int nLines,
-                                bool startPosIsLineStart) {
-  IS_UTF8_ALIGNED2(buffer(), startPos)
-
-  int retLines, retPos, retLineStart, retLineEnd;
-  
-  /* if we're not wrapping use more efficient BufCountForwardNLines */
-  if (!mContinuousWrap)
-    return buffer()->skip_lines(startPos, nLines);
-  
-  /* wrappedLineCounter can't handle the 0 lines case */
-  if (nLines == 0)
-    return startPos;
-  
-  /* use the common line counting routine to count forward */
-  wrapped_line_counter(buffer(), startPos, buffer()->length(),
-                       nLines, startPosIsLineStart, 0, 
-                       &retPos, &retLines, &retLineStart, &retLineEnd);
-  IS_UTF8_ALIGNED2(buffer(), retPos)
-  return retPos;
-}
-
-
-
-/**
- \brief Returns the end of a line.
- 
- Same as BufEndOfLine, but takes into account line breaks when wrapping
- is turned on.  If the caller knows that \p startPos is at a line start, it
- can pass "startPosIsLineStart" as True to make the call more efficient
- by avoiding the additional step of scanning back to the last newline.
-
- Note that the definition of the end of a line is less clear when continuous
- wrap is on.  With continuous wrap off, it's just a pointer to the newline
- that ends the line.  When it's on, it's the character beyond the last
- \b displayable character on the line, where a whitespace character which has
- been "converted" to a newline for wrapping is not considered displayable.
- Also note that a line can be wrapped at a non-whitespace character if the
- line had no whitespace.  In this case, this routine returns a pointer to
- the start of the next line.  This is also consistent with the model used by
- visLineLength.
- 
- \param startPos index to starting character
- \param startPosIsLineStart avoid scanning back to the line start
- \return new position as index
- */
-int Fl_Text_Display::line_end(int startPos, bool startPosIsLineStart) const {
-  IS_UTF8_ALIGNED2(buffer(), startPos)
-
-  int retLines, retPos, retLineStart, retLineEnd;
-  
-  /* If we're not wrapping use more efficient BufEndOfLine */
-  if (!mContinuousWrap)
-    return buffer()->line_end(startPos);
-  
-  if (startPos == buffer()->length())
-    return startPos;
-  
-  wrapped_line_counter(buffer(), startPos, buffer()->length(), 1,
-                       startPosIsLineStart, 0, &retPos, &retLines, &retLineStart,
-                       &retLineEnd);
-  
-  IS_UTF8_ALIGNED2(buffer(), retLineEnd)
-  return retLineEnd;
-}
-
-
-
-/**
- \brief Return the beginning of a line.
-
- Same as BufStartOfLine, but returns the character after last wrap point
- rather than the last newline.
- 
- \param pos index to starting character
- \return new position as index
- */
-int Fl_Text_Display::line_start(int pos) const {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int retLines, retPos, retLineStart, retLineEnd;
-  
-  /* If we're not wrapping, use the more efficient BufStartOfLine */
-  if (!mContinuousWrap)
-    return buffer()->line_start(pos);
-  
-  wrapped_line_counter(buffer(), buffer()->line_start(pos), pos, INT_MAX, true, 0,
-                       &retPos, &retLines, &retLineStart, &retLineEnd);
-
-  IS_UTF8_ALIGNED2(buffer(), retLineStart)
-  return retLineStart;
-}
-
-
-
-/**
- \brief Skip a number of lines back.
-
- Same as BufCountBackwardNLines, but takes into account line breaks when
- wrapping is turned on.
-
- \param startPos index to starting character
- \param nLines number of lines to skip back
- \return new position as index
- */
-int Fl_Text_Display::rewind_lines(int startPos, int nLines) {
-  IS_UTF8_ALIGNED2(buffer(), startPos)
-
-  Fl_Text_Buffer *buf = buffer();
-  int pos, lineStart, retLines, retPos, retLineStart, retLineEnd;
-  
-  /* If we're not wrapping, use the more efficient BufCountBackwardNLines */
-  if (!mContinuousWrap)
-    return buf->rewind_lines(startPos, nLines);
-  
-  pos = startPos;
-  for (;;) {
-    lineStart = buf->line_start(pos);
-    wrapped_line_counter(buf, lineStart, pos, INT_MAX, true, 0, 
-                         &retPos, &retLines, &retLineStart, &retLineEnd, false);
-    if (retLines > nLines)
-      return skip_lines(lineStart, retLines-nLines, true);
-    nLines -= retLines;
-    pos = lineStart - 1;
-    if (pos < 0)
-      return 0;
-    nLines -= 1;
-  }
-}
-
-
-
-static inline int fl_isseparator(unsigned int c) {
-  // FIXME: this does not take UCS-4 encoding into account
-  return c != '$' && c != '_' && (isspace(c) || ispunct(c));
-}
-
-
-
-/**   
- \brief Moves the current insert position right one word.
- */
-void Fl_Text_Display::next_word() {
-  int pos = insert_position();
-
-  while (pos < buffer()->length() && !fl_isseparator(buffer()->char_at(pos))) {
-    pos = buffer()->next_char(pos);
-  }
-
-  while (pos < buffer()->length() && fl_isseparator(buffer()->char_at(pos))) {
-    pos = buffer()->next_char(pos);
-  }
-  
-  insert_position( pos );
-}
-
-
-
-/**  
- \brief Moves the current insert position left one word.
- */
-void Fl_Text_Display::previous_word() {
-  int pos = insert_position();
-  if (pos==0) return;
-  pos = buffer()->prev_char(pos);
-
-  while (pos && fl_isseparator(buffer()->char_at(pos))) {
-    pos = buffer()->prev_char(pos);
-  }
-
-  while (pos && !fl_isseparator(buffer()->char_at(pos))) {
-    pos = buffer()->prev_char(pos);
-  }
-
-  if (fl_isseparator(buffer()->char_at(pos))) {
-    pos = buffer()->next_char(pos);
-  }
-  
-  insert_position( pos );
-}
-
-
-
-/**
- \brief This is called before any characters are deleted.
- 
- Callback attached to the text buffer to receive delete information before
- the modifications are actually made.
- 
- \param pos starting index of deletion
- \param nDeleted number of bytes we will delete (must be UTF-8 aligned!)
- \param cbArg "this" pointer for static callback function
- */
-void Fl_Text_Display::buffer_predelete_cb(int pos, int nDeleted, void *cbArg) {
-  Fl_Text_Display *textD = (Fl_Text_Display *)cbArg;
-  if (textD->mContinuousWrap) {
-  /* Note: we must perform this measurement, even if there is not a
-   single character deleted; the number of "deleted" lines is the
-   number of visual lines spanned by the real line in which the
-   modification takes place.
-   Also, a modification of the tab distance requires the same
-   kind of calculations in advance, even if the font width is "fixed",
-   because when the width of the tab characters changes, the layout
-   of the text may be completely different. */
-    IS_UTF8_ALIGNED2(textD->buffer(), pos)
-    textD->measure_deleted_lines(pos, nDeleted);
-  } else {
-    textD->mSuppressResync = 0; /* Probably not needed, but just in case */
-  }
-}
-
-
-
-/**
- \brief This is called whenever the buffer is modified.
- 
- Callback attached to the text buffer to receive modification information
-
- \param pos starting index of modification
- \param nInserted number of bytes we inserted (must be UTF-8 aligned!)
- \param nDeleted number of bytes deleted (must be UTF-8 aligned!)
- \param nRestyled ??
- \param deletedText this is what was removed, must not be NULL if nDeleted is set
- \param cbArg "this" pointer for static callback function
- */
-void Fl_Text_Display::buffer_modified_cb( int pos, int nInserted, int nDeleted,
-                                         int nRestyled, const char *deletedText, void *cbArg ) {
-  int linesInserted, linesDeleted, startDispPos, endDispPos;
-  Fl_Text_Display *textD = ( Fl_Text_Display * ) cbArg;
-  Fl_Text_Buffer *buf = textD->mBuffer;
-  int oldFirstChar = textD->mFirstChar;
-  int scrolled, origCursorPos = textD->mCursorPos;
-  int wrapModStart = 0, wrapModEnd = 0;
-
-  IS_UTF8_ALIGNED2(buf, pos)
-  IS_UTF8_ALIGNED2(buf, oldFirstChar)
-  
-  /* buffer modification cancels vertical cursor motion column */
-  if ( nInserted != 0 || nDeleted != 0 )
-    textD->mCursorPreferredXPos = -1;
-  
-  /* Count the number of lines inserted and deleted, and in the case
-   of continuous wrap mode, how much has changed */
-  if (textD->mContinuousWrap) {
-    textD->find_wrap_range(deletedText, pos, nInserted, nDeleted,
-                           &wrapModStart, &wrapModEnd, &linesInserted, &linesDeleted);
-  } else {
-    linesInserted = nInserted == 0 ? 0 : buf->count_lines( pos, pos + nInserted );
-    linesDeleted = nDeleted == 0 ? 0 : countlines( deletedText );
-  }
-  
-  /* Update the line starts and mTopLineNum */
-  if ( nInserted != 0 || nDeleted != 0 ) {
-    if (textD->mContinuousWrap) {
-      textD->update_line_starts( wrapModStart, wrapModEnd-wrapModStart,
-                                nDeleted + pos-wrapModStart + (wrapModEnd-(pos+nInserted)),
-                                linesInserted, linesDeleted, &scrolled );
-    } else {
-      textD->update_line_starts( pos, nInserted, nDeleted, linesInserted,
-                                linesDeleted, &scrolled );
-    }
-  } else
-    scrolled = 0;
-  
-  /* If we're counting non-wrapped lines as well, maintain the absolute
-   (non-wrapped) line number of the text displayed */
-  if (textD->maintaining_absolute_top_line_number() &&
-      (nInserted != 0 || nDeleted != 0)) {
-    if (deletedText && (pos + nDeleted < oldFirstChar))
-      textD->mAbsTopLineNum += buf->count_lines(pos, pos + nInserted) -
-                               countlines(deletedText);
-    else if (pos < oldFirstChar)
-      textD->reset_absolute_top_line_number();
-  }    	    
-  
-  /* Update the line count for the whole buffer */
-  textD->mNBufferLines += linesInserted - linesDeleted;
-  
-  /* Update the cursor position */
-  if ( textD->mCursorToHint != NO_HINT ) {
-    textD->mCursorPos = textD->mCursorToHint;
-    textD->mCursorToHint = NO_HINT;
-  } else if ( textD->mCursorPos > pos ) {
-    if ( textD->mCursorPos < pos + nDeleted )
-      textD->mCursorPos = pos;
-    else
-      textD->mCursorPos += nInserted - nDeleted;
-  }
-  
-  // refigure scrollbars & stuff
-  textD->resize(textD->x(), textD->y(), textD->w(), textD->h());
-  
-  // don't need to do anything else if not visible?
-  if (!textD->visible_r()) return;
-  
-  /* If the changes caused scrolling, re-paint everything and we're done. */
-  if ( scrolled ) {
-    textD->damage(FL_DAMAGE_EXPOSE);
-    if ( textD->mStyleBuffer )   /* See comments in extendRangeForStyleMods */
-      textD->mStyleBuffer->primary_selection()->selected(0);
-    return;
-  }
-  
-  /* If the changes didn't cause scrolling, decide the range of characters
-   that need to be re-painted.  Also if the cursor position moved, be
-   sure that the redisplay range covers the old cursor position so the
-   old cursor gets erased, and erase the bits of the cursor which extend
-   beyond the left and right edges of the text. */
-  startDispPos = textD->mContinuousWrap ? wrapModStart : pos;
-  IS_UTF8_ALIGNED2(buf, startDispPos)
-  
-  if ( origCursorPos == startDispPos && textD->mCursorPos != startDispPos )
-    startDispPos = min( startDispPos, buf->prev_char_clipped(origCursorPos) );
-  IS_UTF8_ALIGNED2(buf, startDispPos)
-  
-  if ( linesInserted == linesDeleted ) {
-    if ( nInserted == 0 && nDeleted == 0 )
-      endDispPos = pos + nRestyled;
-    else {
-      if (textD->mContinuousWrap)
-        endDispPos = wrapModEnd;
-      else
-        endDispPos = buf->next_char(buf->line_end( pos + nInserted ));
-      
-      // CET - FIXME      if ( origCursorPos >= startDispPos &&
-      //                ( origCursorPos <= endDispPos || endDispPos == buf->length() ) )
-    }
-    
-    if (linesInserted > 1) textD->draw_line_numbers(false);
-  } else {
-    endDispPos = buf->next_char(textD->mLastChar);
-    // CET - FIXME   if ( origCursorPos >= pos )
-    /* If more than one line is inserted/deleted, a line break may have
-     been inserted or removed in between, and the line numbers may
-     have changed. If only one line is altered, line numbers cannot
-     be affected (the insertion or removal of a line break always 
-     results in at least two lines being redrawn). */
-    textD->draw_line_numbers(false);
-  }
-  IS_UTF8_ALIGNED2(buf, startDispPos)
-  IS_UTF8_ALIGNED2(buf, endDispPos)
-  
-  /* If there is a style buffer, check if the modification caused additional
-   changes that need to be redisplayed.  (Redisplaying separately would
-   cause double-redraw on almost every modification involving styled
-   text).  Extend the redraw range to incorporate style changes */
-  if ( textD->mStyleBuffer )
-    textD->extend_range_for_styles( &startDispPos, &endDispPos );
-  IS_UTF8_ALIGNED2(buf, startDispPos)
-  IS_UTF8_ALIGNED2(buf, endDispPos)
-  
-  /* Redisplay computed range */
-  textD->redisplay_range( startDispPos, endDispPos );
-}
-
-
-
-/**
- \brief Line numbering stuff, currently unused.
- 
- In continuous wrap mode, internal line numbers are calculated after
- wrapping.  A separate non-wrapped line count is maintained when line
- numbering is turned on.  There is some performance cost to maintaining this
- line count, so normally absolute line numbers are not tracked if line
- numbering is off.  This routine allows callers to specify that they still
- want this line count maintained (for use via TextDPosToLineAndCol).
- More specifically, this allows the line number reported in the statistics
- line to be calibrated in absolute lines, rather than post-wrapped lines.
- */
-void Fl_Text_Display::maintain_absolute_top_line_number(int state) {
-  mNeedAbsTopLineNum = state;
-  reset_absolute_top_line_number();
-}
-
-
-
-/**
- \brief Line numbering stuff, currently unused.
- 
- Returns the absolute (non-wrapped) line number of the first line displayed.
- Returns 0 if the absolute top line number is not being maintained.
- */
-int Fl_Text_Display::get_absolute_top_line_number() const {
-  if (!mContinuousWrap)
-    return mTopLineNum;
-  if (maintaining_absolute_top_line_number())
-    return mAbsTopLineNum;
-  return 0;
-}
-
-
-
-/**
- \brief Line numbering stuff, currently unused.
- 
- Re-calculate absolute top line number for a change in scroll position.
- */
-void Fl_Text_Display::absolute_top_line_number(int oldFirstChar) {
-  if (maintaining_absolute_top_line_number()) {
-    if (mFirstChar < oldFirstChar)
-      mAbsTopLineNum -= buffer()->count_lines(mFirstChar, oldFirstChar);
-    else
-      mAbsTopLineNum += buffer()->count_lines(oldFirstChar, mFirstChar);
-  }
-}
-
-
-
-/**
- \brief Line numbering stuff, currently unused.
- 
- Return true if a separate absolute top line number is being maintained
- (for displaying line numbers or showing in the statistics line).
- */
-int Fl_Text_Display::maintaining_absolute_top_line_number() const {
-  return mContinuousWrap &&
-  (mLineNumWidth != 0 || mNeedAbsTopLineNum);
-}
-
-
-
-/**
- \brief Line numbering stuff, probably unused.
- 
- Count lines from the beginning of the buffer to reestablish the
- absolute (non-wrapped) top line number.  If mode is not continuous wrap,
- or the number is not being maintained, does nothing.
- */
-void Fl_Text_Display::reset_absolute_top_line_number() {
-  mAbsTopLineNum = 1;
-  absolute_top_line_number(0);
-}
-
-
-
-/**
- \brief Convert a position index into a line number offset.
- 
- Find the line number of position \p pos relative to the first line of
- displayed text. Returns 0 if the line is not displayed.
- 
- \param pos ??
- \param[out] lineNum ??
- \return ??
- \todo What does this do?
- */
-int Fl_Text_Display::position_to_line( int pos, int *lineNum ) const {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int i;
-  
-  *lineNum = 0;
-  if ( pos < mFirstChar ) return 0;
-  if ( pos > mLastChar ) {
-    if ( empty_vlines() ) {
-      if ( mLastChar < mBuffer->length() ) {
-        if ( !position_to_line( mLastChar, lineNum ) ) {
-          Fl::error("Fl_Text_Display::position_to_line(): Consistency check ptvl failed");
-          return 0;
-        }
-        return ++( *lineNum ) <= mNVisibleLines - 1;
-      } else {
-        position_to_line( buffer()->prev_char_clipped(mLastChar), lineNum );
-        return 1;
-      }
-    }
-    return 0;
-  }
-  
-  for ( i = mNVisibleLines - 1; i >= 0; i-- ) {
-    if ( mLineStarts[ i ] != -1 && pos >= mLineStarts[ i ] ) {
-      *lineNum = i;
-      return 1;
-    }
-  }
-  return 0;   /* probably never be reached */
-}
-
-
-/**
- Universal pixel machine.
-
- We use a single function that handles all line layout, measuring, and drawing
-  \li draw a text range
-  \li return the width of a text range in pixels
-  \li return the index of a character that is at a pixel position
-
- \param[in] mode DRAW_LINE, GET_WIDTH, FIND_INDEX
- \param[in] lineStartPos index of first character
- \param[in] lineLen size of string in bytes
- \param[in] leftChar, rightChar
- \param[in] Y drawing position
- \param[in] bottomClip, leftClip, rightClip stop work when we reach the clipped 
-            area. rightClip is the X position that we search in FIND_INDEX.
- \retval DRAW_LINE index of last drawn character
- \retval GET_WIDTH width in pixels of text segment if we would draw it
- \retval FIND_INDEX index of character at given x position in window coordinates
- \retval FIND_INDEX_FROM_ZERO index of character at given x position without scrolling and widget offsets
- \todo we need to handle hidden hyphens and tabs here!
- \todo we handle all styles and selections 
- \todo we must provide code to get pixel positions of the middle of a character as well
- */
-int Fl_Text_Display::handle_vline(
-                                  int mode, 
-                                  int lineStartPos, int lineLen, int leftChar, int rightChar,
-                                  int Y, int bottomClip,
-                                  int leftClip, int rightClip) const
-{
-  IS_UTF8_ALIGNED2(buffer(), lineStartPos)
-
-  // FIXME: we need to allow two modes for FIND_INDEX: one on the edge of the 
-  // FIXME: character for selection, and one on the character center for cursors.
-  int i, X, startX, startIndex, style, charStyle;
-  char *lineStr;
-  
-  if ( lineStartPos == -1 ) {
-    lineStr = NULL;
-  } else {
-    lineStr = mBuffer->text_range( lineStartPos, lineStartPos + lineLen );
-  }
-  
-  if (mode==GET_WIDTH) {
-    X = 0;
-  } else if (mode==FIND_INDEX_FROM_ZERO) {
-    X = 0; 
-    mode = FIND_INDEX;
-  } else {
-    X = text_area.x - mHorizOffset;
-  }
-  
-  startX = X;
-  startIndex = 0;
-  if (!lineStr) {
-    // just clear the background
-    if (mode==DRAW_LINE) {
-      style = position_style(lineStartPos, lineLen, -1);
-      draw_string( style|BG_ONLY_MASK, text_area.x, Y, text_area.x+text_area.w, lineStr, lineLen );
-    }
-    if (mode==FIND_INDEX) {
-      IS_UTF8_ALIGNED2(buffer(), lineStartPos)
-      return lineStartPos;
-    }
-    return 0;
-  }
-  
-  char currChar = 0, prevChar = 0;
-  // draw the line
-  style = position_style(lineStartPos, lineLen, 0);
-  for (i=0; i<lineLen; ) {
-    currChar = lineStr[i]; // one byte is enough to handele tabs and other cases
-    int len = fl_utf8len1(currChar);
-    if (len<=0) len = 1; // OUCH!
-    charStyle = position_style(lineStartPos, lineLen, i);
-    if (charStyle!=style || currChar=='\t' || prevChar=='\t') {
-      // draw a segment whenever the style changes or a Tab is found
-      int w = 0;
-      if (prevChar=='\t') {
-        // draw a single Tab space
-        int tab = (int)col_to_x(mBuffer->tab_distance());
-        int xAbs = (mode==GET_WIDTH) ? startX : startX+mHorizOffset-text_area.x;
-        w = (((xAbs/tab)+1)*tab) - xAbs;
-        if (mode==DRAW_LINE)
-          draw_string( style|BG_ONLY_MASK, startX, Y, startX+w, 0, 0 );
-        if (mode==FIND_INDEX && startX+w>rightClip) {
-          // find x pos inside block
-          free(lineStr);
-          return lineStartPos + startIndex;
-        }
-      } else {
-        // draw a text segment
-        w = int( string_width( lineStr+startIndex, i-startIndex, style ) );
-        if (mode==DRAW_LINE)
-          draw_string( style, startX, Y, startX+w, lineStr+startIndex, i-startIndex );
-        if (mode==FIND_INDEX && startX+w>rightClip) {
-          // find x pos inside block
-          int di = find_x(lineStr+startIndex, i-startIndex, style, rightClip-startX);
-          free(lineStr);
-          IS_UTF8_ALIGNED2(buffer(), (lineStartPos+startIndex+di))
-          return lineStartPos + startIndex + di;
-        }
-      }
-      style = charStyle;
-      startX += w;
-      startIndex = i;
-    }
-    i += len;
-    prevChar = currChar;
-  }
-  int w = 0;
-  if (currChar=='\t') {
-    // draw a single Tab space
-    int tab = (int)col_to_x(mBuffer->tab_distance());
-    int xAbs = (mode==GET_WIDTH) ? startX : startX+mHorizOffset-text_area.x;
-    w = (((xAbs/tab)+1)*tab) - xAbs;
-    if (mode==DRAW_LINE)
-      draw_string( style|BG_ONLY_MASK, startX, Y, startX+w, 0, 0 );
-    if (mode==FIND_INDEX) {
-      // find x pos inside block
-      free(lineStr);
-      return lineStartPos + startIndex + ( rightClip-startX>w ? 1 : 0 );
-    }
-  } else {
-    w = int( string_width( lineStr+startIndex, i-startIndex, style ) );
-    if (mode==DRAW_LINE)
-      draw_string( style, startX, Y, startX+w, lineStr+startIndex, i-startIndex );
-    if (mode==FIND_INDEX) {
-      // find x pos inside block
-      int di = find_x(lineStr+startIndex, i-startIndex, style, rightClip-startX);
-      free(lineStr);
-      IS_UTF8_ALIGNED2(buffer(), (lineStartPos+startIndex+di))
-      return lineStartPos + startIndex + di;
-    }
-  }
-  if (mode==GET_WIDTH) {
-    free(lineStr);
-    return startX+w;
-  }
-  
-  // clear the rest of the line
-  startX += w;
-  style = position_style(lineStartPos, lineLen, i);
-  if (mode==DRAW_LINE)
-    draw_string( style|BG_ONLY_MASK, startX, Y, text_area.x+text_area.w, lineStr, lineLen );
-  
-  free(lineStr);
-  IS_UTF8_ALIGNED2(buffer(), (lineStartPos+lineLen))
-  return lineStartPos + lineLen;
-}
-
-
-/**
- \brief Find the index of the character that lies at the given x position.
- \param s UTF-8 text string
- \param len length of string
- \param style index into style lookup table
- \param x position in pixels
- \return index into buffer
- */
-int Fl_Text_Display::find_x(const char *s, int len, int style, int x) const {
-  IS_UTF8_ALIGNED(s)
-
-  // TODO: use binary search which may be quicker.
-  int i = 0;
-  while (i<len) {
-    int cl = fl_utf8len1(s[i]);
-    int w = int( string_width(s, i+cl, style) );
-    if (w>x) 
-      return i;
-    i += cl;
-  }  
-  return len;
-}
-
-
-
-/**
- \brief Draw a single line of text.
- 
- Draw the text on a single line represented by \p visLineNum (the
- number of lines down from the top of the display), limited by
- \p leftClip and \p rightClip window coordinates and \p leftCharIndex and
- \p rightCharIndex character positions (not including the character at
- position \p rightCharIndex).
- 
- \param visLineNum index of line in the visible line number lookup
- \param leftClip, rightClip pixel position of clipped area
- \param leftCharIndex, rightCharIndex index into line of segment that we want to draw
- */
-void Fl_Text_Display::draw_vline(int visLineNum, int leftClip, int rightClip,
-                                 int leftCharIndex, int rightCharIndex) {
-  int Y, lineStartPos, lineLen, fontHeight;
-  
-  //  printf("draw_vline(visLineNum=%d, leftClip=%d, rightClip=%d, leftCharIndex=%d, rightCharIndex=%d)\n",
-  //         visLineNum, leftClip, rightClip, leftCharIndex, rightCharIndex);
-  //  printf("nNVisibleLines=%d\n", mNVisibleLines);
-  
-  /* If line is not displayed, skip it */
-  if ( visLineNum < 0 || visLineNum >= mNVisibleLines )
-    return;
-  
-  /* Calculate Y coordinate of the string to draw */
-  fontHeight = mMaxsize;
-  Y = text_area.y + visLineNum * fontHeight;
-  
-  /* Get the text, length, and  buffer position of the line to display */
-  lineStartPos = mLineStarts[ visLineNum ];
-  if ( lineStartPos == -1 ) {
-    lineLen = 0;
-  } else {
-    lineLen = vline_length( visLineNum );
-  }
-  
-  /* Shrink the clipping range to the active display area */
-  leftClip = max( text_area.x, leftClip );
-  rightClip = min( rightClip, text_area.x + text_area.w );
-  
-  handle_vline(DRAW_LINE, 
-               lineStartPos, lineLen, leftCharIndex, rightCharIndex,
-               Y, Y+fontHeight, leftClip, rightClip);
-  return;
-}
-
-
-
-/**
- \brief Draw a text segment in a single style.
- 
- Draw a string or blank area according to parameter \p style, using the
- appropriate colors and drawing method for that style, with top left
- corner at \p X, \p Y.  If style says to draw text, use \p string as
- source of characters, and draw \p nChars, if style is FILL, erase
- rectangle where text would have drawn from \p X to \p toX and from
- \p Y to the maximum y extent of the current font(s).
- 
- \param style index into style lookup table
- \param X, Y drawing origin
- \param toX rightmost position if this is a fill operation
- \param string text if this is a drawing operation
- \param nChars number of characters to draw
- */
-void Fl_Text_Display::draw_string(int style, 
-                                  int X, int Y, int toX,
-                                  const char *string, int nChars) const {
-  IS_UTF8_ALIGNED(string)
-
-  const Style_Table_Entry * styleRec;
-  
-  /* Draw blank area rather than text, if that was the request */
-  if ( style & FILL_MASK ) {
-    if (style & TEXT_ONLY_MASK) return;
-    clear_rect( style, X, Y, toX - X, mMaxsize );
-    return;
-  }
-  /* Set font, color, and gc depending on style.  For normal text, GCs
-   for normal drawing, or drawing within a Fl_Text_Selection or highlight are
-   pre-allocated and pre-configured.  For syntax highlighting, GCs are
-   configured here, on the fly. */
-  
-  Fl_Font font = textfont();
-  int fsize = textsize();
-  Fl_Color foreground;
-  Fl_Color background;
-  
-  if ( style & STYLE_LOOKUP_MASK ) {
-    int si = (style & STYLE_LOOKUP_MASK) - 'A';
-    if (si < 0) si = 0;
-    else if (si >= mNStyles) si = mNStyles - 1;
-    
-    styleRec = mStyleTable + si;
-    font  = styleRec->font;
-    fsize = styleRec->size;
-    
-    if (style & PRIMARY_MASK) {
-      if (Fl::focus() == (Fl_Widget*)this) background = selection_color();
-      else background = fl_color_average(color(), selection_color(), 0.4f);
-    } else if (style & HIGHLIGHT_MASK) {
-      if (Fl::focus() == (Fl_Widget*)this) background = fl_color_average(color(), selection_color(), 0.5f);
-      else background = fl_color_average(color(), selection_color(), 0.6f);
-    } else background = color();
-    foreground = fl_contrast(styleRec->color, background);
-  } else if (style & PRIMARY_MASK) {
-    if (Fl::focus() == (Fl_Widget*)this) background = selection_color();
-    else background = fl_color_average(color(), selection_color(), 0.4f);
-    foreground = fl_contrast(textcolor(), background);
-  } else if (style & HIGHLIGHT_MASK) {
-    if (Fl::focus() == (Fl_Widget*)this) background = fl_color_average(color(), selection_color(), 0.5f);
-    else background = fl_color_average(color(), selection_color(), 0.6f);
-    foreground = fl_contrast(textcolor(), background);
-  } else {
-    foreground = textcolor();
-    background = color();
-  }
-  
-  if (!(style & TEXT_ONLY_MASK)) {
-    fl_color( background );
-    fl_rectf( X, Y, toX - X, mMaxsize );
-  }
-  if (!(style & BG_ONLY_MASK)) {
-    fl_color( foreground );
-    fl_font( font, fsize );
-#if !(defined(__APPLE__) || defined(WIN32)) && USE_XFT
-    // makes sure antialiased ÄÖÜ do not leak on line above
-    fl_push_clip(X, Y, toX - X, mMaxsize);
-#endif
-    fl_draw( string, nChars, X, Y + mMaxsize - fl_descent());
-#if !(defined(__APPLE__) || defined(WIN32)) && USE_XFT
-    fl_pop_clip();
-#endif
-  }
-  
-  // CET - FIXME
-  /* If any space around the character remains unfilled (due to use of
-   different sized fonts for highlighting), fill in above or below
-   to erase previously drawn characters */
-  /*
-   if (fs->ascent < mAscent)
-   clear_rect( style, X, Y, toX - X, mAscent - fs->ascent);
-   if (fs->descent < mDescent)
-   clear_rect( style, X, Y + mAscent + fs->descent, toX - x,
-   mDescent - fs->descent);
-   */
-  /* Underline if style is secondary Fl_Text_Selection */
-  
-  /*
-   if (style & SECONDARY_MASK)
-   XDrawLine(XtDisplay(mW), XtWindow(mW), gc, x,
-   y + mAscent, toX - 1, Y + fs->ascent);
-   */
-}
-
-
-
-/**
- \brief Clear a rectangle with the appropriate background color for \p style.
- 
- \param style index into style table
- \param X, Y, width, height size and position of background area
- */
-void Fl_Text_Display::clear_rect(int style, 
-                                 int X, int Y,
-                                 int width, int height) const {
-  /* A width of zero means "clear to end of window" to XClearArea */
-  if ( width == 0 )
-    return;
-  
-  if (style & PRIMARY_MASK) {
-    if (Fl::focus()==(Fl_Widget*)this) {
-      fl_color(selection_color());
-    } else {
-      fl_color(fl_color_average(color(), selection_color(), 0.4f));
-    }
-  } else if (style & HIGHLIGHT_MASK) {
-    if (Fl::focus()==(Fl_Widget*)this) {
-      fl_color(fl_color_average(color(), selection_color(), 0.5f));
-    } else {
-      fl_color(fl_color_average(color(), selection_color(), 0.6f));
-    }
-  } else {
-    fl_color( color() );
-  }
-  fl_rectf( X, Y, width, height );
-}
-
-
-
-/**
- \brief Draw a cursor with top center at \p X, \p Y.
- 
- \param X, Y cursor position in pixels
- */
-void Fl_Text_Display::draw_cursor( int X, int Y ) {
-
-  typedef struct {
-    int x1, y1, x2, y2;
-  }
-  Segment;
-
-  Segment segs[ 5 ];
-  int left, right, cursorWidth, midY;
-  //    int fontWidth = mFontStruct->min_bounds.width, nSegs = 0;
-  int fontWidth = TMPFONTWIDTH; // CET - FIXME
-  int nSegs = 0;
-  int fontHeight = mMaxsize;
-  int bot = Y + fontHeight - 1;
-  
-  if ( X < text_area.x - 1 || X > text_area.x + text_area.w )
-    return;
-  
-  /* For cursors other than the block, make them around 2/3 of a character
-   width, rounded to an even number of pixels so that X will draw an
-   odd number centered on the stem at x. */
-  cursorWidth = 4;   //(fontWidth/3) * 2;
-  left = X - cursorWidth / 2;
-  right = left + cursorWidth;
-  
-  /* Create segments and draw cursor */
-  if ( mCursorStyle == CARET_CURSOR ) {
-    midY = bot - fontHeight / 5;
-    segs[ 0 ].x1 = left; segs[ 0 ].y1 = bot; segs[ 0 ].x2 = X; segs[ 0 ].y2 = midY;
-    segs[ 1 ].x1 = X; segs[ 1 ].y1 = midY; segs[ 1 ].x2 = right; segs[ 1 ].y2 = bot;
-    segs[ 2 ].x1 = left; segs[ 2 ].y1 = bot; segs[ 2 ].x2 = X; segs[ 2 ].y2 = midY - 1;
-    segs[ 3 ].x1 = X; segs[ 3 ].y1 = midY - 1; segs[ 3 ].x2 = right; segs[ 3 ].y2 = bot;
-    nSegs = 4;
-  } else if ( mCursorStyle == NORMAL_CURSOR ) {
-    segs[ 0 ].x1 = left; segs[ 0 ].y1 = Y; segs[ 0 ].x2 = right; segs[ 0 ].y2 = Y;
-    segs[ 1 ].x1 = X; segs[ 1 ].y1 = Y; segs[ 1 ].x2 = X; segs[ 1 ].y2 = bot;
-    segs[ 2 ].x1 = left; segs[ 2 ].y1 = bot; segs[ 2 ].x2 = right; segs[ 2 ].y2 = bot;
-    nSegs = 3;
-  } else if ( mCursorStyle == HEAVY_CURSOR ) {
-    segs[ 0 ].x1 = X - 1; segs[ 0 ].y1 = Y; segs[ 0 ].x2 = X - 1; segs[ 0 ].y2 = bot;
-    segs[ 1 ].x1 = X; segs[ 1 ].y1 = Y; segs[ 1 ].x2 = X; segs[ 1 ].y2 = bot;
-    segs[ 2 ].x1 = X + 1; segs[ 2 ].y1 = Y; segs[ 2 ].x2 = X + 1; segs[ 2 ].y2 = bot;
-    segs[ 3 ].x1 = left; segs[ 3 ].y1 = Y; segs[ 3 ].x2 = right; segs[ 3 ].y2 = Y;
-    segs[ 4 ].x1 = left; segs[ 4 ].y1 = bot; segs[ 4 ].x2 = right; segs[ 4 ].y2 = bot;
-    nSegs = 5;
-  } else if ( mCursorStyle == DIM_CURSOR ) {
-    midY = Y + fontHeight / 2;
-    segs[ 0 ].x1 = X; segs[ 0 ].y1 = Y; segs[ 0 ].x2 = X; segs[ 0 ].y2 = Y;
-    segs[ 1 ].x1 = X; segs[ 1 ].y1 = midY; segs[ 1 ].x2 = X; segs[ 1 ].y2 = midY;
-    segs[ 2 ].x1 = X; segs[ 2 ].y1 = bot; segs[ 2 ].x2 = X; segs[ 2 ].y2 = bot;
-    nSegs = 3;
-  } else if ( mCursorStyle == BLOCK_CURSOR ) {
-    right = X + fontWidth;
-    segs[ 0 ].x1 = X; segs[ 0 ].y1 = Y; segs[ 0 ].x2 = right; segs[ 0 ].y2 = Y;
-    segs[ 1 ].x1 = right; segs[ 1 ].y1 = Y; segs[ 1 ].x2 = right; segs[ 1 ].y2 = bot;
-    segs[ 2 ].x1 = right; segs[ 2 ].y1 = bot; segs[ 2 ].x2 = X; segs[ 2 ].y2 = bot;
-    segs[ 3 ].x1 = X; segs[ 3 ].y1 = bot; segs[ 3 ].x2 = X; segs[ 3 ].y2 = Y;
-    nSegs = 4;
-  }
-  fl_color( mCursor_color );
-  
-  for ( int k = 0; k < nSegs; k++ ) {
-    fl_line( segs[ k ].x1, segs[ k ].y1, segs[ k ].x2, segs[ k ].y2 );
-  }
-}
-
-
-
-/**
- \brief Find the correct style for a character.
-
- Determine the drawing method to use to draw a specific character from "buf".
- \p lineStartPos gives the character index where the line begins, \p lineIndex,
- the number of characters past the beginning of the line, and \p lineIndex
- the number of displayed characters past the beginning of the line.  Passing
- \p lineStartPos of -1 returns the drawing style for "no text".
-
- Why not just: position_style(pos)?  Because style applies to blank areas
- of the window beyond the text boundaries, and because this routine must also
- decide whether a position is inside of a rectangular Fl_Text_Selection, and do
- so efficiently, without re-counting character positions from the start of the
- line.
-
- Note that style is a somewhat incorrect name, drawing method would
- be more appropriate.
-
- \param lineStartPos beginning of this line
- \param lineLen number of bytes in line
- \param lineIndex position of character within line
- \return style for the given character
- */
-int Fl_Text_Display::position_style( int lineStartPos, int lineLen, int lineIndex) const 
-{
-  IS_UTF8_ALIGNED2(buffer(), lineStartPos)
-
-  Fl_Text_Buffer * buf = mBuffer;
-  Fl_Text_Buffer *styleBuf = mStyleBuffer;
-  int pos, style = 0;
-  
-  if ( lineStartPos == -1 || buf == NULL )
-    return FILL_MASK;
-  
-  pos = lineStartPos + min( lineIndex, lineLen );
-  
-  if ( lineIndex >= lineLen )
-    style = FILL_MASK;
-  else if ( styleBuf != NULL ) {
-    style = ( unsigned char ) styleBuf->byte_at( pos );
-    if (style == mUnfinishedStyle && mUnfinishedHighlightCB) {
-      /* encountered "unfinished" style, trigger parsing */
-      (mUnfinishedHighlightCB)( pos, mHighlightCBArg);
-      style = (unsigned char) styleBuf->byte_at( pos);
-    }
-  }
-  if (buf->primary_selection()->includes(pos))
-    style |= PRIMARY_MASK;
-  if (buf->highlight_selection()->includes(pos))
-    style |= HIGHLIGHT_MASK;
-  if (buf->secondary_selection()->includes(pos))
-    style |= SECONDARY_MASK;
-  return style;
-}
-
-
-/**
- \brief Find the width of a string in the font of a particular style.
- 
- \param string the text
- \param length number of bytes in string
- \param style index into style table
- \return width of text segment in pixels
- */
-double Fl_Text_Display::string_width( const char *string, int length, int style ) const {
-  IS_UTF8_ALIGNED(string)
-
-  Fl_Font font;
-  Fl_Fontsize fsize;
-  
-  if ( mNStyles && (style & STYLE_LOOKUP_MASK) ) {
-    int si = (style & STYLE_LOOKUP_MASK) - 'A';
-    if (si < 0) si = 0;
-    else if (si >= mNStyles) si = mNStyles - 1;
-    
-    font  = mStyleTable[si].font;
-    fsize = mStyleTable[si].size;
-  } else {
-    font  = textfont();
-    fsize = textsize();
-  }
-  fl_font( font, fsize );
-  return fl_width( string, length );
-}
-
-
-
-/**
- \brief Translate a pixel position into a character index.
-
- Translate window coordinates to the nearest (insert cursor or character
- cell) text position.  The parameter \p posType specifies how to interpret the
- position: CURSOR_POS means translate the coordinates to the nearest cursor
- position, and CHARACTER_POS means return the position of the character
- closest to (\p X, \p Y).
-
- \param X, Y pixel position
- \param posType CURSOR_POS or CHARACTER_POS
- \return index into text buffer
- */
-int Fl_Text_Display::xy_to_position( int X, int Y, int posType ) const {
-  int lineStart, lineLen, fontHeight;
-  int visLineNum;
-  
-  /* Find the visible line number corresponding to the Y coordinate */
-  fontHeight = mMaxsize;
-  visLineNum = ( Y - text_area.y ) / fontHeight;
-  if ( visLineNum < 0 )
-    return mFirstChar;
-  if ( visLineNum >= mNVisibleLines )
-    visLineNum = mNVisibleLines - 1;
-  
-  /* Find the position at the start of the line */
-  lineStart = mLineStarts[ visLineNum ];
-  
-  /* If the line start was empty, return the last position in the buffer */
-  if ( lineStart == -1 )
-    return mBuffer->length();
-  
-  /* Get the line text and its length */
-  lineLen = vline_length( visLineNum );
-  
-  return handle_vline(FIND_INDEX, 
-                      lineStart, lineLen, 0, 0, 
-                      0, 0,
-                      text_area.x, X);
-}
-
-
-
-/**
- \brief Translate pixel coordinates into row and column.
- 
- Translate window coordinates to the nearest row and column number for
- positioning the cursor.  This, of course, makes no sense when the font is
- proportional, since there are no absolute columns.  The parameter posType
- specifies how to interpret the position: CURSOR_POS means translate the
- coordinates to the nearest position between characters, and CHARACTER_POS
- means translate the position to the nearest character cell.
- 
- \param X, Y pixel coordinates
- \param[out] row, column neares row and column
- \param posType CURSOR_POS or CHARACTER_POS
- */
-void Fl_Text_Display::xy_to_rowcol( int X, int Y, int *row,
-                                   int *column, int posType ) const {
-  int fontHeight = mMaxsize;
-  int fontWidth = TMPFONTWIDTH;   //mFontStruct->max_bounds.width;
-  
-  /* Find the visible line number corresponding to the Y coordinate */
-  *row = ( Y - text_area.y ) / fontHeight;
-  if ( *row < 0 ) *row = 0;
-  if ( *row >= mNVisibleLines ) *row = mNVisibleLines - 1;
-  
-  *column = ( ( X - text_area.x ) + mHorizOffset +
-             ( posType == CURSOR_POS ? fontWidth / 2 : 0 ) ) / fontWidth;
-  if ( *column < 0 ) * column = 0;
-}
-
-
-
-/**
- \brief Offset line start counters for a new vertical scroll position.
- 
- Offset the line starts array, mTopLineNum, mFirstChar and lastChar, for a new
- vertical scroll position given by newTopLineNum.  If any currently displayed
- lines will still be visible, salvage the line starts values, otherwise,
- count lines from the nearest known line start (start or end of buffer, or
- the closest value in the mLineStarts array)
- 
- \param newTopLineNum index into buffer
- */
-void Fl_Text_Display::offset_line_starts( int newTopLineNum ) {
-  int oldTopLineNum = mTopLineNum;
-  int oldFirstChar = mFirstChar;
-  int lineDelta = newTopLineNum - oldTopLineNum;
-  int nVisLines = mNVisibleLines;
-  int *lineStarts = mLineStarts;
-  int i, lastLineNum;
-  Fl_Text_Buffer *buf = mBuffer;
-  
-  /* If there was no offset, nothing needs to be changed */
-  if ( lineDelta == 0 )
-    return;
-  
-  /* Find the new value for mFirstChar by counting lines from the nearest
-   known line start (start or end of buffer, or the closest value in the
-   lineStarts array) */
-  lastLineNum = oldTopLineNum + nVisLines - 1;
-  if ( newTopLineNum < oldTopLineNum && newTopLineNum < -lineDelta ) {
-    mFirstChar = skip_lines( 0, newTopLineNum - 1, true );
-  } else if ( newTopLineNum < oldTopLineNum ) {
-    mFirstChar = rewind_lines( mFirstChar, -lineDelta );
-  } else if ( newTopLineNum < lastLineNum ) {
-    mFirstChar = lineStarts[ newTopLineNum - oldTopLineNum ];
-  } else if ( newTopLineNum - lastLineNum < mNBufferLines - newTopLineNum ) {
-    mFirstChar = skip_lines( lineStarts[ nVisLines - 1 ],
-                            newTopLineNum - lastLineNum, true );
-  } else {
-    mFirstChar = rewind_lines( buf->length(), mNBufferLines - newTopLineNum + 1 );
-  }
-  
-  /* Fill in the line starts array */
-  if ( lineDelta < 0 && -lineDelta < nVisLines ) {
-    for ( i = nVisLines - 1; i >= -lineDelta; i-- )
-      lineStarts[ i ] = lineStarts[ i + lineDelta ];
-    calc_line_starts( 0, -lineDelta );
-  } else if ( lineDelta > 0 && lineDelta < nVisLines ) {
-    for ( i = 0; i < nVisLines - lineDelta; i++ )
-      lineStarts[ i ] = lineStarts[ i + lineDelta ];
-    calc_line_starts( nVisLines - lineDelta, nVisLines - 1 );
-  } else
-    calc_line_starts( 0, nVisLines );
-  
-  /* Set lastChar and mTopLineNum */
-  calc_last_char();
-  mTopLineNum = newTopLineNum;
-  
-  /* If we're numbering lines or being asked to maintain an absolute line
-   number, re-calculate the absolute line number */
-  absolute_top_line_number(oldFirstChar);
-}
-
-
-
-/**
- \brief Update line start arrays and variables.
-
- Update the line starts array, mTopLineNum, mFirstChar and lastChar for this
- text display after a modification to the text buffer, given by the
- position \p pos where the change began, and the numbers of characters
- and lines inserted and deleted.
-
- \param pos index into buffer of recent changes
- \param charsInserted number of bytes(!) inserted
- \param charsDeleted number of bytes(!) deleted
- \param linesInserted number of lines
- \param linesDeleted number of lines
- \param[out] scrolled set to 1 if the text display needs to be scrolled
- */
-void Fl_Text_Display::update_line_starts(int pos, int charsInserted,
-                                         int charsDeleted, int linesInserted, 
-                                         int linesDeleted, int *scrolled ) {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int *lineStarts = mLineStarts;
-  int i, lineOfPos, lineOfEnd, nVisLines = mNVisibleLines;
-  int charDelta = charsInserted - charsDeleted;
-  int lineDelta = linesInserted - linesDeleted;
-  
-  /* If all of the changes were before the displayed text, the display
-   doesn't change, just update the top line num and offset the line
-   start entries and first and last characters */
-  if ( pos + charsDeleted < mFirstChar ) {
-    mTopLineNum += lineDelta;
-    for ( i = 0; i < nVisLines && lineStarts[i] != -1; i++ )
-      lineStarts[ i ] += charDelta;
-    mFirstChar += charDelta;
-    mLastChar += charDelta;
-    *scrolled = 0;
-    return;
-  }
-  
-  /* The change began before the beginning of the displayed text, but
-   part or all of the displayed text was deleted */
-  if ( pos < mFirstChar ) {
-    /* If some text remains in the window, anchor on that  */
-    if ( position_to_line( pos + charsDeleted, &lineOfEnd ) &&
-        ++lineOfEnd < nVisLines && lineStarts[ lineOfEnd ] != -1 ) {
-      mTopLineNum = max( 1, mTopLineNum + lineDelta );
-      mFirstChar = rewind_lines(lineStarts[ lineOfEnd ] + charDelta, lineOfEnd );
-      /* Otherwise anchor on original line number and recount everything */
-    } else {
-      if ( mTopLineNum > mNBufferLines + lineDelta ) {
-        mTopLineNum = 1;
-        mFirstChar = 0;
-      } else
-        mFirstChar = skip_lines( 0, mTopLineNum - 1, true );
-    }
-    calc_line_starts( 0, nVisLines - 1 );
-    /* calculate lastChar by finding the end of the last displayed line */
-    calc_last_char();
-    *scrolled = 1;
-    return;
-  }
-  
-  /* If the change was in the middle of the displayed text (it usually is),
-   salvage as much of the line starts array as possible by moving and
-   offsetting the entries after the changed area, and re-counting the
-   added lines or the lines beyond the salvaged part of the line starts
-   array */
-  if ( pos <= mLastChar ) {
-    /* find line on which the change began */
-    position_to_line( pos, &lineOfPos );
-    /* salvage line starts after the changed area */
-    if ( lineDelta == 0 ) {
-      for ( i = lineOfPos + 1; i < nVisLines && lineStarts[ i ] != -1; i++ )
-        lineStarts[ i ] += charDelta;
-    } else if ( lineDelta > 0 ) {
-      for ( i = nVisLines - 1; i >= lineOfPos + lineDelta + 1; i-- )
-        lineStarts[ i ] = lineStarts[ i - lineDelta ] +
-        ( lineStarts[ i - lineDelta ] == -1 ? 0 : charDelta );
-    } else /* (lineDelta < 0) */ {
-      for ( i = max( 0, lineOfPos + 1 ); i < nVisLines + lineDelta; i++ )
-        lineStarts[ i ] = lineStarts[ i - lineDelta ] +
-        ( lineStarts[ i - lineDelta ] == -1 ? 0 : charDelta );
-    }
-    /* fill in the missing line starts */
-    if ( linesInserted >= 0 )
-      calc_line_starts( lineOfPos + 1, lineOfPos + linesInserted );
-    if ( lineDelta < 0 )
-      calc_line_starts( nVisLines + lineDelta, nVisLines );
-    /* calculate lastChar by finding the end of the last displayed line */
-    calc_last_char();
-    *scrolled = 0;
-    return;
-  }
-  
-  /* Change was past the end of the displayed text, but displayable by virtue
-   of being an insert at the end of the buffer into visible blank lines */
-  if ( empty_vlines() ) {
-    position_to_line( pos, &lineOfPos );
-    calc_line_starts( lineOfPos, lineOfPos + linesInserted );
-    calc_last_char();
-    *scrolled = 0;
-    return;
-  }
-  
-  /* Change was beyond the end of the buffer and not visible, do nothing */
-  *scrolled = 0;
-}
-
-
-
-/**
- \brief Update the line start arrays.
- 
- Scan through the text in the "textD"'s buffer and recalculate the line
- starts array values beginning at index "startLine" and continuing through
- (including) "endLine".  It assumes that the line starts entry preceding
- "startLine" (or mFirstChar if startLine is 0) is good, and re-counts
- newlines to fill in the requested entries.  Out of range values for
- "startLine" and "endLine" are acceptable.
- 
- \param startLine, endLine range of lines to scan as line numbers
- */
-void Fl_Text_Display::calc_line_starts( int startLine, int endLine ) {
-  int startPos, bufLen = mBuffer->length();
-  int line, lineEnd, nextLineStart, nVis = mNVisibleLines;
-  int *lineStarts = mLineStarts;
-  
-  /* Clean up (possibly) messy input parameters */
-  if ( endLine < 0 ) endLine = 0;
-  if ( endLine >= nVis ) endLine = nVis - 1;
-  if ( startLine < 0 ) startLine = 0;
-  if ( startLine >= nVis ) startLine = nVis - 1;
-  if ( startLine > endLine )
-    return;
-  
-  /* Find the last known good line number -> position mapping */
-  if ( startLine == 0 ) {
-    lineStarts[ 0 ] = mFirstChar;
-    startLine = 1;
-  }
-  startPos = lineStarts[ startLine - 1 ];
-  
-  /* If the starting position is already past the end of the text,
-   fill in -1's (means no text on line) and return */
-  if ( startPos == -1 ) {
-    for ( line = startLine; line <= endLine; line++ )
-      lineStarts[ line ] = -1;
-    return;
-  }
-  
-  /* Loop searching for ends of lines and storing the positions of the
-   start of the next line in lineStarts */
-  for ( line = startLine; line <= endLine; line++ ) {
-    find_line_end(startPos, true, &lineEnd, &nextLineStart);
-    startPos = nextLineStart;
-    if ( startPos >= bufLen ) {
-      /* If the buffer ends with a newline or line break, put
-       buf->length() in the next line start position (instead of
-       a -1 which is the normal marker for an empty line) to
-       indicate that the cursor may safely be displayed there */
-      if ( line == 0 || ( lineStarts[ line - 1 ] != bufLen &&
-                         lineEnd != nextLineStart ) ) {
-        lineStarts[ line ] = bufLen;
-        line++;
-      }
-      break;
-    }
-    lineStarts[ line ] = startPos;
-  }
-  
-  /* Set any entries beyond the end of the text to -1 */
-  for ( ; line <= endLine; line++ )
-    lineStarts[ line ] = -1;
-}
-
-
-
-/**
- \brief Update last display character index.
- 
- Given a Fl_Text_Display with a complete, up-to-date lineStarts array, update
- the lastChar entry to point to the last buffer position displayed.
- */
-void Fl_Text_Display::calc_last_char() {
-  int i;
-  for (i = mNVisibleLines - 1; i >= 0 && mLineStarts[i] == -1; i--) ;
-  mLastChar = i < 0 ? 0 : line_end(mLineStarts[i], true);
-}
-
-
-
-/**  
- \brief Scrolls the current buffer to start at the specified line and column.
- \param topLineNum top line number
- \param horizOffset column number
- \todo Column numbers make little sense here.
- */
-void Fl_Text_Display::scroll(int topLineNum, int horizOffset) {
-  mTopLineNumHint = topLineNum;
-  mHorizOffsetHint = horizOffset;
-  resize(x(), y(), w(), h());
-}
-
-
-
-/**  
- \brief Scrolls the current buffer to start at the specified line and column.
- \param topLineNum top line number
- \param horizOffset in pixels
- \return 0 if nothing changed, 1 if we scrolled
- */
-int Fl_Text_Display::scroll_(int topLineNum, int horizOffset) {
-  /* Limit the requested scroll position to allowable values */
-  if (topLineNum > mNBufferLines + 3 - mNVisibleLines)
-    topLineNum = mNBufferLines + 3 - mNVisibleLines;
-  if (topLineNum < 1) topLineNum = 1;
-  
-  if (horizOffset > longest_vline() - text_area.w)
-    horizOffset = longest_vline() - text_area.w;
-  if (horizOffset < 0) horizOffset = 0;
-  
-  /* Do nothing if scroll position hasn't actually changed or there's no
-   window to draw in yet */
-  if (mHorizOffset == horizOffset && mTopLineNum == topLineNum)
-    return 0;
-  
-  /* If the vertical scroll position has changed, update the line
-   starts array and related counters in the text display */
-  offset_line_starts(topLineNum);
-  
-  /* Just setting mHorizOffset is enough information for redisplay */
-  mHorizOffset = horizOffset;
-  
-  // redraw all text
-  damage(FL_DAMAGE_EXPOSE);
-  return 1;
-}
-
-
-
-/**
- \brief Update vertical scrollbar.
- 
- Update the minimum, maximum, slider size, page increment, and value
- for vertical scrollbar.
- */
-void Fl_Text_Display::update_v_scrollbar() {
-  /* The vertical scrollbar value and slider size directly represent the top
-   line number, and the number of visible lines respectively.  The scroll
-   bar maximum value is chosen to generally represent the size of the whole
-   buffer, with minor adjustments to keep the scrollbar widget happy */
-#ifdef DEBUG
-  printf("Fl_Text_Display::update_v_scrollbar():\n"
-         "    mTopLineNum=%d, mNVisibleLines=%d, mNBufferLines=%d\n",
-	 mTopLineNum, mNVisibleLines, mNBufferLines);
-#endif // DEBUG
-  
-  mVScrollBar->value(mTopLineNum, mNVisibleLines, 1, mNBufferLines+2);
-  mVScrollBar->linesize(3);
-}
-
-
-/**
- \brief Update vertical scrollbar.
- 
- Update the minimum, maximum, slider size, page increment, and value
- for the horizontal scrollbar.
- */
-void Fl_Text_Display::update_h_scrollbar() {
-  int sliderMax = max(longest_vline(), text_area.w + mHorizOffset);
-  mHScrollBar->value( mHorizOffset, text_area.w, 0, sliderMax );
-}
-
-
-
-/**
- \brief Callbacks for drag or valueChanged on scrollbars.
- */
-void Fl_Text_Display::v_scrollbar_cb(Fl_Scrollbar* b, Fl_Text_Display* textD) {
-  if (b->value() == textD->mTopLineNum) return;
-  textD->scroll(b->value(), textD->mHorizOffset);
-}
-
-
-
-/**
- \brief Callbacks for drag or valueChanged on scrollbars.
- */
-void Fl_Text_Display::h_scrollbar_cb(Fl_Scrollbar* b, Fl_Text_Display* textD) {
-  if (b->value() == textD->mHorizOffset) return;
-  textD->scroll(textD->mTopLineNum, b->value());
-}
-
-
-
-/**
- \brief Refresh the line number area.  
- 
- If clearAll is False, writes only over the character cell areas.  Setting 
- clearAll to True will clear out any stray marks outside of the character cell 
- area, which might have been left from before a resize or font change.
- 
- This function is not used.
- */
-void Fl_Text_Display::draw_line_numbers(bool /*clearAll*/) {
-#if 0
-  int y, line, visLine, nCols, lineStart;
-  char lineNumString[12];
-  int lineHeight = mMaxsize ? mMaxsize : textsize_;
-  int charWidth = TMPFONTWIDTH;   //mFontStruct->max_bounds.width;
-  
-  /* Don't draw if mLineNumWidth == 0 (line numbers are hidden), or widget is
-   not yet realized */
-  if (mLineNumWidth == 0 || visible_r())
-    return;
-  
-  /* GC is allocated on demand, since not everyone will use line numbering */
-  if (textD->lineNumGC == NULL) {
-    XGCValues values;
-    values.foreground = textD->lineNumFGPixel;
-    values.background = textD->bgPixel;
-    values.font = textD->fontStruct->fid;
-    textD->lineNumGC = XtGetGC(textD->w,
-                               GCFont| GCForeground | GCBackground, &values);
-  }
-  
-  /* Erase the previous contents of the line number area, if requested */
-  if (clearAll)
-    XClearArea(XtDisplay(textD->w), XtWindow(textD->w), textD->lineNumLeft,
-               textD->top, textD->lineNumWidth, textD->height, False);
-  
-  /* Draw the line numbers, aligned to the text */
-  nCols = min(11, textD->lineNumWidth / charWidth);
-  y = textD->top;
-  line = getAbsTopLineNum(textD);
-  for (visLine=0; visLine < textD->nVisibleLines; visLine++) {
-    lineStart = textD->lineStarts[visLine];
-    if (lineStart != -1 && (lineStart==0 ||
-                            BufGetCharacter(textD->buffer, lineStart-1)=='\n')) {
-      sprintf(lineNumString, "%*d", nCols, line);
-      XDrawImageString(XtDisplay(textD->w), XtWindow(textD->w),
-                       textD->lineNumGC, textD->lineNumLeft, y + textD->ascent,
-                       lineNumString, strlen(lineNumString));
-      line++;
-    } else {
-      XClearArea(XtDisplay(textD->w), XtWindow(textD->w),
-                 textD->lineNumLeft, y, textD->lineNumWidth,
-                 textD->ascent + textD->descent, False);
-      if (visLine == 0)
-        line++;
-    }
-    y += lineHeight;
-  }
-#endif
-}
-
-static int max( int i1, int i2 ) {
-  return i1 >= i2 ? i1 : i2;
-}
-
-static int min( int i1, int i2 ) {
-  return i1 <= i2 ? i1 : i2;
-}
-
-
-
-/**
- Count the number of newlines in a null-terminated text string;
- */
-static int countlines( const char *string ) {
-  IS_UTF8_ALIGNED(string)
-
-  const char * c;
-  int lineCount = 0;
-  
-  if (!string) return 0;
-  
-  for ( c = string; *c != '\0'; c++ )
-    if ( *c == '\n' ) lineCount++;
-  return lineCount;
-}
-
-
-
-
-/**
- \brief Returns the width in pixels of the displayed line pointed to by "visLineNum".
- \param visLineNum index into visible lines array
- \return width of line in pixels
- */
-int Fl_Text_Display::measure_vline( int visLineNum ) const {
-  int lineLen = vline_length( visLineNum );
-  int lineStartPos = mLineStarts[ visLineNum ];
-  if (lineStartPos < 0 || lineLen == 0) return 0;
-  return handle_vline(GET_WIDTH, lineStartPos, lineLen, 0, 0, 0, 0, 0, 0);
-}
-
-
-
-/**
- \brief Return true if there are lines visible with no corresponding buffer text.
- \return 1 if there are empty lines
- */
-int Fl_Text_Display::empty_vlines() const {
-  return (mNVisibleLines > 0) && (mLineStarts[ mNVisibleLines - 1 ] == -1);
-}
-
-
-
-/**
- \brief Count number of bytes in a visible line.
- 
- Return the length of a line (number of bytes) by examining
- entries in the line starts array rather than by scanning for newlines.
- 
- \param visLineNum index of line in visible line array
- \return number of bytes in this line
- */
-int Fl_Text_Display::vline_length( int visLineNum ) const {
-  int nextLineStart, lineStartPos;
-  
-  if (visLineNum < 0 || visLineNum >= mNVisibleLines)
-    return (0);
-  
-  lineStartPos = mLineStarts[ visLineNum ];
-  
-  if ( lineStartPos == -1 )
-    return 0;
-  
-  if ( visLineNum + 1 >= mNVisibleLines )
-    return mLastChar - lineStartPos;
-  
-  nextLineStart = mLineStarts[ visLineNum + 1 ];
-  if ( nextLineStart == -1 )
-    return mLastChar - lineStartPos;
-  
-  int nextLineStartMinus1 = buffer()->prev_char(nextLineStart);
-  if (wrap_uses_character(nextLineStartMinus1))
-    return nextLineStartMinus1 - lineStartPos;
-  
-  return nextLineStart - lineStartPos;
-}
-
-
-
-/**
- \brief Wrapping calculations.
- 
- When continuous wrap is on, and the user inserts or deletes characters,
- wrapping can happen before and beyond the changed position.  This routine
- finds the extent of the changes, and counts the deleted and inserted lines
- over that range.  It also attempts to minimize the size of the range to
- what has to be counted and re-displayed, so the results can be useful
- both for delimiting where the line starts need to be recalculated, and
- for deciding what part of the text to redisplay.
- 
- \param deletedText
- \param pos
- \param nInserted
- \param nDeleted
- \param modRangeStart
- \param modRangeEnd
- \param linesInserted
- \param linesDeleted
- */
-void Fl_Text_Display::find_wrap_range(const char *deletedText, int pos,
-                                      int nInserted, int nDeleted, 
-                                      int *modRangeStart, int *modRangeEnd,
-                                      int *linesInserted, int *linesDeleted) {
-  IS_UTF8_ALIGNED(deletedText)
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int length, retPos, retLines, retLineStart, retLineEnd;
-  Fl_Text_Buffer *deletedTextBuf, *buf = buffer();
-  int nVisLines = mNVisibleLines;
-  int *lineStarts = mLineStarts;
-  int countFrom, countTo, lineStart, adjLineStart, i;
-  int visLineNum = 0, nLines = 0;
-  
-  /*
-   ** Determine where to begin searching: either the previous newline, or
-   ** if possible, limit to the start of the (original) previous displayed
-   ** line, using information from the existing line starts array
-   */
-  if (pos >= mFirstChar && pos <= mLastChar) {
-    for (i=nVisLines-1; i>0; i--) {
-      if (lineStarts[i] != -1 && pos >= lineStarts[i]) {
-        break;
-      }
-    }
-    if (i > 0) {
-      countFrom = lineStarts[i-1];
-      visLineNum = i-1;
-    } else {
-      countFrom = buf->line_start(pos);
-    }
-  } else {
-    countFrom = buf->line_start(pos);
-  }
-  
-  IS_UTF8_ALIGNED2(buf, countFrom)
-  
-  /*
-   ** Move forward through the (new) text one line at a time, counting
-   ** displayed lines, and looking for either a real newline, or for the
-   ** line starts to re-sync with the original line starts array
-   */
-  lineStart = countFrom;
-  *modRangeStart = countFrom;
-  for (;;) {
-    
-    /* advance to the next line.  If the line ended in a real newline
-     or the end of the buffer, that's far enough */
-    wrapped_line_counter(buf, lineStart, buf->length(), 1, true, 0,
-                         &retPos, &retLines, &retLineStart, &retLineEnd);
-    if (retPos >= buf->length()) {
-      countTo = buf->length();
-      *modRangeEnd = countTo;
-      if (retPos != retLineEnd)
-        nLines++;
-      break;
-    } else {
-      lineStart = retPos;
-    }
-    nLines++;
-    if (lineStart > pos + nInserted && buf->char_at(buf->prev_char(lineStart)) == '\n') {
-      countTo = lineStart;
-      *modRangeEnd = lineStart;
-      break;
-    }
-    
-    /* Don't try to resync in continuous wrap mode with non-fixed font
-     sizes; it would result in a chicken-and-egg dependency between
-     the calculations for the inserted and the deleted lines. 
-     If we're in that mode, the number of deleted lines is calculated in
-     advance, without resynchronization, so we shouldn't resynchronize
-     for the inserted lines either. */
-    if (mSuppressResync)
-      continue;
-    
-    /* check for synchronization with the original line starts array
-     before pos, if so, the modified range can begin later */
-    if (lineStart <= pos) {
-      while (visLineNum<nVisLines && lineStarts[visLineNum] < lineStart)
-        visLineNum++;
-      if (visLineNum < nVisLines && lineStarts[visLineNum] == lineStart) {
-        countFrom = lineStart;
-        nLines = 0;
-        if (visLineNum+1 < nVisLines && lineStarts[visLineNum+1] != -1)
-          *modRangeStart = min(pos, buf->prev_char(lineStarts[visLineNum+1]));
-        else
-          *modRangeStart = countFrom;
-      } else
-        *modRangeStart = min(*modRangeStart, buf->prev_char(lineStart));
-    }
-    
-    /* check for synchronization with the original line starts array
-     after pos, if so, the modified range can end early */
-    else if (lineStart > pos + nInserted) {
-      adjLineStart = lineStart - nInserted + nDeleted;
-      while (visLineNum<nVisLines && lineStarts[visLineNum]<adjLineStart)
-        visLineNum++;
-      if (visLineNum < nVisLines && lineStarts[visLineNum] != -1 &&
-          lineStarts[visLineNum] == adjLineStart) {
-        countTo = line_end(lineStart, true);
-        *modRangeEnd = lineStart;
-        break;
-      }
-    }
-  }
-  *linesInserted = nLines;
-  
-  
-  /* Count deleted lines between countFrom and countTo as the text existed
-   before the modification (that is, as if the text between pos and
-   pos+nInserted were replaced by "deletedText").  This extra context is
-   necessary because wrapping can occur outside of the modified region
-   as a result of adding or deleting text in the region. This is done by
-   creating a textBuffer containing the deleted text and the necessary
-   additional context, and calling the wrappedLineCounter on it.
-   
-   NOTE: This must not be done in continuous wrap mode when the font
-   width is not fixed. In that case, the calculation would try
-   to access style information that is no longer available (deleted
-   text), or out of date (updated highlighting), possibly leading 
-   to completely wrong calculations and/or even crashes eventually.
-   (This is not theoretical; it really happened.)
-   
-   In that case, the calculation of the number of deleted lines
-   has happened before the buffer was modified (only in that case,
-   because resynchronization of the line starts is impossible
-   in that case, which makes the whole calculation less efficient).
-   */
-  if (mSuppressResync) {
-    *linesDeleted = mNLinesDeleted;
-    mSuppressResync = 0;
-    return;
-  }
-  
-  length = (pos-countFrom) + nDeleted +(countTo-(pos+nInserted));
-  deletedTextBuf = new Fl_Text_Buffer(length);
-  deletedTextBuf->copy(buffer(), countFrom, pos, 0);
-  if (nDeleted != 0)
-    deletedTextBuf->insert(pos-countFrom, deletedText);
-  deletedTextBuf->copy(buffer(), pos+nInserted, countTo, pos-countFrom+nDeleted);
-  /* Note that we need to take into account an offset for the style buffer:
-   the deletedTextBuf can be out of sync with the style buffer. */
-  wrapped_line_counter(deletedTextBuf, 0, length, INT_MAX, true, countFrom, 
-                       &retPos, &retLines, &retLineStart, &retLineEnd, false);
-  delete deletedTextBuf;
-  *linesDeleted = retLines;
-  mSuppressResync = 0;
-}
-
-
-
-/**
- \brief Wrapping calculations.
- 
- This is a stripped-down version of the findWrapRange() function above,
- intended to be used to calculate the number of "deleted" lines during
- a buffer modification. It is called _before_ the modification takes place.
- 
- This function should only be called in continuous wrap mode with a
- non-fixed font width. In that case, it is impossible to calculate
- the number of deleted lines, because the necessary style information 
- is no longer available _after_ the modification. In other cases, we
- can still perform the calculation afterwards (possibly even more
- efficiently).
-
- \param pos
- \param nDeleted
- */
-void Fl_Text_Display::measure_deleted_lines(int pos, int nDeleted) {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int retPos, retLines, retLineStart, retLineEnd;
-  Fl_Text_Buffer *buf = buffer();
-  int nVisLines = mNVisibleLines;
-  int *lineStarts = mLineStarts;
-  int countFrom, lineStart;
-  int visLineNum = 0, nLines = 0, i;
-  /*
-   ** Determine where to begin searching: either the previous newline, or
-   ** if possible, limit to the start of the (original) previous displayed
-   ** line, using information from the existing line starts array
-   */
-  if (pos >= mFirstChar && pos <= mLastChar) {
-    for (i=nVisLines-1; i>0; i--)
-      if (lineStarts[i] != -1 && pos >= lineStarts[i])
-        break;
-    if (i > 0) {
-      countFrom = lineStarts[i-1];
-      visLineNum = i-1;
-    } else
-      countFrom = buf->line_start(pos);
-  } else
-    countFrom = buf->line_start(pos);
-  
-  /*
-   ** Move forward through the (new) text one line at a time, counting
-   ** displayed lines, and looking for either a real newline, or for the
-   ** line starts to re-sync with the original line starts array
-   */
-  lineStart = countFrom;
-  for (;;) {
-    /* advance to the next line.  If the line ended in a real newline
-     or the end of the buffer, that's far enough */
-    wrapped_line_counter(buf, lineStart, buf->length(), 1, true, 0,
-                         &retPos, &retLines, &retLineStart, &retLineEnd);
-    if (retPos >= buf->length()) {
-      if (retPos != retLineEnd)
-        nLines++;
-      break;
-    } else
-      lineStart = retPos;
-    nLines++;
-    if (lineStart > pos + nDeleted && buf->char_at(lineStart-1) == '\n') {
-      break;
-    }
-    
-    /* Unlike in the findWrapRange() function above, we don't try to 
-     resync with the line starts, because we don't know the length 
-     of the inserted text yet, nor the updated style information. 
-     
-     Because of that, we also shouldn't resync with the line starts
-     after the modification either, because we must perform the
-     calculations for the deleted and inserted lines in the same way. 
-     
-     This can result in some unnecessary recalculation and redrawing
-     overhead, and therefore we should only use this two-phase mode
-     of calculation when it's really needed (continuous wrap + variable
-     font width). */
-  }
-  mNLinesDeleted = nLines;
-  mSuppressResync = 1;
-}
-
-
-
-/**
- \brief Wrapping calculations.
- 
- Count forward from startPos to either maxPos or maxLines (whichever is
- reached first), and return all relevant positions and line count.
- The provided textBuffer may differ from the actual text buffer of the
- widget. In that case it must be a (partial) copy of the actual text buffer
- and the styleBufOffset argument must indicate the starting position of the
- copy, to take into account the correct style information.
-
- \param buf
- \param startPos
- \param maxPos
- \param maxLines
- \param startPosIsLineStart
- \param styleBufOffset
-
- \param[out] retPos Position where counting ended.  When counting lines, the
-    position returned is the start of the line "maxLines" lines 
-    beyond "startPos".
- \param[out] retLines Number of line breaks counted
- \param[out] retLineStart Start of the line where counting ended
- \param[out] retLineEnd End position of the last line traversed
- \param[out] countLastLineMissingNewLine
- */
-void Fl_Text_Display::wrapped_line_counter(Fl_Text_Buffer *buf, int startPos,
-                                           int maxPos, int maxLines, bool startPosIsLineStart, int styleBufOffset,
-                                           int *retPos, int *retLines, int *retLineStart, int *retLineEnd,
-                                           bool countLastLineMissingNewLine) const {
-  IS_UTF8_ALIGNED2(buf, startPos)
-  IS_UTF8_ALIGNED2(buf, maxPos)
-
-  int lineStart, newLineStart = 0, b, p, colNum, wrapMarginPix;
-  int i, foundBreak;
-  double width;
-  int nLines = 0;
-  unsigned int c;
-  
-  /* Set the wrap margin to the wrap column or the view width */
-  if (mWrapMarginPix != 0) {
-    wrapMarginPix = mWrapMarginPix;
-  } else {
-    wrapMarginPix = text_area.w;
-  }
-  
-  /* Find the start of the line if the start pos is not marked as a
-   line start. */
-  if (startPosIsLineStart)
-    lineStart = startPos;
-  else
-    lineStart = line_start(startPos);
-  
-  /*
-   ** Loop until position exceeds maxPos or line count exceeds maxLines.
-   ** (actually, continues beyond maxPos to end of line containing maxPos,
-   ** in case later characters cause a word wrap back before maxPos)
-   */
-  colNum = 0;
-  width = 0;
-  for (p=lineStart; p<buf->length(); p=buf->next_char(p)) {
-    c = buf->char_at(p);  // UCS-4
-    
-    /* If the character was a newline, count the line and start over,
-     otherwise, add it to the width and column counts */
-    if (c == '\n') {
-      if (p >= maxPos) {
-        *retPos = maxPos;
-        *retLines = nLines;
-        *retLineStart = lineStart;
-        *retLineEnd = maxPos;
-        return;
-      }
-      nLines++;
-      int p1 = buf->next_char(p);
-      if (nLines >= maxLines) {
-        *retPos = p1;
-        *retLines = nLines;
-        *retLineStart = p1;
-        *retLineEnd = p;
-        return;
-      }
-      lineStart = p1;
-      colNum = 0;
-      width = 0;
-    } else {
-      const char *s = buf->address(p);
-      colNum++;
-      // FIXME: it is not a good idea to simply add character widths because on
-      // some platforms, the width is a floating point value and depends on the 
-      // previous character as well.
-      width += measure_proportional_character(s, (int)width, p+styleBufOffset);
-    }
-    
-    /* If character exceeded wrap margin, find the break point and wrap there */
-    if (width > wrapMarginPix) {
-      foundBreak = false;
-      for (b=p; b>=lineStart; b=buf->prev_char(b)) {
-        c = buf->char_at(b);
-        if (c == '\t' || c == ' ') {
-          newLineStart = buf->next_char(b);
-          colNum = 0;
-          width = 0;
-          int iMax = buf->next_char(p);
-          for (i=buf->next_char(b); i<iMax; i = buf->next_char(i)) {
-            width += measure_proportional_character(buf->address(i), (int)width, 
-                                                    i+styleBufOffset);
-            colNum++;
-          }
-          foundBreak = true;
-          break;
-        }
-      }
-      if (!foundBreak) { /* no whitespace, just break at margin */
-        newLineStart = max(p, buf->next_char(lineStart));
-        const char *s = buf->address(b);
-        colNum++;
-        width = measure_proportional_character(s, 0, p+styleBufOffset);
-      }
-      if (p >= maxPos) {
-        *retPos = maxPos;
-        *retLines = maxPos < newLineStart ? nLines : nLines + 1;
-        *retLineStart = maxPos < newLineStart ? lineStart : newLineStart;
-        *retLineEnd = maxPos;
-        return;
-      }
-      nLines++;
-      if (nLines >= maxLines) {
-        *retPos = foundBreak ? buf->next_char(b) : max(p, buf->next_char(lineStart));
-        *retLines = nLines;
-        *retLineStart = lineStart;
-        *retLineEnd = foundBreak ? b : p;
-        return;
-      }
-      lineStart = newLineStart;
-    }
-  }
-  
-  /* reached end of buffer before reaching pos or line target */
-  *retPos = buf->length();
-  *retLines = nLines;
-  if (countLastLineMissingNewLine && colNum > 0) 
-    *retLines = buf->next_char(*retLines);
-  *retLineStart = lineStart;
-  *retLineEnd = buf->length();
-}
-
-
-
-/**
- \brief Wrapping calculations.
- 
- Measure the width in pixels of the first character of string "s" at a
- particular column "colNum" and buffer position "pos".  This is for measuring
- characters in proportional or mixed-width highlighting fonts.
-
- A note about proportional and mixed-width fonts: the mixed width and
- proportional font code in nedit does not get much use in general editing,
- because nedit doesn't allow per-language-mode fonts, and editing programs
- in a proportional font is usually a bad idea, so very few users would
- choose a proportional font as a default.  There are still probably mixed-
- width syntax highlighting cases where things don't redraw properly for
- insertion/deletion, though static display and wrapping and resizing
- should now be solid because they are now used for online help display.
- 
- \param s text string
- \param xPix x pixel position needed for calculating tab widths
- \param pos offset within string
- \return width of character in pixels
- */
-double Fl_Text_Display::measure_proportional_character(const char *s, int xPix, int pos) const {
-  IS_UTF8_ALIGNED(s)
-  
-  if (*s=='\t') {
-    int tab = (int)col_to_x(mBuffer->tab_distance());
-    return (((xPix/tab)+1)*tab) - xPix;
-  }
-  
-  int charLen = fl_utf8len1(*s), style = 0;
-  if (mStyleBuffer) {
-    style = mStyleBuffer->byte_at(pos);
-  }
-  return string_width(s, charLen, style);
-}
-
-
-
-/**
- \brief Finds both the end of the current line and the start of the next line.  
- 
- Why?
- In continuous wrap mode, if you need to know both, figuring out one from the
- other can be expensive or error prone.  The problem comes when there's a
- trailing space or tab just before the end of the buffer.  To translate an
- end of line value to or from the next lines start value, you need to know
- whether the trailing space or tab is being used as a line break or just a
- normal character, and to find that out would otherwise require counting all
- the way back to the beginning of the line.
- 
- \param startPos
- \param startPosIsLineStart
- \param[out] lineEnd
- \param[out] nextLineStart
- */
-void Fl_Text_Display::find_line_end(int startPos, bool startPosIsLineStart,
-                                    int *lineEnd, int *nextLineStart) const {
-  IS_UTF8_ALIGNED2(buffer(), startPos)
-
-  int retLines, retLineStart;
-  
-  /* if we're not wrapping use more efficient BufEndOfLine */
-  if (!mContinuousWrap) {
-    int le = buffer()->line_end(startPos);
-    int ls = buffer()->next_char(le);
-    *lineEnd = le;
-    *nextLineStart = min(buffer()->length(), ls);
-    return;
-  }
-  
-  /* use the wrapped line counter routine to count forward one line */
-  wrapped_line_counter(buffer(), startPos, buffer()->length(),
-                       1, startPosIsLineStart, 0, nextLineStart, &retLines,
-                       &retLineStart, lineEnd);
-}
-
-
-
-/**
- \brief Check if the line break is caused by a \\n or by line wrapping.
- 
- Line breaks in continuous wrap mode usually happen at newlines or
- whitespace.  This line-terminating character is not included in line
- width measurements and has a special status as a non-visible character.
- However, lines with no whitespace are wrapped without the benefit of a
- line terminating character, and this distinction causes endless trouble
- with all of the text display code which was originally written without
- continuous wrap mode and always expects to wrap at a newline character.
-
- Given the position of the end of the line, as returned by TextDEndOfLine
- or BufEndOfLine, this returns true if there is a line terminating
- character, and false if there's not.  On the last character in the
- buffer, this function can't tell for certain whether a trailing space was
- used as a wrap point, and just guesses that it wasn't.  So if an exact
- accounting is necessary, don't use this function.
- 
- \param lineEndPos index of character where the line wraps
- \return 1 if a \\n character causes the line wrap
- */ 
-int Fl_Text_Display::wrap_uses_character(int lineEndPos) const {
-  IS_UTF8_ALIGNED2(buffer(), lineEndPos)
-
-  unsigned int c;
-  
-  if (!mContinuousWrap || lineEndPos == buffer()->length())
-    return 1;
-  
-  c = buffer()->char_at(lineEndPos);
-  return c == '\n' || ((c == '\t' || c == ' ') &&
-                       lineEndPos + 1 < buffer()->length());
-}
-
-
-
-/**
- \brief I don't know what this does!
- 
- Extend the range of a redraw request (from *start to *end) with additional
- redraw requests resulting from changes to the attached style buffer (which
- contains auxiliary information for coloring or styling text).
- 
- \param startpos ??
- \param endpos ??
- 
- \todo Unicode?
- */
-void Fl_Text_Display::extend_range_for_styles( int *startpos, int *endpos ) {
-  IS_UTF8_ALIGNED2(buffer(), (*startpos))  
-  IS_UTF8_ALIGNED2(buffer(), (*endpos))  
-  
-  Fl_Text_Selection * sel = mStyleBuffer->primary_selection();
-  int extended = 0;
-  
-  /* The peculiar protocol used here is that modifications to the style
-   buffer are marked by selecting them with the buffer's primary Fl_Text_Selection.
-   The style buffer is usually modified in response to a modify callback on
-   the text buffer BEFORE Fl_Text_Display.c's modify callback, so that it can keep
-   the style buffer in step with the text buffer.  The style-update
-   callback can't just call for a redraw, because Fl_Text_Display hasn't processed
-   the original text changes yet.  Anyhow, to minimize redrawing and to
-   avoid the complexity of scheduling redraws later, this simple protocol
-   tells the text display's buffer modify callback to extend its redraw
-   range to show the text color/and font changes as well. */
-  if ( sel->selected() ) {
-    if ( sel->start() < *startpos ) {
-      *startpos = sel->start();
-      // somewhere while deleting, alignment is lost. We do this just to be sure.
-      *startpos = buffer()->utf8_align(*startpos);
-      IS_UTF8_ALIGNED2(buffer(), (*startpos))  
-      extended = 1;
-    }
-    if ( sel->end() > *endpos ) {
-      *endpos = sel->end();
-      *endpos = buffer()->utf8_align(*endpos);
-      IS_UTF8_ALIGNED2(buffer(), (*endpos))  
-      extended = 1;
-    }
-  }
-  
-  /* If the Fl_Text_Selection was extended due to a style change, and some of the
-   fonts don't match in spacing, extend redraw area to end of line to
-   redraw characters exposed by possible font size changes */
-  if ( extended )
-    *endpos = mBuffer->line_end( *endpos ) + 1;
-  
-  IS_UTF8_ALIGNED2(buffer(), (*endpos))
-}
-
-
-
-/**
- \brief Draw the widget.
- 
- This function tries to limit drawing to smaller areas if possible.
- */
-void Fl_Text_Display::draw(void) {
-  // don't even try if there is no associated text buffer!
-  if (!buffer()) { draw_box(); return; }
-  
-  fl_push_clip(x(),y(),w(),h());	// prevent drawing outside widget area
-  
-  // draw the non-text, non-scrollbar areas.
-  if (damage() & FL_DAMAGE_ALL) {
-    //    printf("drawing all (box = %d)\n", box());
-    if (Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) {
-      // if to printer, draw the background
-      fl_rectf(text_area.x, text_area.y, text_area.w, text_area.h, color() );
-    }
-    // draw the box()
-    int W = w(), H = h();
-    draw_box(box(), x(), y(), W, H, color());
-    
-    if (mHScrollBar->visible())
-      W -= scrollbar_width();
-    if (mVScrollBar->visible())
-      H -= scrollbar_width();
-    
-    // left margin
-    fl_rectf(text_area.x-LEFT_MARGIN, text_area.y-TOP_MARGIN,
-             LEFT_MARGIN, text_area.h+TOP_MARGIN+BOTTOM_MARGIN,
-             color());
-    
-    // right margin
-    fl_rectf(text_area.x+text_area.w, text_area.y-TOP_MARGIN,
-             RIGHT_MARGIN, text_area.h+TOP_MARGIN+BOTTOM_MARGIN,
-             color());
-    
-    // top margin
-    fl_rectf(text_area.x, text_area.y-TOP_MARGIN,
-             text_area.w, TOP_MARGIN, color());
-    
-    // bottom margin
-    fl_rectf(text_area.x, text_area.y+text_area.h,
-             text_area.w, BOTTOM_MARGIN, color());
-    
-    // draw that little box in the corner of the scrollbars
-    if (mVScrollBar->visible() && mHScrollBar->visible())
-      fl_rectf(mVScrollBar->x(), mHScrollBar->y(),
-               mVScrollBar->w(), mHScrollBar->h(),
-               FL_GRAY);
-    
-    // blank the previous cursor protrusions
-  }
-  else if (damage() & (FL_DAMAGE_SCROLL | FL_DAMAGE_EXPOSE)) {
-    //    printf("blanking previous cursor extrusions at Y: %d\n", mCursorOldY);
-    // CET - FIXME - save old cursor position instead and just draw side needed?
-    fl_push_clip(text_area.x-LEFT_MARGIN,
-                 text_area.y,
-                 text_area.w+LEFT_MARGIN+RIGHT_MARGIN,
-                 text_area.h);
-    fl_rectf(text_area.x-LEFT_MARGIN, mCursorOldY,
-             LEFT_MARGIN, mMaxsize, color());
-    fl_rectf(text_area.x+text_area.w, mCursorOldY,
-             RIGHT_MARGIN, mMaxsize, color());
-    fl_pop_clip();
-  }
-  
-  // draw the scrollbars
-  if (damage() & (FL_DAMAGE_ALL | FL_DAMAGE_CHILD)) {
-    mVScrollBar->damage(FL_DAMAGE_ALL);
-    mHScrollBar->damage(FL_DAMAGE_ALL);
-  }
-  update_child(*mVScrollBar);
-  update_child(*mHScrollBar);
-  
-  // draw all of the text
-  if (damage() & (FL_DAMAGE_ALL | FL_DAMAGE_EXPOSE)) {
-    //printf("drawing all text\n");
-    int X, Y, W, H;
-    if (fl_clip_box(text_area.x, text_area.y, text_area.w, text_area.h,
-                    X, Y, W, H)) {
-      // Draw text using the intersected clipping box...
-      // (this sets the clipping internally)
-      draw_text(X, Y, W, H);
-    } else {
-      // Draw the whole area...
-      draw_text(text_area.x, text_area.y, text_area.w, text_area.h);
-    }
-  }
-  else if (damage() & FL_DAMAGE_SCROLL) {
-    // draw some lines of text
-    fl_push_clip(text_area.x, text_area.y,
-                 text_area.w, text_area.h);
-    //printf("drawing text from %d to %d\n", damage_range1_start, damage_range1_end);
-    draw_range(damage_range1_start, damage_range1_end);
-    if (damage_range2_end != -1) {
-      //printf("drawing text from %d to %d\n", damage_range2_start, damage_range2_end);
-      draw_range(damage_range2_start, damage_range2_end);
-    }
-    damage_range1_start = damage_range1_end = -1;
-    damage_range2_start = damage_range2_end = -1;
-    fl_pop_clip();
-  }
-  
-  // draw the text cursor
-  if (damage() & (FL_DAMAGE_ALL | FL_DAMAGE_SCROLL | FL_DAMAGE_EXPOSE)
-      && !buffer()->primary_selection()->selected() &&
-      mCursorOn && Fl::focus() == (Fl_Widget*)this ) {
-    fl_push_clip(text_area.x-LEFT_MARGIN,
-                 text_area.y,
-                 text_area.w+LEFT_MARGIN+RIGHT_MARGIN,
-                 text_area.h);
-    
-    int X, Y;
-    if (position_to_xy(mCursorPos, &X, &Y)) draw_cursor(X, Y);
-    //    else puts("position_to_xy() failed - unable to draw cursor!");
-    //printf("drew cursor at pos: %d (%d,%d)\n", mCursorPos, X, Y);
-    mCursorOldY = Y;
-    fl_pop_clip();
-  }
-  fl_pop_clip();
-}
-
-
-
-// this processes drag events due to mouse for Fl_Text_Display and
-// also drags due to cursor movement with shift held down for
-// Fl_Text_Editor
-void fl_text_drag_me(int pos, Fl_Text_Display* d) {
-  if (d->dragType == Fl_Text_Display::DRAG_CHAR) {
-    if (pos >= d->dragPos) {
-      d->buffer()->select(d->dragPos, pos);
-    } else {
-      d->buffer()->select(pos, d->dragPos);
-    }
-    d->insert_position(pos);
-  } else if (d->dragType == Fl_Text_Display::DRAG_WORD) {
-    if (pos >= d->dragPos) {
-      d->insert_position(d->word_end(pos));
-      d->buffer()->select(d->word_start(d->dragPos), d->word_end(pos));
-    } else {
-      d->insert_position(d->word_start(pos));
-      d->buffer()->select(d->word_start(pos), d->word_end(d->dragPos));
-    }
-  } else if (d->dragType == Fl_Text_Display::DRAG_LINE) {
-    if (pos >= d->dragPos) {
-      d->insert_position(d->buffer()->line_end(pos)+1);
-      d->buffer()->select(d->buffer()->line_start(d->dragPos),
-                          d->buffer()->line_end(pos)+1);
-    } else {
-      d->insert_position(d->buffer()->line_start(pos));
-      d->buffer()->select(d->buffer()->line_start(pos),
-                          d->buffer()->line_end(d->dragPos)+1);
-    }
-  }
-}
-
-
-
-/**
- \brief Timer callback for scroll events.
- 
- This timer event scrolls the text view proportionally to
- how far the mouse pointer has left the text area. This 
- allows for smooth scrolling without "wiggeling" the mouse.
- */
-void Fl_Text_Display::scroll_timer_cb(void *user_data) {
-  Fl_Text_Display *w = (Fl_Text_Display*)user_data;
-  int pos;
-  switch (scroll_direction) {
-    case 1: // mouse is to the right, scroll left
-      w->scroll(w->mTopLineNum, w->mHorizOffset + scroll_amount);
-      pos = w->xy_to_position(w->text_area.x + w->text_area.w, scroll_y, CURSOR_POS);
-      break;
-    case 2: // mouse is to the left, scroll right
-      w->scroll(w->mTopLineNum, w->mHorizOffset + scroll_amount);
-      pos = w->xy_to_position(w->text_area.x, scroll_y, CURSOR_POS);
-      break;
-    case 3: // mouse is above, scroll down
-      w->scroll(w->mTopLineNum + scroll_amount, w->mHorizOffset);
-      pos = w->xy_to_position(scroll_x, w->text_area.y, CURSOR_POS);
-      break;
-    case 4: // mouse is below, scroll up
-      w->scroll(w->mTopLineNum + scroll_amount, w->mHorizOffset);
-      pos = w->xy_to_position(scroll_x, w->text_area.y + w->text_area.h, CURSOR_POS);
-      break;
-    default:
-      return;
-  }
-  fl_text_drag_me(pos, w);
-  Fl::repeat_timeout(.1, scroll_timer_cb, user_data);
-}
-
-
-
-/**
- \brief Event handling.
- */
-int Fl_Text_Display::handle(int event) {
-  if (!buffer()) return 0;
-  // This isn't very elegant!
-  if (!Fl::event_inside(text_area.x, text_area.y, text_area.w, text_area.h) &&
-      !dragging && event != FL_LEAVE && event != FL_ENTER &&
-      event != FL_MOVE && event != FL_FOCUS && event != FL_UNFOCUS &&
-      event != FL_KEYBOARD && event != FL_KEYUP) {
-    return Fl_Group::handle(event);
-  }
-  
-  switch (event) {
-    case FL_ENTER:
-    case FL_MOVE:
-      if (active_r()) {
-        if (Fl::event_inside(text_area.x, text_area.y, text_area.w,
-	                     text_area.h)) window()->cursor(FL_CURSOR_INSERT);
-	else window()->cursor(FL_CURSOR_DEFAULT);
-	return 1;
-      } else {
-        return 0;
-      }
-      
-    case FL_LEAVE:
-    case FL_HIDE:
-      if (active_r() && window()) {
-        window()->cursor(FL_CURSOR_DEFAULT);
-        
-	return 1;
-      } else {
-	return 0;
-      }
-      
-    case FL_PUSH: {
-      if (active_r() && window()) {
-        if (Fl::event_inside(text_area.x, text_area.y, text_area.w,
-                             text_area.h)) window()->cursor(FL_CURSOR_INSERT);
-        else window()->cursor(FL_CURSOR_DEFAULT);
-      }
-      
-      if (Fl::focus() != this) {
-        Fl::focus(this);
-        handle(FL_FOCUS);
-      }
-      if (Fl_Group::handle(event)) return 1;
-      if (Fl::event_state()&FL_SHIFT) return handle(FL_DRAG);
-      dragging = 1;
-      int pos = xy_to_position(Fl::event_x(), Fl::event_y(), CURSOR_POS);
-      dragPos = pos;
-      if (buffer()->primary_selection()->includes(pos)) {
-        dragType = DRAG_START_DND;
-        return 1;
-      }
-      dragType = Fl::event_clicks();
-      if (dragType == DRAG_CHAR) {
-        buffer()->unselect();
-//	Fl::copy("", 0, 0); /* removed for STR 2668 */
-      }
-      else if (dragType == DRAG_WORD) {
-        buffer()->select(word_start(pos), word_end(pos));
-	dragPos = word_start(pos);
-	}
-      
-      if (buffer()->primary_selection()->selected())
-        insert_position(buffer()->primary_selection()->end());
-      else
-        insert_position(pos);
-      show_insert_position();
-      return 1;
-    }
-      
-    case FL_DRAG: {
-      if (dragType==DRAG_NONE)
-        return 1;
-      if (dragType==DRAG_START_DND) {
-        if (!Fl::event_is_click() && Fl::dnd_text_ops()) {
-          const char* copy = buffer()->selection_text();
-          Fl::dnd();
-          free((void*)copy);
-        }
-        return 1;
-      }
-      int X = Fl::event_x(), Y = Fl::event_y(), pos = insert_position();
-      // if we leave the text_area, we start a timer event
-      // that will take care of scrolling and selecting
-      if (Y < text_area.y) {
-        scroll_x = X;
-        scroll_amount = (Y - text_area.y) / 5 - 1;
-        if (!scroll_direction) {
-          Fl::add_timeout(.01, scroll_timer_cb, this);
-        }
-        scroll_direction = 3;
-      } else if (Y >= text_area.y+text_area.h) {
-        scroll_x = X;
-        scroll_amount = (Y - text_area.y - text_area.h) / 5 + 1;
-        if (!scroll_direction) {
-          Fl::add_timeout(.01, scroll_timer_cb, this);
-        }
-        scroll_direction = 4;
-      } else if (X < text_area.x) {
-        scroll_y = Y;
-        scroll_amount = (X - text_area.x) / 2 - 1;
-        if (!scroll_direction) {
-          Fl::add_timeout(.01, scroll_timer_cb, this);
-        }
-        scroll_direction = 2;
-      } else if (X >= text_area.x+text_area.w) {
-        scroll_y = Y;
-        scroll_amount = (X - text_area.x - text_area.w) / 2 + 1;
-        if (!scroll_direction) {
-          Fl::add_timeout(.01, scroll_timer_cb, this);
-        }
-        scroll_direction = 1;
-      } else {
-        if (scroll_direction) {
-          Fl::remove_timeout(scroll_timer_cb, this);
-          scroll_direction = 0;
-        }
-        pos = xy_to_position(X, Y, CURSOR_POS);
-        pos = buffer()->next_char(pos);
-      }
-      fl_text_drag_me(pos, this);
-      return 1;
-    }
-      
-    case FL_RELEASE: {
-      if (Fl::event_is_click() && (! Fl::event_clicks()) && 
-	  buffer()->primary_selection()->includes(dragPos) && !(Fl::event_state()&FL_SHIFT) ) {
-	buffer()->unselect(); // clicking in the selection: unselect and move cursor
-	insert_position(dragPos);
-	return 1;
-      } else if (Fl::event_clicks() == DRAG_LINE && Fl::event_button() == FL_LEFT_MOUSE) {
-        buffer()->select(buffer()->line_start(dragPos), buffer()->next_char(buffer()->line_end(dragPos)));
-	dragPos = line_start(dragPos);
-	dragType = DRAG_CHAR;
-      } else {
-	dragging = 0;
-	if (scroll_direction) {
-	  Fl::remove_timeout(scroll_timer_cb, this);
-	  scroll_direction = 0;
-	}
-	
-	// convert from WORD or LINE selection to CHAR
-	/*if (insert_position() >= dragPos)
-	  dragPos = buffer()->primary_selection()->start();
-	else
-	  dragPos = buffer()->primary_selection()->end();*/
-	dragType = DRAG_CHAR;
-      }
-      
-      const char* copy = buffer()->selection_text();
-      if (*copy) Fl::copy(copy, strlen(copy), 0);
-      free((void*)copy);
-      return 1;
-    }
-      
-    case FL_MOUSEWHEEL:
-      if (Fl::event_dy()) return mVScrollBar->handle(event);
-      else return mHScrollBar->handle(event);
-      
-    case FL_UNFOCUS:
-      if (active_r() && window()) window()->cursor(FL_CURSOR_DEFAULT);
-    case FL_FOCUS:
-      if (buffer()->selected()) {
-        int start, end;
-        if (buffer()->selection_position(&start, &end))
-          redisplay_range(start, end);
-      }
-      if (buffer()->secondary_selected()) {
-        int start, end;
-        if (buffer()->secondary_selection_position(&start, &end))
-          redisplay_range(start, end);
-      }
-      if (buffer()->highlight()) {
-        int start, end;
-        if (buffer()->highlight_position(&start, &end))
-          redisplay_range(start, end);
-      }
-      return 1;
-      
-    case FL_KEYBOARD:
-      // Copy?
-      if ((Fl::event_state()&(FL_CTRL|FL_COMMAND)) && Fl::event_key()=='c') {
-        if (!buffer()->selected()) return 1;
-        const char *copy = buffer()->selection_text();
-        if (*copy) Fl::copy(copy, strlen(copy), 1);
-        free((void*)copy);
-        return 1;
-      }
-      
-      // Select all ?
-      if ((Fl::event_state()&(FL_CTRL|FL_COMMAND)) && Fl::event_key()=='a') {
-        buffer()->select(0,buffer()->length());
-        const char *copy = buffer()->selection_text();
-        if (*copy) Fl::copy(copy, strlen(copy), 0);
-        free((void*)copy);
-        return 1;
-      }
-      
-      if (mVScrollBar->handle(event)) return 1;
-      if (mHScrollBar->handle(event)) return 1;
-      
-      break;
-      
-    case FL_SHORTCUT:
-      if (!(shortcut() ? Fl::test_shortcut(shortcut()) : test_shortcut()))
-        return 0;
-      if (Fl::visible_focus() && handle(FL_FOCUS)) {
-        Fl::focus(this);
-        return 1;
-      }
-      break;
-      
-  }
-  
-  return 0;
-}
-
-
-/*
- Convert an x pixel position into a column number.
- */
-double Fl_Text_Display::x_to_col(double y) const
-{
-  if (!mColumnScale) {
-    mColumnScale = string_width("Mitg", 4, 'A') / 4.0;
-  }
-  return (y/mColumnScale)+0.5;
-}
-
-
-/**
- Convert a column number into an x pixel position.
- */
-double Fl_Text_Display::col_to_x(double col) const
-{
-  if (!mColumnScale) {
-    // recalculate column scale value
-    x_to_col(0); 
-  }
-  return col*mColumnScale;
-}
-
-
-
-
-//
-// End of "$Id: Fl_Text_Display.cxx 8808 2011-06-16 13:31:25Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Text_Editor.cxx b/common/fltk/src/Fl_Text_Editor.cxx
deleted file mode 100644
index 553bd0d..0000000
--- a/common/fltk/src/Fl_Text_Editor.cxx
+++ /dev/null
@@ -1,652 +0,0 @@
-//
-// "$Id: Fl_Text_Editor.cxx 8034 2010-12-15 12:21:55Z AlbrechtS $"
-//
-// Copyright 2001-2010 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-#include <ctype.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Text_Editor.H>
-#include <FL/fl_ask.H>
-
-
-/* Keyboard Control Matrix
-
-key\modifier   plain  Ctrl   Alt  Meta  
-  left          1/1  13/9   0/13  0/9  
-  right         2/2  14/10  0/14  0/10  
-  up            3/19 21/7   0/15  0/17 
-  down          4/20 22/8   0/16  0/18
-  home          9/5  17/0   0/0   0/0
-  end          10/6  18/0   0/0   0/0
-  page up      11/7  23/0   0/11  0/0
-  page down    12/8  24/0   0/12  0/0
-    (FLTK action / OS X action)
-    (adding the shift key extends the selection, all other combinations are no-op)
-
-  0: no-op
-  1: move cursor to the left, at line beginning wrap to end of prev line, at doc start no-op
-  2: move cursor to the right, at line end move to beginning of the next line, at doc end no-op
-  3: move cursor up, at doc top no-op
-  4: move cursor down, at doc bottom no-op
-  5: scroll display to top of text (cursor unchanged)
-  6: scroll display to end of text (cursor unchanged)
-  7: scroll text down one page (cursor unchanged)
-  8: scroll text up one page (cursor unchanged)
-  9: move cursor to beginning of line
- 10: move cursor to end of line
- 11: move cursor up one page and scroll down
- 12: move cursor down one page and scroll up
- 13: move to the beginning of the word or the previous word
- 14: move to the end of the word or the next word
- 15: if start of line: start of prev line, else start of this line
- 16: if end of line: end of next line, else end of this line
- 17: move cursor to the beginning of the document
- 18: move cursor to the end of the document
- 19: move cursor up, at doc top: home, at doc start: no-op)
- 20: move cursor down, at doc bot: end, at doc end: no-op)
- 21: scroll text down one line (cursor unchanged)
- 22: scroll text up one line (cursor unchanged)
- 23: move cursor to the beginning of the top of the screen
- 24: move cursor to the beginning of the bottom of the window
-*/
-
-/**  The constructor creates a new text editor widget.*/
-Fl_Text_Editor::Fl_Text_Editor(int X, int Y, int W, int H,  const char* l)
-    : Fl_Text_Display(X, Y, W, H, l) {
-  mCursorOn = 1;
-  insert_mode_ = 1;
-  key_bindings = 0;
-
-  // handle the default key bindings
-  add_default_key_bindings(&key_bindings);
-
-  // handle everything else
-  default_key_function(kf_default);
-}
-
-#ifndef FL_DOXYGEN
-Fl_Text_Editor::Key_Binding* Fl_Text_Editor::global_key_bindings = 0;
-#endif
-
-// These are the default key bindings every widget should start with
-static struct {
-  int key;
-  int state;
-  Fl_Text_Editor::Key_Func func;
-} default_key_bindings[] = {
-  { FL_Escape,    FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_ignore     },
-  { FL_Enter,     FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_enter      },
-  { FL_KP_Enter,  FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_enter      },
-  { FL_BackSpace, FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_backspace  },
-  { FL_Insert,    FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_insert     },
-  { FL_Delete,    FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_delete     },
-  { FL_Home,      0,                        Fl_Text_Editor::kf_move       },
-  { FL_End,       0,                        Fl_Text_Editor::kf_move       },
-  { FL_Left,      0,                        Fl_Text_Editor::kf_move       },
-  { FL_Up,        0,                        Fl_Text_Editor::kf_move       },
-  { FL_Right,     0,                        Fl_Text_Editor::kf_move       },
-  { FL_Down,      0,                        Fl_Text_Editor::kf_move       },
-  { FL_Page_Up,   0,                        Fl_Text_Editor::kf_move       },
-  { FL_Page_Down, 0,                        Fl_Text_Editor::kf_move       },
-  { FL_Home,      FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_End,       FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Left,      FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Up,        FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Right,     FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Down,      FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Page_Up,   FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Page_Down, FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Home,      FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_End,       FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Left,      FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Up,        FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Right,     FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Down,      FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Page_Up,   FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Page_Down, FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Home,      FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_End,       FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Left,      FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Up,        FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Right,     FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Down,      FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Page_Up,   FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Page_Down, FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-//{ FL_Clear,	  0,                        Fl_Text_Editor::delete_to_eol },
-  { 'z',          FL_CTRL,                  Fl_Text_Editor::kf_undo	  },
-  { '/',          FL_CTRL,                  Fl_Text_Editor::kf_undo	  },
-  { 'x',          FL_CTRL,                  Fl_Text_Editor::kf_cut        },
-  { FL_Delete,    FL_SHIFT,                 Fl_Text_Editor::kf_cut        },
-  { 'c',          FL_CTRL,                  Fl_Text_Editor::kf_copy       },
-  { FL_Insert,    FL_CTRL,                  Fl_Text_Editor::kf_copy       },
-  { 'v',          FL_CTRL,                  Fl_Text_Editor::kf_paste      },
-  { FL_Insert,    FL_SHIFT,                 Fl_Text_Editor::kf_paste      },
-  { 'a',          FL_CTRL,                  Fl_Text_Editor::kf_select_all },
-
-#ifdef __APPLE__
-  // Define CMD+key accelerators...
-  { 'z',          FL_COMMAND,               Fl_Text_Editor::kf_undo       },
-  { 'x',          FL_COMMAND,               Fl_Text_Editor::kf_cut        },
-  { 'c',          FL_COMMAND,               Fl_Text_Editor::kf_copy       },
-  { 'v',          FL_COMMAND,               Fl_Text_Editor::kf_paste      },
-  { 'a',          FL_COMMAND,               Fl_Text_Editor::kf_select_all },
-  { FL_Left,      FL_COMMAND,               Fl_Text_Editor::kf_meta_move  },
-  { FL_Right,     FL_COMMAND,               Fl_Text_Editor::kf_meta_move  },
-  { FL_Up,        FL_COMMAND,               Fl_Text_Editor::kf_meta_move  },
-  { FL_Down,      FL_COMMAND,               Fl_Text_Editor::kf_meta_move  },
-  { FL_Left,      FL_COMMAND|FL_SHIFT,      Fl_Text_Editor::kf_m_s_move   },
-  { FL_Right,     FL_COMMAND|FL_SHIFT,      Fl_Text_Editor::kf_m_s_move   },
-  { FL_Up,        FL_COMMAND|FL_SHIFT,      Fl_Text_Editor::kf_m_s_move   },
-  { FL_Down,      FL_COMMAND|FL_SHIFT,      Fl_Text_Editor::kf_m_s_move   },
-#endif // __APPLE__
-
-  { 0,            0,                        0                             }
-};
-
-/**  Adds all of the default editor key bindings to the specified key binding list.*/
-void Fl_Text_Editor::add_default_key_bindings(Key_Binding** list) {
-  for (int i = 0; default_key_bindings[i].key; i++) {
-    add_key_binding(default_key_bindings[i].key,
-                    default_key_bindings[i].state,
-                    default_key_bindings[i].func,
-                    list);
-  }
-}
-
-/**  Returns the function associated with a key binding.*/
-Fl_Text_Editor::Key_Func Fl_Text_Editor::bound_key_function(int key, int state, Key_Binding* list) {
-  Key_Binding* cur;
-  for (cur = list; cur; cur = cur->next)
-    if (cur->key == key)
-      if (cur->state == FL_TEXT_EDITOR_ANY_STATE || cur->state == state)
-        break;
-  if (!cur) return 0;
-  return cur->function;
-}
-
-/**  Removes all of the key bindings associated with the text editor or list.*/
-void Fl_Text_Editor::remove_all_key_bindings(Key_Binding** list) {
-  Key_Binding *cur, *next;
-  for (cur = *list; cur; cur = next) {
-    next = cur->next;
-    delete cur;
-  }
-  *list = 0;
-}
-
-/** Removes the key binding associated with the key "key" of state "state" */
-void Fl_Text_Editor::remove_key_binding(int key, int state, Key_Binding** list) {
-  Key_Binding *cur, *last = 0;
-  for (cur = *list; cur; last = cur, cur = cur->next)
-    if (cur->key == key && cur->state == state) break;
-  if (!cur) return;
-  if (last) last->next = cur->next;
-  else *list = cur->next;
-  delete cur;
-}
-/** Adds a key of state "state" with the function "function" */
-void Fl_Text_Editor::add_key_binding(int key, int state, Key_Func function,
-                                Key_Binding** list) {
-  Key_Binding* kb = new Key_Binding;
-  kb->key = key;
-  kb->state = state;
-  kb->function = function;
-  kb->next = *list;
-  *list = kb;
-}
-
-////////////////////////////////////////////////////////////////
-
-static void kill_selection(Fl_Text_Editor* e) {
-  if (e->buffer()->selected()) {
-    e->insert_position(e->buffer()->primary_selection()->start());
-    e->buffer()->remove_selection();
-  }
-}
-
-/** Inserts the text associated with the key */
-int Fl_Text_Editor::kf_default(int c, Fl_Text_Editor* e) {
-  // FIXME: this function is a mess! Fix this!
-  if (!c || (!isprint(c) && c != '\t')) return 0;
-  char s[2] = "\0";
-  s[0] = (char)c;
-  kill_selection(e);
-  if (e->insert_mode()) e->insert(s);
-  else e->overstrike(s);
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-/** Ignores the keypress */
-int Fl_Text_Editor::kf_ignore(int, Fl_Text_Editor*) {
-  return 0; // don't handle
-}
-/**  Does a backspace in the current buffer.*/
-int Fl_Text_Editor::kf_backspace(int, Fl_Text_Editor* e) {
-  if (!e->buffer()->selected() && e->move_left()) {
-    int p1 = e->insert_position();
-    int p2 = e->buffer()->next_char(p1);
-    e->buffer()->select(p1, p2);
-  }
-  kill_selection(e);
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-/** Inserts a newline at the current cursor position */
-int Fl_Text_Editor::kf_enter(int, Fl_Text_Editor* e) {
-  kill_selection(e);
-  e->insert("\n");
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-extern void fl_text_drag_me(int pos, Fl_Text_Display* d);
-/**  Moves the text cursor in the direction indicated by key c.*/
-int Fl_Text_Editor::kf_move(int c, Fl_Text_Editor* e) {
-  int i;
-  int selected = e->buffer()->selected();
-  if (!selected)
-    e->dragPos = e->insert_position();
-  e->buffer()->unselect();
-  Fl::copy("", 0, 0);
-  switch (c) {
-  case FL_Home:
-      e->insert_position(e->buffer()->line_start(e->insert_position()));
-      break;
-    case FL_End:
-      e->insert_position(e->buffer()->line_end(e->insert_position()));
-      break;
-    case FL_Left:
-      e->move_left();
-      break;
-    case FL_Right:
-      e->move_right();
-      break;
-    case FL_Up:
-      e->move_up();
-      break;
-    case FL_Down:
-      e->move_down();
-      break;
-    case FL_Page_Up:
-      for (i = 0; i < e->mNVisibleLines - 1; i++) e->move_up();
-      break;
-    case FL_Page_Down:
-      for (i = 0; i < e->mNVisibleLines - 1; i++) e->move_down();
-      break;
-  }
-  e->show_insert_position();
-  return 1;
-}
-
-/**  Extends the current selection in the direction of key c.*/
-int Fl_Text_Editor::kf_shift_move(int c, Fl_Text_Editor* e) {
-  kf_move(c, e);
-  fl_text_drag_me(e->insert_position(), e);
-  char *copy = e->buffer()->selection_text();
-  if (copy) {
-    Fl::copy(copy, strlen(copy), 0);
-    free(copy);
-    }
-  return 1;
-}
-/** Moves the current text cursor in the direction indicated by control key */
-int Fl_Text_Editor::kf_ctrl_move(int c, Fl_Text_Editor* e) {
-  if (!e->buffer()->selected())
-    e->dragPos = e->insert_position();
-  if (c != FL_Up && c != FL_Down) {
-    e->buffer()->unselect();
-    Fl::copy("", 0, 0);
-    e->show_insert_position();
-  }
-  switch (c) {
-    case FL_Home:
-      e->insert_position(0);
-      e->scroll(0, 0);
-      break;
-    case FL_End:
-      e->insert_position(e->buffer()->length());
-      e->scroll(e->count_lines(0, e->buffer()->length(), 1), 0);
-      break;
-    case FL_Left:
-      e->previous_word();
-      break;
-    case FL_Right:
-      e->next_word();
-      break;
-    case FL_Up:
-      e->scroll(e->mTopLineNum-1, e->mHorizOffset);
-      break;
-    case FL_Down:
-      e->scroll(e->mTopLineNum+1, e->mHorizOffset);
-      break;
-    case FL_Page_Up:
-      e->insert_position(e->mLineStarts[0]);
-      break;
-    case FL_Page_Down:
-      e->insert_position(e->mLineStarts[e->mNVisibleLines-2]);
-      break;
-  }
-  return 1;
-}
-
-/** Moves the current text cursor in the direction indicated by meta key */
-int Fl_Text_Editor::kf_meta_move(int c, Fl_Text_Editor* e) {
-  if (!e->buffer()->selected())
-    e->dragPos = e->insert_position();
-  if (c != FL_Up && c != FL_Down) {
-    e->buffer()->unselect();
-    Fl::copy("", 0, 0);
-    e->show_insert_position();
-  }
-  switch (c) {
-    case FL_Up:				// top of buffer
-      e->insert_position(0);
-      e->scroll(0, 0);
-      break;
-    case FL_Down:			// end of buffer
-      e->insert_position(e->buffer()->length());
-      e->scroll(e->count_lines(0, e->buffer()->length(), 1), 0);
-      break;
-    case FL_Left:			// beginning of line
-      kf_move(FL_Home, e);
-      break;
-    case FL_Right:			// end of line
-      kf_move(FL_End, e);
-      break;
-  }
-  return 1;
-}
-
-/** Extends the current selection in the direction indicated by meta key c. */
-int Fl_Text_Editor::kf_m_s_move(int c, Fl_Text_Editor* e) {
-  kf_meta_move(c, e);
-  fl_text_drag_me(e->insert_position(), e);
-  return 1;
-}
-
-/** Extends the current selection in the direction indicated by control key c. */
-int Fl_Text_Editor::kf_c_s_move(int c, Fl_Text_Editor* e) {
-  kf_ctrl_move(c, e);
-  fl_text_drag_me(e->insert_position(), e);
-  return 1;
-}
-
-/**  Moves the text cursor to the beginning of the current line.*/
-int Fl_Text_Editor::kf_home(int, Fl_Text_Editor* e) {
-    return kf_move(FL_Home, e);
-}
-
-/**  Moves the text cursor to the end of the current line.*/
-int Fl_Text_Editor::kf_end(int, Fl_Text_Editor* e) {
-  return kf_move(FL_End, e);
-}
-
-/**  Moves the text cursor one character to the left.*/
-int Fl_Text_Editor::kf_left(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Left, e);
-}
-
-/**  Moves the text cursor one line up.*/
-int Fl_Text_Editor::kf_up(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Up, e);
-}
-
-/**  Moves the text cursor one character to the right.*/
-int Fl_Text_Editor::kf_right(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Right, e);
-}
-/**  Moves the text cursor one line down.*/
-int Fl_Text_Editor::kf_down(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Down, e);
-}
-
-/**  Moves the text cursor up one page.*/
-int Fl_Text_Editor::kf_page_up(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Page_Up, e);
-}
-
-/**  Moves the text cursor down one page.*/
-int Fl_Text_Editor::kf_page_down(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Page_Down, e);
-}
-/**  Toggles the insert mode in the text editor.*/
-int Fl_Text_Editor::kf_insert(int, Fl_Text_Editor* e) {
-  e->insert_mode(e->insert_mode() ? 0 : 1);
-  return 1;
-}
-
-/**  Does a delete of selected text or the current character in the current buffer.*/
-int Fl_Text_Editor::kf_delete(int, Fl_Text_Editor* e) {
-  if (!e->buffer()->selected()) {
-    int p1 = e->insert_position();
-    int p2 = e->buffer()->next_char(p1);
-    e->buffer()->select(p1, p2);
-  }
-
-  kill_selection(e);
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-/**  Does a copy of selected text or the current character in the current buffer.*/
-int Fl_Text_Editor::kf_copy(int, Fl_Text_Editor* e) {
-  if (!e->buffer()->selected()) return 1;
-  const char *copy = e->buffer()->selection_text();
-  if (*copy) Fl::copy(copy, strlen(copy), 1);
-  free((void*)copy);
-  e->show_insert_position();
-  return 1;
-}
-
-/**  Does a cut of selected text in the current buffer.*/
-int Fl_Text_Editor::kf_cut(int c, Fl_Text_Editor* e) {
-  kf_copy(c, e);
-  kill_selection(e);
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-/**  Does a paste of selected text in the current buffer.*/
-int Fl_Text_Editor::kf_paste(int, Fl_Text_Editor* e) {
-  kill_selection(e);
-  Fl::paste(*e, 1);
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-/**  Selects all text in the current buffer.*/
-int Fl_Text_Editor::kf_select_all(int, Fl_Text_Editor* e) {
-  e->buffer()->select(0, e->buffer()->length());
-  const char *copy = e->buffer()->selection_text();
-  if (*copy) Fl::copy(copy, strlen(copy), 0);
-  free((void*)copy);
-  return 1;
-}
-/**  Undo last edit in the current buffer. Also deselect previous selection. */
-int Fl_Text_Editor::kf_undo(int , Fl_Text_Editor* e) {
-  e->buffer()->unselect();
-  Fl::copy("", 0, 0);
-  int crsr;
-  int ret = e->buffer()->undo(&crsr);
-  e->insert_position(crsr);
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return ret;
-}
-
-/** Handles a key press in the editor */
-int Fl_Text_Editor::handle_key() {
-  // Call FLTK's rules to try to turn this into a printing character.
-  // This uses the right-hand ctrl key as a "compose prefix" and returns
-  // the changes that should be made to the text, as a number of
-  // bytes to delete and a string to insert:
-  int del = 0;
-  if (Fl::compose(del)) {
-    if (del) {
-      int dp = insert_position(), di = del;
-      while (di--) dp = buffer()->prev_char_clipped(dp);
-      buffer()->select(dp, insert_position());
-    }
-    kill_selection(this);
-    if (Fl::event_length()) {
-      if (insert_mode()) insert(Fl::event_text());
-      else overstrike(Fl::event_text());
-    }
-    show_insert_position();
-    set_changed();
-    if (when()&FL_WHEN_CHANGED) do_callback();
-    return 1;
-  }
-
-  int key = Fl::event_key(), state = Fl::event_state(), c = Fl::event_text()[0];
-  state &= FL_SHIFT|FL_CTRL|FL_ALT|FL_META; // only care about these states
-  Key_Func f;
-  f = bound_key_function(key, state, global_key_bindings);
-  if (!f) f = bound_key_function(key, state, key_bindings);
-  if (f) return f(key, this);
-  if (default_key_function_ && !state) return default_key_function_(c, this);
-  return 0;
-}
-
-/** does or does not a callback according to changed() and when() settings */
-void Fl_Text_Editor::maybe_do_callback() {
-//  printf("Fl_Text_Editor::maybe_do_callback()\n");
-//  printf("changed()=%d, when()=%x\n", changed(), when());
-  if (changed() || (when()&FL_WHEN_NOT_CHANGED)) do_callback();
-}
-
-int Fl_Text_Editor::handle(int event) {
-  static int dndCursorPos;
-  
-  if (!buffer()) return 0;
-
-  switch (event) {
-    case FL_FOCUS:
-      show_cursor(mCursorOn); // redraws the cursor
-      if (buffer()->selected()) redraw(); // Redraw selections...
-      Fl::focus(this);
-      return 1;
-
-    case FL_UNFOCUS:
-      show_cursor(mCursorOn); // redraws the cursor
-      if (buffer()->selected()) redraw(); // Redraw selections...
-    case FL_HIDE:
-      if (when() & FL_WHEN_RELEASE) maybe_do_callback();
-      return 1;
-
-    case FL_KEYBOARD:
-      if (active_r() && window() && this == Fl::belowmouse()) 
-        window()->cursor(FL_CURSOR_NONE);
-      return handle_key();
-
-    case FL_PASTE:
-      if (!Fl::event_text()) {
-        fl_beep();
-	return 1;
-      }
-      buffer()->remove_selection();
-      if (insert_mode()) insert(Fl::event_text());
-      else overstrike(Fl::event_text());
-      show_insert_position();
-      set_changed();
-      if (when()&FL_WHEN_CHANGED) do_callback();
-      return 1;
-
-    case FL_ENTER:
-// MRS: WIN32 only?  Need to test!
-//    case FL_MOVE:
-      show_cursor(mCursorOn);
-      return 1;
-
-    case FL_PUSH:
-      if (Fl::event_button() == 2) {
-        // don't let the text_display see this event
-        if (Fl_Group::handle(event)) return 1;
-        dragType = DRAG_NONE;
-	if(buffer()->selected()) {
-	  buffer()->unselect();
-	  }
-	int pos = xy_to_position(Fl::event_x(), Fl::event_y(), CURSOR_POS);
-        insert_position(pos);
-        Fl::paste(*this, 0);
-        Fl::focus(this);
-        set_changed();
-        if (when()&FL_WHEN_CHANGED) do_callback();
-        return 1;
-      }
-      break;
-
-    case FL_SHORTCUT:
-      if (!(shortcut() ? Fl::test_shortcut(shortcut()) : test_shortcut()))
-        return 0;
-      if (Fl::visible_focus() && handle(FL_FOCUS)) {
-        Fl::focus(this);
-        return 1;
-      }
-      break;
-      
-      // Handle drag'n'drop attempt by the user. This is a simplified 
-      // implementation which allows dnd operations onto the scroll bars.
-    case FL_DND_ENTER: // save the current cursor position
-      if (Fl::visible_focus() && handle(FL_FOCUS))
-        Fl::focus(this);
-      show_cursor(mCursorOn);
-      dndCursorPos = insert_position();
-      /* fall through */
-    case FL_DND_DRAG: // show a temporary insertion cursor
-      insert_position(xy_to_position(Fl::event_x(), Fl::event_y(), CURSOR_POS));
-      return 1;      
-    case FL_DND_LEAVE: // restore original cursor
-      insert_position(dndCursorPos);
-      return 1;      
-    case FL_DND_RELEASE: // keep insertion cursor and wait for the FL_PASTE event
-      buffer()->unselect(); // FL_PASTE must not destroy current selection!
-      return 1;
-  }
-
-  return Fl_Text_Display::handle(event);
-}
-
-//
-// End of "$Id: Fl_Text_Editor.cxx 8034 2010-12-15 12:21:55Z AlbrechtS $".
-//
diff --git a/common/fltk/src/Fl_Tile.cxx b/common/fltk/src/Fl_Tile.cxx
deleted file mode 100644
index 0d245db..0000000
--- a/common/fltk/src/Fl_Tile.cxx
+++ /dev/null
@@ -1,214 +0,0 @@
-//
-// "$Id: Fl_Tile.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Tile widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// Group of 2 or 4 "tiles" that can be resized by dragging border
-// The size of the first child determines where the resize border is.
-// The resizebox is used to limit where the border can be dragged to.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Tile.H>
-#include <FL/Fl_Window.H>
-#include <stdlib.h>
-
-// Drag the edges that were initially at oldx,oldy to newx,newy:
-// pass zero as oldx or oldy to disable drag in that direction:
-/** 
-  Drag the intersection at from_x,from_y to to_x,to_y.
-  This redraws all the necessary children.
-*/
-void Fl_Tile::position(int oix, int oiy, int newx, int newy) {
-  Fl_Widget*const* a = array();
-  int *p = sizes();
-  p += 8; // skip group & resizable's saved size
-  for (int i=children(); i--; p += 4) {
-    Fl_Widget* o = *a++;
-    if (o == resizable()) continue;
-    int X = o->x();
-    int R = X+o->w();
-    if (oix) {
-      int t = p[0];
-      if (t == oix || (t>oix && X<newx) || (t<oix && X>newx) ) X = newx;
-      t = p[1];
-      if (t == oix || (t>oix && R<newx) || (t<oix && R>newx) ) R = newx;
-    }
-    int Y = o->y();
-    int B = Y+o->h();
-    if (oiy) {
-      int t = p[2];
-      if (t == oiy || (t>oiy && Y<newy) || (t<oiy && Y>newy) ) Y = newy;
-      t = p[3];
-      if (t == oiy || (t>oiy && B<newy) || (t<oiy && B>newy) ) B = newy;
-    }
-    o->damage_resize(X,Y,R-X,B-Y);
-  }
-}
-
-// move the lower-right corner (sort of):
-void Fl_Tile::resize(int X,int Y,int W,int H) {
-  //Fl_Group::resize(X, Y, W, H);
-  //return;
-  // remember how much to move the child widgets:
-  int dx = X-x();
-  int dy = Y-y();
-  int dw = W-w();
-  int dh = H-h();
-  int *p = sizes();
-  // resize this (skip the Fl_Group resize):
-  Fl_Widget::resize(X,Y,W,H);
-  // find bottom-right of resiable:
-  int OR = p[5];
-  int NR = X+W-(p[1]-OR);
-  int OB = p[7];
-  int NB = Y+H-(p[3]-OB);
-  // move everything to be on correct side of new resizable:
-  Fl_Widget*const* a = array();
-  p += 8;
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    int xx = o->x()+dx;
-    int R = xx+o->w();
-    if (*p++ >= OR) xx += dw; else if (xx > NR) xx = NR;
-    if (*p++ >= OR) R += dw; else if (R > NR) R = NR;
-    int yy = o->y()+dy;
-    int B = yy+o->h();
-    if (*p++ >= OB) yy += dh; else if (yy > NB) yy = NB;
-    if (*p++ >= OB) B += dh; else if (B > NB) B = NB;
-    o->resize(xx,yy,R-xx,B-yy);
-    // do *not* call o->redraw() here! If you do, and the tile is inside a 
-    // scroll, it'll set the damage areas wrong for all children!
-  }
-}
-
-static void set_cursor(Fl_Tile*t, Fl_Cursor c) {
-  static Fl_Cursor cursor;
-  if (cursor == c || !t->window()) return;
-  cursor = c;
-#ifdef __sgi
-  t->window()->cursor(c,FL_RED,FL_WHITE);
-#else
-  t->window()->cursor(c);
-#endif
-}
-
-static Fl_Cursor cursors[4] = {
-  FL_CURSOR_DEFAULT,
-  FL_CURSOR_WE,
-  FL_CURSOR_NS,
-  FL_CURSOR_MOVE};
-
-int Fl_Tile::handle(int event) {
-  static int sdrag;
-  static int sdx, sdy;
-  static int sx, sy;
-#define DRAGH 1
-#define DRAGV 2
-#define GRABAREA 4
-
-  int mx = Fl::event_x();
-  int my = Fl::event_y();
-
-  switch (event) {
-
-  case FL_MOVE:
-  case FL_ENTER:
-  case FL_PUSH:
-    // don't potentially change the mouse cursor if inactive:
-    if (!active()) break; // will cascade inherited handle()
-    {
-    int mindx = 100;
-    int mindy = 100;
-    int oldx = 0;
-    int oldy = 0;
-    Fl_Widget*const* a = array();
-    int *q = sizes();
-    int *p = q+8;
-    for (int i=children(); i--; p += 4) {
-      Fl_Widget* o = *a++;
-      if (o == resizable()) continue;
-      if (p[1]<q[1] && o->y()<=my+GRABAREA && o->y()+o->h()>=my-GRABAREA) {
-	int t = mx - (o->x()+o->w());
-	if (abs(t) < mindx) {
-	  sdx = t;
-	  mindx = abs(t);
-	  oldx = p[1];
-	}
-      }
-      if (p[3]<q[3] && o->x()<=mx+GRABAREA && o->x()+o->w()>=mx-GRABAREA) {
-	int t = my - (o->y()+o->h());
-	if (abs(t) < mindy) {
-	  sdy = t;
-	  mindy = abs(t);
-	  oldy = p[3];
-	}
-      }
-    }
-    sdrag = 0; sx = sy = 0;
-    if (mindx <= GRABAREA) {sdrag = DRAGH; sx = oldx;}
-    if (mindy <= GRABAREA) {sdrag |= DRAGV; sy = oldy;}
-    set_cursor(this, cursors[sdrag]);
-    if (sdrag) return 1;
-    return Fl_Group::handle(event);
-  }
-
-  case FL_LEAVE:
-    set_cursor(this, FL_CURSOR_DEFAULT);
-    break;
-
-  case FL_DRAG:
-    // This is necessary if CONSOLIDATE_MOTION in Fl_x.cxx is turned off:
-    // if (damage()) return 1; // don't fall behind
-  case FL_RELEASE: {
-    if (!sdrag) return 0; // should not happen
-    Fl_Widget* r = resizable(); if (!r) r = this;
-    int newx;
-    if (sdrag&DRAGH) {
-      newx = Fl::event_x()-sdx;
-      if (newx < r->x()) newx = r->x();
-      else if (newx > r->x()+r->w()) newx = r->x()+r->w();
-    } else
-      newx = sx;
-    int newy;
-    if (sdrag&DRAGV) {
-      newy = Fl::event_y()-sdy;
-      if (newy < r->y()) newy = r->y();
-      else if (newy > r->y()+r->h()) newy = r->y()+r->h();
-    } else
-      newy = sy;
-    position(sx,sy,newx,newy);
-    if (event == FL_DRAG) set_changed();
-    do_callback();
-    return 1;}
-
-  }
-
-  return Fl_Group::handle(event);
-}
-
-//
-// End of "$Id: Fl_Tile.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Tiled_Image.cxx b/common/fltk/src/Fl_Tiled_Image.cxx
deleted file mode 100644
index 1857480..0000000
--- a/common/fltk/src/Fl_Tiled_Image.cxx
+++ /dev/null
@@ -1,135 +0,0 @@
-//
-// "$Id: Fl_Tiled_Image.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Tiled image code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-#include <FL/Fl.H>
-#include <FL/Fl_Tiled_Image.H>
-#include <FL/fl_draw.H>
-
-/**
-  The constructors create a new tiled image containing the specified image.
-  Use a width and height of 0 to tile the whole window/widget.
-*/
-Fl_Tiled_Image::Fl_Tiled_Image(Fl_Image *i,	// I - Image to tile
-                               int      W,	// I - Width of tiled area
-			       int      H) :	// I - Height of tiled area
-  Fl_Image(W,H,0) {
-  image_       = i;
-  alloc_image_ = 0;
-
-  if (W == 0) w(Fl::w());
-  if (H == 0) h(Fl::h());
-}
-/**
-  The destructor frees all memory and server resources that are used by
-  the tiled image.
-*/
-  Fl_Tiled_Image::~Fl_Tiled_Image() {
-  if (alloc_image_) delete image_;
-}
-
-
-//
-// 'Fl_Tiled_Image::copy()' - Copy and resize a tiled image...
-//
-
-Fl_Image *			// O - New image
-Fl_Tiled_Image::copy(int W,	// I - New width
-                     int H) {	// I - New height
-  if (W == w() && H == h()) return this;
-  else return new Fl_Tiled_Image(image_, W, H);
-}
-
-
-//
-// 'Fl_Tiled_Image::color_average()' - Blend colors...
-//
-
-void
-Fl_Tiled_Image::color_average(Fl_Color c,	// I - Color to blend with
-                              float    i) {	// I - Blend fraction
-  if (!alloc_image_) {
-    image_       = image_->copy();
-    alloc_image_ = 1;
-  }
-
-  image_->color_average(c, i);
-}
-
-
-//
-// 'Fl_Tiled_Image::desaturate()' - Convert the image to grayscale...
-//
-
-void
-Fl_Tiled_Image::desaturate() {
-  if (!alloc_image_) {
-    image_       = image_->copy();
-    alloc_image_ = 1;
-  }
-
-  image_->desaturate();
-}
-
-
-//
-// 'Fl_Tiled_Image::draw()' - Draw a shared image...
-//
-
-void
-Fl_Tiled_Image::draw(int X,	// I - Starting X position
-                     int Y,	// I - Starting Y position
-		     int W,	// I - Width of area to be filled
-		     int H,	// I - Height of area to be filled
-		     int cx,	// I - "Source" X position
-		     int cy) {	// I - "Source" Y position
-  if (!image_->w() || !image_->h()) return;
-  if (W == 0) W = Fl::w();
-  if (H == 0) H = Fl::h();
-
-  fl_push_clip(X, Y, W, H);
-
-  X += cx;
-  Y += cy;
-
-  X = X - (X % image_->w());
-  Y = Y - (Y % image_->h());
-
-  W += X;
-  H += Y;
-
-  for (int yy = Y; yy < H; yy += image_->h())
-    for (int xx = X; xx < W; xx += image_->w())
-      image_->draw(xx, yy);
-
-  fl_pop_clip();
-}
-
-
-//
-// End of "$Id: Fl_Tiled_Image.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Tooltip.cxx b/common/fltk/src/Fl_Tooltip.cxx
deleted file mode 100644
index 05b6e23..0000000
--- a/common/fltk/src/Fl_Tooltip.cxx
+++ /dev/null
@@ -1,351 +0,0 @@
-//
-// "$Id: Fl_Tooltip.cxx 8788 2011-06-08 14:35:22Z matt $"
-//
-// Tooltip source file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Tooltip.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Menu_Window.H>
-
-#include <stdio.h>
-#include <string.h>	// strdup()
-
-float		Fl_Tooltip::delay_ = 1.0f;
-float		Fl_Tooltip::hoverdelay_ = 0.2f;
-Fl_Color	Fl_Tooltip::color_ = fl_color_cube(FL_NUM_RED - 1,
-		                                   FL_NUM_GREEN - 1,
-						   FL_NUM_BLUE - 2);
-Fl_Color	Fl_Tooltip::textcolor_ = FL_BLACK;
-Fl_Font         Fl_Tooltip::font_ = FL_HELVETICA;
-Fl_Fontsize     Fl_Tooltip::size_ = -1;
-
-#define MAX_WIDTH 400
-
-static const char* tip;
-/**
-    This widget creates a tooltip box window, with no caption.
-*/
-class Fl_TooltipBox : public Fl_Menu_Window {
-public:
-  /** Creates the box window */
-  Fl_TooltipBox() : Fl_Menu_Window(0, 0) {
-    set_override();
-    set_tooltip_window();
-    end();
-  }
-  void draw();
-  void layout();
-  /** Shows the tooltip windows only if a tooltip text is available. */
-  void show() {
-    if (!tip) return;
-    
-    Fl_Menu_Window::show();
-  }
-};
-
-Fl_Widget* Fl_Tooltip::widget_ = 0;
-static Fl_TooltipBox *window = 0;
-static int Y,H;
-
-#ifdef __APPLE__
-// returns the unique tooltip window
-Fl_Window *Fl_Tooltip::current_window(void)
-{
-  return (Fl_Window*)window;
-}
-#endif
-
-void Fl_TooltipBox::layout() {
-  fl_font(Fl_Tooltip::font(), Fl_Tooltip::size());
-  int ww, hh;
-  ww = MAX_WIDTH;
-  fl_measure(tip, ww, hh, FL_ALIGN_LEFT|FL_ALIGN_WRAP|FL_ALIGN_INSIDE);
-  ww += 6; hh += 6;
-
-  // find position on the screen of the widget:
-  int ox = Fl::event_x_root();
-  int oy = Y + H+2;
-  for (Fl_Widget* p = Fl_Tooltip::current(); p; p = p->window()) {
-    oy += p->y();
-  }
-  int scr_x, scr_y, scr_w, scr_h;
-  Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h);
-  if (ox+ww > scr_x+scr_w) ox = scr_x+scr_w - ww;
-  if (ox < scr_x) ox = scr_x;
-  if (H > 30) {
-    oy = Fl::event_y_root()+13;
-    if (oy+hh > scr_y+scr_h) oy -= 23+hh;
-  } else {
-    if (oy+hh > scr_y+scr_h) oy -= (4+hh+H);
-  }
-  if (oy < scr_y) oy = scr_y;
-
-  resize(ox, oy, ww, hh);
-}
-
-void Fl_TooltipBox::draw() {
-  draw_box(FL_BORDER_BOX, 0, 0, w(), h(), Fl_Tooltip::color());
-  fl_color(Fl_Tooltip::textcolor());
-  fl_font(Fl_Tooltip::font(), Fl_Tooltip::size());
-  fl_draw(tip, 3, 3, w()-6, h()-6, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP));
-}
-
-static char recent_tooltip;
-
-static void recent_timeout(void*) {
-#ifdef DEBUG
-  puts("recent_timeout();");
-#endif // DEBUG
-
-  recent_tooltip = 0;
-}
-
-static char recursion;
-
-static void tooltip_timeout(void*) {
-#ifdef DEBUG
-  puts("tooltip_timeout();");
-#endif // DEBUG
-
-  if (recursion) return;
-  recursion = 1;
-  if (!tip || !*tip) {
-    if (window) window->hide();
-  } else {
-    int condition = 1;
-#if !(defined(__APPLE__) || defined(WIN32))
-    condition = (Fl::grab() == NULL);
-#endif
-    if ( condition ) {
-      if (!window) window = new Fl_TooltipBox;
-      // this cast bypasses the normal Fl_Window label() code:
-      ((Fl_Widget*)window)->label(tip);
-      window->layout();
-      window->redraw();
-  //    printf("tooltip_timeout: Showing window %p with tooltip \"%s\"...\n",
-  //           window, tip ? tip : "(null)");
-      window->show();
-    }
-  }
-
-  Fl::remove_timeout(recent_timeout);
-  recent_tooltip = 1;
-  recursion = 0;
-}
-
-/**
-   This method is called when the mouse pointer enters a widget.
-   <P>If this widget or one of its parents has a tooltip, enter it. This
-   will do nothing if this is the current widget (even if the mouse moved
-   out so an exit() was done and then moved back in). If no tooltip can
-   be found do Fl_Tooltip::exit_(). If you don't want this behavior (for instance
-   if you want the tooltip to reappear when the mouse moves back in)
-   call the fancier enter_area() below.
-*/
-void Fl_Tooltip::enter_(Fl_Widget* w) {
-#ifdef DEBUG
-  printf("Fl_Tooltip::enter_(w=%p)\n", w);
-  printf("    window=%p\n", window);
-#endif // DEBUG
-
-  // find the enclosing group with a tooltip:
-  Fl_Widget* tw = w;
-  for (;;) {
-    if (!tw) {exit_(0); return;}
-    if (tw == widget_) return;
-    if (tw->tooltip()) break;
-    tw = tw->parent();
-  }
-  enter_area(w, 0, 0, w->w(), w->h(), tw->tooltip());
-}
-/** 
-     Sets the current widget target. 
-     Acts as though enter(widget) was done but does not pop up a
-     tooltip.  This is useful to prevent a tooltip from reappearing when
-     a modal overlapping window is deleted. FLTK does this automatically
-     when you click the mouse button.
-*/
-void Fl_Tooltip::current(Fl_Widget* w) {
-#ifdef DEBUG
-  printf("Fl_Tooltip::current(w=%p)\n", w);
-#endif // DEBUG
-
-  exit_(0);
-  // find the enclosing group with a tooltip:
-  Fl_Widget* tw = w;
-  for (;;) {
-    if (!tw) return;
-    if (tw->tooltip()) break;
-    tw = tw->parent();
-  }
-  // act just like Fl_Tooltip::enter_() except we can remember a zero:
-  widget_ = w;
-}
-
-// Hide any visible tooltip.
-/**  This method is called when the mouse pointer leaves a  widget. */
-void Fl_Tooltip::exit_(Fl_Widget *w) {
-#ifdef DEBUG
-  printf("Fl_Tooltip::exit_(w=%p)\n", w);
-  printf("    widget=%p, window=%p\n", widget_, window);
-#endif // DEBUG
-
-  if (!widget_ || (w && w == window)) return;
-  widget_ = 0;
-  Fl::remove_timeout(tooltip_timeout);
-  Fl::remove_timeout(recent_timeout);
-  if (window && window->visible()) window->hide();
-  if (recent_tooltip) {
-    if (Fl::event_state() & FL_BUTTONS) recent_tooltip = 0;
-    else Fl::add_timeout(Fl_Tooltip::hoverdelay(), recent_timeout);
-  }
-}
-
-// Get ready to display a tooltip. The widget and the xywh box inside
-// it define an area the tooltip is for, this along with the current
-// mouse position places the tooltip (the mouse is assumed to point
-// inside or near the box).
-/**
-  You may be able to use this to provide tooltips for internal pieces
-  of your widget. Call this after setting Fl::belowmouse() to
-  your widget (because that calls the above enter() method). Then figure
-  out what thing the mouse is pointing at, and call this with the widget
-  (this pointer is used to remove the tooltip if the widget is deleted
-  or hidden, and to locate the tooltip), the rectangle surrounding the
-  area, relative to the top-left corner of the widget (used to calculate
-  where to put the tooltip), and the text of the tooltip (which must be
-  a pointer to static data as it is not copied).
-*/
-void Fl_Tooltip::enter_area(Fl_Widget* wid, int x,int y,int w,int h, const char* t)
-{
-  (void)x;
-  (void)w;
-
-#ifdef DEBUG
-  printf("Fl_Tooltip::enter_area(wid=%p, x=%d, y=%d, w=%d, h=%d, t=\"%s\")\n",
-         wid, x, y, w, h, t ? t : "(null)");
-  printf("    recursion=%d, window=%p\n", recursion, window);
-#endif // DEBUG
-
-  if (recursion) return;
-  if (!t || !*t || !enabled()) {
-    exit_(0);
-    return;
-  }
-  // do nothing if it is the same:
-  if (wid==widget_ /*&& x==X && y==Y && w==W && h==H*/ && t==tip) return;
-  Fl::remove_timeout(tooltip_timeout);
-  Fl::remove_timeout(recent_timeout);
-  // remember it:
-  widget_ = wid; Y = y; H = h; tip = t;
-  // popup the tooltip immediately if it was recently up:
-  if (recent_tooltip) {
-    if (window) window->hide();
-    Fl::add_timeout(Fl_Tooltip::hoverdelay(), tooltip_timeout);
-  } else if (Fl_Tooltip::delay() < .1) {
-#ifdef WIN32
-    // possible fix for the Windows titlebar, it seems to want the
-    // window to be destroyed, moving it messes up the parenting:
-    if (window && window->visible()) window->hide();
-#endif // WIN32
-    tooltip_timeout(0);
-  } else {
-    if (window && window->visible()) window->hide();
-    Fl::add_timeout(Fl_Tooltip::delay(), tooltip_timeout);
-  }
-
-#ifdef DEBUG
-  printf("    tip=\"%s\", window->shown()=%d\n", tip ? tip : "(null)",
-         window ? window->shown() : 0);
-#endif // DEBUG
-}
-
-void Fl_Tooltip::set_enter_exit_once_() {
-  static char beenhere = 0;
-  if (!beenhere) {
-    beenhere          = 1;
-    Fl_Tooltip::enter = Fl_Tooltip::enter_;
-    Fl_Tooltip::exit  = Fl_Tooltip::exit_;
-  }
-}
-
-/**
-  Sets the current tooltip text. 
-
-  Sets a string of text to display in a popup tooltip window when the user 
-  hovers the mouse over the widget. The string is <I>not</I> copied, so 
-  make sure any formatted string is stored in a static, global, 
-  or allocated buffer. If you want a copy made and managed for you,
-  use the copy_tooltip() method, which will manage the tooltip string
-  automatically.
-
-  If no tooltip is set, the tooltip of the parent is inherited. Setting a 
-  tooltip for a group and setting no tooltip for a child will show the 
-  group's tooltip instead. To avoid this behavior, you can set the child's 
-  tooltip to an empty string ("").
-  \param[in] text New tooltip text (no copy is made)
-  \see copy_tooltip(const char*), tooltip()
-*/
-void Fl_Widget::tooltip(const char *text) {
-  Fl_Tooltip::set_enter_exit_once_();
-  if (flags() & COPIED_TOOLTIP) {
-    // reassigning a copied tooltip remains the same copied tooltip
-    if (tooltip_ == text) return;
-    free((void*)(tooltip_));            // free maintained copy
-    clear_flag(COPIED_TOOLTIP);         // disable copy flag (WE don't make copies)
-  }
-  tooltip_ = text;
-}
-
-/**
-  Sets the current tooltip text. 
-  Unlike tooltip(), this method allocates a copy of the tooltip 
-  string instead of using the original string pointer.
-
-  The internal copy will automatically be freed whenever you assign
-  a new tooltip or when the widget is destroyed.
-
-  If no tooltip is set, the tooltip of the parent is inherited. Setting a 
-  tooltip for a group and setting no tooltip for a child will show the 
-  group's tooltip instead. To avoid this behavior, you can set the child's 
-  tooltip to an empty string ("").
-  \param[in] text New tooltip text (an internal copy is made and managed)
-  \see tooltip(const char*), tooltip()
-*/
-void Fl_Widget::copy_tooltip(const char *text) {
-  Fl_Tooltip::set_enter_exit_once_();
-  if (flags() & COPIED_TOOLTIP) free((void *)(tooltip_));
-  if (text) {
-    set_flag(COPIED_TOOLTIP);
-    tooltip_ = strdup(text);
-  } else {
-    clear_flag(COPIED_TOOLTIP);
-    tooltip_ = (char *)0;
-  }
-}
-
-//
-// End of "$Id: Fl_Tooltip.cxx 8788 2011-06-08 14:35:22Z matt $".
-//
diff --git a/common/fltk/src/Fl_Tree.cxx b/common/fltk/src/Fl_Tree.cxx
deleted file mode 100644
index 4bbd229..0000000
--- a/common/fltk/src/Fl_Tree.cxx
+++ /dev/null
@@ -1,976 +0,0 @@
-//
-// "$Id: Fl_Tree.cxx 8632 2011-05-04 02:59:50Z greg.ercolano $"
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <FL/Fl_Tree.H>
-#include <FL/Fl_Preferences.H>
-
-//////////////////////
-// Fl_Tree.cxx
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-
-// INTERNAL: scroller callback
-static void scroll_cb(Fl_Widget*,void *data) {
-  ((Fl_Tree*)data)->redraw();
-}
-
-// INTERNAL: Parse elements from path into an array of null terminated strings
-//    Handles escape characters.
-//    Path="/aa/bb"
-//    Return: arr[0]="aa", arr[1]="bb", arr[2]=0
-//    Caller must call free_path(arr).
-//
-static char **parse_path(const char *path) {
-  while ( *path == '/' ) path++;	// skip leading '/' 
-  // First pass: identify, null terminate, and count separators
-  int seps = 1;				// separator count (1: first item)
-  int arrsize = 1;			// array size (1: first item)
-  char *save = strdup(path);		// make copy we can modify
-  char *sin = save, *sout = save;
-  while ( *sin ) {
-    if ( *sin == '\\' ) {		// handle escape character
-      *sout++ = *++sin;
-      if ( *sin ) ++sin;
-    } else if ( *sin == '/' ) {		// handle submenu
-      *sout++ = 0;
-      sin++;
-      seps++;
-      arrsize++;
-    } else {				// all other chars
-      *sout++ = *sin++;
-    }
-  }
-  *sout = 0;
-  arrsize++;				// (room for terminating NULL) 
-  // Second pass: create array, save nonblank elements
-  char **arr = (char**)malloc(sizeof(char*) * arrsize);
-  int t = 0;
-  sin = save;
-  while ( seps-- > 0 ) {
-    if ( *sin ) { arr[t++] = sin; }	// skips empty fields, e.g. '//'
-    sin += (strlen(sin) + 1);
-  }
-  arr[t] = 0;
-  return(arr);
-}
-
-// INTERNAL: Free the array returned by parse_path()
-static void free_path(char **arr) {
-  if ( arr ) {
-    if ( arr[0] ) { free((void*)arr[0]); }
-    free((void*)arr);
-  }
-}
-
-// INTERNAL: Recursively descend tree hierarchy, accumulating total child count
-static int find_total_children(Fl_Tree_Item *item, int count=0) {
-  count++;
-  for ( int t=0; t<item->children(); t++ ) {
-    count = find_total_children(item->child(t), count);
-  }
-  return(count);
-}
-
-/// Constructor.
-Fl_Tree::Fl_Tree(int X, int Y, int W, int H, const char *L) : Fl_Group(X,Y,W,H,L) { 
-  _root = new Fl_Tree_Item(_prefs);
-  _root->parent(0);				// we are root of tree
-  _root->label("ROOT");
-  _item_focus      = 0;
-  _callback_item   = 0;
-  _callback_reason = FL_TREE_REASON_NONE;
-  _scrollbar_size  = 0;				// 0: uses Fl::scrollbar_size()
-  box(FL_DOWN_BOX);
-  color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
-  when(FL_WHEN_CHANGED);
-  _vscroll = new Fl_Scrollbar(0,0,0,0);		// will be resized by draw()
-  _vscroll->hide();
-  _vscroll->type(FL_VERTICAL);
-  _vscroll->step(1);
-  _vscroll->callback(scroll_cb, (void*)this);
-  end();
-}
-
-/// Destructor.
-Fl_Tree::~Fl_Tree() {
-  if ( _root ) { delete _root; _root = 0; }
-}
-
-/// Adds a new item, given a 'menu style' path, eg: "/Parent/Child/item".
-/// Any parent nodes that don't already exist are created automatically.
-/// Adds the item based on the value of sortorder().
-///
-/// To specify items or submenus that contain slashes ('/' or '\')
-/// use an escape character to protect them, e.g.
-///
-/// \code
-///     tree->add("/Holidays/Photos/12\\/25\\2010");          // Adds item "12/25/2010"
-///     tree->add("/Pathnames/c:\\\\Program Files\\\\MyApp"); // Adds item "c:\Program Files\MyApp"
-/// \endcode
-///
-/// \returns the child item created, or 0 on error.
-///
-Fl_Tree_Item* Fl_Tree::add(const char *path) {
-  if ( ! _root ) {					// Create root if none
-    _root = new Fl_Tree_Item(_prefs);
-    _root->parent(0);
-    _root->label("ROOT");
-  }
-  char **arr = parse_path(path);
-  Fl_Tree_Item *item = _root->add(_prefs, arr);
-  free_path(arr);
-  return(item);
-}
-
-/// Inserts a new item above the specified Fl_Tree_Item, with the label set to 'name'.
-/// \param[in] above -- the item above which to insert the new item. Must not be NULL.
-/// \param[in] name -- the name of the new item
-/// \returns the item that was added, or 0 if 'above' could not be found.
-/// 
-Fl_Tree_Item* Fl_Tree::insert_above(Fl_Tree_Item *above, const char *name) {
-  return(above->insert_above(_prefs, name));
-}
-
-/// Insert a new item into a tree-item's children at a specified position.
-///
-/// \param[in] item The existing item to insert new child into. Must not be NULL.
-/// \param[in] name The label for the new item
-/// \param[in] pos The position of the new item in the child list
-/// \returns the item that was added.
-///
-Fl_Tree_Item* Fl_Tree::insert(Fl_Tree_Item *item, const char *name, int pos) {
-  return(item->insert(_prefs, name, pos));
-}
-
-/// Add a new child to a tree-item.
-///
-/// \param[in] item The existing item to add new child to. Must not be NULL.
-/// \param[in] name The label for the new item
-/// \returns the item that was added.
-///
-Fl_Tree_Item* Fl_Tree::add(Fl_Tree_Item *item, const char *name) {
-  return(item->add(_prefs, name));
-}
-
-/// Find the item, given a menu style path, eg: "/Parent/Child/item".
-/// There is both a const and non-const version of this method.
-/// Const version allows pure const methods to use this method 
-/// to do lookups without causing compiler errors.
-///
-/// To specify items or submenus that contain slashes ('/' or '\')
-/// use an escape character to protect them, e.g.
-///
-/// \code
-///     tree->add("/Holidays/Photos/12\\/25\\2010");          // Adds item "12/25/2010"
-///     tree->add("/Pathnames/c:\\\\Program Files\\\\MyApp"); // Adds item "c:\Program Files\MyApp"
-/// \endcode
-///
-/// \param[in] path -- the tree item's pathname to be found (e.g. "Flintstones/Fred")
-/// \returns the item, or NULL if not found.
-///
-/// \see item_pathname()
-///
-Fl_Tree_Item *Fl_Tree::find_item(const char *path) {
-  if ( ! _root ) return(NULL);
-  char **arr = parse_path(path);
-  Fl_Tree_Item *item = _root->find_item(arr);
-  free_path(arr);
-  return(item);
-}
-
-/// A const version of Fl_Tree::find_item(const char *path)
-const Fl_Tree_Item *Fl_Tree::find_item(const char *path) const {
-  if ( ! _root ) return(NULL);
-  char **arr = parse_path(path);
-  const Fl_Tree_Item *item = _root->find_item(arr);
-  free_path(arr);
-  return(item);
-}
-
-// Handle safe 'reverse string concatenation'.
-//   In the following we build the pathname from right-to-left,
-//   since we start at the child and work our way up to the root.
-//
-#define SAFE_RCAT(c) { \
-  slen += 1; if ( slen >= pathnamelen ) { pathname[0] = '\0'; return(-2); } \
-  *s-- = c; \
-  }
-
-/// Find the pathname for the specified \p item.
-/// If \p item is NULL, root() is used.
-/// The tree's root will be included in the pathname of showroot() is on.
-/// Menu items or submenus that contain slashes ('/' or '\') in their names
-/// will be escaped with a backslash. This is symmetrical with the add()
-/// function which uses the same escape pattern to set names.
-/// \param[in] pathname The string to use to return the pathname
-/// \param[in] pathnamelen The maximum length of the string (including NULL). Must not be zero.
-/// \param[in] item The item whose pathname is to be returned.
-/// \returns
-///	-   0 : OK (\p pathname returns the item's pathname)
-///	-  -1 : item not found (pathname="")
-///	-  -2 : pathname not large enough (pathname="")
-/// \see find_item()
-///
-int Fl_Tree::item_pathname(char *pathname, int pathnamelen, const Fl_Tree_Item *item) const {
-  pathname[0] = '\0';
-  item = item ? item : _root;
-  if ( !item ) return(-1);
-  // Build pathname starting at end
-  char *s = (pathname+pathnamelen-1);
-  int slen = 0;			// length of string compiled so far (including NULL)
-  SAFE_RCAT('\0');
-  while ( item ) {
-    if ( item->is_root() && showroot() == 0 ) break;		// don't include root in path if showroot() off
-    // Find name of current item
-    const char *name = item->label() ? item->label() : "???";	// name for this item
-    int len = strlen(name);
-    // Add name to end of pathname[]
-    for ( --len; len>=0; len-- ) {
-      SAFE_RCAT(name[len]);					// rcat name of item
-      if ( name[len] == '/' || name[len] == '\\' ) {
-        SAFE_RCAT('\\');					// escape front or back slashes within name
-      }
-    }
-    SAFE_RCAT('/');						// rcat leading slash
-    item = item->parent();					// move up tree (NULL==root)
-  }
-  if ( *(++s) == '/' ) ++s;				// leave off leading slash from pathname
-  if ( s != pathname ) memmove(pathname, s, slen);	// Shift down right-aligned string
-  return(0);
-}
-
-/// Standard FLTK draw() method, handles draws the tree widget.
-void Fl_Tree::draw() {
-  // Let group draw box+label but *NOT* children.
-  // We handle drawing children ourselves by calling each item's draw()
-  //
-  // Handle group's bg
-  Fl_Group::draw_box();
-  Fl_Group::draw_label();
-  // Handle tree
-  if ( ! _root ) return;
-  int cx = x() + Fl::box_dx(box());
-  int cy = y() + Fl::box_dy(box());
-  int cw = w() - Fl::box_dw(box());
-  int ch = h() - Fl::box_dh(box());
-  // These values are changed during drawing
-  // 'Y' will be the lowest point on the tree
-  int X = cx + _prefs.marginleft();
-  int Y = cy + _prefs.margintop() - (_vscroll->visible() ? _vscroll->value() : 0);
-  int W = cw - _prefs.marginleft();			// - _prefs.marginright();
-  int Ysave = Y;
-  fl_push_clip(cx,cy,cw,ch);
-  {
-    fl_font(_prefs.labelfont(), _prefs.labelsize());
-    _root->draw(X, Y, W, this,
-                (Fl::focus()==this)?_item_focus:0,	// show focus item ONLY if Fl_Tree has focus
-		_prefs);
-  }
-  fl_pop_clip();
-  
-  // Show vertical scrollbar?
-  int ydiff = (Y+_prefs.margintop())-Ysave;		// ydiff=size of tree
-  int ytoofar = (cy+ch) - Y;				// ytoofar -- scrolled beyond bottom (e.g. stow)
-  
-  //printf("ydiff=%d ch=%d Ysave=%d ytoofar=%d value=%d\n",
-  //int(ydiff),int(ch),int(Ysave),int(ytoofar), int(_vscroll->value()));
-  
-  if ( ytoofar > 0 ) ydiff += ytoofar;
-  if ( Ysave<cy || ydiff > ch || int(_vscroll->value()) > 1 ) {
-    _vscroll->visible();
-
-    int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
-    int sx = x()+w()-Fl::box_dx(box())-scrollsize;
-    int sy = y()+Fl::box_dy(box());
-    int sw = scrollsize;
-    int sh = h()-Fl::box_dh(box());
-    _vscroll->show();
-    _vscroll->range(0.0,ydiff-ch);
-    _vscroll->resize(sx,sy,sw,sh);
-    _vscroll->slider_size(float(ch)/float(ydiff));
-  } else {
-    _vscroll->Fl_Slider::value(0);
-    _vscroll->hide();
-  }
-  fl_push_clip(cx,cy,cw,ch);
-  Fl_Group::draw_children();	// draws any FLTK children set via Fl_Tree::widget()
-  fl_pop_clip();
-}
-
-/// Returns next visible item above (dir==Fl_Up) or below (dir==Fl_Down) the specified \p item.
-/// If \p item is 0, returns first() if \p dir is Fl_Up, or last() if \p dir is FL_Down.
-///
-/// \param[in] item The item above/below which we'll find the next visible item
-/// \param[in] dir The direction to search. Can be FL_Up or FL_Down.
-/// \returns The item found, or 0 if there's no visible items above/below the specified \p item.
-///
-Fl_Tree_Item *Fl_Tree::next_visible_item(Fl_Tree_Item *item, int dir) {
-  if ( ! item ) {				// no start item?
-    item = ( dir == FL_Up ) ? last() : first();	// start at top or bottom
-    if ( ! item ) return(0);
-    if ( item->visible_r() ) return(item);	// return first/last visible item
-  }
-  switch ( dir ) {
-    case FL_Up:   return(item->prev_displayed(_prefs));
-    case FL_Down: return(item->next_displayed(_prefs));
-    default:      return(item->next_displayed(_prefs));
-  }
-}
-
-/// Set the item that currently should have keyboard focus.
-/// Handles calling redraw() to update the focus box (if it is visible).
-///
-/// \param[in] item The item that should take focus. If NULL, none will have focus.
-///
-void Fl_Tree::set_item_focus(Fl_Tree_Item *item) {
-  if ( _item_focus != item ) {		// changed?
-    _item_focus = item;			// update
-    if ( visible_focus() ) redraw();	// redraw to update focus box
-  }
-}
-
-/// Find the item that was clicked.
-/// You should use callback_item() instead, which is fast,
-/// and is meant to be used within a callback to determine the item clicked.
-///
-/// This method walks the entire tree looking for the first item that is
-/// under the mouse (ie. at Fl::event_x()/Fl:event_y().
-///
-/// Use this method /only/ if you've subclassed Fl_Tree, and are receiving
-/// events before Fl_Tree has been able to process and update callback_item().
-/// 
-/// \returns the item clicked, or 0 if no item was under the current event.
-///
-const Fl_Tree_Item* Fl_Tree::find_clicked() const {
-  if ( ! _root ) return(NULL);
-  return(_root->find_clicked(_prefs));
-}
-
-/// Set the item that was last clicked.
-/// Should only be used by subclasses needing to change this value.
-/// Normally Fl_Tree manages this value.
-///
-/// Deprecated: use callback_item() instead.
-///
-void Fl_Tree::item_clicked(Fl_Tree_Item* val) {
-  _callback_item = val;
-}
-
-/// Returns the first item in the tree.
-///
-/// Use this to walk the tree in the forward direction, eg:
-/// \code
-/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) ) {
-///     printf("Item: %s\n", item->label());
-/// }
-/// \endcode
-///
-/// \returns first item in tree, or 0 if none (tree empty).
-/// \see first(),next(),last(),prev()
-///
-Fl_Tree_Item* Fl_Tree::first() {
-  return(_root);					// first item always root
-}
-
-/// Return the next item after \p item, or 0 if no more items.
-///
-/// Use this code to walk the entire tree:
-/// \code
-/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) ) {
-///     printf("Item: %s\n", item->label());
-/// }
-/// \endcode
-///
-/// \param[in] item The item to use to find the next item. If NULL, returns 0.
-/// \returns Next item in tree, or 0 if at last item.
-///
-/// \see first(),next(),last(),prev()
-///
-Fl_Tree_Item *Fl_Tree::next(Fl_Tree_Item *item) {
-  if ( ! item ) return(0);
-  return(item->next());
-}
-
-/// Return the previous item before \p item, or 0 if no more items.
-///
-/// This can be used to walk the tree in reverse, eg:
-///
-/// \code
-/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->prev(item) ) {
-///     printf("Item: %s\n", item->label());
-/// }
-/// \endcode
-///
-/// \param[in] item The item to use to find the previous item. If NULL, returns 0.
-/// \returns Previous item in tree, or 0 if at first item.
-///
-/// \see first(),next(),last(),prev()
-///
-Fl_Tree_Item *Fl_Tree::prev(Fl_Tree_Item *item) {
-  if ( ! item ) return(0);
-  return(item->prev());
-}
-
-/// Returns the last item in the tree.
-///
-/// This can be used to walk the tree in reverse, eg:
-///
-/// \code
-/// for ( Fl_Tree_Item *item = tree->last(); item; item = tree->prev() ) {
-///     printf("Item: %s\n", item->label());
-/// }
-/// \endcode
-///
-/// \returns last item in the tree, or 0 if none (tree empty).
-///
-/// \see first(),next(),last(),prev()
-///
-Fl_Tree_Item* Fl_Tree::last() {
-  if ( ! _root ) return(0);
-  Fl_Tree_Item *item = _root;
-  while ( item->has_children() ) {
-    item = item->child(item->children()-1);
-  }
-  return(item);
-}
-
-/// Returns the first selected item in the tree.
-///
-/// Use this to walk the tree looking for all the selected items, eg:
-///
-/// \code
-/// for ( Fl_Tree_Item *item = tree->first_selected_item(); item; item = tree->next_selected_item(item) ) {
-///     printf("Item: %s\n", item->label());
-/// }
-/// \endcode
-///
-/// \returns The next selected item, or 0 if there are no more selected items.
-///     
-Fl_Tree_Item *Fl_Tree::first_selected_item() {
-  return(next_selected_item(0));
-}
-
-/// Returns the next selected item after \p item.
-/// If \p item is 0, search starts at the first item (root).
-///
-/// Use this to walk the tree looking for all the selected items, eg:
-/// \code
-/// for ( Fl_Tree_Item *item = tree->first_selected_item(); item; item = tree->next_selected_item(item) ) {
-///     printf("Item: %s\n", item->label());
-/// }
-/// \endcode
-///
-/// \param[in] item The item to use to find the next selected item. If NULL, first() is used.
-/// \returns The next selected item, or 0 if there are no more selected items.
-///     
-Fl_Tree_Item *Fl_Tree::next_selected_item(Fl_Tree_Item *item) {
-  if ( ! item ) {
-    if ( ! (item = first()) ) return(0);
-    if ( item->is_selected() ) return(item);
-  }
-  while ( (item = item->next()) )
-    if ( item->is_selected() )
-      return(item);
-  return(0);
-}
-
-/// Standard FLTK event handler for this widget.
-int Fl_Tree::handle(int e) {
-  int ret = 0;
-  // Developer note: Fl_Browser_::handle() used for reference here..
-  // #include <FL/names.h>	// for event debugging
-  // fprintf(stderr, "DEBUG: %s (%d)\n", fl_eventnames[e], e);
-  if (e == FL_ENTER || e == FL_LEAVE) return(1);
-  switch (e) {
-    case FL_FOCUS: {
-      // FLTK tests if we want focus. 
-      //     If a nav key was used to give us focus, and we've got no saved
-      //     focus widget, determine which item gets focus depending on nav key.
-      //
-      if ( ! _item_focus ) {					// no focus established yet?
-	switch (Fl::event_key()) {				// determine if focus was navigated..
-	  case FL_Tab: {					// received focus via TAB?
-	    if ( Fl::event_state(FL_SHIFT) ) {			// SHIFT-TAB similar to FL_Up
-	      set_item_focus(next_visible_item(0, FL_Up));
-	    } else {						// TAB similar to FL_Down
-	      set_item_focus(next_visible_item(0, FL_Down));
-	    }
-	    break;
-	  }
-	  case FL_Left:		// received focus via LEFT or UP?
-	  case FL_Up: { 	// XK_ISO_Left_Tab
-	    set_item_focus(next_visible_item(0, FL_Up));
-	    break;
-	  }
-	  case FL_Right: 	// received focus via RIGHT or DOWN?
-	  case FL_Down:
-	  default: {
-	    set_item_focus(next_visible_item(0, FL_Down));
-	    break;
-	  }
-	}
-      }
-      if ( visible_focus() ) redraw();	// draw focus change
-      return(1);
-    }
-    case FL_UNFOCUS: {		// FLTK telling us some other widget took focus.
-      if ( visible_focus() ) redraw();	// draw focus change
-      return(1);
-    }
-    case FL_KEYBOARD: {		// keyboard shortcut
-      // Do shortcuts first or scrollbar will get them...
-      if (_prefs.selectmode() > FL_TREE_SELECT_NONE ) {
-	if ( !_item_focus ) {
-	  set_item_focus(first());
-	}
-	if ( _item_focus ) {
-	  int ekey = Fl::event_key();
-	  switch (ekey) {
-	    case FL_Enter:	// ENTER: selects current item only
-	    case FL_KP_Enter:
-	      if ( when() & ~FL_WHEN_ENTER_KEY) {
-		select_only(_item_focus);
-		show_item(_item_focus);		// STR #2426
-		return(1);
-	      }
-	      break;
-	    case ' ':		// toggle selection state
-	      switch ( _prefs.selectmode() ) {
-		case FL_TREE_SELECT_NONE:
-		  break;
-		case FL_TREE_SELECT_SINGLE:
-		  if ( ! _item_focus->is_selected() )		// not selected?
-		    select_only(_item_focus);			// select only this
-		  else
-		    deselect_all();				// select nothing
-		  break;
-		case FL_TREE_SELECT_MULTI:
-		  select_toggle(_item_focus);
-		  break;
-	      }
-	      break;
-	    case FL_Right:  	// open children (if any)
-	    case FL_Left: {	// close children (if any)
-	      if ( _item_focus ) {
-		if ( ekey == FL_Right && _item_focus->is_close() ) {
-		  // Open closed item
-		  open(_item_focus);
-		  redraw();
-		  ret = 1;
-		} else if ( ekey == FL_Left && _item_focus->is_open() ) {
-		  // Close open item
-		  close(_item_focus);
-		  redraw();	
-		  ret = 1;
-		}
-		return(1);
-	      }
-	      break;
-	    }
-	    case FL_Up:		// next item up
-	    case FL_Down: {	// next item down
-	      set_item_focus(next_visible_item(_item_focus, ekey));	// next item up|dn
-	      if ( _item_focus ) {					// item in focus?
-	        // Autoscroll
-		int itemtop = _item_focus->y();
-		int itembot = _item_focus->y()+_item_focus->h();
-		if ( itemtop < y() ) { show_item_top(_item_focus); }
-		if ( itembot > y()+h() ) { show_item_bottom(_item_focus); }
-		// Extend selection
-		if ( _prefs.selectmode() == FL_TREE_SELECT_MULTI &&	// multiselect on?
-		     (Fl::event_state() & FL_SHIFT) &&			// shift key?
-		     ! _item_focus->is_selected() ) {			// not already selected?
-		    select(_item_focus);				// extend selection..
-		}
-		return(1);
-	      }
-	      break;
-	    }
-	  }
-	}
-      }
-      break;
-    }
-  }
-
-  // Let Fl_Group take a shot at handling the event
-  if (Fl_Group::handle(e)) {
-    return(1);			// handled? don't continue below
-  }
-
-  // Handle events the child FLTK widgets didn't need
-
-  static Fl_Tree_Item *lastselect = 0;
-  // fprintf(stderr, "ERCODEBUG: Fl_Tree::handle(): Event was %s (%d)\n", fl_eventnames[e], e); // DEBUGGING
-  if ( ! _root ) return(ret);
-  switch ( e ) {
-    case FL_PUSH: {					// clicked on a tree item?
-      if (Fl::visible_focus() && handle(FL_FOCUS)) {
-        Fl::focus(this);
-      }
-      lastselect = 0;
-      Fl_Tree_Item *o = _root->find_clicked(_prefs);
-      if ( ! o ) break;
-      set_item_focus(o);				// becomes new focus widget
-      redraw();
-      ret |= 1;						// handled
-      if ( Fl::event_button() == FL_LEFT_MOUSE ) {
-	if ( o->event_on_collapse_icon(_prefs) ) {	// collapse icon clicked?
-	  open_toggle(o);
-	} else if ( o->event_on_label(_prefs) && 	// label clicked?
-		 (!o->widget() || !Fl::event_inside(o->widget())) &&		// not inside widget
-		 (!_vscroll->visible() || !Fl::event_inside(_vscroll)) ) {	// not on scroller
-	  switch ( _prefs.selectmode() ) {
-	    case FL_TREE_SELECT_NONE:
-	      break;
-	    case FL_TREE_SELECT_SINGLE:
-	      select_only(o);
-	      break;
-	    case FL_TREE_SELECT_MULTI: {
-	      if ( Fl::event_state() & FL_SHIFT ) {		// SHIFT+PUSH?
-	        select(o);					// add to selection
-	      } else if ( Fl::event_state() & FL_CTRL ) {	// CTRL+PUSH?
-		select_toggle(o);				// toggle selection state
-		lastselect = o;					// save toggled item (prevent oscillation)
-	      } else {
-		select_only(o);
-	      }
-	      break;
-	    }
-	  }
-	}
-      }
-      break;
-    }
-    case FL_DRAG: {
-      // do the scrolling first:
-      int my = Fl::event_y();
-      if ( my < y() ) {				// above top?
-        int p = vposition()-(y()-my);
-	if ( p < 0 ) p = 0;
-        vposition(p);
-      } else if ( my > (y()+h()) ) {		// below bottom?
-        int p = vposition()+(my-y()-h());
-	if ( p > (int)_vscroll->maximum() ) p = (int)_vscroll->maximum();
-        vposition(p);
-      }
-      if ( Fl::event_button() != FL_LEFT_MOUSE ) break;
-      Fl_Tree_Item *o = _root->find_clicked(_prefs);
-      if ( ! o ) break;
-      set_item_focus(o);			// becomes new focus widget
-      redraw();
-      ret |= 1;
-      // Item's label clicked?
-      if ( o->event_on_label(_prefs) && 
-	   (!o->widget() || !Fl::event_inside(o->widget())) &&
-	   (!_vscroll->visible() || !Fl::event_inside(_vscroll)) ) {
-	// Handle selection behavior
-	switch ( _prefs.selectmode() ) {
-	  case FL_TREE_SELECT_NONE: break;	// no selection changes
-	  case FL_TREE_SELECT_SINGLE:
-	    select_only(o);
-	    break;
-	  case FL_TREE_SELECT_MULTI:
-	    if ( Fl::event_state() & FL_CTRL &&	// CTRL-DRAG: toggle?
-	         lastselect != o ) {		// not already toggled from last microdrag?
-	      select_toggle(o);			// toggle selection
-	      lastselect = o;			// save we toggled it (prevents oscillation)
-	    } else {
-	      select(o);			// select this
-	    }
-	    break;
-	}
-      }
-      break;
-    }
-  }
-  return(ret);
-}
-
-/// Deselect \p item and all its children.
-/// If item is NULL, first() is used.
-/// Handles calling redraw() if anything was changed.
-/// Invokes the callback depending on the value of optional parameter \p docallback.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] item The item that will be deselected (along with all its children).
-///                 If NULL, first() is used.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked for each item that changed state,
-///             callback_reason() will be FL_TREE_REASON_DESELECTED
-///
-/// \returns count of how many items were actually changed to the deselected state.
-///
-int Fl_Tree::deselect_all(Fl_Tree_Item *item, int docallback) {
-  item = item ? item : first();			// NULL? use first()
-  if ( ! item ) return(0);
-  int count = 0;
-  // Deselect item
-  if ( item->is_selected() )
-    if ( deselect(item, docallback) )
-      ++count;
-  // Deselect its children
-  for ( int t=0; t<item->children(); t++ ) {
-    count += deselect_all(item->child(t), docallback);	// recurse
-  }
-  return(count);
-}
-
-/// Select \p item and all its children.
-/// If item is NULL, first() is used.
-/// Handles calling redraw() if anything was changed.
-/// Invokes the callback depending on the value of optional parameter \p docallback.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] item The item that will be selected (along with all its children). 
-///            If NULL, first() is used.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked for each item that changed state,
-///             callback_reason() will be FL_TREE_REASON_SELECTED
-/// \returns count of how many items were actually changed to the selected state.
-///
-int Fl_Tree::select_all(Fl_Tree_Item *item, int docallback) {
-  item = item ? item : first();			// NULL? use first()
-  if ( ! item ) return(0);
-  int count = 0;
-  // Select item
-  if ( !item->is_selected() )
-    if ( select(item, docallback) )
-      ++count;
-  // Select its children
-  for ( int t=0; t<item->children(); t++ ) {
-    count += select_all(item->child(t), docallback);	// recurse
-  }
-  return(count);
-}
-
-/// Select only the specified \p item, deselecting all others that might be selected.
-/// If item is 0, first() is used.
-/// Handles calling redraw() if anything was changed.
-/// Invokes the callback depending on the value of optional parameter \p docallback.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] selitem The item to be selected. If NULL, first() is used.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked for each item that changed state, 
-///             callback_reason() will be either FL_TREE_REASON_SELECTED or 
-///             FL_TREE_REASON_DESELECTED
-/// \returns the number of items whose selection states were changed, if any.
-///
-int Fl_Tree::select_only(Fl_Tree_Item *selitem, int docallback) {
-  selitem = selitem ? selitem : first();	// NULL? use first()
-  if ( ! selitem ) return(0);
-  int changed = 0;
-  for ( Fl_Tree_Item *item = first(); item; item = item->next() ) {
-    if ( item == selitem ) {
-      if ( item->is_selected() ) continue;	// don't count if already selected
-      select(item, docallback);
-      ++changed;
-    } else {
-      if ( item->is_selected() ) {
-        deselect(item, docallback);
-        ++changed;
-      }
-    }
-  }
-  return(changed);
-}
-
-/// Adjust the vertical scroll bar so that \p item is visible
-/// \p yoff pixels from the top of the Fl_Tree widget's display.
-///
-/// For instance, yoff=0 will position the item at the top.
-///
-/// If yoff is larger than the vertical scrollbar's limit,
-/// the value will be clipped. So if yoff=100, but scrollbar's max
-/// is 50, then 50 will be used.
-///
-/// \param[in] item The item to be shown. If NULL, first() is used.
-/// \param[in] yoff The pixel offset from the top for the displayed position.
-///
-/// \see show_item_top(), show_item_middle(), show_item_bottom()
-///
-void Fl_Tree::show_item(Fl_Tree_Item *item, int yoff) {
-  item = item ? item : first();
-  if (!item) return;
-  int newval = item->y() - y() - yoff + (int)_vscroll->value();
-  if ( newval < _vscroll->minimum() ) newval = (int)_vscroll->minimum();
-  if ( newval > _vscroll->maximum() ) newval = (int)_vscroll->maximum();
-  _vscroll->value(newval);
-  redraw();
-}
-
-/// See if \p item is currently displayed on-screen (visible within the widget).
-/// This can be used to detect if the item is scrolled off-screen.
-/// Checks to see if the item's vertical position is within the top and bottom
-/// edges of the display window. This does NOT take into account the hide()/show()
-/// or open()/close() status of the item.
-///
-/// \param[in] item The item to be checked. If NULL, first() is used.
-/// \returns 1 if displayed, 0 if scrolled off screen or no items are in tree.
-///
-int Fl_Tree::displayed(Fl_Tree_Item *item) {
-  item = item ? item : first();
-  if (!item) return(0);
-  return( (item->y() >= y()) && (item->y() <= (y()+h()-item->h())) ? 1 : 0);
-}
-
-/// Adjust the vertical scroll bar to show \p item at the top
-/// of the display IF it is currently off-screen (e.g. show_item_top()).
-/// If it is already on-screen, no change is made.
-///
-/// \param[in] item The item to be shown. If NULL, first() is used.
-///
-/// \see show_item_top(), show_item_middle(), show_item_bottom()
-///
-void Fl_Tree::show_item(Fl_Tree_Item *item) {
-  item = item ? item : first();
-  if (!item) return;
-  if ( displayed(item) ) return;
-  show_item_top(item);
-}
-
-/// Adjust the vertical scrollbar so that \p item is at the top of the display.
-///
-/// \param[in] item The item to be shown. If NULL, first() is used.
-///
-void Fl_Tree::show_item_top(Fl_Tree_Item *item) {
-  item = item ? item : first();
-  if (item) show_item(item, 0);
-}
-
-/// Adjust the vertical scrollbar so that \p item is in the middle of the display.
-///
-/// \param[in] item The item to be shown. If NULL, first() is used.
-///
-void Fl_Tree::show_item_middle(Fl_Tree_Item *item) {
-  item = item ? item : first();
-  if (item) show_item(item, (h()/2)-(item->h()/2));
-}
-
-/// Adjust the vertical scrollbar so that \p item is at the bottom of the display.
-///
-/// \param[in] item The item to be shown. If NULL, first() is used.
-///
-void Fl_Tree::show_item_bottom(Fl_Tree_Item *item) {
-  item = item ? item : first();
-  if (item) show_item(item, h()-item->h());
-}
-
-/// Returns the vertical scroll position as a pixel offset.
-/// The position returned is how many pixels of the tree are scrolled off the top edge
-/// of the screen.  Example: A position of '3' indicates the top 3 pixels of 
-/// the tree are scrolled off the top edge of the screen.
-/// \see vposition(), hposition()
-///
-int Fl_Tree::vposition() const {
-  return((int)_vscroll->value());
-}
-
-///  Sets the vertical scroll offset to position \p pos.
-///  The position is how many pixels of the tree are scrolled off the top edge
-///  of the screen. Example: A position of '3' scrolls the top three pixels of
-///  the tree off the top edge of the screen.
-///  \param[in] pos The vertical position (in pixels) to scroll the browser to.
-///
-void Fl_Tree::vposition(int pos) {
-  if (pos < 0) pos = 0;
-  if (pos > _vscroll->maximum()) pos = (int)_vscroll->maximum();
-  if (pos == _vscroll->value()) return;
-  _vscroll->value(pos);
-  redraw();
-}
-
-/// Displays \p item, scrolling the tree as necessary.
-/// \param[in] item The item to be displayed. If NULL, first() is used.
-///
-void Fl_Tree::display(Fl_Tree_Item *item) {
-  item = item ? item : first();
-  if (item) show_item_middle(item);
-}
-
-/**
- * Read a preferences database into the tree widget.
- * A preferences database is a hierarchical collection of data which can be
- * directly loaded into the tree view for inspection.
- * \param[in] prefs the Fl_Preferences database
- */
-void Fl_Tree::load(Fl_Preferences &prefs) 
-{
-  int i, j, n, pn = strlen(prefs.path());
-  char *p;
-  const char *path = prefs.path();
-  if (strcmp(path, ".")==0)
-    path += 1; // root path is empty
-  else
-    path += 2; // child path starts with "./"
-  n = prefs.groups();
-  for (i=0; i<n; i++) {
-    Fl_Preferences prefsChild(prefs, i);
-    add(prefsChild.path()+2); // children always start with "./"
-    load(prefsChild);
-  }
-  n = prefs.entries();
-  for (i=0; i<n; i++) {
-    // We must remove all fwd slashes in the key and value strings. Replace with backslash.
-    char *key = strdup(prefs.entry(i));
-    int kn = strlen(key);
-    for (j=0; j<kn; j++) {
-      if (key[j]=='/') key[j]='\\'; 
-    }
-    char *val;  prefs.get(key, val, "");
-    int vn = strlen(val);
-    for (j=0; j<vn; j++) {
-      if (val[j]=='/') val[j]='\\'; 
-    }
-    if (vn<40) {
-      int sze = pn + strlen(key) + vn;
-      p = (char*)malloc(sze+5);
-      sprintf(p, "%s/%s = %s", path, key, val);
-    } else {
-      int sze = pn + strlen(key) + 40;
-      p = (char*)malloc(sze+5);
-      sprintf(p, "%s/%s = %.40s...", path, key, val);
-    }
-    add(p[0]=='/'?p+1:p);
-    free(p);
-    free(val);
-    free(key);
-  }
-}
-
-//
-// End of "$Id: Fl_Tree.cxx 8632 2011-05-04 02:59:50Z greg.ercolano $".
-//
diff --git a/common/fltk/src/Fl_Tree_Item.cxx b/common/fltk/src/Fl_Tree_Item.cxx
deleted file mode 100644
index deeaf5a..0000000
--- a/common/fltk/src/Fl_Tree_Item.cxx
+++ /dev/null
@@ -1,929 +0,0 @@
-//
-// "$Id: Fl_Tree_Item.cxx 8589 2011-04-14 13:15:13Z manolo $"
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Tree_Item.H>
-#include <FL/Fl_Tree_Prefs.H>
-
-//////////////////////
-// Fl_Tree_Item.cxx
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-
-// Was the last event inside the specified xywh?
-static int event_inside(const int xywh[4]) {
-  return(Fl::event_inside(xywh[0],xywh[1],xywh[2],xywh[3]));
-}
-
-/// Constructor.
-///     Makes a new instance of Fl_Tree_Item using defaults from 'prefs'.
-///
-Fl_Tree_Item::Fl_Tree_Item(const Fl_Tree_Prefs &prefs) {
-  _label        = 0;
-  _labelfont    = prefs.labelfont();
-  _labelsize    = prefs.labelsize();
-  _labelfgcolor = prefs.labelfgcolor();
-  _labelbgcolor = prefs.labelbgcolor();
-  _widget       = 0;
-  _open         = 1;
-  _visible      = 1;
-  _active       = 1;
-  _selected     = 0;
-  _xywh[0]      = 0;
-  _xywh[1]      = 0;
-  _xywh[2]      = 0;
-  _xywh[3]      = 0;
-  _collapse_xywh[0] = 0;
-  _collapse_xywh[1] = 0;
-  _collapse_xywh[2] = 0;
-  _collapse_xywh[3] = 0;
-  _label_xywh[0]    = 0;
-  _label_xywh[1]    = 0;
-  _label_xywh[2]    = 0;
-  _label_xywh[3]    = 0;
-  _usericon         = 0;
-  _userdata         = 0;
-  _parent           = 0;
-}
-
-// DTOR
-Fl_Tree_Item::~Fl_Tree_Item() {
-  if ( _label ) { 
-    free((void*)_label);
-    _label = 0;
-  }
-  _widget = 0;			// Fl_Group will handle destruction
-  _usericon = 0;		// user handled allocation
-  //_children.clear();		// array's destructor handles itself
-}
-
-/// Copy constructor.
-Fl_Tree_Item::Fl_Tree_Item(const Fl_Tree_Item *o) {
-  _label        = o->label() ? strdup(o->label()) : 0;
-  _labelfont    = o->labelfont();
-  _labelsize    = o->labelsize();
-  _labelfgcolor = o->labelfgcolor();
-  _labelbgcolor = o->labelbgcolor();
-  _widget       = o->widget();
-  _open         = o->_open;
-  _visible      = o->_visible;
-  _active       = o->_active;
-  _selected     = o->_selected;
-  _xywh[0]      = o->_xywh[0];
-  _xywh[1]      = o->_xywh[1];
-  _xywh[2]      = o->_xywh[2];
-  _xywh[3]      = o->_xywh[3];
-  _collapse_xywh[0] = o->_collapse_xywh[0];
-  _collapse_xywh[1] = o->_collapse_xywh[1];
-  _collapse_xywh[2] = o->_collapse_xywh[2];
-  _collapse_xywh[3] = o->_collapse_xywh[3];
-  _label_xywh[0]    = o->_label_xywh[0];
-  _label_xywh[1]    = o->_label_xywh[1];
-  _label_xywh[2]    = o->_label_xywh[2];
-  _label_xywh[3]    = o->_label_xywh[3];
-  _usericon         = o->usericon();
-  _userdata         = o->user_data();
-  _parent           = o->_parent;
-}
-
-/// Print the tree as 'ascii art' to stdout.
-/// Used mainly for debugging.
-///
-void Fl_Tree_Item::show_self(const char *indent) const {
-  if ( label() ) {
-    printf("%s-%s (%d children, this=%p, parent=%p depth=%d)\n",
-           indent,label(),children(),(void*)this, (void*)_parent, depth());
-  }
-  if ( children() ) {
-    char *i2 = (char*)malloc(strlen(indent) + 2);
-    strcpy(i2, indent);
-    strcat(i2, " |");
-    for ( int t=0; t<children(); t++ ) {
-      child(t)->show_self(i2);
-    }
-  }
-  fflush(stdout);
-}
-
-/// Set the label. Makes a copy of the name.
-void Fl_Tree_Item::label(const char *name) {
-  if ( _label ) { free((void*)_label); _label = 0; }
-  _label = name ? strdup(name) : 0;
-}
-
-/// Return the label.
-const char *Fl_Tree_Item::label() const {
-  return(_label);
-}
-
-/// Return child item for the specified 'index'.
-const Fl_Tree_Item *Fl_Tree_Item::child(int index) const {
-  return(_children[index]);
-}
-
-/// Clear all the children for this item.
-void Fl_Tree_Item::clear_children() {
-  _children.clear();
-}
-
-/// Return the index of the immediate child of this item that has the label 'name'.
-///
-/// \returns index of found item, or -1 if not found.
-///
-int Fl_Tree_Item::find_child(const char *name) {
-  if ( name ) {
-    for ( int t=0; t<children(); t++ ) {
-      if ( child(t)->label() ) {
-        if ( strcmp(child(t)->label(), name) == 0 ) {
-          return(t);
-        }
-      }
-    }
-  }
-  return(-1);
-}
-
-/// Find child item by descending array of names. Does not include self in search.
-/// Only Fl_Tree should need this method.
-///
-/// \returns item, or 0 if not found
-///
-const Fl_Tree_Item *Fl_Tree_Item::find_child_item(char **arr) const {
-  for ( int t=0; t<children(); t++ ) {
-    if ( child(t)->label() ) {
-      if ( strcmp(child(t)->label(), *arr) == 0 ) {	// match?
-        if ( *(arr+1) ) {				// more in arr? descend
-          return(_children[t]->find_item(arr+1));
-        } else {					// end of arr? done
-          return(_children[t]);
-        }
-      }
-    }
-  }
-  return(0);
-}
-
-/// Find child item by descending array of names. Does not include self in search.
-/// Only Fl_Tree should need this method. Use Fl_Tree::find_item() instead.
-///
-/// \returns item, or 0 if not found
-///
-Fl_Tree_Item *Fl_Tree_Item::find_child_item(char **arr) {
-  for ( int t=0; t<children(); t++ ) {
-    if ( child(t)->label() ) {
-      if ( strcmp(child(t)->label(), *arr) == 0 ) {	// match?
-        if ( *(arr+1) ) {				// more in arr? descend
-          return(_children[t]->find_item(arr+1));
-        } else {					// end of arr? done
-          return(_children[t]);
-        }
-      }
-    }
-  }
-  return(0);
-}
-
-/// Find item by descending array of \p names. Includes self in search.
-/// Only Fl_Tree should need this method. Use Fl_Tree::find_item() instead.
-///
-/// \returns item, or 0 if not found
-///
-const Fl_Tree_Item *Fl_Tree_Item::find_item(char **names) const {
-  if ( label() && strcmp(label(), *names) == 0 ) {	// match self?
-    if ( *(names+1) == 0 ) {				// end of names,
-      return(this);					// found ourself.
-    }
-  }
-  if ( children() ) {					// check children..
-    return(find_child_item(names));
-  }
-  return(0);
-}
-
-/// Find item by descending array of \p names. Includes self in search.
-/// Only Fl_Tree should need this method.
-///
-/// \returns item, or 0 if not found
-///
-Fl_Tree_Item *Fl_Tree_Item::find_item(char **names) {
-  if ( label() && strcmp(label(), *names) == 0 ) {	// match self?
-    if ( *(names+1) == 0 ) {				// end of names,
-      return(this);					// found ourself.
-    }
-  }
-  if ( children() ) {					// check children..
-    return(find_child_item(names));
-  }
-  return(0);
-}
-
-/// Find the index number for the specified 'item'
-/// in the current item's list of children.
-///
-/// \returns the index, or -1 if not found.
-///
-int Fl_Tree_Item::find_child(Fl_Tree_Item *item) {
-  for ( int t=0; t<children(); t++ ) {
-    if ( item == child(t) ) {
-      return(t);
-    }
-  }
-  return(-1);
-}
-
-/// Add a new child to this item with the name 'new_label', with defaults from 'prefs'.
-/// An internally managed copy is made of the label string.
-/// Adds the item based on the value of prefs.sortorder().
-///
-Fl_Tree_Item *Fl_Tree_Item::add(const Fl_Tree_Prefs &prefs, const char *new_label) {
-  Fl_Tree_Item *item = new Fl_Tree_Item(prefs);
-  item->label(new_label);
-  item->_parent = this;
-  switch ( prefs.sortorder() ) {
-    case FL_TREE_SORT_NONE: {
-      _children.add(item);
-      return(item);
-    }
-    case FL_TREE_SORT_ASCENDING: {
-      for ( int t=0; t<_children.total(); t++ ) {
-        Fl_Tree_Item *c = _children[t];
-        if ( c->label() && strcmp(c->label(), new_label) > 0 ) {
-          _children.insert(t, item);
-          return(item);
-        }
-      }
-      _children.add(item);
-      return(item);
-    }
-    case FL_TREE_SORT_DESCENDING: {
-      for ( int t=0; t<_children.total(); t++ ) {
-        Fl_Tree_Item *c = _children[t];
-        if ( c->label() && strcmp(c->label(), new_label) < 0 ) {
-          _children.insert(t, item);
-          return(item);
-        }
-      }
-      _children.add(item);
-      return(item);
-    }
-  }
-  return(item);
-}
-
-/// Descend into the path specified by \p arr, and add a new child there.
-/// Should be used only by Fl_Tree's internals.
-/// Adds the item based on the value of prefs.sortorder().
-/// \returns the item added.
-///
-Fl_Tree_Item *Fl_Tree_Item::add(const Fl_Tree_Prefs &prefs, char **arr) {
-  int t = find_child(*arr);
-  Fl_Tree_Item *item = 0;
-  if ( t == -1 ) {
-    item = (Fl_Tree_Item*)add(prefs, *arr);
-  } else {
-    item = (Fl_Tree_Item*)child(t);
-  }
-  if ( *(arr+1) ) {		// descend?
-    return(item->add(prefs, arr+1));
-  } else {
-    return(item);		// end? done
-  }
-}
-
-/// Insert a new item into current item's children at a specified position.
-/// \returns the new item inserted.
-///
-Fl_Tree_Item *Fl_Tree_Item::insert(const Fl_Tree_Prefs &prefs, const char *new_label, int pos) {
-  Fl_Tree_Item *item = new Fl_Tree_Item(prefs);
-  item->label(new_label);
-  item->_parent = this;
-  _children.insert(pos, item);
-  return(item);
-}
-
-/// Insert a new item above this item.
-/// \returns the new item inserted, or 0 if an error occurred.
-///
-Fl_Tree_Item *Fl_Tree_Item::insert_above(const Fl_Tree_Prefs &prefs, const char *new_label) {
-  Fl_Tree_Item *p = _parent;
-  if ( ! p ) return(0);
-  // Walk our parent's children to find ourself
-  for ( int t=0; t<p->children(); t++ ) {
-    Fl_Tree_Item *c = p->child(t);
-    if ( this == c ) {
-      return(p->insert(prefs, new_label, t));
-    }
-  }
-  return(0);
-}
-
-/// Remove child by item.
-///    \returns 0 if removed, -1 if item not an immediate child.
-///
-int Fl_Tree_Item::remove_child(Fl_Tree_Item *item) {
-  for ( int t=0; t<children(); t++ ) {
-    if ( child(t) == item ) {
-      item->clear_children();
-      _children.remove(t);
-      return(0);
-    }
-  }
-  return(-1);
-}
-
-/// Remove immediate child (and its children) by its label 'name'.
-/// \returns 0 if removed, -1 if not found.
-///
-int Fl_Tree_Item::remove_child(const char *name) {
-  for ( int t=0; t<children(); t++ ) {
-    if ( child(t)->label() ) {
-      if ( strcmp(child(t)->label(), name) == 0 ) {
-        _children.remove(t);
-        return(0);
-      }
-    }
-  }
-  return(-1);
-}
-
-/// Swap two of our children, given two child index values.
-/// Use this eg. for sorting.
-///
-/// This method is FAST, and does not involve lookups.
-///
-/// No range checking is done on either index value.
-///
-/// \returns
-///    -    0 : OK
-///    -   -1 : failed: 'a' or 'b' is not our immediate child
-///
-void Fl_Tree_Item::swap_children(int ax, int bx) {
-  _children.swap(ax, bx);
-}
-
-/// Swap two of our children, given item pointers.
-/// Use this eg. for sorting. 
-///
-/// This method is SLOW because it involves linear lookups.
-/// For speed, use swap_children(int,int) instead.
-///
-/// \returns
-///    -    0 : OK
-///    -   -1 : failed: 'a' or 'b' is not our immediate child
-///
-int Fl_Tree_Item::swap_children(Fl_Tree_Item *a, Fl_Tree_Item *b) {
-  int ax = -1, bx = -1;
-  for ( int t=0; t<children(); t++ ) {	// find index for a and b
-    if ( _children[t] == a ) { ax = t; if ( bx != -1 ) break; else continue; }
-    if ( _children[t] == b ) { bx = t; if ( ax != -1 ) break; else continue; }
-  }
-  if ( ax == -1 || bx == -1 ) return(-1);	// not found? fail
-  swap_children(ax,bx);
-  return(0);
-}
-
-/// Internal: Horizontal connector line based on preference settings.
-void Fl_Tree_Item::draw_horizontal_connector(int x1, int x2, int y, const Fl_Tree_Prefs &prefs) {
-  fl_color(prefs.connectorcolor());
-  switch ( prefs.connectorstyle() ) {
-    case FL_TREE_CONNECTOR_SOLID:
-      y |= 1;				// force alignment w/dot pattern
-      fl_line(x1,y,x2,y);
-      return;
-    case FL_TREE_CONNECTOR_DOTTED: 
-        {
-            y |= 1;				// force alignment w/dot pattern
-            for ( int xx=x1; xx<=x2; xx++ ) {
-                if ( !(xx & 1) ) fl_point(xx, y);
-            }
-        }
-      return;
-    case FL_TREE_CONNECTOR_NONE:
-      return;
-  }
-}
-
-/// Internal: Vertical connector line based on preference settings.
-void Fl_Tree_Item::draw_vertical_connector(int x, int y1, int y2, const Fl_Tree_Prefs &prefs) {
-  fl_color(prefs.connectorcolor());
-  switch ( prefs.connectorstyle() ) {
-    case FL_TREE_CONNECTOR_SOLID:
-      y1 |= 1;				// force alignment w/dot pattern
-      y2 |= 1;				// force alignment w/dot pattern
-      fl_line(x,y1,x,y2);
-      return;
-    case FL_TREE_CONNECTOR_DOTTED:
-        {
-            y1 |= 1;				// force alignment w/dot pattern
-            y2 |= 1;				// force alignment w/dot pattern
-            for ( int yy=y1; yy<=y2; yy++ ) {
-                if ( yy & 1 ) fl_point(x, yy);
-            }
-        }
-        return;
-    case FL_TREE_CONNECTOR_NONE:
-      return;
-  }
-}
-
-/// Find the item that the last event was over.
-///
-///    Returns the item if it is visible, and mouse is over it.
-///    Works even if widget deactivated.
-///    Use event_on_collapse_icon() to determine if collapse button was pressed.
-///
-///    \returns const visible item under the event if found, or 0 if none.
-///
-const Fl_Tree_Item *Fl_Tree_Item::find_clicked(const Fl_Tree_Prefs &prefs) const {
-  if ( ! _visible ) return(0);
-  if ( is_root() && !prefs.showroot() ) {
-    // skip event check if we're root but root not being shown
-  } else {
-    // See if event is over us
-    if ( event_inside(_xywh) ) {		// event within this item?
-      return(this);				// found
-    }
-  }
-  if ( is_open() ) {				// open? check children of this item
-    for ( int t=0; t<children(); t++ ) {
-      const Fl_Tree_Item *item;
-      if ( ( item = _children[t]->find_clicked(prefs) ) != NULL) {	// check child and its descendents
-        return(item);							// found?
-      }
-    }
-  }
-  return(0);
-}
-
-/// Non-const version of the above.
-/// Find the item that the last event was over.
-///
-///    Returns the item if it is visible, and mouse is over it.
-///    Works even if widget deactivated.
-///    Use event_on_collapse_icon() to determine if collapse button was pressed.
-///
-///    \returns the visible item under the event if found, or 0 if none.
-///
-Fl_Tree_Item *Fl_Tree_Item::find_clicked(const Fl_Tree_Prefs &prefs) {
-  if ( ! _visible ) return(0);
-  if ( is_root() && !prefs.showroot() ) {
-    // skip event check if we're root but root not being shown
-  } else {
-    // See if event is over us
-    if ( event_inside(_xywh) ) {		// event within this item?
-      return(this);				// found
-    }
-  }
-  if ( is_open() ) {				// open? check children of this item
-    for ( int t=0; t<children(); t++ ) {
-      Fl_Tree_Item *item;
-      if ( ( item = _children[t]->find_clicked(prefs) ) != NULL ) {	// check child and its descendents
-        return(item);							// found?
-      }
-    }
-  }
-  return(0);
-}
-
-static void draw_item_focus(Fl_Boxtype B, Fl_Color C, int X, int Y, int W, int H) {
-  if (!Fl::visible_focus()) return;
-  switch (B) {
-    case FL_DOWN_BOX:
-    case FL_DOWN_FRAME:
-    case FL_THIN_DOWN_BOX:
-    case FL_THIN_DOWN_FRAME:
-      X ++;
-      Y ++;
-    default:
-      break;
-  }
-  fl_color(fl_contrast(FL_BLACK, C));
-
-#if defined(USE_X11) || defined(__APPLE_QUARTZ__)
-  fl_line_style(FL_DOT);
-  fl_rect(X + Fl::box_dx(B), Y + Fl::box_dy(B),
-          W - Fl::box_dw(B) - 1, H - Fl::box_dh(B) - 1);
-  fl_line_style(FL_SOLID);
-#else
-  // Some platforms don't implement dotted line style, so draw
-  // every other pixel around the focus area...
-  //
-  // Also, QuickDraw (MacOS) does not support line styles specifically,
-  // and the hack we use in fl_line_style() will not draw horizontal lines
-  // on odd-numbered rows...
-  int i, xx, yy;
-
-  X += Fl::box_dx(B);
-  Y += Fl::box_dy(B);
-  W -= Fl::box_dw(B) + 2;
-  H -= Fl::box_dh(B) + 2;
-
-  for (xx = 0, i = 1; xx < W; xx ++, i ++) if (i & 1) fl_point(X + xx, Y);
-  for (yy = 0; yy < H; yy ++, i ++) if (i & 1) fl_point(X + W, Y + yy);
-  for (xx = W; xx > 0; xx --, i ++) if (i & 1) fl_point(X + xx, Y + H);
-  for (yy = H; yy > 0; yy --, i ++) if (i & 1) fl_point(X, Y + yy);
-#endif
-}
-
-/// Draw this item and its children.
-void Fl_Tree_Item::draw(int X, int &Y, int W, Fl_Widget *tree,
-			Fl_Tree_Item *itemfocus,
-                        const Fl_Tree_Prefs &prefs, int lastchild) {
-  if ( ! _visible ) return; 
-  fl_font(_labelfont, _labelsize);
-  int H = _labelsize;
-  if(usericon() && H < usericon()->h()) H = usericon()->h(); 
-  H += prefs.linespacing() + fl_descent();
-  // adjust horizontally if we draw no connecting lines
-  if ( is_root() && prefs.connectorstyle() == FL_TREE_CONNECTOR_NONE ) {
-    X -= prefs.openicon()->w();
-    W += prefs.openicon()->w();
-  }
-  // Colors, fonts
-  Fl_Color fg = _selected ? fl_contrast(_labelfgcolor, tree->selection_color())
-                          : _active ? _labelfgcolor 
-			            : fl_inactive(_labelfgcolor);
-  Fl_Color bg = _selected ? _active ? tree->selection_color() 
-                                    : fl_inactive(tree->selection_color())
-                          : _labelbgcolor;
-  // Update the xywh of this item
-  _xywh[0] = X;
-  _xywh[1] = Y;
-  _xywh[2] = W;
-  _xywh[3] = H;
-  // Text size
-  int textw=0, texth=0;
-  fl_measure(_label, textw, texth, 0);
-  int textycenter = Y+(H/2);
-  int &icon_w = _collapse_xywh[2] = prefs.openicon()->w();
-  int &icon_x = _collapse_xywh[0] = X + (icon_w + prefs.connectorwidth())/2 - 3;
-  int &icon_y = _collapse_xywh[1] = textycenter - (prefs.openicon()->h()/2);
-  _collapse_xywh[3] = prefs.openicon()->h();
-  // Horizontal connector values
-  int hstartx  = X+icon_w/2-1;
-  int hendx    = hstartx + prefs.connectorwidth();
-  int hcenterx = X + icon_w + ((hendx - (X + icon_w)) / 2);
-  
-  // See if we should draw this item
-  //    If this item is root, and showroot() is disabled, don't draw.
-  //
-  char drawthis = ( is_root() && prefs.showroot() == 0 ) ? 0 : 1;
-  if ( drawthis ) {
-    // Draw connectors
-    if ( prefs.connectorstyle() != FL_TREE_CONNECTOR_NONE ) {
-      // Horiz connector between center of icon and text
-      // if this is root, the connector should not dangle in thin air on the left
-      if (is_root())
-        draw_horizontal_connector(hcenterx, hendx, textycenter, prefs);
-      else
-        draw_horizontal_connector(hstartx, hendx, textycenter, prefs);
-      if ( has_children() && is_open() ) {
-        // Small vertical line down to children
-        draw_vertical_connector(hcenterx, textycenter, Y+H, prefs);
-      }
-      // Connectors for last child
-      if ( ! is_root() ) {
-        if ( lastchild ) {
-          draw_vertical_connector(hstartx, Y, textycenter, prefs);
-        } else {
-          draw_vertical_connector(hstartx, Y, Y+H, prefs);
-        }
-      }
-    } 
-    // Draw collapse icon
-    if ( has_children() && prefs.showcollapse() ) {
-      // Draw icon image
-      if ( is_open() ) {
-        prefs.closeicon()->draw(icon_x,icon_y);
-      } else {
-        prefs.openicon()->draw(icon_x,icon_y);
-      }
-    }
-    // Background for this item
-    int cw1 = icon_w+prefs.connectorwidth()/2, cw2 = prefs.connectorwidth();
-    int cwidth = cw1>cw2 ? cw1 : cw2;
-    int &bx = _label_xywh[0] = X+(icon_w/2-1+cwidth);
-    int &by = _label_xywh[1] = Y;
-    int &bw = _label_xywh[2] = W-(icon_w/2-1+cwidth);
-    int &bh = _label_xywh[3] = H;
-    // Draw bg only if different from tree's bg
-    if ( bg != tree->color() || is_selected() ) {
-      if ( is_selected() ) {
-        // Selected? Use selectbox() style
-        fl_draw_box(prefs.selectbox(), bx, by, bw, bh, bg);
-      } else {
-        // Not Selected? use plain filled rectangle
-        fl_color(bg);
-        fl_rectf(bx, by, bw, bh);
-      }
-    }
-    // Draw user icon (if any)
-    int useroff = (icon_w/2-1+cwidth);
-    if ( usericon() ) {
-      // Item has user icon? Use it
-      useroff += prefs.usericonmarginleft();
-      icon_y = textycenter - (usericon()->h() >> 1);
-      usericon()->draw(X+useroff,icon_y);
-      useroff += usericon()->w();
-    } else if ( prefs.usericon() ) {
-      // Prefs has user icon? Use it
-      useroff += prefs.usericonmarginleft();
-      icon_y = textycenter - (prefs.usericon()->h() >> 1);
-      prefs.usericon()->draw(X+useroff,icon_y);
-      useroff += prefs.usericon()->w();
-    }
-    useroff += prefs.labelmarginleft();
-    // Draw label
-    if ( widget() ) {
-      // Widget? Draw it
-      int lx = X+useroff;
-      int ly = by;
-      int lw = widget()->w();
-      int lh = bh;
-      if ( widget()->x() != lx || widget()->y() != ly ||
-          widget()->w() != lw || widget()->h() != lh ) {
-        widget()->resize(lx, ly, lw, lh);		// fltk will handle drawing this
-      }
-    } else {
-      // No label widget? Draw text label
-      if ( _label ) {
-        fl_color(fg);
-        fl_draw(_label, X+useroff, Y+H-fl_descent()-1);
-      }
-    }
-    if ( this == itemfocus && Fl::visible_focus() && Fl::focus() == tree) {
-      // Draw focus box around this item
-      draw_item_focus(FL_NO_BOX,bg,bx+1,by+1,bw-1,bh-1);
-    }
-    Y += H;
-  }			// end drawthis
-  // Draw children
-  if ( has_children() && is_open() ) {
-    int child_x = drawthis ? 				// offset children to right,
-    (hcenterx - (icon_w/2) + 1) : X;			// unless didn't drawthis
-    int child_w = W - (child_x-X);
-    int child_y_start = Y;
-    for ( int t=0; t<children(); t++ ) {
-      int lastchild = ((t+1)==children()) ? 1 : 0;
-      _children[t]->draw(child_x, Y, child_w, tree, itemfocus, prefs, lastchild);
-    }
-    if ( has_children() && is_open() ) {
-      Y += prefs.openchild_marginbottom();		// offset below open child tree
-    }
-    if ( ! lastchild ) {
-      draw_vertical_connector(hstartx, child_y_start, Y, prefs);
-    }
-  }
-}
-
-/// Was the event on the 'collapse' button?
-///
-int Fl_Tree_Item::event_on_collapse_icon(const Fl_Tree_Prefs &prefs) const {
-  if ( _visible && _active && has_children() && prefs.showcollapse() ) {
-    return(event_inside(_collapse_xywh) ? 1 : 0);
-  } else {
-    return(0);
-  }
-}
-
-/// Was event on the label()?
-///
-int Fl_Tree_Item::event_on_label(const Fl_Tree_Prefs &prefs) const {
-  if ( _visible && _active ) {
-    return(event_inside(_label_xywh) ? 1 : 0);
-  } else {
-    return(0);
-  }
-}
-
-/// Internal: Show the FLTK widget() for this item and all children.
-/// Used by open() to re-show widgets that were hidden by a previous close()
-///
-void Fl_Tree_Item::show_widgets() {
-  if ( _widget ) _widget->show();
-  if ( is_open() ) {
-    for ( int t=0; t<_children.total(); t++ ) {
-      _children[t]->show_widgets();
-    }
-  }
-}
-
-/// Internal: Hide the FLTK widget() for this item and all children.
-/// Used by close() to hide widgets.
-///
-void Fl_Tree_Item::hide_widgets() {
-  if ( _widget ) _widget->hide();
-  for ( int t=0; t<_children.total(); t++ ) {
-    _children[t]->hide_widgets();
-  }
-}
-
-/// Open this item and all its children.
-void Fl_Tree_Item::open() {
-  _open = 1;
-  // Tell children to show() their widgets
-  for ( int t=0; t<_children.total(); t++ ) {
-    _children[t]->show_widgets();
-  }
-}
-
-/// Close this item and all its children.
-void Fl_Tree_Item::close() {
-  _open = 0;
-  // Tell children to hide() their widgets
-  for ( int t=0; t<_children.total(); t++ ) {
-    _children[t]->hide_widgets();
-  }
-}
-
-/// Returns how many levels deep this item is in the hierarchy.
-///
-/// For instance; root has a depth of zero, and its immediate children
-/// would have a depth of 1, and so on.
-///
-int Fl_Tree_Item::depth() const {
-  int count = 0;
-  const Fl_Tree_Item *item = parent();
-  while ( item ) {
-    ++count;
-    item = item->parent();
-  }
-  return(count);
-}
-
-/// Return the next item in the tree.
-///
-/// This method can be used to walk the tree forward.
-/// For an example of how to use this method, see Fl_Tree::first().
-/// 
-/// \returns the next item in the tree, or 0 if there's no more items.
-///
-Fl_Tree_Item *Fl_Tree_Item::next() {
-  Fl_Tree_Item *p, *c = this;
-  if ( c->has_children() ) {
-    return(c->child(0));
-  }
-  while ( ( p = c->parent() ) != NULL ) {	// loop upwards through parents
-    int t = p->find_child(c);			// find our position in parent's children[] array
-    if ( ++t < p->children() )			// not last child?
-      return(p->child(t));			// return next child
-    c = p;					// child becomes parent to move up generation
-  }						// loop: moves up to next parent
-  return(0);					// hit root? done
-}
-
-/// Return the previous item in the tree.
-///
-/// This method can be used to walk the tree backwards.
-/// For an example of how to use this method, see Fl_Tree::last().
-/// 
-/// \returns the previous item in the tree, or 0 if there's no item above this one (hit the root).
-///
-Fl_Tree_Item *Fl_Tree_Item::prev() {
-  Fl_Tree_Item *p=parent();		// start with parent
-  if ( ! p ) return(0);			// hit root? done
-  int t = p->find_child(this);		// find our position in parent's children[] array
-  if ( --t == -1 ) {	 		// are we first child?
-    return(p);				// return immediate parent
-  }
-  p = p->child(t);			// take parent's previous child
-  while ( p->has_children() ) {		// has children?
-    p = p->child(p->children()-1);	// take last child
-  }
-  return(p);
-}
-
-/// Return this item's next sibling.
-///
-/// Moves to the next item below us at the same level (sibling).
-/// Use this to move down the tree without moving deeper into the tree,
-/// effectively skipping over this item's children/descendents.
-/// 
-/// \returns item's next sibling, or 0 if none.
-///
-Fl_Tree_Item *Fl_Tree_Item::next_sibling() {
-  if ( !parent() ) return(0);			// No parent (root)? We have no siblings
-  int index = parent()->find_child(this);	// find our position in parent's child() array
-  if ( index == -1 ) return(0);			// parent doesn't know us? weird
-  if ( (index+1) < parent()->children() )	// is there a next child?
-    return(parent()->child(index+1));		// return next child if there's one below us
-  return(0);					// no siblings below us
-}
-
-/// Return this item's previous sibling.
-///
-/// Moves to the previous item above us at the same level (sibling).
-/// Use this to move up the tree without moving deeper into the tree.
-/// 
-/// \returns This item's previous sibling, or 0 if none.
-///
-Fl_Tree_Item *Fl_Tree_Item::prev_sibling() {
-  if ( !parent() ) return(0);				// No parent (root)? We have no siblings
-  int index = parent()->find_child(this);		// find next position up in parent's child() array
-  if ( index == -1 ) return(0);				// parent doesn't know us? weird
-  if ( index > 0 ) return(parent()->child(index-1));	// return previous child if there's one above us
-  return(0);						// no siblings above us
-}
-
-/// Return the next visible item. (If this item has children and is closed, children are skipped)
-///
-/// This method can be used to walk the tree forward, skipping items
-/// that are not currently visible to the user.
-/// 
-/// \returns the next visible item below us, or 0 if there's no more items.
-///
-Fl_Tree_Item *Fl_Tree_Item::next_displayed(Fl_Tree_Prefs &prefs) {
-  Fl_Tree_Item *c = this;
-  while ( c ) {
-    if ( c->is_root() && !prefs.showroot() ) {		// on root and can't show it?
-      c = c->next();					// skip ahead, try again
-      continue;
-    }
-    if ( c->has_children() && c->is_close() ) {		// item has children and: invisible or closed?
-      // Skip children, take next sibling. If none, try parent's sibling, repeat
-      while ( c ) {
-	Fl_Tree_Item *sib = c->next_sibling();		// get sibling
-	if ( sib ) { c = sib; break; }			// Found? let outer loop test it
-	c = c->parent();				// No sibling? move up tree, try parent's sibling
-      }
-    } else {						// has children and isn't closed, or no children
-      c = c->next();					// use normal 'next'
-    }
-    if ( !c ) return(0);				// no more? done
-    // Check all parents to be sure none are closed.
-    // If closed, move up to that level and repeat until sure none are closed.
-    Fl_Tree_Item *p = c->parent();
-    while (1) {
-      if ( !p || p->is_root() ) return(c);		// hit top? then we're displayed, return c
-      if ( p->is_close() ) c = p;			// found closed parent? make it current
-      p = p->parent();					// continue up tree
-    }
-    if ( c && c->visible() ) return(c);			// item visible? return it
-  }
-  return(0);						// hit end: no more items
-}
-
-/// Return the previous visible item. (If this item above us has children and is closed, its children are skipped)
-///
-/// This method can be used to walk the tree backward, 
-/// skipping items that are not currently visible to the user.
-/// 
-/// \returns the previous visible item above us, or 0 if there's no more items.
-///
-Fl_Tree_Item *Fl_Tree_Item::prev_displayed(Fl_Tree_Prefs &prefs) {
-  Fl_Tree_Item *c = this;
-  while ( c ) {
-    c = c->prev();					// previous item
-    if ( !c ) break;					// no more items? done
-    if ( c->is_root() )					// root
-      return((prefs.showroot()&&c->visible()) ? c : 0);	// return root if visible
-    if ( !c->visible() ) continue;			// item not visible? skip
-    // Check all parents to be sure none are closed.
-    // If closed, move up to that level and repeat until sure none are closed.
-    Fl_Tree_Item *p = c->parent();
-    while (1) {
-      if ( !p || p->is_root() ) return(c);		// hit top? then we're displayed, return c
-      if ( p->is_close() ) c = p;			// found closed parent? make it current
-      p = p->parent();					// continue up tree
-    }
-  }
-  return(0);						// hit end: no more items
-}
-
-/// Returns if item and all its parents are visible.
-/// Also takes into consideration if any parent is close()ed.
-/// \returns
-///    1 -- item and its parents are visible/open()
-///    0 -- item (or parents) invisible or close()ed.
-///
-int Fl_Tree_Item::visible_r() const {
-  for (const Fl_Tree_Item *p=this; p; p=p->parent())	// move up through parents
-    if (!p->visible() || p->is_close()) return(0);	// any parent not visible or closed?
-  return(1);
-}
-
-//
-// End of "$Id: Fl_Tree_Item.cxx 8589 2011-04-14 13:15:13Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Tree_Item_Array.cxx b/common/fltk/src/Fl_Tree_Item_Array.cxx
deleted file mode 100644
index 13600bd..0000000
--- a/common/fltk/src/Fl_Tree_Item_Array.cxx
+++ /dev/null
@@ -1,157 +0,0 @@
-//
-// "$Id: Fl_Tree_Item_Array.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <FL/Fl_Tree_Item_Array.H>
-#include <FL/Fl_Tree_Item.H>
-
-//////////////////////
-// Fl_Tree_Item_Array.cxx
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-
-/// Constructor; creates an empty array.
-///
-///     The optional 'chunksize' can be specified to optimize
-///     memory allocation for potentially large arrays. Default chunksize is 10.
-/// 
-Fl_Tree_Item_Array::Fl_Tree_Item_Array(int new_chunksize) {
-  _items     = 0;
-  _total     = 0;
-  _size      = 0;
-  _chunksize = new_chunksize;
-}
-
-/// Destructor. Calls each item's destructor, destroys internal _items array.
-Fl_Tree_Item_Array::~Fl_Tree_Item_Array() {
-  clear();
-}
-
-/// Copy constructor. Makes new copy of array, with new instances of each item.
-Fl_Tree_Item_Array::Fl_Tree_Item_Array(const Fl_Tree_Item_Array* o) {
-  _items = (Fl_Tree_Item**)malloc(o->_size * sizeof(Fl_Tree_Item*));
-  _total     = o->_total;
-  _size      = o->_size;
-  _chunksize = o->_chunksize;
-  for ( int t=0; t<o->_total; t++ ) {
-    _items[t] = new Fl_Tree_Item(o->_items[t]);
-  }
-}
-
-/// Clear the entire array.
-///
-///     Each item will be deleted (destructors will be called),
-///     and the array will be cleared. total() will return 0.
-///
-void Fl_Tree_Item_Array::clear() {
-  if ( _items ) {
-    for ( int t=0; t<_total; t++ ) {
-      delete _items[t];
-      _items[t] = 0;
-    }
-    free((void*)_items); _items = 0;
-  }
-  _total = _size = 0;
-}
-
-// Internal: Enlarge the items array.
-//
-//    Adjusts size/items memory allocation as needed.
-//    Does NOT change total.
-//
-void Fl_Tree_Item_Array::enlarge(int count) {
-  int newtotal = _total + count;	// new total
-  if ( newtotal >= _size ) {		// more than we have allocated?
-    // Increase size of array
-    int newsize = _size + _chunksize;
-    Fl_Tree_Item **newitems = (Fl_Tree_Item**)malloc(newsize * sizeof(Fl_Tree_Item*));
-    if ( _items ) { 
-      // Copy old array -> new, delete old
-      memmove(newitems, _items, _size * sizeof(Fl_Tree_Item*));
-      free((void*)_items); _items = 0;
-    }
-    // Adjust items/sizeitems
-    _items = newitems;
-    _size = newsize;
-  }
-}
-
-/// Insert an item at index position \p pos.
-///
-///     Handles enlarging array if needed, total increased by 1.
-///     If \p pos == total(), an empty item is appended to the array.
-///
-void Fl_Tree_Item_Array::insert(int pos, Fl_Tree_Item *new_item) {
-  enlarge(1);
-  // printf("*** POS=%d TOTAL-1=%d NITEMS=%d\n", pos, _total-1, (_total-pos));
-  if ( pos <= (_total - 1) ) {	// need to move memory around?
-    int nitems = _total - pos;
-    memmove(&_items[pos+1], &_items[pos], sizeof(Fl_Tree_Item*) * nitems);
-  } 
-  _items[pos] = new_item;
-  _total++;
-}
-
-/// Add an item* to the end of the array.
-///
-///     Assumes the item was created with 'new', and will remain
-///     allocated.. Fl_Tree_Item_Array will handle calling the
-///     item's destructor when the array is cleared or the item remove()'ed.
-///
-void Fl_Tree_Item_Array::add(Fl_Tree_Item *val) {
-  insert(_total, val);
-}
-
-/// Remove the item at \param[in] index from the array.
-///
-///     The item will be delete'd (if non-NULL), so its destructor will be called.
-///
-void Fl_Tree_Item_Array::remove(int index) {
-  if ( _items[index] ) {		// delete if non-zero
-    delete _items[index];
-  }
-  _items[index] = 0;
-  for ( _total--; index<_total; index++ ) {
-    _items[index] = _items[index+1];
-  }
-}
-
-/// Remove the item from the array.
-///
-///     \returns 0 if removed, or -1 if the item was not in the array.
-///
-int Fl_Tree_Item_Array::remove(Fl_Tree_Item *item) {
-  for ( int t=0; t<_total; t++ ) {
-    if ( item == _items[t] ) {
-      remove(t);
-      return(0);
-    }
-  }
-  return(-1);
-}
-
-//
-// End of "$Id: Fl_Tree_Item_Array.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Tree_Prefs.cxx b/common/fltk/src/Fl_Tree_Prefs.cxx
deleted file mode 100644
index 796c219..0000000
--- a/common/fltk/src/Fl_Tree_Prefs.cxx
+++ /dev/null
@@ -1,168 +0,0 @@
-//
-// "$Id: Fl_Tree_Prefs.cxx 8340 2011-01-30 20:22:06Z greg.ercolano $"
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Tree_Prefs.H>
-#include <string.h>
-
-//////////////////////
-// Fl_Tree_Prefs.cxx
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 by Greg Ercolano.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-
-// INTERNAL: BUILT IN OPEN/STOW XPMS
-//    These can be replaced via prefs.openicon()/closeicon()
-//
-static const char *L_open_xpm[] = {
-#ifdef __APPLE__
-  "11 11 2 1",
-  ".  c None",
-  "@  c #000000",
-  "...@.......",
-  "...@@......",
-  "...@@@.....",
-  "...@@@@....",
-  "...@@@@@...",
-  "...@@@@@@..",
-  "...@@@@@...",
-  "...@@@@....",
-  "...@@@.....",
-  "...@@......",
-  "...@......."
-#else
-  "11 11 3 1",
-  ".	c #fefefe",
-  "#	c #444444",
-  "@	c #000000",
-  "###########",
-  "#.........#",
-  "#.........#",
-  "#....@....#",
-  "#....@....#",
-  "#..@@@@@..#",
-  "#....@....#",
-  "#....@....#",
-  "#.........#",
-  "#.........#",
-  "###########"
-#endif
-};
-static Fl_Pixmap L_openpixmap(L_open_xpm);
-
-static const char *L_close_xpm[] = {
-#ifdef __APPLE__
-  "11 11 2 1",
-  ".  c None",
-  "@  c #000000",
-  "...........",
-  "...........",
-  "...........",
-  "...........",
-  "...........",
-  "@@@@@@@@@@@",
-  ".@@@@@@@@@.",
-  "..@@@@@@@..",
-  "...@@@@@...",
-  "....@@@....",
-  ".....@....."
-#else
-  "11 11 3 1",
-  ".	c #fefefe",
-  "#	c #444444",
-  "@	c #000000",
-  "###########",
-  "#.........#",
-  "#.........#",
-  "#.........#",
-  "#.........#",
-  "#..@@@@@..#",
-  "#.........#",
-  "#.........#",
-  "#.........#",
-  "#.........#",
-  "###########"
-#endif
-};
-static Fl_Pixmap L_closepixmap(L_close_xpm);
-
-/// Sets the default icon to be used as the 'open' icon
-/// when items are add()ed to the tree.
-/// This overrides the built in default '[+]' icon.
-///
-/// \param[in] val -- The new image, or zero to use the default [+] icon.
-///
-void Fl_Tree_Prefs::openicon(Fl_Image *val) {
-  _openimage = val ? val : &L_openpixmap;
-}
-
-/// Sets the icon to be used as the 'close' icon.
-/// This overrides the built in default '[-]' icon.
-///
-/// \param[in] val -- The new image, or zero to use the default [-] icon.
-///
-void Fl_Tree_Prefs::closeicon(Fl_Image *val) {
-  _closeimage = val ? val : &L_closepixmap;
-}
-
-/// Fl_Tree_Prefs constructor
-Fl_Tree_Prefs::Fl_Tree_Prefs() {
-  _labelfont              = FL_HELVETICA;
-  _labelsize              = FL_NORMAL_SIZE;
-  _marginleft             = 6;
-  _margintop              = 3;
-  //_marginright          = 3;
-  //_marginbottom         = 3;
-  _openchild_marginbottom = 0;
-  _usericonmarginleft     = 3;
-  _labelmarginleft        = 3;
-  _linespacing            = 0;
-  _labelfgcolor           = FL_BLACK;
-  _labelbgcolor           = FL_WHITE;
-  _connectorcolor         = Fl_Color(43);
-#ifdef __APPLE__
-  _connectorstyle         = FL_TREE_CONNECTOR_NONE;
-#else
-  _connectorstyle         = FL_TREE_CONNECTOR_DOTTED;
-#endif
-  _openimage              = &L_openpixmap;
-  _closeimage             = &L_closepixmap;
-  _userimage              = 0;
-  _showcollapse           = 1;
-  _showroot               = 1;
-  _connectorwidth         = 17;
-  _sortorder              = FL_TREE_SORT_NONE;
-  _selectbox              = FL_FLAT_BOX;
-  _selectmode             = FL_TREE_SELECT_SINGLE;
-  // Let fltk's current 'scheme' affect defaults
-  if ( Fl::scheme() ) {
-    if ( strcmp(Fl::scheme(), "gtk+") == 0 ) {
-      _selectbox = _FL_GTK_THIN_UP_BOX;
-    } else if ( strcmp(Fl::scheme(), "plastic") == 0 ) {
-      _selectbox = _FL_PLASTIC_THIN_UP_BOX;
-    }
-  }
-}
-
-//
-// End of "$Id: Fl_Tree_Prefs.cxx 8340 2011-01-30 20:22:06Z greg.ercolano $".
-//
diff --git a/common/fltk/src/Fl_Valuator.cxx b/common/fltk/src/Fl_Valuator.cxx
deleted file mode 100644
index cfa4402..0000000
--- a/common/fltk/src/Fl_Valuator.cxx
+++ /dev/null
@@ -1,196 +0,0 @@
-//
-// "$Id: Fl_Valuator.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Valuator widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// Base class for sliders and all other one-value "knobs"
-
-#include <FL/Fl.H>
-#include <FL/Fl_Valuator.H>
-#include <FL/math.h>
-#include <stdio.h>
-#include "flstring.h"
-
-Fl_Valuator::Fl_Valuator(int X, int Y, int W, int H, const char* L)
-/**
-  Creates a new Fl_Valuator widget using the given position,
-  size, and label string. The default boxtype is FL_NO_BOX.
-*/
-: Fl_Widget(X,Y,W,H,L) {
-  align(FL_ALIGN_BOTTOM);
-  when(FL_WHEN_CHANGED);
-  value_ = 0;
-  previous_value_ = 1;
-  min = 0;
-  max = 1;
-  A = 0.0;
-  B = 1;
-}
-
-const double epsilon = 4.66e-10;
-
-/**  See double Fl_Valuator::step() const */
-void Fl_Valuator::step(double s) {
-  if (s < 0) s = -s;
-  A = rint(s);
-  B = 1;
-  while (fabs(s-A/B) > epsilon && B<=(0x7fffffff/10)) {B *= 10; A = rint(s*B);}
-}
-
-/**  Sets the step value to 1/10<SUP>digits</SUP>.*/
-void Fl_Valuator::precision(int p) {
-  A = 1.0;
-  for (B = 1; p--;) B *= 10;
-}
-/** Asks for partial redraw */
-void Fl_Valuator::value_damage() {damage(FL_DAMAGE_EXPOSE);} // by default do partial-redraw
-
-/**
-    Sets the current value. The new value is <I>not</I>
-    clamped or otherwise changed before storing it. Use
-    clamp() or round() to modify the value before
-    calling value(). The widget is redrawn if the new value
-    is different than the current one. The initial value is zero.
-    <P>changed() will return true if the user has moved the slider,
-    but it will be turned off by value(x) and just before doing a callback
-    (the callback can turn it back on if desired).
-*/
-int Fl_Valuator::value(double v) {
-  clear_changed();
-  if (v == value_) return 0;
-  value_ = v;
-  value_damage();
-  return 1;
-}
-/** Clamps the value, but accepts v if the previous value is not already out of range */
-double Fl_Valuator::softclamp(double v) {
-  int which = (min<=max);
-  double p = previous_value_;
-  if ((v<min)==which && p!=min && (p<min)!=which) return min;
-  else if ((v>max)==which && p!=max && (p>max)!=which) return max;
-  else return v;
-}
-
-// inline void Fl_Valuator::handle_push() {previous_value_ = value_;}
-/** Called during a drag operation, after an FL_WHEN_CHANGED event is received and before the callback. */
-void Fl_Valuator::handle_drag(double v) {
-  if (v != value_) {
-    value_ = v;
-    value_damage();
-    set_changed();
-    if (when() & FL_WHEN_CHANGED) do_callback();
-  }
-}
-/** Called after an FL_WHEN_RELEASE event is received and before the callback. */
-void Fl_Valuator::handle_release() {
-  if (when()&FL_WHEN_RELEASE) {
-    // insure changed() is off even if no callback is done.  It may have
-    // been turned on by the drag, and then the slider returned to it's
-    // initial position:
-    clear_changed();
-    // now do the callback only if slider in new position or always is on:
-    if (value_ != previous_value_ || when() & FL_WHEN_NOT_CHANGED) {
-      do_callback();
-    }
-  }
-}
-
-/**
-  Round the passed value to the nearest step increment.  Does
-  nothing if step is zero.
-*/
-double Fl_Valuator::round(double v) {
-  if (A) return rint(v*B/A)*A/B;
-  else return v;
-}
-
-/**  Clamps the passed value to the valuator range.*/
-double Fl_Valuator::clamp(double v) {
-  if ((v<min)==(min<=max)) return min;
-  else if ((v>max)==(min<=max)) return max;
-  else return v;
-}
-
-/**
-  Adds n times the step value to the passed value. If
-  step was set to zero it uses fabs(maximum() - minimum()) /
-  100.
-*/
-double Fl_Valuator::increment(double v, int n) {
-  if (!A) return v+n*(max-min)/100;
-  if (min > max) n = -n;
-  return (rint(v*B/A)+n)*A/B;
-}
-
-/**
-  Uses internal rules to format the fields numerical value into
-  the character array pointed to by the passed parameter.</P>
-  
-  <P>The actual format used depends on the current step value. If
-  the step value has been set to zero then a %g format is used.
-  If the step value is non-zero, then a %.*f format is used,
-  where the precision is calculated to show sufficient digits
-  for the current step value. An integer step value, such as 1
-  or 1.0, gives a precision of 0, so the formatted value will
-  appear as an integer.</P>
-  
-  <P>This method is used by the Fl_Value_... group of widgets to 
-  format the current value into a text string. 
-  The return value is the length of the formatted text.
-  The formatted value is written into in <i>buffer</i>. 
-  <i>buffer</i> should have space for at least 128 bytes.</P>
-  
-  <P>You may override this function to create your own text formatting.
-*/
-int Fl_Valuator::format(char* buffer) {
-  double v = value();
-  // MRS: THIS IS A HACK - RECOMMEND ADDING BUFFER SIZE ARGUMENT
-  if (!A || !B) return snprintf(buffer, 128, "%g", v);
-
-  // Figure out how many digits are required to correctly format the
-  // value.
-  int i, c = 0;
-  char temp[32];
-  // output a number with many digits after the decimal point. This
-  // seems to be needed to get high precission
-  snprintf(temp, sizeof(temp), "%.12f", A/B);
-  // strip all trailing 0's
-  for (i=strlen(temp)-1; i>0; i--) {
-    if (temp[i]!='0') break;
-  }
-  // count digits until we find the decimal point (or comma or whatever
-  // letter is set in the current locale)
-  for (; i>0; i--, c++) {
-    if (!isdigit(temp[i])) break;
-  }
-
-  // MRS: THIS IS A HACK - RECOMMEND ADDING BUFFER SIZE ARGUMENT
-  return snprintf(buffer, 128, "%.*f", c, v);
-}
-
-//
-// End of "$Id: Fl_Valuator.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Value_Input.cxx b/common/fltk/src/Fl_Value_Input.cxx
deleted file mode 100644
index f4817d8..0000000
--- a/common/fltk/src/Fl_Value_Input.cxx
+++ /dev/null
@@ -1,149 +0,0 @@
-//
-// "$Id: Fl_Value_Input.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Value input widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// FLTK widget for drag-adjusting a floating point value.
-// Warning: this works by making a child Fl_Input object, even
-// though this object is *not* an Fl_Group.  May be a kludge?
-
-#include <FL/Fl.H>
-#include <FL/Fl_Value_Input.H>
-#include <FL/Fl_Group.H>
-#include <stdlib.h>
-#include <FL/math.h>
-
-
-void Fl_Value_Input::input_cb(Fl_Widget*, void* v) {
-  Fl_Value_Input& t = *(Fl_Value_Input*)v;
-  double nv;
-  if ((t.step() - floor(t.step()))>0.0 || t.step() == 0.0) nv = strtod(t.input.value(), 0);
-  else nv = strtol(t.input.value(), 0, 0);
-  if (nv != t.value() || t.when() & FL_WHEN_NOT_CHANGED) {
-    t.set_value(nv);
-    t.set_changed();
-    if (t.when()) t.do_callback();
-  }
-}
-
-void Fl_Value_Input::draw() {
-  if (damage()&~FL_DAMAGE_CHILD) input.clear_damage(FL_DAMAGE_ALL);
-  input.box(box());
-  input.color(color(), selection_color());
-  Fl_Widget *i = &input; i->draw(); // calls protected input.draw()
-  input.clear_damage();
-}
-
-void Fl_Value_Input::resize(int X, int Y, int W, int H) {
-  Fl_Valuator::resize(X, Y, W, H);
-  input.resize(X, Y, W, H);
-}
-
-void Fl_Value_Input::value_damage() {
-  char buf[128];
-  format(buf);
-  input.value(buf);
-  input.mark(input.position()); // turn off selection highlight
-}
-
-int Fl_Value_Input::handle(int event) {
-  double v;
-  int delta;
-  int mx = Fl::event_x_root();
-  static int ix, drag;
-  input.when(when());
-  switch (event) {
-  case FL_PUSH:
-    if (!step()) goto DEFAULT;
-    ix = mx;
-    drag = Fl::event_button();
-    handle_push();
-    return 1;
-  case FL_DRAG:
-    if (!step()) goto DEFAULT;
-    delta = mx-ix;
-    if (delta > 5) delta -= 5;
-    else if (delta < -5) delta += 5;
-    else delta = 0;
-    switch (drag) {
-    case 3: v = increment(previous_value(), delta*100); break;
-    case 2: v = increment(previous_value(), delta*10); break;
-    default:v = increment(previous_value(), delta); break;
-    }
-    v = round(v);
-    handle_drag(soft()?softclamp(v):clamp(v));;
-    return 1;
-  case FL_RELEASE:
-    if (!step()) goto DEFAULT;
-    if (value() != previous_value() || !Fl::event_is_click())
-      handle_release();
-    else {
-      Fl_Widget_Tracker wp(&input);
-      input.handle(FL_PUSH);
-      if (wp.exists())
-	input.handle(FL_RELEASE);
-    }
-    return 1;
-  case FL_FOCUS:
-    return input.take_focus();
-  case FL_SHORTCUT:
-    return input.handle(event);
-  default:
-  DEFAULT:
-    input.type(((step() - floor(step()))>0.0 || step() == 0.0) ? FL_FLOAT_INPUT : FL_INT_INPUT);
-    return input.handle(event);
-  }
-}
-
-/**
-  Creates a new Fl_Value_Input widget using the given
-  position, size, and label string. The default boxtype is
-  FL_DOWN_BOX.
-*/
-Fl_Value_Input::Fl_Value_Input(int X, int Y, int W, int H, const char* l)
-: Fl_Valuator(X, Y, W, H, l), input(X, Y, W, H, 0) {
-  soft_ = 0;
-  if (input.parent())  // defeat automatic-add
-    input.parent()->remove(input);
-  input.parent((Fl_Group *)this); // kludge!
-  input.callback(input_cb, this);
-  input.when(FL_WHEN_CHANGED);
-  box(input.box());
-  color(input.color());
-  selection_color(input.selection_color());
-  align(FL_ALIGN_LEFT);
-  value_damage();
-  set_flag(SHORTCUT_LABEL);
-}
-
-Fl_Value_Input::~Fl_Value_Input() {
-
-  if (input.parent() == (Fl_Group *)this)
-    input.parent(0);   // *revert* ctor kludge!
-}
-
-//
-// End of "$Id: Fl_Value_Input.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Value_Output.cxx b/common/fltk/src/Fl_Value_Output.cxx
deleted file mode 100644
index 7dd3f45..0000000
--- a/common/fltk/src/Fl_Value_Output.cxx
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// "$Id: Fl_Value_Output.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Value output widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Fltk widget for drag-adjusting a floating point value.
-// This is much lighter than Fl_Value_Input because it has no text editor
-// If step() is zero then it can be used to display a floating-point value
-
-#include <FL/Fl.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/fl_draw.H>
-
-void Fl_Value_Output::draw() {
-  Fl_Boxtype b = box() ? box() : FL_DOWN_BOX;
-  int X = x()+Fl::box_dx(b);
-  int Y = y()+Fl::box_dy(b);
-  int W = w()-Fl::box_dw(b);
-  int H = h()-Fl::box_dh(b);
-  if (damage()&~FL_DAMAGE_CHILD)
-    draw_box(b, color());
-  else {
-    fl_color(color());
-    fl_rectf(X, Y, W, H);
-  }
-  char buf[128];
-  format(buf);
-  fl_color(active_r() ? textcolor() : fl_inactive(textcolor()));
-  fl_font(textfont(), textsize());
-  fl_draw(buf,X,Y,W,H,FL_ALIGN_LEFT);
-}
-
-int Fl_Value_Output::handle(int event) {
-  if (!step()) return 0;
-  double v;
-  int delta;
-  int mx = Fl::event_x();
-  static int ix, drag;
-  switch (event) {
-  case FL_PUSH:
-    ix = mx;
-    drag = Fl::event_button();
-    handle_push();
-    return 1;
-  case FL_DRAG:
-    delta = Fl::event_x()-ix;
-    if (delta > 5) delta -= 5;
-    else if (delta < -5) delta += 5;
-    else delta = 0;
-    switch (drag) {
-    case 3: v = increment(previous_value(),delta*100); break;
-    case 2: v = increment(previous_value(),delta*10); break;
-    default:v = increment(previous_value(),delta); break;
-    }
-    v = round(v);
-    handle_drag(soft()?softclamp(v):clamp(v));;
-    return 1;
-  case FL_RELEASE:
-    handle_release();
-    return 1;
-  case FL_ENTER :
-  case FL_LEAVE :
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-/**
-  Creates a new Fl_Value_Output widget using the given
-  position, size, and label string. The default boxtype is FL_NO_BOX.
-  <P> Inherited destructor destroys the Valuator.
-*/
-Fl_Value_Output::Fl_Value_Output(int X, int Y, int W, int H,const char *l)
-: Fl_Valuator(X,Y,W,H,l) {
-  box(FL_NO_BOX);
-  align(FL_ALIGN_LEFT);
-  textfont_ = FL_HELVETICA;
-  textsize_ = FL_NORMAL_SIZE;
-  textcolor_ = FL_FOREGROUND_COLOR;
-  soft_ = 0;
-}
-
-//
-// End of "$Id: Fl_Value_Output.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Value_Slider.cxx b/common/fltk/src/Fl_Value_Slider.cxx
deleted file mode 100644
index 6c5ff22..0000000
--- a/common/fltk/src/Fl_Value_Slider.cxx
+++ /dev/null
@@ -1,86 +0,0 @@
-//
-// "$Id: Fl_Value_Slider.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Value slider widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/fl_draw.H>
-#include <math.h>
-
-/**
-  Creates a new Fl_Value_Slider widget using the given
-  position, size, and label string. The default boxtype is FL_DOWN_BOX.
-*/
-Fl_Value_Slider::Fl_Value_Slider(int X, int Y, int W, int H, const char*l)
-: Fl_Slider(X,Y,W,H,l) {
-  step(1,100);
-  textfont_ = FL_HELVETICA;
-  textsize_ = 10;
-  textcolor_ = FL_FOREGROUND_COLOR;
-}
-
-void Fl_Value_Slider::draw() {
-  int sxx = x(), syy = y(), sww = w(), shh = h();
-  int bxx = x(), byy = y(), bww = w(), bhh = h();
-  if (horizontal()) {
-    bww = 35; sxx += 35; sww -= 35;
-  } else {
-    syy += 25; bhh = 25; shh -= 25;
-  }
-  if (damage()&FL_DAMAGE_ALL) draw_box(box(),sxx,syy,sww,shh,color());
-  Fl_Slider::draw(sxx+Fl::box_dx(box()),
-		  syy+Fl::box_dy(box()),
-		  sww-Fl::box_dw(box()),
-		  shh-Fl::box_dh(box()));
-  draw_box(box(),bxx,byy,bww,bhh,color());
-  char buf[128];
-  format(buf);
-  fl_font(textfont(), textsize());
-  fl_color(active_r() ? textcolor() : fl_inactive(textcolor()));
-  fl_draw(buf, bxx, byy, bww, bhh, FL_ALIGN_CLIP);
-}
-
-int Fl_Value_Slider::handle(int event) {
-  if (event == FL_PUSH && Fl::visible_focus()) {
-    Fl::focus(this);
-    redraw();
-  }
-  int sxx = x(), syy = y(), sww = w(), shh = h();
-  if (horizontal()) {
-    sxx += 35; sww -= 35;
-  } else {
-    syy += 25; shh -= 25;
-  }
-  return Fl_Slider::handle(event,
-			   sxx+Fl::box_dx(box()),
-			   syy+Fl::box_dy(box()),
-			   sww-Fl::box_dw(box()),
-			   shh-Fl::box_dh(box()));
-}
-
-//
-// End of "$Id: Fl_Value_Slider.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Widget.cxx b/common/fltk/src/Fl_Widget.cxx
deleted file mode 100644
index 96754a9..0000000
--- a/common/fltk/src/Fl_Widget.cxx
+++ /dev/null
@@ -1,345 +0,0 @@
-//
-// "$Id: Fl_Widget.cxx 7940 2010-12-02 17:58:58Z greg.ercolano $"
-//
-// Base widget class for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/fl_draw.H>
-#include <stdlib.h>
-#include "flstring.h"
-
-
-////////////////////////////////////////////////////////////////
-// for compatibility with Forms, all widgets without callbacks are
-// inserted into a "queue" when they are activated, and the forms
-// compatibility interaction functions (fl_do_events, etc.) will
-// read one widget at a time from this queue and return it:
-
-const int QUEUE_SIZE = 20;
-
-static Fl_Widget *obj_queue[QUEUE_SIZE];
-static int obj_head, obj_tail;
-
-void Fl_Widget::default_callback(Fl_Widget *o, void * /*v*/) {
-#if 0
-  // This is necessary for strict forms compatibility but is confusing.
-  // Use the parent's callback if this widget does not have one.
-  for (Fl_Widget *p = o->parent(); p; p = p->parent())
-    if (p->callback() != default_callback) {
-      p->do_callback(o,v);
-      return;
-    }
-#endif
-  obj_queue[obj_head++] = o;
-  if (obj_head >= QUEUE_SIZE) obj_head = 0;
-  if (obj_head == obj_tail) {
-    obj_tail++;
-    if (obj_tail >= QUEUE_SIZE) obj_tail = 0;
-  }
-}
-/**
-    All Fl_Widgets that don't have a callback defined use a
-    default callback that puts a pointer to the widget in this queue,
-    and this method reads the oldest widget out of this queue.
-*/
-Fl_Widget *Fl::readqueue() {
-  if (obj_tail==obj_head) return 0;
-  Fl_Widget *o = obj_queue[obj_tail++];
-  if (obj_tail >= QUEUE_SIZE) obj_tail = 0;
-  return o;
-}
-/*
-    This static internal function removes all pending callbacks for a
-    specific widget from the default callback queue (Fl::readqueue()).
-    It is only called from Fl_Widget's destructor if the widget
-    doesn't have an own callback.
-    Note: There's no need to have this in the Fl:: namespace.
-*/
-static void cleanup_readqueue(Fl_Widget *w) {
-
-  if (obj_tail==obj_head) return;
-  
-  // Read the entire queue and copy over all valid entries.
-  // The new head will be determined after the last copied entry.
-
-  int old_head = obj_head;	// save newest entry
-  int entry = obj_tail;		// oldest entry
-  obj_head = obj_tail;		// new queue start
-  for (;;) {
-    Fl_Widget *o = obj_queue[entry++];
-    if (entry >= QUEUE_SIZE) entry = 0;
-    if (o != w) { // valid entry
-      obj_queue[obj_head++] = o;
-      if (obj_head >= QUEUE_SIZE) obj_head = 0;
-    } // valid entry
-    if (entry == old_head) break;
-  }
-  return;
-}
-////////////////////////////////////////////////////////////////
-
-int Fl_Widget::handle(int) {
-  return 0;
-}
-
-/** Default font size for widgets */
-Fl_Fontsize FL_NORMAL_SIZE = 14;
-
-Fl_Widget::Fl_Widget(int X, int Y, int W, int H, const char* L) {
-
-  x_ = X; y_ = Y; w_ = W; h_ = H;
-
-  label_.value	 = L;
-  label_.image   = 0;
-  label_.deimage = 0;
-  label_.type	 = FL_NORMAL_LABEL;
-  label_.font	 = FL_HELVETICA;
-  label_.size	 = FL_NORMAL_SIZE;
-  label_.color	 = FL_FOREGROUND_COLOR;
-  label_.align_	 = FL_ALIGN_CENTER;
-  tooltip_       = 0;
-  callback_	 = default_callback;
-  user_data_ 	 = 0;
-  type_		 = 0;
-  flags_	 = VISIBLE_FOCUS;
-  damage_	 = 0;
-  box_		 = FL_NO_BOX;
-  color_	 = FL_GRAY;
-  color2_	 = FL_GRAY;
-  when_		 = FL_WHEN_RELEASE;
-
-  parent_ = 0;
-  if (Fl_Group::current()) Fl_Group::current()->add(this);
-}
-
-void Fl_Widget::resize(int X, int Y, int W, int H) {
-  x_ = X; y_ = Y; w_ = W; h_ = H;
-}
-
-// this is useful for parent widgets to call to resize children:
-int Fl_Widget::damage_resize(int X, int Y, int W, int H) {
-  if (x() == X && y() == Y && w() == W && h() == H) return 0;
-  resize(X, Y, W, H);
-  redraw();
-  return 1;
-}
-
-int Fl_Widget::take_focus() {
-  if (!takesevents()) return 0;
-  if (!visible_focus()) return 0;
-  if (!handle(FL_FOCUS)) return 0; // see if it wants it
-  if (contains(Fl::focus())) return 1; // it called Fl::focus for us
-  Fl::focus(this);
-  return 1;
-}
-
-extern void fl_throw_focus(Fl_Widget*); // in Fl_x.cxx
-
-/**
-   Destroys the widget, taking care of throwing focus before if any.
-   Destruction removes the widget from any parent group! And groups when
-   destroyed destroy all their children. This is convenient and fast.
-*/
-Fl_Widget::~Fl_Widget() {
-  Fl::clear_widget_pointer(this);
-  if (flags() & COPIED_LABEL) free((void *)(label_.value));
-  if (flags() & COPIED_TOOLTIP) free((void *)(tooltip_));
-  // remove from parent group
-  if (parent_) parent_->remove(this);
-#ifdef DEBUG_DELETE
-  if (parent_) { // this should never happen
-    printf("*** Fl_Widget: parent_->remove(this) failed [%p,%p]\n",parent_,this);
-  }
-#endif // DEBUG_DELETE
-  parent_ = 0; // Don't throw focus to a parent widget.
-  fl_throw_focus(this);
-  // remove stale entries from default callback queue (Fl::readqueue())
-  if (callback_ == default_callback) cleanup_readqueue(this);
-}
-
-/** Draws a focus box for the widget at the given position and size */
-void
-Fl_Widget::draw_focus(Fl_Boxtype B, int X, int Y, int W, int H) const {
-  if (!Fl::visible_focus()) return;
-  switch (B) {
-    case FL_DOWN_BOX:
-    case FL_DOWN_FRAME:
-    case FL_THIN_DOWN_BOX:
-    case FL_THIN_DOWN_FRAME:
-      X ++;
-      Y ++;
-    default:
-      break;
-  }
-
-  fl_color(fl_contrast(FL_BLACK, color()));
-
-#if defined(USE_X11) || defined(__APPLE_QUARTZ__)
-  fl_line_style(FL_DOT);
-  fl_rect(X + Fl::box_dx(B), Y + Fl::box_dy(B),
-          W - Fl::box_dw(B) - 1, H - Fl::box_dh(B) - 1);
-  fl_line_style(FL_SOLID);
-#elif defined(WIN32) 
-  // Windows 95/98/ME do not implement the dotted line style, so draw
-  // every other pixel around the focus area...
-  //
-  // Also, QuickDraw (MacOS) does not support line styles specifically,
-  // and the hack we use in fl_line_style() will not draw horizontal lines
-  // on odd-numbered rows...
-  int i, xx, yy;
-
-  X += Fl::box_dx(B);
-  Y += Fl::box_dy(B);
-  W -= Fl::box_dw(B) + 2;
-  H -= Fl::box_dh(B) + 2;
-
-  for (xx = 0, i = 1; xx < W; xx ++, i ++) if (i & 1) fl_point(X + xx, Y);
-  for (yy = 0; yy < H; yy ++, i ++) if (i & 1) fl_point(X + W, Y + yy);
-  for (xx = W; xx > 0; xx --, i ++) if (i & 1) fl_point(X + xx, Y + H);
-  for (yy = H; yy > 0; yy --, i ++) if (i & 1) fl_point(X, Y + yy);
-#else
-# error unsupported platform
-#endif // WIN32
-}
-
-
-void Fl_Widget::activate() {
-  if (!active()) {
-    clear_flag(INACTIVE);
-    if (active_r()) {
-      redraw();
-      redraw_label();
-      handle(FL_ACTIVATE);
-      if (inside(Fl::focus())) Fl::focus()->take_focus();
-    }
-  }
-}
-
-void Fl_Widget::deactivate() {
-  if (active_r()) {
-    set_flag(INACTIVE);
-    redraw();
-    redraw_label();
-    handle(FL_DEACTIVATE);
-    fl_throw_focus(this);
-  } else {
-    set_flag(INACTIVE);
-  }
-}
-
-int Fl_Widget::active_r() const {
-  for (const Fl_Widget* o = this; o; o = o->parent())
-    if (!o->active()) return 0;
-  return 1;
-}
-
-void Fl_Widget::show() {
-  if (!visible()) {
-    clear_flag(INVISIBLE);
-    if (visible_r()) {
-      redraw();
-      redraw_label();
-      handle(FL_SHOW);
-      if (inside(Fl::focus())) Fl::focus()->take_focus();
-    }
-  }
-}
-
-void Fl_Widget::hide() {
-  if (visible_r()) {
-    set_flag(INVISIBLE);
-    for (Fl_Widget *p = parent(); p; p = p->parent())
-      if (p->box() || !p->parent()) {p->redraw(); break;}
-    handle(FL_HIDE);
-    fl_throw_focus(this);
-  } else {
-    set_flag(INVISIBLE);
-  }
-}
-
-int Fl_Widget::visible_r() const {
-  for (const Fl_Widget* o = this; o; o = o->parent())
-    if (!o->visible()) return 0;
-  return 1;
-}
-
-// return true if widget is inside (or equal to) this:
-// Returns false for null widgets.
-int Fl_Widget::contains(const Fl_Widget *o) const {
-  for (; o; o = o->parent_) if (o == this) return 1;
-  return 0;
-}
-
-
-void
-Fl_Widget::label(const char *a) {
-  if (flags() & COPIED_LABEL) {
-    // reassigning a copied label remains the same copied label
-    if (label_.value == a)
-      return;
-    free((void *)(label_.value));
-    clear_flag(COPIED_LABEL);
-  }
-  label_.value=a;
-  redraw_label();
-}
-
-
-void
-Fl_Widget::copy_label(const char *a) {
-  if (flags() & COPIED_LABEL) free((void *)(label_.value));
-  if (a) {
-    set_flag(COPIED_LABEL);
-    label_.value=strdup(a);
-  } else {
-    clear_flag(COPIED_LABEL);
-    label_.value=(char *)0;
-  }
-  redraw_label();
-}
-
-/** Calls the widget callback.
-
-  Causes a widget to invoke its callback function with arbitrary arguments.
-
-  \param[in] o call the callback with \p o as the widget argument
-  \param[in] arg use \p arg as the user data argument
-  \see callback()
-*/
-void
-Fl_Widget::do_callback(Fl_Widget* o,void* arg) {
-  Fl_Widget_Tracker wp(this);
-  callback_(o,arg);
-  if (wp.deleted()) return;
-  if (callback_ != default_callback)
-    clear_changed();
-}
-
-//
-// End of "$Id: Fl_Widget.cxx 7940 2010-12-02 17:58:58Z greg.ercolano $".
-//
diff --git a/common/fltk/src/Fl_Window.cxx b/common/fltk/src/Fl_Window.cxx
deleted file mode 100644
index fe872ec..0000000
--- a/common/fltk/src/Fl_Window.cxx
+++ /dev/null
@@ -1,347 +0,0 @@
-//
-// "$Id: Fl_Window.cxx 8472 2011-02-25 08:44:47Z AlbrechtS $"
-//
-// Window widget class for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// The Fl_Window is a window in the fltk library.
-// This is the system-independent portions.  The huge amount of 
-// crap you need to do to communicate with X is in Fl_x.cxx, the
-// equivalent (but totally different) crap for MSWindows is in Fl_win32.cxx
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_RGB_Image.H>
-#include <FL/Fl_Window.H>
-#include <stdlib.h>
-#include "flstring.h"
-
-#ifdef __APPLE_QUARTZ__
-#include <FL/fl_draw.H>
-#endif
-
-char *Fl_Window::default_xclass_ = 0L;
-
-void Fl_Window::_Fl_Window() {
-  type(FL_WINDOW);
-  box(FL_FLAT_BOX);
-  if (Fl::scheme_bg_) {
-    labeltype(FL_NORMAL_LABEL);
-    align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-    image(Fl::scheme_bg_);
-  } else {
-    labeltype(FL_NO_LABEL);
-  }
-  i = 0;
-  xclass_ = 0;
-  icon_ = new icon_data;
-  memset(icon_, 0, sizeof(*icon_));
-  iconlabel_ = 0;
-  resizable(0);
-  size_range_set = 0;
-  minw = maxw = minh = maxh = 0;
-  no_fullscreen_x = 0;
-  no_fullscreen_y = 0;
-  no_fullscreen_w = w();
-  no_fullscreen_h = h();
-  callback((Fl_Callback*)default_callback);
-}
-
-Fl_Window::Fl_Window(int X,int Y,int W, int H, const char *l)
-: Fl_Group(X, Y, W, H, l) {
-  cursor_default = FL_CURSOR_DEFAULT;
-
-  _Fl_Window();
-  set_flag(FORCE_POSITION);
-}
-
-Fl_Window::Fl_Window(int W, int H, const char *l)
-// fix common user error of a missing end() with current(0):
-  : Fl_Group((Fl_Group::current(0),0), 0, W, H, l) {
-  cursor_default = FL_CURSOR_DEFAULT;
-
-  _Fl_Window();
-  clear_visible();
-}
-
-Fl_Window *Fl_Widget::window() const {
-  for (Fl_Widget *o = parent(); o; o = o->parent())
-    if (o->type() >= FL_WINDOW) return (Fl_Window*)o;
-  return 0;
-}
-/** Gets the x position of the window on the screen */
-int Fl_Window::x_root() const {
-  Fl_Window *p = window();
-  if (p) return p->x_root() + x();
-  return x();
-}
-/** Gets the y position of the window on the screen */
-int Fl_Window::y_root() const {
-  Fl_Window *p = window();
-  if (p) return p->y_root() + y();
-  return y();
-}
-
-void Fl_Window::draw() {
-
-  // The following is similar to Fl_Group::draw(), but ...
-  //  - we draw the box with x=0 and y=0 instead of x() and y()
-  //  - we don't draw a label
-
-  if (damage() & ~FL_DAMAGE_CHILD) {	 // draw the entire thing
-    draw_box(box(),0,0,w(),h(),color()); // draw box with x/y = 0
-  }
-  draw_children();
-
-#ifdef __APPLE_QUARTZ__
-  // on OS X, windows have no frame. To resize a window, we drag the lower right
-  // corner. This code draws a little ribbed triangle for dragging.
-  extern CGContextRef fl_gc;
-  if (fl_gc && !parent() && resizable() && (!size_range_set || minh!=maxh || minw!=maxw)) {
-    int dx = Fl::box_dw(box())-Fl::box_dx(box());
-    int dy = Fl::box_dh(box())-Fl::box_dy(box());
-    if (dx<=0) dx = 1;
-    if (dy<=0) dy = 1;
-    int x1 = w()-dx-1, x2 = x1, y1 = h()-dx-1, y2 = y1;
-    Fl_Color c[4] = {
-      color(),
-      fl_color_average(color(), FL_WHITE, 0.7f),
-      fl_color_average(color(), FL_BLACK, 0.6f),
-      fl_color_average(color(), FL_BLACK, 0.8f),
-    };
-    int i;
-    for (i=dx; i<12; i++) {
-      fl_color(c[i&3]);
-      fl_line(x1--, y1, x2, y2--);
-    }
-  }
-#endif
-
-# if defined(FLTK_USE_CAIRO)
-  Fl::cairo_make_current(this); // checkout if an update is necessary
-# endif
-}
-
-void Fl_Window::label(const char *name) {
-  label(name, iconlabel());
-}
-
-void Fl_Window::copy_label(const char *a) {
-  if (flags() & COPIED_LABEL) {
-    free((void *)label());
-    clear_flag(COPIED_LABEL);
-  }
-  if (a) a = strdup(a);
-  label(a, iconlabel());
-  set_flag(COPIED_LABEL);
-}
-
-
-void Fl_Window::iconlabel(const char *iname) {
-  label(label(), iname);
-}
-
-// the Fl::atclose pointer is provided for back compatibility.  You
-// can now just change the callback for the window instead.
-
-/** Default callback for window widgets. It hides the window and then calls the default widget callback. */
-void Fl::default_atclose(Fl_Window* window, void* v) {
-  window->hide();
-  Fl_Widget::default_callback(window, v); // put on Fl::read_queue()
-}
-/** Back compatibility: default window callback handler \see Fl::set_atclose() */
-void (*Fl::atclose)(Fl_Window*, void*) = default_atclose;
-/** Back compatibility: Sets the default callback v for win to call on close event */
-void Fl_Window::default_callback(Fl_Window* win, void* v) {
-  Fl::atclose(win, v);
-}
-
-/**  Returns the last window that was made current. \see Fl_Window::make_current() */
-Fl_Window *Fl_Window::current() {
-  return current_;
-}
-
-/** Returns the default xclass.
-
-  \see Fl_Window::default_xclass(const char *)
-
- */
-const char *Fl_Window::default_xclass()
-{
-  if (default_xclass_) {
-    return default_xclass_;
-  } else {
-    return "FLTK";
-  }
-}
-
-/** Sets the default window xclass.
-
-  The default xclass is used for all windows that don't have their
-  own xclass set before show() is called. You can change the default
-  xclass whenever you want, but this only affects windows that are
-  created (and shown) after this call.
-
-  The given string \p xc is copied. You can use a local variable or
-  free the string immediately after this call.
-
-  If you don't call this, the default xclass for all windows will be "FLTK".
-  You can reset the default xclass by specifying NULL for \p xc.
-
-  If you call Fl_Window::xclass(const char *) for any window, then
-  this also sets the default xclass, unless it has been set before.
-
-  \param[in] xc default xclass for all windows subsequently created
-
-  \see Fl_Window::xclass(const char *)
-*/
-void Fl_Window::default_xclass(const char *xc)
-{
-  if (default_xclass_) {
-    free(default_xclass_);
-    default_xclass_ = 0L;
-  }
-  if (xc) {
-    default_xclass_ = strdup(xc);
-  }
-}
-
-/** Sets the xclass for this window.
-
-  A string used to tell the system what type of window this is. Mostly
-  this identifies the picture to draw in the icon. This only works if
-  called \e before calling show().
-
-  <I>Under X</I>, this is turned into a XA_WM_CLASS pair by truncating at
-  the first non-alphanumeric character and capitalizing the first character,
-  and the second one if the first is 'x'.  Thus "foo" turns into "foo, Foo",
-  and "xprog.1" turns into "xprog, XProg".
-
-  <I>Under Microsoft Windows</I>, this string is used as the name of the
-  WNDCLASS structure, though it is not clear if this can have any
-  visible effect.
-
-  \since FLTK 1.3 the passed string is copied. You can use a local
-  variable or free the string immediately after this call. Note that
-  FLTK 1.1 stores the \e pointer without copying the string.
-
-  If the default xclass has not yet been set, this also sets the
-  default xclass for all windows created subsequently.
-
-  \see Fl_Window::default_xclass(const char *)
-*/
-void Fl_Window::xclass(const char *xc) 
-{
-  if (xclass_) {
-    free(xclass_);
-    xclass_ = 0L;
-  }
-  if (xc) {
-    xclass_ = strdup(xc);
-    if (!default_xclass_) {
-      default_xclass(xc);
-    }
-  }
-}
-
-/** Returns the xclass for this window, or a default.
-
-  \see Fl_Window::default_xclass(const char *)
-  \see Fl_Window::xclass(const char *)
-*/
-const char *Fl_Window::xclass() const
-{
-  if (xclass_) {
-    return xclass_;
-  } else {
-    return default_xclass();
-  }
-}
-
-void Fl_Window::default_icon(const Fl_RGB_Image *icon) {
-  default_icons(&icon, 1);
-}
-
-void Fl_Window::default_icons(const Fl_RGB_Image **icons, int count) {
-  Fl_X::set_default_icons(icons, count);
-}
-
-void Fl_Window::icon(const Fl_RGB_Image *icon) {
-  icons(&icon, 1);
-}
-
-void Fl_Window::icons(const Fl_RGB_Image **icons, int count) {
-  free_icons();
-
-  if (count > 0) {
-    icon_->icons = new Fl_RGB_Image*[count];
-    icon_->count = count;
-    // FIXME: Fl_RGB_Image lacks const modifiers on methods
-    for (int i = 0;i < count;i++)
-      icon_->icons[i] = (Fl_RGB_Image*)((Fl_RGB_Image*)icons[i])->copy();
-  }
-
-  if (i)
-    i->set_icons();
-}
-
-/** Gets the current icon window target dependent data. */
-const void *Fl_Window::icon() const {
-  return icon_->legacy_icon;
-}
-
-/** Sets the current icon window target dependent data. */
-void Fl_Window::icon(const void * ic) {
-  free_icons();
-  icon_->legacy_icon = ic;
-}
-
-void Fl_Window::free_icons() {
-  int i;
-
-  icon_->legacy_icon = 0L;
-
-  if (icon_->icons) {
-    for (i = 0;i < icon_->count;i++)
-      delete icon_->icons[i];
-    delete [] icon_->icons;
-    icon_->icons = 0L;
-  }
-
-  icon_->count = 0;
-
-#ifdef WIN32
-  if (icon_->big_icon)
-    DestroyIcon(icon_->big_icon);
-  if (icon_->small_icon)
-    DestroyIcon(icon_->small_icon);
-
-  icon_->big_icon = NULL;
-  icon_->small_icon = NULL;
-#endif
-}
-
-//
-// End of "$Id: Fl_Window.cxx 8472 2011-02-25 08:44:47Z AlbrechtS $".
-//
diff --git a/common/fltk/src/Fl_Window_fullscreen.cxx b/common/fltk/src/Fl_Window_fullscreen.cxx
deleted file mode 100644
index 9e62a9d..0000000
--- a/common/fltk/src/Fl_Window_fullscreen.cxx
+++ /dev/null
@@ -1,107 +0,0 @@
-//
-// "$Id: Fl_Window_fullscreen.cxx 8515 2011-03-12 21:36:21Z manolo $"
-//
-// Fullscreen window support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Turning the border on/off by changing the motif_wm_hints property
-// works on Irix 4DWM.  Does not appear to work for any other window
-// manager.  Fullscreen still works on some window managers (fvwm is one)
-// because they allow the border to be placed off-screen.
-
-// Unfortunately most X window managers ignore changes to the border
-// and refuse to position the border off-screen, so attempting to make
-// the window full screen will lose the size of the border off the
-// bottom and right.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-#include <config.h>
-
-void Fl_Window::border(int b) {
-  if (b) {
-    if (border()) return;
-    clear_flag(NOBORDER);
-  } else {
-    if (!border()) return;
-    set_flag(NOBORDER);
-  }
-#if defined(USE_X11)
-  if (shown()) Fl_X::i(this)->sendxjunk();
-#elif defined(WIN32)
-  // not yet implemented, but it's possible
-  // for full fullscreen we have to make the window topmost as well
-#elif defined(__APPLE_QUARTZ__)
-  // warning: not implemented in Quartz/Carbon
-#else
-# error unsupported platform
-#endif
-}
-
-void fullscreen_x(Fl_Window *w);
-void fullscreen_off_x();
-void fullscreen_off_x(Fl_Window *w, int X, int Y, int W, int H);
-
-/* Note: The previous implementation toggled border(). With this new
-   implementation this is not necessary. Additionally, if we do that,
-   the application may lose focus when switching out of fullscreen
-   mode with some window managers. Besides, the API does not say that
-   the FLTK border state should be toggled; it only says that the
-   borders should not be *visible*. 
-*/
-void Fl_Window::fullscreen() {
-  if (shown() && !(flags() & Fl_Widget::FULLSCREEN)) {
-    no_fullscreen_x = x();
-    no_fullscreen_y = y();
-    no_fullscreen_w = w();
-    no_fullscreen_h = h();
-    fullscreen_x(this);
-  } else {
-    set_flag(FULLSCREEN);
-  }
-}
-
-void Fl_Window::fullscreen_off(int X,int Y,int W,int H) {
-  if (shown() && (flags() & Fl_Widget::FULLSCREEN)) {
-    fullscreen_off_x(this, X, Y, W, H);
-  } else {
-    clear_flag(FULLSCREEN);
-  }
-  no_fullscreen_x = no_fullscreen_y = no_fullscreen_w = no_fullscreen_h = 0;
-}
-
-void Fl_Window::fullscreen_off() {
-  if (!no_fullscreen_x && !no_fullscreen_y) {
-    // Window was initially created fullscreen - default to current monitor
-    no_fullscreen_x = x();
-    no_fullscreen_y = y();
-  }
-  fullscreen_off(no_fullscreen_x, no_fullscreen_y, no_fullscreen_w, no_fullscreen_h);
-}
-
-
-//
-// End of "$Id: Fl_Window_fullscreen.cxx 8515 2011-03-12 21:36:21Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Window_hotspot.cxx b/common/fltk/src/Fl_Window_hotspot.cxx
deleted file mode 100644
index 92a298f..0000000
--- a/common/fltk/src/Fl_Window_hotspot.cxx
+++ /dev/null
@@ -1,100 +0,0 @@
-//
-// "$Id: Fl_Window_hotspot.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Common hotspot routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/x.H>
-#include <stdio.h>
-
-void Fl_Window::hotspot(int X, int Y, int offscreen) {
-  int mx,my;
-
-  // Update the screen position based on the mouse position.
-  Fl::get_mouse(mx,my);
-  X = mx-X; Y = my-Y;
-
-  // If offscreen is 0 (the default), make sure that the window
-  // stays on the screen, if possible.
-  if (!offscreen) {
-    int scr_x, scr_y, scr_w, scr_h;
-    Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h);
-
-    int top = 0;
-    int left = 0;
-    int right = 0;
-    int bottom = 0;
-
-    if (border()) {
-#ifdef WIN32
-      if (size_range_set && (maxw != minw || maxh != minh)) {
-        left = right = GetSystemMetrics(SM_CXSIZEFRAME);
-        top = bottom = GetSystemMetrics(SM_CYSIZEFRAME);
-      } else {
-        left = right = GetSystemMetrics(SM_CXFIXEDFRAME); 
-        top = bottom = GetSystemMetrics(SM_CYFIXEDFRAME);
-      }
-      top += GetSystemMetrics(SM_CYCAPTION);
-#elif defined(__APPLE__)
-      top = 24;
-      left = 2;
-      right = 2;
-      bottom = 2;
-#else
-      // Ensure border is on screen; these values are generic enough
-      // to work with many window managers, and are based on KDE defaults.
-      top = 20;
-      left = 4;
-      right = 4;
-      bottom = 8;
-#endif
-    }
-    // now insure contents are on-screen (more important than border):
-    if (X+w()+right > scr_w-scr_x) X = scr_w-scr_x-right-w();
-    if (X-left < scr_x) X = left;
-    if (Y+h()+bottom > scr_h-scr_y) Y = scr_h-scr_y-bottom-h();
-    if (Y-top < scr_y) Y = top;
-    // make sure that we will force this position
-    if (X==x()) x(X-1);
-  }
-
-  position(X,Y);
-}
-
-void Fl_Window::hotspot(const Fl_Widget *o, int offscreen) {
-  int X = o->w()/2;
-  int Y = o->h()/2;
-  while (o != this && o) {
-    X += o->x(); Y += o->y();
-    o = o->window();
-  }
-  hotspot(X,Y,offscreen);
-}
-
-
-//
-// End of "$Id: Fl_Window_hotspot.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_Window_iconize.cxx b/common/fltk/src/Fl_Window_iconize.cxx
deleted file mode 100644
index 10ceda5..0000000
--- a/common/fltk/src/Fl_Window_iconize.cxx
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// "$Id: Fl_Window_iconize.cxx 8055 2010-12-18 22:31:01Z manolo $"
-//
-// Window minification code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/x.H>
-
-extern char fl_show_iconic; // in Fl_x.cxx
-
-void Fl_Window::iconize() {
-  if (!shown()) {
-    fl_show_iconic = 1;
-    show();
-  } else {
-#ifdef WIN32
-    ShowWindow(i->xid, SW_SHOWMINNOACTIVE);
-#elif defined(__APPLE__)
-    i->collapse();
-#else
-    XIconifyWindow(fl_display, i->xid, fl_screen);
-#endif
-  }
-}
-
-//
-// End of "$Id: Fl_Window_iconize.cxx 8055 2010-12-18 22:31:01Z manolo $".
-//
diff --git a/common/fltk/src/Fl_Wizard.cxx b/common/fltk/src/Fl_Wizard.cxx
deleted file mode 100644
index 3557cfa..0000000
--- a/common/fltk/src/Fl_Wizard.cxx
+++ /dev/null
@@ -1,195 +0,0 @@
-//
-// "$Id: Fl_Wizard.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Fl_Wizard widget routines.
-//
-// Copyright 1997-2010 by Easy Software Products.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-
-//
-//   Fl_Wizard::Fl_Wizard() - Create an Fl_Wizard widget.
-//   Fl_Wizard::draw()      - Draw the wizard border and visible child.
-//   Fl_Wizard::next()      - Show the next child.
-//   Fl_Wizard::prev()      - Show the previous child.
-//   Fl_Wizard::value()     - Return the current visible child.
-//   Fl_Wizard::value()     - Set the visible child.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl_Wizard.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-
-
-//
-// 'Fl_Wizard::Fl_Wizard()' - Create an Fl_Wizard widget.
-//
-
-/**
-  The constructor creates the Fl_Wizard widget at the specified
-  position and size.
-  <P>The inherited destructor destroys the widget and its children.
-*/
-Fl_Wizard::Fl_Wizard(int        xx,	// I - Lefthand position
-                     int        yy,	// I - Upper position
-		     int        ww,	// I - Width
-		     int        hh,	// I - Height
-		     const char *l) :	// I - Label
-    Fl_Group(xx, yy, ww, hh, l)
-{
-  box(FL_THIN_UP_BOX);
-
-  value_ = (Fl_Widget *)0;
-}
-
-
-//
-/** Draws the wizard border and visible child. */
-void Fl_Wizard::draw() {
-  Fl_Widget	*kid;	// Visible child
-
-
-  kid = value();
-
-  if (damage() & FL_DAMAGE_ALL)
-  {
-    // Redraw everything...
-    if (kid)
-    {
-      draw_box(box(), x(), y(), w(), h(), kid->color());
-      draw_child(*kid);
-    }
-    else
-      draw_box(box(), x(), y(), w(), h(), color());
-
-  }
-  else if (kid)
-    update_child(*kid);
-}
-
-
-/**
-  This method shows the next child of the wizard. If the last child
-  is already visible, this function does nothing.
-*/
-void Fl_Wizard::next() {
-  int			num_kids;
-  Fl_Widget	* const *kids;
-
-
-  if ((num_kids = children()) == 0)
-    return;
-
-  for (kids = array(); num_kids > 0; kids ++, num_kids --)
-    if ((*kids)->visible())
-      break;
-
-  if (num_kids > 1)
-    value(kids[1]);
-}
-
-/** Shows the previous child.*/
-void Fl_Wizard::prev()
-{
-  int			num_kids;
-  Fl_Widget	* const *kids;
-
-
-  if ((num_kids = children()) == 0)
-    return;
-
-  for (kids = array(); num_kids > 0; kids ++, num_kids --)
-    if ((*kids)->visible())
-      break;
-
-  if (num_kids > 0 && num_kids < children())
-    value(kids[-1]);
-}
-
-/**  Gets the current visible child widget. */
-Fl_Widget* Fl_Wizard::value()
-{
-  int			num_kids;
-  Fl_Widget	* const *kids;
-  Fl_Widget		*kid;
-
-
-  if ((num_kids = children()) == 0)
-    return ((Fl_Widget *)0);
-
-  for (kids = array(), kid = (Fl_Widget *)0; num_kids > 0; kids ++, num_kids --)
-  {
-    if ((*kids)->visible())
-    {
-      if (kid)
-        (*kids)->hide();
-      else
-        kid = *kids;
-    }
-  }
-
-  if (!kid)
-  {
-    kids --;
-    kid = *kids;
-    kid->show();
-  }
-
-  return (kid);
-}
-
-/**  Sets the child widget that is visible.*/
-void Fl_Wizard::value(Fl_Widget *kid)
-{
-  int			num_kids;
-  Fl_Widget	* const *kids;
-
-
-  if ((num_kids = children()) == 0)
-    return;
-
-  for (kids = array(); num_kids > 0; kids ++, num_kids --)
-  {
-    if (*kids == kid)
-    {
-      if (!kid->visible())
-        kid->show();
-    }
-    else
-      (*kids)->hide();
-  }
-
-  // This will restore the mouse pointer to the window's default cursor
-  // whenever the wizard pane is changed.  Otherwise text widgets that
-  // show the next pane may leave the cursor set to the I beam, etc...
-  if (window()) window()->cursor(FL_CURSOR_DEFAULT);
-}
-
-
-
-//
-// End of "$Id: Fl_Wizard.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_XBM_Image.cxx b/common/fltk/src/Fl_XBM_Image.cxx
deleted file mode 100644
index cb35c1b..0000000
--- a/common/fltk/src/Fl_XBM_Image.cxx
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// "$Id: Fl_XBM_Image.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Fl_XBM_Image routines.
-//
-// Copyright 1997-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_XBM_Image::Fl_XBM_Image() - Load an XBM file.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_XBM_Image.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-
-//
-// 'Fl_XBM_Image::Fl_XBM_Image()' - Load an XBM file.
-//
-
-/**  
-  The constructor loads the named XBM file from the given name filename.
-  <P>The destructor free all memory and server resources that are used by 
-  the image.
-*/
-Fl_XBM_Image::Fl_XBM_Image(const char *name) : Fl_Bitmap((const char *)0,0,0) {
-  FILE	*f;
-  uchar	*ptr;
-
-  if ((f = fl_fopen(name, "rb")) == NULL) return;
-
-  char buffer[1024];
-  char junk[1024];
-  int wh[2]; // width and height
-  int i;
-  for (i = 0; i<2; i++) {
-    for (;;) {
-      if (!fgets(buffer,1024,f)) {
-        fclose(f);
-	return;
-      }
-      int r = sscanf(buffer,"#define %s %d",junk,&wh[i]);
-      if (r >= 2) break;
-    }
-  }
-
-  // skip to data array:
-  for (;;) {
-    if (!fgets(buffer,1024,f)) {
-      fclose(f);
-      return;
-    }
-    if (!strncmp(buffer,"static ",7)) break;
-  }
-
-  // Allocate memory...
-  w(wh[0]);
-  h(wh[1]);
-
-  int n = ((wh[0]+7)/8)*wh[1];
-  array = new uchar[n];
-
-  // read the data:
-  for (i = 0, ptr = (uchar *)array; i < n;) {
-    if (!fgets(buffer,1024,f)) {
-      fclose(f);
-      return;
-    }
-    const char *a = buffer;
-    while (*a && i<n) {
-      unsigned int t;
-      if (sscanf(a," 0x%x",&t)>0) {
-        *ptr++ = (uchar)t;
-	i ++;
-      }
-      while (*a && *a++ != ',');
-    }
-  }
-
-  fclose(f);
-}
-
-
-//
-// End of "$Id: Fl_XBM_Image.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_XColor.H b/common/fltk/src/Fl_XColor.H
deleted file mode 100644
index 9162f3a..0000000
--- a/common/fltk/src/Fl_XColor.H
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// "$Id: Fl_XColor.H 7913 2010-11-29 18:18:27Z greg.ercolano $"
-//
-// X-specific color definitions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Enumerations.H>
-
-// one of these for each color in fltk's "colormap":
-// if overlays are enabled, another one for the overlay
-struct Fl_XColor {
-  unsigned char r,g,b;	// actual color used by X
-  unsigned char mapped;	// true when XAllocColor done
-  unsigned long pixel;	// the X pixel to use
-};
-extern Fl_XColor fl_xmap[/*overlay*/][256];
-
-// mask & shifts to produce xcolor for truecolor visuals:
-extern unsigned char fl_redmask, fl_greenmask, fl_bluemask;
-extern int fl_redshift, fl_greenshift, fl_blueshift, fl_extrashift;
-
-//
-// End of "$Id: Fl_XColor.H 7913 2010-11-29 18:18:27Z greg.ercolano $".
-//
diff --git a/common/fltk/src/Fl_XPM_Image.cxx b/common/fltk/src/Fl_XPM_Image.cxx
deleted file mode 100644
index 7f66eff..0000000
--- a/common/fltk/src/Fl_XPM_Image.cxx
+++ /dev/null
@@ -1,136 +0,0 @@
-//
-// "$Id: Fl_XPM_Image.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Fl_XPM_Image routines.
-//
-// Copyright 1997-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_XPM_Image.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-
-
-//
-// 'hexdigit()' - Convert a hex digit to an integer.
-//
-
-static int hexdigit(int x) {	// I - Hex digit...
-  if (isdigit(x)) return x-'0';
-  if (isupper(x)) return x-'A'+10;
-  if (islower(x)) return x-'a'+10;
-  return 20;
-}
-
-#define MAXSIZE 2048
-#define INITIALLINES 256
-/**
-  The constructor loads the XPM image from the name filename.
-  <P>The destructor free all memory and server resources that are used by
-  the image.
-*/
-Fl_XPM_Image::Fl_XPM_Image(const char *name) : Fl_Pixmap((char *const*)0) {
-  FILE *f;
-
-  if ((f = fl_fopen(name, "rb")) == NULL) return;
-
-  // read all the c-strings out of the file:
-  char** new_data = new char *[INITIALLINES];
-  char** temp_data;
-  int malloc_size = INITIALLINES;
-  char buffer[MAXSIZE+20];
-  int i = 0;
-  while (fgets(buffer,MAXSIZE+20,f)) {
-    if (buffer[0] != '\"') continue;
-    char *myp = buffer;
-    char *q = buffer+1;
-    while (*q != '\"' && myp < buffer+MAXSIZE) {
-      if (*q == '\\') switch (*++q) {
-      case '\r':
-      case '\n':
-	if (!fgets(q,(buffer+MAXSIZE+20)-q,f)) { /* no problem if we hit EOF */ } break;
-      case 0:
-	break;
-      case 'x': {
-	q++;
-	int n = 0;
-	for (int x = 0; x < 3; x++) {
-	  int xd = hexdigit(*q);
-	  if (xd > 15) break;
-	  n = (n<<4)+xd;
-	  q++;
-	}
-	*myp++ = n;
-      } break;
-      default: {
-	int c = *q++;
-	if (c>='0' && c<='7') {
-	  c -= '0';
-	  for (int x=0; x<2; x++) {
-	    int xd = hexdigit(*q);
-	    if (xd>7) break;
-	    c = (c<<3)+xd;
-	    q++;
-	  }
-	}
-	*myp++ = c;
-      } break;
-      } else {
-	*myp++ = *q++;
-      }
-    }
-    *myp++ = 0;
-    if (i >= malloc_size) {
-      temp_data = new char *[malloc_size + INITIALLINES];
-      memcpy(temp_data, new_data, sizeof(char *) * malloc_size);
-      delete[] new_data;
-      new_data = temp_data;
-      malloc_size += INITIALLINES;
-    }
-    new_data[i] = new char[myp-buffer+1];
-    memcpy(new_data[i], buffer,myp-buffer);
-    new_data[i][myp-buffer] = 0;
-    i++;
-  }
-
-  fclose(f);
-
-  data((const char **)new_data, i);
-  alloc_data = 1;
-
-  measure();
-}
-
-
-//
-// End of "$Id: Fl_XPM_Image.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_abort.cxx b/common/fltk/src/Fl_abort.cxx
deleted file mode 100644
index f854615..0000000
--- a/common/fltk/src/Fl_abort.cxx
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// "$Id: Fl_abort.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Warning/error message code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This method is in its own source file so that stdlib and stdio
-// do not need to be included in Fl.cxx:
-// You can also override this by redefining all of these.
-
-#include <FL/Fl.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include "flstring.h"
-
-#ifdef WIN32
-#  include <windows.h>
-
-static void warning(const char *, ...) {
-  // Show nothing for warnings under WIN32...
-}
-
-static void error(const char *format, ...) {
-  va_list args;
-  char buf[1024];
-  va_start(args, format);
-  vsnprintf(buf, 1024, format, args);
-  va_end(args);
-  MessageBox(0,buf,"Error",MB_ICONEXCLAMATION|MB_SYSTEMMODAL);
-}
-
-static void fatal(const char *format, ...) {
-  va_list args;
-  char buf[1024];
-  va_start(args, format);
-  vsnprintf(buf, 1024, format, args);
-  va_end(args);
-  MessageBox(0,buf,"Error",MB_ICONSTOP|MB_SYSTEMMODAL);
-  ::exit(1);
-}
-
-#else
-
-static void warning(const char *format, ...) {
-  va_list args;
-  va_start(args, format);
-  vfprintf(stderr, format, args);
-  va_end(args);
-  fputc('\n', stderr);
-  fflush(stderr);
-}
-
-static void error(const char *format, ...) {
-  va_list args;
-  va_start(args, format);
-  vfprintf(stderr, format, args);
-  va_end(args);
-  fputc('\n', stderr);
-  fflush(stderr);
-}
-
-static void fatal(const char *format, ...) {
-  va_list args;
-  va_start(args, format);
-  vfprintf(stderr, format, args);
-  va_end(args);
-  fputc('\n', stderr);
-  fflush(stderr);
-  ::exit(1);
-}
-
-#endif
-
-void (*Fl::warning)(const char* format, ...) = ::warning;
-void (*Fl::error)(const char* format, ...) = ::error;
-void (*Fl::fatal)(const char* format, ...) = ::fatal;
-
-//
-// End of "$Id: Fl_abort.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_add_idle.cxx b/common/fltk/src/Fl_add_idle.cxx
deleted file mode 100644
index 6059ae1..0000000
--- a/common/fltk/src/Fl_add_idle.cxx
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// "$Id: Fl_add_idle.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Idle routine support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Allows you to manage an arbitrary set of idle() callbacks.
-// Replaces the older set_idle() call (which is used to implement this)
-
-#include <FL/Fl.H>
-
-struct idle_cb {
-  void (*cb)(void*);
-  void* data;
-  idle_cb *next;
-};
-
-// the callbacks are stored linked in a ring.  last points at the one
-// just called, first at the next to call.  last->next == first.
-
-static idle_cb* first;
-static idle_cb* last;
-static idle_cb* freelist;
-
-static void call_idle() {
-  idle_cb* p = first;
-  last = p; first = p->next;
-  p->cb(p->data); // this may call add_idle() or remove_idle()!
-}
-
-/**
-  Adds a callback function that is called every time by Fl::wait() and also
-  makes it act as though the timeout is zero (this makes Fl::wait() return
-  immediately, so if it is in a loop it is called repeatedly, and thus the
-  idle fucntion is called repeatedly).  The idle function can be used to get
-  background processing done.
-    
-  You can have multiple idle callbacks. To remove an idle callback use
-  Fl::remove_idle().
-    
-  Fl::wait() and Fl::check() call idle callbacks, but Fl::ready() does not.
-    
-  The idle callback can call any FLTK functions, including Fl::wait(),
-  Fl::check(), and Fl::ready().
-
-  FLTK will not recursively call the idle callback.
-*/
-void Fl::add_idle(Fl_Idle_Handler cb, void* data) {
-  idle_cb* p = freelist;
-  if (p) freelist = p->next;
-  else p = new idle_cb;
-  p->cb = cb;
-  p->data = data;
-  if (first) {
-    last->next = p;
-    last = p;
-    p->next = first;
-  } else {
-    first = last = p;
-    p->next = p;
-    set_idle(call_idle);
-  }
-}
-
-/**
-  Returns true if the specified idle callback is currently installed.
-*/
-int Fl::has_idle(Fl_Idle_Handler cb, void* data) {
-  idle_cb* p = first;
-  if (!p) return 0;
-  for (;; p = p->next) {
-    if (p->cb == cb && p->data == data) return 1;
-    if (p==last) return 0;
-  }
-}
-
-/**
-  Removes the specified idle callback, if it is installed.
-*/
-void Fl::remove_idle(Fl_Idle_Handler cb, void* data) {
-  idle_cb* p = first;
-  if (!p) return;
-  idle_cb* l = last;
-  for (;; p = p->next) {
-    if (p->cb == cb && p->data == data) break;
-    if (p==last) return; // not found
-    l = p;
-  }
-  if (l == p) { // only one
-    first = last = 0;
-    set_idle(0);
-  } else {
-    last = l;
-    first = l->next = p->next;
-  }
-  p->next = freelist;
-  freelist = p;
-}
-
-//
-// End of "$Id: Fl_add_idle.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_arg.cxx b/common/fltk/src/Fl_arg.cxx
deleted file mode 100644
index 8ebc75f..0000000
--- a/common/fltk/src/Fl_arg.cxx
+++ /dev/null
@@ -1,550 +0,0 @@
-//
-// "$Id: Fl_arg.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Optional argument initialization code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// OPTIONAL initialization code for a program using fltk.
-// You do not need to call this!  Feel free to make up your own switches.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/filename.H>
-#include <FL/fl_draw.H>
-#include <ctype.h>
-#include "flstring.h"
-
-#if defined(WIN32) || defined(__APPLE__)
-int XParseGeometry(const char*, int*, int*, unsigned int*, unsigned int*);
-#  define NoValue	0x0000
-#  define XValue  	0x0001
-#  define YValue	0x0002
-#  define WidthValue  	0x0004
-#  define HeightValue  	0x0008
-#  define AllValues 	0x000F
-#  define XNegative 	0x0010
-#  define YNegative 	0x0020
-#endif
-
-static int fl_match(const char *a, const char *s, int atleast = 1) {
-  const char *b = s;
-  while (*a && (*a == *b || tolower(*a) == *b)) {a++; b++;}
-  return !*a && b >= s+atleast;
-}
-
-// flags set by previously parsed arguments:
-extern char fl_show_iconic; // in Fl_x.cxx
-static char arg_called;
-static char return_i;
-static const char *name;
-static const char *geometry;
-static const char *title;
-// these are in Fl_get_system_colors and are set by the switches:
-extern const char *fl_fg;
-extern const char *fl_bg;
-extern const char *fl_bg2;
-
-/**
-  Parse a single switch from \p argv, starting at word \p i.
-  Returns the number of words eaten (1 or 2, or 0 if it is not
-  recognized) and adds the same value to \p i. 
-  
-  This is the default argument handler used internally by Fl::args(...),
-  but you can use this function if you prefer to step through the
-  standard FLTK switches yourself.
-  
-  All standard FLTK switches except -bg2 may be abbreviated to just
-  one letter and case is ignored:
-  
-  \li -bg color or -background color
-  <br>
-  Sets the background color using Fl::background().
-  
-  \li -bg2 color or -background2 color
-  <br>
-  Sets the secondary background color using Fl::background2().
-  
-  \li -display host:n.n
-  <br>
-  Sets the X display to use; this option is silently
-  ignored under WIN32 and MacOS.
-  
-  \li -dnd and -nodnd
-  <br>
-  Enables or disables drag and drop text operations
-  using Fl::dnd_text_ops().
-  
-  \li -fg color or -foreground color
-  <br>
-  Sets the foreground color using Fl::foreground().
-  
-  \li -geometry WxH+X+Y
-  <br>
-  Sets the initial window position and size according
-  to the standard X geometry string.
-  
-  \li -iconic
-  <br>
-  Iconifies the window using Fl_Window::iconize().
-  
-  \li -kbd and -nokbd
-  <br>
-  Enables or disables visible keyboard focus for
-  non-text widgets using Fl::visible_focus().
-  
-  \li -name string
-  <br>
-  Sets the window class using Fl_Window::xclass().
-  
-  \li -scheme string
-  <br>
-  Sets the widget scheme using Fl::scheme().
-  
-  \li -title string
-  <br>
-  Sets the window title using Fl_Window::label().
-  
-  \li -tooltips and -notooltips
-  <br>
-  Enables or disables tooltips using Fl_Tooltip::enable().
-  
-  
-  If your program requires other switches in addition to the standard
-  FLTK options, you will need to pass your own argument handler to
-  Fl::args(int,char**,int&,Fl_Args_Handler) explicitly.
-*/
-int Fl::arg(int argc, char **argv, int &i) {
-  arg_called = 1;
-  const char *s = argv[i];
-
-  if (!s) {i++; return 1;}	// something removed by calling program?
-
-  // a word that does not start with '-', or a word after a '--', or
-  // the word '-' by itself all start the "non-switch arguments" to
-  // a program.  Return 0 to indicate that we don't understand the
-  // word, but set a flag (return_i) so that args() will return at
-  // that point:
-  if (s[0] != '-' || s[1] == '-' || !s[1]) {return_i = 1; return 0;}
-  s++; // point after the dash
-
-  if (fl_match(s, "iconic")) {
-    fl_show_iconic = 1;
-    i++;
-    return 1;
-  } else if (fl_match(s, "kbd")) {
-    Fl::visible_focus(1);
-    i++;
-    return 1;
-  } else if (fl_match(s, "nokbd", 3)) {
-    Fl::visible_focus(0);
-    i++;
-    return 1;
-  } else if (fl_match(s, "dnd", 2)) {
-    Fl::dnd_text_ops(1);
-    i++;
-    return 1;
-  } else if (fl_match(s, "nodnd", 3)) {
-    Fl::dnd_text_ops(0);
-    i++;
-    return 1;
-  } else if (fl_match(s, "tooltips", 2)) {
-    Fl_Tooltip::enable();
-    i++;
-    return 1;
-  } else if (fl_match(s, "notooltips", 3)) {
-    Fl_Tooltip::disable();
-    i++;
-    return 1;
-  }
-#ifdef __APPLE__
-  // The Finder application in MacOS X passes the "-psn_N_NNNNN" option
-  // to all apps...
-  else if (strncmp(s, "psn_", 4) == 0) {
-    i++;
-    return 1;
-  }
-#endif // __APPLE__
-
-  const char *v = argv[i+1];
-  if (i >= argc-1 || !v)
-    return 0;	// all the rest need an argument, so if missing it is an error
-
-  if (fl_match(s, "geometry")) {
-
-    int flags, gx, gy; unsigned int gw, gh;
-    flags = XParseGeometry(v, &gx, &gy, &gw, &gh);
-    if (!flags) return 0;
-    geometry = v;
-
-#if !defined(WIN32) && !defined(__APPLE__)
-  } else if (fl_match(s, "display", 2)) {
-    Fl::display(v);
-#endif
-
-  } else if (fl_match(s, "title", 2)) {
-    title = v;
-
-  } else if (fl_match(s, "name", 2)) {
-    name = v;
-
-  } else if (fl_match(s, "bg2", 3) || fl_match(s, "background2", 11)) {
-    fl_bg2 = v;
-
-  } else if (fl_match(s, "bg", 2) || fl_match(s, "background", 10)) {
-    fl_bg = v;
-
-  } else if (fl_match(s, "fg", 2) || fl_match(s, "foreground", 10)) {
-    fl_fg = v;
-
-  } else if (fl_match(s, "scheme", 1)) {
-    Fl::scheme(v);
-
-  } else return 0; // unrecognized
-
-  i += 2;
-  return 2;
-}
-
-
-/**
-  Parse command line switches using the \p cb argument handler.
-  
-  Returns 0 on error, or the number of words processed.
-  
-  FLTK provides this as an <i>entirely optional</i> command line
-  switch parser. You don't have to call it if you don't want to.
-  Everything it can do can be done with other calls to FLTK.
-  
-  To use the switch parser, call Fl::args(...) near the start
-  of your program.  This does \b not open the display, instead
-  switches that need the display open are stashed into static
-  variables. Then you \b must display your first window by calling
-  <tt>window->show(argc,argv)</tt>, which will do anything stored
-  in the static variables.
-  
-  Providing an argument handler callback \p cb lets you define
-  your own switches. It is called with the same \p argc and \p argv,
-  and with \p i set to the index of the switch to be processed.
-  The \p cb handler should return zero if the switch is unrecognized,
-  and not change \p i. It should return non-zero to indicate the
-  number of words processed if the switch is recognized, i.e. 1 for
-  just the switch, and more than 1 for the switch plus associated
-  parameters. \p i should be incremented by the same amount.
-  
-  The \p cb handler is called \b before any other tests, so
-  <i>you can also override any standard FLTK switch</i>
-  (this is why FLTK can use very short switches instead of
-  the long ones all other toolkits force you to use).
-  See Fl::arg() for descriptions of the standard switches.
- 
-  On return \p i is set to the index of the first non-switch.
-  This is either:
-  
-  \li The first word that does not start with '-'.
-  \li The word '-' (used by many programs to name stdin as a file)
-  \li The first unrecognized switch (return value is 0).
-  \li \p argc
-  
-  The return value is \p i unless an unrecognized switch is found,
-  in which case it is zero. If your program takes no arguments other
-  than switches you should produce an error if the return value is less
-  than \p argc.
-  
-  
-  A usage string is displayed if Fl::args() detects an invalid argument
-  on the command-line. You can change the message by setting the
-  Fl::help pointer.
-  
-  A very simple command line parser can be found in <tt>examples/howto-parse-args.cxx</tt>
-  
-  The simpler Fl::args(int argc, char **argv) form is useful if your program
-  does not have command line switches of its own.
-*/
-
-int Fl::args(int argc, char** argv, int& i, Fl_Args_Handler cb) {
-  arg_called = 1;
-  i = 1; // skip argv[0]
-  while (i < argc) {
-    if (cb && cb(argc,argv,i)) continue;
-    if (!arg(argc,argv,i)) return return_i ? i : 0;
-  }
-  return i;
-}
-
-// show a main window, use any parsed arguments
-void Fl_Window::show(int argc, char **argv) {
-  if (argc && !arg_called) Fl::args(argc,argv);
-
-  Fl::get_system_colors();
-
-#if !defined(WIN32) && !defined(__APPLE__)
-  // Get defaults for drag-n-drop and focus...
-  const char *key = 0, *val;
-
-  if (Fl::first_window()) key = Fl::first_window()->xclass();
-  if (!key) key = "fltk";
-
-  val = XGetDefault(fl_display, key, "dndTextOps");
-  if (val) Fl::dnd_text_ops(strcasecmp(val, "true") == 0 ||
-                            strcasecmp(val, "on") == 0 ||
-                            strcasecmp(val, "yes") == 0);
-
-  val = XGetDefault(fl_display, key, "tooltips");
-  if (val) Fl_Tooltip::enable(strcasecmp(val, "true") == 0 ||
-                              strcasecmp(val, "on") == 0 ||
-                              strcasecmp(val, "yes") == 0);
-
-  val = XGetDefault(fl_display, key, "visibleFocus");
-  if (val) Fl::visible_focus(strcasecmp(val, "true") == 0 ||
-                             strcasecmp(val, "on") == 0 ||
-                             strcasecmp(val, "yes") == 0);
-#endif // !WIN32 && !__APPLE__
-
-  // set colors first, so background_pixel is correct:
-  static char beenhere;
-  if (!beenhere) {
-    if (geometry) {
-      int fl = 0, gx = x(), gy = y(); unsigned int gw = w(), gh = h();
-      fl = XParseGeometry(geometry, &gx, &gy, &gw, &gh);
-      if (fl & XNegative) gx = Fl::w()-w()+gx;
-      if (fl & YNegative) gy = Fl::h()-h()+gy;
-      //  int mw,mh; minsize(mw,mh);
-      //  if (mw > gw) gw = mw;
-      //  if (mh > gh) gh = mh;
-      Fl_Widget *r = resizable();
-      if (!r) resizable(this);
-      // for WIN32 we assume window is not mapped yet:
-      if (fl & (XValue | YValue))
-	x(-1), resize(gx,gy,gw,gh);
-      else
-	size(gw,gh);
-      resizable(r);
-    }
-  }
-
-  // set the class, which is used by X version of get_system_colors:
-  if (name) {xclass(name); name = 0;}
-  else if (!xclass()) xclass(fl_filename_name(argv[0]));
-
-  if (title) {label(title); title = 0;}
-  else if (!label()) label(xclass());
-
-  if (!beenhere) {
-    beenhere = 1;
-    Fl::scheme(Fl::scheme()); // opens display!  May call Fl::fatal()
-  }
-
-  // Show the window AFTER we have set the colors and scheme.
-  show();
-
-#if !defined(WIN32) && !defined(__APPLE__)
-  // set the command string, used by state-saving window managers:
-  int j;
-  int n=0; for (j=0; j<argc; j++) n += strlen(argv[j])+1;
-  char *buffer = new char[n];
-  char *p = buffer;
-  for (j=0; j<argc; j++) for (const char *q = argv[j]; (*p++ = *q++););
-  XChangeProperty(fl_display, fl_xid(this), XA_WM_COMMAND, XA_STRING, 8, 0,
-		  (unsigned char *)buffer, p-buffer-1);
-  delete[] buffer;
-#endif // !WIN32 && !__APPLE__
-}
-
-// Calls useful for simple demo programs, with automatic help message:
-
-static const char * const helpmsg =
-"options are:\n"
-" -bg2 color\n"
-" -bg color\n"
-" -di[splay] host:n.n\n"
-" -dn[d]\n"
-" -fg color\n"
-" -g[eometry] WxH+X+Y\n"
-" -i[conic]\n"
-" -k[bd]\n"
-" -na[me] classname\n"
-" -nod[nd]\n"
-" -nok[bd]\n"
-" -not[ooltips]\n"
-" -s[cheme] scheme\n"
-" -ti[tle] windowtitle\n"
-" -to[oltips]";
-
-const char * const Fl::help = helpmsg+13;
-
-/**
- Parse all command line switches matching standard FLTK options only.
- 
- It parses all the switches, and if any are not recognized it calls
- Fl::abort(Fl::help), i.e. unlike the long form, an unrecognized
- switch generates an error message and causes the program to exit.
- 
- */
-void Fl::args(int argc, char **argv) {
-  int i; if (Fl::args(argc,argv,i) < argc) Fl::error(helpmsg);
-}
-
-#if defined(WIN32) || defined(__APPLE__)
-
-/* the following function was stolen from the X sources as indicated. */
-
-/* Copyright 	Massachusetts Institute of Technology  1985, 1986, 1987 */
-/* $XConsortium: XParseGeom.c,v 11.18 91/02/21 17:23:05 rws Exp $ */
-
-/*
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of M.I.T. not be used in advertising or
-publicity pertaining to distribution of the software without specific,
-written prior permission.  M.I.T. makes no representations about the
-suitability of this software for any purpose.  It is provided "as is"
-without express or implied warranty.
-*/
-
-/*
- *    XParseGeometry parses strings of the form
- *   "=<width>x<height>{+-}<xoffset>{+-}<yoffset>", where
- *   width, height, xoffset, and yoffset are unsigned integers.
- *   Example:  "=80x24+300-49"
- *   The equal sign is optional.
- *   It returns a bitmask that indicates which of the four values
- *   were actually found in the string.  For each value found,
- *   the corresponding argument is updated;  for each value
- *   not found, the corresponding argument is left unchanged. 
- */
-
-static int ReadInteger(char* string, char** NextString)
-{
-  register int Result = 0;
-  int Sign = 1;
-    
-  if (*string == '+')
-    string++;
-  else if (*string == '-') {
-    string++;
-    Sign = -1;
-  }
-  for (; (*string >= '0') && (*string <= '9'); string++) {
-    Result = (Result * 10) + (*string - '0');
-  }
-  *NextString = string;
-  if (Sign >= 0)
-    return (Result);
-  else
-    return (-Result);
-}
-
-int XParseGeometry(const char* string, int* x, int* y,
-		   unsigned int* width, unsigned int* height)
-{
-  int mask = NoValue;
-  register char *strind;
-  unsigned int tempWidth = 0, tempHeight = 0;
-  int tempX = 0, tempY = 0;
-  char *nextCharacter;
-
-  if ( (string == NULL) || (*string == '\0')) return(mask);
-  if (*string == '=')
-    string++;  /* ignore possible '=' at beg of geometry spec */
-
-  strind = (char *)string;
-  if (*strind != '+' && *strind != '-' && *strind != 'x') {
-    tempWidth = ReadInteger(strind, &nextCharacter);
-    if (strind == nextCharacter) 
-      return (0);
-    strind = nextCharacter;
-    mask |= WidthValue;
-  }
-
-  if (*strind == 'x' || *strind == 'X') {	
-    strind++;
-    tempHeight = ReadInteger(strind, &nextCharacter);
-    if (strind == nextCharacter)
-      return (0);
-    strind = nextCharacter;
-    mask |= HeightValue;
-  }
-
-  if ((*strind == '+') || (*strind == '-')) {
-    if (*strind == '-') {
-      strind++;
-      tempX = -ReadInteger(strind, &nextCharacter);
-      if (strind == nextCharacter)
-	return (0);
-      strind = nextCharacter;
-      mask |= XNegative;
-
-    } else {
-      strind++;
-      tempX = ReadInteger(strind, &nextCharacter);
-      if (strind == nextCharacter)
-	return(0);
-      strind = nextCharacter;
-      }
-    mask |= XValue;
-    if ((*strind == '+') || (*strind == '-')) {
-      if (*strind == '-') {
-	strind++;
-	tempY = -ReadInteger(strind, &nextCharacter);
-	if (strind == nextCharacter)
-	  return(0);
-	strind = nextCharacter;
-	mask |= YNegative;
-
-      } else {
-	strind++;
-	tempY = ReadInteger(strind, &nextCharacter);
-	if (strind == nextCharacter)
-	  return(0);
-	strind = nextCharacter;
-      }
-      mask |= YValue;
-    }
-  }
-	
-  /* If strind isn't at the end of the string the it's an invalid
-     geometry specification. */
-
-  if (*strind != '\0') return (0);
-
-  if (mask & XValue)
-    *x = tempX;
-  if (mask & YValue)
-    *y = tempY;
-  if (mask & WidthValue)
-    *width = tempWidth;
-  if (mask & HeightValue)
-    *height = tempHeight;
-  return (mask);
-}
-
-#endif // ifdef WIN32
-
-//
-// End of "$Id: Fl_arg.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_cocoa.mm b/common/fltk/src/Fl_cocoa.mm
deleted file mode 100644
index 4168f26..0000000
--- a/common/fltk/src/Fl_cocoa.mm
+++ /dev/null
@@ -1,3844 +0,0 @@
-//
-// "$Id: Fl_cocoa.mm 8807 2011-06-16 12:35:32Z manolo $"
-//
-// MacOS-Cocoa specific code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//// From the inner edge of a MetroWerks CodeWarrior CD:
-// (without permission)
-//
-// "Three Compiles for 68Ks under the sky,
-// Seven Compiles for PPCs in their fragments of code,
-// Nine Compiles for Mortal Carbon doomed to die,
-// One Compile for Mach-O Cocoa on its Mach-O throne,
-// in the Land of MacOS X where the Drop-Shadows lie.
-// 
-// One Compile to link them all, One Compile to merge them,
-// One Compile to copy them all and in the bundle bind them,
-// in the Land of MacOS X where the Drop-Shadows lie."
-
-#ifdef __APPLE__
-
-#define CONSOLIDATE_MOTION 0
-extern "C" {
-#include <pthread.h>
-}
-
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/Fl_Sys_Menu_Bar.H>
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Input_.H>
-#include <FL/Fl_Text_Display.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-#include <unistd.h>
-#include <stdarg.h>
-
-#import <Cocoa/Cocoa.h>
-#import <Carbon/Carbon.h>
-
-#ifndef NSINTEGER_DEFINED // appears with 10.5 in NSObjCRuntime.h
-#if defined(__LP64__) && __LP64__
-typedef long NSInteger;
-typedef unsigned long NSUInteger;
-#else
-typedef long NSInteger;
-typedef unsigned int NSUInteger;
-#endif
-#endif
-
-
-// #define DEBUG_SELECT		// UNCOMMENT FOR SELECT()/THREAD DEBUGGING
-#ifdef DEBUG_SELECT
-#include <stdio.h>		// testing
-#define DEBUGMSG(msg)		if ( msg ) fprintf(stderr, msg);
-#define DEBUGPERRORMSG(msg)	if ( msg ) perror(msg)
-#define DEBUGTEXT(txt)		txt
-#else
-#define DEBUGMSG(msg)
-#define DEBUGPERRORMSG(msg)
-#define DEBUGTEXT(txt)		NULL
-#endif /*DEBUG_SELECT*/
-
-// external functions
-extern void fl_fix_focus();
-extern Fl_Offscreen fl_create_offscreen_with_alpha(int w, int h);
-
-// forward definition of functions in this file
-// converting cr lf converter function
-static void convert_crlf(char * string, size_t len);
-static void createAppleMenu(void);
-static Fl_Region MacRegionMinusRect(Fl_Region r, int x,int y,int w,int h);
-static void cocoaMouseHandler(NSEvent *theEvent);
-
-static Fl_Quartz_Graphics_Driver fl_quartz_driver;
-static Fl_Display_Device fl_quartz_display(&fl_quartz_driver);
-FL_EXPORT Fl_Graphics_Driver *fl_graphics_driver = (Fl_Graphics_Driver*)&fl_quartz_driver; // the current target device of graphics operations
-Fl_Surface_Device* Fl_Surface_Device::_surface = (Fl_Surface_Device*)&fl_quartz_display; // the current target surface of graphics operations
-Fl_Display_Device *Fl_Display_Device::_display = &fl_quartz_display; // the platform display
-
-// public variables
-int fl_screen;
-CGContextRef fl_gc = 0;
-void *fl_system_menu;                   // this is really a NSMenu*
-Fl_Sys_Menu_Bar *fl_sys_menu_bar = 0;
-void *fl_capture = 0;			// (NSWindow*) we need this to compensate for a missing(?) mouse capture
-bool fl_show_iconic;                    // true if called from iconize() - shows the next created window in collapsed state
-//int fl_disable_transient_for;           // secret method of removing TRANSIENT_FOR
-Window fl_window;
-Fl_Window *Fl_Window::current_;
-int fl_mac_os_version = 0;		// the version number of the running Mac OS X (e.g., 100604 for 10.6.4)
-
-// forward declarations of variables in this file
-static int got_events = 0;
-static Fl_Window* resize_from_system;
-
-#if CONSOLIDATE_MOTION
-static Fl_Window* send_motion;
-extern Fl_Window* fl_xmousewin;
-#endif
-
-bool use_simple_keyboard = false;
-
-enum { FLTKTimerEvent = 1, FLTKDataReadyEvent };
-
-
-/* fltk-utf8 placekeepers */
-void fl_reset_spot()
-{
-}
-
-void fl_set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win)
-{
-}
-
-void fl_set_status(int x, int y, int w, int h)
-{
-}
-
-// Undocumented voodoo. Taken from Mozilla.
-#define ENABLE_ROMAN_KYBDS_ONLY -23
-
-void fl_update_focus(void)
-{
-  Fl_Widget *focus;
-
-  focus = Fl::grab();
-  if (!focus)
-    focus = Fl::focus();
-  if (!focus)
-    return;
-
-  if (focus->simple_keyboard())
-    use_simple_keyboard = true;
-  else
-    use_simple_keyboard = false;
-
-  // Force a "Roman" or "ASCII" keyboard, which both the Mozilla and
-  // Safari people seem to think implies turning off advanced IME stuff
-  // (see nsTSMManager::SyncKeyScript in Mozilla and enableSecureTextInput
-  // in Safari/Webcore). Should be good enough for us then...
-#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5)
-  CFArrayRef inputSources = TISCreateASCIICapableInputSourceList();
-  TSMSetDocumentProperty(TSMGetActiveDocument(),
-                         kTSMDocumentEnabledInputSourcesPropertyTag,
-                         sizeof(CFArrayRef), &inputSources);
-  CFRelease(inputSources);
-#else
-  KeyScript(use_simple_keyboard ? ENABLE_ROMAN_KYBDS_ONLY : smKeyEnableKybds);
-#endif  
-}
-
-/*
- * Mac keyboard lookup table
- * See also the inverse converter vktab in Fl_get_key_mac.cxx
- */
-static unsigned short macKeyLookUp[128] =
-{
-  'a', 's', 'd', 'f', 'h', 'g', 'z', 'x',
-  'c', 'v', '^', 'b', 'q', 'w', 'e', 'r',
-  
-  'y', 't', '1', '2', '3', '4', '6', '5',
-  '=', '9', '7', '-', '8', '0', ']', 'o',
-  
-  'u', '[', 'i', 'p', FL_Enter, 'l', 'j', '\'',
-  'k', ';', '\\', ',', '/', 'n', 'm', '.',
-  
-  FL_Tab, ' ', '`', FL_BackSpace, 
-  FL_KP_Enter, FL_Escape, FL_Meta_R, FL_Meta_L,
-  FL_Shift_L, FL_Caps_Lock, FL_Alt_L, FL_Control_L, 
-  FL_Shift_R, FL_Alt_R, FL_Control_R, 0/*FL_F*/,
-  
-  0, FL_KP+'.', FL_Right, FL_KP+'*', 0, FL_KP+'+', FL_Left, FL_Num_Lock,
-  FL_Down, 0, 0, FL_KP+'/', FL_KP_Enter, FL_Up, FL_KP+'-', 0,
-  
-  0, FL_KP+'=', FL_KP+'0', FL_KP+'1', FL_KP+'2', FL_KP+'3', FL_KP+'4', FL_KP+'5',
-  FL_KP+'6', FL_KP+'7', 0, FL_KP+'8', FL_KP+'9', 0, 0, 0,
-  
-  FL_F+5, FL_F+6, FL_F+7, FL_F+3, FL_F+8, FL_F+9, 0, FL_F+11,
-  0, FL_F+13, FL_F+16, FL_F+14, 0, FL_F+10, FL_Menu, FL_F+12,
-  
-  0, FL_F+15, FL_Help, FL_Home, FL_Page_Up, FL_Delete, FL_F+4, FL_End,
-  FL_F+2, FL_Page_Down, FL_F+1, FL_Left, FL_Right, FL_Down, FL_Up, 0/*FL_Power*/,
-};
-
-/*
- * convert the current mouse chord into the FLTK modifier state
- */
-static unsigned int mods_to_e_state( NSUInteger mods )
-{
-  long state = 0;
-  if ( mods & NSCommandKeyMask ) state |= FL_META;
-  if ( mods & NSAlternateKeyMask ) state |= FL_ALT;
-  if ( mods & NSControlKeyMask ) state |= FL_CTRL;
-  if ( mods & NSShiftKeyMask ) state |= FL_SHIFT;
-  if ( mods & NSAlphaShiftKeyMask ) state |= FL_CAPS_LOCK;
-  unsigned int ret = ( Fl::e_state & 0xff000000 ) | state;
-  Fl::e_state = ret;
-  //printf( "State 0x%08x (%04x)\n", Fl::e_state, mods );
-  return ret;
-}
-
-// these pointers are set by the Fl::lock() function:
-static void nothing() {}
-void (*fl_lock_function)() = nothing;
-void (*fl_unlock_function)() = nothing;
-
-//
-// Select interface -- how it's implemented:
-//     When the user app configures one or more file descriptors to monitor
-//     with Fl::add_fd(), we start a separate thread to select() the  data,
-//     sending a custom OSX 'FLTK data ready event' to the parent  thread's
-//     RunApplicationLoop(), so that it triggers the data  ready  callbacks
-//     in the parent thread.                               -erco 04/04/04
-//     
-#define POLLIN  1
-#define POLLOUT 4
-#define POLLERR 8
-
-// Class to handle select() 'data ready'
-class DataReady
-{
-  struct FD
-  {
-    int fd;
-    short events;
-    void (*cb)(int, void*);
-    void* arg;
-  };
-  int nfds, fd_array_size;
-  FD *fds;
-  pthread_t tid;		// select()'s thread id
-  
-  // Data that needs to be locked (all start with '_')
-  pthread_mutex_t _datalock;	// data lock
-  fd_set _fdsets[3];		// r/w/x sets user wants to monitor
-  int _maxfd;			// max fd count to monitor
-  int _cancelpipe[2];		// pipe used to help cancel thread
-  
-public:
-  DataReady()
-  {
-    nfds = 0;
-    fd_array_size = 0;
-    fds = 0;
-    tid = 0;
-    
-    pthread_mutex_init(&_datalock, NULL);
-    FD_ZERO(&_fdsets[0]); FD_ZERO(&_fdsets[1]); FD_ZERO(&_fdsets[2]);
-    _cancelpipe[0] = _cancelpipe[1] = 0;
-    _maxfd = -1;
-  }
-  
-  ~DataReady()
-  {
-    CancelThread(DEBUGTEXT("DESTRUCTOR\n"));
-    if (fds) { free(fds); fds = 0; }
-    nfds = 0;
-  }
-  
-  // Locks
-  //    The convention for locks: volatile vars start with '_',
-  //    and must be locked before use. Locked code is prefixed 
-  //    with /*LOCK*/ to make painfully obvious esp. in debuggers. -erco
-  //
-  void DataLock() { pthread_mutex_lock(&_datalock); }
-  void DataUnlock() { pthread_mutex_unlock(&_datalock); }
-  
-  // Accessors
-  int IsThreadRunning() { return(tid ? 1 : 0); }
-  int GetNfds() { return(nfds); }
-  int GetCancelPipe(int ix) { return(_cancelpipe[ix]); }
-  fd_set GetFdset(int ix) { return(_fdsets[ix]); }
-  
-  // Methods
-  void AddFD(int n, int events, void (*cb)(int, void*), void *v);
-  void RemoveFD(int n, int events);
-  int CheckData(fd_set& r, fd_set& w, fd_set& x);
-  void HandleData(fd_set& r, fd_set& w, fd_set& x);
-  static void* DataReadyThread(void *self);
-  void StartThread(void);
-  void CancelThread(const char *reason);
-};
-
-static DataReady dataready;
-
-void DataReady::AddFD(int n, int events, void (*cb)(int, void*), void *v)
-{
-  RemoveFD(n, events);
-  int i = nfds++;
-  if (i >= fd_array_size) 
-  {
-    fl_open_display(); // necessary for NSApp to be defined and the event loop to work
-    FD *temp;
-    fd_array_size = 2*fd_array_size+1;
-    if (!fds) { temp = (FD*)malloc(fd_array_size*sizeof(FD)); }
-    else { temp = (FD*)realloc(fds, fd_array_size*sizeof(FD)); }
-    if (!temp) return;
-    fds = temp;
-  }
-  fds[i].cb  = cb;
-  fds[i].arg = v;
-  fds[i].fd  = n;
-  fds[i].events = events;
-  DataLock();
-  /*LOCK*/  if (events & POLLIN)  FD_SET(n, &_fdsets[0]);
-  /*LOCK*/  if (events & POLLOUT) FD_SET(n, &_fdsets[1]);
-  /*LOCK*/  if (events & POLLERR) FD_SET(n, &_fdsets[2]);
-  /*LOCK*/  if (n > _maxfd) _maxfd = n;
-  DataUnlock();
-}
-
-// Remove an FD from the array
-void DataReady::RemoveFD(int n, int events)
-{
-  int i,j;
-  _maxfd = -1; // recalculate maxfd on the fly
-  for (i=j=0; i<nfds; i++) {
-    if (fds[i].fd == n) {
-      int e = fds[i].events & ~events;
-      if (!e) continue; // if no events left, delete this fd
-      fds[i].events = e;
-    }
-    if (fds[i].fd > _maxfd) _maxfd = fds[i].fd;
-    // move it down in the array if necessary:
-    if (j<i) {
-      fds[j] = fds[i];
-    }
-    j++;
-  }
-  nfds = j;
-  DataLock();
-  /*LOCK*/  if (events & POLLIN)  FD_CLR(n, &_fdsets[0]);
-  /*LOCK*/  if (events & POLLOUT) FD_CLR(n, &_fdsets[1]);
-  /*LOCK*/  if (events & POLLERR) FD_CLR(n, &_fdsets[2]);
-  DataUnlock();
-}
-
-// CHECK IF USER DATA READY, RETURNS r/w/x INDICATING WHICH IF ANY
-int DataReady::CheckData(fd_set& r, fd_set& w, fd_set& x)
-{
-  int ret;
-  DataLock();
-  /*LOCK*/  timeval t = { 0, 1 };		// quick check
-  /*LOCK*/  r = _fdsets[0], w = _fdsets[1], x = _fdsets[2];
-  /*LOCK*/  ret = ::select(_maxfd+1, &r, &w, &x, &t);
-  DataUnlock();
-  if ( ret == -1 ) {
-    DEBUGPERRORMSG("CheckData(): select()");
-  }
-  return(ret);
-}
-
-// HANDLE DATA READY CALLBACKS
-void DataReady::HandleData(fd_set& r, fd_set& w, fd_set& x)
-{
-  for (int i=0; i<nfds; i++) {
-    int f = fds[i].fd;
-    short revents = 0;
-    if (FD_ISSET(f, &r)) revents |= POLLIN;
-    if (FD_ISSET(f, &w)) revents |= POLLOUT;
-    if (FD_ISSET(f, &x)) revents |= POLLERR;
-    if (fds[i].events & revents) {
-      DEBUGMSG("DOING CALLBACK: ");
-      fds[i].cb(f, fds[i].arg);
-      DEBUGMSG("DONE\n");
-    }
-  }
-}
-
-// DATA READY THREAD
-//    This thread watches for changes in user's file descriptors.
-//    Sends a 'data ready event' to the main thread if any change.
-//
-void* DataReady::DataReadyThread(void *o)
-{
-  DataReady *self = (DataReady*)o;
-  NSAutoreleasePool *localPool;
-  localPool = [[NSAutoreleasePool alloc] init]; 
-  while ( 1 ) {					// loop until thread cancel or error
-    // Thread safe local copies of data before each select()
-    self->DataLock();
-    /*LOCK*/  int maxfd = self->_maxfd;
-    /*LOCK*/  fd_set r = self->GetFdset(0);
-    /*LOCK*/  fd_set w = self->GetFdset(1);
-    /*LOCK*/  fd_set x = self->GetFdset(2);
-    /*LOCK*/  int cancelpipe = self->GetCancelPipe(0);
-    /*LOCK*/  if ( cancelpipe > maxfd ) maxfd = cancelpipe;
-    /*LOCK*/  FD_SET(cancelpipe, &r);		// add cancelpipe to fd's to watch
-    /*LOCK*/  FD_SET(cancelpipe, &x);
-    self->DataUnlock();
-    // timeval t = { 1000, 0 };	// 1000 seconds;
-    timeval t = { 2, 0 };	// HACK: 2 secs prevents 'hanging' problem
-    int ret = ::select(maxfd+1, &r, &w, &x, &t);
-    pthread_testcancel();	// OSX 10.0.4 and older: needed for parent to cancel
-    switch ( ret ) {
-      case 0:	// NO DATA
-        continue;
-      case -1:	// ERROR
-      {
-        DEBUGPERRORMSG("CHILD THREAD: select() failed");
-        return(NULL);		// error? exit thread
-      }
-      default:	// DATA READY
-      {
-        if (FD_ISSET(cancelpipe, &r) || FD_ISSET(cancelpipe, &x)) 	// cancel?
-	  { return(NULL); }						// just exit
-        DEBUGMSG("CHILD THREAD: DATA IS READY\n");
-        NSPoint pt={0,0};
-        NSEvent *event = [NSEvent otherEventWithType:NSApplicationDefined location:pt 
-				       modifierFlags:0
-                                           timestamp:0
-                                        windowNumber:0 context:NULL 
-					     subtype:FLTKDataReadyEvent data1:0 data2:0];
-        [NSApp postEvent:event atStart:NO];
-        return(NULL);		// done with thread
-      }
-    }
-  }
-}
-
-// START 'DATA READY' THREAD RUNNING, CREATE INTER-THREAD PIPE
-void DataReady::StartThread(void)
-{
-  CancelThread(DEBUGTEXT("STARTING NEW THREAD\n"));
-  DataLock();
-  /*LOCK*/  pipe(_cancelpipe);	// pipe for sending cancel msg to thread
-  DataUnlock();
-  DEBUGMSG("*** START THREAD\n");
-  pthread_create(&tid, NULL, DataReadyThread, (void*)this);
-}
-
-// CANCEL 'DATA READY' THREAD, CLOSE PIPE
-void DataReady::CancelThread(const char *reason)
-{
-  if ( tid ) {
-    DEBUGMSG("*** CANCEL THREAD: ");
-    DEBUGMSG(reason);
-    if ( pthread_cancel(tid) == 0 ) {		// cancel first
-      DataLock();
-      /*LOCK*/  write(_cancelpipe[1], "x", 1);	// wake thread from select
-      DataUnlock();
-      pthread_join(tid, NULL);			// wait for thread to finish
-    }
-    tid = 0;
-    DEBUGMSG("(JOINED) OK\n");
-  }
-  // Close pipe if open
-  DataLock();
-  /*LOCK*/  if ( _cancelpipe[0] ) { close(_cancelpipe[0]); _cancelpipe[0] = 0; }
-  /*LOCK*/  if ( _cancelpipe[1] ) { close(_cancelpipe[1]); _cancelpipe[1] = 0; }
-  DataUnlock();
-}
-
-void Fl::add_fd( int n, int events, void (*cb)(int, void*), void *v )
-{
-  dataready.AddFD(n, events, cb, v);
-}
-
-void Fl::add_fd(int fd, void (*cb)(int, void*), void* v)
-{
-  dataready.AddFD(fd, POLLIN, cb, v);
-}
-
-void Fl::remove_fd(int n, int events)
-{
-  dataready.RemoveFD(n, events);
-}
-
-void Fl::remove_fd(int n)
-{
-  dataready.RemoveFD(n, -1);
-}
-
-/*
- * Check if there is actually a message pending!
- */
-int fl_ready()
-{
-  NSEvent *retval = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate dateWithTimeIntervalSinceNow:0]
-				    inMode:NSDefaultRunLoopMode dequeue:NO];
-  return retval != nil;
-}
-
-
-static void processFLTKEvent(void) {
-  fl_lock_function();
-  dataready.CancelThread(DEBUGTEXT("DATA READY EVENT\n"));
-  
-  // CHILD THREAD TELLS US DATA READY
-  //     Check to see what's ready, and invoke user's cb's
-  //
-  fd_set r,w,x;
-  switch(dataready.CheckData(r,w,x)) {
-    case 0:	// NO DATA
-      break;
-    case -1:	// ERROR
-      break;
-    default:	// DATA READY
-      dataready.HandleData(r,w,x);
-      break;
-  }
-  fl_unlock_function();
-  return;
-}
-
-
-/*
- * break the current event loop
- */
-static void breakMacEventLoop()
-{
-  fl_lock_function();
-  
-  NSPoint pt={0,0};
-  NSEvent *event = [NSEvent otherEventWithType:NSApplicationDefined location:pt 
-				 modifierFlags:0
-                                     timestamp:0
-                                  windowNumber:0 context:NULL 
-				       subtype:FLTKTimerEvent data1:0 data2:0];
-  [NSApp postEvent:event atStart:NO];
-  fl_unlock_function();
-}
-
-//
-// MacOS X timers
-//
-
-struct MacTimeout {
-  Fl_Timeout_Handler callback;
-  void* data;
-  CFRunLoopTimerRef timer;
-  char pending; 
-};
-static MacTimeout* mac_timers;
-static int mac_timer_alloc;
-static int mac_timer_used;
-
-static void realloc_timers()
-{
-  if (mac_timer_alloc == 0) {
-    mac_timer_alloc = 8;
-    fl_open_display(); // needed because the timer creates an event
-  }
-  mac_timer_alloc *= 2;
-  MacTimeout* new_timers = new MacTimeout[mac_timer_alloc];
-  memset(new_timers, 0, sizeof(MacTimeout)*mac_timer_alloc);
-  memcpy(new_timers, mac_timers, sizeof(MacTimeout) * mac_timer_used);
-  MacTimeout* delete_me = mac_timers;
-  mac_timers = new_timers;
-  delete [] delete_me;
-}
-
-static void delete_timer(MacTimeout& t)
-{
-  if (t.timer) {
-    CFRunLoopRemoveTimer(CFRunLoopGetCurrent(),
-		      t.timer,
-		      kCFRunLoopDefaultMode);
-    CFRelease(t.timer);
-    memset(&t, 0, sizeof(MacTimeout));
-  }
-}
-
-static void do_timer(CFRunLoopTimerRef timer, void* data)
-{
-  for (int i = 0;  i < mac_timer_used;  ++i) {
-    MacTimeout& t = mac_timers[i];
-    if (t.timer == timer  &&  t.data == data) {
-      t.pending = 0;
-      (*t.callback)(data);
-      if (t.pending==0)
-        delete_timer(t);
-      break;
-    }
-  }
-  breakMacEventLoop();
-}
-
-@interface FLWindow : NSWindow {
-  Fl_Window *w;
-  BOOL containsGLsubwindow;
-}
-- (FLWindow*)initWithFl_W:(Fl_Window *)flw 
-	      contentRect:(NSRect)rect 
-		styleMask:(NSUInteger)windowStyle;
-- (Fl_Window *)getFl_Window;
-- (BOOL)windowShouldClose:(FLWindow *)w;
-- (BOOL)containsGLsubwindow;
-- (void)setContainsGLsubwindow:(BOOL)contains;
-@end
-
-@implementation FLWindow
-- (FLWindow*)initWithFl_W:(Fl_Window *)flw 
-	      contentRect:(NSRect)rect 
-		styleMask:(NSUInteger)windowStyle 
-{
-  self = [super initWithContentRect:rect styleMask:windowStyle backing:NSBackingStoreBuffered defer:NO];
-  if (self) {
-    w = flw;
-    containsGLsubwindow = NO;
-  }
-  return self;
-}
-- (Fl_Window *)getFl_Window;
-{
-  return w;
-}
-- (BOOL)windowShouldClose:(FLWindow *)fl
-{
-  fl_lock_function();
-  Fl::handle( FL_CLOSE, [fl getFl_Window] ); // this might or might not close the window
-  if (!Fl_X::first) return YES;
-  Fl_Window *l = Fl::first_window();
-  while( l != NULL && l != [fl getFl_Window]) l = Fl::next_window(l);
-  fl_unlock_function();
-  return (l == NULL ? YES : NO);
-}
-- (BOOL)containsGLsubwindow
-{
-  return containsGLsubwindow;
-}
-- (void)setContainsGLsubwindow:(BOOL)contains
-{
-  containsGLsubwindow = contains;
-}
-- (BOOL)canBecomeKeyWindow
-{
-  return YES;
-}
-@end
-
-@interface FLApplication : NSObject
-{
-}
-+ (void)sendEvent:(NSEvent *)theEvent;
-@end
-
-/*
- * This function is the central event handler.
- * It reads events from the event queue using the given maximum time
- * Funny enough, it returns the same time that it got as the argument. 
- */
-static double do_queued_events( double time = 0.0 ) 
-{
-  got_events = 0;
-  
-  // Check for re-entrant condition
-  if ( dataready.IsThreadRunning() ) {
-    dataready.CancelThread(DEBUGTEXT("AVOID REENTRY\n"));
-  }
-  
-  // Start thread to watch for data ready
-  if ( dataready.GetNfds() ) {
-    dataready.StartThread();
-  }
-  
-  fl_unlock_function();
-  NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask 
-                                      untilDate:[NSDate dateWithTimeIntervalSinceNow:time] 
-                                         inMode:NSDefaultRunLoopMode dequeue:YES];  
-  if (event != nil) {
-    got_events = 1;
-    [FLApplication sendEvent:event]; // will then call [NSApplication sendevent:]
-  }
-  fl_lock_function();
-  
-#if CONSOLIDATE_MOTION
-  if (send_motion && send_motion == fl_xmousewin) {
-    send_motion = 0;
-    Fl::handle(FL_MOVE, fl_xmousewin);
-  }
-#endif
-  
-  return time;
-}
-
-/*
- * This public function handles all events. It wait a maximum of 
- * 'time' seconds for an event. This version returns 1 if events
- * other than the timeout timer were processed.
- *
- * \todo there is no socket handling in this code whatsoever
- */
-int fl_wait( double time ) 
-{
-  do_queued_events( time );
-  return (got_events);
-}
-
-double fl_mac_flush_and_wait(double time_to_wait, char in_idle) {
-  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-  Fl::flush();
-  if (Fl::idle && !in_idle) // 'idle' may have been set within flush()
-    time_to_wait = 0.0;
-  double retval = fl_wait(time_to_wait);
-  [pool release];
-  return retval;
-}
-
-// updates Fl::e_x, Fl::e_y, Fl::e_x_root, and Fl::e_y_root
-static void update_e_xy_and_e_xy_root(NSWindow *nsw)
-{
-  NSPoint pt;
-  pt = [nsw mouseLocationOutsideOfEventStream];
-  Fl::e_x = int(pt.x);
-  Fl::e_y = int([[nsw contentView] frame].size.height - pt.y);
-  pt = [NSEvent mouseLocation];
-  Fl::e_x_root = int(pt.x);
-  Fl::e_y_root = int([[nsw screen] frame].size.height - pt.y);
-}
-
-/*
- * Cocoa Mousewheel handler
- */
-static void cocoaMouseWheelHandler(NSEvent *theEvent)
-{
-  // Handle the new "MightyMouse" mouse wheel events. Please, someone explain
-  // to me why Apple changed the API on this even though the current API
-  // supports two wheels just fine. Matthias,
-  fl_lock_function();
-  
-  Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-  if ( !window->shown() ) {
-    fl_unlock_function();
-    return;
-  }
-  Fl::first_window(window);
-  
-  // Under OSX, single mousewheel increments are 0.1,
-  // so make sure they show up as at least 1..
-  //
-  float dx = [theEvent deltaX]; if ( fabs(dx) < 1.0 ) dx = (dx > 0) ? 1.0 : -1.0;
-  float dy = [theEvent deltaY]; if ( fabs(dy) < 1.0 ) dy = (dy > 0) ? 1.0 : -1.0;
-  if ([theEvent deltaX] != 0) {
-    Fl::e_dx = (int)-dx;
-    Fl::e_dy = 0;
-    if ( Fl::e_dx) Fl::handle( FL_MOUSEWHEEL, window );
-  } else if ([theEvent deltaY] != 0) {
-    Fl::e_dx = 0;
-    Fl::e_dy = (int)-dy;
-    if ( Fl::e_dy) Fl::handle( FL_MOUSEWHEEL, window );
-  } else {
-    fl_unlock_function();
-    return;
-  }
-  
-  fl_unlock_function();
-  
-  //  return noErr;
-}
-
-/*
- * Cocoa Mouse Button Handler
- */
-static void cocoaMouseHandler(NSEvent *theEvent)
-{
-  static int keysym[] = { 0, FL_Button+1, FL_Button+3, FL_Button+2 };
-  static int px, py;
-  static char suppressed = 0;
-  
-  fl_lock_function();
-  
-  Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-  if ( !window->shown() ) {
-    fl_unlock_function();
-    return;
-  }
-  Fl_Window *first = Fl::first_window();
-  if (first != window && !(first->modal() || first->non_modal())) Fl::first_window(window);
-  NSPoint pos = [theEvent locationInWindow];
-  pos.y = window->h() - pos.y;
-  NSInteger btn = [theEvent buttonNumber]  + 1;
-  NSUInteger mods = [theEvent modifierFlags];  
-  int sendEvent = 0;
-  
-  NSEventType etype = [theEvent type];
-  if (etype == NSLeftMouseDown || etype == NSRightMouseDown || etype == NSOtherMouseDown) {
-    if (btn == 1) Fl::e_state |= FL_BUTTON1;
-    else if (btn == 3) Fl::e_state |= FL_BUTTON2;
-    else if (btn == 2) Fl::e_state |= FL_BUTTON3;
-  }
-  else if (etype == NSLeftMouseUp || etype == NSRightMouseUp || etype == NSOtherMouseUp) {
-    if (btn == 1) Fl::e_state &= ~FL_BUTTON1;
-    else if (btn == 3) Fl::e_state &= ~FL_BUTTON2;
-    else if (btn == 2) Fl::e_state &= ~FL_BUTTON3;
-    }
-    
-  switch ( etype ) {
-    case NSLeftMouseDown:
-    case NSRightMouseDown:
-    case NSOtherMouseDown:
-      suppressed = 0;
-      sendEvent = FL_PUSH;
-      Fl::e_is_click = 1; 
-      px = (int)pos.x; py = (int)pos.y;
-      if ([theEvent clickCount] > 1) 
-        Fl::e_clicks++;
-      else
-        Fl::e_clicks = 0;
-      // fall through
-    case NSLeftMouseUp:
-    case NSRightMouseUp:
-    case NSOtherMouseUp:
-      if (suppressed) {
-        suppressed = 0;
-        break;
-      }
-      if ( !window ) break;
-      if ( !sendEvent ) {
-        sendEvent = FL_RELEASE; 
-      }
-      Fl::e_keysym = keysym[ btn ];
-      // fall through
-    case NSMouseMoved:
-      suppressed = 0;
-      if ( !sendEvent ) { 
-        sendEvent = FL_MOVE; 
-      }
-      // fall through
-    case NSLeftMouseDragged:
-    case NSRightMouseDragged:
-    case NSOtherMouseDragged: {
-      if (suppressed) break;
-      if ( !sendEvent ) {
-        sendEvent = FL_MOVE; // Fl::handle will convert into FL_DRAG
-        if (fabs(pos.x-px)>5 || fabs(pos.y-py)>5) 
-          Fl::e_is_click = 0;
-      }
-      mods_to_e_state( mods );
-      update_e_xy_and_e_xy_root([theEvent window]);
-      Fl::handle( sendEvent, window );
-      }
-      break;
-    default:
-      break;
-  }
-  
-  fl_unlock_function();
-  
-  return;
-}
-
-@interface FLTextView : NSTextView 
-// this subclass is needed under OS X <= 10.5 but not under >= 10.6 where the base class is enough
-{
-}
-@end
-@implementation FLTextView
-- (void)insertText:(id)aString
-{
-  [[[NSApp keyWindow] contentView] insertText:aString];
-}
-- (void)doCommandBySelector:(SEL)aSelector
-{
-  [[[NSApp keyWindow] contentView] doCommandBySelector:aSelector];
-}
-@end
-
-static const char* cocoaDead2FLTK(const char *in)
-{
-  if (strcmp(in, "\140") == 0)      // GRAVE ACCENT
-    return "\314\200";              // COMBINING GRAVE ACCENT
-  if (strcmp(in, "\302\264") == 0)  // ACUTE ACCENT
-    return "\314\201";              // COMBINING ACUTE ACCENT
-  if (strcmp(in, "\136") == 0)      // CIRCUMFLEX ACCENT
-    return "\314\202";              // COMBINING CIRCUMFLEX ACCENT
-  if (strcmp(in, "\176") == 0)      // TILDE
-    return "\314\203";              // COMBINING TILDE
-  if (strcmp(in, "\302\250") == 0)  // DIAERESIS
-    return "\314\210";              // COMBINING DIAERESIS
-  // FIXME: OS X dead key behaviour isn't documented and I don't have
-  //        any more keyboards to test with...
-
-  // hope that OS X gave us something proper to begin with
-  return in;
-}
-
-/*
-Handle cocoa keyboard events
-Events during a character composition sequence:
- - keydown with deadkey -> [[theEvent characters] length] is 0
- - keyup -> [theEvent characters] contains the deadkey
- - keydown with next key -> [theEvent characters] contains the composed character
- - keyup -> [theEvent characters] contains the standard character
- */
-static void cocoaKeyboardHandler(NSEvent *theEvent)
-{
-  NSUInteger mods;
-  
-  // get the modifiers
-  mods = [theEvent modifierFlags];
-  // get the key code
-  UInt32 keyCode = 0, maskedKeyCode = 0;
-  unsigned short sym = 0;
-  keyCode = [theEvent keyCode];
-  NSString *s = [theEvent characters];  
-  if ( (mods & NSShiftKeyMask) && (mods & NSCommandKeyMask) ) {
-    s = [s uppercaseString]; // US keyboards return lowercase letter in s if cmd-shift-key is hit
-  }
-  // extended keyboards can also send sequences on key-up to generate Kanji etc. codes.
-  // Some observed prefixes are 0x81 to 0x83, followed by an 8 bit keycode.
-  // In this mode, there seem to be no key-down codes
-  // printf("%08x %08x %08x\n", keyCode, mods, key);
-  maskedKeyCode = keyCode & 0x7f;
-
-  if ([theEvent type] == NSKeyUp) {
-    Fl::e_state &= 0xbfffffff; // clear the deadkey flag
-  }
-
-  mods_to_e_state( mods ); // process modifier keys
-  sym = macKeyLookUp[maskedKeyCode];
-  if (sym < 0xff00) { // a "simple" key
-    // find the result of this key without modifier
-    NSString *sim = [theEvent charactersIgnoringModifiers];
-    UniChar one;
-    CFStringGetCharacters((CFStringRef)sim, CFRangeMake(0, 1), &one);
-    // charactersIgnoringModifiers doesn't ignore shift, remove it when it's on
-    if(one >= 'A' && one <= 'Z') one += 32;
-    if (one > 0 && one <= 0x7f && (sym<'0' || sym>'9') ) sym = one;
-  }
-  Fl::e_keysym = Fl::e_original_keysym = sym;
-
-  //NSLog(@"cocoaKeyboardHandler: keycode=%08x keysym=%08x mods=%08x symbol=%@ (%@)",
-  //  keyCode, sym, mods, [theEvent characters], [theEvent charactersIgnoringModifiers]);
-
-  // If there is text associated with this key, it will be filled in later.
-  Fl::e_length = 0;
-  Fl::e_text = (char*)"";
-}
-
-
-/*
- * Open callback function to call...
- */
-
-static void	(*open_cb)(const char *) = 0;
-
-
-/*
- * Install an open documents event handler...
- */
-@interface FLAppleEventHandler : NSObject
-{
-}
-- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent: (NSAppleEventDescriptor *)replyEvent;
-@end
-@implementation FLAppleEventHandler
-- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent: (NSAppleEventDescriptor *)replyEvent
-{
-  NSAppleEventDescriptor *single = [event descriptorAtIndex:1];
-  const AEDesc *document = [single aeDesc];
-  long i, n;
-  FSRef fileRef;
-  AEKeyword keyWd;
-  DescType typeCd;
-  Size actSz;
-  char filename[1024];
-  // Lock access to FLTK in this thread...
-  fl_lock_function();
-  
-  // Open the documents via the callback...
-  if (AECountItems(document, &n) == noErr) {
-    for (i = 1; i <= n; i ++) {
-      AEGetNthPtr(document, i, typeFSRef, &keyWd, &typeCd,
-                  (Ptr)&fileRef, sizeof(fileRef),
-                  (actSz = sizeof(fileRef), &actSz));
-      FSRefMakePath( &fileRef, (UInt8*)filename, sizeof(filename) );
-      
-      (*open_cb)(filename);
-    }
-  }
-  // Unlock access to FLTK for all threads...
-  fl_unlock_function();
-}
-@end
-
-void fl_open_callback(void (*cb)(const char *)) {
-  static NSAppleEventManager *aeventmgr = nil;
-  static FLAppleEventHandler *handler;
-  fl_open_display();
-  if (!aeventmgr) {
-    aeventmgr = [NSAppleEventManager sharedAppleEventManager];
-    handler = [[FLAppleEventHandler alloc] init];
-  }
-  
-  open_cb = cb;
-  if (cb) {
-    [aeventmgr setEventHandler:handler andSelector:@selector(handleAppleEvent:withReplyEvent:) 
-                 forEventClass:kCoreEventClass andEventID:kAEOpenDocuments];
-  } else {
-    [aeventmgr removeEventHandlerForEventClass:kCoreEventClass andEventID:kAEOpenDocuments];  
-  }
-}
-
-
-/*
- * initialize the Mac toolboxes, dock status, and set the default menubar
- */
-
-extern "C" {
-  extern OSErr CPSEnableForegroundOperation(ProcessSerialNumber *psn, UInt32 _arg2,
-                                            UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
-}
-
-
-@interface FLDelegate : NSObject 
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-<NSWindowDelegate, NSApplicationDelegate>
-#endif
-{
-}
-- (void)windowDidMove:(NSNotification *)notif;
-- (void)windowDidResize:(NSNotification *)notif;
-- (void)windowDidResignKey:(NSNotification *)notif;
-- (void)windowDidBecomeKey:(NSNotification *)notif;
-- (void)windowDidBecomeMain:(NSNotification *)notif;
-- (void)windowDidDeminiaturize:(NSNotification *)notif;
-- (void)windowDidMiniaturize:(NSNotification *)notif;
-- (void)windowWillClose:(NSNotification *)notif;
-- (void)anywindowwillclosenotif:(NSNotification *)notif;
-- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender;
-- (void)applicationDidBecomeActive:(NSNotification *)notify;
-- (void)applicationWillResignActive:(NSNotification *)notify;
-- (void)applicationWillHide:(NSNotification *)notify;
-- (void)applicationWillUnhide:(NSNotification *)notify;
-- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client;
-@end
-@implementation FLDelegate
-- (void)windowDidMove:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *window = [nsw getFl_Window];
-  NSPoint pt, pt2; 
-  pt.x = 0;
-  pt.y = [[nsw contentView] frame].size.height;
-  pt2 = [nsw convertBaseToScreen:pt];
-  update_e_xy_and_e_xy_root(nsw);
-  resize_from_system = window;
-  window->position((int)pt2.x, (int)([[nsw screen] frame].size.height - pt2.y));
-  if ([nsw containsGLsubwindow] ) {
-    [nsw display];// redraw window after moving if it contains OpenGL subwindows
-  }
-  fl_unlock_function();
-}
-- (void)windowDidResize:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *window = [nsw getFl_Window];
-  NSRect r = [[nsw contentView] frame];
-  NSPoint pt, pt2; 
-  pt.x = 0;
-  pt.y = [[nsw contentView] frame].size.height;
-  pt2 = [nsw convertBaseToScreen:pt];
-  resize_from_system = window;
-  update_e_xy_and_e_xy_root(nsw);
-  window->resize((int)pt2.x, 
-                 (int)([[nsw screen] frame].size.height - pt2.y),
-		 (int)r.size.width,
-		 (int)r.size.height);
-  fl_unlock_function();
-}
-- (void)windowDidResignKey:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *window = [nsw getFl_Window];
-  /* Fullscreen windows obscure all other windows so we need to return
-     to a "normal" level when the user switches to another window */
-  if (window->fullscreen_active())
-    [nsw setLevel:NSNormalWindowLevel];
-  Fl::handle( FL_UNFOCUS, window);
-  fl_unlock_function();
-}
-- (void)windowDidBecomeKey:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *w = [nsw getFl_Window];
-  /* Restore previous fullscreen level */
-  if (w->fullscreen_active())
-    [nsw setLevel:NSStatusWindowLevel];
-  if ( w->border() || (!w->modal() && !w->tooltip_window()) ) Fl::handle( FL_FOCUS, w);
-  fl_unlock_function();
-}
-- (void)windowDidBecomeMain:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *window = [nsw getFl_Window];
-  Fl::first_window(window);
-  update_e_xy_and_e_xy_root(nsw);
-  fl_unlock_function();
-}
-- (void)windowDidDeminiaturize:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *window = [nsw getFl_Window];
-  Fl::handle(FL_SHOW, window);
-  update_e_xy_and_e_xy_root(nsw);
-  fl_unlock_function();
-}
-- (void)windowDidMiniaturize:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *window = [nsw getFl_Window];
-  Fl::handle(FL_HIDE, window);
-  fl_unlock_function();
-}
-- (void)windowWillClose:(NSNotification *)notif
-{
-  fl_lock_function();
-  Fl_Window *w = Fl::first_window();
-  if (w) {
-    NSWindow *cw = (NSWindow*)Fl_X::i(w)->xid;
-    if ( ![cw isMiniaturized] && ([cw styleMask] & NSTitledWindowMask) ) {
-      if (![cw isKeyWindow]) {	// always make Fl::first_window() the key widow
-	[cw makeKeyAndOrderFront:nil];
-      }
-      if (![cw isMainWindow]) {	// always make Fl::first_window() the main widow
-	[cw makeMainWindow];
-      }
-    }
-  }
-  fl_unlock_function();
-}
-- (void)anywindowwillclosenotif:(NSNotification *)notif
-{
-  // necessary so that after closing a non-FLTK window (e.g., Fl_Native_File_Chooser)
-  // the front window turns key again
-  NSWindow *closing = (NSWindow*)[notif object];
-  if ([closing isMemberOfClass:[FLWindow class]]) return;
-  NSWindow *nsk = [NSApp keyWindow];
-  NSWindow *nsm = [NSApp mainWindow];
-  if ([nsm isMemberOfClass:[FLWindow class]] && nsk == nil) {
-    [nsm makeKeyAndOrderFront:nil];
-  }
-}
-- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender
-{
-  fl_lock_function();
-  NSApplicationTerminateReply reply = NSTerminateNow;
-  while ( Fl_X::first ) {
-    Fl_X *x = Fl_X::first;
-    Fl::handle( FL_CLOSE, x->w );
-    if ( Fl_X::first == x ) {
-      reply = NSTerminateCancel; // FLTK has not closed all windows, so we return to the main program now
-      break;
-    }
-  }
-  fl_unlock_function();
-  return reply;
-}
-/**
- * Cocoa organizes the Z depth of windows on a global priority. FLTK however
- * expects the window manager to organize Z level by application. The trickery
- * below will change Z order during activation and deactivation.
- */
-- (void)applicationDidBecomeActive:(NSNotification *)notify
-{
-  fl_lock_function();
-  Fl_X *x;
-  FLWindow *top = 0, *topModal = 0, *topNonModal = 0;
-  for (x = Fl_X::first;x;x = x->next) {
-    FLWindow *cw = (FLWindow*)x->xid;
-    Fl_Window *win = x->w;
-    if (win && cw) {
-      if (win->modal()) {
-        [cw setLevel:NSModalPanelWindowLevel];
-        if (topModal) 
-          [cw orderWindow:NSWindowBelow relativeTo:[topModal windowNumber]];
-        else
-          topModal = cw;
-      } else if (win->non_modal()) {
-        [cw setLevel:NSFloatingWindowLevel];
-        if (topNonModal) 
-          [cw orderWindow:NSWindowBelow relativeTo:[topNonModal windowNumber]];
-        else
-          topNonModal = cw;
-      } else {
-        if (top) 
-          ;
-        else
-          top = cw;
-      }
-    }
-  }
-  fl_unlock_function();
-}
-- (void)applicationWillResignActive:(NSNotification *)notify
-{
-  fl_lock_function();
-  Fl_X *x;
-  FLWindow *top = 0;
-  // sort in all regular windows
-  for (x = Fl_X::first;x;x = x->next) {
-    FLWindow *cw = (FLWindow*)x->xid;
-    Fl_Window *win = x->w;
-    if (win && cw) {
-      if (win->modal()) {
-      } else if (win->non_modal()) {
-      } else {
-        if (!top) top = cw;
-      }
-    }
-  }
-  // now sort in all modals
-  for (x = Fl_X::first;x;x = x->next) {
-    FLWindow *cw = (FLWindow*)x->xid;
-    Fl_Window *win = x->w;
-    if (win && cw) {
-      if (win->modal()) {
-        [cw setLevel:NSNormalWindowLevel];
-        if (top) [cw orderWindow:NSWindowAbove relativeTo:[top windowNumber]];
-      }
-    }
-  }
-  // finally all non-modals
-  for (x = Fl_X::first;x;x = x->next) {
-    FLWindow *cw = (FLWindow*)x->xid;
-    Fl_Window *win = x->w;
-    if (win && cw) {
-      if (win->non_modal()) {
-        [cw setLevel:NSNormalWindowLevel];
-        if (top) [cw orderWindow:NSWindowAbove relativeTo:[top windowNumber]];
-      }
-    }
-  }
-  fl_unlock_function();
-}
-- (void)applicationWillHide:(NSNotification *)notify
-{
-  fl_lock_function();
-  Fl_X *x;
-  for (x = Fl_X::first;x;x = x->next) {
-    Fl_Window *window = x->w;
-    if ( !window->parent() ) Fl::handle( FL_HIDE, window);
-    }
-  fl_unlock_function();
-}
-- (void)applicationWillUnhide:(NSNotification *)notify
-{
-  fl_lock_function();
-  Fl_X *x;
-  for (x = Fl_X::first;x;x = x->next) {
-    Fl_Window *w = x->w;
-    if ( !w->parent() ) {
-      if ( w->border() || (!w->modal() && !w->tooltip_window()) ) Fl::handle( FL_FOCUS, w);
-      Fl::handle( FL_SHOW, w);
-      }
-  }
-  fl_unlock_function();
-}
-- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client
-{
-  if (fl_mac_os_version < 100600) {
-    static FLTextView *view = nil;
-    if (!view) {
-      NSRect rect={{0,0},{20,20}};
-      view = [[FLTextView alloc] initWithFrame:rect];
-    }
-    return view;
-  }
-  return nil;
-}
-@end
-
-static void clipboard_check(void);
-
-@implementation FLApplication
-+ (void)sendEvent:(NSEvent *)theEvent
-{
-  // update clipboard status
-  clipboard_check();
-  NSEventType type = [theEvent type];  
-  if (type == NSLeftMouseDown) {
-    fl_lock_function();
-    Fl_Window *grab = Fl::grab();
-    if (grab) {
-      FLWindow *win = (FLWindow *)[theEvent window];
-      if ( [win isKindOfClass:[FLWindow class]] && grab != [win getFl_Window]) {
-	// a click event out of a menu window, so we should close this menu
-	// done here to catch also clicks on window title bar/resize box 
-	cocoaMouseHandler(theEvent);
-      }
-    }
-    fl_unlock_function();
-  } else if (type == NSApplicationDefined) {
-    if ([theEvent subtype] == FLTKDataReadyEvent) {
-      processFLTKEvent();
-    }
-    return;
-  } else if (type == NSKeyUp) {
-    // The default sendEvent turns key downs into performKeyEquivalent when
-    // modifiers are down, but swallows the key up if the modifiers include
-    // command.  This one makes all modifiers consistent by always sending key ups.
-    // FLView treats performKeyEquivalent to keyDown, but performKeyEquivalent is
-    // still needed for the system menu.
-    [[NSApp keyWindow] sendEvent:theEvent];
-    return;
-    }
-  [NSApp sendEvent:theEvent]; 
-}
-@end
-
-static FLDelegate *mydelegate;
-
-void fl_open_display() {
-  static char beenHereDoneThat = 0;
-  if ( !beenHereDoneThat ) {
-    beenHereDoneThat = 1;
-
-    BOOL need_new_nsapp = (NSApp == nil);
-    if (need_new_nsapp) [NSApplication sharedApplication];
-    NSAutoreleasePool *localPool;
-    localPool = [[NSAutoreleasePool alloc] init]; // never released
-    mydelegate = [[FLDelegate alloc] init];
-    [NSApp setDelegate:mydelegate];
-    if (need_new_nsapp) [NSApp finishLaunching];
-
-    // empty the event queue but keep system events for drag&drop of files at launch
-    NSEvent *ign_event;
-    do ign_event = [NSApp nextEventMatchingMask:(NSAnyEventMask & ~NSSystemDefinedMask)
-					untilDate:[NSDate dateWithTimeIntervalSinceNow:0] 
-					   inMode:NSDefaultRunLoopMode 
-					  dequeue:YES];
-    while (ign_event);
-    
-    // bring the application into foreground without a 'CARB' resource
-    Boolean same_psn;
-    ProcessSerialNumber cur_psn, front_psn;
-    if ( !GetCurrentProcess( &cur_psn ) && !GetFrontProcess( &front_psn ) &&
-         !SameProcess( &front_psn, &cur_psn, &same_psn ) && !same_psn ) {
-      // only transform the application type for unbundled apps
-      CFBundleRef bundle = CFBundleGetMainBundle();
-      if ( bundle ) {
-      	FSRef execFs;
-      	CFURLRef execUrl = CFBundleCopyExecutableURL( bundle );
-      	CFURLGetFSRef( execUrl, &execFs );
-        
-      	FSRef bundleFs;
-      	GetProcessBundleLocation( &cur_psn, &bundleFs );
-        
-      	if ( !FSCompareFSRefs( &execFs, &bundleFs ) )
-          bundle = NULL;
-        
-        CFRelease(execUrl);
-      }
-            
-      if ( !bundle )
-      {
-        // Earlier versions of this code tried to use weak linking, however it
-        // appears that this does not work on 10.2.  Since 10.3 and higher provide
-        // both TransformProcessType and CPSEnableForegroundOperation, the following
-        // conditional code compiled on 10.2 will still work on newer releases...
-        OSErr err;
-#if __LP64__
-        err = TransformProcessType(&cur_psn, kProcessTransformToForegroundApplication);
-#else
-        
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
-        if (TransformProcessType != NULL) {
-          err = TransformProcessType(&cur_psn, kProcessTransformToForegroundApplication);
-        } else
-#endif // MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
-          err = CPSEnableForegroundOperation(&cur_psn, 0x03, 0x3C, 0x2C, 0x1103);
-#endif // __LP64__
-        if (err == noErr) {
-          SetFrontProcess( &cur_psn );
-        }
-      }
-    }
-    if (![NSApp servicesMenu]) createAppleMenu();
-    fl_system_menu = [NSApp mainMenu];
-    
-    [[NSNotificationCenter defaultCenter] addObserver:mydelegate 
-	       selector:@selector(anywindowwillclosenotif:) 
-		   name:NSWindowWillCloseNotification 
-		 object:nil];
-  }
-}
-
-
-/*
- * get rid of allocated resources
- */
-void fl_close_display() {
-}
-
-
-// Gets the border sizes and the titlebar size
-static void get_window_frame_sizes(int &bx, int &by, int &bt) {
-  static bool first = true;
-  static int top, left, bottom;
-  if (first) {
-    first = false;
-    if (NSApp == nil) fl_open_display();
-    NSRect inside = { {20,20}, {100,100} };
-    NSRect outside = [NSWindow  frameRectForContentRect:inside styleMask:NSTitledWindowMask];
-    left = int(outside.origin.x - inside.origin.x);
-    bottom = int(outside.origin.y - inside.origin.y);
-    top = int(outside.size.height - inside.size.height) - bottom;
-    }
-  bx = left;
-  by = bottom;
-  bt = top;
-}
-
-/*
- * smallest x ccordinate in screen space
- */
-int Fl::x() {
-  return int([[NSScreen mainScreen] visibleFrame].origin.x);
-}
-
-
-/*
- * smallest y coordinate in screen space
- */
-int Fl::y() {
-  NSRect all = [[NSScreen mainScreen] frame];
-  NSRect visible = [[NSScreen mainScreen] visibleFrame];
-  return int(all.size.height - (visible.origin.y + visible.size.height));
-}
-
-
-/*
- * screen width
- */
-int Fl::w() {
-  return int([[NSScreen mainScreen] visibleFrame].size.width);
-}
-
-
-/*
- * screen height
- */
-int Fl::h() {
-  return int([[NSScreen mainScreen] visibleFrame].size.height);
-}
-
-
-/*
- * get the current mouse pointer world coordinates
- */
-void Fl::get_mouse(int &x, int &y) 
-{
-  fl_open_display();
-  NSPoint pt = [NSEvent mouseLocation];
-  x = int(pt.x);
-  y = int([[NSScreen mainScreen] frame].size.height - pt.y);
-}
-
-
-/*
- * Initialize the given port for redraw and call the window's flush() to actually draw the content
- */ 
-void Fl_X::flush()
-{
-  w->flush();
-  if (fl_gc) CGContextFlush(fl_gc);
-}
-
-/*
- * Gets called when a window is created, resized, or deminiaturized
- */    
-static void handleUpdateEvent( Fl_Window *window ) 
-{
-  if ( !window ) return;
-  Fl_X *i = Fl_X::i( window );
-  i->wait_for_expose = 0;
-
-  if ( i->region ) {
-    XDestroyRegion(i->region);
-    i->region = 0;
-  }
-  
-  for ( Fl_X *cx = i->xidChildren; cx; cx = cx->xidNext ) {
-    if ( cx->region ) {
-      XDestroyRegion(cx->region);
-      cx->region = 0;
-    }
-    cx->w->clear_damage(FL_DAMAGE_ALL);
-    cx->flush();
-    cx->w->clear_damage();
-  }
-  window->clear_damage(FL_DAMAGE_ALL);
-  i->flush();
-  window->clear_damage();
-}     
-
-
-int Fl_X::fake_X_wm(const Fl_Window* w,int &X,int &Y, int &bt,int &bx, int &by) {
-  int W, H, xoff, yoff, dx, dy;
-  int ret = bx = by = bt = 0;
-  if (w->border() && !w->parent()) {
-    if (w->maxw != w->minw || w->maxh != w->minh) {
-      ret = 2;
-    } else {
-      ret = 1;
-    }
-    get_window_frame_sizes(bx, by, bt);
-  }
-  // The coordinates of the whole window, including non-client area
-  xoff = bx;
-  yoff = by + bt;
-  dx = 2*bx;
-  dy = 2*by + bt;
-  X = w->x()-xoff;
-  Y = w->y()-yoff;
-  W = w->w()+dx;
-  H = w->h()+dy;
-  
-  // Proceed to positioning the window fully inside the screen, if possible
-  
-  // let's get a little elaborate here. Mac OS X puts a lot of stuff on the desk
-  // that we want to avoid when positioning our window, namely the Dock and the
-  // top menu bar (and even more stuff in 10.4 Tiger). So we will go through the
-  // list of all available screens and find the one that this window is most
-  // likely to go to, and then reposition it to fit withing the 'good' area.
-  //  Rect r;
-  // find the screen, that the center of this window will fall into
-  int R = X+W, B = Y+H; // right and bottom
-  int cx = (X+R)/2, cy = (Y+B)/2; // center of window;
-  NSScreen *gd = NULL;
-  NSArray *a = [NSScreen screens]; int count = (int)[a count]; NSRect r; int i;
-  for( i = 0; i < count; i++) {
-    r = [[a objectAtIndex:i] frame];
-    cy = int(r.size.height - cy);
-    if (   cx >= r.origin.x && cx <= r.origin.x + r.size.width
-        && cy >= r.origin.y && cy <= r.origin.y + r.size.height)
-      break;
-  }
-  if (i < count) gd = [a objectAtIndex:i];
-  
-  // if the center doesn't fall on a screen, try the top left
-  if (!gd) {
-    for( i = 0; i < count; i++) {
-      r = [[a objectAtIndex:i] frame];
-      if (    X >= r.origin.x && X <= r.origin.x + r.size.width
-          && r.size.height - Y >= r.origin.y  && r.size.height - Y <= r.origin.y + r.size.height)
-        break;
-    }
-    if (i < count) gd = [a objectAtIndex:i];
-  }
-  // if that doesn't fall on a screen, try the top right
-  if (!gd) {
-    for( i = 0; i < count; i++) {
-      r = [[a objectAtIndex:i] frame];
-      if (    R >= r.origin.x && R <= r.origin.x + r.size.width
-          && r.size.height - Y >= r.origin.y  && r.size.height - Y <= r.origin.y + r.size.height)
-        break;
-    }
-    if (i < count) gd = [a objectAtIndex:i];
-  }
-  // if that doesn't fall on a screen, try the bottom left
-  if (!gd) {
-    for( i = 0; i < count; i++) {
-      r = [[a objectAtIndex:i] frame];
-      if (    X >= r.origin.x && X <= r.origin.x + r.size.width
-          && Y-H >= r.origin.y  && Y-H <= r.origin.y + r.size.height)
-        break;
-    }
-    if (i < count) gd = [a objectAtIndex:i];
-  }
-  // last resort, try the bottom right
-  if (!gd) {
-    for( i = 0; i < count; i++) {
-      r = [[a objectAtIndex:i] frame];
-      if (    R >= r.origin.x && R <= r.origin.x + r.size.width
-          && Y-H >= r.origin.y  && Y-H <= r.origin.y + r.size.height)
-        break;
-    }
-    if (i < count) gd = [a objectAtIndex:i];
-  }
-  // if we still have not found a screen, we will use the main
-  // screen, the one that has the application menu bar.
-  if (!gd) gd = [a objectAtIndex:0];
-  if (gd) {
-    r = [gd visibleFrame];
-    int sh = int([gd frame].size.height);
-    if ( R > r.origin.x + r.size.width ) X -= int(R - (r.origin.x + r.size.width));
-    if ( B > sh - r.origin.y ) Y -= int(B - (sh - r.origin.y));
-    if ( X < r.origin.x ) X = int(r.origin.x);
-    if ( Y < sh - (r.origin.y + r.size.height) ) Y = int(sh - (r.origin.y + r.size.height));
-  }
-  
-  // Return the client area's top left corner in (X,Y)
-  X+=xoff;
-  Y+=yoff;
-  
-  return ret;
-}
-
-
-Fl_Window *fl_dnd_target_window = 0;
-
-static void  q_set_window_title(NSWindow *nsw, const char * name, const char *mininame) {
-  CFStringRef title = CFStringCreateWithCString(NULL, (name ? name : ""), kCFStringEncodingUTF8);
-  if(!title) { // fallback when name contains malformed UTF-8
-    int l = strlen(name);
-    unsigned short* utf16 = new unsigned short[l + 1];
-    l = fl_utf8toUtf16(name, l, utf16, l + 1);
-    title = CFStringCreateWithCharacters(NULL, utf16, l);
-    delete[] utf16;
-    }
-  [nsw setTitle:(NSString*)title];
-  CFRelease(title);
-  if (mininame && strlen(mininame)) {
-    CFStringRef minititle = CFStringCreateWithCString(NULL, mininame, kCFStringEncodingUTF8);
-    if (minititle) {
-      [nsw setMiniwindowTitle:(NSString*)minititle];
-      CFRelease(minititle);
-    }
-  }
-}
-
-
-@interface FLView : NSView <NSTextInput> {
-  int next_compose_length;
-  bool in_key_event;
-}
-+ (void)prepareEtext:(NSString*)aString;
-- (id)init;
-- (void)drawRect:(NSRect)rect;
-- (BOOL)acceptsFirstResponder;
-- (BOOL)acceptsFirstMouse:(NSEvent*)theEvent;
-- (void)resetCursorRects;
-- (BOOL)performKeyEquivalent:(NSEvent*)theEvent;
-- (void)mouseUp:(NSEvent *)theEvent;
-- (void)rightMouseUp:(NSEvent *)theEvent;
-- (void)otherMouseUp:(NSEvent *)theEvent;
-- (void)mouseDown:(NSEvent *)theEvent;
-- (void)rightMouseDown:(NSEvent *)theEvent;
-- (void)otherMouseDown:(NSEvent *)theEvent;
-- (void)mouseMoved:(NSEvent *)theEvent;
-- (void)mouseDragged:(NSEvent *)theEvent;
-- (void)rightMouseDragged:(NSEvent *)theEvent;
-- (void)otherMouseDragged:(NSEvent *)theEvent;
-- (void)scrollWheel:(NSEvent *)theEvent;
-+ (NSString *)keyTranslate:(UInt16)keyCode withModifierFlags:(UInt32)modifierFlags;
-- (BOOL)handleKeyDown:(NSEvent *)theEvent;
-- (void)keyDown:(NSEvent *)theEvent;
-- (void)keyUp:(NSEvent *)theEvent;
-- (void)flagsChanged:(NSEvent *)theEvent;
-- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender;
-- (NSDragOperation)draggingUpdated:(id < NSDraggingInfo >)sender;
-- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender;
-- (void)draggingExited:(id < NSDraggingInfo >)sender;
-- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal;
-@end
-
-@implementation FLView
-- (id)init
-{
-  self = [super init];
-  if (self) {
-    next_compose_length = -1;
-    in_key_event = false;
-    }
-  return self;
-}
-- (void)drawRect:(NSRect)rect
-{
-  fl_lock_function();
-  FLWindow *cw = (FLWindow*)[self window];
-  Fl_Window *w = [cw getFl_Window];
-  handleUpdateEvent(w);
-  fl_unlock_function();
-}
-
-- (BOOL)acceptsFirstResponder
-{   
-  return YES;
-}
-- (BOOL)performKeyEquivalent:(NSEvent*)theEvent
-{   
-  //NSLog(@"performKeyEquivalent:");
-  return [self handleKeyDown:theEvent];
-}
-- (BOOL)acceptsFirstMouse:(NSEvent*)theEvent
-{   
-  Fl_Window *w = [(FLWindow*)[theEvent window] getFl_Window];
-  Fl_Window *first = Fl::first_window();
-  return (first == w || !first->modal());
-}
-- (void)resetCursorRects {
-  Fl_Window *w = [(FLWindow*)[self window] getFl_Window];
-  Fl_X *i = Fl_X::i(w);
-  // We have to have at least one cursor rect for invalidateCursorRectsForView
-  // to work, hence the "else" clause.
-  if (i->cursor)
-    [self addCursorRect:[self visibleRect] cursor:(NSCursor*)i->cursor];
-  else
-    [self addCursorRect:[self visibleRect] cursor:[NSCursor arrowCursor]];
-}
-- (void)mouseUp:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)rightMouseUp:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)otherMouseUp:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)mouseDown:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)rightMouseDown:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)otherMouseDown:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)mouseMoved:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)mouseDragged:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)rightMouseDragged:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)otherMouseDragged:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)scrollWheel:(NSEvent *)theEvent {
-  cocoaMouseWheelHandler(theEvent);
-}
-+ (NSString *)keyTranslate:(UInt16)keyCode withModifierFlags:(UInt32)modifierFlags {
-  const UCKeyboardLayout *layout;
-  OSStatus err;
-
-  layout = NULL;
-
-#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5)
-  TISInputSourceRef keyboard;
-  CFDataRef uchr;
-
-  keyboard = TISCopyCurrentKeyboardInputSource();
-  uchr = (CFDataRef)TISGetInputSourceProperty(keyboard,
-                                              kTISPropertyUnicodeKeyLayoutData);
-  if (uchr == NULL)
-    return nil;
-
-  layout = (const UCKeyboardLayout*)CFDataGetBytePtr(uchr);
-#else
-  KeyboardLayoutRef old_layout;
-  int kind;
-
-  err = KLGetCurrentKeyboardLayout(&old_layout);
-  if (err != noErr)
-    return nil;
-
-  err = KLGetKeyboardLayoutProperty(old_layout, kKLKind,
-                                    (const void**)&kind);
-  if (err != noErr)
-    return nil;
-
-  // Old, crufty layout format?
-  if (kind == kKLKCHRKind) {
-    void *kchr_layout;
-
-    UInt32 chars, state;
-    char buf[3];
-
-    unichar result[16];
-    ByteCount in_len, out_len;
-
-    err = KLGetKeyboardLayoutProperty(old_layout, kKLKCHRData,
-                                      (const void**)&kchr_layout);
-    if (err != noErr)
-      return nil;
-
-    state = 0;
-
-    keyCode &= 0x7f;
-    modifierFlags &= 0xff00;
-
-    chars = KeyTranslate(kchr_layout, keyCode | modifierFlags, &state);
-
-    buf[0] = (chars >> 16) & 0xff;
-    buf[1] = chars & 0xff;
-    buf[2] = '\0';
-
-    if (buf[0] == '\0') {
-      buf[0] = buf[1];
-      buf[1] = '\0';
-    }
-
-    // The data is now in some layout specific encoding. Need to convert
-    // this to unicode.
-
-    ScriptCode script;
-    TextEncoding encoding;
-    TECObjectRef converter;
-
-    script = (ScriptCode)GetScriptManagerVariable(smKeyScript);
-
-    err = UpgradeScriptInfoToTextEncoding(script, kTextLanguageDontCare,
-                                          kTextRegionDontCare, NULL,
-                                          &encoding);
-    if (err != noErr)
-      return nil;
-
-    err = TECCreateConverter(&converter, encoding, kTextEncodingUnicodeV4_0);
-    if (err != noErr)
-      return nil;
-
-    in_len = strlen(buf);
-    out_len = sizeof(result);
-
-    err = TECConvertText(converter, (ConstTextPtr)buf, in_len, &in_len,
-                         (TextPtr)result, out_len, &out_len);
-
-    TECDisposeConverter(converter);
-
-    if (err != noErr)
-      return nil;
-
-    return [NSString stringWithCharacters:result
-                     length:(out_len / sizeof(unichar))];
-  }
-
-  if ((kind != kKLKCHRuchrKind) && (kind != kKLuchrKind))
-    return nil;
-
-  err = KLGetKeyboardLayoutProperty(old_layout, kKLuchrData,
-                                    (const void**)&layout);
-  if (err != noErr)
-    return nil;
-#endif
- 
-  if (layout == NULL)
-    return nil;
-
-  UInt32 dead_state;
-  UniCharCount max_len, actual_len;
-  UniChar string[255];
-
-  dead_state = 0;
-  max_len = sizeof(string)/sizeof(*string);
-
-  modifierFlags = (modifierFlags >> 8) & 0xff;
-
-  err = UCKeyTranslate(layout, keyCode, kUCKeyActionDown, modifierFlags,
-                       LMGetKbdType(), 0, &dead_state, max_len, &actual_len,
-                       string);
-  if (err != noErr)
-    return nil;
-
-  return [NSString stringWithCharacters:string length:actual_len];
-}
-- (BOOL)handleKeyDown:(NSEvent *)theEvent {
-  //NSLog(@"handleKeyDown");
-  fl_lock_function();
-
-  Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-  Fl::first_window(window);
-
-  next_compose_length = -1;
-  // First let's process the raw key press
-  cocoaKeyboardHandler(theEvent);
-
-  int no_text_key = false;
-  static const int notext[] = { // keys that don't emit text
-    FL_BackSpace, FL_Print, FL_Scroll_Lock, FL_Pause,
-    FL_Insert, FL_Home, FL_Page_Up, FL_Delete, FL_End, FL_Page_Down,
-    FL_Left, FL_Up, FL_Right, FL_Down, 
-    FL_Menu, FL_Num_Lock, FL_Help 
-  };
-  static const int count = sizeof(notext)/sizeof(int);
-  if (Fl::e_keysym > FL_F && Fl::e_keysym <= FL_F_Last) no_text_key = true;
-  else for (int i=0; i < count; i++) {
-    if (notext[i] == Fl::e_keysym) {
-      no_text_key = true;
-      break;
-    }
-  }
-  if (!no_text_key) {
-    // The simple keyboard model will ignore insertText, so we need to grab
-    // the symbol directly from the event. Note that we still use setMarkedText.
-    if (use_simple_keyboard) {
-      NSString *simple_chars;
-      UInt32 modifiers;
-
-      // We want a "normal" symbol out of the event, which basically means
-      // we only respect the shift and alt/altgr modifiers. Cocoa can help
-      // us if we only wanted shift, but as we also want alt/altgr, we'll
-      // have to do some lookup ourselves. This matches our behaviour on
-      // other platforms.
-
-      modifiers = 0;
-      if ([theEvent modifierFlags] & NSAlphaShiftKeyMask)
-        modifiers |= alphaLock;
-      if ([theEvent modifierFlags] & NSShiftKeyMask)
-        modifiers |= shiftKey;
-      if ([theEvent modifierFlags] & NSAlternateKeyMask)
-        modifiers |= optionKey;
-
-      simple_chars = [FLView keyTranslate:[theEvent keyCode]
-                             withModifierFlags:modifiers];
-      if (simple_chars == nil) {
-        // Something went wrong. Fall back to what Cocoa gave us...
-        simple_chars = [theEvent charactersIgnoringModifiers];
-      }
-
-      [FLView prepareEtext:simple_chars];
-    }
-
-    // Then we can let the OS have a stab at it and see if it thinks it
-    // should result in some text
-
-    // Don't send cmd-<key> to interpretKeyEvents because it beeps.
-    if (!(Fl::e_state & FL_META)) {
-      NSText *edit = [[theEvent window]  fieldEditor:YES forObject:nil];
-      in_key_event = true;
-      [edit interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
-      in_key_event = false;
-    }
-  }
-  //NSLog(@"to text=%@ l=%d", [NSString stringWithUTF8String:Fl::e_text], Fl::e_length);
-  int handled = Fl::handle(FL_KEYDOWN, window);
-  // We have to update this after Fl::handle as it says what to do on the
-  // _next_ input
-  if (next_compose_length != -1)
-    Fl::compose_state = next_compose_length;
-
-  fl_unlock_function();
-  return (handled ? YES : NO);
-}
-- (void)keyDown:(NSEvent *)theEvent {
-  //NSLog(@"keyDown: ");
-  [self handleKeyDown:theEvent];
-}
-- (void)keyUp:(NSEvent *)theEvent {
-  //NSLog(@"keyUp: ");
-  fl_lock_function();
-  Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-  Fl::first_window(window);
-  cocoaKeyboardHandler(theEvent);
-  NSString *s = [theEvent characters];
-  if ([s length] >= 1) [FLView prepareEtext:[s substringToIndex:1]];
-  Fl::handle(FL_KEYUP,window);
-  fl_unlock_function();
-}
-- (void)flagsChanged:(NSEvent *)theEvent {
-  //NSLog(@"flagsChanged: ");
-  fl_lock_function();
-  static UInt32 prevMods = 0;
-  NSUInteger mods = [theEvent modifierFlags];
-  Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-  UInt32 tMods = prevMods ^ mods;
-  int sendEvent = 0;
-  if ( tMods )
-  {
-    unsigned short keycode = [theEvent keyCode];
-    Fl::e_keysym = Fl::e_original_keysym = macKeyLookUp[keycode & 0x7f];
-    if ( Fl::e_keysym ) 
-      sendEvent = ( prevMods<mods ) ? FL_KEYBOARD : FL_KEYUP;
-    Fl::e_length = 0;
-    Fl::e_text = (char*)"";
-    prevMods = mods;
-  }
-  mods_to_e_state( mods );
-  while (window->parent()) window = window->window();
-  if (sendEvent) Fl::handle(sendEvent,window);
-  fl_unlock_function();
-}
-- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender
-{
-  fl_lock_function();
-  Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-  update_e_xy_and_e_xy_root([self window]);
-  fl_dnd_target_window = target;
-  int ret = Fl::handle( FL_DND_ENTER, target );
-  breakMacEventLoop();
-  fl_unlock_function();
-  return ret ? NSDragOperationCopy : NSDragOperationNone;
-}
-- (NSDragOperation)draggingUpdated:(id < NSDraggingInfo >)sender
-{
-  fl_lock_function();
-  Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-  update_e_xy_and_e_xy_root([self window]);
-  fl_dnd_target_window = target;
-  int ret = Fl::handle( FL_DND_DRAG, target );
-  breakMacEventLoop();
-  fl_unlock_function();
-  return ret ? NSDragOperationCopy : NSDragOperationNone;
-}
-- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender 
-{
-  static char *DragData = NULL;
-  fl_lock_function();
-  Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-  if ( !Fl::handle( FL_DND_RELEASE, target ) ) { 
-    breakMacEventLoop();
-    fl_unlock_function();
-    return NO;
-  }
-  NSPasteboard *pboard;
-  // NSDragOperation sourceDragMask;
-  // sourceDragMask = [sender draggingSourceOperationMask];
-  pboard = [sender draggingPasteboard];
-  update_e_xy_and_e_xy_root([self window]);
-  if (DragData) { free(DragData); DragData = NULL; }
-  if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
-    CFArrayRef files = (CFArrayRef)[pboard propertyListForType:NSFilenamesPboardType];
-    CFStringRef all = CFStringCreateByCombiningStrings(NULL, files, CFSTR("\n"));
-    int l = CFStringGetMaximumSizeForEncoding(CFStringGetLength(all), kCFStringEncodingUTF8);
-    DragData = (char *)malloc(l + 1);
-    CFStringGetCString(all, DragData, l + 1, kCFStringEncodingUTF8);
-    CFRelease(all);
-  }
-  else if ( [[pboard types] containsObject:NSStringPboardType] ) {
-    NSData *data = [pboard dataForType:NSStringPboardType];
-    DragData = (char *)malloc([data length] + 1);
-    [data getBytes:DragData];
-    DragData[[data length]] = 0;
-    convert_crlf(DragData, strlen(DragData));
-  }
-  else {
-    breakMacEventLoop();
-    fl_unlock_function();
-    return NO;
-  }
-  Fl::e_text = DragData;
-  Fl::e_length = strlen(DragData);
-  int old_event = Fl::e_number;
-  Fl::belowmouse()->handle(Fl::e_number = FL_PASTE);
-  Fl::e_number = old_event;
-  if (DragData) { free(DragData); DragData = NULL; }
-  Fl::e_text = NULL;
-  Fl::e_length = 0;
-  fl_dnd_target_window = NULL;
-  breakMacEventLoop();
-  fl_unlock_function();
-  return YES;
-}
-- (void)draggingExited:(id < NSDraggingInfo >)sender
-{
-  fl_lock_function();
-  if ( fl_dnd_target_window ) {
-    Fl::handle( FL_DND_LEAVE, fl_dnd_target_window );
-    fl_dnd_target_window = 0;
-  }
-  fl_unlock_function();
-}
-- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal
-{
-  return NSDragOperationGeneric;
-}
-
-+ (void)prepareEtext:(NSString*)aString {
-  // fills Fl::e_text with UTF-8 encoded aString using an adequate memory allocation
-  static char *received_utf8 = NULL;
-  static int lreceived = 0;
-  char *p = (char*)[aString UTF8String];
-  int l = strlen(p);
-  if (l > 0) {
-    if (lreceived == 0) {
-      received_utf8 = (char*)malloc(l + 1);
-      lreceived = l;
-    }
-    else if (l > lreceived) {
-      received_utf8 = (char*)realloc(received_utf8, l + 1);
-      lreceived = l;
-    }
-    strcpy(received_utf8, p);
-    Fl::e_text = received_utf8;
-  }
-  Fl::e_length = l;
-}
-
-// These functions implement text input.
-// Only two-stroke character composition works at this point.
-// Needs much elaboration to fully support CJK text input,
-// but this is the way to go.
-- (void)doCommandBySelector:(SEL)aSelector {
-}
-
-- (void)insertText:(id)aString {
-  NSString *received;
-  if ([aString isKindOfClass:[NSAttributedString class]]) {
-    received = [(NSAttributedString*)aString string];
-  } else {
-    received = (NSString*)aString;
-  }
-  //NSLog(@"insertText: received=%@",received);
-
-  if (!in_key_event) fl_lock_function();
-
-  // Simple keyboard widgets do not want these side channel inputs.
-  if (use_simple_keyboard)
-    goto end;
-
-  [FLView prepareEtext:received];
-
-  // We can get called outside of key events (e.g. from the character
-  // palette). We need to fake our own key event at that point.
-  if (!in_key_event) {
-    Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-    Fl::e_keysym = Fl::e_original_keysym = 0;
-    Fl::handle(FL_KEYDOWN, target);
-    // for some reason, the window does not redraw until the next mouse move or button push
-    // sending a 'redraw()' or 'awake()' does not solve the issue!
-    Fl::flush();
-  }
-
-end:
-  if (!in_key_event) fl_unlock_function();
-}
-
-- (void)setMarkedText:(id)aString selectedRange:(NSRange)newSelection  {
-  NSString *received, *current, *aggregate;
-  if (newSelection.location == 0) {
-    [self unmarkText];
-    return;
-  }
-  if ([aString isKindOfClass:[NSAttributedString class]]) {
-    received = [(NSAttributedString*)aString string];
-  } else {
-    received = (NSString*)aString;
-  }
-  //NSLog(@"setMarkedText: %@ %d %d",received,newSelection.location,newSelection.length);
-
-  fl_lock_function();
-
-  // Simple keyboard widgets generally do not want these side channel
-  // inputs, but we have no other way of getting dead keys so we make
-  // an exception in that case.
-  if (use_simple_keyboard) {
-    if (in_key_event && (Fl::e_length == 0)) {
-      [FLView prepareEtext:received];
-
-      Fl::e_text = (char*)cocoaDead2FLTK(Fl::e_text);
-      Fl::e_length = strlen(Fl::e_text);
-    }
-    goto end;
-  }
-
-  // This code creates the OS X behaviour of seeing dead keys as things
-  // are being composed.
-  //
-  // Note: The concatenation thing is because of how OS X deals with
-  //       invalid sequences. At that point it will spit out one call
-  //       to insertText with the now aborted sequence, and one new
-  //       call to setMarkedText with the new sequence. Since we want
-  //       both to be visible, we need to concatenate.
-  next_compose_length = newSelection.location;
-  current = [NSString stringWithUTF8String:Fl::e_text];
-  aggregate = [current stringByAppendingString:received];
-
-  [FLView prepareEtext:aggregate];
-  //NSLog(@"Fl::e_text=%@ Fl::e_length=%d next_compose_length=%d", aggregate, Fl::e_length, next_compose_length);
-
-  // We can get called outside of key events (e.g. from the character
-  // palette). We need to fake our own key event at that point.
-  if (!in_key_event) {
-    Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-    Fl::e_keysym = Fl::e_original_keysym = 0;
-    Fl::handle(FL_KEYDOWN, target);
-  }
-
-end:
-  fl_unlock_function();
-}
-
-- (void)unmarkText {
-  fl_lock_function();
-  Fl::compose_state = 0;
-  fl_unlock_function();
-  //NSLog(@"unmarkText");
-}
-
-- (NSRange)selectedRange {
-  return NSMakeRange(NSNotFound, 0);
-}
-
-- (NSRange)markedRange {
-  //NSLog(@"markedRange ?");
-  return NSMakeRange(NSNotFound, Fl::compose_state);
-}
-
-- (BOOL)hasMarkedText {
-  //NSLog(@"hasMarkedText %s", Fl::compose_state > 0?"YES":"NO");
-  return (Fl::compose_state > 0);
-}
-
-- (NSAttributedString *)attributedSubstringFromRange:(NSRange)aRange {
-  //NSLog(@"attributedSubstringFromRange: %d %d",aRange.location,aRange.length);
-  return nil;
-}
-
-- (NSArray *)validAttributesForMarkedText {
-  return nil;
-}
-
-- (NSRect)firstRectForCharacterRange:(NSRange)aRange {
-  NSRect glyphRect;
-  fl_lock_function();
-  Fl_Widget *focus = Fl::focus();
-  Fl_Window *wfocus = focus->window();
-  while (wfocus->window()) wfocus = wfocus->window();
-  glyphRect.size.width = 0;
-  
-  if (dynamic_cast<Fl_Text_Display*>(focus) != NULL) {
-    int x, y;
-    Fl_Text_Display *current = (Fl_Text_Display*)focus;
-    current->position_to_xy( current->insert_position(), &x, &y );
-    glyphRect.origin.x = (CGFloat)x;
-    glyphRect.origin.y = (CGFloat)y + current->textsize();
-    glyphRect.size.height = current->textsize();
-  } else {
-    glyphRect.origin.x = focus->x();
-    glyphRect.origin.y = focus->y() + focus->h();
-    glyphRect.size.height = 12;
-  }
-  // Convert the rect to screen coordinates
-  glyphRect.origin.y = wfocus->h() - glyphRect.origin.y;
-  glyphRect.origin = [[self window] convertBaseToScreen:glyphRect.origin];
-  fl_unlock_function();
-  return glyphRect;
-}
-
-- (NSUInteger)characterIndexForPoint:(NSPoint)aPoint {
-  return 0;
-}
-
-- (NSInteger)conversationIdentifier {
-  return (NSInteger)self;
-}
-
-@end
-
-void fullscreen_x(Fl_Window *w) {
-  w->_set_fullscreen();
-  /* On OS X < 10.6, it is necessary to recreate the window. This is done
-     with hide+show. */
-  w->hide();
-  w->show();
-  Fl::handle(FL_FULLSCREEN, w);
-}
-
-void fullscreen_off_x(Fl_Window *w, int X, int Y, int W, int H) {
-  w->_clear_fullscreen();
-  w->hide();
-  w->resize(X, Y, W, H);
-  w->show();
-  Fl::handle(FL_FULLSCREEN, w);
-}
-
-/*
- * go ahead, create that (sub)window
- */
-void Fl_X::make(Fl_Window* w)
-{
-  static int xyPos = 100;
-  if ( w->parent() ) {		// create a subwindow
-    Fl_Group::current(0);
-    // our subwindow needs this structure to know about its clipping. 
-    Fl_X* x = new Fl_X;
-    x->subwindow = true;
-    x->other_xid = 0;
-    x->region = 0;
-    x->subRegion = 0;
-    x->cursor = NULL;
-    x->gc = 0;			// stay 0 for Quickdraw; fill with CGContext for Quartz
-    Fl_Window *win = w->window();
-    Fl_X *xo = Fl_X::i(win);
-    if (xo) {
-      x->xidNext = xo->xidChildren;
-      x->xidChildren = 0L;
-      xo->xidChildren = x;
-      x->xid = win->i->xid;
-      x->w = w; w->i = x;
-      x->wait_for_expose = 0;
-      {
-	Fl_X *z = xo->next;	// we don't want a subwindow in Fl_X::first
-	xo->next = x;
-	x->next = z;
-      }
-      int old_event = Fl::e_number;
-      w->handle(Fl::e_number = FL_SHOW);
-      Fl::e_number = old_event;
-      w->redraw();		// force draw to happen
-    }
-    if (w->as_gl_window()) { // if creating a sub-GL-window
-      while (win->window()) win = win->window();
-      [(FLWindow*)Fl_X::i(win)->xid setContainsGLsubwindow:YES];
-    }
-    fl_show_iconic = 0;
-  }
-  else {			// create a desktop window
-    Fl_Group::current(0);
-    fl_open_display();
-    NSInteger winlevel = NSNormalWindowLevel;
-    NSUInteger winstyle;
-    if (w->border()) winstyle = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask;
-    else winstyle = NSBorderlessWindowMask;
-    int xp = w->x();
-    int yp = w->y();
-    int wp = w->w();
-    int hp = w->h();
-    if (w->size_range_set) {
-      if ( w->minh != w->maxh || w->minw != w->maxw) {
-        winstyle |= NSResizableWindowMask;
-      }
-    } else {
-      if (w->resizable()) {
-        Fl_Widget *o = w->resizable();
-        int minw = o->w(); if (minw > 100) minw = 100;
-        int minh = o->h(); if (minh > 100) minh = 100;
-        w->size_range(w->w() - o->w() + minw, w->h() - o->h() + minh, 0, 0);
-	winstyle |= NSResizableWindowMask;
-      } else {
-        w->size_range(w->w(), w->h(), w->w(), w->h());
-      }
-    }
-    int xwm = xp, ywm = yp, bt, bx, by;
-    
-    if (!fake_X_wm(w, xwm, ywm, bt, bx, by)) {
-      // menu windows and tooltips
-      if (w->modal()||w->tooltip_window()) {
-        winstyle = NSBorderlessWindowMask;
-        winlevel = NSModalPanelWindowLevel;
-      } else {
-        winstyle = NSBorderlessWindowMask;
-      }
-    } else if (w->modal()) {
-      winstyle &= ~NSMiniaturizableWindowMask;
-      // winstyle &= ~(NSResizableWindowMask | NSMiniaturizableWindowMask);
-      winlevel = NSModalPanelWindowLevel;
-    }
-    else if (w->non_modal()) {
-      winlevel = NSFloatingWindowLevel;
-    }
-    
-    if (by+bt) {
-      wp += 2*bx;
-      hp += 2*by+bt;
-    }
-    if (!(w->flags() & Fl_Window::FORCE_POSITION)) {
-      // use the Carbon functions below for default window positioning
-      w->x(xyPos+Fl::x());
-      w->y(xyPos+Fl::y());
-      xyPos += 25;
-      if (xyPos>200) xyPos = 100;
-    } else {
-      if (!Fl::grab()) {
-        xp = xwm; yp = ywm;
-        w->x(xp);w->y(yp);
-      }
-      xp -= bx;
-      yp -= by+bt;
-    }
-    
-    if (w->non_modal() && Fl_X::first /*&& !fl_disable_transient_for*/) {
-      // find some other window to be "transient for":
-      Fl_Window* w = Fl_X::first->w;
-      while (w->parent()) w = w->window(); // todo: this code does not make any sense! (w!=w??)
-    }
-        
-    Fl_X* x = new Fl_X;
-    x->subwindow = false;
-    x->other_xid = 0; // room for doublebuffering image map. On OS X this is only used by overlay windows
-    x->region = 0;
-    x->subRegion = 0;
-    x->cursor = NULL;
-    x->xidChildren = 0;
-    x->xidNext = 0;
-    x->gc = 0;
-	  
-    NSRect srect = [[NSScreen mainScreen] frame];
-    if (w->flags() & Fl_Widget::FULLSCREEN) {
-      int sx, sy, sw, sh;
-      Fl::screen_xywh(sx, sy, sw, sh, w->x(), w->y(), w->w(), w->h());
-      w->resize(sx, sy, sw, sh);
-      winstyle = NSBorderlessWindowMask;
-      winlevel = NSStatusWindowLevel;
-    }
-    NSRect crect;
-    crect.origin.x = w->x(); 
-    crect.origin.y = srect.size.height - (w->y() + w->h());
-    crect.size.width=w->w(); 
-    crect.size.height=w->h();
-    FLWindow *cw = [[FLWindow alloc] initWithFl_W:w 
-				      contentRect:crect  
-					styleMask:winstyle];
-    [cw setHasShadow:YES];
-    [cw setAcceptsMouseMovedEvents:YES];
-    x->xid = cw;
-    FLView *myview = [[FLView alloc] init];
-    [cw setContentView:myview];
-    [cw setLevel:winlevel];
-    
-    q_set_window_title(cw, w->label(), w->iconlabel());
-    if (!(w->flags() & Fl_Window::FORCE_POSITION)) {
-      if (w->modal()) {
-        [cw center];
-      } else if (w->non_modal()) {
-        [cw center];
-      } else {
-        static NSPoint delta = NSZeroPoint;
-        delta = [cw cascadeTopLeftFromPoint:delta];
-      }
-    }
-    if(w->menu_window()) { // make menu windows slightly transparent
-      [cw setAlphaValue:0.97];
-    }
-    x->w = w; w->i = x;
-    x->wait_for_expose = 1;
-    x->next = Fl_X::first;
-    Fl_X::first = x;
-    // Install DnD handlers 
-    [myview registerForDraggedTypes:[NSArray arrayWithObjects:
-                                     NSStringPboardType,  NSFilenamesPboardType, nil]];
-    if ( ! Fl_X::first->next ) {	
-      // if this is the first window, we need to bring the application to the front
-      ProcessSerialNumber psn = { 0, kCurrentProcess };
-      SetFrontProcess( &psn );
-    }
-    
-    if (w->size_range_set) w->size_range_();
-    
-    if ( w->border() || (!w->modal() && !w->tooltip_window()) ) {
-      Fl_Tooltip::enter(0);
-    }
-    w->set_visible();
-    if ( w->border() || (!w->modal() && !w->tooltip_window()) ) Fl::handle(FL_FOCUS, w);
-    Fl::first_window(w);
-    [cw setDelegate:mydelegate];
-    if (fl_show_iconic) { 
-      fl_show_iconic = 0;
-      [cw miniaturize:nil];
-    } else {
-      [cw makeKeyAndOrderFront:nil];
-    }
-    
-    crect = [[cw contentView] frame];
-    w->w(int(crect.size.width));
-    w->h(int(crect.size.height));
-    crect = [cw frame];
-    w->x(int(crect.origin.x));
-    srect = [[cw screen] frame];
-    w->y(int(srect.size.height - (crect.origin.y + w->h())));
-    
-    int old_event = Fl::e_number;
-    w->handle(Fl::e_number = FL_SHOW);
-    Fl::e_number = old_event;
-    
-    if (w->modal()) { Fl::modal_ = w; fl_fix_focus(); }
-  }
-}
-
-
-/*
- * Tell the OS what window sizes we want to allow
- */
-void Fl_Window::size_range_() {
-  int bx, by, bt;
-  get_window_frame_sizes(bx, by, bt);
-  size_range_set = 1;
-  NSSize minSize = { minw, minh + bt };
-  NSSize maxSize = { maxw?maxw:32000, maxh?maxh + bt:32000 };
-  if (i && i->xid) {
-    [(NSWindow*)i->xid setMinSize:minSize];
-    [(NSWindow*)i->xid setMaxSize:maxSize];
-  }
-}
-
-
-/*
- * returns pointer to the filename, or null if name ends with ':'
- */
-const char *fl_filename_name( const char *name ) 
-{
-  const char *p, *q;
-  if (!name) return (0);
-  for ( p = q = name ; *p ; ) {
-    if ( ( p[0] == ':' ) && ( p[1] == ':' ) ) {
-      q = p+2;
-      p++;
-    }
-    else if (p[0] == '/') {
-      q = p + 1;
-    }
-    p++;
-  }
-  return q;
-}
-
-
-/*
- * set the window title bar name
- */
-void Fl_Window::label(const char *name, const char *mininame) {
-  Fl_Widget::label(name);
-  iconlabel_ = mininame;
-  if (shown() || i) {
-    NSWindow* nsw = (NSWindow*)i->xid;
-    q_set_window_title(nsw, name, mininame);
-  }
-}
-
-
-/*
- * make a window visible
- */
-void Fl_Window::show() {
-  image(Fl::scheme_bg_);
-  if (Fl::scheme_bg_) {
-    labeltype(FL_NORMAL_LABEL);
-    align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-  } else {
-    labeltype(FL_NO_LABEL);
-  }
-  Fl_Tooltip::exit(this);
-  if (!shown() || !i) {
-    Fl_X::make(this);
-  } else {
-    if ( !parent() ) {
-      if ([(NSWindow*)i->xid isMiniaturized]) {
-	i->w->redraw();
-	[(NSWindow*)i->xid deminiaturize:nil];
-      }
-      if (!fl_capture) {
-	[(NSWindow*)i->xid makeKeyAndOrderFront:nil];
-      }
-    }
-  }
-}
-
-
-/*
- * resize a window
- */
-void Fl_Window::resize(int X,int Y,int W,int H) {
-  if (W<=0) W = 1; // OS X does not like zero width windows
-  if (H<=0) H = 1;
-  int is_a_resize = (W != w() || H != h());
-  //  printf("Fl_Window::resize(X=%d, Y=%d, W=%d, H=%d), is_a_resize=%d, resize_from_system=%p, this=%p\n",
-  //         X, Y, W, H, is_a_resize, resize_from_system, this);
-  if (X != x() || Y != y()) set_flag(FORCE_POSITION);
-  else if (!is_a_resize) return;
-  if ( (resize_from_system!=this) && (!parent()) && shown()) {
-    if (is_a_resize) {
-      if (resizable()) {
-        if (W<minw) minw = W; // user request for resize takes priority
-        if (maxw && W>maxw) maxw = W; // over a previously set size_range
-        if (H<minh) minh = H;
-        if (maxh && H>maxh) maxh = H;
-        size_range(minw, minh, maxw, maxh);
-      } else {
-        size_range(W, H, W, H);
-      }
-      int bx, by, bt;
-      if ( ! this->border() ) bt = 0;
-      else get_window_frame_sizes(bx, by, bt);
-      NSRect dim;
-      dim.origin.x = X;
-      dim.origin.y = [[(NSWindow*)i->xid screen] frame].size.height - (Y + H);
-      dim.size.width = W;
-      dim.size.height = H + bt;
-      [(NSWindow*)i->xid setFrame:dim display:YES]; // calls windowDidResize
-    } else {
-      NSPoint pt; 
-      pt.x = X; 
-      pt.y = [[(NSWindow*)i->xid screen] frame].size.height - (Y + h());
-      [(NSWindow*)i->xid setFrameOrigin:pt]; // calls windowDidMove
-    }
-    return;
-  }
-  resize_from_system = 0;
-  if (is_a_resize) {
-    Fl_Group::resize(X,Y,W,H);
-    if (shown()) { 
-      redraw(); 
-    }
-  } else {
-    x(X); y(Y); 
-  }
-}
-
-
-/*
- * make all drawing go into this window (called by subclass flush() impl.)
- */
-void Fl_Window::make_current() 
-{
-  Fl_X::q_release_context();
-  fl_window = i->xid;
-  current_ = this;
-  
-  int xp = 0, yp = 0;
-  Fl_Window *win = this;
-  while ( win ) {
-    if ( !win->window() )
-      break;
-    xp += win->x();
-    yp += win->y();
-    win = (Fl_Window*)win->window();
-  }
-  
-  NSView *current_focus = [NSView focusView]; 
-  // sometimes current_focus is set to a non-FLTK view: don't touch that
-  if ( [current_focus isKindOfClass:[FLView class]] ) [current_focus unlockFocus];
-  [[(NSWindow*)i->xid contentView]  lockFocus];
-  i->gc = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
-  fl_gc = i->gc;
-  Fl_Region fl_window_region = XRectangleRegion(0,0,w(),h());
-  if ( ! this->window() ) {
-    for ( Fl_X *cx = i->xidChildren; cx; cx = cx->xidNext ) {	// clip-out all sub-windows
-      Fl_Window *cw = cx->w;
-      Fl_Region from = fl_window_region;
-      fl_window_region = MacRegionMinusRect(from, cw->x(), cw->y(), cw->w(), cw->h() );
-      XDestroyRegion(from);
-    }
-  }
-  
-  // antialiasing must be deactivated because it applies to rectangles too
-  // and escapes even clipping!!!
-  // it gets activated when needed (e.g., draw text)
-  CGContextSetShouldAntialias(fl_gc, false);  
-  CGFloat hgt = [[(NSWindow*)fl_window contentView] frame].size.height;
-  CGContextTranslateCTM(fl_gc, 0.5, hgt-0.5f);
-  CGContextScaleCTM(fl_gc, 1.0f, -1.0f); // now 0,0 is top-left point of the window
-  win = this;
-  while(win && win->window()) { // translate to subwindow origin if this is a subwindow context
-    CGContextTranslateCTM(fl_gc, win->x(), win->y());
-    win = win->window();
-  }
-  //apply window's clip
-  CGContextClipToRects(fl_gc, fl_window_region->rects, fl_window_region->count );
-  XDestroyRegion(fl_window_region);
-// this is the context with origin at top left of (sub)window clipped out of its subwindows if any
-  CGContextSaveGState(fl_gc); 
-#if defined(FLTK_USE_CAIRO)
-  if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
-#endif
-  fl_clip_region( 0 );
-  
-#if defined(FLTK_USE_CAIRO)
-  // update the cairo_t context
-  if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this);
-#endif
-}
-
-// helper function to manage the current CGContext fl_gc
-extern void fl_quartz_restore_line_style_();
-
-// FLTK has only one global graphics state. This function copies the FLTK state into the
-// current Quartz context
-void Fl_X::q_fill_context() {
-  if (!fl_gc) return;
-  if ( ! fl_window) { // a bitmap context
-    size_t hgt = CGBitmapContextGetHeight(fl_gc);
-    CGContextTranslateCTM(fl_gc, 0.5, hgt-0.5f);
-    CGContextScaleCTM(fl_gc, 1.0f, -1.0f); // now 0,0 is top-left point of the context
-    }
-  fl_color(fl_graphics_driver->color());
-  fl_quartz_restore_line_style_();
-}
-
-// The only way to reset clipping to its original state is to pop the current graphics
-// state and restore the global state.
-void Fl_X::q_clear_clipping() {
-  if (!fl_gc) return;
-  CGContextRestoreGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-}
-
-// Give the Quartz context back to the system
-void Fl_X::q_release_context(Fl_X *x) {
-  if (x && x->gc!=fl_gc) return;
-  if (!fl_gc) return;
-  CGContextRestoreGState(fl_gc); // matches the CGContextSaveGState of make_current
-  fl_gc = 0;
-#if defined(FLTK_USE_CAIRO)
-  if (Fl::cairo_autolink_context()) Fl::cairo_make_current((Fl_Window*) 0); // capture gc changes automatically to update the cairo context adequately
-#endif
-}
-
-void Fl_X::q_begin_image(CGRect &rect, int cx, int cy, int w, int h) {
-  CGContextSaveGState(fl_gc);
-  CGRect r2 = rect;
-  r2.origin.x -= 0.5f;
-  r2.origin.y -= 0.5f;
-  CGContextClipToRect(fl_gc, r2);
-  // move graphics context to origin of vertically reversed image 
-  CGContextTranslateCTM(fl_gc, rect.origin.x - cx - 0.5, rect.origin.y - cy + h - 0.5);
-  CGContextScaleCTM(fl_gc, 1, -1);
-  rect.origin.x = rect.origin.y = 0;
-  rect.size.width = w;
-  rect.size.height = h;
-}
-
-void Fl_X::q_end_image() {
-  CGContextRestoreGState(fl_gc);
-}
-
-
-////////////////////////////////////////////////////////////////
-// Copy & Paste fltk implementation.
-////////////////////////////////////////////////////////////////
-
-static void convert_crlf(char * s, size_t len)
-{
-  // turn all \r characters into \n:
-  for (size_t x = 0; x < len; x++) if (s[x] == '\r') s[x] = '\n';
-}
-
-// fltk 1.3 clipboard support constant definitions:
-const CFStringRef	flavorNames[] = {
-  CFSTR("public.utf16-plain-text"), 
-  CFSTR("public.utf8-plain-text"),
-  CFSTR("com.apple.traditional-mac-plain-text") };
-const CFStringEncoding encodings[] = { 
-  kCFStringEncodingUnicode, 
-  kCFStringEncodingUTF8, 
-  kCFStringEncodingMacRoman};
-const size_t handledFlavorsCount = sizeof(encodings)/sizeof(CFStringEncoding);
-
-// clipboard variables definitions :
-char *fl_selection_buffer[2];
-int fl_selection_length[2];
-static int fl_selection_buffer_length[2];
-
-static PasteboardRef myPasteboard = 0;
-static void allocatePasteboard() {
-  if (!myPasteboard)
-    PasteboardCreate(kPasteboardClipboard, &myPasteboard);
-}
-
-
-/*
- * create a selection
- * owner: widget that created the selection
- * stuff: pointer to selected data
- * size of selected data
- */
-void Fl::copy(const char *stuff, int len, int clipboard) {
-  if (!stuff || len<0) return;
-  if (len+1 > fl_selection_buffer_length[clipboard]) {
-    delete[] fl_selection_buffer[clipboard];
-    fl_selection_buffer[clipboard] = new char[len+100];
-    fl_selection_buffer_length[clipboard] = len+100;
-  }
-  memcpy(fl_selection_buffer[clipboard], stuff, len);
-  fl_selection_buffer[clipboard][len] = 0; // needed for direct paste
-  fl_selection_length[clipboard] = len;
-  if (clipboard) {
-    allocatePasteboard();
-    OSStatus err = PasteboardClear(myPasteboard);
-    if (err!=noErr) return; // clear did not work, maybe not owner of clipboard.
-    PasteboardSynchronize(myPasteboard);
-    CFDataRef text = CFDataCreate(kCFAllocatorDefault, (UInt8*)fl_selection_buffer[1], len);
-    if (text==NULL) return; // there was a pb creating the object, abort.
-    err=PasteboardPutItemFlavor(myPasteboard, (PasteboardItemID)1, CFSTR("public.utf8-plain-text"), text, 0);
-    CFRelease(text);
-  }
-}
-
-// Call this when a "paste" operation happens:
-void Fl::paste(Fl_Widget &receiver, int clipboard) {
-  if (clipboard) {
-    // see if we own the selection, if not go get it:
-    fl_selection_length[1] = 0;
-    OSStatus err = noErr;
-    Boolean found = false;
-    CFDataRef flavorData = NULL;
-    CFStringEncoding encoding = 0;
-    
-    allocatePasteboard();
-    PasteboardSynchronize(myPasteboard);
-    ItemCount nFlavor = 0, i, j;
-    err = PasteboardGetItemCount(myPasteboard, &nFlavor);
-    if (err==noErr) {
-      for (i=1; i<=nFlavor; i++) {
-        PasteboardItemID itemID = 0;
-        CFArrayRef flavorTypeArray = NULL;
-        found = false;
-        err = PasteboardGetItemIdentifier(myPasteboard, i, &itemID);
-        if (err!=noErr) continue;
-        err = PasteboardCopyItemFlavors(myPasteboard, itemID, &flavorTypeArray);
-        if (err!=noErr) {
-          if (flavorTypeArray) {CFRelease(flavorTypeArray); flavorTypeArray = NULL;}
-          continue;
-        }
-        CFIndex flavorCount = CFArrayGetCount(flavorTypeArray);
-        for (j = 0; j < handledFlavorsCount; j++) {
-          for (CFIndex flavorIndex=0; flavorIndex<flavorCount; flavorIndex++) {
-            CFStringRef flavorType = (CFStringRef)CFArrayGetValueAtIndex(flavorTypeArray, flavorIndex);
-            if (UTTypeConformsTo(flavorType, flavorNames[j])) {
-              err = PasteboardCopyItemFlavorData( myPasteboard, itemID, flavorNames[j], &flavorData );
-              if (err != noErr) continue;
-              encoding = encodings[j];
-              found = true;
-              break;
-            }
-          }
-          if (found) break;
-        }
-        if (flavorTypeArray) {CFRelease(flavorTypeArray); flavorTypeArray = NULL;}
-        if (found) break;
-      }
-      if (found) {
-        CFIndex len = CFDataGetLength(flavorData);
-        CFStringRef mycfs = CFStringCreateWithBytes(NULL, CFDataGetBytePtr(flavorData), len, encoding, false);
-        CFRelease(flavorData);
-        len = CFStringGetMaximumSizeForEncoding(CFStringGetLength(mycfs), kCFStringEncodingUTF8) + 1;
-        if ( len >= fl_selection_buffer_length[1] ) {
-          fl_selection_buffer_length[1] = len;
-          delete[] fl_selection_buffer[1];
-          fl_selection_buffer[1] = new char[len];
-        }
-        CFStringGetCString(mycfs, fl_selection_buffer[1], len, kCFStringEncodingUTF8);
-        CFRelease(mycfs);
-        len = strlen(fl_selection_buffer[1]);
-        fl_selection_length[1] = len;
-        convert_crlf(fl_selection_buffer[1],len); // turn all \r characters into \n:
-      }
-    }
-  }
-  Fl::e_text = fl_selection_buffer[clipboard];
-  Fl::e_length = fl_selection_length[clipboard];
-  if (!Fl::e_text) Fl::e_text = (char *)"";
-  receiver.handle(FL_PASTE);
-}
-
-extern void fl_trigger_clipboard_notify(int source);
-
-void fl_clipboard_notify_change() {
-  // No need to do anything here...
-}
-
-static void clipboard_check(void)
-{
-  PasteboardSyncFlags flags;
-
-  allocatePasteboard();
-  flags = PasteboardSynchronize(myPasteboard);
-
-  if (!(flags & kPasteboardModified))
-    return;
-  if (flags & kPasteboardClientIsOwner)
-    return;
-
-  fl_trigger_clipboard_notify(1);
-}
-
-void Fl::add_timeout(double time, Fl_Timeout_Handler cb, void* data)
-{
-  // check, if this timer slot exists already
-  for (int i = 0; i < mac_timer_used; ++i) {
-    MacTimeout& t = mac_timers[i];
-    // if so, simply change the fire interval
-    if (t.callback == cb  &&  t.data == data) {
-      CFRunLoopTimerSetNextFireDate(t.timer, CFAbsoluteTimeGetCurrent() + time );
-      t.pending = 1;
-      return;
-    }
-  }
-  // no existing timer to use. Create a new one:
-  int timer_id = -1;
-  // find an empty slot in the timer array
-  for (int i = 0; i < mac_timer_used; ++i) {
-    if ( !mac_timers[i].timer ) {
-      timer_id = i;
-      break;
-    }
-  }
-  // if there was no empty slot, append a new timer
-  if (timer_id == -1) {
-    // make space if needed
-    if (mac_timer_used == mac_timer_alloc) {
-      realloc_timers();
-    }
-    timer_id = mac_timer_used++;
-  }
-  // now install a brand new timer
-  MacTimeout& t = mac_timers[timer_id];
-  CFRunLoopTimerContext context = {0, data, NULL,NULL,NULL};
-  CFRunLoopTimerRef timerRef = CFRunLoopTimerCreate(kCFAllocatorDefault, 
-						    CFAbsoluteTimeGetCurrent() + time,
-						    1E30,  
-						    0,
-						    0,
-						    do_timer,
-						    &context
-						    );
-  if (timerRef) {
-    CFRunLoopAddTimer(CFRunLoopGetCurrent(),
-		      timerRef,
-		      kCFRunLoopDefaultMode);
-    t.callback = cb;
-    t.data     = data;
-    t.timer    = timerRef;
-    t.pending  = 1;
-  }
-}
-
-void Fl::repeat_timeout(double time, Fl_Timeout_Handler cb, void* data)
-{
-  // currently, repeat_timeout does not subtract the trigger time of the previous timer event as it should.
-  add_timeout(time, cb, data);
-}
-
-int Fl::has_timeout(Fl_Timeout_Handler cb, void* data)
-{
-  for (int i = 0; i < mac_timer_used; ++i) {
-    MacTimeout& t = mac_timers[i];
-    if (t.callback == cb  &&  t.data == data && t.pending) {
-      return 1;
-    }
-  }
-  return 0;
-}
-
-void Fl::remove_timeout(Fl_Timeout_Handler cb, void* data)
-{
-  for (int i = 0; i < mac_timer_used; ++i) {
-    MacTimeout& t = mac_timers[i];
-    if (t.callback == cb  && ( t.data == data || data == NULL)) {
-      delete_timer(t);
-    }
-  }
-}
-
-int Fl_X::unlink(Fl_X *start) {
-  if (start) {
-    Fl_X *pc = start;
-    while (pc) {
-      if (pc->xidNext == this) {
-        pc->xidNext = xidNext;
-        return 1;
-      }
-      if (pc->xidChildren) {
-        if (pc->xidChildren == this) {
-          pc->xidChildren = xidNext;
-          return 1;
-        }
-        if (unlink(pc->xidChildren))
-          return 1;
-      }
-      pc = pc->xidNext;
-    }
-  } else {
-    for ( Fl_X *pc = Fl_X::first; pc; pc = pc->next ) {
-      if (unlink(pc))
-        return 1;
-    }
-  }  
-  return 0;
-}
-
-void Fl_X::relink(Fl_Window *w, Fl_Window *wp) {
-  Fl_X *x = Fl_X::i(w);
-  Fl_X *p = Fl_X::i(wp);
-  if (!x || !p) return;
-  // first, check if 'x' is already registered as a child of 'p'
-  for (Fl_X *i = p->xidChildren; i; i=i->xidNext) {
-    if (i == x) return;
-  }
-  // now add 'x' as the first child of 'p'
-  x->xidNext = p->xidChildren;
-  p->xidChildren = x;
-}
-
-void Fl_X::destroy() {
-  // subwindows share their xid with their parent window, so should not close it
-  if (!subwindow && w && !w->parent() && xid) {
-    [[(NSWindow *)xid contentView] release];
-    [(NSWindow *)xid close];
-  }
-  if (cursor) {
-    [(NSCursor*)cursor release];
-    cursor = NULL;
-  }
-}
-
-void Fl_X::map() {
-  if (w && xid) {
-    [(NSWindow *)xid orderFront:nil];
-  }
-  //+ link to window list
-  if (w && w->parent()) {
-    Fl_X::relink(w, w->window() );
-    w->redraw();
-  }
-}
-
-void Fl_X::unmap() {
-  if (w && !w->parent() && xid) {
-    [(NSWindow *)xid orderOut:nil];
-  }
-  if (w && Fl_X::i(w)) 
-    Fl_X::i(w)->unlink();
-}
-
-
-// removes x,y,w,h rectangle from region r and returns result as a new Fl_Region
-static Fl_Region MacRegionMinusRect(Fl_Region r, int x,int y,int w,int h)
-{
-  Fl_Region outr = (Fl_Region)malloc(sizeof(*outr));
-  outr->rects = (CGRect*)malloc(4 * r->count * sizeof(CGRect));
-  outr->count = 0;
-  CGRect rect = fl_cgrectmake_cocoa(x, y, w, h);
-  for( int i = 0; i < r->count; i++) {
-    CGRect A = r->rects[i];
-    CGRect test = CGRectIntersection(A, rect);
-    if (CGRectIsEmpty(test)) {
-      outr->rects[(outr->count)++] = A;
-    }
-    else {
-      const CGFloat verylarge = 100000.;
-      CGRect side = CGRectMake(0,0,rect.origin.x,verylarge);// W side
-      test = CGRectIntersection(A, side);
-      if ( ! CGRectIsEmpty(test)) {
-        outr->rects[(outr->count)++] = test;
-      }
-      side = CGRectMake(0,rect.origin.y + rect.size.height,verylarge,verylarge);// N side
-      test = CGRectIntersection(A, side);
-      if ( ! CGRectIsEmpty(test)) {
-        outr->rects[(outr->count)++] = test;
-      }
-      side = CGRectMake(rect.origin.x + rect.size.width, 0, verylarge, verylarge);// E side
-      test = CGRectIntersection(A, side);
-      if ( ! CGRectIsEmpty(test)) {
-        outr->rects[(outr->count)++] = test;
-      }
-      side = CGRectMake(0, 0, verylarge, rect.origin.y);// S side
-      test = CGRectIntersection(A, side);
-      if ( ! CGRectIsEmpty(test)) {
-        outr->rects[(outr->count)++] = test;
-      }
-    }
-  }
-  if (outr->count == 0) {
-    free(outr->rects);
-    free(outr);
-    outr = XRectangleRegion(0,0,0,0);
-  }
-  else outr->rects = (CGRect*)realloc(outr->rects, outr->count * sizeof(CGRect));
-  return outr;
-}
-
-// intersects current and x,y,w,h rectangle and returns result as a new Fl_Region
-Fl_Region Fl_X::intersect_region_and_rect(Fl_Region current, int x,int y,int w, int h)
-{
-  if (current == NULL) return XRectangleRegion(x,y,w,h);
-  CGRect r = fl_cgrectmake_cocoa(x, y, w, h);
-  Fl_Region outr = (Fl_Region)malloc(sizeof(*outr));
-  outr->count = current->count;
-  outr->rects =(CGRect*)malloc(outr->count * sizeof(CGRect));
-  int j = 0;
-  for(int i = 0; i < current->count; i++) {
-    CGRect test = CGRectIntersection(current->rects[i], r);
-    if (!CGRectIsEmpty(test)) outr->rects[j++] = test;
-  }
-  if (j) {
-    outr->count = j;
-    outr->rects = (CGRect*)realloc(outr->rects, outr->count * sizeof(CGRect));
-  }
-  else {
-    XDestroyRegion(outr);
-    outr = XRectangleRegion(0,0,0,0);
-  }
-  return outr;
-}
-
-void Fl_X::collapse() {
-  [(NSWindow *)xid miniaturize:nil];
-}
-
-static NSImage *CGBitmapContextToNSImage(CGContextRef c)
-// the returned NSImage is autoreleased
-{
-  unsigned char *pdata = (unsigned char *)CGBitmapContextGetData(c);
-  NSBitmapImageRep *imagerep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&pdata
-                                                                       pixelsWide:CGBitmapContextGetWidth(c)
-                                                                       pixelsHigh:CGBitmapContextGetHeight(c)
-                                                                    bitsPerSample:8
-                                                                  samplesPerPixel:4
-                                                                         hasAlpha:YES
-                                                                         isPlanar:NO
-                                                                   colorSpaceName:NSDeviceRGBColorSpace
-                                                                      bytesPerRow:CGBitmapContextGetBytesPerRow(c)
-                                                                     bitsPerPixel:CGBitmapContextGetBitsPerPixel(c)];
-  NSImage* image = [[NSImage alloc] initWithData: [imagerep TIFFRepresentation]];
-  [imagerep release];
-  return [image autorelease];
-}
-
-int Fl_X::set_cursor(Fl_Cursor c)
-{
-  if (cursor) {
-    [(NSCursor*)cursor release];
-    cursor = NULL;
-  }
-
-  switch (c) {
-  case FL_CURSOR_ARROW:   cursor = [NSCursor arrowCursor]; break;
-  case FL_CURSOR_CROSS:   cursor = [NSCursor crosshairCursor]; break;
-  case FL_CURSOR_INSERT:  cursor = [NSCursor IBeamCursor]; break;
-  case FL_CURSOR_HAND:    cursor = [NSCursor pointingHandCursor]; break;
-  case FL_CURSOR_MOVE:    cursor = [NSCursor openHandCursor]; break;
-  case FL_CURSOR_NS:      cursor = [NSCursor resizeUpDownCursor]; break;
-  case FL_CURSOR_WE:      cursor = [NSCursor resizeLeftRightCursor]; break;
-  case FL_CURSOR_N:       cursor = [NSCursor resizeUpCursor]; break;
-  case FL_CURSOR_E:       cursor = [NSCursor resizeRightCursor]; break;
-  case FL_CURSOR_W:       cursor = [NSCursor resizeLeftCursor]; break;
-  case FL_CURSOR_S:       cursor = [NSCursor resizeDownCursor]; break;
-  default:
-    return 0;
-  }
-
-  [(NSCursor*)cursor retain];
-
-  [(NSWindow*)xid invalidateCursorRectsForView:[(NSWindow*)xid contentView]];
-
-  return 1;
-}
-
-int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) {
-  if (cursor) {
-    [(NSCursor*)cursor release];
-    cursor = NULL;
-  }
-
-  if ((hotx < 0) || (hotx >= image->w()))
-    return 0;
-  if ((hoty < 0) || (hoty >= image->h()))
-    return 0;
-
-  // OS X >= 10.6 can create a NSImage from a CGImage, but we need to
-  // support older versions, hence this pesky handling.
-
-  NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc]
-                              initWithBitmapDataPlanes:NULL
-                              pixelsWide:image->w()
-                              pixelsHigh:image->h()
-                              bitsPerSample:8
-                              samplesPerPixel:image->d()
-                              hasAlpha:!(image->d() & 1)
-                              isPlanar:NO
-                              colorSpaceName:(image->d()<=2) ? NSDeviceWhiteColorSpace : NSDeviceRGBColorSpace
-                              bytesPerRow:(image->w() * image->d())
-                              bitsPerPixel:(image->d()*8)];
-
-  // Alpha needs to be premultiplied for this format
-
-  const uchar *i = (const uchar*)*image->data();
-  unsigned char *o = [bitmap bitmapData];
-  for (int y = 0;y < image->h();y++) {
-    if (image->d() & 1) {
-      for (int x = 0;x < image->w();x++) {
-        unsigned int alpha;
-        if (image->d() == 4) {
-          alpha = i[3];
-          *o++ = (unsigned char)((unsigned int)*i++ * alpha / 255);
-          *o++ = (unsigned char)((unsigned int)*i++ * alpha / 255);
-        }
-
-        alpha = i[1];
-        *o++ = (unsigned char)((unsigned int)*i++ * alpha / 255);
-        *o++ = alpha;
-        i++;
-      }
-    } else {
-      // No alpha, so we can just copy everything directly.
-      int len = image->w() * image->d();
-      memcpy(o, i, len);
-      o += len;
-      i += len;
-    }
-    i += image->ld();
-  }
-
-  NSImage *nsimage = [[NSImage alloc]
-                      initWithSize:NSMakeSize(image->w(), image->h())];
-
-  [nsimage addRepresentation:bitmap];
-
-  cursor = [[NSCursor alloc]
-            initWithImage:nsimage
-            hotSpot:NSMakePoint(hotx, hoty)];
-
-  [(NSWindow*)xid invalidateCursorRectsForView:[(NSWindow*)xid contentView]];
-
-  [bitmap release];
-  [nsimage release];
-
-  return 1;
-}
-
-@interface FLaboutItemTarget : NSObject 
-{
-}
-- (void)showPanel;
-- (void)printPanel;
-@end
-@implementation FLaboutItemTarget
-- (void)showPanel
-{
-    if ((Fl_Mac_App_Menu::copyright == NULL) ||
-        (strlen(Fl_Mac_App_Menu::copyright) > 0)) {
-      NSString *copyright;
-
-      if (Fl_Mac_App_Menu::copyright == NULL)
-        copyright = [NSString stringWithFormat:@" GUI with FLTK %d.%d",
-                              FL_MAJOR_VERSION, FL_MINOR_VERSION ];
-      else
-        copyright = [NSString stringWithUTF8String:Fl_Mac_App_Menu::copyright];
-
-      NSDictionary *options;
-      options = [NSDictionary dictionaryWithObjectsAndKeys:
-                              copyright, @"Copyright",
-                              nil];
-
-      [NSApp orderFrontStandardAboutPanelWithOptions:options];
-    } else {
-      [NSApp orderFrontStandardAboutPanelWithOptions:nil];
-    }
-  }
-//#include <FL/Fl_PostScript.H>
-- (void)printPanel
-{
-  Fl_Printer printer;
-  //Fl_PostScript_File_Device printer;
-  int w, h, ww, wh;
-  Fl_Window *win = Fl::first_window();
-  if(!win) return;
-  if( printer.start_job(1) ) return;
-  if( printer.start_page() ) return;
-  // scale the printer device so that the window fits on the page
-  float scale = 1;
-  printer.printable_rect(&w, &h);
-  ww = win->decorated_w();
-  wh = win->decorated_h();
-  if (ww>w || wh>h) {
-    scale = (float)w/win->w();
-    if ((float)h/wh < scale) scale = (float)h/wh;
-    printer.scale(scale);
-  }
-//#define ROTATE 1
-#ifdef ROTATE
-  printer.scale(scale * 0.8, scale * 0.8);
-  printer.printable_rect(&w, &h);
-  printer.origin(w/2, h/2 );
-  printer.rotate(20.);
-  printer.print_widget( win, - win->w()/2, - win->h()/2 );
-#else
-  printer.print_window(win);
-#endif
-  printer.end_page();
-  printer.end_job();
-}
-@end
-
-static void createAppleMenu(void)
-{
-  static BOOL donethat = NO;
-  if (donethat) return;
-  donethat = YES;
-  NSMenu *mainmenu, *services, *appleMenu;
-  NSMenuItem *menuItem;
-  NSString *title;
-
-  NSString *nsappname = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
-  if (nsappname == nil)
-    nsappname = [[NSProcessInfo processInfo] processName];
-  appleMenu = [[NSMenu alloc] initWithTitle:@""];
-  /* Add menu items */
-  title = [[NSString stringWithUTF8String:Fl_Mac_App_Menu::about] stringByAppendingString:nsappname];
-  menuItem = [appleMenu addItemWithTitle:title action:@selector(showPanel) keyEquivalent:@""];
-  FLaboutItemTarget *about = [[FLaboutItemTarget alloc] init];
-  [menuItem setTarget:about];
-  [appleMenu addItem:[NSMenuItem separatorItem]];
-  // Print front window
-  if (strlen(Fl_Mac_App_Menu::print) > 0) {
-    menuItem = [appleMenu 
-		addItemWithTitle:[NSString stringWithUTF8String:Fl_Mac_App_Menu::print] 
-		action:@selector(printPanel) 
-		keyEquivalent:@""];
-    [menuItem setTarget:about];
-    [appleMenu setAutoenablesItems:NO];
-    [menuItem setEnabled:YES];
-    [appleMenu addItem:[NSMenuItem separatorItem]];
-    }
-  // Services Menu
-  services = [[NSMenu alloc] init];
-  menuItem = [appleMenu 
-	      addItemWithTitle:[NSString stringWithUTF8String:Fl_Mac_App_Menu::services] 
-	      action:nil 
-	      keyEquivalent:@""];
-  [appleMenu setSubmenu:services forItem:menuItem];
-  [appleMenu addItem:[NSMenuItem separatorItem]];
-  // Hide AppName
-  title = [[NSString stringWithUTF8String:Fl_Mac_App_Menu::hide] stringByAppendingString:nsappname];
-  [appleMenu addItemWithTitle:title 
-		       action:@selector(hide:) 
-		keyEquivalent:@"h"];
-  // Hide Others
-  menuItem = [appleMenu 
-	      addItemWithTitle:[NSString stringWithUTF8String:Fl_Mac_App_Menu::hide_others] 
-	      action:@selector(hideOtherApplications:) 
-	      keyEquivalent:@"h"];
-  [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
-  // Show All
-  [appleMenu addItemWithTitle:[NSString stringWithUTF8String:Fl_Mac_App_Menu::show] 
-		       action:@selector(unhideAllApplications:) keyEquivalent:@""];
-  [appleMenu addItem:[NSMenuItem separatorItem]];
-  // Quit AppName
-  title = [[NSString stringWithUTF8String:Fl_Mac_App_Menu::quit] 
-	   stringByAppendingString:nsappname];
-  [appleMenu addItemWithTitle:title 
-		       action:@selector(terminate:) 
-		keyEquivalent:@"q"];
-  /* Put menu into the menubar */
-  menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
-  [menuItem setSubmenu:appleMenu];
-  mainmenu = [[NSMenu alloc] initWithTitle:@""];
-  [mainmenu addItem:menuItem];
-  if (fl_mac_os_version < 100600) {
-    //	[NSApp setAppleMenu:appleMenu];
-    //	to avoid compiler warning raised by use of undocumented setAppleMenu	:
-    [NSApp performSelector:@selector(setAppleMenu:) withObject:appleMenu];
-  }
-  [NSApp setServicesMenu:services];
-  [NSApp setMainMenu:mainmenu];
-  [services release];
-  [mainmenu release];
-  [appleMenu release];
-  [menuItem release];
-}
-
-@interface FLMenuItem : NSMenuItem {
-}
-- (void) doCallback:(id)unused;
-- (void) directCallback:(id)unused;
-@end
-@implementation FLMenuItem
-- (void) doCallback:(id)unused
-{
-  int flRank = [self tag];
-  const Fl_Menu_Item *items = fl_sys_menu_bar->Fl_Menu_::menu();
-  const Fl_Menu_Item *item = items + flRank;
-  if (item) {
-    fl_sys_menu_bar->picked(item);
-    if ( item->flags & FL_MENU_TOGGLE ) {	// update the menu toggle symbol
-      [self setState:(item->value() ? NSOnState : NSOffState)];
-    }
-    else if ( item->flags & FL_MENU_RADIO ) {	// update the menu radio symbols
-      int from = flRank;
-      while( from > 0 && items[from - 1].label() && (items[from - 1].flags & FL_MENU_RADIO) &&
-            !(items[from - 1].flags & FL_MENU_DIVIDER) ) {
-        from--;
-      }
-      int to = flRank;
-      while( !(items[to].flags & FL_MENU_DIVIDER) && items[to + 1].label() && 
-            (items[to + 1].flags & FL_MENU_RADIO) ) {
-        to++;
-      }
-      NSMenu *nsmenu = [self menu];
-      int nsrank = (int)[nsmenu indexOfItem:self];
-      for(int i =  from - flRank + nsrank ; i <= to - flRank + nsrank; i++) {
-        NSMenuItem *nsitem = [nsmenu itemAtIndex:i];
-        if (nsitem != self) [nsitem setState:NSOffState];
-        else [nsitem setState:(item->value() ? NSOnState : NSOffState) ];
-      }
-    }
-  }
-}
-- (void) directCallback:(id)unused
-{
-  Fl_Menu_Item *item = (Fl_Menu_Item *)[(NSData*)[self representedObject] bytes];
-  if ( item && item->callback() ) item->do_callback(NULL);
-}
-@end
-
-void fl_mac_set_about( Fl_Callback *cb, void *user_data, int shortcut) 
-{
-  fl_open_display();
-  Fl_Menu_Item aboutItem;
-  memset(&aboutItem, 0, sizeof(Fl_Menu_Item));
-  aboutItem.callback(cb);
-  aboutItem.user_data(user_data);
-  aboutItem.shortcut(shortcut);
-  NSMenu *appleMenu = [[[NSApp mainMenu] itemAtIndex:0] submenu];
-  CFStringRef cfname = CFStringCreateCopy(NULL, (CFStringRef)[[appleMenu itemAtIndex:0] title]);
-  [appleMenu removeItemAtIndex:0];
-  FLMenuItem *item = [[[FLMenuItem alloc] initWithTitle:(NSString*)cfname 
-						 action:@selector(directCallback:) 
-					  keyEquivalent:@""] autorelease];
-  if (aboutItem.shortcut()) {
-    Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::setKeyEquivalent, item, aboutItem.shortcut() & 0xff);
-    Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::setKeyEquivalentModifierMask, item, aboutItem.shortcut() );
-  }
-  NSData *pointer = [NSData dataWithBytes:&aboutItem length:sizeof(Fl_Menu_Item)];
-  [item setRepresentedObject:pointer];
-  [appleMenu insertItem:item atIndex:0];
-  CFRelease(cfname);
-  [item setTarget:item];
-}
-
-static char *remove_ampersand(const char *s)
-{
-  char *ret = strdup(s);
-  const char *p = s;
-  char *q = ret;
-  while(*p != 0) {
-    if (p[0]=='&') {
-      if (p[1]=='&') {
-        *q++ = '&'; p+=2;
-      } else {
-        p++;
-      }
-    } else {
-      *q++ = *p++;
-    }
-  }
-  *q = 0;
-  return ret;
-}
-
-void *Fl_Sys_Menu_Bar::doMenuOrItemOperation(Fl_Sys_Menu_Bar::menuOrItemOperation operation, ...)
-/* these operations apply to menus, submenus, or menu items
- */
-{
-  NSAutoreleasePool *localPool;
-  localPool = [[NSAutoreleasePool alloc] init]; 
-  NSMenu *menu;
-  NSMenuItem *item;
-  int value;
-  void *pter;
-  void *retval = NULL;
-  va_list ap;
-  va_start(ap, operation);
-  
-  if (operation == Fl_Sys_Menu_Bar::itemAtIndex) {	// arguments: NSMenu*, int. Returns the item
-    menu = va_arg(ap, NSMenu*);
-    value = va_arg(ap, int);
-    retval = (void *)[menu itemAtIndex:value];
-  }
-  else if (operation == Fl_Sys_Menu_Bar::setKeyEquivalent) {	// arguments: NSMenuItem*, int
-    item = va_arg(ap, NSMenuItem*);
-    value = va_arg(ap, int);
-    char key = value;
-    NSString *equiv = [[NSString alloc] initWithBytes:&key length:1 encoding:NSASCIIStringEncoding];
-    [item setKeyEquivalent:equiv];
-    [equiv release];
-  }
-  else if (operation == Fl_Sys_Menu_Bar::setKeyEquivalentModifierMask) {		// arguments: NSMenuItem*, int
-    item = va_arg(ap, NSMenuItem*);
-    value = va_arg(ap, int);
-    NSUInteger macMod = 0;
-    if ( value & FL_META ) macMod = NSCommandKeyMask;
-    if ( value & FL_SHIFT || isupper(value) ) macMod |= NSShiftKeyMask;
-    if ( value & FL_ALT ) macMod |= NSAlternateKeyMask;
-    if ( value & FL_CTRL ) macMod |= NSControlKeyMask;
-    [item setKeyEquivalentModifierMask:macMod];
-  }
-  else if (operation == Fl_Sys_Menu_Bar::setState) {	// arguments: NSMenuItem*, int
-    item = va_arg(ap, NSMenuItem*);
-    value = va_arg(ap, int);
-    [item setState:(value ? NSOnState : NSOffState)];
-  }
-  else if (operation == Fl_Sys_Menu_Bar::initWithTitle) {	// arguments: const char*title. Returns the newly created menu
-                                                                // creates a new (sub)menu
-    char *ts = remove_ampersand(va_arg(ap, char *));
-    CFStringRef title = CFStringCreateWithCString(NULL, ts, kCFStringEncodingUTF8);
-    free(ts);
-    NSMenu *menu = [[NSMenu alloc] initWithTitle:(NSString*)title];
-    CFRelease(title);
-    [menu setAutoenablesItems:NO];
-    retval = (void *)menu;
-  }
-  else if (operation == Fl_Sys_Menu_Bar::numberOfItems) {	// arguments: NSMenu *menu, int *pcount
-                                                                // upon return, *pcount is set to menu's item count
-    menu = va_arg(ap, NSMenu*);
-    pter = va_arg(ap, void *);
-    *(int*)pter = [menu numberOfItems];
-  }
-  else if (operation == Fl_Sys_Menu_Bar::setSubmenu) {		// arguments: NSMenuItem *item, NSMenu *menu
-                                                        	// sets 'menu' as submenu attached to 'item'
-    item = va_arg(ap, NSMenuItem*);
-    menu = va_arg(ap, NSMenu*);
-    [item setSubmenu:menu];
-    [menu release];
-  }
-  else if (operation == Fl_Sys_Menu_Bar::setEnabled) {		// arguments: NSMenuItem*, int
-    item = va_arg(ap, NSMenuItem*);
-    value = va_arg(ap, int);
-    [item setEnabled:(value ? YES : NO)];
-  }
-  else if (operation == Fl_Sys_Menu_Bar::addSeparatorItem) {	// arguments: NSMenu*
-    menu = va_arg(ap, NSMenu*);
-    [menu addItem:[NSMenuItem separatorItem]];
-  }
-  else if (operation == Fl_Sys_Menu_Bar::setTitle) {		// arguments: NSMenuItem*, const char *
-    item = va_arg(ap, NSMenuItem*);
-    char *ts = remove_ampersand(va_arg(ap, char *));
-    CFStringRef title = CFStringCreateWithCString(NULL, ts, kCFStringEncodingUTF8);
-    free(ts);
-    [item setTitle:(NSString*)title];
-    CFRelease(title);
-  }
-  else if (operation == Fl_Sys_Menu_Bar::removeItem) {		// arguments: NSMenu*, int
-    menu = va_arg(ap, NSMenu*);
-    value = va_arg(ap, int);
-    [menu removeItem:[menu itemAtIndex:value]];
-  }
-  else if (operation == Fl_Sys_Menu_Bar::addNewItem) {		// arguments: NSMenu *menu, int flrank, int *prank
-    // creates a new menu item at the end of 'menu'
-    // attaches the item of rank flrank (counted in Fl_Menu_) of fl_sys_menu_bar to it
-    // upon return, puts the rank (counted in NSMenu) of the new item in *prank unless prank is NULL
-    menu = va_arg(ap, NSMenu*);
-    int flRank = va_arg(ap, int);
-    char *name = remove_ampersand( (fl_sys_menu_bar->Fl_Menu_::menu() + flRank)->label());
-    int *prank = va_arg(ap, int*);
-    CFStringRef cfname = CFStringCreateWithCString(NULL, name, kCFStringEncodingUTF8);
-    free(name);
-    FLMenuItem *item = [[FLMenuItem alloc] initWithTitle:(NSString*)cfname 
-						  action:@selector(doCallback:) 
-					   keyEquivalent:@""];
-    [item setTag:flRank];
-    [menu addItem:item];
-    CFRelease(cfname);
-    [item setTarget:item];
-    if (prank != NULL) *prank = [menu indexOfItem:item];
-    [item release];
-  }
-  else if (operation == Fl_Sys_Menu_Bar::renameItem) {		// arguments: int rank, const char *newname
-    // renames the system menu item numbered rank in fl_sys_menu_bar->menu()
-    int rank = va_arg(ap, int);
-    char *newname = remove_ampersand( va_arg(ap, const char *) );
-    int countmenus = [[NSApp mainMenu] numberOfItems];
-    bool found = NO;
-    NSMenuItem *macitem = 0;
-    for(int i = 1; (!found) && i < countmenus; i++) {
-      NSMenuItem *item = [[NSApp mainMenu] itemAtIndex:i];
-      NSMenu *submenu = [item submenu];
-      if (submenu == nil) continue;
-      int countitems = [submenu numberOfItems];
-      for(int j = 0; j < countitems; j++) {
-	macitem = [submenu itemAtIndex:j];
-	if ([macitem tag] == rank) { found = YES; break; }
-      }
-    }
-    if (found) {
-      [macitem setTitle:[[[NSString alloc] initWithUTF8String:newname] autorelease]];
-    }
-    free(newname);
-  }
-  va_end(ap);
-  [localPool release];
-  return retval;
-}
-
-void Fl_X::set_key_window()
-{
-  [(NSWindow*)xid makeKeyWindow];
-}
-
-static NSImage *imageFromText(const char *text, int *pwidth, int *pheight)
-{
-  const char *p, *q;
-  int width = 0, height, w2, ltext = strlen(text);
-  fl_font(FL_HELVETICA, 10);
-  p = text;
-  int nl = 0;
-  while((q=strchr(p, '\n')) != NULL) { 
-    nl++; 
-    w2 = int(fl_width(p, q - p));
-    if (w2 > width) width = w2;
-    p = q + 1; 
-  }
-  if (text[ ltext - 1] != '\n') {
-    nl++;
-    w2 = int(fl_width(p));
-    if (w2 > width) width = w2;
-  }
-  height = nl * fl_height() + 3;
-  width += 6;
-  Fl_Offscreen off = fl_create_offscreen_with_alpha(width, height);
-  fl_begin_offscreen(off);
-  CGContextSetRGBFillColor( (CGContextRef)off, 0,0,0,0);
-  fl_rectf(0,0,width,height);
-  fl_color(FL_BLACK);
-  p = text;
-  int y = fl_height();
-  while(TRUE) {
-    q = strchr(p, '\n');
-    if (q) {
-      fl_draw(p, q - p, 3, y);
-    } else {
-      fl_draw(p, 3, y);
-      break;
-    }
-    y += fl_height();
-    p = q + 1;
-  }
-  fl_end_offscreen();
-  NSImage* image = CGBitmapContextToNSImage( (CGContextRef)off );
-  fl_delete_offscreen( off );
-  *pwidth = width;
-  *pheight = height;
-  return image;
-}
-
-static NSImage *defaultDragImage(int *pwidth, int *pheight)
-{
-  const int width = 16, height = 16;
-  Fl_Offscreen off = fl_create_offscreen_with_alpha(width, height);
-  fl_begin_offscreen(off);
-  CGContextSetRGBFillColor( (CGContextRef)off, 0,0,0,0);
-  fl_rectf(0,0,width,height);
-  CGContextSetRGBStrokeColor( (CGContextRef)off, 0,0,0,0.6);
-  fl_rect(0,0,width,height);
-  fl_rect(2,2,width-4,height-4);
-  fl_end_offscreen();
-  NSImage* image = CGBitmapContextToNSImage( (CGContextRef)off );
-  fl_delete_offscreen( off );
-  *pwidth = width;
-  *pheight = height;
-  return image;
-}
-
-int Fl::dnd(void)
-{
-  CFDataRef text = CFDataCreate(kCFAllocatorDefault, (UInt8*)fl_selection_buffer[0], fl_selection_length[0]);
-  if (text==NULL) return false;
-  NSAutoreleasePool *localPool;
-  localPool = [[NSAutoreleasePool alloc] init]; 
-  NSPasteboard *mypasteboard = [NSPasteboard pasteboardWithName:NSDragPboard];
-  [mypasteboard declareTypes:[NSArray arrayWithObjects:@"public.utf8-plain-text", nil] owner:nil];
-  [mypasteboard setData:(NSData*)text forType:@"public.utf8-plain-text"];
-  CFRelease(text);
-  Fl_Widget *w = Fl::pushed();
-  Fl_Window *win = w->window();
-  if (win == NULL) {
-    win = (Fl_Window*)w;
-  } else { 
-    while(win->window()) win = win->window();
-  }
-  NSView *myview = [(NSWindow*)Fl_X::i(win)->xid contentView];
-  NSEvent *theEvent = [NSApp currentEvent];
-  
-  int width, height;
-  NSImage *image;
-  if ( dynamic_cast<Fl_Input_*>(w) != NULL ||  dynamic_cast<Fl_Text_Display*>(w) != NULL) {
-    fl_selection_buffer[0][ fl_selection_length[0] ] = 0;
-    image = imageFromText(fl_selection_buffer[0], &width, &height);
-  } else {
-    image = defaultDragImage(&width, &height);
-  }
-  
-  static NSSize offset={0,0};
-  NSPoint pt = [theEvent locationInWindow];
-  pt.x -= width/2;
-  pt.y -= height/2;
-  [myview dragImage:image  at:pt  offset:offset 
-              event:theEvent  pasteboard:mypasteboard  
-             source:myview  slideBack:YES];
-  if ( w ) {
-    int old_event = Fl::e_number;
-    w->handle(Fl::e_number = FL_RELEASE);
-    Fl::e_number = old_event;
-    Fl::pushed( 0 );
-  }
-  [localPool release];
-  return true;
-}
-
-unsigned char *Fl_X::bitmap_from_window_rect(Fl_Window *win, int x, int y, int w, int h, int *bytesPerPixel)
-// delete the returned pointer after use
-{
-  while(win->window()) {
-    x += win->x();
-    y += win->y();
-    win = win->window();
-  }
-  CGFloat epsilon = 0;
-  if (fl_mac_os_version >= 100600) epsilon = 0.001;
-  // The epsilon offset is absolutely necessary under 10.6. Without it, the top pixel row and
-  // left pixel column are not read, and bitmap is read shifted by one pixel in both directions. 
-  // Under 10.5, we want no offset.
-  NSRect rect = NSMakeRect(x - epsilon, y - epsilon, w, h);
-  NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithFocusedViewRect:rect];
-  *bytesPerPixel = [bitmap bitsPerPixel]/8;
-  int bpp = (int)[bitmap bytesPerPlane];
-  int bpr = (int)[bitmap bytesPerRow];
-  int hh = bpp/bpr; // sometimes hh = h-1 for unclear reason
-  int ww = bpr/(*bytesPerPixel); // sometimes ww = w-1
-  unsigned char *data = new unsigned char[w * h *  *bytesPerPixel];
-  if (w == ww) {
-    memcpy(data, [bitmap bitmapData], w * hh *  *bytesPerPixel);
-  } else {
-    unsigned char *p = [bitmap bitmapData];
-    unsigned char *q = data;
-    for(int i = 0;i < hh; i++) {
-      memcpy(q, p, *bytesPerPixel * ww);
-      p += bpr;
-      q += w * *bytesPerPixel;
-      }
-  }
-  [bitmap release];
-  return data;
-}
-
-static void imgProviderReleaseData (void *info, const void *data, size_t size)
-{
-  delete[] (unsigned char *)data;
-}
-
-CGImageRef Fl_X::CGImage_from_window_rect(Fl_Window *win, int x, int y, int w, int h)
-// CFRelease the returned CGImageRef after use
-{
-  int bpp;
-  unsigned char *bitmap = bitmap_from_window_rect(win, x, y, w, h, &bpp);
-  CGImageRef img;
-  CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
-  CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, bitmap, w*h*bpp, imgProviderReleaseData);
-  img = CGImageCreate(w, h, 8, 8*bpp, w*bpp, lut,
-                      bpp == 3 ? kCGImageAlphaNone : kCGImageAlphaLast,
-                      provider, NULL, false, kCGRenderingIntentDefault);
-  CGColorSpaceRelease(lut);
-  CGDataProviderRelease(provider);
-  return img;
-}
-
-WindowRef Fl_X::window_ref()
-{
-  return (WindowRef)[(FLWindow*)xid windowRef];
-}
-
-// so a CGRect matches exactly what is denoted x,y,w,h for clipping purposes
-CGRect fl_cgrectmake_cocoa(int x, int y, int w, int h) {
-  if (Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) return CGRectMake(x-0.5, y-0.5, w, h); 
-  return CGRectMake(x, y, w > 0 ? w - 0.9 : 0, h > 0 ? h - 0.9 : 0);
-}
-
-Window fl_xid(const Fl_Window* w)
-{
-  Fl_X *temp = Fl_X::i(w);
-  return temp ? temp->xid : 0;
-}
-
-int Fl_Window::decorated_w()
-{
-  if (!shown() || parent() || !border() || !visible()) return w();
-  int bx, by, bt;
-  get_window_frame_sizes(bx, by, bt);
-  return w() + 2 * bx;
-}
-
-int Fl_Window::decorated_h()
-{
-  if (!shown() || parent() || !border() || !visible()) return h();
-  int bx, by, bt;
-  get_window_frame_sizes(bx, by, bt);
-  return h() + bt + by;
-}
-
-void Fl_Paged_Device::print_window(Fl_Window *win, int x_offset, int y_offset)
-{
-  if (!win->shown() || win->parent() || !win->border() || !win->visible()) {
-    this->print_widget(win, x_offset, y_offset);
-    return;
-  }
-  int bx, by, bt;
-  get_window_frame_sizes(bx, by, bt);
-  Fl_Display_Device::display_device()->set_current(); // send win to front and make it current
-  win->show();
-  fl_gc = NULL;
-  Fl::check();
-  win->make_current();
-  // capture the window title bar from screen
-  CGImageRef img = Fl_X::CGImage_from_window_rect(win, 0, -bt, win->w(), bt);
-  this->set_current(); // back to the Fl_Paged_Device
-  CGRect rect = { { 0, 0 }, { win->w(), bt } }; // print the title bar
-  Fl_X::q_begin_image(rect, 0, 0, win->w(), bt);
-  CGContextDrawImage(fl_gc, rect, img);
-  Fl_X::q_end_image();
-  CGImageRelease(img);
-  this->print_widget(win, x_offset, y_offset + bt); // print the window inner part
-}
-
-#include <dlfcn.h>
-
-/* Returns the address of a Carbon function after dynamically loading the Carbon library if needed.
- Supports old Mac OS X versions that may use a couple of Carbon calls:
- GetKeys used by OS X 10.3 or before (in Fl::get_key())
- PMSessionPageSetupDialog and PMSessionPrintDialog used by 10.4 or before (in Fl_Printer::start_job())
- GetWindowPort used by 10.4 or before (in Fl_Gl_Choice.cxx)
- */
-void *Fl_X::get_carbon_function(const char *function_name) {
-  static void *carbon = NULL;
-  void *f = NULL;
-  if (!carbon) {
-    carbon = dlopen("/System/Library/Frameworks/Carbon.framework/Carbon", RTLD_LAZY);
-  }
-  if (carbon) {
-    f = dlsym(carbon, function_name);
-  }
-  return f;
-}
-  
-#endif // __APPLE__
-
-//
-// End of "$Id: Fl_cocoa.mm 8807 2011-06-16 12:35:32Z manolo $".
-//
diff --git a/common/fltk/src/Fl_compose.cxx b/common/fltk/src/Fl_compose.cxx
deleted file mode 100644
index fe72c22..0000000
--- a/common/fltk/src/Fl_compose.cxx
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// "$Id: Fl_compose.cxx 8626 2011-04-27 11:21:57Z manolo $"
-//
-// Character compose processing for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-#ifndef FL_DOXYGEN
-int Fl::compose_state = 0;
-#endif
-
-#if !defined(WIN32) && !defined(__APPLE__)
-extern XIC fl_xim_ic;
-#endif
-
-/** Any text editing widget should call this for each FL_KEYBOARD event.
- Use of this function is very simple.
- 
- <p>If <i>true</i> is returned, then it has modified the
- Fl::event_text() and Fl::event_length() to a set of <i>bytes</i> to
- insert (it may be of zero length!).  In will also set the "del"
- parameter to the number of <i>bytes</i> to the left of the cursor to
- delete, this is used to delete the results of the previous call to
- Fl::compose().
- 
- <p>If <i>false</i> is returned, the keys should be treated as function
- keys, and del is set to zero. You could insert the text anyways, if
- you don't know what else to do.
- 
- <p>Though the current implementation returns immediately, future
- versions may take quite awhile, as they may pop up a window or do
- other user-interface things to allow characters to be selected.
- */
-int Fl::compose(int& del) {
-  // character composition is now handled by the OS
-  del = 0;
-#if defined(__APPLE__)
-  // this stuff is to be treated as a function key
-  if(Fl::e_length == 0 || Fl::e_keysym == FL_Enter || Fl::e_keysym == FL_KP_Enter || 
-     Fl::e_keysym == FL_Tab || Fl::e_keysym == FL_Escape || Fl::e_state&(FL_META | FL_CTRL) ) {
-    return 0;
-  }
-#elif defined(WIN32)
-  unsigned char ascii = (unsigned)e_text[0];
-  if ((e_state & (FL_ALT | FL_META)) && !(ascii & 128)) return 0;
-#else
-  unsigned char ascii = (unsigned)e_text[0];
-  if ((e_state & (FL_ALT | FL_META | FL_CTRL)) && !(ascii & 128)) return 0;
-#endif
-  if(Fl::compose_state) {
-    del = Fl::compose_state;
-    Fl::compose_state = 0;
-#ifndef __APPLE__
-  } else {
-    // Only insert non-control characters:
-    if (! (ascii & ~31 && ascii!=127)) { return 0; }
-#endif
-  }
-  return 1;
-}
-
-/**
- If the user moves the cursor, be sure to call Fl::compose_reset().
- The next call to Fl::compose() will start out in an initial state. In
- particular it will not set "del" to non-zero. This call is very fast
- so it is ok to call it many times and in many places.
- */
-void Fl::compose_reset()
-{
-  Fl::compose_state = 0;
-#if !defined(WIN32) && !defined(__APPLE__)
-  if (fl_xim_ic) XmbResetIC(fl_xim_ic);
-#endif
-}
-
-//
-// End of "$Id: Fl_compose.cxx 8626 2011-04-27 11:21:57Z manolo $"
-//
-
diff --git a/common/fltk/src/Fl_display.cxx b/common/fltk/src/Fl_display.cxx
deleted file mode 100644
index c661d23..0000000
--- a/common/fltk/src/Fl_display.cxx
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// "$Id: Fl_display.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Display function for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Startup method to set what display to use.
-// Using setenv makes programs that are exec'd use the same display.
-
-#include <FL/Fl.H>
-#include <stdlib.h>
-#include "flstring.h"
-
-/**
-    Sets the X display to use for all windows.  Actually this just sets
-    the environment variable $DISPLAY to the passed string, so this only
-    works before you show() the first window or otherwise open the display,
-    and does nothing useful under WIN32.
-*/
-void Fl::display(const char *d) {
-#if defined(__APPLE__) || defined(WIN32)
-  (void)d;
-#else
-  static char e[1024];
-  strcpy(e,"DISPLAY=");
-  strlcat(e,d,sizeof(e));
-  for (char *c = e+8; *c!=':'; c++) {
-    if (!*c) {
-      strlcat(e,":0.0",sizeof(e));
-      break;
-    }
-  }
-  putenv(e);
-#endif // __APPLE__
-}
-
-//
-// End of "$Id: Fl_display.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_get_key.cxx b/common/fltk/src/Fl_get_key.cxx
deleted file mode 100644
index 80bcf91..0000000
--- a/common/fltk/src/Fl_get_key.cxx
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// "$Id: Fl_get_key.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Keyboard state routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-#  include "Fl_get_key_win32.cxx"
-#elif defined(__APPLE__)
-#  include "Fl_get_key_mac.cxx"
-#else
-
-// Return the current state of a key.  This is the X version.  I identify
-// keys (mostly) by the X keysym.  So this turns the keysym into a keycode
-// and looks it up in the X key bit vector, which Fl_x.cxx keeps track of.
-
-#  include <FL/Fl.H>
-#  include <FL/x.H>
-
-extern char fl_key_vector[32]; // in Fl_x.cxx
-
-int Fl::event_key(int k) {
-  if (k > FL_Button && k <= FL_Button+8)
-    return Fl::event_state(8<<(k-FL_Button));
-  int i;
-#  ifdef __sgi
-  // get some missing PC keyboard keys:
-  if (k == FL_Meta_L) i = 147;
-  else if (k == FL_Meta_R) i = 148;
-  else if (k == FL_Menu) i = 149;
-  else
-#  endif
-    i = XKeysymToKeycode(fl_display, k);
-  if (i==0) return 0;
-  return fl_key_vector[i/8] & (1 << (i%8));
-}
-
-int Fl::get_key(int k) {
-  fl_open_display();
-  XQueryKeymap(fl_display, fl_key_vector);
-  return event_key(k);
-}
-
-#endif
-
-//
-// End of "$Id: Fl_get_key.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_get_key_mac.cxx b/common/fltk/src/Fl_get_key_mac.cxx
deleted file mode 100644
index 167a706..0000000
--- a/common/fltk/src/Fl_get_key_mac.cxx
+++ /dev/null
@@ -1,124 +0,0 @@
-//
-// "$Id: Fl_get_key_mac.cxx 8624 2011-04-26 17:28:10Z manolo $"
-//
-// MacOS keyboard state routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Return the current state of a key.  Keys are named by fltk symbols,
-// which are actually X keysyms.  So this has to translate to macOS
-// symbols.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <config.h>
-
-// convert an FLTK (X) keysym to a MacOS symbol:
-// See also the inverse converter in table macKeyLookUp of Fl_cocoa.mm
-// This table is in numeric order by FLTK symbol order for binary search.
-// The list of Mac OS virtual keycodes appears with OS 10.5 in
-// ...../Carbon.framework/Frameworks/HIToolbox.framework/Headers/Events.h
-
-static const struct {unsigned short vk, fltk;} vktab[] = {
-  { 49, ' ' }, { 39, '\'' }, { 43, ',' }, { 27, '-' }, { 47, '.' }, { 44, '/' }, 
-  { 29, '0' }, { 18, '1'  }, { 19, '2'  }, { 20, '3'  }, 
-  { 21, '4' }, { 23, '5'  }, { 22, '6'  }, { 26, '7'  }, 
-  { 28, '8' }, { 25, '9'  }, { 41, ';'  }, { 24, '='  },
-  {  0, 'A' }, { 11, 'B'  }, {  8, 'C'  }, {  2, 'D'  }, 
-  { 14, 'E' }, {  3, 'F'  }, {  5, 'G'  }, {  4, 'H'  }, 
-  { 34, 'I' }, { 38, 'J'  }, { 40, 'K'  }, { 37, 'L'  }, 
-  { 46, 'M' }, { 45, 'N'  }, { 31, 'O'  }, { 35, 'P'  }, 
-  { 12, 'Q' }, { 15, 'R'  }, {  1, 'S'  }, { 17, 'T'  }, 
-  { 32, 'U' }, {  9, 'V'  }, { 13, 'W'  }, {  7, 'X'  }, 
-  { 16, 'Y' }, {  6, 'Z'  }, 
-  { 33, '[' }, { 30, ']' }, { 50, '`' },  { 42, '\\' },
-  { 51, FL_BackSpace }, { 48, FL_Tab }, { 36, FL_Enter }, { 0x7F, FL_Pause },
-  { 0x7F, FL_Scroll_Lock }, { 53, FL_Escape }, { 0x73, FL_Home }, { 123, FL_Left },
-  { 126, FL_Up }, { 124, FL_Right }, { 125, FL_Down }, { 0x74, FL_Page_Up },
-  { 0x79, FL_Page_Down },  { 119, FL_End }, { 0x7F, FL_Print }, { 0x7F, FL_Insert },
-  { 0x6e, FL_Menu }, { 114, FL_Help }, { 0x47, FL_Num_Lock },
-  { 76, FL_KP_Enter }, { 67, FL_KP+'*' }, { 69, FL_KP+'+'}, { 78, FL_KP+'-' }, { 65, FL_KP+'.' }, { 75, FL_KP+'/' }, 
-  { 82, FL_KP+'0' }, { 83, FL_KP+'1' }, { 84, FL_KP+'2' }, { 85, FL_KP+'3' }, 
-  { 86, FL_KP+'4' }, { 87, FL_KP+'5' }, { 88, FL_KP+'6' }, { 89, FL_KP+'7' }, 
-  { 91, FL_KP+'8' }, { 92, FL_KP+'9' }, { 81, FL_KP+'=' }, 
-  { 0x7a, FL_F+1 }, { 0x78, FL_F+2  }, { 0x63, FL_F+3  }, { 0x76, FL_F+4  }, 
-  { 0x60, FL_F+5 }, { 0x61, FL_F+6  }, { 0x62, FL_F+7  }, { 0x64, FL_F+8  }, 
-  { 0x65, FL_F+9 }, { 0x6D, FL_F+10 }, { 0x67, FL_F+11 }, { 0x6f, FL_F+12 }, 
-  { 0x69, FL_F+13 }, { 0x6B, FL_F+14 }, { 0x71, FL_F+15 }, { 0x6A, FL_F+16 }, 
-  { 0x38, FL_Shift_L }, { 0x3C, FL_Shift_R }, { 0x3B, FL_Control_L }, { 0x3E, FL_Control_R }, 
-  { 0x39, FL_Caps_Lock }, { 0x37, FL_Meta_L }, { 0x36, FL_Meta_R },
-  { 0x3A, FL_Alt_L }, { 0x3D, FL_Alt_R }, { 0x75, FL_Delete },
-};
-
-static int fltk2mac(int fltk) {
-  int a = 0;
-  int b = sizeof(vktab)/sizeof(*vktab);
-  while (a < b) {
-    int c = (a+b)/2;
-    if (vktab[c].fltk == fltk) return vktab[c].vk;
-    if (vktab[c].fltk < fltk) a = c+1; else b = c;
-  }
-  return 127;
-}
-
-//: returns true, if that key was pressed during the last event
-int Fl::event_key(int k) {
-  return get_key(k);
-}
-
-//: returns true, if that key is pressed right now
-int Fl::get_key(int k) {
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-  if(CGEventSourceKeyState != NULL) {
-    return (int)CGEventSourceKeyState(kCGEventSourceStateCombinedSessionState, fltk2mac(k) );
-    }
-  else 
-#endif
-  {
-  typedef UInt32 fl_KeyMap[4];
-  fl_KeyMap foo;
-  // use the GetKeys Carbon function
-  typedef void (*keymap_f)(fl_KeyMap);
-  static keymap_f f = NULL;
-  if (!f) f = ( keymap_f )Fl_X::get_carbon_function("GetKeys");
-  (*f)(foo);
-#ifdef MAC_TEST_FOR_KEYCODES
- static int cnt = 0;
- if (cnt++>1024) {
-  cnt = 0;
-  printf("%08x %08x %08x %08x\n", (ulong*)(foo)[3], (ulong*)(foo)[2], (ulong*)(foo)[1], (ulong*)(foo)[0]);
- }
-#endif
-  unsigned char *b = (unsigned char*)foo;
-  // KP_Enter can be at different locations for Powerbooks vs. desktop Macs
-  if (k==FL_KP_Enter) {
-    return (((b[0x34>>3]>>(0x34&7))&1)||((b[0x4c>>3]>>(0x4c&7))&1));
-  }
-  int i = fltk2mac(k);
-  return (b[i>>3]>>(i&7))&1;
-  }
-}
-
-//
-// End of "$Id: Fl_get_key_mac.cxx 8624 2011-04-26 17:28:10Z manolo $".
-//
diff --git a/common/fltk/src/Fl_get_key_win32.cxx b/common/fltk/src/Fl_get_key_win32.cxx
deleted file mode 100644
index e935a2e..0000000
--- a/common/fltk/src/Fl_get_key_win32.cxx
+++ /dev/null
@@ -1,138 +0,0 @@
-//
-// "$Id: Fl_get_key_win32.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $"
-//
-// WIN32 keyboard state routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Return the current state of a key.  Keys are named by fltk symbols,
-// which are actually X keysyms.  So this has to translate to MSWindows
-// VK_x symbols.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-// convert an Fltk (X) keysym to a MSWindows VK symbol:
-// See also the inverse converter in Fl_win32.cxx
-// This table is in numeric order by Fltk symbol order for binary search:
-
-static const struct {unsigned short vk, fltk;} vktab[] = {
-  {VK_SPACE,	' '},
-  {'1',		'!'},
-  {0xde,	'\"'},
-  {'3',		'#'},
-  {'4',		'$'},
-  {'5',		'%'},
-  {'7',		'&'},
-  {0xde,	'\''},
-  {'9',		'('},
-  {'0',		')'},
-  {'8',		'*'},
-  {0xbb,	'+'},
-  {0xbc,	','},
-  {0xbd,	'-'},
-  {0xbe,	'.'},
-  {0xbf,	'/'},
-  {0xba,	':'},
-  {0xba,	';'},
-  {0xbc,	'<'},
-  {0xbb,	'='},
-  {0xbe,	'>'},
-  {0xbf,	'?'},
-  {'2',		'@'},
-  {0xdb,	'['},
-  {0xdc,	'\\'},
-  {0xdd,	']'},
-  {'6',		'^'},
-  {0xbd,	'_'},
-  {0xc0,	'`'},
-  {0xdb,	'{'},
-  {0xdc,	'|'},
-  {0xdd,	'}'},
-  {0xc0,	'~'},
-  {VK_BACK,	FL_BackSpace},
-  {VK_TAB,	FL_Tab},
-  {VK_CLEAR,	0xff0b/*XK_Clear*/},
-  {VK_RETURN,	FL_Enter},
-  {VK_PAUSE,	FL_Pause},
-  {VK_SCROLL,	FL_Scroll_Lock},
-  {VK_ESCAPE,	FL_Escape},
-  {VK_HOME,	FL_Home},
-  {VK_LEFT,	FL_Left},
-  {VK_UP,	FL_Up},
-  {VK_RIGHT,	FL_Right},
-  {VK_DOWN,	FL_Down},
-  {VK_PRIOR,	FL_Page_Up},
-  {VK_NEXT,	FL_Page_Down},
-  {VK_END,	FL_End},
-  {VK_SNAPSHOT,	FL_Print},
-  {VK_INSERT,	FL_Insert},
-  {VK_APPS,	FL_Menu},
-  {VK_NUMLOCK,	FL_Num_Lock},
-//{VK_???,	FL_KP_Enter},
-  {VK_MULTIPLY,	FL_KP+'*'},
-  {VK_ADD,	FL_KP+'+'},
-  {VK_SUBTRACT,	FL_KP+'-'},
-  {VK_DECIMAL,	FL_KP+'.'},
-  {VK_DIVIDE,	FL_KP+'/'},
-  {VK_LSHIFT,	FL_Shift_L},
-  {VK_RSHIFT,	FL_Shift_R},
-  {VK_LCONTROL,	FL_Control_L},
-  {VK_RCONTROL,	FL_Control_R},
-  {VK_CAPITAL,	FL_Caps_Lock},
-  {VK_LWIN,	FL_Meta_L},
-  {VK_RWIN,	FL_Meta_R},
-  {VK_LMENU,	FL_Alt_L},
-  {VK_RMENU,	FL_Alt_R},
-  {VK_DELETE,	FL_Delete}
-};
-
-static int fltk2ms(int fltk) {
-  if (fltk >= '0' && fltk <= '9') return fltk;
-  if (fltk >= 'A' && fltk <= 'Z') return fltk;
-  if (fltk >= 'a' && fltk <= 'z') return fltk-('a'-'A');
-  if (fltk > FL_F && fltk <= FL_F+16) return fltk-(FL_F-(VK_F1-1));
-  if (fltk >= FL_KP+'0' && fltk<=FL_KP+'9') return fltk-(FL_KP+'0'-VK_NUMPAD0);
-  int a = 0;
-  int b = sizeof(vktab)/sizeof(*vktab);
-  while (a < b) {
-    int c = (a+b)/2;
-    if (vktab[c].fltk == fltk) return vktab[c].vk;
-    if (vktab[c].fltk < fltk) a = c+1; else b = c;
-  }
-  return 0;
-}
-
-int Fl::event_key(int k) {
-  return GetKeyState(fltk2ms(k))&~1;
-}
-
-int Fl::get_key(int k) {
-  uchar foo[256];
-  GetKeyboardState(foo);
-  return foo[fltk2ms(k)]&~1;
-}
-
-//
-// End of "$Id: Fl_get_key_win32.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $".
-//
diff --git a/common/fltk/src/Fl_get_system_colors.cxx b/common/fltk/src/Fl_get_system_colors.cxx
deleted file mode 100644
index 35e9a9f..0000000
--- a/common/fltk/src/Fl_get_system_colors.cxx
+++ /dev/null
@@ -1,426 +0,0 @@
-//
-// "$Id: Fl_get_system_colors.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// System color support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/math.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Tiled_Image.H>
-#include "tile.xpm"
-
-#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
-// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
-// on Windows, which is supposed to be POSIX compliant...
-#  define putenv _putenv
-#endif // WIN32 && !__CYGWIN__
-
-static char	fl_bg_set = 0;
-static char	fl_bg2_set = 0;
-static char	fl_fg_set = 0;
-
-/**
-    Changes fl_color(FL_BACKGROUND_COLOR) to the given color, 
-    and changes the gray ramp from 32 to 56 to black to white.  These are 
-    the colors used as backgrounds by almost all widgets and used to draw 
-    the edges of all the boxtypes.
-*/
-void Fl::background(uchar r, uchar g, uchar b) {
-  fl_bg_set = 1;
-
-  // replace the gray ramp so that FL_GRAY is this color
-  if (!r) r = 1; else if (r==255) r = 254;
-  double powr = log(r/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  if (!g) g = 1; else if (g==255) g = 254;
-  double powg = log(g/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  if (!b) b = 1; else if (b==255) b = 254;
-  double powb = log(b/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  for (int i = 0; i < FL_NUM_GRAY; i++) {
-    double gray = i/(FL_NUM_GRAY-1.0);
-    Fl::set_color(fl_gray_ramp(i),
-		  uchar(pow(gray,powr)*255+.5),
-		  uchar(pow(gray,powg)*255+.5),
-		  uchar(pow(gray,powb)*255+.5));
-  }
-}
-/** Changes fl_color(FL_FOREGROUND_COLOR). */
-void Fl::foreground(uchar r, uchar g, uchar b) {
-  fl_fg_set = 1;
-
-  Fl::set_color(FL_FOREGROUND_COLOR,r,g,b);
-}
-
-/**
-    Changes the alternative background color. This color is used as a 
-    background by Fl_Input and other text widgets.
-    <P>This call may change fl_color(FL_FOREGROUND_COLOR) if it 
-    does not provide sufficient contrast to FL_BACKGROUND2_COLOR.
-*/
-void Fl::background2(uchar r, uchar g, uchar b) {
-  fl_bg2_set = 1;
-
-  Fl::set_color(FL_BACKGROUND2_COLOR,r,g,b);
-  Fl::set_color(FL_FOREGROUND_COLOR,
-                get_color(fl_contrast(FL_FOREGROUND_COLOR,FL_BACKGROUND2_COLOR)));
-}
-
-// these are set by Fl::args() and override any system colors:
-const char *fl_fg = NULL;
-const char *fl_bg = NULL;
-const char *fl_bg2 = NULL;
-
-static void set_selection_color(uchar r, uchar g, uchar b) {
-  Fl::set_color(FL_SELECTION_COLOR,r,g,b);
-}
-
-#if defined(WIN32) || defined(__APPLE__)
-
-#  include <stdio.h>
-// simulation of XParseColor:
-int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b) {
-  if (*p == '#') p++;
-  int n = strlen(p);
-  int m = n/3;
-  const char *pattern = 0;
-  switch(m) {
-  case 1: pattern = "%1x%1x%1x"; break;
-  case 2: pattern = "%2x%2x%2x"; break;
-  case 3: pattern = "%3x%3x%3x"; break;
-  case 4: pattern = "%4x%4x%4x"; break;
-  default: return 0;
-  }
-  int R,G,B; if (sscanf(p,pattern,&R,&G,&B) != 3) return 0;
-  switch(m) {
-  case 1: R *= 0x11; G *= 0x11; B *= 0x11; break;
-  case 3: R >>= 4; G >>= 4; B >>= 4; break;
-  case 4: R >>= 8; G >>= 8; B >>= 8; break;
-  }
-  r = (uchar)R; g = (uchar)G; b = (uchar)B;
-  return 1;
-}
-#else
-// Wrapper around XParseColor...
-int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b) {
-  XColor x;
-  if (!fl_display) fl_open_display();
-  if (XParseColor(fl_display, fl_colormap, p, &x)) {
-    r = (uchar)(x.red>>8);
-    g = (uchar)(x.green>>8);
-    b = (uchar)(x.blue>>8);
-    return 1;
-  } else return 0;
-}
-#endif // WIN32 || __APPLE__
-/** \fn Fl::get_system_colors()
-    Read the user preference colors from the system and use them to call
-    Fl::foreground(), Fl::background(), and 
-    Fl::background2().  This is done by
-    Fl_Window::show(argc,argv) before applying the -fg and -bg
-    switches.
-    
-    <P>On X this reads some common values from the Xdefaults database.
-    KDE users can set these values by running the "krdb" program, and
-    newer versions of KDE set this automatically if you check the "apply
-    style to other X programs" switch in their control panel.
-*/
-#if defined(WIN32)
-static void
-getsyscolor(int what, const char* arg, void (*func)(uchar,uchar,uchar))
-{
-  if (arg) {
-    uchar r,g,b;
-    if (!fl_parse_color(arg, r,g,b))
-      Fl::error("Unknown color: %s", arg);
-    else
-      func(r,g,b);
-  } else {
-    DWORD x = GetSysColor(what);
-    func(uchar(x&255), uchar(x>>8), uchar(x>>16));
-  }
-}
-
-void Fl::get_system_colors() {
-  if (!fl_bg2_set) getsyscolor(COLOR_WINDOW,	fl_bg2,Fl::background2);
-  if (!fl_fg_set) getsyscolor(COLOR_WINDOWTEXT,	fl_fg, Fl::foreground);
-  if (!fl_bg_set) getsyscolor(COLOR_BTNFACE,	fl_bg, Fl::background);
-  getsyscolor(COLOR_HIGHLIGHT,	0,     set_selection_color);
-}
-
-#elif defined(__APPLE__)
-// MacOS X currently supports two color schemes - Blue and Graphite.
-// Since we aren't emulating the Aqua interface (even if Apple would
-// let us), we use some defaults that are similar to both.  The
-// Fl::scheme("plastic") color/box scheme provides a usable Aqua-like
-// look-n-feel...
-void Fl::get_system_colors()
-{
-  fl_open_display();
-
-  if (!fl_bg2_set) background2(0xff, 0xff, 0xff);
-  if (!fl_fg_set) foreground(0, 0, 0);
-  if (!fl_bg_set) background(0xd8, 0xd8, 0xd8);
-  
-#if 0 
-  // this would be the correct code, but it does not run on all versions
-  // of OS X. Also, setting a bright selection color would require 
-  // some updates in Fl_Adjuster and Fl_Help_Browser
-  OSStatus err;
-  RGBColor c;
-  err = GetThemeBrushAsColor(kThemeBrushPrimaryHighlightColor, 24, true, &c);
-  if (err)
-    set_selection_color(0x00, 0x00, 0x80);
-  else
-    set_selection_color(c.red, c.green, c.blue);
-#else
-  set_selection_color(0x00, 0x00, 0x80);
-#endif
-}
-#else
-
-// Read colors that KDE writes to the xrdb database.
-
-// XGetDefault does not do the expected thing: it does not like
-// periods in either word. Therefore it cannot match class.Text.background.
-// However *.Text.background is matched by pretending the program is "Text".
-// But this will also match *.background if there is no *.Text.background
-// entry, requiring users to put in both (unless they want the text fields
-// the same color as the windows).
-
-static void
-getsyscolor(const char *key1, const char* key2, const char *arg, const char *defarg, void (*func)(uchar,uchar,uchar))
-{
-  if (!arg) {
-    arg = XGetDefault(fl_display, key1, key2);
-    if (!arg) arg = defarg;
-  }
-  XColor x;
-  if (!XParseColor(fl_display, fl_colormap, arg, &x))
-    Fl::error("Unknown color: %s", arg);
-  else
-    func(x.red>>8, x.green>>8, x.blue>>8);
-}
-
-void Fl::get_system_colors()
-{
-  fl_open_display();
-  const char* key1 = 0;
-  if (Fl::first_window()) key1 = Fl::first_window()->xclass();
-  if (!key1) key1 = "fltk";
-  if (!fl_bg2_set) getsyscolor("Text","background",	fl_bg2,	"#ffffff", Fl::background2);
-  if (!fl_fg_set) getsyscolor(key1,  "foreground",	fl_fg,	"#000000", Fl::foreground);
-  if (!fl_bg_set) getsyscolor(key1,  "background",	fl_bg,	"#c0c0c0", Fl::background);
-  getsyscolor("Text", "selectBackground", 0, "#000080", set_selection_color);
-}
-
-#endif
-
-
-//// Simple implementation of 2.0 Fl::scheme() interface...
-#define D1 BORDER_WIDTH
-#define D2 (BORDER_WIDTH+BORDER_WIDTH)
-
-extern void	fl_up_box(int, int, int, int, Fl_Color);
-extern void	fl_down_box(int, int, int, int, Fl_Color);
-extern void	fl_thin_up_box(int, int, int, int, Fl_Color);
-extern void	fl_thin_down_box(int, int, int, int, Fl_Color);
-extern void	fl_round_up_box(int, int, int, int, Fl_Color);
-extern void	fl_round_down_box(int, int, int, int, Fl_Color);
-
-extern void	fl_up_frame(int, int, int, int, Fl_Color);
-extern void	fl_down_frame(int, int, int, int, Fl_Color);
-extern void	fl_thin_up_frame(int, int, int, int, Fl_Color);
-extern void	fl_thin_down_frame(int, int, int, int, Fl_Color);
-
-#ifndef FL_DOXYGEN
-const char	*Fl::scheme_ = (const char *)0;	    // current scheme 
-Fl_Image	*Fl::scheme_bg_ = (Fl_Image *)0;    // current background image for the scheme
-#endif
-
-static Fl_Pixmap	tile(tile_xpm);
-
-/**
-    Gets or sets the current widget scheme. NULL will use
-    the scheme defined in the FLTK_SCHEME environment
-    variable or the scheme resource under X11. Otherwise,
-    any of the following schemes can be used:</P>
-    
-    <ul>
-    
-    	<li>"none" - This is the default look-n-feel which resembles old
-    	Windows (95/98/Me/NT/2000) and old GTK/KDE</li>
-    
-    	<li>"plastic" - This scheme is inspired by the Aqua user interface
-    	on Mac OS X</li>
-    
-    	<li>"gtk+" - This scheme is inspired by the Red Hat Bluecurve
-    	theme</li>
-    
-    </ul>
-*/
-int Fl::scheme(const char *s) {
-  if (!s) {
-    if ((s = getenv("FLTK_SCHEME")) == NULL) {
-#if !defined(WIN32) && !defined(__APPLE__)
-      const char* key = 0;
-      if (Fl::first_window()) key = Fl::first_window()->xclass();
-      if (!key) key = "fltk";
-      fl_open_display();
-      s = XGetDefault(fl_display, key, "scheme");
-#endif // !WIN32 && !__APPLE__
-    }
-  }
-
-  if (s) {
-    if (!strcasecmp(s, "none") || !strcasecmp(s, "base") || !*s) s = 0;
-    else s = strdup(s);
-  }
-  if (scheme_) free((void*)scheme_);
-  scheme_ = s;
-
-  // Save the new scheme in the FLTK_SCHEME env var so that child processes
-  // inherit it...
-  static char e[1024];
-  strcpy(e,"FLTK_SCHEME=");
-  if (s) strlcat(e,s,sizeof(e));
-  putenv(e);
-
-  // Load the scheme...
-  return reload_scheme();
-}
-
-int Fl::reload_scheme() {
-  Fl_Window *win;
-
-  if (scheme_ && !strcasecmp(scheme_, "plastic")) {
-    // Update the tile image to match the background color...
-    uchar r, g, b;
-    int nr, ng, nb;
-    int i;
-//    static uchar levels[3] = { 0xff, 0xef, 0xe8 };
-    // OSX 10.3 and higher use a background with less contrast...
-    static uchar levels[3] = { 0xff, 0xf8, 0xf4 };
-
-    get_color(FL_GRAY, r, g, b);
-
-//    printf("FL_GRAY = 0x%02x 0x%02x 0x%02x\n", r, g, b);
-
-    for (i = 0; i < 3; i ++) {
-      nr = levels[i] * r / 0xe8;
-      if (nr > 255) nr = 255;
-
-      ng = levels[i] * g / 0xe8;
-      if (ng > 255) ng = 255;
-
-      nb = levels[i] * b / 0xe8;
-      if (nb > 255) nb = 255;
-
-      sprintf(tile_cmap[i], "%c c #%02x%02x%02x", "Oo."[i], nr, ng, nb);
-//      puts(tile_cmap[i]);
-    }
-
-    tile.uncache();
-
-    if (!scheme_bg_) scheme_bg_ = new Fl_Tiled_Image(&tile, w(), h());
-
-    // Load plastic buttons, etc...
-    set_boxtype(FL_UP_FRAME,        FL_PLASTIC_UP_FRAME);
-    set_boxtype(FL_DOWN_FRAME,      FL_PLASTIC_DOWN_FRAME);
-    set_boxtype(FL_THIN_UP_FRAME,   FL_PLASTIC_UP_FRAME);
-    set_boxtype(FL_THIN_DOWN_FRAME, FL_PLASTIC_DOWN_FRAME);
-
-    set_boxtype(FL_UP_BOX,          FL_PLASTIC_UP_BOX);
-    set_boxtype(FL_DOWN_BOX,        FL_PLASTIC_DOWN_BOX);
-    set_boxtype(FL_THIN_UP_BOX,     FL_PLASTIC_THIN_UP_BOX);
-    set_boxtype(FL_THIN_DOWN_BOX,   FL_PLASTIC_THIN_DOWN_BOX);
-    set_boxtype(_FL_ROUND_UP_BOX,   FL_PLASTIC_ROUND_UP_BOX);
-    set_boxtype(_FL_ROUND_DOWN_BOX, FL_PLASTIC_ROUND_DOWN_BOX);
-
-    // Use standard size scrollbars...
-    Fl::scrollbar_size(16);
-  } else if (scheme_ && !strcasecmp(scheme_, "gtk+")) {
-    // Use a GTK+ inspired look-n-feel...
-    if (scheme_bg_) {
-      delete scheme_bg_;
-      scheme_bg_ = (Fl_Image *)0;
-    }
-
-    set_boxtype(FL_UP_FRAME,        FL_GTK_UP_FRAME);
-    set_boxtype(FL_DOWN_FRAME,      FL_GTK_DOWN_FRAME);
-    set_boxtype(FL_THIN_UP_FRAME,   FL_GTK_THIN_UP_FRAME);
-    set_boxtype(FL_THIN_DOWN_FRAME, FL_GTK_THIN_DOWN_FRAME);
-
-    set_boxtype(FL_UP_BOX,          FL_GTK_UP_BOX);
-    set_boxtype(FL_DOWN_BOX,        FL_GTK_DOWN_BOX);
-    set_boxtype(FL_THIN_UP_BOX,     FL_GTK_THIN_UP_BOX);
-    set_boxtype(FL_THIN_DOWN_BOX,   FL_GTK_THIN_DOWN_BOX);
-    set_boxtype(_FL_ROUND_UP_BOX,   FL_GTK_ROUND_UP_BOX);
-    set_boxtype(_FL_ROUND_DOWN_BOX, FL_GTK_ROUND_DOWN_BOX);
-
-    // Use slightly thinner scrollbars...
-    Fl::scrollbar_size(15);
-  } else {
-    // Use the standard FLTK look-n-feel...
-    if (scheme_bg_) {
-      delete scheme_bg_;
-      scheme_bg_ = (Fl_Image *)0;
-    }
-
-    set_boxtype(FL_UP_FRAME,        fl_up_frame, D1, D1, D2, D2);
-    set_boxtype(FL_DOWN_FRAME,      fl_down_frame, D1, D1, D2, D2);
-    set_boxtype(FL_THIN_UP_FRAME,   fl_thin_up_frame, 1, 1, 2, 2);
-    set_boxtype(FL_THIN_DOWN_FRAME, fl_thin_down_frame, 1, 1, 2, 2);
-
-    set_boxtype(FL_UP_BOX,          fl_up_box, D1, D1, D2, D2);
-    set_boxtype(FL_DOWN_BOX,        fl_down_box, D1, D1, D2, D2);
-    set_boxtype(FL_THIN_UP_BOX,     fl_thin_up_box, 1, 1, 2, 2);
-    set_boxtype(FL_THIN_DOWN_BOX,   fl_thin_down_box, 1, 1, 2, 2);
-    set_boxtype(_FL_ROUND_UP_BOX,   fl_round_up_box, 3, 3, 6, 6);
-    set_boxtype(_FL_ROUND_DOWN_BOX, fl_round_down_box, 3, 3, 6, 6);
-
-    // Use standard size scrollbars...
-    Fl::scrollbar_size(16);
-  }
-
-  // Set (or clear) the background tile for all windows...
-  for (win = first_window(); win; win = next_window(win)) {
-    win->labeltype(scheme_bg_ ? FL_NORMAL_LABEL : FL_NO_LABEL);
-    win->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-    win->image(scheme_bg_);
-    win->redraw();
-  }
-
-  return 1;
-}
-
-
-//
-// End of "$Id: Fl_get_system_colors.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_grab.cxx b/common/fltk/src/Fl_grab.cxx
deleted file mode 100644
index 38724bd..0000000
--- a/common/fltk/src/Fl_grab.cxx
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// "$Id: Fl_grab.cxx 8055 2010-12-18 22:31:01Z manolo $"
-//
-// Grab/release code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-////////////////////////////////////////////////////////////////
-// "Grab" is done while menu systems are up.  This has several effects:
-// Events are all sent to the "grab window", which does not even
-// have to be displayed (and in the case of Fl_Menu.cxx it isn't).
-// The system is also told to "grab" events and send them to this app.
-// This also modifies how Fl_Window::show() works, on X it turns on
-// override_redirect, it does similar things on WIN32.
-
-extern void fl_fix_focus(); // in Fl.cxx
-void fl_update_focus(void);
-
-#ifdef WIN32
-// We have to keep track of whether we have captured the mouse, since
-// MSWindows shows little respect for this... Grep for fl_capture to
-// see where and how this is used.
-extern HWND fl_capture;
-#endif
-
-#ifdef __APPLE__
-extern void *fl_capture;
-#endif
-
-#if !(defined(WIN32) || defined(__APPLE__))
-extern int ewmh_supported(); // from Fl_x.cxx
-#endif
-
-void Fl::grab(Fl_Window* win) {
-    Fl_Window *fullscreen_win = NULL;
-    for (Fl_Window *W = Fl::first_window(); W; W = Fl::next_window(W)) {
-      if (W->fullscreen_active()) {
-        fullscreen_win = W;
-        break;
-      }
-    }
-
-  if (win) {
-    if (!grab_) {
-#ifdef WIN32
-      SetActiveWindow(fl_capture = fl_xid(first_window()));
-      SetCapture(fl_capture);
-#elif defined(__APPLE__)
-      fl_capture = Fl_X::i(first_window())->xid;
-      Fl_X::i(first_window())->set_key_window();
-#else
-      Window xid = fullscreen_win ? fl_xid(fullscreen_win) : fl_xid(first_window());
-      XGrabPointer(fl_display,
-		   xid,
-		   1,
-		   ButtonPressMask|ButtonReleaseMask|
-		   ButtonMotionMask|PointerMotionMask,
-		   GrabModeAsync,
-		   GrabModeAsync, 
-		   None,
-		   0,
-		   fl_event_time);
-      XGrabKeyboard(fl_display,
-		    xid,
-		    1,
-		    GrabModeAsync,
-		    GrabModeAsync, 
-		    fl_event_time);
-#endif
-    }
-    grab_ = win;
-    fl_update_focus();
-  } else {
-    if (grab_) {
-#ifdef WIN32
-      fl_capture = 0;
-      ReleaseCapture();
-#elif defined(__APPLE__)
-      fl_capture = 0;
-#else
-      // We must keep the grab in the non-EWMH fullscreen case
-      if (!fullscreen_win || ewmh_supported()) {
-      XUngrabKeyboard(fl_display, fl_event_time);
-      }
-      XUngrabPointer(fl_display, fl_event_time);
-      // this flush is done in case the picked menu item goes into
-      // an infinite loop, so we don't leave the X server locked up:
-      XFlush(fl_display);
-#endif
-      grab_ = 0;
-      fl_update_focus();
-      fl_fix_focus();
-    }
-  }
-}
-
-//
-// End of "$Id: Fl_grab.cxx 8055 2010-12-18 22:31:01Z manolo $".
-//
diff --git a/common/fltk/src/Fl_lock.cxx b/common/fltk/src/Fl_lock.cxx
deleted file mode 100644
index e95bceb..0000000
--- a/common/fltk/src/Fl_lock.cxx
+++ /dev/null
@@ -1,418 +0,0 @@
-//
-// "$Id: Fl_lock.cxx 8393 2011-02-06 19:46:11Z manolo $"
-//
-// Multi-threading support code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-#include <FL/Fl.H>
-#include <config.h>
-
-#include <stdlib.h>
-
-/*
-   From Bill:
-
-   I would prefer that FLTK contain the minimal amount of extra
-   stuff for doing threads.  There are other portable thread
-   wrapper libraries out there and FLTK should not be providing
-   another.  This file is an attempt to make minimal additions
-   and make them self-contained in this source file.
-
-   From Mike:
-
-   Starting with 1.1.8, we now have a callback so that you can
-   process awake() messages as they come in.
-
-
-   The API:
-
-   Fl::lock() - recursive lock.  You must call this before the
-   first call to Fl::wait()/run() to initialize the thread
-   system. The lock is locked all the time except when
-   Fl::wait() is waiting for events.
-
-   Fl::unlock() - release the recursive lock.
-
-   Fl::awake(void*) - Causes Fl::wait() to return (with the lock
-   locked) even if there are no events ready.
-
-   Fl::awake(void (*cb)(void *), void*) - Call a function
-   in the main thread from within another thread of execution.
-
-   Fl::thread_message() - returns an argument sent to an
-   Fl::awake() call, or returns NULL if none.  WARNING: the
-   current implementation only has a one-entry queue and only
-   returns the most recent value!
-*/
-
-#ifndef FL_DOXYGEN
-Fl_Awake_Handler *Fl::awake_ring_;
-void **Fl::awake_data_;
-int Fl::awake_ring_size_;
-int Fl::awake_ring_head_;
-int Fl::awake_ring_tail_;
-#endif
-
-static const int AWAKE_RING_SIZE = 1024;
-static void lock_ring();
-static void unlock_ring();
-
-
-/** Adds an awake handler for use in awake(). */
-int Fl::add_awake_handler_(Fl_Awake_Handler func, void *data)
-{
-  int ret = 0;
-  lock_ring();
-  if (!awake_ring_) {
-    awake_ring_size_ = AWAKE_RING_SIZE;
-    awake_ring_ = (Fl_Awake_Handler*)malloc(awake_ring_size_*sizeof(Fl_Awake_Handler));
-    awake_data_ = (void**)malloc(awake_ring_size_*sizeof(void*));
-  }
-  if (awake_ring_head_==awake_ring_tail_-1 || awake_ring_head_+1==awake_ring_tail_) {
-    // ring is full. Return -1 as an error indicator.
-    ret = -1;
-  } else {
-    awake_ring_[awake_ring_head_] = func;
-    awake_data_[awake_ring_head_] = data;
-    ++awake_ring_head_;
-    if (awake_ring_head_ == awake_ring_size_)
-      awake_ring_head_ = 0;
-  }
-  unlock_ring();
-  return ret;
-}
-/** Gets the last stored awake handler for use in awake(). */
-int Fl::get_awake_handler_(Fl_Awake_Handler &func, void *&data)
-{
-  int ret = 0;
-  lock_ring();
-  if (!awake_ring_ || awake_ring_head_ == awake_ring_tail_) {
-    ret = -1;
-  } else {
-    func = awake_ring_[awake_ring_tail_];
-    data = awake_data_[awake_ring_tail_];
-    ++awake_ring_tail_;
-    if (awake_ring_tail_ == awake_ring_size_)
-      awake_ring_tail_ = 0;
-  }
-  unlock_ring();
-  return ret;
-}
-
-/**
- Let the main thread know an update is pending and have it call a specific function.
- Registers a function that will be 
- called by the main thread during the next message handling cycle. 
- Returns 0 if the callback function was registered, 
- and -1 if registration failed. Over a thousand awake callbacks can be
- registered simultaneously.
- 
- \see Fl::awake(void* message=0)
-*/
-int Fl::awake(Fl_Awake_Handler func, void *data) {
-  int ret = add_awake_handler_(func, data);
-  Fl::awake();
-  return ret;
-}
-
-////////////////////////////////////////////////////////////////
-// Windows threading...
-/** \fn int Fl::lock()
-    The lock() method blocks the current thread until it
-    can safely access FLTK widgets and data. Child threads should
-    call this method prior to updating any widgets or accessing
-    data. The main thread must call lock() to initialize
-    the threading support in FLTK. lock() will return non-zero
-    if threading is not available on the platform.
-    
-    Child threads must call unlock() when they are done
-    accessing FLTK.
-    
-    When the wait() method is waiting
-    for input or timeouts, child threads are given access to FLTK.
-    Similarly, when the main thread needs to do processing, it will
-    wait until all child threads have called unlock() before processing
-    additional data.
- 
-    \return 0 if threading is available on the platform; non-zero
-    otherwise.
-    
-    See also: \ref advanced_multithreading
-*/
-/** \fn void Fl::unlock()
-    The unlock() method releases the lock that was set
-    using the lock() method. Child
-    threads should call this method as soon as they are finished
-    accessing FLTK.
-    
-    See also: \ref advanced_multithreading
-*/
-/** \fn void Fl::awake(void* msg)
-    Sends a message pointer to the main thread, 
-    causing any pending Fl::wait() call to 
-    terminate so that the main thread can retrieve the message and any pending 
-    redraws can be processed.
-    
-    Multiple calls to Fl::awake() will queue multiple pointers 
-    for the main thread to process, up to a system-defined (typically several 
-    thousand) depth. The default message handler saves the last message which 
-    can be accessed using the 
-    Fl::thread_message() function.
-
-    In the context of a threaded application, a call to Fl::awake() with no
-    argument will trigger event loop handling in the main thread. Since
-    it is not possible to call Fl::flush() from a subsidiary thread,
-    Fl::awake() is the best (and only, really) substitute.
-    
-    See also: \ref advanced_multithreading
-*/
-#ifdef WIN32
-#  include <windows.h>
-#  include <process.h>
-#  include <FL/x.H>
-
-// These pointers are in Fl_win32.cxx:
-extern void (*fl_lock_function)();
-extern void (*fl_unlock_function)();
-
-// The main thread's ID
-static DWORD main_thread;
-
-// Microsoft's version of a MUTEX...
-CRITICAL_SECTION cs;
-CRITICAL_SECTION *cs_ring;
-
-void unlock_ring() {
-  LeaveCriticalSection(cs_ring);
-}
-
-void lock_ring() {
-  if (!cs_ring) {
-    cs_ring = (CRITICAL_SECTION*)malloc(sizeof(CRITICAL_SECTION));
-    InitializeCriticalSection(cs_ring);
-  }
-  EnterCriticalSection(cs_ring);
-}
-
-//
-// 'unlock_function()' - Release the lock.
-//
-
-static void unlock_function() {
-  LeaveCriticalSection(&cs);
-}
-
-//
-// 'lock_function()' - Get the lock.
-//
-
-static void lock_function() {
-  EnterCriticalSection(&cs);
-}
-
-int Fl::lock() {
-  if (!main_thread) InitializeCriticalSection(&cs);
-
-  lock_function();
-
-  if (!main_thread) {
-    fl_lock_function   = lock_function;
-    fl_unlock_function = unlock_function;
-    main_thread        = GetCurrentThreadId();
-  }
-  return 0;
-}
-
-void Fl::unlock() {
-  unlock_function();
-}
-
-void Fl::awake(void* msg) {
-  PostThreadMessage( main_thread, fl_wake_msg, (WPARAM)msg, 0);
-}
-
-////////////////////////////////////////////////////////////////
-// POSIX threading...
-#elif HAVE_PTHREAD
-#  include <unistd.h>
-#  include <fcntl.h>
-#  include <pthread.h>
-
-// Pipe for thread messaging via Fl::awake()...
-static int thread_filedes[2];
-
-// Mutex and state information for Fl::lock() and Fl::unlock()...
-static pthread_mutex_t fltk_mutex;
-static pthread_t owner;
-static int counter;
-
-static void lock_function_init_std() {
-  pthread_mutex_init(&fltk_mutex, NULL);
-}
-
-static void lock_function_std() {
-  if (!counter || owner != pthread_self()) {
-    pthread_mutex_lock(&fltk_mutex);
-    owner = pthread_self();
-  }
-  counter++;
-}
-
-static void unlock_function_std() {
-  if (!--counter) pthread_mutex_unlock(&fltk_mutex);
-}
-
-#  ifdef PTHREAD_MUTEX_RECURSIVE
-static bool lock_function_init_rec() {
-  pthread_mutexattr_t attrib;
-  pthread_mutexattr_init(&attrib);
-  if (pthread_mutexattr_settype(&attrib, PTHREAD_MUTEX_RECURSIVE)) {
-    pthread_mutexattr_destroy(&attrib);
-    return true;
-  }
-
-  pthread_mutex_init(&fltk_mutex, &attrib);
-  return false;
-}
-
-static void lock_function_rec() {
-  pthread_mutex_lock(&fltk_mutex);
-}
-
-static void unlock_function_rec() {
-  pthread_mutex_unlock(&fltk_mutex);
-}
-#  endif // PTHREAD_MUTEX_RECURSIVE
-
-void Fl::awake(void* msg) {
-  if (write(thread_filedes[1], &msg, sizeof(void*))==0) { /* ignore */ }
-}
-
-static void* thread_message_;
-void* Fl::thread_message() {
-  void* r = thread_message_;
-  thread_message_ = 0;
-  return r;
-}
-
-static void thread_awake_cb(int fd, void*) {
-  if (read(fd, &thread_message_, sizeof(void*))==0) { 
-    /* This should never happen */
-  }
-  Fl_Awake_Handler func;
-  void *data;
-  while (Fl::get_awake_handler_(func, data)==0) {
-    (*func)(data);
-  }
-}
-
-// These pointers are in Fl_x.cxx:
-extern void (*fl_lock_function)();
-extern void (*fl_unlock_function)();
-
-int Fl::lock() {
-  if (!thread_filedes[1]) {
-    // Initialize thread communication pipe to let threads awake FLTK
-    // from Fl::wait()
-    if (pipe(thread_filedes)==-1) {
-      /* this should not happen */
-    }
-
-    // Make the write side of the pipe non-blocking to avoid deadlock
-    // conditions (STR #1537)
-    fcntl(thread_filedes[1], F_SETFL,
-          fcntl(thread_filedes[1], F_GETFL) | O_NONBLOCK);
-
-    // Monitor the read side of the pipe so that messages sent via
-    // Fl::awake() from a thread will "wake up" the main thread in
-    // Fl::wait().
-    Fl::add_fd(thread_filedes[0], FL_READ, thread_awake_cb);
-
-    // Set lock/unlock functions for this system, using a system-supplied
-    // recursive mutex if supported...
-#  ifdef PTHREAD_MUTEX_RECURSIVE
-    if (!lock_function_init_rec()) {
-      fl_lock_function   = lock_function_rec;
-      fl_unlock_function = unlock_function_rec;
-    } else {
-#  endif // PTHREAD_MUTEX_RECURSIVE
-      lock_function_init_std();
-      fl_lock_function   = lock_function_std;
-      fl_unlock_function = unlock_function_std;
-#  ifdef PTHREAD_MUTEX_RECURSIVE
-    }
-#  endif // PTHREAD_MUTEX_RECURSIVE
-  }
-
-  fl_lock_function();
-  return 0;
-}
-
-void Fl::unlock() {
-  fl_unlock_function();
-}
-
-// Mutex code for the awake ring buffer
-static pthread_mutex_t *ring_mutex;
-
-void unlock_ring() {
-  pthread_mutex_unlock(ring_mutex);
-}
-
-void lock_ring() {
-  if (!ring_mutex) {
-    ring_mutex = (pthread_mutex_t*)malloc(sizeof(pthread_mutex_t));
-    pthread_mutex_init(ring_mutex, NULL);
-  }
-  pthread_mutex_lock(ring_mutex);
-}
-
-#else
-
-void unlock_ring() {
-}
-
-void lock_ring() {
-}
-
-void Fl::awake(void*) {
-}
-
-int Fl::lock() {
-  return 1;
-}
-
-void Fl::unlock() {
-}
-
-void* Fl::thread_message() {
-  return NULL;
-}
-
-#endif // WIN32
-
-//
-// End of "$Id: Fl_lock.cxx 8393 2011-02-06 19:46:11Z manolo $".
-//
diff --git a/common/fltk/src/Fl_mac.cxx b/common/fltk/src/Fl_mac.cxx
deleted file mode 100644
index 38c0f21..0000000
--- a/common/fltk/src/Fl_mac.cxx
+++ /dev/null
@@ -1,2870 +0,0 @@
-//
-// "$Id: Fl_mac.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $"
-//
-// MacOS specific code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//// From the inner edge of a MetroWerks CodeWarrior CD:
-// (without permission)
-//
-// "Three Compiles for 68Ks under the sky,
-// Seven Compiles for PPCs in their fragments of code,
-// Nine Compiles for Mortal Carbon doomed to die,
-// One Compile for Mach-O Cocoa on its Mach-O throne,
-// in the Land of MacOS X where the Drop-Shadows lie.
-// 
-// One Compile to link them all, One Compile to merge them,
-// One Compile to copy them all and in the bundle bind them,
-// in the Land of MacOS X where the Drop-Shadows lie."
-
-// warning: the Apple Quartz version still uses some Quickdraw calls,
-//          mostly to get around the single active context in QD and 
-//          to implement clipping. This should be changed into pure
-//          Quartz calls in the near future.
-
-// FIXME moving away from Carbon, I am replacing the Scrap manager calls with Pasteboard
-//       calls that support utf8 encoding. As soon as these function haven proven working
-//       the Scrap manager calls should be removed
-#define USE_PASTEBOARD 1
-
-// we don't need the following definition because we deliver only
-// true mouse moves.  On very slow systems however, this flag may
-// still be useful.
-#ifndef FL_DOXYGEN
-
-#define CONSOLIDATE_MOTION 0
-extern "C" {
-#include <pthread.h>
-}
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/Fl_Sys_Menu_Bar.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-#include <unistd.h>
-
-// #define DEBUG_SELECT		// UNCOMMENT FOR SELECT()/THREAD DEBUGGING
-#ifdef DEBUG_SELECT
-#include <stdio.h>		// testing
-#define DEBUGMSG(msg)		if ( msg ) fprintf(stderr, msg);
-#define DEBUGPERRORMSG(msg)	if ( msg ) perror(msg)
-#define DEBUGTEXT(txt)		txt
-#else
-#define DEBUGMSG(msg)
-#define DEBUGPERRORMSG(msg)
-#define DEBUGTEXT(txt)		NULL
-#endif /*DEBUG_SELECT*/
-
-// external functions
-extern Fl_Window* fl_find(Window);
-extern void fl_fix_focus();
-
-// forward definition of functions in this file
-static void handleUpdateEvent( WindowPtr xid );
-//+ int fl_handle(const EventRecord &event);
-static int FSSpec2UnixPath( FSSpec *fs, char *dst );
-// converting cr lf converter function
-static void convert_crlf(char * string, size_t len);
-
-// public variables
-int fl_screen;
-CGContextRef fl_gc = 0;
-Handle fl_system_menu;
-Fl_Sys_Menu_Bar *fl_sys_menu_bar = 0;
-CursHandle fl_default_cursor;
-WindowRef fl_capture = 0;            // we need this to compensate for a missing(?) mouse capture
-ulong fl_event_time;                 // the last timestamp from an x event
-char fl_key_vector[32];              // used by Fl::get_key()
-bool fl_show_iconic;                 // true if called from iconize() - shows the next created window in collapsed state
-int fl_disable_transient_for;        // secret method of removing TRANSIENT_FOR
-const Fl_Window* fl_modal_for;       // parent of modal() window
-Fl_Region fl_window_region = 0;
-Window fl_window;
-Fl_Window *Fl_Window::current_;
-EventRef fl_os_event;		// last (mouse) event
-
-// forward declarations of variables in this file
-static int got_events = 0;
-static Fl_Window* resize_from_system;
-static CursPtr default_cursor_ptr;
-static Cursor default_cursor;
-static WindowRef fl_os_capture = 0; // the dispatch handler will redirect mose move and drag events to these windows
-
-#if CONSOLIDATE_MOTION
-static Fl_Window* send_motion;
-extern Fl_Window* fl_xmousewin;
-#endif
-
-enum { kEventClassFLTK = 'fltk' };
-enum { kEventFLTKBreakLoop = 1, kEventFLTKDataReady };
-
-/* fltk-utf8 placekeepers */
-void fl_reset_spot()
-{
-}
-
-void fl_set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win)
-{
-}
-
-void fl_set_status(int x, int y, int w, int h)
-{
-}
-
-/**
-* Mac keyboard lookup table
- */
-static unsigned short macKeyLookUp[128] =
-{
-    'a', 's', 'd', 'f', 'h', 'g', 'z', 'x',
-    'c', 'v', '^', 'b', 'q', 'w', 'e', 'r',
-
-    'y', 't', '1', '2', '3', '4', '6', '5',
-    '=', '9', '7', '-', '8', '0', ']', 'o',
-
-    'u', '[', 'i', 'p', FL_Enter, 'l', 'j', '\'',
-    'k', ';', '\\', ',', '/', 'n', 'm', '.',
-
-    FL_Tab, ' ', '`', FL_BackSpace, 
-    FL_KP_Enter, FL_Escape, 0, 0/*FL_Meta_L*/,
-    0/*FL_Shift_L*/, 0/*FL_Caps_Lock*/, 0/*FL_Alt_L*/, 0/*FL_Control_L*/, 
-    0/*FL_Shift_R*/, 0/*FL_Alt_R*/, 0/*FL_Control_R*/, 0,
-
-    0, FL_KP+'.', FL_Right, FL_KP+'*', 0, FL_KP+'+', FL_Left, FL_Delete,
-    FL_Down, 0, 0, FL_KP+'/', FL_KP_Enter, FL_Up, FL_KP+'-', 0,
-
-    0, FL_KP+'=', FL_KP+'0', FL_KP+'1', FL_KP+'2', FL_KP+'3', FL_KP+'4', FL_KP+'5',
-    FL_KP+'6', FL_KP+'7', 0, FL_KP+'8', FL_KP+'9', 0, 0, 0,
-
-    FL_F+5, FL_F+6, FL_F+7, FL_F+3, FL_F+8, FL_F+9, 0, FL_F+11,
-    0, 0/*FL_F+13*/, FL_Print, FL_Scroll_Lock, 0, FL_F+10, FL_Menu, FL_F+12,
-
-    0, FL_Pause, FL_Help, FL_Home, FL_Page_Up, FL_Delete, FL_F+4, FL_End,
-    FL_F+2, FL_Page_Down, FL_F+1, FL_Left, FL_Right, FL_Down, FL_Up, 0/*FL_Power*/,
-};
-
-/**
- * convert the current mouse chord into the FLTK modifier state
- */
-static unsigned int mods_to_e_state( UInt32 mods )
-{
-  long state = 0;
-  if ( mods & kEventKeyModifierNumLockMask ) state |= FL_NUM_LOCK;
-  if ( mods & cmdKey ) state |= FL_META;
-  if ( mods & (optionKey|rightOptionKey) ) state |= FL_ALT;
-  if ( mods & (controlKey|rightControlKey) ) state |= FL_CTRL;
-  if ( mods & (shiftKey|rightShiftKey) ) state |= FL_SHIFT;
-  if ( mods & alphaLock ) state |= FL_CAPS_LOCK;
-  unsigned int ret = ( Fl::e_state & 0xff000000 ) | state;
-  Fl::e_state = ret;
-  //printf( "State 0x%08x (%04x)\n", Fl::e_state, mods );
-  return ret;
-}
-
-
-/**
- * convert the current mouse chord into the FLTK keysym
- */
-static void mods_to_e_keysym( UInt32 mods )
-{
-  if ( mods & cmdKey ) Fl::e_keysym = FL_Meta_L;
-  else if ( mods & kEventKeyModifierNumLockMask ) Fl::e_keysym = FL_Num_Lock;
-  else if ( mods & optionKey ) Fl::e_keysym = FL_Alt_L;
-  else if ( mods & rightOptionKey ) Fl::e_keysym = FL_Alt_R;
-  else if ( mods & controlKey ) Fl::e_keysym = FL_Control_L;
-  else if ( mods & rightControlKey ) Fl::e_keysym = FL_Control_R;
-  else if ( mods & shiftKey ) Fl::e_keysym = FL_Shift_L;
-  else if ( mods & rightShiftKey ) Fl::e_keysym = FL_Shift_R;
-  else if ( mods & alphaLock ) Fl::e_keysym = FL_Caps_Lock;
-  else Fl::e_keysym = 0;
-  //printf( "to sym 0x%08x (%04x)\n", Fl::e_keysym, mods );
-}
-// these pointers are set by the Fl::lock() function:
-static void nothing() {}
-void (*fl_lock_function)() = nothing;
-void (*fl_unlock_function)() = nothing;
-
-//
-// Select interface -- how it's implemented:
-//     When the user app configures one or more file descriptors to monitor
-//     with Fl::add_fd(), we start a separate thread to select() the  data,
-//     sending a custom OSX 'FLTK data ready event' to the parent  thread's
-//     RunApplicationLoop(), so that it triggers the data  ready  callbacks
-//     in the parent thread.                               -erco 04/04/04
-//     
-#define POLLIN  1
-#define POLLOUT 4
-#define POLLERR 8
-
-// Class to handle select() 'data ready'
-class DataReady
-{
-    struct FD
-    {
-      int fd;
-      short events;
-      void (*cb)(int, void*);
-      void* arg;
-    };
-    int nfds, fd_array_size;
-    FD *fds;
-    pthread_t tid;		// select()'s thread id
-
-    // Data that needs to be locked (all start with '_')
-    pthread_mutex_t _datalock;	// data lock
-    fd_set _fdsets[3];		// r/w/x sets user wants to monitor
-    int _maxfd;			// max fd count to monitor
-    int _cancelpipe[2];		// pipe used to help cancel thread
-    void *_userdata;		// thread's userdata
-
-public:
-    DataReady()
-    {
-      nfds = 0;
-      fd_array_size = 0;
-      fds = 0;
-      tid = 0;
-
-      pthread_mutex_init(&_datalock, NULL);
-      FD_ZERO(&_fdsets[0]); FD_ZERO(&_fdsets[1]); FD_ZERO(&_fdsets[2]);
-      _cancelpipe[0] = _cancelpipe[1] = 0;
-      _userdata = 0;
-      _maxfd = 0;
-    }
-
-    ~DataReady()
-    {
-        CancelThread(DEBUGTEXT("DESTRUCTOR\n"));
-        if (fds) { free(fds); fds = 0; }
-	nfds = 0;
-    }
-
-    // Locks
-    //    The convention for locks: volatile vars start with '_',
-    //    and must be locked before use. Locked code is prefixed 
-    //    with /*LOCK*/ to make painfully obvious esp. in debuggers. -erco
-    //
-    void DataLock() { pthread_mutex_lock(&_datalock); }
-    void DataUnlock() { pthread_mutex_unlock(&_datalock); }
-
-    // Accessors
-    int IsThreadRunning() { return(tid ? 1 : 0); }
-    int GetNfds() { return(nfds); }
-    int GetCancelPipe(int ix) { return(_cancelpipe[ix]); }
-    fd_set GetFdset(int ix) { return(_fdsets[ix]); }
-
-    // Methods
-    void AddFD(int n, int events, void (*cb)(int, void*), void *v);
-    void RemoveFD(int n, int events);
-    int CheckData(fd_set& r, fd_set& w, fd_set& x);
-    void HandleData(fd_set& r, fd_set& w, fd_set& x);
-    static void* DataReadyThread(void *self);
-    void StartThread(void *userdata);
-    void CancelThread(const char *reason);
-};
-
-static DataReady dataready;
-
-void DataReady::AddFD(int n, int events, void (*cb)(int, void*), void *v)
-{
-  RemoveFD(n, events);
-  int i = nfds++;
-  if (i >= fd_array_size) 
-  {
-    FD *temp;
-    fd_array_size = 2*fd_array_size+1;
-    if (!fds) { temp = (FD*)malloc(fd_array_size*sizeof(FD)); }
-    else { temp = (FD*)realloc(fds, fd_array_size*sizeof(FD)); }
-    if (!temp) return;
-    fds = temp;
-  }
-  fds[i].cb  = cb;
-  fds[i].arg = v;
-  fds[i].fd  = n;
-  fds[i].events = events;
-  DataLock();
-  /*LOCK*/  if (events & POLLIN)  FD_SET(n, &_fdsets[0]);
-  /*LOCK*/  if (events & POLLOUT) FD_SET(n, &_fdsets[1]);
-  /*LOCK*/  if (events & POLLERR) FD_SET(n, &_fdsets[2]);
-  /*LOCK*/  if (n > _maxfd) _maxfd = n;
-  DataUnlock();
-}
-
-// Remove an FD from the array
-void DataReady::RemoveFD(int n, int events)
-{
-  int i,j;
-  for (i=j=0; i<nfds; i++)
-  {
-    if (fds[i].fd == n) 
-    {
-      int e = fds[i].events & ~events;
-      if (!e) continue; // if no events left, delete this fd
-      fds[i].events = e;
-    }
-    // move it down in the array if necessary:
-    if (j<i)
-      { fds[j] = fds[i]; }
-    j++;
-  }
-  nfds = j;
-  DataLock();
-  /*LOCK*/  if (events & POLLIN)  FD_CLR(n, &_fdsets[0]);
-  /*LOCK*/  if (events & POLLOUT) FD_CLR(n, &_fdsets[1]);
-  /*LOCK*/  if (events & POLLERR) FD_CLR(n, &_fdsets[2]);
-  /*LOCK*/  if (n == _maxfd) _maxfd--;
-  DataUnlock();
-}
-
-// CHECK IF USER DATA READY, RETURNS r/w/x INDICATING WHICH IF ANY
-int DataReady::CheckData(fd_set& r, fd_set& w, fd_set& x)
-{
-  int ret;
-  DataLock();
-  /*LOCK*/  timeval t = { 0, 1 };		// quick check
-  /*LOCK*/  r = _fdsets[0], w = _fdsets[1], x = _fdsets[2];
-  /*LOCK*/  ret = ::select(_maxfd+1, &r, &w, &x, &t);
-  DataUnlock();
-  if ( ret == -1 )
-    { DEBUGPERRORMSG("CheckData(): select()"); }
-  return(ret);
-}
-
-// HANDLE DATA READY CALLBACKS
-void DataReady::HandleData(fd_set& r, fd_set& w, fd_set& x)
-{
-  for (int i=0; i<nfds; i++) 
-  {
-    int f = fds[i].fd;
-    short revents = 0;
-    if (FD_ISSET(f, &r)) revents |= POLLIN;
-    if (FD_ISSET(f, &w)) revents |= POLLOUT;
-    if (FD_ISSET(f, &x)) revents |= POLLERR;
-    if (fds[i].events & revents) 
-    {
-      DEBUGMSG("DOING CALLBACK: ");
-      fds[i].cb(f, fds[i].arg);
-      DEBUGMSG("DONE\n");
-    }
-  }
-}
-
-// DATA READY THREAD
-//    This thread watches for changes in user's file descriptors.
-//    Sends a 'data ready event' to the main thread if any change.
-//
-void* DataReady::DataReadyThread(void *o)
-{
-  DataReady *self = (DataReady*)o;
-  while ( 1 )					// loop until thread cancel or error
-  {
-    // Thread safe local copies of data before each select()
-    self->DataLock();
-    /*LOCK*/  int maxfd = self->_maxfd;
-    /*LOCK*/  fd_set r = self->GetFdset(0);
-    /*LOCK*/  fd_set w = self->GetFdset(1);
-    /*LOCK*/  fd_set x = self->GetFdset(2);
-    /*LOCK*/  void *userdata = self->_userdata;
-    /*LOCK*/  int cancelpipe = self->GetCancelPipe(0);
-    /*LOCK*/  if ( cancelpipe > maxfd ) maxfd = cancelpipe;
-    /*LOCK*/  FD_SET(cancelpipe, &r);		// add cancelpipe to fd's to watch
-    /*LOCK*/  FD_SET(cancelpipe, &x);
-    self->DataUnlock();
-    // timeval t = { 1000, 0 };	// 1000 seconds;
-    timeval t = { 2, 0 };	// HACK: 2 secs prevents 'hanging' problem
-    int ret = ::select(maxfd+1, &r, &w, &x, &t);
-    pthread_testcancel();	// OSX 10.0.4 and older: needed for parent to cancel
-    switch ( ret )
-    {
-      case 0:	// NO DATA
-        continue;
-      case -1:	// ERROR
-      {
-        DEBUGPERRORMSG("CHILD THREAD: select() failed");
-        return(NULL);		// error? exit thread
-      }
-      default:	// DATA READY
-      {
-	if (FD_ISSET(cancelpipe, &r) || FD_ISSET(cancelpipe, &x)) 	// cancel?
-	    { return(NULL); }						// just exit
-        DEBUGMSG("CHILD THREAD: DATA IS READY\n");
-        EventRef drEvent;
-        CreateEvent( 0, kEventClassFLTK, kEventFLTKDataReady,
-		     0, kEventAttributeUserEvent, &drEvent);
-        EventQueueRef eventqueue = (EventQueueRef)userdata;
-        PostEventToQueue(eventqueue, drEvent, kEventPriorityStandard );
-        ReleaseEvent( drEvent );
-        return(NULL);		// done with thread
-      }
-    }
-  }
-}
-
-// START 'DATA READY' THREAD RUNNING, CREATE INTER-THREAD PIPE
-void DataReady::StartThread(void *new_userdata)
-{
-  CancelThread(DEBUGTEXT("STARTING NEW THREAD\n"));
-  DataLock();
-  /*LOCK*/  pipe(_cancelpipe);	// pipe for sending cancel msg to thread
-  /*LOCK*/  _userdata = new_userdata;
-  DataUnlock();
-  DEBUGMSG("*** START THREAD\n");
-  pthread_create(&tid, NULL, DataReadyThread, (void*)this);
-}
-
-// CANCEL 'DATA READY' THREAD, CLOSE PIPE
-void DataReady::CancelThread(const char *reason)
-{
-  if ( tid )
-  {
-    DEBUGMSG("*** CANCEL THREAD: ");
-    DEBUGMSG(reason);
-    if ( pthread_cancel(tid) == 0 )		// cancel first
-    {
-      DataLock();
-      /*LOCK*/  write(_cancelpipe[1], "x", 1);	// wake thread from select
-      DataUnlock();
-      pthread_join(tid, NULL);			// wait for thread to finish
-    }
-    tid = 0;
-    DEBUGMSG("(JOINED) OK\n");
-  }
-  // Close pipe if open
-  DataLock();
-  /*LOCK*/  if ( _cancelpipe[0] ) { close(_cancelpipe[0]); _cancelpipe[0] = 0; }
-  /*LOCK*/  if ( _cancelpipe[1] ) { close(_cancelpipe[1]); _cancelpipe[1] = 0; }
-  DataUnlock();
-}
-
-void Fl::add_fd( int n, int events, void (*cb)(int, void*), void *v )
-    { dataready.AddFD(n, events, cb, v); }
-
-void Fl::add_fd(int fd, void (*cb)(int, void*), void* v)
-    { dataready.AddFD(fd, POLLIN, cb, v); }
-
-void Fl::remove_fd(int n, int events)
-    { dataready.RemoveFD(n, events); }
-
-void Fl::remove_fd(int n)
-    { dataready.RemoveFD(n, -1); }
-
-/**
- * Check if there is actually a message pending!
- */
-int fl_ready()
-{
-  EventRef event;
-  return !ReceiveNextEvent(0, NULL, 0.0, false, &event);
-}
-
-/**
- * handle Apple Menu items (can be created using the Fl_Sys_Menu_Bar
- * returns eventNotHandledErr if the menu item could not be handled
- */
-OSStatus HandleMenu( HICommand *cmd )
-{
-  OSStatus ret = eventNotHandledErr;
-  // attributes, commandIDm menu.menuRef, menu.menuItemIndex
-  UInt32 ref;
-  OSErr rrc = GetMenuItemRefCon( cmd->menu.menuRef, cmd->menu.menuItemIndex, &ref );
-  //printf( "%d, %08x, %08x, %d, %d, %8x\n", rrc, cmd->attributes, cmd->commandID, cmd->menu.menuRef, cmd->menu.menuItemIndex, rrc );
-  if ( rrc==noErr && ref )
-  {
-    Fl_Menu_Item *m = (Fl_Menu_Item*)ref;
-    //printf( "Menu: %s\n", m->label() );
-    fl_sys_menu_bar->picked( m );
-    if ( m->flags & FL_MENU_TOGGLE ) // update the menu toggle symbol
-      SetItemMark( cmd->menu.menuRef, cmd->menu.menuItemIndex, (m->flags & FL_MENU_VALUE ) ? 0x12 : 0 );
-    if ( m->flags & FL_MENU_RADIO ) // update all radio buttons in this menu
-    {
-      Fl_Menu_Item *j = m;
-      int i = cmd->menu.menuItemIndex;
-      for (;;)
-      {
-        if ( j->flags & FL_MENU_DIVIDER )
-          break;
-        j++; i++;
-        if ( !j->text || !j->radio() )
-          break;
-        SetItemMark( cmd->menu.menuRef, i, ( j->flags & FL_MENU_VALUE ) ? 0x13 : 0 );
-      }
-      j = m-1; i = cmd->menu.menuItemIndex-1;
-      for ( ; i>0; j--, i-- )
-      {
-        if ( !j->text || j->flags&FL_MENU_DIVIDER || !j->radio() )
-          break;
-        SetItemMark( cmd->menu.menuRef, i, ( j->flags & FL_MENU_VALUE ) ? 0x13 : 0 );
-      }
-      SetItemMark( cmd->menu.menuRef, cmd->menu.menuItemIndex, ( m->flags & FL_MENU_VALUE ) ? 0x13 : 0 );
-    }
-    ret = noErr; // done handling this event
-  }
-  HiliteMenu(0);
-  return ret;
-}
-
-
-/**
- * We can make every event pass through this function
- * - mouse events need to be manipulated to use a mouse focus window
- * - keyboard, mouse and some window  events need to quit the Apple Event Loop
- *   so FLTK can continue its own management
- */
-static pascal OSStatus carbonDispatchHandler( EventHandlerCallRef nextHandler, EventRef event, void *userData )
-{
-  OSStatus ret = eventNotHandledErr;
-  HICommand cmd;
-
-  fl_lock_function();
-
-  got_events = 1;
-
-  switch ( GetEventClass( event ) )
-  {
-  case kEventClassMouse:
-    switch ( GetEventKind( event ) )
-    {
-    case kEventMouseUp:
-    case kEventMouseMoved:
-    case kEventMouseDragged:
-      if ( fl_capture )
-        ret = SendEventToEventTarget( event, GetWindowEventTarget( fl_capture ) );
-      else if ( fl_os_capture ){
-        ret = SendEventToEventTarget( event, GetWindowEventTarget( fl_os_capture ) );
-	fl_os_capture = 0;
-      }
-      break;
-    }
-    break;
-  case kEventClassCommand:
-    switch (GetEventKind( event ) )
-    {
-      case kEventCommandProcess:
-        ret = GetEventParameter( event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &cmd );
-        if (ret == noErr && (cmd.attributes & kHICommandFromMenu) != 0) 
-          ret = HandleMenu( &cmd );
-        else 
-          ret = eventNotHandledErr;
-        break;
-    }
-    break;
-  case kEventClassFLTK:
-    switch ( GetEventKind( event ) )
-    {
-    case kEventFLTKBreakLoop:
-      ret = noErr;
-      break;
-    case kEventFLTKDataReady:
-      {
-	dataready.CancelThread(DEBUGTEXT("DATA READY EVENT\n"));
-
-        // CHILD THREAD TELLS US DATA READY
-	//     Check to see what's ready, and invoke user's cb's
-	//
-	fd_set r,w,x;
-	switch(dataready.CheckData(r,w,x))
-	{
-	  case 0:	// NO DATA
-	    break;
-	  case -1:	// ERROR
-	    break;
-	  default:	// DATA READY
-	    dataready.HandleData(r,w,x);
-	    break;
-        }
-      }
-      ret = noErr;
-      break;
-    }
-  }
-  if ( ret == eventNotHandledErr )
-    ret = CallNextEventHandler( nextHandler, event ); // let the OS handle the activation, but continue to get a click-through effect
-
-  fl_unlock_function();
-
-  return ret;
-}
-
-
-/**
- * break the current event loop
- */
-static void breakMacEventLoop()
-{
-  EventRef breakEvent;
-
-  fl_lock_function();
-
-  CreateEvent( 0, kEventClassFLTK, kEventFLTKBreakLoop, 0, kEventAttributeUserEvent, &breakEvent );
-  PostEventToQueue( GetCurrentEventQueue(), breakEvent, kEventPriorityStandard );
-  ReleaseEvent( breakEvent );
-
-  fl_unlock_function();
-}
-
-//
-// MacOS X timers
-//
-
-struct MacTimeout {
-    Fl_Timeout_Handler callback;
-    void* data;
-    EventLoopTimerRef timer;
-    EventLoopTimerUPP upp;
-    char pending; 
-};
-static MacTimeout* mac_timers;
-static int mac_timer_alloc;
-static int mac_timer_used;
-
-
-static void realloc_timers()
-{
-    if (mac_timer_alloc == 0) {
-        mac_timer_alloc = 8;
-    }
-    mac_timer_alloc *= 2;
-    MacTimeout* new_timers = new MacTimeout[mac_timer_alloc];
-    memset(new_timers, 0, sizeof(MacTimeout)*mac_timer_alloc);
-    memcpy(new_timers, mac_timers, sizeof(MacTimeout) * mac_timer_used);
-    MacTimeout* delete_me = mac_timers;
-    mac_timers = new_timers;
-    delete [] delete_me;
-}
-
-static void delete_timer(MacTimeout& t)
-{
-    if (t.timer) {
-        RemoveEventLoopTimer(t.timer);
-        DisposeEventLoopTimerUPP(t.upp);
-        memset(&t, 0, sizeof(MacTimeout));
-    }
-}
-
-
-static pascal void do_timer(EventLoopTimerRef timer, void* data)
-{
-   for (int i = 0;  i < mac_timer_used;  ++i) {
-        MacTimeout& t = mac_timers[i];
-        if (t.timer == timer  &&  t.data == data) {
-            t.pending = 0;
-            (*t.callback)(data);
-            if (t.pending==0)
-              delete_timer(t);
-            break;
-        }
-    }
-    breakMacEventLoop();
-}
-
-/**
- * This function is the central event handler.
- * It reads events from the event queue using the given maximum time
- * Funny enough, it returns the same time that it got as the argument. 
- */
-static double do_queued_events( double time = 0.0 ) 
-{
-  static bool been_here = false;
-  static RgnHandle rgn;
-  
-  // initialize events and a region that enables mouse move events
-  if (!been_here) {
-    rgn = NewRgn();
-    Point mp;
-    GetMouse(&mp);
-    SetRectRgn(rgn, mp.h, mp.v, mp.h, mp.v);
-    SetEventMask(everyEvent);
-    been_here = true;
-  }
-  OSStatus ret;
-  static EventTargetRef target = 0;
-  if ( !target ) 
-  {
-    target = GetEventDispatcherTarget();
-
-    EventHandlerUPP dispatchHandler = NewEventHandlerUPP( carbonDispatchHandler ); // will not be disposed by Carbon...
-    static EventTypeSpec dispatchEvents[] = {
-        { kEventClassWindow, kEventWindowShown },
-        { kEventClassWindow, kEventWindowHidden },
-        { kEventClassWindow, kEventWindowActivated },
-        { kEventClassWindow, kEventWindowDeactivated },
-        { kEventClassWindow, kEventWindowClose },
-        { kEventClassKeyboard, kEventRawKeyDown },
-        { kEventClassKeyboard, kEventRawKeyRepeat },
-        { kEventClassKeyboard, kEventRawKeyUp },
-        { kEventClassKeyboard, kEventRawKeyModifiersChanged },
-        { kEventClassMouse, kEventMouseDown },
-        { kEventClassMouse, kEventMouseUp },
-        { kEventClassMouse, kEventMouseMoved },
-        { kEventClassMouse, 11 }, // MightyMouse wheels
-        { kEventClassMouse, kEventMouseWheelMoved },
-        { kEventClassMouse, kEventMouseDragged },
-        { kEventClassFLTK, kEventFLTKBreakLoop },
-        { kEventClassFLTK, kEventFLTKDataReady } };
-    ret = InstallEventHandler( target, dispatchHandler, GetEventTypeCount(dispatchEvents), dispatchEvents, 0, 0L );
-    static EventTypeSpec appEvents[] = {
-        { kEventClassCommand, kEventCommandProcess } };
-    ret = InstallApplicationEventHandler( dispatchHandler, GetEventTypeCount(appEvents), appEvents, 0, 0L );
-  }
-
-  got_events = 0;
-
-  // Check for re-entrant condition
-  if ( dataready.IsThreadRunning() )
-    { dataready.CancelThread(DEBUGTEXT("AVOID REENTRY\n")); }
-
-  // Start thread to watch for data ready
-  if ( dataready.GetNfds() )
-      { dataready.StartThread((void*)GetCurrentEventQueue()); }
-
-  fl_unlock_function();
-
-  EventRef event;
-  EventTimeout timeout = time;
-  if (!ReceiveNextEvent(0, NULL, timeout, true, &event)) {
-    got_events = 1;
-    OSErr ret = SendEventToEventTarget( event, target );
-    if (ret!=noErr) {
-      EventRecord clevent;
-      ConvertEventRefToEventRecord(event, &clevent);
-      if (clevent.what==kHighLevelEvent) {
-        ret = AEProcessAppleEvent(&clevent);
-      }
-    }
-    if (   ret==eventNotHandledErr
-        && GetEventClass(event)==kEventClassMouse
-        && GetEventKind(event)==kEventMouseDown ) {
-      WindowRef win; Point pos;
-      GetEventParameter(event, kEventParamMouseLocation, typeQDPoint,
-        NULL, sizeof(pos), NULL, &pos);
-      if (MacFindWindow(pos, &win)==inMenuBar) {
-        MenuSelect(pos);
-      }
-    }
-    ReleaseEvent( event );
-  }
-
-  fl_lock_function();
-
-#if CONSOLIDATE_MOTION
-  if (send_motion && send_motion == fl_xmousewin) {
-    send_motion = 0;
-    Fl::handle(FL_MOVE, fl_xmousewin);
-  }
-#endif
-
-  return time;
-}
-
-
-/**
- * This public function handles all events. It wait a maximum of 
- * 'time' secods for an event. This version returns 1 if events
- * other than the timeout timer were processed.
- *
- * \todo there is no socket handling in this code whatsoever
- */
-int fl_wait( double time ) 
-{
-  do_queued_events( time );
-  return (got_events);
-}
-
-
-/**
- * event handler for Apple-Q key combination
- * this is also called from the Carbon Window handler after all windows were closed
- */
-static OSErr QuitAppleEventHandler( const AppleEvent *appleEvt, AppleEvent* reply, UInt32 refcon )
-{
-  fl_lock_function();
-
-  while ( Fl_X::first ) {
-    Fl_X *x = Fl_X::first;
-    Fl::handle( FL_CLOSE, x->w );
-    if ( Fl_X::first == x ) {
-      fl_unlock_function();
-      return noErr; // FLTK has not close all windows, so we return to the main program now
-    }
-  }
-
-  fl_unlock_function();
-
-  return noErr;
-}
-
-
-/**
- * Carbon Window handler
- * This needs to be linked into all new window event handlers
- */
-static pascal OSStatus carbonWindowHandler( EventHandlerCallRef nextHandler, EventRef event, void *userData )
-{
-  UInt32 kind = GetEventKind( event );
-  OSStatus ret = eventNotHandledErr;
-  Fl_Window *window = (Fl_Window*)userData;
-  Fl::first_window(window);
-
-  Rect currentBounds, originalBounds;
-  WindowClass winClass;
-  static Fl_Window *activeWindow = 0;
-  
-  fl_lock_function();
-  
-  switch ( kind )
-  {
-  case kEventWindowBoundsChanging:
-    GetEventParameter( event, kEventParamCurrentBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, &currentBounds );
-    GetEventParameter( event, kEventParamOriginalBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, &originalBounds );
-    break;
-  case kEventWindowDrawContent:
-    handleUpdateEvent( fl_xid( window ) );
-    ret = noErr;
-    break;
-  case kEventWindowBoundsChanged: {
-    GetEventParameter( event, kEventParamCurrentBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, &currentBounds );
-    GetEventParameter( event, kEventParamOriginalBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, &originalBounds );
-    int X = currentBounds.left, W = currentBounds.right-X;
-    int Y = currentBounds.top, H = currentBounds.bottom-Y;
-    resize_from_system = window;
-    window->resize( X, Y, W, H );
-    if ( ( originalBounds.right - originalBounds.left != W ) 
-      || ( originalBounds.bottom - originalBounds.top != H ) )
-    {
-      if ( window->shown() ) 
-        handleUpdateEvent( fl_xid( window ) );
-    } 
-    break; }
-  case kEventWindowShown:
-    if ( !window->parent() )
-    {
-      GetWindowClass( fl_xid( window ), &winClass );
-      if ( winClass != kHelpWindowClass ) {	// help windows can't get the focus!
-        Fl::handle( FL_FOCUS, window);
-        activeWindow = window;
-      }
-      Fl::handle( FL_SHOW, window);
-      mods_to_e_state(GetCurrentKeyModifiers());
-    }
-    break;
-  case kEventWindowHidden:
-    if ( !window->parent() ) Fl::handle( FL_HIDE, window);
-    break;
-  case kEventWindowActivated:
-    if ( window->shown() && window!=activeWindow )
-    {
-      GetWindowClass( fl_xid( window ), &winClass );
-      if ( winClass != kHelpWindowClass ) {	// help windows can't get the focus!
-        Fl::handle( FL_FOCUS, window);
-        activeWindow = window;
-      }
-    }
-    break;
-  case kEventWindowDeactivated:
-    if ( window==activeWindow ) 
-    {
-      Fl::handle( FL_UNFOCUS, window);
-      activeWindow = 0;
-    }
-    break;
-  case kEventWindowClose:
-    Fl::handle( FL_CLOSE, window ); // this might or might not close the window
-    // if there are no more windows, send a high-level quit event
-    if (!Fl_X::first) QuitAppleEventHandler( 0, 0, 0 );
-    ret = noErr; // returning noErr tells Carbon to stop following up on this event
-    break;
-  case kEventWindowCollapsed:
-    window->clear_visible();
-    break;
-  case kEventWindowExpanded:
-    window->set_visible();
-    break;
-  }
-
-  fl_unlock_function();
-
-  return ret;
-}
-
-
-/**
- * Carbon Mousewheel handler
- * This needs to be linked into all new window event handlers
- */
-static pascal OSStatus carbonMousewheelHandler( EventHandlerCallRef nextHandler, EventRef event, void *userData )
-{
-  // Handle the new "MightyMouse" mouse wheel events. Please, someone explain
-  // to me why Apple changed the API on this even though the current API
-  // supports two wheels just fine. Matthias,
-  fl_lock_function();
-
-  fl_os_event = event;
-  Fl_Window *window = (Fl_Window*)userData;
-  if ( !window->shown() )
-  {
-    fl_unlock_function();
-    return noErr;
-  }
-  Fl::first_window(window);
-
-  EventMouseWheelAxis axis;
-  GetEventParameter( event, kEventParamMouseWheelAxis, typeMouseWheelAxis, NULL, sizeof(EventMouseWheelAxis), NULL, &axis );
-  long delta;
-  GetEventParameter( event, kEventParamMouseWheelDelta, typeLongInteger, NULL, sizeof(long), NULL, &delta );
-//  fprintf(stderr, "axis=%d, delta=%d\n", axis, delta);
-  if ( axis == kEventMouseWheelAxisX ) {
-    Fl::e_dx = -delta;
-    Fl::e_dy = 0;
-    if ( Fl::e_dx) Fl::handle( FL_MOUSEWHEEL, window );
-  } else if ( axis == kEventMouseWheelAxisY ) {
-    Fl::e_dx = 0;
-    Fl::e_dy = -delta;
-    if ( Fl::e_dy) Fl::handle( FL_MOUSEWHEEL, window );
-  } else {
-    fl_unlock_function();
-
-    return eventNotHandledErr;
-  }
-
-  fl_unlock_function();
-  
-  return noErr;
-}
-
-
-/**
- * convert the current mouse chord into the FLTK modifier state
- */
-static void chord_to_e_state( UInt32 chord )
-{
-  static ulong state[] = 
-  { 
-    0, FL_BUTTON1, FL_BUTTON3, FL_BUTTON1|FL_BUTTON3, FL_BUTTON2,
-    FL_BUTTON2|FL_BUTTON1, FL_BUTTON2|FL_BUTTON3, 
-    FL_BUTTON2|FL_BUTTON1|FL_BUTTON3
-  };
-  Fl::e_state = ( Fl::e_state & 0xff0000 ) | state[ chord & 0x07 ];
-}
-
-
-/**
- * Carbon Mouse Button Handler
- */
-static pascal OSStatus carbonMouseHandler( EventHandlerCallRef nextHandler, EventRef event, void *userData )
-{
-  static int keysym[] = { 0, FL_Button+1, FL_Button+3, FL_Button+2 };
-  static int px, py;
-  static char suppressed = 0;
-
-  fl_lock_function();
-  
-  fl_os_event = event;
-  Fl_Window *window = (Fl_Window*)userData;
-  if ( !window->shown() )
-  {
-    fl_unlock_function();
-    return noErr;
-  }
-  Fl::first_window(window);
-  Point pos;
-  GetEventParameter( event, kEventParamMouseLocation, typeQDPoint, NULL, sizeof(Point), NULL, &pos );
-  EventMouseButton btn;
-  GetEventParameter( event, kEventParamMouseButton, typeMouseButton, NULL, sizeof(EventMouseButton), NULL, &btn );
-  UInt32 clickCount;
-  GetEventParameter( event, kEventParamClickCount, typeUInt32, NULL, sizeof(UInt32), NULL, &clickCount );
-  UInt32 chord;
-  GetEventParameter( event, kEventParamMouseChord, typeUInt32, NULL, sizeof(UInt32), NULL, &chord );
-  WindowRef xid = fl_xid(window), tempXid;
-  int sendEvent = 0, part = 0;
-  switch ( GetEventKind( event ) )
-  {
-  case kEventMouseDown:
-    part = FindWindow( pos, &tempXid );
-    if (!(Fl::grab() && window!=Fl::grab())) {
-      if ( part == inGrow ) {
-        fl_unlock_function();
-        suppressed = 1;
-        Fl_Tooltip::current(0L);
-        return CallNextEventHandler( nextHandler, event ); // let the OS handle this for us
-      }
-      if ( part != inContent ) {
-        fl_unlock_function();
-        suppressed = 1;
-        Fl_Tooltip::current(0L);
-        // anything else to here?
-        return CallNextEventHandler( nextHandler, event ); // let the OS handle this for us
-      }
-    }
-    suppressed = 0;
-    if (part==inContent && !IsWindowActive( xid ) ) {
-      CallNextEventHandler( nextHandler, event ); // let the OS handle the activation, but continue to get a click-through effect
-    }
-    // normal handling of mouse-down follows
-    fl_os_capture = xid;
-    sendEvent = FL_PUSH;
-    Fl::e_is_click = 1; px = pos.h; py = pos.v;
-    if (clickCount>1) 
-      Fl::e_clicks++;
-    else
-      Fl::e_clicks = 0;
-    // fall through
-  case kEventMouseUp:
-    if (suppressed) {
-      suppressed = 0;
-      break;
-    }
-    if ( !window ) break;
-    if ( !sendEvent ) {
-      sendEvent = FL_RELEASE; 
-    }
-    Fl::e_keysym = keysym[ btn ];
-    // fall through
-  case kEventMouseMoved:
-    suppressed = 0;
-    if ( !sendEvent ) { 
-      sendEvent = FL_MOVE; chord = 0; 
-    }
-    // fall through
-  case kEventMouseDragged:
-    if (suppressed) break;
-    if ( !sendEvent ) {
-      sendEvent = FL_MOVE; // Fl::handle will convert into FL_DRAG
-      if (abs(pos.h-px)>5 || abs(pos.v-py)>5) 
-        Fl::e_is_click = 0;
-    }
-    chord_to_e_state( chord );
-    GrafPtr oldPort;
-    GetPort( &oldPort );
-    SetPort( GetWindowPort(xid) ); // \todo replace this! There must be some GlobalToLocal call that has a port as an argument
-    SetOrigin(0, 0);
-    Fl::e_x_root = pos.h;
-    Fl::e_y_root = pos.v;
-    GlobalToLocal( &pos );
-    Fl::e_x = pos.h;
-    Fl::e_y = pos.v;
-    SetPort( oldPort );
-    if (GetEventKind(event)==kEventMouseDown && part!=inContent) {
-      int used = Fl::handle( sendEvent, window );
-      CallNextEventHandler( nextHandler, event ); // let the OS handle this for us
-      if (!used) 
-        suppressed = 1;
-    } else {
-      Fl::handle( sendEvent, window );
-    }
-    break;
-  }
-
-  fl_unlock_function();
-  
-  return noErr;
-}
-
-
-/**
- * convert the keyboard return code into the symbol on the keycaps
- */
-static unsigned short keycode_to_sym( UInt32 keyCode, UInt32 mods, unsigned short deflt )
-{
-  static Ptr map = 0;
-  UInt32 state = 0;
-  if (!map) {
-    map = (Ptr)GetScriptManagerVariable(smKCHRCache);
-    if (!map) {
-      long kbID = GetScriptManagerVariable(smKeyScript);
-      map = *GetResource('KCHR', kbID);
-    }
-  }
-  if (map)
-    return KeyTranslate(map, keyCode|mods, &state );
-  return deflt;
-}
-
-/*
- * keycode_function for post-10.5 systems, allows more sophisticated decoding of keys
- */
-static int keycodeToUnicode(
-                char * uniChars, int maxChars,
-                EventKind eKind,
-                UInt32 keycode, UInt32 modifiers,
-                UInt32 * deadKeyStatePtr,
-                unsigned char,  // not used in this function
-                unsigned short) // not used in this function
-{
-  // first get the keyboard mapping in a post 10.2 way
-  
-  Ptr resource;
-  TextEncoding encoding;
-  static TextEncoding lastEncoding = kTextEncodingMacRoman;
-  int len = 0;
-  KeyboardLayoutRef currentLayout = NULL;
-  static KeyboardLayoutRef lastLayout = NULL;
-  SInt32 currentLayoutId = 0;
-  static SInt32 lastLayoutId;
-  int hasLayoutChanged = false;
-  static Ptr uchr = NULL;
-  static Ptr KCHR = NULL;
-  // ScriptCode currentKeyScript;
-  
-  KLGetCurrentKeyboardLayout(&currentLayout);
-  if (currentLayout) {
-    KLGetKeyboardLayoutProperty(currentLayout, kKLIdentifier, (const void**)&currentLayoutId);
-    if ( (lastLayout != currentLayout) || (lastLayoutId != currentLayoutId) ) {
-      lastLayout = currentLayout;
-      lastLayoutId = currentLayoutId;
-      uchr = NULL;
-      KCHR = NULL;
-      if ((KLGetKeyboardLayoutProperty(currentLayout, kKLuchrData, (const void**)&uchr) == noErr) && (uchr != NULL)) {
-        // done
-      } else if ((KLGetKeyboardLayoutProperty(currentLayout, kKLKCHRData, (const void**)&KCHR) == noErr) && (KCHR != NULL)) {
-        // done
-      }
-      // FIXME No Layout property found. Now we have a problem. 
-    }
-  }
-  if (hasLayoutChanged) {
-    //deadKeyStateUp = deadKeyStateDown = 0;
-    if (KCHR != NULL) {
-      // FIXME this must not happen
-    } else if (uchr == NULL) {
-      KCHR = (Ptr) GetScriptManagerVariable(smKCHRCache);
-    }
-  }
-  if (uchr != NULL) {
-    // this is what I expect
-    resource = uchr;
-  } else {
-    resource = KCHR;
-    encoding = lastEncoding;
-    // this is actually not supported by the following code and will likely crash
-  }
-  
-  // now apply that keyboard mapping to our keycode
-  
-  int action;
-  //OptionBits options = 0;
-  // not used yet: OptionBits options = kUCKeyTranslateNoDeadKeysMask;
-  unsigned long keyboardType;
-  keycode &= 0xFF;
-  modifiers = (modifiers >> 8) & 0xFF;
-  keyboardType = LMGetKbdType();
-  OSStatus status;
-  UniCharCount actuallength;
-  UniChar utext[10];
-  
-  switch(eKind) {     
-    case kEventRawKeyDown:    action = kUCKeyActionDown; break;
-    case kEventRawKeyUp:      action = kUCKeyActionUp; break;
-    case kEventRawKeyRepeat:  action = kUCKeyActionAutoKey; break;
-    default: return 0;
-  }
-
-  UInt32 deadKeyState = *deadKeyStatePtr;
-  if ((action==kUCKeyActionUp)&&(*deadKeyStatePtr))
-    deadKeyStatePtr = &deadKeyState;
-
-  status = UCKeyTranslate(
-                          (const UCKeyboardLayout *) uchr,
-                          keycode, action, modifiers, keyboardType,
-                          0, deadKeyStatePtr,
-                          10, &actuallength, utext);
-
-  if (noErr != status) {
-    fprintf(stderr,"UCKeyTranslate failed: %d\n", (int) status);
-    actuallength = 0;
-  }
-
-  // convert the list of unicode chars into utf8
-  // FIXME no bounds check (see maxchars)
-  unsigned i;
-  for (i=0; i<actuallength; ++i) {
-    len += fl_utf8encode(utext[i], uniChars+len);
-  }
-  uniChars[len] = 0;
-  return len;
-}
-
-/*
- * keycode_function for pre-10.5 systems, this is the "historic" fltk Mac key handling
- */
-static int keycode_wrap_old(
-                char * buffer,
-                int, EventKind, UInt32, // not used in this function
-                UInt32, UInt32 *,       // not used in this function
-                unsigned char key,
-                unsigned short sym)
-{
-  if ( (sym >= FL_KP && sym <= FL_KP_Last) || !(sym & 0xff00) ||
-        sym == FL_Tab || sym == FL_Enter) {
-    buffer[0] = key;
-    return 1;
-  } else {
-    buffer[0] = 0;
-    return 0;
-  }
-} /* keycode_wrap_old */
-/* 
- * Stub pointer to select appropriate keycode_function per operating system version. This function pointer
- * is initialised in fl_open_display, based on the runtime identification of the host OS version. This is
- * intended to allow us to utilise 10.5 services dynamically to improve Unicode handling, whilst still 
- * allowing code to run satisfactorily on older systems.
- */
-static int (*keycode_function)(char*, int, EventKind, UInt32, UInt32, UInt32*, unsigned char, unsigned short) = keycode_wrap_old;
-
-
-// EXPERIMENTAL!
-pascal OSStatus carbonTextHandler( 
-  EventHandlerCallRef nextHandler, EventRef event, void *userData )
-{
-  Fl_Window *window = (Fl_Window*)userData;
-  Fl::first_window(window);
-  fl_lock_function();
-  //int kind = GetEventKind(event);
-  unsigned short buf[200];
-  ByteCount size;
-  GetEventParameter( event, kEventParamTextInputSendText, typeUnicodeText, 
-                     NULL, 100, &size, &buf );
-//  printf("TextEvent: %02x %02x %02x %02x\n", buf[0], buf[1], buf[2], buf[3]);
-  // FIXME: oversimplified!
-  unsigned ucs = buf[0];
-  char utf8buf[20];
-  int len = fl_utf8encode(ucs, utf8buf);
-  Fl::e_length = len;
-  Fl::e_text = utf8buf;
-  while (window->parent()) window = window->window();
-  Fl::handle(FL_KEYBOARD, window);
-  fl_unlock_function();
-  fl_lock_function();
-  Fl::handle(FL_KEYUP, window);
-  fl_unlock_function();
-  // for some reason, the window does not redraw until the next mouse move or button push
-  // sending a 'redraw()' or 'awake()' does not solve the issue!
-  Fl::flush();
-  return noErr;
-}  
-
-/**
- * handle carbon keyboard events
- */
-pascal OSStatus carbonKeyboardHandler( 
-  EventHandlerCallRef nextHandler, EventRef event, void *userData )
-{
-  static char buffer[32];
-  int sendEvent = 0;
-  Fl_Window *window = (Fl_Window*)userData;
-  Fl::first_window(window);
-  UInt32 mods;
-  static UInt32 prevMods = mods_to_e_state( GetCurrentKeyModifiers() );
-
-  fl_lock_function();
-  
-  int kind = GetEventKind(event);
-  
-  // get the modifiers for any of the events
-  GetEventParameter( event, kEventParamKeyModifiers, typeUInt32, 
-                     NULL, sizeof(UInt32), NULL, &mods );
-  
-  // get the key code only for key events
-  UInt32 keyCode = 0, maskedKeyCode = 0;
-  unsigned char key = 0;
-  unsigned short sym = 0;
-  if (kind!=kEventRawKeyModifiersChanged) {
-    GetEventParameter( event, kEventParamKeyCode, typeUInt32, 
-                       NULL, sizeof(UInt32), NULL, &keyCode );
-    GetEventParameter( event, kEventParamKeyMacCharCodes, typeChar, 
-                       NULL, sizeof(char), NULL, &key );
-  }
-  // extended keyboards can also send sequences on key-up to generate Kanji etc. codes.
-  // Some observed prefixes are 0x81 to 0x83, followed by an 8 bit keycode.
-  // In this mode, there seem to be no key-down codes
-// printf("%08x %08x %08x\n", keyCode, mods, key);
-  maskedKeyCode = keyCode & 0x7f;
-  /* output a human readable event identifier for debugging 
-  const char *ev = "";
-  switch (kind) {
-    case kEventRawKeyDown: ev = "kEventRawKeyDown"; break;
-    case kEventRawKeyRepeat: ev = "kEventRawKeyRepeat"; break;
-    case kEventRawKeyUp: ev = "kEventRawKeyUp"; break;
-    case kEventRawKeyModifiersChanged: ev = "kEventRawKeyModifiersChanged"; break;
-    default: ev = "unknown";
-  }
-  printf("%08x %08x %08x '%c' %s \n", mods, keyCode, key, key, ev);
-  */
-  switch (kind)
-  {
-  case kEventRawKeyDown:
-  case kEventRawKeyRepeat:
-/*
-    // FIXME Matt: For 10.5, the keycode_function will handle all this. This is untested for ealier versions of OS X.
-    // When the user presses a "dead key", no information is send about
-    // which dead key symbol was created. So we need to trick Carbon into
-    // giving us the code by sending a "space" after the "dead key".
-    if (key==0) {
-      UInt32 ktState = 0;
-      KeyboardLayoutRef klr;
-      KLGetCurrentKeyboardLayout(&klr);
-      const void *kchar = 0; KLGetKeyboardLayoutProperty(klr, kKLKCHRData, &kchar);
-      KeyTranslate(kchar, (mods&0xff00) | keyCode, &ktState); // send the dead key
-      key = KeyTranslate(kchar, 0x31, &ktState); // fake a space key press
-      Fl::e_state |= 0x40000000; // mark this as a dead key
-    } else {
-      Fl::e_state &= 0xbfffffff; // clear the deadkey flag
-    }
-*/
-    sendEvent = FL_KEYBOARD;
-    // fall through
-  case kEventRawKeyUp:
-    if ( !sendEvent ) {
-      sendEvent = FL_KEYUP;
-      Fl::e_state &= 0xbfffffff; // clear the deadkey flag
-    }
-    // if the user pressed alt/option, event_key should have the keycap, 
-    // but event_text should generate the international symbol
-    sym = macKeyLookUp[maskedKeyCode];
-    if ( isalpha(key) )
-      sym = tolower(key);
-    else if ( Fl::e_state&FL_CTRL && key<32 && sym<0xff00)
-      sym = key+96;
-    else if ( Fl::e_state&FL_ALT && sym<0xff00) // find the keycap of this key
-      sym = keycode_to_sym( maskedKeyCode, 0, macKeyLookUp[ maskedKeyCode ] );
-    Fl::e_keysym = Fl::e_original_keysym = sym;
-    // Handle FL_KP_Enter on regular keyboards and on Powerbooks
-    if ( maskedKeyCode==0x4c || maskedKeyCode==0x34) key=0x0d;    
-    // Handle the Delete key on the keypad
-    // Matt: the Mac has no concept of a NumLock key, or at least not visible
-    // Matt: to Carbon. The kEventKeyModifierNumLockMask is only set when
-    // Matt: a numeric keypad key is pressed and does not correspond with
-    // Matt: the NumLock light in PowerBook keyboards.
-
-    // Matt: attempt to get the correct Unicode character(s) from our keycode
-    // imm:  keycode_function function pointer added to allow us to use different functions
-    // imm:  depending on which OS version we are running on (tested and set in fl_open_display)
-    static UInt32 deadKeyState = 0; // must be cleared when losing focus
-    Fl::e_length = (*keycode_function)(buffer, 31, kind, keyCode, mods, &deadKeyState, key, sym);
-    Fl::e_text = buffer;
-    buffer[Fl::e_length] = 0; // just in case...
-    break;
-  case kEventRawKeyModifiersChanged: {
-    UInt32 tMods = prevMods ^ mods;
-    if ( tMods )
-    {
-      mods_to_e_keysym( tMods );
-      if ( Fl::e_keysym ) 
-        sendEvent = ( prevMods<mods ) ? FL_KEYBOARD : FL_KEYUP;
-      Fl::e_length = 0;
-      buffer[0] = 0;
-      prevMods = mods;
-    }
-    mods_to_e_state( mods );
-    break; }
-  }
-  while (window->parent()) window = window->window();
-  if (sendEvent && Fl::handle(sendEvent,window)) {
-    fl_unlock_function();  
-    return noErr; // return noErr if FLTK handled the event
-  } else {
-    fl_unlock_function();
-    //return CallNextEventHandler( nextHandler, event );;
-    // Matt: I had better results (no duplicate events) always returning
-    // Matt: 'noErr'. System keyboard events still seem to work just fine.
-    return noErr;
-  }
-}
-
-
-
-/**
- * Open callback function to call...
- */
-
-static void	(*open_cb)(const char *) = 0;
-
-
-/**
- * Event handler for Apple-O key combination and also for file opens
- * via the finder...
- */
-
-static OSErr OpenAppleEventHandler(const AppleEvent *appleEvt,
-                                   AppleEvent *reply,
-				   UInt32 refcon) {
-  OSErr err;
-  AEDescList documents;
-  long i, n;
-  FSSpec fileSpec;
-  AEKeyword keyWd;
-  DescType typeCd;
-  Size actSz;
-  char filename[1024];
-
-  if (!open_cb) return noErr;
-
-  // Initialize the document list...
-  AECreateDesc(typeNull, NULL, 0, &documents);
- 
-  // Get the open parameter(s)...
-  err = AEGetParamDesc(appleEvt, keyDirectObject, typeAEList, &documents);
-  if (err != noErr) {
-    AEDisposeDesc(&documents);
-    return err;
-  }
-
-  // Lock access to FLTK in this thread...
-  fl_lock_function();
-
-  // Open the documents via the callback...
-  if (AECountItems(&documents, &n) == noErr) {
-    for (i = 1; i <= n; i ++) {
-      // Get the next FSSpec record...
-      AEGetNthPtr(&documents, i, typeFSS, &keyWd, &typeCd,
-                  (Ptr)&fileSpec, sizeof(fileSpec),
-		  (actSz = sizeof(fileSpec), &actSz));
-
-      // Convert to a UNIX path...
-      FSSpec2UnixPath(&fileSpec, filename);
-
-      // Call the callback with the filename...
-      (*open_cb)(filename);
-    }
-  }
-
-  // Unlock access to FLTK for all threads...
-  fl_unlock_function();
-
-  // Get rid of the document list...
-  AEDisposeDesc(&documents);
-
-  return noErr;
-}
-
-
-/**
- * Install an open documents event handler...
- */
-
-void fl_open_callback(void (*cb)(const char *)) {
-  open_cb = cb;
-  if (cb) {
-    AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
-                          NewAEEventHandlerUPP((AEEventHandlerProcPtr)
-			      OpenAppleEventHandler), 0, false);
-  } else {
-    AERemoveEventHandler(kCoreEventClass, kAEOpenDocuments,
-                          NewAEEventHandlerUPP((AEEventHandlerProcPtr)
-			      OpenAppleEventHandler), false);
-  }
-}
-
-
-/**
- * initialize the Mac toolboxes, dock status, and set the default menubar
- */
-
-extern "C" {
-  extern OSErr CPSEnableForegroundOperation(ProcessSerialNumber *psn, UInt32 _arg2,
-    UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
-}
-
-void fl_open_display() {
-  static char beenHereDoneThat = 0;
-  if ( !beenHereDoneThat )  {
-    beenHereDoneThat = 1;
-    
-    FlushEvents(everyEvent,0);
-    
-    MoreMasters(); // \todo Carbon suggests MoreMasterPointers()
-    AEInstallEventHandler( kCoreEventClass, kAEQuitApplication, NewAEEventHandlerUPP((AEEventHandlerProcPtr)QuitAppleEventHandler), 0, false );
-    
-    // create the Mac Handle for the default cursor (a pointer to a pointer)
-    GetQDGlobalsArrow(&default_cursor);
-    default_cursor_ptr = &default_cursor;
-    fl_default_cursor  = &default_cursor_ptr;
-    
-    ClearMenuBar();
-    AppendResMenu( GetMenuHandle( 1 ), 'DRVR' );
-    DrawMenuBar();
-    
-    // bring the application into foreground without a 'CARB' resource
-    Boolean same_psn;
-    ProcessSerialNumber cur_psn, front_psn;
-    if( !GetCurrentProcess( &cur_psn ) && !GetFrontProcess( &front_psn ) &&
-       !SameProcess( &front_psn, &cur_psn, &same_psn ) && !same_psn )
-    {
-      // only transform the application type for unbundled apps
-      CFBundleRef bundle = CFBundleGetMainBundle();
-      if( bundle )
-      {
-      	FSRef execFs;
-      	CFURLRef execUrl = CFBundleCopyExecutableURL( bundle );
-      	CFURLGetFSRef( execUrl, &execFs );
-        
-      	FSRef bundleFs;
-      	GetProcessBundleLocation( &cur_psn, &bundleFs );
-        
-      	if( !FSCompareFSRefs( &execFs, &bundleFs ) )
-          bundle = NULL;
-        
-        CFRelease(execUrl);
-      }
-      
-      if( !bundle )
-      {
-        // Earlier versions of this code tried to use weak linking, however it
-        // appears that this does not work on 10.2.  Since 10.3 and higher provide
-        // both TransformProcessType and CPSEnableForegroundOperation, the following
-        // conditional code compiled on 10.2 will still work on newer releases...
-        OSErr err;
-        
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
-        if (TransformProcessType != NULL) {
-          err = TransformProcessType(&cur_psn, kProcessTransformToForegroundApplication);
-        } else
-#endif // MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
-          err = CPSEnableForegroundOperation(&cur_psn, 0x03, 0x3C, 0x2C, 0x1103);
-        
-        if (err == noErr) {
-          SetFrontProcess( &cur_psn );
-        }
-      }
-    }
-    
-    // imm: keycode handler stub setting - use Gestalt to determine the running system version,
-    // then set the keycode_function pointer accordingly
-    keycode_function = keycode_wrap_old; // default to pre-10.5 mechanism
-    SInt32 MacVersion;
-    if (Gestalt(gestaltSystemVersion, &MacVersion) == noErr)
-    {
-      if(MacVersion >= 0x1050) { // 10.5.0 or later
-        keycode_function = keycodeToUnicode;
-      }
-    }
-  }
-}
-
-
-/**
- * get rid of allocated resources
- */
-void fl_close_display()  {
-}
-
-
-/**
- * smallest x ccordinate in screen space
- */
-int Fl::x() {
-  BitMap r;
-  GetQDGlobalsScreenBits(&r);
-  return r.bounds.left;
-}
-
-
-/**
- * smallest y ccordinate in screen space
- */
-int Fl::y() {
-  BitMap r;
-  GetQDGlobalsScreenBits(&r);
-  return r.bounds.top + 20; // \todo 20 pixel menu bar?
-}
-
-
-/**
- * screen width (single monitor!?)
- */
-int Fl::w() {
-  BitMap r;
-  GetQDGlobalsScreenBits(&r);
-  return r.bounds.right - r.bounds.left;
-}
-
-
-/**
- * screen height (single monitor!?)
- */
-int Fl::h() {
-  BitMap r;
-  GetQDGlobalsScreenBits(&r);
-  return r.bounds.bottom - r.bounds.top - 20;
-}
-
-
-/**
- * get the current mouse pointer world coordinates
- */
-void Fl::get_mouse(int &x, int &y) 
-{
-  fl_open_display();
-  Point loc; 
-  GetMouse( &loc );
-  LocalToGlobal( &loc );
-  x = loc.h;
-  y = loc.v;
-}
-
-
-/**
- * convert Mac keystrokes to FLTK
- */
-unsigned short mac2fltk(ulong macKey) 
-{
-  unsigned short cc = macKeyLookUp[(macKey>>8)&0x7f];
-  if (cc) return cc;
-  return macKey&0xff;
-}
-
-
-/**
- * Initialize the given port for redraw and call the windw's flush() to actually draw the content
- */ 
-void Fl_X::flush()
-{
-  w->flush();
-  if (fl_gc) 
-    CGContextFlush(fl_gc);
-  SetOrigin( 0, 0 );
-}
-
-
-/**
- * Handle all clipping and redraw for the given port
- * There are two different callers for this event:
- * 1: the OS can request a redraw and provides all clipping itself
- * 2: Fl::flush() wants all redraws now
- */    
-void handleUpdateEvent( WindowPtr xid ) 
-{
-  Fl_Window *window = fl_find( xid );
-  if ( !window ) return;
-  GrafPtr oldPort;
-  GetPort( &oldPort );
-  SetPort( GetWindowPort(xid) );
-  Fl_X *i = Fl_X::i( window );
-  i->wait_for_expose = 0;
-  if ( window->damage() ) {
-    if ( i->region ) {
-      InvalWindowRgn( xid, i->region );
-    }
-  }
-  if ( i->region ) { // no region, so the sytem will take the update region from the OS
-    DisposeRgn( i->region );
-    i->region = 0;
-  }
-  for ( Fl_X *cx = i->xidChildren; cx; cx = cx->xidNext )
-  {
-    cx->w->clear_damage(window->damage()|FL_DAMAGE_EXPOSE);
-    cx->flush();
-    cx->w->clear_damage();
-  }
-  window->clear_damage(window->damage()|FL_DAMAGE_EXPOSE);
-  i->flush();
-  window->clear_damage();
-  SetPort( oldPort );
-}     
-
-// Gets the border sizes and the titlebar size
-static void get_window_frame_sizes(int &bx, int &by, int &bt) {
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
-	static HIRect contentRect = { {50,50}, {100,100} }; // a rect to stand in for the content rect of a real window
-	static HIThemeWindowDrawInfo metrics= {0, 
-		kThemeStateActive, kThemeDocumentWindow,
-		kThemeWindowHasFullZoom + kThemeWindowHasCloseBox + 
-		kThemeWindowHasCollapseBox + kThemeWindowHasTitleText, 
-		0, 0};
-	HIShapeRef shape1=0, shape2=0, shape3=0;
-	HIRect rect1, rect2, rect3;
-	OSStatus	status;
-	status  = HIThemeGetWindowShape(&contentRect, &metrics, kWindowStructureRgn, &shape1);
-	status |= HIThemeGetWindowShape(&contentRect, &metrics, kWindowContentRgn, &shape2);
-	status |= HIThemeGetWindowShape(&contentRect, &metrics, kWindowTitleBarRgn, &shape3);
-    
-	if (!status) 
-	{
-		HIShapeGetBounds(shape1, &rect1);
-		HIShapeGetBounds(shape2, &rect2);
-		HIShapeGetBounds(shape3, &rect3);
-		bt = rect3.size.height;
-		bx = rect2.origin.x  - rect1.origin.x;
-		by = rect2.origin.y  - rect1.origin.y - bt;
-		// fprintf(stderr, "HIThemeGetWindowShape succeeded bx=%d by=%d bt=%d\n", bx, by, bt);
-	}		
-	else 
-#endif // MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
-	{
-		// sets default dimensions
-		bx = by = 6;
-		bt = 22;
-		// fprintf(stderr, "HIThemeGetWindowShape failed, bx=%d by=%d bt=%d\n", bx, by, bt);
-	}
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
-	CFRelease(shape1); // we must free HIThemeGetWindowShape() (copied) handles 
-	CFRelease(shape2);
-	CFRelease(shape3);
-#endif // MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
-}
-
-/**
- * \todo this is a leftover from OS9 times. Please check how much applies to Carbon!
- */
-int Fl_X::fake_X_wm(const Fl_Window* w,int &X,int &Y, int &bt,int &bx, int &by) {
-  int W, H, xoff, yoff, dx, dy;
-  int ret = bx = by = bt = 0;
-  if (w->border() && !w->parent()) {
-    if (w->maxw != w->minw || w->maxh != w->minh) {
-      ret = 2;
-      get_window_frame_sizes(bx, by, bt);
-      /*
-        bx = 6; // \todo Mac : GetSystemMetrics(SM_CXSIZEFRAME);
-        by = 6; // \todo Mac : get Mac window frame size GetSystemMetrics(SM_CYSIZEFRAME);
-      */
-    } else {
-      ret = 1;
-      get_window_frame_sizes(bx, by, bt);
-      /*
-        bx = 6; // \todo Mac : GetSystemMetrics(SM_CXFIXEDFRAME);
-        by = 6; // \todo Mac : GetSystemMetrics(SM_CYFIXEDFRAME);
-      */
-    }
-  }
-  //The coordinates of the whole window, including non-client area
-  xoff = bx;
-  yoff = by + bt;
-  dx = 2*bx;
-  dy = 2*by + bt;
-  X = w->x()-xoff;
-  Y = w->y()-yoff;
-  W = w->w()+dx;
-  H = w->h()+dy;
-
-  //Proceed to positioning the window fully inside the screen, if possible
-
-  // let's get a little elaborate here. Mac OS X puts a lot of stuff on the desk
-  // that we want to avoid when positioning our window, namely the Dock and the
-  // top menu bar (and even more stuff in 10.4 Tiger). So we will go through the
-  // list of all available screens and find the one that this window is most
-  // likely to go to, and then reposition it to fit withing the 'good' area.
-  Rect r;
-  // find the screen, that the center of this window will fall into
-  int R = X+W, B = Y+H; // right and bottom
-  int cx = (X+R)/2, cy = (Y+B)/2; // center of window;
-  GDHandle gd = 0L;
-  for (gd = GetDeviceList(); gd; gd = GetNextDevice(gd)) {
-  GDPtr gp = *gd;
-  if (    cx >= gp->gdRect.left && cx <= gp->gdRect.right
-       && cy >= gp->gdRect.top  && cy <= gp->gdRect.bottom)
-    break;
-  }
-  // if the center doesn't fall on a screen, try the top left
-  if (!gd) {
-    for (gd = GetDeviceList(); gd; gd = GetNextDevice(gd)) {
-      GDPtr gp = *gd;
-      if (    X >= gp->gdRect.left && X <= gp->gdRect.right
-           && Y >= gp->gdRect.top  && Y <= gp->gdRect.bottom)
-        break;
-    }
-  }
-  // if that doesn't fall on a screen, try the top right
-  if (!gd) {
-    for (gd = GetDeviceList(); gd; gd = GetNextDevice(gd)) {
-      GDPtr gp = *gd;
-      if (    R >= gp->gdRect.left && R <= gp->gdRect.right
-           && Y >= gp->gdRect.top  && Y <= gp->gdRect.bottom)
-        break;
-    }
-  }
-  // if that doesn't fall on a screen, try the bottom left
-  if (!gd) {
-    for (gd = GetDeviceList(); gd; gd = GetNextDevice(gd)) {
-      GDPtr gp = *gd;
-      if (    X >= gp->gdRect.left && X <= gp->gdRect.right
-           && B >= gp->gdRect.top  && B <= gp->gdRect.bottom)
-        break;
-    }
-  }
-  // last resort, try the bottom right
-  if (!gd) {
-    for (gd = GetDeviceList(); gd; gd = GetNextDevice(gd)) {
-      GDPtr gp = *gd;
-      if (    R >= gp->gdRect.left && R <= gp->gdRect.right
-           && B >= gp->gdRect.top  && B <= gp->gdRect.bottom)
-        break;
-    }
-  }
-  // if we still have not found a screen, we will use the main
-  // screen, the one that has the application menu bar.
-  if (!gd) gd = GetMainDevice();
-  if (gd) {
-    GetAvailableWindowPositioningBounds(gd, &r);
-    if ( R > r.right )  X -= R - r.right;
-    if ( B > r.bottom ) Y -= B - r.bottom;
-    if ( X < r.left )   X = r.left;
-    if ( Y < r.top )    Y = r.top;
-  }
-
-  //Return the client area's top left corner in (X,Y)
-  X+=xoff;
-  Y+=yoff;
-
-  return ret;
-}
-
-/**
- * convert a Mac FSSpec structure into a Unix filename 
- */
-static int FSSpec2UnixPath( FSSpec *fs, char *dst )
-{
-  FSRef fsRef;
-  FSpMakeFSRef( fs, &fsRef );
-  FSRefMakePath( &fsRef, (UInt8*)dst, 1024 );
-  return strlen(dst);
-}
-static void convert_crlf(char * s, size_t len)
-{
-  // turn all \r characters into \n:
-  for (size_t x = 0; x < len; x++) if (s[x] == '\r') s[x] = '\n';
-}
-
-
-static DragReference currDragRef = 0;
-static char *currDragData = 0L;
-static int currDragSize = 0; 
-static OSErr currDragErr = noErr;
-Fl_Window *fl_dnd_target_window = 0;
-#include <FL/fl_draw.H>
-
-/**
- * Fill the currDrag* variables with the current DnD ASCII text.
- */
-static OSErr fillCurrentDragData(DragReference dragRef)
-{
-  OSErr ret = noErr;
-  char *dst = 0L;
-  
-  // shortcut through this whole procedure if this is still the same drag event
-  if (dragRef==currDragRef)
-    return currDragErr;
-  
-  // clear currDrag* for a new drag event
-  currDragRef = dragRef;
-  if (currDragData) free(currDragData);
-  currDragData = 0;
-  currDragSize = 0;
-  
-  // fill currDRag* with ASCII data, if available
-  UInt16 i, nItem;
-  ItemReference itemRef;
-  FlavorFlags flags;
-  Size itemSize, size = 0;
-  CountDragItems( dragRef, &nItem );
-
-  for ( i = 1; i <= nItem; i++ )
-  {
-    GetDragItemReferenceNumber( dragRef, i, &itemRef );
-    ret = GetFlavorFlags( dragRef, itemRef, 'utf8', &flags );
-    if ( ret == noErr )
-    {
-      GetFlavorDataSize( dragRef, itemRef, 'utf8', &itemSize );
-      size += itemSize;
-      continue;
-    }
-    ret = GetFlavorFlags( dragRef, itemRef, 'utxt', &flags );
-    if ( ret == noErr )
-    {
-      GetFlavorDataSize( dragRef, itemRef, 'utxt', &itemSize );
-      size += itemSize;
-      continue;
-    }
-    ret = GetFlavorFlags( dragRef, itemRef, 'TEXT', &flags );
-    if ( ret == noErr )
-    {
-      GetFlavorDataSize( dragRef, itemRef, 'TEXT', &itemSize );
-      size += itemSize;
-      continue;
-    }
-    ret = GetFlavorFlags( dragRef, itemRef, 'hfs ', &flags );
-    if ( ret == noErr )
-    {
-      size += 1024; //++ ouch! We should create the full pathname and figure out its length
-      continue;
-    }
-  }
-
-  if ( !size )
-  {
-    currDragErr = userCanceledErr;
-    return currDragErr;
-  }
-
-  currDragSize = size + nItem - 1;
-  currDragData = dst = (char*)malloc( size+nItem );;
-
-  for ( i = 1; i <= nItem; i++ )
-  {
-    GetDragItemReferenceNumber( dragRef, i, &itemRef );
-    ret = GetFlavorFlags( dragRef, itemRef, 'utf8', &flags );
-    if ( ret == noErr )
-    {
-      GetFlavorDataSize( dragRef, itemRef, 'utf8', &itemSize );
-      GetFlavorData( dragRef, itemRef, 'utf8', dst, &itemSize, 0L );
-      dst += itemSize;
-      *dst++ = '\n'; // add our element separator
-      continue;
-    }
-    GetDragItemReferenceNumber( dragRef, i, &itemRef );
-    ret = GetFlavorFlags( dragRef, itemRef, 'utxt', &flags );
-    if ( ret == noErr )
-    {
-      GetFlavorDataSize( dragRef, itemRef, 'utxt', &itemSize );
-      GetFlavorData( dragRef, itemRef, 'utxt', dst, &itemSize, 0L );
-      dst += itemSize;
-      *dst++ = '\n'; // add our element separator
-      continue;
-    }
-    ret = GetFlavorFlags( dragRef, itemRef, 'TEXT', &flags );
-    if ( ret == noErr )
-    {
-      GetFlavorDataSize( dragRef, itemRef, 'TEXT', &itemSize );
-      GetFlavorData( dragRef, itemRef, 'TEXT', dst, &itemSize, 0L );
-      dst += itemSize;
-      *dst++ = '\n'; // add our element separator
-      continue;
-    }
-    ret = GetFlavorFlags( dragRef, itemRef, 'hfs ', &flags );
-    if ( ret == noErr )
-    {
-      HFSFlavor hfs; itemSize = sizeof( hfs );
-      GetFlavorData( dragRef, itemRef, 'hfs ', &hfs, &itemSize, 0L );
-      itemSize = FSSpec2UnixPath( &hfs.fileSpec, dst ); // return the path name in UTF8
-      dst += itemSize;
-      if ( itemSize>1 && ( hfs.fileType=='fold' || hfs.fileType=='disk' ) ) 
-        *dst++ = '/';
-      *dst++ = '\n'; // add our element separator
-      continue;
-    }
-  }
-
-  dst[-1] = 0;
-  currDragSize = dst - currDragData - 1;
-  currDragErr = ret;
-  return ret;
-}
-
-/**
- * Drag'n'drop tracking handler
- */
-static pascal OSErr dndTrackingHandler( DragTrackingMessage msg, WindowPtr w, void *userData, DragReference dragRef )
-{
-  Fl_Window *target = (Fl_Window*)userData;
-  Fl::first_window(target);
-  Point mp;
-  static int px, py;
-  
-  fillCurrentDragData(dragRef);
-  Fl::e_length = currDragSize;
-  Fl::e_text = currDragData;
-  
-  switch ( msg )
-  {
-  case kDragTrackingEnterWindow:
-    // check if 'TEXT' is available
-    GetDragMouse( dragRef, &mp, 0 );
-    Fl::e_x_root = px = mp.h;
-    Fl::e_y_root = py = mp.v;
-    Fl::e_x = px - target->x();
-    Fl::e_y = py - target->y();
-    fl_dnd_target_window = target;
-    if ( Fl::handle( FL_DND_ENTER, target ) )
-      fl_cursor( FL_CURSOR_HAND ); //ShowDragHilite( ); // modify the mouse cursor?!
-    else
-      fl_cursor( FL_CURSOR_DEFAULT ); //HideDragHilite( dragRef );
-    breakMacEventLoop();
-    return noErr;
-  case kDragTrackingInWindow:
-    GetDragMouse( dragRef, &mp, 0 );
-    if ( mp.h==px && mp.v==py )
-      break;	//+ return previous condition for dnd hiliting
-    Fl::e_x_root = px = mp.h;
-    Fl::e_y_root = py = mp.v;
-    Fl::e_x = px - target->x();
-    Fl::e_y = py - target->y();
-    fl_dnd_target_window = target;
-    if ( Fl::handle( FL_DND_DRAG, target ) )
-      fl_cursor( FL_CURSOR_HAND ); //ShowDragHilite( ); // modify the mouse cursor?!
-    else
-      fl_cursor( FL_CURSOR_DEFAULT ); //HideDragHilite( dragRef );
-    breakMacEventLoop();
-    return noErr;
-    break;
-  case kDragTrackingLeaveWindow:
-    // HideDragHilite()
-    fl_cursor( FL_CURSOR_DEFAULT ); //HideDragHilite( dragRef );
-    if ( fl_dnd_target_window )
-    {
-      Fl::handle( FL_DND_LEAVE, fl_dnd_target_window );
-      fl_dnd_target_window = 0;
-    }
-    breakMacEventLoop();
-    return noErr;
-  }
-  return noErr;
-}
-
-
-/**
- * Drag'n'drop receive handler
- */
-static pascal OSErr dndReceiveHandler( WindowPtr w, void *userData, DragReference dragRef )
-{
-  Point mp;
-  OSErr ret;
-  
-  Fl_Window *target = fl_dnd_target_window = (Fl_Window*)userData;
-  Fl::first_window(target);
-  GetDragMouse( dragRef, &mp, 0 );
-  Fl::e_x_root = mp.h;
-  Fl::e_y_root = mp.v;
-  Fl::e_x = Fl::e_x_root - target->x();
-  Fl::e_y = Fl::e_y_root - target->y();
-  if ( !Fl::handle( FL_DND_RELEASE, target ) )
-    return userCanceledErr;
-
-  ret = fillCurrentDragData(dragRef);
-  if (ret==userCanceledErr)
-    return userCanceledErr;
-  
-  Fl::e_length = currDragSize;
-  Fl::e_text = currDragData;
-//  printf("Sending following text to widget %p:\n%s\n", Fl::belowmouse(), Fl::e_text);
-  int old_event = Fl::e_number;
-  Fl::belowmouse()->handle(Fl::e_number = FL_PASTE);
-  Fl::e_number = old_event;
-  
-  if (currDragData) {
-    free(currDragData);
-  }
-  currDragData = 0L;
-  currDragRef = 0;
-  Fl::e_text = 0L;
-  Fl::e_length = 0;
-  fl_dnd_target_window = 0L;
-  
-  breakMacEventLoop();
-  return noErr;
-}
-// fc:  
-static void  q_set_window_title(Window xid, const char * name ) {
-#if 1
-    CFStringRef utf8_title = CFStringCreateWithCString(NULL, (name ? name : ""), kCFStringEncodingUTF8);
-    SetWindowTitleWithCFString(xid, utf8_title);
-    CFRelease(utf8_title);
-#else // old non-utf8 code to remove after new utf8 code approval :
-    Str255 pTitle;
-    if (name) {
-      if (strlen(name) > 255) pTitle[0] = 255;
-      else pTitle[0] = strlen(name);
-      memcpy(pTitle+1, name, pTitle[0]);
-    } 
-    else 
-      pTitle[0] = 0;
-    SetWTitle(xid, pTitle);
-#endif
-}
-
-/**
- * go ahead, create that (sub)window
- * \todo we should make menu windows slightly transparent for the new Mac look
- */
-void Fl_X::make(Fl_Window* w)
-{
-  static int xyPos = 100;
-  if ( w->parent() ) // create a subwindow
-  {
-    Fl_Group::current(0);
-    Rect wRect;
-    wRect.top    = w->y();
-    wRect.left   = w->x();
-    wRect.bottom = w->y() + w->h(); if (wRect.bottom<=wRect.top) wRect.bottom = wRect.top+1;
-    wRect.right  = w->x() + w->w(); if (wRect.right<=wRect.left) wRect.right = wRect.left+1;
-    // our subwindow needs this structure to know about its clipping. 
-    Fl_X* x = new Fl_X;
-    x->other_xid = 0;
-    x->region = 0;
-    x->subRegion = 0;
-    x->cursor = fl_default_cursor;
-    x->gc = 0; // stay 0 for Quickdraw; fill with CGContext for Quartz
-    Fl_Window *win = w->window();
-    Fl_X *xo = Fl_X::i(win);
-    if (xo) {
-      x->xidNext = xo->xidChildren;
-      x->xidChildren = 0L;
-      xo->xidChildren = x;
-      x->xid = fl_xid(win);
-      x->w = w; w->i = x;
-      x->wait_for_expose = 0;
-      x->next = Fl_X::first; // must be in the list for ::flush()
-      Fl_X::first = x;
-      int old_event = Fl::e_number;
-      w->handle(Fl::e_number = FL_SHOW);
-      Fl::e_number = old_event;
-      w->redraw(); // force draw to happen
-    }
-    fl_show_iconic = 0;
-  }
-  else // create a desktop window
-  {
-    Fl_Group::current(0);
-    fl_open_display();
-    int winclass = kDocumentWindowClass;
-    int winattr = kWindowStandardHandlerAttribute | kWindowCloseBoxAttribute | kWindowCollapseBoxAttribute;
-    int xp = w->x();
-    int yp = w->y();
-    int wp = w->w();
-    int hp = w->h();
-    if (w->size_range_set) {
-      if ( w->minh != w->maxh || w->minw != w->maxw)
-        winattr |= kWindowFullZoomAttribute | kWindowResizableAttribute | kWindowLiveResizeAttribute;
-    } else {
-      if (w->resizable()) {
-        Fl_Widget *o = w->resizable();
-        int minw = o->w(); if (minw > 100) minw = 100;
-        int minh = o->h(); if (minh > 100) minh = 100;
-        w->size_range(w->w() - o->w() + minw, w->h() - o->h() + minh, 0, 0);
-        winattr |= kWindowFullZoomAttribute | kWindowResizableAttribute | kWindowLiveResizeAttribute;
-      } else {
-        w->size_range(w->w(), w->h(), w->w(), w->h());
-      }
-    }
-    int xwm = xp, ywm = yp, bt, bx, by;
-
-    if (!fake_X_wm(w, xwm, ywm, bt, bx, by)) {
-      // menu windows and tooltips
-      if (w->modal()||w->override()) {
-        winclass = kHelpWindowClass;
-        winattr  = 0;
-      } else {
-        winattr = 512; // kWindowNoTitleBarAttribute;
-      }
-    } else if (w->modal()) {
-      winclass = kMovableModalWindowClass;
-    }
-
-    if (by+bt) {
-      wp += 2*bx;
-      hp += 2*by+bt;
-    }
-    if (!(w->flags() & Fl_Widget::FORCE_POSITION)) {
-      // use the Carbon functions below for default window positioning
-      w->x(xyPos+Fl::x());
-      w->y(xyPos+Fl::y());
-      xyPos += 25;
-      if (xyPos>200) xyPos = 100;
-    } else {
-      if (!Fl::grab()) {
-        xp = xwm; yp = ywm;
-        w->x(xp);w->y(yp);
-      }
-      xp -= bx;
-      yp -= by+bt;
-    }
-
-    if (w->non_modal() && Fl_X::first && !fl_disable_transient_for) {
-      // find some other window to be "transient for":
-      Fl_Window* w = Fl_X::first->w;
-      while (w->parent()) w = w->window(); // todo: this code does not make any sense! (w!=w??)
-    }
-
-    Rect wRect;
-    wRect.top    = w->y();
-    wRect.left   = w->x();
-    wRect.bottom = w->y() + w->h(); if (wRect.bottom<=wRect.top) wRect.bottom = wRect.top+1;
-    wRect.right  = w->x() + w->w(); if (wRect.right<=wRect.left) wRect.right = wRect.left+1;
-
-    const char *name = w->label();
-
-    Fl_X* x = new Fl_X;
-    x->other_xid = 0; // room for doublebuffering image map. On OS X this is only used by overlay windows
-    x->region = 0;
-    x->subRegion = 0;
-    x->cursor = fl_default_cursor;
-    x->xidChildren = 0;
-    x->xidNext = 0;
-    x->gc = 0;
-
-    winattr &= GetAvailableWindowAttributes( winclass );	// make sure that the window will open
-    CreateNewWindow( winclass, winattr, &wRect, &(x->xid) );
-    q_set_window_title(x->xid, name);
-    MoveWindow(x->xid, wRect.left, wRect.top, 1);	// avoid Carbon Bug on old OS
-    if (w->non_modal() && !w->modal()) {
-      // Major kludge: this is to have the regular look, but stay above the document windows
-      SetWindowClass(x->xid, kFloatingWindowClass);
-      SetWindowActivationScope(x->xid, kWindowActivationScopeAll);
-    }
-    if (!(w->flags() & Fl_Widget::FORCE_POSITION))
-    {
-      WindowRef pw = Fl_X::first ? Fl_X::first->xid : 0 ;
-      if (w->modal()) {
-        RepositionWindow(x->xid, pw, kWindowAlertPositionOnParentWindowScreen);
-      } else if (w->non_modal()) {
-        RepositionWindow(x->xid, pw, kWindowCenterOnParentWindowScreen);
-      } else {
-        RepositionWindow(x->xid, pw, kWindowCascadeOnParentWindowScreen);
-      }
-    }
-    x->w = w; w->i = x;
-    x->wait_for_expose = 1;
-    x->next = Fl_X::first;
-    Fl_X::first = x;
-    { // Install Carbon Event handlers 
-      OSStatus ret;
-      EventHandlerUPP mousewheelHandler = NewEventHandlerUPP( carbonMousewheelHandler ); // will not be disposed by Carbon...
-      static EventTypeSpec mousewheelEvents[] = {
-        { kEventClassMouse, kEventMouseWheelMoved } };
-      ret = InstallWindowEventHandler( x->xid, mousewheelHandler,
-	        (int)(sizeof(mousewheelEvents)/sizeof(mousewheelEvents[0])),
-		mousewheelEvents, w, 0L );
-      EventHandlerUPP mouseHandler = NewEventHandlerUPP( carbonMouseHandler ); // will not be disposed by Carbon...
-      static EventTypeSpec mouseEvents[] = {
-        { kEventClassMouse, kEventMouseDown },
-        { kEventClassMouse, kEventMouseUp },
-        { kEventClassMouse, kEventMouseMoved },
-        { kEventClassMouse, kEventMouseDragged } };
-      ret = InstallWindowEventHandler( x->xid, mouseHandler, 4, mouseEvents, w, 0L );
-
-      EventHandlerUPP keyboardHandler = NewEventHandlerUPP( carbonKeyboardHandler ); // will not be disposed by Carbon...
-      static EventTypeSpec keyboardEvents[] = {
-        { kEventClassKeyboard, kEventRawKeyDown },
-        { kEventClassKeyboard, kEventRawKeyRepeat },
-        { kEventClassKeyboard, kEventRawKeyUp },
-        { kEventClassKeyboard, kEventRawKeyModifiersChanged } };
-      ret = InstallWindowEventHandler( x->xid, keyboardHandler, 4, keyboardEvents, w, 0L );
-
-      EventHandlerUPP textHandler = NewEventHandlerUPP( carbonTextHandler ); // will not be disposed by Carbon...
-      static EventTypeSpec textEvents[] = {
-        { kEventClassTextInput, kEventTextInputUnicodeForKeyEvent } };
-      ret = InstallWindowEventHandler( x->xid, textHandler, 1, textEvents, w, 0L );
-
-      EventHandlerUPP windowHandler = NewEventHandlerUPP( carbonWindowHandler ); // will not be disposed by Carbon...
-      static EventTypeSpec windowEvents[] = {
-        { kEventClassWindow, kEventWindowDrawContent },
-        { kEventClassWindow, kEventWindowShown },
-        { kEventClassWindow, kEventWindowHidden },
-        { kEventClassWindow, kEventWindowActivated },
-        { kEventClassWindow, kEventWindowDeactivated },
-        { kEventClassWindow, kEventWindowClose },
-        { kEventClassWindow, kEventWindowCollapsed },
-        { kEventClassWindow, kEventWindowExpanded },
-        { kEventClassWindow, kEventWindowBoundsChanging },
-        { kEventClassWindow, kEventWindowBoundsChanged } };
-      ret = InstallWindowEventHandler( x->xid, windowHandler, 10, windowEvents, w, 0L );
-      ret = InstallTrackingHandler( dndTrackingHandler, x->xid, w );
-      ret = InstallReceiveHandler( dndReceiveHandler, x->xid, w );
-    }
-
-    if ( ! Fl_X::first->next ) // if this is the first window, we need to bring the application to the front
-    { 
-      ProcessSerialNumber psn;
-      OSErr err = GetCurrentProcess( &psn );
-      if ( err==noErr ) SetFrontProcess( &psn );
-    }
-    
-    if (w->size_range_set) w->size_range_();
-    
-    if (winclass != kHelpWindowClass) {
-      Fl_Tooltip::enter(0);
-    }
-    if (w->size_range_set) w->size_range_();
-    ShowWindow(x->xid);
-    if (fl_show_iconic) { 
-      fl_show_iconic = 0;
-      CollapseWindow( x->xid, true ); // \todo Mac ; untested
-    } else {
-      w->set_visible();
-    }
-
-    Rect rect;
-    GetWindowBounds(x->xid, kWindowContentRgn, &rect);
-    w->x(rect.left); w->y(rect.top);
-    w->w(rect.right-rect.left); w->h(rect.bottom-rect.top);
-
-    int old_event = Fl::e_number;
-    w->handle(Fl::e_number = FL_SHOW);
-    Fl::e_number = old_event;
-    w->redraw(); // force draw to happen
-    
-    if (w->modal()) { Fl::modal_ = w; fl_fix_focus(); }
-  }
-}
-
-
-/**
- * Tell the OS what window sizes we want to allow
- */
-void Fl_Window::size_range_() {
-  size_range_set = 1;
-  HISize minSize = { minw, minh };
-  HISize maxSize = { maxw?maxw:32000, maxh?maxh:32000 };
-  if (i && i->xid)
-    SetWindowResizeLimits(i->xid, &minSize, &maxSize);
-}
-
-
-/**
- * returns pointer to the filename, or null if name ends with ':'
- */
-const char *fl_filename_name( const char *name ) 
-{
-  const char *p, *q;
-  if (!name) return (0);
-  for ( p = q = name ; *p ; ) 
-  {
-    if ( ( p[0] == ':' ) && ( p[1] == ':' ) ) 
-    {
-      q = p+2;
-      p++;
-    }
-    else if (p[0] == '/')
-      q = p + 1;
-    p++;
-  }
-  return q;
-}
-
-
-/**
- * set the window title bar
- * \todo make the titlebar icon work!
- */
-void Fl_Window::label(const char *name,const char */*iname*/) {
-  Fl_Widget::label(name);
-
-  if (shown() || i) {
-    q_set_window_title(fl_xid(this), name);
-  }
-}
-
-
-/**
- * make a window visible
- */
-void Fl_Window::show() {
-  image(Fl::scheme_bg_);
-  if (Fl::scheme_bg_) {
-    labeltype(FL_NORMAL_LABEL);
-    align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-  } else {
-    labeltype(FL_NO_LABEL);
-  }
-  Fl_Tooltip::exit(this);
-  if (!shown() || !i) {
-    Fl_X::make(this);
-  } else {
-      if ( !parent() )
-      {
-        if ( IsWindowCollapsed( i->xid ) ) CollapseWindow( i->xid, false );
-        if (!fl_capture) {
-          BringToFront(i->xid);
-          SelectWindow(i->xid);
-        }
-      }
-  }
-}
-
-
-/**
- * resize a window
- */
-void Fl_Window::resize(int X,int Y,int W,int H) {
-  if (W<=0) W = 1; // OS X does not like zero width windows
-  if (H<=0) H = 1;
-  int is_a_resize = (W != w() || H != h());
-//  printf("Fl_Winodw::resize(X=%d, Y=%d, W=%d, H=%d), is_a_resize=%d, resize_from_system=%p, this=%p\n",
-//         X, Y, W, H, is_a_resize, resize_from_system, this);
-  if (X != x() || Y != y()) set_flag(FORCE_POSITION);
-  else if (!is_a_resize) return;
-  if ( (resize_from_system!=this) && (!parent()) && shown()) {
-    if (is_a_resize) {
-      if (resizable()) {
-        if (W<minw) minw = W; // user request for resize takes priority
-        if (W>maxw) maxw = W; // over a previously set size_range
-        if (H<minh) minh = H;
-        if (H>maxh) maxh = H;
-        size_range(minw, minh, maxw, maxh);
-      } else {
-        size_range(W, H, W, H);
-      }
-      Rect dim; dim.left=X; dim.top=Y; dim.right=X+W; dim.bottom=Y+H;
-      SetWindowBounds(i->xid, kWindowContentRgn, &dim);
-      Rect all; all.top=-32000; all.bottom=32000; all.left=-32000; all.right=32000;
-      InvalWindowRect( i->xid, &all );    
-    } else {
-      MoveWindow(i->xid, X, Y, 0);
-    }
-  }
-  resize_from_system = 0;
-  if (is_a_resize) {
-    Fl_Group::resize(X,Y,W,H);
-    if (shown()) { 
-      redraw(); 
-    }
-  } else {
-    x(X); y(Y); 
-  }
-}
-
-
-/**
- * make all drawing go into this window (called by subclass flush() impl.)
- */
-void Fl_Window::make_current() 
-{
-  OSStatus err;
-  Fl_X::q_release_context();
-  if ( !fl_window_region )
-    fl_window_region = NewRgn();
-  fl_window = i->xid;
-  current_ = this;
-
-  SetPort( GetWindowPort(i->xid) ); // \todo check for the handling of doublebuffered windows
-
-  int xp = 0, yp = 0;
-  Fl_Window *win = this;
-  while ( win ) 
-  {
-    if ( !win->window() )
-      break;
-    xp += win->x();
-    yp += win->y();
-    win = (Fl_Window*)win->window();
-  }
-  SetOrigin( -xp, -yp );
-  
-  SetRectRgn( fl_window_region, 0, 0, w(), h() );
-  
-  // \todo for performance reasons: we don't have to create this unless the child windows moved
-  for ( Fl_X *cx = i->xidChildren; cx; cx = cx->xidNext )
-  {
-    Fl_Window *cw = cx->w;
-    if (!cw->visible_r()) continue;
-    Fl_Region r = NewRgn();
-    SetRectRgn( r, cw->x() - xp, cw->y() - yp, 
-                   cw->x() + cw->w() - xp, cw->y() + cw->h() - yp );
-    DiffRgn( fl_window_region, r, fl_window_region );
-    DisposeRgn( r );
-  }
- 
-  err = QDBeginCGContext(GetWindowPort(i->xid), &i->gc);
-  if (err!=noErr) 
-    fprintf(stderr, "Error %d in QDBeginCGContext\n", (int)err);
-  fl_gc = i->gc;
-  CGContextSaveGState(fl_gc);
-  Fl_X::q_fill_context();
-#if defined(USE_CAIRO)
-   if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
-#endif
-
-  fl_clip_region( 0 );
-  SetPortClipRegion( GetWindowPort(i->xid), fl_window_region );
-
-#if defined(USE_CAIRO)
-  // update the cairo_t context
-  if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this);
-#endif
-}
-
-// helper function to manage the current CGContext fl_gc
-extern Fl_Color fl_color_;
-extern class Fl_Font_Descriptor *fl_fontsize;
-extern void fl_font(class Fl_Font_Descriptor*);
-extern void fl_quartz_restore_line_style_();
-
-// FLTK has only one global graphics state. This function copies the FLTK state into the
-// current Quartz context
-void Fl_X::q_fill_context() {
-  if (!fl_gc) return;
-  int hgt = 0;
-  if (fl_window) {
-    Rect portRect; 
-    GetPortBounds(GetWindowPort( fl_window ), &portRect);
-    hgt = portRect.bottom-portRect.top;
-  } else {
-    hgt = CGBitmapContextGetHeight(fl_gc);
-  }
-  CGContextTranslateCTM(fl_gc, 0.5, hgt-0.5f);
-  CGContextScaleCTM(fl_gc, 1.0f, -1.0f);
-  fl_font(fl_fontsize);
-  fl_color(fl_color_);
-  fl_quartz_restore_line_style_();
-}
-
-// The only way to reset clipping to its original state is to pop the current graphics
-// state and restore the global state.
-void Fl_X::q_clear_clipping() {
-  if (!fl_gc) return;
-  CGContextRestoreGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-}
-
-// Give the Quartz context back to the system
-void Fl_X::q_release_context(Fl_X *x) {
-  if (x && x->gc!=fl_gc) return;
-  if (!fl_gc) return;
-  CGContextRestoreGState(fl_gc);
-  if (fl_window) {
-    OSStatus err = QDEndCGContext(GetWindowPort(fl_window), &fl_gc);
-    if (err!=noErr)
-      fprintf(stderr, "Error %d in QDEndCGContext\n", (int)err);
-  }
-  fl_gc = 0;
-#if defined(USE_CAIRO)
-  if (Fl::cairo_autolink_context()) Fl::cairo_make_current((Fl_Window*) 0); // capture gc changes automatically to update the cairo context adequately
-#endif
-}
-
-void Fl_X::q_begin_image(CGRect &rect, int cx, int cy, int w, int h) {
-  CGContextSaveGState(fl_gc);
-  CGAffineTransform mx = CGContextGetCTM(fl_gc);
-  CGRect r2 = rect;
-  r2.origin.x -= 0.5f;
-  r2.origin.y -= 0.5f;
-  CGContextClipToRect(fl_gc, r2);
-  mx.d = -1.0; mx.tx = -mx.tx;
-  CGContextConcatCTM(fl_gc, mx);
-  rect.origin.x = -(mx.tx+0.5f) + rect.origin.x     - cx;
-  rect.origin.y =  (mx.ty+0.5f) - rect.origin.y - h + cy;
-  rect.size.width = w;
-  rect.size.height = h;
-}
-
-void Fl_X::q_end_image() {
-  CGContextRestoreGState(fl_gc);
-}
-
-////////////////////////////////////////////////////////////////
-// Copy & Paste fltk implementation.
-////////////////////////////////////////////////////////////////
-
-// fltk 1.3 clipboard support constant definitions:
-const CFStringRef	flavorNames[] = {
-  CFSTR("public.utf16-plain-text"), 
-  CFSTR("public.utf8-plain-text"),
-  CFSTR("com.apple.traditional-mac-plain-text") };
-const CFStringEncoding encodings[] = { 
-  kCFStringEncodingUTF16, 
-  kCFStringEncodingUTF8, 
-  kCFStringEncodingMacRoman};
-const size_t handledFlavorsCount = sizeof(encodings)/sizeof(CFStringEncoding);
-
-// clipboard variables definitions :
-Fl_Widget *fl_selection_requestor = 0;
-char *fl_selection_buffer[2];
-int fl_selection_length[2];
-static int fl_selection_buffer_length[2];
-
-#ifdef USE_PASTEBOARD
-static PasteboardRef myPasteboard = 0;
-static void allocatePasteboard() {
-  if (!myPasteboard)
-    PasteboardCreate(kPasteboardClipboard, &myPasteboard);
-}
-#else
-#endif
-
-#ifndef USE_PASTEBOARD
-static ScrapRef myScrap = 0;
-#endif
-
-/**
- * create a selection
- * owner: widget that created the selection
- * stuff: pointer to selected data
- * size of selected data
- */
-void Fl::copy(const char *stuff, int len, int clipboard) {
-  if (!stuff || len<0) return;
-  if (len+1 > fl_selection_buffer_length[clipboard]) {
-    delete[] fl_selection_buffer[clipboard];
-    fl_selection_buffer[clipboard] = new char[len+100];
-    fl_selection_buffer_length[clipboard] = len+100;
-  }
-  memcpy(fl_selection_buffer[clipboard], stuff, len);
-  fl_selection_buffer[clipboard][len] = 0; // needed for direct paste
-  fl_selection_length[clipboard] = len;
-  if (clipboard) {
-#ifdef USE_PASTEBOARD
-    // FIXME no error checking done yet!
-    allocatePasteboard();
-    OSStatus err = PasteboardClear(myPasteboard);
-    if (err!=noErr) return; // clear did not work, maybe not owner of clipboard.
-    PasteboardSynchronize(myPasteboard);
-    CFDataRef text = CFDataCreate(kCFAllocatorDefault, (UInt8*)fl_selection_buffer[1], len);
-    if (text==NULL) return; // there was a pb creating the object, abort.
-    err=PasteboardPutItemFlavor(myPasteboard, (PasteboardItemID)1, CFSTR("public.utf8-plain-text"), text, 0);
-    CFRelease(text);
-#else
-    OSStatus err = ClearCurrentScrap(); // whatever happens we should clear the current scrap.
-    if(err!=noErr) {myScrap=0; return;} // don't get current scrap if a prev err occured. 
-    err = GetCurrentScrap( &myScrap );
-    if ( err != noErr ) {
-      myScrap = 0;
-      return;
-    }
-    // Previous version changed \n to \r before sending the text, but I would
-    // prefer to leave the local buffer alone, so a copied buffer may be
-    // needed. Check to see if this is necessary on OS/X.
-    PutScrapFlavor( myScrap, kScrapFlavorTypeText, 0,
-		    len, fl_selection_buffer[1] );
-#endif
-  }
-}
-
-// Call this when a "paste" operation happens:
-void Fl::paste(Fl_Widget &receiver, int clipboard) {
-    if (clipboard) {
-	// see if we own the selection, if not go get it:
-	fl_selection_length[1] = 0;
-#ifdef USE_PASTEBOARD
-	OSStatus err = noErr;
-	Boolean found = false;
-	CFDataRef flavorData = NULL;
-	CFStringEncoding encoding = 0;
-
-	allocatePasteboard();
-	PasteboardSynchronize(myPasteboard);
-	ItemCount nFlavor = 0, i, j;
-	err = PasteboardGetItemCount(myPasteboard, &nFlavor);
-	if (err==noErr) {
-	    for (i=1; i<=nFlavor; i++) {
-		PasteboardItemID itemID = 0;
-		CFArrayRef flavorTypeArray = NULL;
-		found = false;
-		err = PasteboardGetItemIdentifier(myPasteboard, i, &itemID);
-		if (err!=noErr) continue;
-		err = PasteboardCopyItemFlavors(myPasteboard, itemID, &flavorTypeArray);
-		if (err!=noErr) {
-		  if (flavorTypeArray) {CFRelease(flavorTypeArray); flavorTypeArray = NULL;}
-		  continue;
-		}
-		CFIndex flavorCount = CFArrayGetCount(flavorTypeArray);
-		for (j = 0; j < handledFlavorsCount; j++) {
-		    for (CFIndex flavorIndex=0; flavorIndex<flavorCount; flavorIndex++) {
-			CFStringRef flavorType = (CFStringRef)CFArrayGetValueAtIndex(flavorTypeArray, flavorIndex);
-			if (UTTypeConformsTo(flavorType, flavorNames[j])) {
-			    err = PasteboardCopyItemFlavorData( myPasteboard, itemID, flavorNames[j], &flavorData );
-			    if(err != noErr) continue;
-			    encoding = encodings[j];
-			    found = true;
-			    break;
-			}
-		    }
-		    if(found) break;
-		}
-		if (flavorTypeArray) {CFRelease(flavorTypeArray); flavorTypeArray = NULL;}
-		if (found) break;
-	    }
-	    if(found) {
-		CFIndex len = CFDataGetLength(flavorData);
-		CFStringRef mycfs = CFStringCreateWithBytes(NULL, CFDataGetBytePtr(flavorData), len, encoding, false);
-		CFRelease(flavorData);
-		len = CFStringGetMaximumSizeForEncoding(CFStringGetLength(mycfs), kCFStringEncodingUTF8) + 1;
-		if ( len >= fl_selection_buffer_length[1] ) {
-		    fl_selection_buffer_length[1] = len;
-		    delete[] fl_selection_buffer[1];
-		    fl_selection_buffer[1] = new char[len];
-		}
-		CFStringGetCString(mycfs, fl_selection_buffer[1], len, kCFStringEncodingUTF8);
-		CFRelease(mycfs);
-		len = strlen(fl_selection_buffer[1]);
-		fl_selection_length[1] = len;
-		convert_crlf(fl_selection_buffer[1],len); // turn all \r characters into \n:
-	    }
-	}
-#else
-	ScrapRef scrap = 0;
-	if (GetCurrentScrap(&scrap) == noErr && scrap != myScrap &&
-	    GetScrapFlavorSize(scrap, kScrapFlavorTypeText, &len) == noErr) {
-	    if ( len >= fl_selection_buffer_length[1] ) {
-		fl_selection_buffer_length[1] = len + 32;
-		delete[] fl_selection_buffer[1];
-		fl_selection_buffer[1] = new char[len + 32];
-	    }
-	    fl_selection_length[1] = len; len++;
-	    GetScrapFlavorData( scrap, kScrapFlavorTypeText, &len,
-			       fl_selection_buffer[1] );
-	    fl_selection_buffer[1][fl_selection_length[1]] = 0;
-	    convert_crlf(fl_selection_buffer[1],len); 
-	}
-#endif
-    }
-    Fl::e_text = fl_selection_buffer[clipboard];
-    Fl::e_length = fl_selection_length[clipboard];
-    if (!Fl::e_text) Fl::e_text = (char *)"";
-    receiver.handle(FL_PASTE);
-}
-
-void Fl::add_timeout(double time, Fl_Timeout_Handler cb, void* data)
-{
-   // check, if this timer slot exists already
-   for (int i = 0;  i < mac_timer_used;  ++i) {
-        MacTimeout& t = mac_timers[i];
-        // if so, simply change the fire interval
-        if (t.callback == cb  &&  t.data == data) {
-            SetEventLoopTimerNextFireTime(t.timer, (EventTimerInterval)time);
-            t.pending = 1;
-            return;
-        }
-    }
-    // no existing timer to use. Create a new one:
-    int timer_id = -1;
-    // find an empty slot in the timer array
-    for (int i = 0;  i < mac_timer_used;  ++i) {
-        if ( !mac_timers[i].timer ) {
-            timer_id = i;
-            break;
-        }
-    }
-    // if there was no empty slot, append a new timer
-    if (timer_id == -1) {
-        // make space if needed
-        if (mac_timer_used == mac_timer_alloc) {
-            realloc_timers();
-        }
-        timer_id = mac_timer_used++;
-    }
-    // now install a brand new timer
-    MacTimeout& t = mac_timers[timer_id];
-    EventTimerInterval fireDelay = (EventTimerInterval)time;
-    EventLoopTimerUPP  timerUPP = NewEventLoopTimerUPP(do_timer);
-    EventLoopTimerRef  timerRef = 0;
-    OSStatus err = InstallEventLoopTimer(GetMainEventLoop(), fireDelay, 0, timerUPP, data, &timerRef);
-    if (err == noErr) {
-        t.callback = cb;
-        t.data     = data;
-        t.timer    = timerRef;
-        t.upp      = timerUPP;
-        t.pending  = 1;
-    } else {
-        if (timerRef) 
-            RemoveEventLoopTimer(timerRef);
-        if (timerUPP)
-            DisposeEventLoopTimerUPP(timerUPP);
-    }
-}
-
-void Fl::repeat_timeout(double time, Fl_Timeout_Handler cb, void* data)
-{
-    // currently, repeat_timeout does not subtract the trigger time of the previous timer event as it should.
-    add_timeout(time, cb, data);
-}
-
-int Fl::has_timeout(Fl_Timeout_Handler cb, void* data)
-{
-   for (int i = 0;  i < mac_timer_used;  ++i) {
-        MacTimeout& t = mac_timers[i];
-        if (t.callback == cb  &&  t.data == data && t.pending) {
-            return 1;
-        }
-    }
-    return 0;
-}
-
-void Fl::remove_timeout(Fl_Timeout_Handler cb, void* data)
-{
-   for (int i = 0;  i < mac_timer_used;  ++i) {
-        MacTimeout& t = mac_timers[i];
-        if (t.callback == cb  && ( t.data == data || data == NULL)) {
-            delete_timer(t);
-        }
-    }
-}
-
-int MacUnlinkWindow(Fl_X *ip, Fl_X *start) {
-  if (!ip) return 0;
-  if (start) {
-    Fl_X *pc = start;
-    while (pc) {
-      if (pc->xidNext == ip) {
-        pc->xidNext = ip->xidNext;
-        return 1;
-      }
-      if (pc->xidChildren) {
-        if (pc->xidChildren == ip) {
-          pc->xidChildren = ip->xidNext;
-          return 1;
-        }
-        if (MacUnlinkWindow(ip, pc->xidChildren))
-          return 1;
-      }
-      pc = pc->xidNext;
-    }
-  } else {
-    for ( Fl_X *pc = Fl_X::first; pc; pc = pc->next ) {
-      if (MacUnlinkWindow(ip, pc))
-        return 1;
-    }
-  }  
-  return 0;
-}
-
-static void MacRelinkWindow(Fl_X *x, Fl_X *p) {
-  if (!x || !p) return;
-  // first, check if 'x' is already registered as a child of 'p'
-  for (Fl_X *i = p->xidChildren; i; i=i->xidNext) {
-    if (i == x) return;
-  }
-  // now add 'x' as the first child of 'p'
-  x->xidNext = p->xidChildren;
-  p->xidChildren = x;
-}
-
-void MacDestroyWindow(Fl_Window *w, WindowPtr p) {
-  MacUnmapWindow(w, p);
-  if (w && !w->parent() && p)
-    DisposeWindow(p);
-}
-
-void MacMapWindow(Fl_Window *w, WindowPtr p) {
-  if (w && p)
-    ShowWindow(p);
-  //+ link to window list
-  if (w && w->parent()) {
-    MacRelinkWindow(Fl_X::i(w), Fl_X::i(w->window()));
-    w->redraw();
-  }
-}
-
-void MacUnmapWindow(Fl_Window *w, WindowPtr p) {
-  if (w && !w->parent() && p) 
-    HideWindow(p);
-  if (w && Fl_X::i(w)) 
-    MacUnlinkWindow(Fl_X::i(w));
-}
-#endif // FL_DOXYGEN
-
-//
-// End of "$Id: Fl_mac.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $".
-//
diff --git a/common/fltk/src/Fl_own_colormap.cxx b/common/fltk/src/Fl_own_colormap.cxx
deleted file mode 100644
index 3a76688..0000000
--- a/common/fltk/src/Fl_own_colormap.cxx
+++ /dev/null
@@ -1,90 +0,0 @@
-//
-// "$Id: Fl_own_colormap.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Private colormap support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Using the default system colormap can be a bad idea on PseudoColor
-// visuals, since typically every application uses the default colormap and
-// you can run out of colormap entries easily.
-//
-// The solution is to always create a new colormap on PseudoColor displays
-// and copy the first 16 colors from the default colormap so that we won't
-// get huge color changes when switching windows.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-/** \fn Fl::own_colormap()
-    Makes FLTK use its own colormap.  This may make FLTK display better
-    and will reduce conflicts with other programs that want lots of colors.
-    However the colors may flash as you move the cursor between windows.
-    
-    <P>This does nothing if the current visual is not colormapped.
-*/
-#ifdef WIN32
-// There is probably something relevant to do on MSWindows 8-bit displays
-// but I don't know what it is
-
-void Fl::own_colormap() {}
-
-#elif defined(__APPLE__)
-// MacOS X always provides a TrueColor interface...
-
-void Fl::own_colormap() {}
-#else
-// X version
-
-void Fl::own_colormap() {
-  fl_open_display();
-#if USE_COLORMAP
-  switch (fl_visual->c_class) {
-  case GrayScale :
-  case PseudoColor :
-  case DirectColor :
-    break;
-  default:
-    return; // don't do anything for non-colormapped visuals
-  }
-  int i;
-  XColor colors[16];
-  // Get the first 16 colors from the default colormap...
-  for (i = 0; i < 16; i ++) colors[i].pixel = i;
-  XQueryColors(fl_display, fl_colormap, colors, 16);
-  // Create a new colormap...
-  fl_colormap = XCreateColormap(fl_display,
-				RootWindow(fl_display,fl_screen),
-				fl_visual->visual, AllocNone);
-  // Copy those first 16 colors to our own colormap:
-  for (i = 0; i < 16; i ++)
-    XAllocColor(fl_display, fl_colormap, colors + i);
-#endif
-}
-
-#endif
-
-//
-// End of "$Id: Fl_own_colormap.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_visual.cxx b/common/fltk/src/Fl_visual.cxx
deleted file mode 100644
index 98c3c3a..0000000
--- a/common/fltk/src/Fl_visual.cxx
+++ /dev/null
@@ -1,155 +0,0 @@
-//
-// "$Id: Fl_visual.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Visual support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Set the default visual according to passed switches:
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-/** \fn  Fl::visual(int flags)
-    Selects a visual so that your graphics are drawn correctly.  This is
-    only allowed before you call show() on any windows.  This does nothing
-    if the default visual satisfies the capabilities, or if no visual
-    satisfies the capabilities, or on systems that don't have such
-    brain-dead notions.
-    
-    <P>Only the following combinations do anything useful:
-    
-    <UL>
-    <LI>Fl::visual(FL_RGB)
-    <BR>Full/true color (if there are several depths FLTK chooses  the
-    largest).  Do this if you use fl_draw_image
-    for much better (non-dithered)  output.
-    <BR>&nbsp; </LI>
-    <LI>Fl::visual(FL_RGB8)
-    <BR>Full color with at least 24 bits of color. FL_RGB will
-    always  pick this if available, but if not it will happily return a
-    less-than-24 bit deep visual.  This call fails if 24 bits are not
-    available.
-    <BR>&nbsp; </LI>
-    <LI>Fl::visual(FL_DOUBLE|FL_INDEX)
-    <BR>Hardware double buffering.  Call this if you are going to use 
-    Fl_Double_Window.
-    <BR>&nbsp; </LI>
-    <LI>Fl::visual(FL_DOUBLE|FL_RGB)</LI>
-    <LI>Fl::visual(FL_DOUBLE|FL_RGB8)
-    <BR>Hardware double buffering and full color.
-    </UL>
-    
-    <P>This returns true if the system has the capabilities by default or
-    FLTK suceeded in turing them on.  Your program will still work even if
-    this returns false (it just won't look as good).
-*/
-#ifdef WIN32
-int Fl::visual(int flags) {
-  fl_GetDC(0);
-  if (flags & FL_DOUBLE) return 0;
-  if (!(flags & FL_INDEX) &&
-    GetDeviceCaps(fl_gc,BITSPIXEL) <= 8) return 0;
-  if ((flags & FL_RGB8) && GetDeviceCaps(fl_gc,BITSPIXEL)<24) return 0;
-  return 1;
-}
-#elif defined(__APPLE__)
-
-// \todo Mac : need to implement Visual flags
-int Fl::visual(int flags) {
-  (void)flags;
-  return 1;
-}
-
-#else
-
-#if USE_XDBE
-#include <X11/extensions/Xdbe.h>
-#endif
-
-static int test_visual(XVisualInfo& v, int flags) {
-  if (v.screen != fl_screen) return 0;
-#if USE_COLORMAP
-  if (!(flags & FL_INDEX)) {
-    if (v.c_class != StaticColor && v.c_class != TrueColor) return 0;
-    if (v.depth <= 8) return 0; // fltk will work better in colormap mode
-  }
-  if (flags & FL_RGB8) {
-    if (v.depth < 24) return 0;
-  }
-  // for now, fltk does not like colormaps of more than 8 bits:
-  if ((v.c_class&1) && v.depth > 8) return 0;
-#else
-  // simpler if we can't use colormapped visuals at all:
-  if (v.c_class != StaticColor && v.c_class != TrueColor) return 0;
-#endif
-#if USE_XDBE
-  if (flags & FL_DOUBLE) {
-    static XdbeScreenVisualInfo *xdbejunk;
-    if (!xdbejunk) {
-      int event_base, error_base;
-      if (!XdbeQueryExtension(fl_display, &event_base, &error_base)) return 0;
-      Drawable root = RootWindow(fl_display,fl_screen);
-      int numscreens = 1;
-      xdbejunk = XdbeGetVisualInfo(fl_display,&root,&numscreens);
-      if (!xdbejunk) return 0;
-    }
-    for (int j = 0; ; j++) {
-      if (j >= xdbejunk->count) return 0;
-      if (xdbejunk->visinfo[j].visual == v.visualid) break;
-    }
-  }
-#endif
-  return 1;
-}
-
-int Fl::visual(int flags) {
-#if USE_XDBE == 0
-  if (flags & FL_DOUBLE) return 0;
-#endif
-  fl_open_display();
-  // always use default if possible:
-  if (test_visual(*fl_visual, flags)) return 1;
-  // get all the visuals:
-  XVisualInfo vTemplate;
-  int num;
-  XVisualInfo *visualList = XGetVisualInfo(fl_display, 0, &vTemplate, &num);
-  // find all matches, use the one with greatest depth:
-  XVisualInfo *found = 0;
-  for (int i=0; i<num; i++) if (test_visual(visualList[i], flags)) {
-    if (!found || found->depth < visualList[i].depth)
-      found = &visualList[i];
-  }
-  if (!found) {XFree((void*)visualList); return 0;}
-  fl_visual = found;
-  fl_colormap = XCreateColormap(fl_display, RootWindow(fl_display,fl_screen),
-				fl_visual->visual, AllocNone);
-  return 1;
-}
-
-#endif
-
-//
-// End of "$Id: Fl_visual.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/Fl_win32.cxx b/common/fltk/src/Fl_win32.cxx
deleted file mode 100644
index eaae51d..0000000
--- a/common/fltk/src/Fl_win32.cxx
+++ /dev/null
@@ -1,2611 +0,0 @@
-//
-// "$Id: Fl_win32.cxx 8759 2011-05-30 12:33:51Z manolo $"
-//
-// WIN32-specific code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This file contains win32-specific code for fltk which is always linked
-// in.  Search other files for "WIN32" or filenames ending in _win32.cxx
-// for other system-specific code.
-
-// This file must be #include'd in Fl.cxx and not compiled separately.
-
-#ifndef FL_DOXYGEN
-#include <FL/Fl.H>
-#include <FL/fl_utf8.h>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/Enumerations.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/Fl_Paged_Device.H>
-#include "flstring.h"
-#include "Fl_Font.H"
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <time.h>
-#ifdef __CYGWIN__
-#  include <sys/time.h>
-#  include <unistd.h>
-#endif
-
-#if !defined(NO_TRACK_MOUSE)
-#  include <commctrl.h>	// TrackMouseEvent
-// fabien: Ms Visual Studio >= 2003 permit embedded lib reference
-// that makes fltk use easier as only fltk libs are now requested
-// This idea could be extended to fltk libs themselves, 
-// implementer should then care about DLL linkage flags ...
-#  if (_MSC_VER>=1310)
-#    pragma comment (lib, "comctl32.lib")
-#  endif
-#endif
-
-#if defined(__GNUC__)
-# include <wchar.h>
-#endif
-
-#include <ole2.h>
-#include <shellapi.h>
-
-#include "aimm.h"
-
-//
-// USE_ASYNC_SELECT - define it if you have WSAAsyncSelect()...
-// USE_ASYNC_SELECT is OBSOLETED in 1.3 for the following reasons:
-/*
-  This feature was supposed to provide an efficient alternative to the current
-  polling method, but as it has been discussed (Thanks Albrecht!) :
-  - the async mode would imply to change the socket to non blocking mode.
-    This can have unexpected side effects for 3rd party apps, especially
-    if it is set on-the-fly when socket service is really needed, as it is 
-    done today and on purpose, but still the 3rd party developer wouldn't easily
-    control the sequencing of socket operations.
-  - Finer granularity of events furthered by the async select is a plus only 
-    for socket 3rd party impl., it is simply not needed for the 'light' fltk
-    use we make of wsock, so here it would also be a bad point, because of all
-    the logic add-ons necessary for using this functionality, without a clear
-    benefit.
-
-  So async mode select would not add benefits to fltk, worse, it can slowdown
-  fltk because of this finer granularity and instrumentation code to be added
-  for async mode proper operation, not mentioning the side effects...
-*/
-
-static Fl_GDI_Graphics_Driver fl_gdi_driver;
-static Fl_Display_Device fl_gdi_display(&fl_gdi_driver);
-FL_EXPORT Fl_Graphics_Driver *fl_graphics_driver = (Fl_Graphics_Driver*)&fl_gdi_driver; // the current target driver of graphics operations
-Fl_Surface_Device* Fl_Surface_Device::_surface = (Fl_Surface_Device*)&fl_gdi_display; // the current target surface of graphics operations
-Fl_Display_Device *Fl_Display_Device::_display = &fl_gdi_display; // the platform display
-
-bool use_simple_keyboard = false;
-
-// dynamic wsock dll handling api:
-#if defined(__CYGWIN__) && !defined(SOCKET)
-# define SOCKET int
-#endif
-
-// note: winsock2.h has been #include'd in Fl.cxx
-#define WSCK_DLL_NAME "WS2_32.DLL"
-
-typedef int (WINAPI* fl_wsk_select_f)(int, fd_set*, fd_set*, fd_set*, const struct timeval*);
-typedef int (WINAPI* fl_wsk_fd_is_set_f)(SOCKET, fd_set *);
-
-static HMODULE s_wsock_mod = 0;
-static fl_wsk_select_f s_wsock_select = 0;
-static fl_wsk_fd_is_set_f fl_wsk_fd_is_set = 0;
-
-static HMODULE get_wsock_mod() {
-  if (!s_wsock_mod) {
-    s_wsock_mod = LoadLibrary(WSCK_DLL_NAME);
-    if (s_wsock_mod==NULL)
-      Fl::fatal("FLTK Lib Error: %s file not found! Please check your winsock dll accessibility.\n",WSCK_DLL_NAME);
-    s_wsock_select = (fl_wsk_select_f) GetProcAddress(s_wsock_mod, "select");
-    fl_wsk_fd_is_set = (fl_wsk_fd_is_set_f) GetProcAddress(s_wsock_mod, "__WSAFDIsSet");
-  }
-  return s_wsock_mod;
-}
-
-/*
- * Dynamic linking of imm32.dll
- * This library is only needed for a hand full (four ATM) functions relating to 
- * international text rendering and locales. Dynamically loading reduces initial
- * size and link dependencies.
- */
-static HMODULE s_imm_module = 0;
-typedef BOOL (WINAPI* flTypeImmAssociateContextEx)(HWND, HIMC, DWORD);
-static flTypeImmAssociateContextEx flImmAssociateContextEx = 0;
-typedef HIMC (WINAPI* flTypeImmGetContext)(HWND);
-static flTypeImmGetContext flImmGetContext = 0;
-typedef BOOL (WINAPI* flTypeImmSetCompositionWindow)(HIMC, LPCOMPOSITIONFORM);
-static flTypeImmSetCompositionWindow flImmSetCompositionWindow = 0;
-typedef BOOL (WINAPI* flTypeImmReleaseContext)(HWND, HIMC);
-static flTypeImmReleaseContext flImmReleaseContext = 0;
-typedef BOOL (WINAPI* flTypeImmIsIME)(HKL);
-static flTypeImmIsIME flImmIsIME = 0;
-
-static HMODULE get_imm_module() {
-  if (!s_imm_module) {
-    s_imm_module = LoadLibrary("IMM32.DLL");
-    if (!s_imm_module)
-      Fl::fatal("FLTK Lib Error: IMM32.DLL file not found!\n\n"
-        "Please check your input method manager library accessibility.");
-    flImmAssociateContextEx = (flTypeImmAssociateContextEx)GetProcAddress(s_imm_module, "ImmAssociateContextEx");
-    flImmGetContext = (flTypeImmGetContext)GetProcAddress(s_imm_module, "ImmGetContext");
-    flImmSetCompositionWindow = (flTypeImmSetCompositionWindow)GetProcAddress(s_imm_module, "ImmSetCompositionWindow");
-    flImmReleaseContext = (flTypeImmReleaseContext)GetProcAddress(s_imm_module, "ImmReleaseContext");
-    flImmIsIME = (flTypeImmIsIME)GetProcAddress(s_imm_module, "ImmIsIME");
-  }
-  return s_imm_module;
-}
-
-// USE_TRACK_MOUSE - define NO_TRACK_MOUSE if you don't have
-// TrackMouseEvent()...
-//
-// Now (Dec. 2008) we can assume that current Cygwin/MinGW versions
-// support the TrackMouseEvent() function, but WinCE obviously doesn't
-// support it (STR 2095). Therefore, USE_TRACK_MOUSE is enabled by 
-// default, but you can disable it by defining NO_TRACK_MOUSE.
-//
-// TrackMouseEvent is only used to support window leave notifications
-// under Windows. It can be used to get FL_LEAVE events, when the
-// mouse leaves the _main_ application window (FLTK detects subwindow
-// leave events by using normal move events).
-//
-// Implementation note: If the mouse cursor leaves one subwindow and
-// enters another window, then Windows sends a WM_MOUSEMOVE message to
-// the new window before it sends a WM_MOUSELEAVE message to the old
-// (just left) window. We save the current mouse window in a static variable,
-// and if we get a WM_MOUSELEAVE event for the current mouse window, this
-// means that the top level window has been left (otherwise we would have
-// got another WM_MOUSEMOVE message before).
-
-// #define NO_TRACK_MOUSE
-
-#if !defined(NO_TRACK_MOUSE)
-# define USE_TRACK_MOUSE
-#endif // NO_TRACK_MOUSE
-
-static Fl_Window *track_mouse_win=0;	// current TrackMouseEvent() window
-
-// USE_CAPTURE_MOUSE_WIN - this must be defined for TrackMouseEvent to work
-// correctly with subwindows - otherwise a single mouse click and release
-// (without a move) would generate phantom leave events.
-// This defines, if the current mouse window (maybe a subwindow) or the 
-// main window should get mouse events after pushing (and holding) a mouse
-// button, i.e. when dragging the mouse. This is done by calling SetCapture
-// (see below).
-
-#ifdef USE_TRACK_MOUSE
-#define USE_CAPTURE_MOUSE_WIN
-#endif // USE_TRACK_MOUSE
-
-//
-// WM_SYNCPAINT is an "undocumented" message, which is finally defined in
-// VC++ 6.0.
-//
-
-#ifndef WM_SYNCPAINT
-#  define WM_SYNCPAINT 0x0088
-#endif
-
-#ifndef WM_MOUSELEAVE
-#  define WM_MOUSELEAVE 0x02a3
-#endif
-
-#ifndef WM_MOUSEWHEEL
-#  define WM_MOUSEWHEEL 0x020a
-#endif
-
-#ifndef WHEEL_DELTA
-#  define WHEEL_DELTA 120	// according to MSDN.
-#endif
-
-
-//
-// WM_FLSELECT is the user-defined message that we get when one of
-// the sockets has pending data, etc.
-//
-
-#define WM_FLSELECT	(WM_APP+1)	// WM_APP is used for hide-window
-
-
-////////////////////////////////////////////////////////////////
-// interface to poll/select call:
-
-// fd's are only implemented for sockets.  Microsoft Windows does not
-// have a unified IO system, so it doesn't support select() on files,
-// devices, or pipes...
-//
-// Microsoft provides the Berkeley select() call and an asynchronous
-// select function that sends a WIN32 message when the select condition
-// exists. However, we don't try to use the asynchronous WSAAsyncSelect()
-// any more for good reasons (see above).
-//
-// A.S. Dec 2009: We got reports that current winsock2.h files define
-// POLLIN, POLLOUT, and POLLERR with conflicting values WRT what we
-// used before (STR #2301).  Therefore we must not use these values
-// for our internal purposes, but use FL_READ, FL_WRITE, and
-// FL_EXCEPT, as defined for use in Fl::add_fd().
-//
-static int maxfd = 0;
-static fd_set fdsets[3];
-
-extern IDropTarget *flIDropTarget;
-
-static int nfds = 0;
-static int fd_array_size = 0;
-static struct FD {
-  int fd;
-  short events;
-  void (*cb)(int, void*);
-  void* arg;
-} *fd = 0;
-
-extern unsigned int fl_codepage;
-
-void fl_reset_spot()
-{
-}
-
-void fl_set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win)
-{
-  if (!win) return;
-  Fl_Window* tw = win;
-  while (tw->parent()) tw = tw->window(); // find top level window
-
-  get_imm_module();
-  HIMC himc = flImmGetContext(fl_xid(tw));
-
-  if (himc) {
-    COMPOSITIONFORM cfs;
-    cfs.dwStyle = CFS_POINT;
-    cfs.ptCurrentPos.x = X;
-    cfs.ptCurrentPos.y = Y - tw->labelsize();
-    MapWindowPoints(fl_xid(win), fl_xid(tw), &cfs.ptCurrentPos, 1);
-    flImmSetCompositionWindow(himc, &cfs);
-    flImmReleaseContext(fl_xid(tw), himc);
-  }
-}
-
-void fl_set_status(int x, int y, int w, int h)
-{
-}
-
-void Fl::add_fd(int n, int events, void (*cb)(int, void*), void *v) {
-  remove_fd(n,events);
-  int i = nfds++;
-  if (i >= fd_array_size) {
-    fd_array_size = 2*fd_array_size+1;
-    fd = (FD*)realloc(fd, fd_array_size*sizeof(FD));
-  }
-  fd[i].fd = n;
-  fd[i].events = (short)events;
-  fd[i].cb = cb;
-  fd[i].arg = v;
-
-  if (events & FL_READ) FD_SET((unsigned)n, &fdsets[0]);
-  if (events & FL_WRITE) FD_SET((unsigned)n, &fdsets[1]);
-  if (events & FL_EXCEPT) FD_SET((unsigned)n, &fdsets[2]);
-  if (n > maxfd) maxfd = n;
-}
-
-void Fl::add_fd(int fd, void (*cb)(int, void*), void* v) {
-  Fl::add_fd(fd, FL_READ, cb, v);
-}
-
-void Fl::remove_fd(int n, int events) {
-  int i,j;
-  for (i=j=0; i<nfds; i++) {
-    if (fd[i].fd == n) {
-      short e = fd[i].events & ~events;
-      if (!e) continue; // if no events left, delete this fd
-      fd[i].events = e;
-    }
-    // move it down in the array if necessary:
-    if (j<i) {
-      fd[j]=fd[i];
-    }
-    j++;
-  }
-  nfds = j;
-
-  if (events & FL_READ) FD_CLR(unsigned(n), &fdsets[0]);
-  if (events & FL_WRITE) FD_CLR(unsigned(n), &fdsets[1]);
-  if (events & FL_EXCEPT) FD_CLR(unsigned(n), &fdsets[2]);
-}
-
-void Fl::remove_fd(int n) {
-  remove_fd(n, -1);
-}
-
-// these pointers are set by the Fl::lock() function:
-static void nothing() {}
-void (*fl_lock_function)() = nothing;
-void (*fl_unlock_function)() = nothing;
-
-static void* thread_message_;
-void* Fl::thread_message() {
-  void* r = thread_message_;
-  thread_message_ = 0;
-  return r;
-}
-
-IActiveIMMApp *fl_aimm = NULL;
-MSG fl_msg;
-
-// This is never called with time_to_wait < 0.0.
-// It *should* return negative on error, 0 if nothing happens before
-// timeout, and >0 if any callbacks were done.  This version only
-// returns zero if nothing happens during a 0.0 timeout, otherwise
-// it returns 1.
-int fl_wait(double time_to_wait) {
-  int have_message = 0;
-
-  run_checks();
-
-  // idle processing
-  static char in_idle;
-  if (Fl::idle && !in_idle) {
-    in_idle = 1;
-    Fl::idle();
-    in_idle = 0;
-  }
-  
-  if (nfds) {
-    // For WIN32 we need to poll for socket input FIRST, since
-    // the event queue is not something we can select() on...
-    timeval t;
-    t.tv_sec = 0;
-    t.tv_usec = 0;
-
-    fd_set fdt[3];
-    memcpy(fdt, fdsets, sizeof fdt); // one shot faster fdt init
-    if (get_wsock_mod()&& s_wsock_select(maxfd+1,&fdt[0],&fdt[1],&fdt[2],&t)) {
-      // We got something - do the callback!
-      for (int i = 0; i < nfds; i ++) {
-	SOCKET f = fd[i].fd;
-	short revents = 0;
-	if (fl_wsk_fd_is_set(f, &fdt[0])) revents |= FL_READ;
-	if (fl_wsk_fd_is_set(f, &fdt[1])) revents |= FL_WRITE;
-	if (fl_wsk_fd_is_set(f, &fdt[2])) revents |= FL_EXCEPT;
-	if (fd[i].events & revents) fd[i].cb(f, fd[i].arg);
-      }
-      time_to_wait = 0.0; // just peek for any messages
-    } else {
-      // we need to check them periodically, so set a short timeout:
-      if (time_to_wait > .001) time_to_wait = .001;
-    }
-  }
-
-  if (Fl::idle || Fl::damage()) 
-    time_to_wait = 0.0;
-
-  // if there are no more windows and this timer is set
-  // to FOREVER, continue through or look up indefinitely
-  if (!Fl::first_window() && time_to_wait==1e20)
-    time_to_wait = 0.0;
-
-  fl_unlock_function();
-
-  time_to_wait = (time_to_wait > 10000 ? 10000 : time_to_wait);
-  int t_msec = (int) (time_to_wait * 1000.0 + 0.5);
-  MsgWaitForMultipleObjects(0, NULL, FALSE, t_msec, QS_ALLINPUT);
-
-  fl_lock_function();
-
-  // Execute the message we got, and all other pending messages:
-  // have_message = PeekMessage(&fl_msg, NULL, 0, 0, PM_REMOVE);
-  have_message = PeekMessageW(&fl_msg, NULL, 0, 0, PM_REMOVE);
-  if (have_message > 0) {
-    while (have_message != 0 && have_message != -1) {
-      if (fl_msg.message == fl_wake_msg) {
-        // Used for awaking wait() from another thread
-	thread_message_ = (void*)fl_msg.wParam;
-        Fl_Awake_Handler func;
-        void *data;
-        while (Fl::get_awake_handler_(func, data)==0) {
-          func(data);
-        }
-      }
-
-      // Don't bother with key to character translation as we do
-      // it manually for simpley keyboard widgets. In fact, calling
-      // TranslateMessage() just makes it more difficult as it sets
-      // a bunch of internal state.
-      if (!use_simple_keyboard)
-        TranslateMessage(&fl_msg);
-      DispatchMessageW(&fl_msg);
-      have_message = PeekMessageW(&fl_msg, NULL, 0, 0, PM_REMOVE);
-    }
-  }
-  Fl::flush();
-
-  // This should return 0 if only timer events were handled:
-  return 1;
-}
-
-// fl_ready() is just like fl_wait(0.0) except no callbacks are done:
-int fl_ready() {
-  if (PeekMessage(&fl_msg, NULL, 0, 0, PM_NOREMOVE)) return 1;
-  if (!nfds) return 0;
-  timeval t;
-  t.tv_sec = 0;
-  t.tv_usec = 0;
-  fd_set fdt[3];
-  memcpy(fdt, fdsets, sizeof fdt);
-  return get_wsock_mod() ? s_wsock_select(0,&fdt[0],&fdt[1],&fdt[2],&t) : 0;
-}
-
-////////////////////////////////////////////////////////////////
-
-int Fl::x()
-{
-  RECT r;
-
-  SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
-  return r.left;
-}
-
-int Fl::y()
-{
-  RECT r;
-
-  SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
-  return r.top;
-}
-
-int Fl::h()
-{
-  RECT r;
-
-  SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
-  return r.bottom - r.top;
-}
-
-int Fl::w()
-{
-  RECT r;
-
-  SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
-  return r.right - r.left;
-}
-
-void Fl::get_mouse(int &x, int &y) {
-  POINT p;
-  GetCursorPos(&p);
-  x = p.x;
-  y = p.y;
-}
-
-////////////////////////////////////////////////////////////////
-// code used for selections:
-
-char *fl_selection_buffer[2];
-int fl_selection_length[2];
-int fl_selection_buffer_length[2];
-char fl_i_own_selection[2];
-
-UINT fl_get_lcid_codepage(LCID id)
-{
-  char buf[8];
-  buf[GetLocaleInfo(id, LOCALE_IDEFAULTANSICODEPAGE, buf, 8)] = 0;
-  return atol(buf);
-}
-
-// Convert \n -> \r\n
-class Lf2CrlfConvert {
-  char *out;
-  int outlen;
-public:
-  Lf2CrlfConvert(const char *in, int inlen) {
-    outlen = 0;
-    const char *i;
-    char *o;
-    int lencount;
-    // Predict size of \r\n conversion buffer
-    for ( i=in, lencount = inlen; lencount--; ) {
-      if ( *i == '\r' && *(i+1) == '\n' )	// leave \r\n untranslated
-	{ i+=2; outlen+=2; }
-      else if ( *i == '\n' )			// \n by itself? leave room to insert \r
-	{ i++; outlen+=2; }
-      else
-	{ ++i; ++outlen; }
-    }
-    // Alloc conversion buffer + NULL
-    out = new char[outlen+1];
-    // Handle \n -> \r\n conversion
-    for ( i=in, o=out, lencount = inlen; lencount--; ) {
-      if ( *i == '\r' && *(i+1) == '\n' )	// leave \r\n untranslated
-        { *o++ = *i++; *o++ = *i++; }
-      else if ( *i == '\n' )			// \n by itself? insert \r
-        { *o++ = '\r'; *o++ = *i++; }
-      else
-        { *o++ = *i++; }
-    }
-    *o++ = 0;
-  }
-  ~Lf2CrlfConvert() {
-    delete[] out;
-  }
-  int GetLength() const { return(outlen); }
-  const char* GetValue() const { return(out); }
-};
-
-void fl_update_clipboard(void) {
-  Fl_Window *w1 = Fl::first_window();
-  if (!w1)
-    return;
-
-  HWND hwnd = fl_xid(w1);
-
-  if (!OpenClipboard(hwnd))
-    return;
-
-  EmptyClipboard();
-
-  int utf16_len = fl_utf8toUtf16(fl_selection_buffer[1],
-                                 fl_selection_length[1], 0, 0);
-
-  HGLOBAL hMem = GlobalAlloc(GHND, utf16_len * 2 + 2); // moveable and zero'ed mem alloc.
-  LPVOID memLock = GlobalLock(hMem);
-
-  fl_utf8toUtf16(fl_selection_buffer[1], fl_selection_length[1],
-                 (unsigned short*) memLock, utf16_len + 1);
-
-  GlobalUnlock(hMem);
-  SetClipboardData(CF_UNICODETEXT, hMem);
-
-  CloseClipboard();
-
-  // In case Windows managed to lob of a WM_DESTROYCLIPBOARD during
-  // the above.
-  fl_i_own_selection[1] = 1;
-}
-
-// call this when you create a selection:
-void Fl::copy(const char *stuff, int len, int clipboard) {
-  if (!stuff || len<0) return;
-
-  // Convert \n -> \r\n (for old apps like Notepad, DOS)
-  Lf2CrlfConvert buf(stuff, len);
-  len = buf.GetLength();
-  stuff = buf.GetValue();
-
-  if (len+1 > fl_selection_buffer_length[clipboard]) {
-    delete[] fl_selection_buffer[clipboard];
-    fl_selection_buffer[clipboard] = new char[len+100];
-    fl_selection_buffer_length[clipboard] = len+100;
-  }
-  memcpy(fl_selection_buffer[clipboard], stuff, len);
-  fl_selection_buffer[clipboard][len] = 0; // needed for direct paste
-  fl_selection_length[clipboard] = len;
-  fl_i_own_selection[clipboard] = 1;
-  if (clipboard)
-    fl_update_clipboard();
-}
-
-// Call this when a "paste" operation happens:
-void Fl::paste(Fl_Widget &receiver, int clipboard) {
-  if (!clipboard || fl_i_own_selection[clipboard]) {
-    // We already have it, do it quickly without window server.
-    // Notice that the text is clobbered if set_selection is
-    // called in response to FL_PASTE!
-
-    // Convert \r\n -> \n
-    char *i = fl_selection_buffer[clipboard];
-    if (i==0L) {
-      Fl::e_text = 0; 
-      return;
-    }
-    Fl::e_text = new char[fl_selection_length[clipboard]+1];
-    char *o = Fl::e_text;
-    while (*i) {
-      if ( *i == '\r' && *(i+1) == '\n') i++;
-      else *o++ = *i++;
-    }
-    *o = 0;
-    Fl::e_length = o - Fl::e_text;
-    receiver.handle(FL_PASTE);
-    delete [] Fl::e_text;
-    Fl::e_text = 0;
-  } else {
-    if (!OpenClipboard(NULL)) return;
-    HANDLE h = GetClipboardData(CF_UNICODETEXT);
-    if (h) {
-      wchar_t *memLock = (wchar_t*) GlobalLock(h);
-      int utf16_len = wcslen(memLock);
-      Fl::e_text = (char*) malloc (utf16_len * 4 + 1);
-      int utf8_len = fl_utf8fromwc(Fl::e_text, utf16_len * 4, memLock, utf16_len);
-      *(Fl::e_text + utf8_len) = 0;
-      LPSTR a,b;
-      a = b = Fl::e_text;
-      while (*a) { // strip the CRLF pairs ($%$#@^)
-        if (*a == '\r' && a[1] == '\n') a++;
-        else *b++ = *a++;
-      }
-      *b = 0;
-      Fl::e_length = b - Fl::e_text;
-      receiver.handle(FL_PASTE);
-      GlobalUnlock(h);
-      free(Fl::e_text);
-      Fl::e_text = 0;
-    }
-    CloseClipboard();
-  }
-}
-
-static HWND clipboard_wnd = 0;
-static HWND next_clipboard_wnd = 0;
-
-static bool initial_clipboard = true;
-
-void fl_clipboard_notify_change() {
-  // No need to do anything here...
-}
-
-void fl_clipboard_notify_target(HWND wnd) {
-  if (clipboard_wnd)
-    return;
-
-  // We get one fake WM_DRAWCLIPBOARD immediately, which we therefore
-  // need to ignore.
-  initial_clipboard = true;
-
-  clipboard_wnd = wnd;
-  next_clipboard_wnd = SetClipboardViewer(wnd);
-}
-
-void fl_clipboard_notify_untarget(HWND wnd) {
-  if (wnd != clipboard_wnd)
-    return;
-
-  ChangeClipboardChain(wnd, next_clipboard_wnd);
-  clipboard_wnd = next_clipboard_wnd = 0;
-
-  if (Fl::first_window())
-    fl_clipboard_notify_target(fl_xid(Fl::first_window()));
-}
-
-////////////////////////////////////////////////////////////////
-char fl_is_ime = 0;
-void fl_get_codepage()
-{
-  HKL hkl = GetKeyboardLayout(0);
-  TCHAR ld[8];
-
-  GetLocaleInfo (LOWORD(hkl), LOCALE_IDEFAULTANSICODEPAGE, ld, 6);
-  DWORD ccp = atol(ld);
-  fl_is_ime = 0;
-
-  fl_codepage = ccp;
-  if (fl_aimm) {
-    fl_aimm->GetCodePageA(GetKeyboardLayout(0), &fl_codepage);
-  } else if (get_imm_module() && flImmIsIME(hkl)) {
-    fl_is_ime = 1;
-  }
-}
-
-void fl_update_focus(void)
-{
-  Fl_Widget *focus;
-  Fl_Window *win;
-
-  get_imm_module();
-
-  focus = Fl::grab();
-  if (!focus)
-    focus = Fl::focus();
-  if (!focus)
-    return;
-
-  // Grabs are special in that events are sent to the first
-  // available window
-  if (focus == Fl::grab())
-    win = Fl::first_window();
-  else {
-    win = focus->as_window();
-    if (!win)
-      win = focus->window();
-  }
-
-  if (!win) {
-    Fl::warning("Cannot find window for widget receiving focus");
-    return;
-  }
-
-  // No Win32 window created yet
-  if (!Fl_X::i(win) || !fl_xid(win))
-    return;
-
-  if (focus->simple_keyboard()) {
-    use_simple_keyboard = true;
-    if (flImmGetContext(fl_xid(win)) != 0)
-      flImmAssociateContextEx(fl_xid(win), 0, 0);
-  } else {
-    use_simple_keyboard = false;
-    if (flImmGetContext(fl_xid(win)) == 0)
-      flImmAssociateContextEx(fl_xid(win), 0, IACE_DEFAULT);
-  }
-}
-
-HWND fl_capture;
-
-static int mouse_event(Fl_Window *window, int what, int button,
-		       WPARAM wParam, LPARAM lParam)
-{
-  static int px, py, pmx, pmy;
-  POINT pt;
-  Fl::e_x = pt.x = (signed short)LOWORD(lParam);
-  Fl::e_y = pt.y = (signed short)HIWORD(lParam);
-  ClientToScreen(fl_xid(window), &pt);
-  Fl::e_x_root = pt.x;
-  Fl::e_y_root = pt.y;
-#ifdef USE_CAPTURE_MOUSE_WIN
-  Fl_Window *mouse_window = window;	// save "mouse window"
-#endif
-  while (window->parent()) {
-    Fl::e_x += window->x();
-    Fl::e_y += window->y();
-    window = window->window();
-  }
-
-  ulong state = Fl::e_state & 0xff0000; // keep shift key states
-#if 0
-  // mouse event reports some shift flags, perhaps save them?
-  if (wParam & MK_SHIFT) state |= FL_SHIFT;
-  if (wParam & MK_CONTROL) state |= FL_CTRL;
-#endif
-  if (wParam & MK_LBUTTON) state |= FL_BUTTON1;
-  if (wParam & MK_MBUTTON) state |= FL_BUTTON2;
-  if (wParam & MK_RBUTTON) state |= FL_BUTTON3;
-  Fl::e_state = state;
-
-  switch (what) {
-  case 1: // double-click
-    if (Fl::e_is_click) {Fl::e_clicks++; goto J1;}
-  case 0: // single-click
-    Fl::e_clicks = 0;
-  J1:
-#ifdef USE_CAPTURE_MOUSE_WIN
-    if (!fl_capture) SetCapture(fl_xid(mouse_window));  // use mouse window
-#else
-    if (!fl_capture) SetCapture(fl_xid(window));	// use main window
-#endif
-    Fl::e_keysym = FL_Button + button;
-    Fl::e_is_click = 1;
-    px = pmx = Fl::e_x_root; py = pmy = Fl::e_y_root;
-    return Fl::handle(FL_PUSH,window);
-
-  case 2: // release:
-    if (!fl_capture) ReleaseCapture();
-    Fl::e_keysym = FL_Button + button;
-    return Fl::handle(FL_RELEASE,window);
-
-  case 3: // move:
-  default: // avoid compiler warning
-    // MSWindows produces extra events even if mouse does not move, ignore em:
-    if (Fl::e_x_root == pmx && Fl::e_y_root == pmy) return 1;
-    pmx = Fl::e_x_root; pmy = Fl::e_y_root;
-    if (abs(Fl::e_x_root-px)>5 || abs(Fl::e_y_root-py)>5) Fl::e_is_click = 0;
-    return Fl::handle(FL_MOVE,window);
-
-  }
-}
-
-// convert a MSWindows VK_x to an Fltk (X) Keysym:
-// See also the inverse converter in Fl_get_key_win32.cxx
-// This table is in numeric order by VK:
-static const struct {unsigned short vk, fltk, extended;} vktab[] = {
-  {VK_BACK,	FL_BackSpace},
-  {VK_TAB,	FL_Tab},
-  {VK_CLEAR,	FL_KP+'5',	0xff0b/*XK_Clear*/},
-  {VK_RETURN,	FL_Enter,	FL_KP_Enter},
-  {VK_SHIFT,	FL_Shift_L,	FL_Shift_R},
-  {VK_CONTROL,	FL_Control_L,	FL_Control_R},
-  {VK_MENU,	FL_Alt_L,	FL_Alt_R},
-  {VK_PAUSE,	FL_Pause},
-  {VK_CAPITAL,	FL_Caps_Lock},
-  {VK_ESCAPE,	FL_Escape},
-  {VK_SPACE,	' '},
-  {VK_PRIOR,	FL_KP+'9',	FL_Page_Up},
-  {VK_NEXT,	FL_KP+'3',	FL_Page_Down},
-  {VK_END,	FL_KP+'1',	FL_End},
-  {VK_HOME,	FL_KP+'7',	FL_Home},
-  {VK_LEFT,	FL_KP+'4',	FL_Left},
-  {VK_UP,	FL_KP+'8',	FL_Up},
-  {VK_RIGHT,	FL_KP+'6',	FL_Right},
-  {VK_DOWN,	FL_KP+'2',	FL_Down},
-  {VK_SNAPSHOT,	FL_Print},	// does not work on NT
-  {VK_INSERT,	FL_KP+'0',	FL_Insert},
-  {VK_DELETE,	FL_KP+'.',	FL_Delete},
-  {VK_LWIN,	FL_Meta_L},
-  {VK_RWIN,	FL_Meta_R},
-  {VK_APPS,	FL_Menu},
-  {VK_SLEEP, FL_Sleep},
-  {VK_MULTIPLY,	FL_KP+'*'},
-  {VK_ADD,	FL_KP+'+'},
-  {VK_SUBTRACT,	FL_KP+'-'},
-  {VK_DECIMAL,	FL_KP+'.'},
-  {VK_DIVIDE,	FL_KP+'/'},
-  {VK_NUMLOCK,	FL_Num_Lock},
-  {VK_SCROLL,	FL_Scroll_Lock},
-# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)
-  {VK_BROWSER_BACK, FL_Back},
-  {VK_BROWSER_FORWARD, FL_Forward},
-  {VK_BROWSER_REFRESH, FL_Refresh},
-  {VK_BROWSER_STOP, FL_Stop},
-  {VK_BROWSER_SEARCH, FL_Search},
-  {VK_BROWSER_FAVORITES, FL_Favorites},
-  {VK_BROWSER_HOME, FL_Home_Page},
-  {VK_VOLUME_MUTE, FL_Volume_Mute},
-  {VK_VOLUME_DOWN, FL_Volume_Down},
-  {VK_VOLUME_UP, FL_Volume_Up},
-  {VK_MEDIA_NEXT_TRACK, FL_Media_Next},
-  {VK_MEDIA_PREV_TRACK, FL_Media_Prev},
-  {VK_MEDIA_STOP, FL_Media_Stop},
-  {VK_MEDIA_PLAY_PAUSE, FL_Media_Play},
-  {VK_LAUNCH_MAIL, FL_Mail},
-#endif
-  {0xba,	';'},
-  {0xbb,	'='},
-  {0xbc,	','},
-  {0xbd,	'-'},
-  {0xbe,	'.'},
-  {0xbf,	'/'},
-  {0xc0,	'`'},
-  {0xdb,	'['},
-  {0xdc,	'\\'},
-  {0xdd,	']'},
-  {0xde,	'\''}
-};
-static int ms2fltk(int vk, int extended) {
-  static unsigned short vklut[256];
-  static unsigned short extendedlut[256];
-  if (!vklut[1]) { // init the table
-    unsigned int i;
-    for (i = 0; i < 256; i++) vklut[i] = tolower(i);
-    for (i=VK_F1; i<=VK_F16; i++) vklut[i] = i+(FL_F-(VK_F1-1));
-    for (i=VK_NUMPAD0; i<=VK_NUMPAD9; i++) vklut[i] = i+(FL_KP+'0'-VK_NUMPAD0);
-    for (i = 0; i < sizeof(vktab)/sizeof(*vktab); i++) {
-      vklut[vktab[i].vk] = vktab[i].fltk;
-      extendedlut[vktab[i].vk] = vktab[i].extended;
-    }
-    for (i = 0; i < 256; i++) if (!extendedlut[i]) extendedlut[i] = vklut[i];
-  }
-  return extended ? extendedlut[vk] : vklut[vk];
-}
-
-static xchar msdead2fltk(xchar in)
-{
-  switch (in) {
-  case 0x0060:      // GRAVE ACCENT
-    return 0x0300;  // COMBINING GRAVE ACCENT
-  case 0x00b4:      // ACUTE ACCENT
-    return 0x0301;  // COMBINING ACUTE ACCENT
-  case 0x005e:      // CIRCUMFLEX ACCENT
-    return 0x0302;  // COMBINING CIRCUMFLEX ACCENT
-  case 0x007e:      // TILDE
-    return 0x0303;  // COMBINING TILDE
-  case 0x00a8:      // DIAERESIS
-    return 0x0308;  // COMBINING DIAERESIS
-  // FIXME: Windows dead key behaviour isn't documented and I don't have
-  //        any more keyboards to test with...
-  }
-
-  // hope that Windows gave us something proper to begin with
-  return in;
-}
-
-#if USE_COLORMAP
-extern HPALETTE fl_select_palette(void); // in fl_color_win32.cxx
-#endif
-
-
-/////////////////////////////////////////////////////////////////////////////
-/// Win32 timers
-///
-
-struct Win32Timer
-{
-  UINT_PTR handle;
-  Fl_Timeout_Handler callback;
-  void *data;
-};
-static Win32Timer* win32_timers;
-static int win32_timer_alloc;
-static int win32_timer_used;
-static HWND s_TimerWnd;
-
-static void realloc_timers()
-{
-  if (win32_timer_alloc == 0) {
-    win32_timer_alloc = 8;
-  }
-  win32_timer_alloc *= 2;
-  Win32Timer* new_timers = new Win32Timer[win32_timer_alloc];
-  memset(new_timers, 0, sizeof(Win32Timer) * win32_timer_used);
-  memcpy(new_timers, win32_timers, sizeof(Win32Timer) * win32_timer_used);
-  Win32Timer* delete_me = win32_timers;
-  win32_timers = new_timers;
-  delete [] delete_me;
-}
-
-static void delete_timer(Win32Timer& t)
-{
-  KillTimer(s_TimerWnd, t.handle);
-  memset(&t, 0, sizeof(Win32Timer));
-}
-
-/// END TIMERS
-/////////////////////////////////////////////////////////////////////////////
-
-static Fl_Window* resize_bug_fix;
-
-extern void fl_save_pen(void);
-extern void fl_restore_pen(void);
-
-static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-  // Copy the message to fl_msg so add_handler code can see it, it is
-  // already there if this is called by DispatchMessage, but not if
-  // Windows calls this directly.
-  fl_msg.hwnd = hWnd;
-  fl_msg.message = uMsg;
-  fl_msg.wParam = wParam;
-  fl_msg.lParam = lParam;
-  //fl_msg.time = ???
-  //fl_msg.pt = ???
-  //fl_msg.lPrivate = ???
-
-  MSG fl_orig_msg = fl_msg;
-
-  Fl_Window *window = fl_find(hWnd);
-
-  if (window) switch (uMsg) {
-
-  case WM_QUIT: // this should not happen?
-    Fl::fatal("WM_QUIT message");
-
-  case WM_CLOSE: // user clicked close box
-    Fl::handle(FL_CLOSE, window);
-    PostQuitMessage(0);
-    return 0;
-
-  case WM_SYNCPAINT :
-  case WM_NCPAINT :
-  case WM_ERASEBKGND :
-    // Andreas Weitl - WM_SYNCPAINT needs to be passed to DefWindowProc
-    // so that Windows can generate the proper paint messages...
-    // Similarly, WM_NCPAINT and WM_ERASEBKGND need this, too...
-    break;
-
-  case WM_PAINT: {
-    Fl_Region R;
-    Fl_X *i = Fl_X::i(window);
-    i->wait_for_expose = 0;
-    char redraw_whole_window = false;
-    if (!i->region && window->damage()) {
-      // Redraw the whole window...
-      i->region = CreateRectRgn(0, 0, window->w(), window->h());
-      redraw_whole_window = true;
-    }
-
-    // We need to merge WIN32's damage into FLTK's damage.
-    R = CreateRectRgn(0,0,0,0);
-    int r = GetUpdateRgn(hWnd,R,0);
-    if (r==NULLREGION && !redraw_whole_window) {
-      break;
-    }
-
-    if (i->region) {
-      // Also tell WIN32 that we are drawing someplace else as well...
-      CombineRgn(i->region, i->region, R, RGN_OR);
-      XDestroyRegion(R);
-    } else {
-      i->region = R;
-    }
-    if (window->type() == FL_DOUBLE_WINDOW) ValidateRgn(hWnd,0);
-    else ValidateRgn(hWnd,i->region);
-
-    window->clear_damage((uchar)(window->damage()|FL_DAMAGE_EXPOSE));
-    // These next two statements should not be here, so that all update
-    // is deferred until Fl::flush() is called during idle.  However WIN32
-    // apparently is very unhappy if we don't obey it and draw right now.
-    // Very annoying!
-    fl_GetDC(hWnd); // Make sure we have a DC for this window...
-    fl_save_pen();
-    i->flush();
-    fl_restore_pen();
-    window->clear_damage();
-    } return 0;
-
-  case WM_LBUTTONDOWN:  mouse_event(window, 0, 1, wParam, lParam); return 0;
-  case WM_LBUTTONDBLCLK:mouse_event(window, 1, 1, wParam, lParam); return 0;
-  case WM_LBUTTONUP:    mouse_event(window, 2, 1, wParam, lParam); return 0;
-  case WM_MBUTTONDOWN:  mouse_event(window, 0, 2, wParam, lParam); return 0;
-  case WM_MBUTTONDBLCLK:mouse_event(window, 1, 2, wParam, lParam); return 0;
-  case WM_MBUTTONUP:    mouse_event(window, 2, 2, wParam, lParam); return 0;
-  case WM_RBUTTONDOWN:  mouse_event(window, 0, 3, wParam, lParam); return 0;
-  case WM_RBUTTONDBLCLK:mouse_event(window, 1, 3, wParam, lParam); return 0;
-  case WM_RBUTTONUP:    mouse_event(window, 2, 3, wParam, lParam); return 0;
-
-  case WM_MOUSEMOVE:
-#ifdef USE_TRACK_MOUSE
-    if (track_mouse_win != window) {
-      TRACKMOUSEEVENT tme;
-      tme.cbSize    = sizeof(TRACKMOUSEEVENT);
-      tme.dwFlags   = TME_LEAVE;
-      tme.hwndTrack = hWnd;
-      _TrackMouseEvent(&tme);
-      track_mouse_win = window;
-    }
-#endif // USE_TRACK_MOUSE
-    mouse_event(window, 3, 0, wParam, lParam);
-    return 0;
-
-  case WM_MOUSELEAVE:
-    if (track_mouse_win == window) { // we left the top level window !
-      Fl_Window *tw = window;
-      while (tw->parent()) tw = tw->window(); // find top level window
-      Fl::belowmouse(0);
-      Fl::handle(FL_LEAVE, tw);
-    }
-    track_mouse_win = 0; // force TrackMouseEvent() restart
-    break;
-
-  case WM_SETFOCUS:
-    Fl::handle(FL_FOCUS, window);
-    break;
-
-  case WM_KILLFOCUS:
-    Fl::handle(FL_UNFOCUS, window);
-    Fl::flush(); // it never returns to main loop when deactivated...
-    break;
-
-  case WM_SHOWWINDOW:
-    if (!window->parent()) {
-      Fl::handle(wParam ? FL_SHOW : FL_HIDE, window);
-    }
-    break;
-
-  case WM_ACTIVATEAPP:
-    // From eric@vfx.sel.sony.com, we should process WM_ACTIVATEAPP
-    // messages to restore the correct state of the shift/ctrl/alt/lock
-    // keys...  Added control, shift, alt, and meta keys, and changed
-    // to use GetAsyncKeyState and do it when wParam is 1
-    // (that means we have focus...)
-    if (wParam)
-    {
-      ulong state = 0;
-      if (GetAsyncKeyState(VK_CAPITAL)) state |= FL_CAPS_LOCK;
-      if (GetAsyncKeyState(VK_NUMLOCK)) state |= FL_NUM_LOCK;
-      if (GetAsyncKeyState(VK_SCROLL)) state |= FL_SCROLL_LOCK;
-      if (GetAsyncKeyState(VK_CONTROL)&~1) state |= FL_CTRL;
-      if (GetAsyncKeyState(VK_SHIFT)&~1) state |= FL_SHIFT;
-      if (GetAsyncKeyState(VK_MENU)) state |= FL_ALT;
-      if ((GetAsyncKeyState(VK_LWIN)|GetAsyncKeyState(VK_RWIN))&~1) state |= FL_META;
-      Fl::e_state = state;
-      return 0;
-    }
-    break;
-
-  case WM_INPUTLANGCHANGE:
-    fl_get_codepage();
-    break;
-  case WM_IME_COMPOSITION:
-//	if (!fl_is_nt4() && lParam & GCS_RESULTCLAUSE) {
-//		HIMC himc = ImmGetContext(hWnd);
-//		wlen = ImmGetCompositionStringW(himc, GCS_RESULTSTR,
-//			wbuf, sizeof(wbuf)) / sizeof(short);
-//		if (wlen < 0) wlen = 0;
-//		wbuf[wlen] = 0;
-//		ImmReleaseContext(hWnd, himc);
-//	}
-	break;
-  case WM_KEYDOWN:
-  case WM_SYSKEYDOWN:
-  case WM_KEYUP:
-  case WM_SYSKEYUP:
-    // save the keysym until we figure out the characters:
-    Fl::e_keysym = Fl::e_original_keysym = ms2fltk(wParam,lParam&(1<<24));
-    // See if TranslateMessage turned it into a WM_*CHAR message:
-    if (PeekMessageW(&fl_msg, hWnd, WM_CHAR, WM_SYSDEADCHAR, PM_REMOVE))
-    {
-      uMsg = fl_msg.message;
-      wParam = fl_msg.wParam;
-      lParam = fl_msg.lParam;
-    }
-  case WM_DEADCHAR:
-  case WM_SYSDEADCHAR:
-  case WM_CHAR:
-  case WM_SYSCHAR: {
-    ulong state = Fl::e_state & 0xff000000; // keep the mouse button state
-    // if GetKeyState is expensive we might want to comment some of these out:
-    if (GetKeyState(VK_SHIFT)&~1) state |= FL_SHIFT;
-    if (GetKeyState(VK_CAPITAL)) state |= FL_CAPS_LOCK;
-    if (GetKeyState(VK_CONTROL)&~1) state |= FL_CTRL;
-    // Alt gets reported for the Alt-GR switch on foreign keyboards.
-    // so we need to check the event as well to get it right:
-    if ((lParam&(1<<29)) //same as GetKeyState(VK_MENU)
-	&& uMsg != WM_CHAR) state |= FL_ALT;
-    if (GetKeyState(VK_NUMLOCK)) state |= FL_NUM_LOCK;
-    if ((GetKeyState(VK_LWIN)|GetKeyState(VK_RWIN))&~1) {
-      // WIN32 bug?  GetKeyState returns garbage if the user hit the
-      // meta key to pop up start menu.  Sigh.
-      if ((GetAsyncKeyState(VK_LWIN)|GetAsyncKeyState(VK_RWIN))&~1)
-	state |= FL_META;
-    }
-    if (GetKeyState(VK_SCROLL)) state |= FL_SCROLL_LOCK;
-    Fl::e_state = state;
-    static char buffer[1024];
-
-    if (use_simple_keyboard) {
-      BYTE keystate[256];
-      WCHAR wbuf[8];
-      int ret;
-
-      // I'm not sure if we ever get WM_CHAR (& friends) without an initial
-      // WM_KEYDOWN (& friends), but if we do then we should not send such
-      // side band events to simple keyboard widgets.
-      if ((fl_orig_msg.message != WM_KEYDOWN) &&
-          (fl_orig_msg.message != WM_SYSKEYDOWN) &&
-          (fl_orig_msg.message != WM_KEYUP) &&
-          (fl_orig_msg.message != WM_SYSKEYUP))
-        break;
-
-      GetKeyboardState(keystate);
-
-      // Pressing Ctrl wreaks havoc with the symbol lookup, so turn that off.
-      // But AltGr shows up as Ctrl+Alt in Windows, so keep Ctrl if Alt is
-      // active.
-      if (!(keystate[VK_MENU] & 0x80))
-        keystate[VK_CONTROL] = keystate[VK_LCONTROL] = keystate[VK_RCONTROL] = 0;
-
-      // We cannot inspect or modify Windows' internal state of the keyboard
-      // so we have to try to infer information from ToUnicode() and wedge
-      // things into a known state.
-      for (int i = 0;i < 2;i++) {
-        ret = ToUnicode(fl_orig_msg.wParam, 0, keystate, wbuf,
-                        sizeof(wbuf)/sizeof(wbuf[0]), 0);
-
-        // No symbol for this key (or unexpected length)
-        if ((ret == 0) || (ret < -1)) {
-          buffer[0] = 0;
-          Fl::e_length = 0;
-          break;
-        }
-
-        // A dead key. Convert this to a Unicode combining character so
-        // that the application can tell the difference between dead and
-        // normal keys.
-        if (ret == -1) {
-          xchar u = (xchar) msdead2fltk(wbuf[0]);
-          Fl::e_length = fl_utf8fromwc(buffer, 1024, &u, 1);
-          buffer[Fl::e_length] = 0;
-          break;
-        }
-
-        // If we have two characters (or more) from ToUnicode(), that's
-        // an invalid sequence. One character chould mean a proper symbol,
-        // or it could mean a composed one. In both cases we need to call
-        // ToUnicode() again to get something sane.
-        if (i == 0)
-          continue;
-
-        // We should now have something sane. Give whatever we have to the
-        // application.
-        Fl::e_length = fl_utf8fromwc(buffer, 1024, wbuf, ret);
-        buffer[Fl::e_length] = 0;
-      }
-    } else if (uMsg == WM_CHAR || uMsg == WM_SYSCHAR) {
-      xchar u = (xchar) wParam;
-//    Fl::e_length = fl_unicode2utf(&u, 1, buffer);
-      Fl::e_length = fl_utf8fromwc(buffer, 1024, &u, 1);
-      buffer[Fl::e_length] = 0;
-    } else {
-      buffer[0] = 0;
-      Fl::e_length = 0;
-    }
-
-    // The keypad area is a bit odd in that we need to change the keysym
-    // to properly indicate what the user meant, unlike other keys where
-    // we normally change the text and keep keysym stable.
-    if (Fl::e_keysym >= FL_KP && Fl::e_keysym <= FL_KP_Last) {
-      // The initial mapping tables give us a keysym that corresponds to
-      // numlock being on, so we only do something when it is off.
-      if (!(state & FL_NUM_LOCK)) {
-	switch (Fl::e_keysym) {
-	  case FL_KP + '0' :
-	    Fl::e_keysym = FL_Insert;
-	    break;
-	  case FL_KP + '1' :
-	    Fl::e_keysym = FL_End;
-	    break;
-	  case FL_KP + '2' :
-	    Fl::e_keysym = FL_Down;
-	    break;
-	  case FL_KP + '3' :
-	    Fl::e_keysym = FL_Page_Down;
-	    break;
-	  case FL_KP + '4' :
-	    Fl::e_keysym = FL_Left;
-	    break;
-	  case FL_KP + '6' :
-	    Fl::e_keysym = FL_Right;
-	    break;
-	  case FL_KP + '7' :
-	    Fl::e_keysym = FL_Home;
-	    break;
-	  case FL_KP + '8' :
-	    Fl::e_keysym = FL_Up;
-	    break;
-	  case FL_KP + '9' :
-	    Fl::e_keysym = FL_Page_Up;
-	    break;
-	  case FL_KP + '.' :
-	    Fl::e_keysym = FL_Delete;
-	    break;
-	}
-      }
-    }
-
-    Fl::e_text = buffer;
-    if (lParam & (1<<31)) { // key up events.
-      if (Fl::handle(FL_KEYUP, window)) return 0;
-      break;
-    }
-    // for (int i = lParam&0xff; i--;)
-    while (window->parent()) window = window->window();
-    if (Fl::handle(FL_KEYBOARD,window)) {
-	  if (uMsg==WM_DEADCHAR || uMsg==WM_SYSDEADCHAR)
-		Fl::compose_state = 1;
-	  return 0;
-	}
-    break;}
-
-  case WM_MOUSEWHEEL: {
-    static int delta = 0; // running total of all motion
-    delta += (SHORT)(HIWORD(wParam));
-    Fl::e_dx = 0;
-    Fl::e_dy = -delta / WHEEL_DELTA;
-    delta += Fl::e_dy * WHEEL_DELTA;
-    if (Fl::e_dy) Fl::handle(FL_MOUSEWHEEL, window);
-    return 0;
-  }
-
-// This is only defined on Vista and upwards...
-#ifndef WM_MOUSEHWHEEL
-#define WM_MOUSEHWHEEL 0x020E
-#endif
-
-  case WM_MOUSEHWHEEL: {
-    static int delta = 0; // running total of all motion
-    delta += (SHORT)(HIWORD(wParam));
-    Fl::e_dy = 0;
-    Fl::e_dx = delta / WHEEL_DELTA;
-    delta -= Fl::e_dx * WHEEL_DELTA;
-    if (Fl::e_dx) Fl::handle(FL_MOUSEWHEEL, window);
-    return 0;
-  }
-
-  case WM_GETMINMAXINFO:
-    Fl_X::i(window)->set_minmax((LPMINMAXINFO)lParam);
-    break;
-
-  case WM_SIZE:
-    if (!window->parent()) {
-      if (wParam == SIZE_MINIMIZED || wParam == SIZE_MAXHIDE) {
-	Fl::handle(FL_HIDE, window);
-      } else {
-	Fl::handle(FL_SHOW, window);
-	resize_bug_fix = window;
-	window->size(LOWORD(lParam), HIWORD(lParam));
-      }
-    }
-    break;
-
-  case WM_MOVE: {
-    resize_bug_fix = window;
-    int nx = LOWORD(lParam);
-    int ny = HIWORD(lParam);
-    if (nx & 0x8000) nx -= 65536;
-    if (ny & 0x8000) ny -= 65536;
-    window->position(nx, ny); }
-    break;
-
-  case WM_SETCURSOR:
-    if (LOWORD(lParam) == HTCLIENT) {
-      while (window->parent()) window = window->window();
-      SetCursor(Fl_X::i(window)->cursor);
-      return 0;
-    }
-    break;
-
-#if USE_COLORMAP
-  case WM_QUERYNEWPALETTE :
-    fl_GetDC(hWnd);
-    if (fl_select_palette()) InvalidateRect(hWnd, NULL, FALSE);
-    break;
-
-  case WM_PALETTECHANGED:
-    fl_GetDC(hWnd);
-    if ((HWND)wParam != hWnd && fl_select_palette()) UpdateColors(fl_gc);
-    break;
-
-  case WM_CREATE :
-    fl_GetDC(hWnd);
-    fl_select_palette();
-    break;
-#endif
-
-  case WM_DESTROYCLIPBOARD:
-    fl_i_own_selection[1] = 0;
-    return 1;
-
-  case WM_CHANGECBCHAIN:
-    if ((hWnd == clipboard_wnd) &&
-        (next_clipboard_wnd == (HWND)wParam)) {
-      next_clipboard_wnd = (HWND)lParam;
-      return 0;
-    }
-    break;
-
-  case WM_DRAWCLIPBOARD:
-    // When the clipboard moves between two FLTK windows,
-    // fl_i_own_selection will temporarily be false as we are
-    // processing this message. Hence the need to use fl_find().
-    if (!initial_clipboard && !fl_find(GetClipboardOwner()))
-      fl_trigger_clipboard_notify(1);
-    initial_clipboard = false;
-
-    if (next_clipboard_wnd)
-      SendMessage(next_clipboard_wnd, WM_DRAWCLIPBOARD, wParam, lParam);
-
-    return 0;
-
-  default:
-    if (Fl::handle(0,0)) return 0;
-    break;
-  }
-
-
-  return DefWindowProcW(hWnd, uMsg, wParam, lParam);
-}
-
-////////////////////////////////////////////////////////////////
-// This function gets the dimensions of the top/left borders and
-// the title bar, if there is one, based on the FL_BORDER, FL_MODAL
-// and FL_NONMODAL flags, and on the window's size range.
-// It returns the following values:
-//
-// value | border | title bar
-//   0   |  none  |   no
-//   1   |  fix   |   yes
-//   2   |  size  |   yes
-
-int Fl_X::fake_X_wm(const Fl_Window* w,int &X,int &Y, int &bt,int &bx, int &by) {
-  int W, H, xoff, yoff, dx, dy;
-  int ret = bx = by = bt = 0;
-
-  int fallback = 1;
-  if (!w->parent()) {
-    HWND hwnd = fl_xid(w);
-    if (hwnd) {
-      // The block below calculates the window borders by requesting the
-      // required decorated window rectangle for a desired client rectangle.
-      // If any part of the function above fails, we will drop to a 
-      // fallback to get the best guess which is always available.
-      HWND hwnd = fl_xid(w);
-      // request the style flags of this window, as WIN32 sees them
-      LONG style = GetWindowLong(hwnd, GWL_STYLE);
-      LONG exstyle = GetWindowLong(hwnd, GWL_EXSTYLE);
-      RECT r;
-      r.left = w->x();
-      r.top = w->y();
-      r.right = w->x()+w->w();
-      r.bottom = w->y()+w->h();
-      // get the decoration rectangle for the desired client rectangle
-      BOOL ok = AdjustWindowRectEx(&r, style, FALSE, exstyle);
-      if (ok) {
-        X = r.left;
-        Y = r.top;
-        W = r.right - r.left;
-        H = r.bottom - r.top;
-        bx = w->x() - r.left;
-        by = r.bottom - w->y() - w->h(); // height of the bootm frame
-        bt = w->y() - r.top - by; // height of top caption bar
-        xoff = bx;
-        yoff = by + bt;
-        dx = W - w->w();
-        dy = H - w->h();
-        if (w->size_range_set && (w->maxw != w->minw || w->maxh != w->minh))
-          ret = 2;
-        else
-          ret = 1;
-        fallback = 0;
-      }
-    }
-  }
-  // This is the original (pre 1.1.7) routine to calculate window border sizes.
-  if (fallback) {
-    if (w->border() && !w->parent()) {
-      if (w->size_range_set && (w->maxw != w->minw || w->maxh != w->minh)) {
-        ret = 2;
-        bx = GetSystemMetrics(SM_CXSIZEFRAME);
-        by = GetSystemMetrics(SM_CYSIZEFRAME);
-      } else {
-        ret = 1;
-        bx = GetSystemMetrics(SM_CXFIXEDFRAME);
-        by = GetSystemMetrics(SM_CYFIXEDFRAME);
-      }
-      bt = GetSystemMetrics(SM_CYCAPTION);
-    }
-    //The coordinates of the whole window, including non-client area
-    xoff = bx;
-    yoff = by + bt;
-    dx = 2*bx;
-    dy = 2*by + bt;
-    X = w->x()-xoff;
-    Y = w->y()-yoff;
-    W = w->w()+dx;
-    H = w->h()+dy;
-  }
-
-  //Proceed to positioning the window fully inside the screen, if possible
-  //Make border's lower right corner visible
-  int scr_x, scr_y, scr_w, scr_h;
-  Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h, X, Y);
-  if (scr_x+scr_w < X+W) X = scr_x+scr_w - W;
-  if (scr_y+scr_h < Y+H) Y = scr_y+scr_h - H;
-  //Make border's upper left corner visible
-  if (X<scr_x) X = scr_x;
-  if (Y<scr_y) Y = scr_y;
-  //Make client area's lower right corner visible
-  if (scr_x+scr_w < X+dx+ w->w()) X = scr_x+scr_w - w->w() - dx;
-  if (scr_y+scr_h < Y+dy+ w->h()) Y = scr_y+scr_h - w->h() - dy;
-  //Make client area's upper left corner visible
-  if (X+xoff < scr_x) X = scr_x-xoff;
-  if (Y+yoff < scr_y) Y = scr_y-yoff;
-  //Return the client area's top left corner in (X,Y)
-  X+=xoff;
-  Y+=yoff;
-
-  if (w->flags() & Fl_Widget::FULLSCREEN) {
-    X = Y = 0;
-    bx = by = bt = 0;
-  }
-
-  return ret;
-}
-
-////////////////////////////////////////////////////////////////
-
-void Fl_Window::resize(int X,int Y,int W,int H) {
-  UINT flags = SWP_NOSENDCHANGING | SWP_NOZORDER 
-             | SWP_NOACTIVATE | SWP_NOOWNERZORDER;
-  int is_a_resize = (W != w() || H != h());
-  int resize_from_program = (this != resize_bug_fix);
-  if (!resize_from_program) resize_bug_fix = 0;
-  if (X != x() || Y != y()) {
-    force_position(1);
-  } else {
-    if (!is_a_resize) return;
-    flags |= SWP_NOMOVE;
-  }
-  if (is_a_resize) {
-    Fl_Group::resize(X,Y,W,H);
-    if (visible_r()) {
-      redraw(); 
-      // only wait for exposure if this window has a size - a window 
-      // with no width or height will never get an exposure event
-      if (i && W>0 && H>0)
-        i->wait_for_expose = 1;
-    }
-  } else {
-    x(X); y(Y);
-    flags |= SWP_NOSIZE;
-  }
-  if (!border()) flags |= SWP_NOACTIVATE;
-  if (resize_from_program && shown()) {
-    if (!resizable()) size_range(w(),h(),w(),h());
-    int dummy_x, dummy_y, bt, bx, by;
-    //Ignore window managing when resizing, so that windows (and more
-    //specifically menus) can be moved offscreen.
-    if (Fl_X::fake_X_wm(this, dummy_x, dummy_y, bt, bx, by)) {
-      X -= bx;
-      Y -= by+bt;
-      W += 2*bx;
-      H += 2*by+bt;
-    }
-    // avoid zero size windows. A zero sized window on Win32
-    // will cause continouly  new redraw events.
-    if (W<=0) W = 1;
-    if (H<=0) H = 1;
-    SetWindowPos(i->xid, 0, X, Y, W, H, flags);
-  }
-}
-
-static void make_fullscreen(Fl_Window *w, Window xid, int X, int Y, int W, int H) {
-  int sx, sy, sw, sh;
-  Fl::screen_xywh(sx, sy, sw, sh, X, Y, W, H);
-  DWORD flags = GetWindowLong(xid, GWL_STYLE);
-  flags = flags & ~(WS_THICKFRAME|WS_CAPTION);
-  SetWindowLong(xid, GWL_STYLE, flags);
-  // SWP_NOSENDCHANGING is so that we can override size limits
-  SetWindowPos(xid, HWND_TOP, sx, sy, sw, sh, SWP_NOSENDCHANGING | SWP_FRAMECHANGED);
-}
-
-void fullscreen_x(Fl_Window *w) {
-  w->_set_fullscreen();
-  make_fullscreen(w, fl_xid(w), w->x(), w->y(), w->w(), w->h());
-  Fl::handle(FL_FULLSCREEN, w);
-}
-
-void fullscreen_off_x(Fl_Window *w, int X, int Y, int W, int H) {
-  w->_clear_fullscreen();
-  DWORD style = GetWindowLong(fl_xid(w), GWL_STYLE);
-  // Remove the xid temporarily so that Fl_X::fake_X_wm() behaves like it
-  // does in Fl_X::make().
-  HWND xid = fl_xid(w);
-  Fl_X::i(w)->xid = NULL;
-  int x, y, bt, bx, by;
-  switch (Fl_X::fake_X_wm(w, x, y, bt, bx, by)) {
-  case 0: 
-    break;
-  case 1: 
-    style |= WS_CAPTION; 
-    break;
-  case 2: 
-    if (w->border()) {
-      style |= WS_THICKFRAME | WS_CAPTION; 
-    }
-    break;
-  }
-  Fl_X::i(w)->xid = xid;
-  // Adjust for decorations (but not if that puts the decorations
-  // outside the screen)
-  if ((X != w->x()) || (Y != w->y())) {
-    X -= bx;
-    Y -= by+bt;
-  }
-  W += bx*2;
-  H += by*2+bt;
-  SetWindowLong(fl_xid(w), GWL_STYLE, style);
-  SetWindowPos(fl_xid(w), 0, X, Y, W, H,
-               SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED);
-  Fl::handle(FL_FULLSCREEN, w);
-}
-
-
-////////////////////////////////////////////////////////////////
-
-/*
- * This silly little class remembers the name of all window classes 
- * we register to avoid double registration. It has the added bonus 
- * of freeing everything on application close as well.
- */
-class NameList {
-public:
-  NameList() { name = (char**)malloc(sizeof(char**)); NName = 1; nName = 0; }
-  ~NameList() { 
-    int i;
-    for (i=0; i<nName; i++) free(name[i]);
-    if (name) free(name); 
-  }
-  void add_name(const char *n) {
-    if (NName==nName) {
-      NName += 5;
-      name = (char**)realloc(name, NName * sizeof(char*));
-    }
-    name[nName++] = strdup(n);
-  }
-  char has_name(const char *n) {
-    int i;
-    for (i=0; i<nName; i++) {
-      if (strcmp(name[i], n)==0) return 1;
-    }
-    return 0;
-  }
-private:
-  char **name;
-  int nName, NName;
-};
-
-void fl_fix_focus(); // in Fl.cxx
-
-char fl_show_iconic;	// hack for Fl_Window::iconic()
-// int fl_background_pixel = -1; // color to use for background
-UINT fl_wake_msg = 0;
-int fl_disable_transient_for; // secret method of removing TRANSIENT_FOR
-
-Fl_X* Fl_X::make(Fl_Window* w) {
-  Fl_Group::current(0); // get rid of very common user bug: forgot end()
-
-  // if the window is a subwindow and our parent is not mapped yet, we
-  // mark this window visible, so that mapping the parent at a later
-  // point in time will call this function again to finally map the subwindow.
-  if (w->parent() && !Fl_X::i(w->window())) {
-    w->set_visible();
-    return 0L;
-  }
-
-  static NameList class_name_list;
-  static const char *first_class_name = 0L;
-  const char *class_name = w->xclass();
-  if (!class_name) class_name = first_class_name; // reuse first class name used
-  if (!class_name) class_name = "FLTK"; // default to create a "FLTK" WNDCLASS
-  if (!first_class_name) {
-    first_class_name = class_name;
-  }
-
-  wchar_t class_namew[100]; // (limited) buffer for Windows class name
-
-  // convert UTF-8 class_name to wchar_t for RegisterClassExW and CreateWindowExW
-
-  fl_utf8toUtf16(class_name,strlen(class_name),		// in
-		 (unsigned short*)class_namew,		// out
-		 sizeof(class_namew)/sizeof(wchar_t));	// max. size
-
-  if (!class_name_list.has_name(class_name)) {
-    WNDCLASSEXW wcw;
-    memset(&wcw, 0, sizeof(wcw));
-    wcw.cbSize = sizeof(WNDCLASSEXW);
-
-    // Documentation states a device context consumes about 800 bytes
-    // of memory... so who cares? If 800 bytes per window is what it
-    // takes to speed things up, I'm game.
-    //wc.style = CS_HREDRAW | CS_VREDRAW | CS_CLASSDC | CS_DBLCLKS;
-    wcw.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;
-    wcw.lpfnWndProc = (WNDPROC)WndProc;
-    wcw.cbClsExtra = wcw.cbWndExtra = 0;
-    wcw.hInstance = fl_display;
-    if (!w->icon())
-      w->icon((void *)LoadIcon(NULL, IDI_APPLICATION));
-    wcw.hIcon = wcw.hIconSm = (HICON)w->icon();
-    wcw.hCursor = LoadCursor(NULL, IDC_ARROW);
-    //uchar r,g,b; Fl::get_color(FL_GRAY,r,g,b);
-    //wc.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(r,g,b));
-    wcw.hbrBackground = NULL;
-    wcw.lpszMenuName = NULL;
-    wcw.lpszClassName = class_namew;
-    RegisterClassExW(&wcw);
-    class_name_list.add_name(class_name);
-  }
-
-  const wchar_t* message_namew = L"FLTK::ThreadWakeup";
-  if (!fl_wake_msg) fl_wake_msg = RegisterWindowMessageW(message_namew);
-
-  HWND parent;
-  DWORD style = WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
-  DWORD styleEx = WS_EX_LEFT;
-
-  int xp = w->x();
-  int yp = w->y();
-  int wp = w->w();
-  int hp = w->h();
-
-  int showit = 1;
-
-  if (w->parent()) {
-    style |= WS_CHILD;
-    styleEx |= WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT;
-    parent = fl_xid(w->window());
-  } else {
-    if (!w->size_range_set) {
-      if (w->resizable()) {
-	Fl_Widget *o = w->resizable();
-	int minw = o->w(); if (minw > 100) minw = 100;
-	int minh = o->h(); if (minh > 100) minh = 100;
-	w->size_range(w->w() - o->w() + minw, w->h() - o->h() + minh, 0, 0);
-      } else {
-	w->size_range(w->w(), w->h(), w->w(), w->h());
-      }
-    }
-    styleEx |= WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT;
-    int xwm = xp , ywm = yp , bt, bx, by;
-    switch (fake_X_wm(w, xwm, ywm, bt, bx, by)) {
-      // No border (used for menus)
-      case 0:
-        style |= WS_POPUP;
-        styleEx |= WS_EX_TOOLWINDOW;
-	      break;
-
-      // Thin border and title bar
-      case 1:
-        style |= WS_DLGFRAME | WS_CAPTION;
-        if (!w->modal())
-          style |= WS_SYSMENU | WS_MINIMIZEBOX;
-        break;
-
-      // Thick, resizable border and title bar, with maximize button
-      case 2:
-        style |= WS_THICKFRAME | WS_SYSMENU | WS_MAXIMIZEBOX | WS_CAPTION;
-        if (!w->modal())
-          style |= WS_MINIMIZEBOX;
-        break;
-    }
-    if (by+bt) {
-      wp += 2*bx;
-      hp += 2*by+bt;
-    }
-    if (!w->force_position()) {
-      xp = yp = CW_USEDEFAULT;
-    } else {
-      if (!Fl::grab()) {
-	xp = xwm; yp = ywm;
-        w->x(xp);w->y(yp);
-      }
-      xp -= bx;
-      yp -= by+bt;
-    }
-
-    parent = 0;
-    if (w->non_modal() && Fl_X::first && !fl_disable_transient_for) {
-      // find some other window to be "transient for":
-      Fl_Window* w = Fl_X::first->w;
-      while (w->parent()) w = w->window();
-      parent = fl_xid(w);
-      if (!w->visible()) showit = 0;
-    } else if (Fl::grab()) parent = fl_xid(Fl::grab());
-  }
-
-  Fl_X* x = new Fl_X;
-  x->other_xid = 0;
-  x->setwindow(w);
-  x->region = 0;
-  x->private_dc = 0;
-  x->cursor = LoadCursor(NULL, IDC_ARROW);
-  x->custom_cursor = 0;
-  if (!fl_codepage) fl_get_codepage();
-
-  WCHAR *lab = NULL;
-  if (w->label()) {
-    int l = strlen(w->label());
-//  lab = (WCHAR*) malloc((l + 1) * sizeof(short));
-//  l = fl_utf2unicode((unsigned char*)w->label(), l, (xchar*)lab);
-//  lab[l] = 0;
-    unsigned wlen = fl_utf8toUtf16(w->label(), l, NULL, 0); // Pass NULL to query length
-    wlen++;
-    lab = (WCHAR *) malloc(sizeof(WCHAR)*wlen);
-    wlen = fl_utf8toUtf16(w->label(), l, (unsigned short*)lab, wlen);
-    lab[wlen] = 0;
-  }
-  x->xid = CreateWindowExW(
-    styleEx,
-    class_namew, lab, style,
-    xp, yp, wp, hp,
-    parent,
-    NULL, // menu
-    fl_display,
-    NULL // creation parameters
-  );
-  if (lab) free(lab);
-
-  x->set_icons();
-
-  if (w->flags() & Fl_Widget::FULLSCREEN) {
-  /* We need to make sure that the fullscreen is created on the
-     default monitor, ie the desktop where the shortcut is located
-     etc. This requires that CreateWindow is called with CW_USEDEFAULT
-     for x and y. We can then use GetWindowRect to determine which
-     monitor the window was placed on. */
-    RECT rect;
-    GetWindowRect(x->xid, &rect);
-    make_fullscreen(w, x->xid, rect.left, rect.top, 
-                    rect.right - rect.left, rect.bottom - rect.top);
-  }
-
-  x->next = Fl_X::first;
-  Fl_X::first = x;
-
-  fl_clipboard_notify_target(x->xid);
-
-  x->wait_for_expose = 1;
-  if (fl_show_iconic) {showit = 0; fl_show_iconic = 0;}
-  if (showit) {
-    w->set_visible();
-    int old_event = Fl::e_number;
-    w->handle(Fl::e_number = FL_SHOW); // get child windows to appear
-    Fl::e_number = old_event;
-    w->redraw(); // force draw to happen
-  }
-  // If we've captured the mouse, we dont want to activate any
-  // other windows from the code, or we lose the capture.
-  ShowWindow(x->xid, !showit ? SW_SHOWMINNOACTIVE :
-	     (Fl::grab() || (styleEx & WS_EX_TOOLWINDOW)) ? SW_SHOWNOACTIVATE : SW_SHOWNORMAL);
-
-  // Register all windows for potential drag'n'drop operations
-  fl_OleInitialize();
-  RegisterDragDrop(x->xid, flIDropTarget);
-
-  if (!fl_aimm) {
-    CoCreateInstance(CLSID_CActiveIMM, NULL, CLSCTX_INPROC_SERVER,
-		     IID_IActiveIMMApp, (void**) &fl_aimm);
-    if (fl_aimm) {
-      fl_aimm->Activate(TRUE);
-    }
-  }
-
-  if (w->modal()) {Fl::modal_ = w; fl_fix_focus();}
-  return x;
-}
-
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-/// Win32 timers
-///
-
-
-static LRESULT CALLBACK s_TimerProc(HWND hwnd, UINT msg,
-                                    WPARAM wParam, LPARAM lParam)
-{
-  switch (msg) {
-  case WM_TIMER:
-    {
-      unsigned int id = wParam - 1;
-      if (id < (unsigned int)win32_timer_used && win32_timers[id].handle) {
-        Fl_Timeout_Handler cb   = win32_timers[id].callback;
-        void*              data = win32_timers[id].data;
-        delete_timer(win32_timers[id]);
-        if (cb) {
-          (*cb)(data);
-        }
-      }
-    }
-    return 0;
-
-  default:
-    break;
-  }
-
-  return DefWindowProc(hwnd, msg, wParam, lParam);
-}
-
-void Fl::add_timeout(double time, Fl_Timeout_Handler cb, void* data)
-{
-  repeat_timeout(time, cb, data);
-}
-
-void Fl::repeat_timeout(double time, Fl_Timeout_Handler cb, void* data)
-{
-  int timer_id = -1;
-  for (int i = 0;  i < win32_timer_used;  ++i) {
-    if ( !win32_timers[i].handle ) {
-      timer_id = i;
-      break;
-    }
-  }
-  if (timer_id == -1) {
-    if (win32_timer_used == win32_timer_alloc) {
-      realloc_timers();
-    }
-    timer_id = win32_timer_used++;
-  }
-  unsigned int elapsed = (unsigned int)(time * 1000);
-
-  if ( !s_TimerWnd ) {
-    const char* timer_class = "FLTimer";
-    WNDCLASSEX wc;
-    memset(&wc, 0, sizeof(wc));
-    wc.cbSize = sizeof (wc);
-    wc.style = CS_CLASSDC;
-    wc.lpfnWndProc = (WNDPROC)s_TimerProc;
-    wc.hInstance = fl_display;
-    wc.lpszClassName = timer_class;
-    /*ATOM atom =*/ RegisterClassEx(&wc);
-    // create a zero size window to handle timer events
-    s_TimerWnd = CreateWindowEx(WS_EX_LEFT | WS_EX_TOOLWINDOW,
-                                timer_class, "",
-                                WS_POPUP,
-                                0, 0, 0, 0,
-                                NULL, NULL, fl_display, NULL);
-    // just in case this OS won't let us create a 0x0 size window:
-    if (!s_TimerWnd)
-      s_TimerWnd = CreateWindowEx(WS_EX_LEFT | WS_EX_TOOLWINDOW,
-				  timer_class, "",
-				  WS_POPUP,
-				  0, 0, 1, 1,
-				  NULL, NULL, fl_display, NULL);
-    ShowWindow(s_TimerWnd, SW_SHOWNOACTIVATE);
-  }
-
-  win32_timers[timer_id].callback = cb;
-  win32_timers[timer_id].data     = data;
-
-  win32_timers[timer_id].handle =
-    SetTimer(s_TimerWnd, timer_id + 1, elapsed, NULL);
-}
-
-int Fl::has_timeout(Fl_Timeout_Handler cb, void* data)
-{
-  for (int i = 0;  i < win32_timer_used;  ++i) {
-    Win32Timer& t = win32_timers[i];
-    if (t.handle  &&  t.callback == cb  &&  t.data == data) {
-      return 1;
-    }
-  }
-  return 0;
-}
-
-void Fl::remove_timeout(Fl_Timeout_Handler cb, void* data)
-{
-  int i;
-  for (i = 0;  i < win32_timer_used;  ++i) {
-    Win32Timer& t = win32_timers[i];
-    if (t.handle  &&  t.callback == cb  &&
-      (t.data == data  ||  data == NULL)) {
-      delete_timer(t);
-    }
-  }
-}
-
-/// END TIMERS
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-////////////////////////////////////////////////////////////////
-
-HINSTANCE fl_display = GetModuleHandle(NULL);
-
-void Fl_Window::size_range_() {
-  size_range_set = 1;
-}
-
-void Fl_X::set_minmax(LPMINMAXINFO minmax)
-{
-  int td, wd, hd, dummy_x, dummy_y;
-
-  fake_X_wm(w, dummy_x, dummy_y, td, wd, hd);
-  wd *= 2;
-  hd *= 2;
-  hd += td;
-
-  minmax->ptMinTrackSize.x = w->minw + wd;
-  minmax->ptMinTrackSize.y = w->minh + hd;
-  if (w->maxw) {
-    minmax->ptMaxTrackSize.x = w->maxw + wd;
-    minmax->ptMaxSize.x = w->maxw + wd;
-  }
-  if (w->maxh) {
-    minmax->ptMaxTrackSize.y = w->maxh + hd;
-    minmax->ptMaxSize.y = w->maxh + hd;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/filename.H> // need so FL_EXPORT fl_filename_name works
-
-// returns pointer to the filename, or null if name ends with '/'
-const char *fl_filename_name(const char *name) {
-  const char *p,*q;
-  if (!name) return (0);
-  q = name;
-  if (q[0] && q[1]==':') q += 2; // skip leading drive letter
-  for (p = q; *p; p++) if (*p == '/' || *p == '\\') q = p+1;
-  return q;
-}
-
-void Fl_Window::label(const char *name,const char *iname) {
-  Fl_Widget::label(name);
-  iconlabel_ = iname;
-  if (shown() && !parent()) {
-    if (!name) name = "";
-    int l = strlen(name);
-//  WCHAR *lab = (WCHAR*) malloc((l + 1) * sizeof(short));
-//  l = fl_utf2unicode((unsigned char*)name, l, (xchar*)lab);
-    unsigned wlen = fl_utf8toUtf16(name, l, NULL, 0); // Pass NULL to query length
-    wlen++;
-    unsigned short * lab = (unsigned short*)malloc(sizeof(unsigned short)*wlen);
-    wlen = fl_utf8toUtf16(name, l, lab, wlen);
-    lab[wlen] = 0;
-    SetWindowTextW(i->xid, (WCHAR *)lab);
-    free(lab);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-static HICON image_to_icon(const Fl_RGB_Image *image, bool is_icon=true,
-                           int hotx = 0, int hoty = 0) {
-  BITMAPV5HEADER bi;
-  HBITMAP bitmap, mask;
-  DWORD *bits;
-  HICON icon;
-
-  if (!is_icon) {
-    if ((hotx < 0) || (hotx >= image->w()))
-      return NULL;
-    if ((hoty < 0) || (hoty >= image->h()))
-      return NULL;
-  }
-
-  memset(&bi, 0, sizeof(BITMAPV5HEADER));
-
-  bi.bV5Size        = sizeof(BITMAPV5HEADER);
-  bi.bV5Width       = image->w();
-  bi.bV5Height      = -image->h(); // Negative for top-down
-  bi.bV5Planes      = 1;
-  bi.bV5BitCount    = 32;
-  bi.bV5Compression = BI_BITFIELDS;
-  bi.bV5RedMask     = 0x00FF0000;
-  bi.bV5GreenMask   = 0x0000FF00;
-  bi.bV5BlueMask    = 0x000000FF;
-  bi.bV5AlphaMask   = 0xFF000000;
-
-  HDC hdc;
-
-  hdc = GetDC(NULL);
-  bitmap = CreateDIBSection(hdc, (BITMAPINFO*)&bi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
-  ReleaseDC(NULL, hdc);
-
-  if (bits == NULL)
-    return NULL;
-
-  const uchar *i = (const uchar*)*image->data();
-  for (int y = 0;y < image->h();y++) {
-    for (int x = 0;x < image->w();x++) {
-      switch (image->d()) {
-      case 1:
-        *bits = (0xff<<24) | (i[0]<<16) | (i[0]<<8) | i[0];
-        break;
-      case 2:
-        *bits = (i[1]<<24) | (i[0]<<16) | (i[0]<<8) | i[0];
-        break;
-      case 3:
-        *bits = (0xff<<24) | (i[0]<<16) | (i[1]<<8) | i[2];
-        break;
-      case 4:
-        *bits = (i[3]<<24) | (i[0]<<16) | (i[1]<<8) | i[2];
-        break;
-      }
-      i += image->d();
-      bits++;
-    }
-    i += image->ld();
-  }
-
-  // A mask bitmap is still needed even though it isn't used
-  mask = CreateBitmap(image->w(),image->h(),1,1,NULL);
-  if (mask == NULL) {
-    DeleteObject(bitmap);
-    return NULL;
-  }
-
-  ICONINFO ii;
-
-  ii.fIcon    = is_icon;
-  ii.xHotspot = hotx;
-  ii.yHotspot = hoty;
-  ii.hbmMask  = mask;
-  ii.hbmColor = bitmap;
-
-  icon = CreateIconIndirect(&ii);
-
-  DeleteObject(bitmap);
-  DeleteObject(mask);
-
-  if (icon == NULL)
-    return NULL;
-
-  return icon;
-}
-
-////////////////////////////////////////////////////////////////
-
-static HICON default_big_icon = NULL;
-static HICON default_small_icon = NULL;
-
-const Fl_RGB_Image *find_best_icon(int ideal_width, 
-                                   const Fl_RGB_Image *icons[], int count) {
-  const Fl_RGB_Image *best;
-
-  best = NULL;
-
-  for (int i = 0;i < count;i++) {
-    if (best == NULL)
-      best = icons[i];
-    else {
-      if (best->w() < ideal_width) {
-        if (icons[i]->w() > best->w())
-          best = icons[i];
-      } else {
-        if ((icons[i]->w() >= ideal_width) &&
-            (icons[i]->w() < best->w()))
-          best = icons[i];
-      }
-    }
-  }
-
-  return best;
-}
-
-void Fl_X::set_default_icons(const Fl_RGB_Image *icons[], int count) {
-  const Fl_RGB_Image *best_big, *best_small;
-
-  if (default_big_icon != NULL)
-    DestroyIcon(default_big_icon);
-  if (default_small_icon != NULL)
-    DestroyIcon(default_small_icon);
-
-  best_big = find_best_icon(GetSystemMetrics(SM_CXICON), icons, count);
-  best_small = find_best_icon(GetSystemMetrics(SM_CXSMICON), icons, count);
-
-  if (best_big != NULL)
-    default_big_icon = image_to_icon(best_big);
-  else
-    default_big_icon = NULL;
-
-  if (best_small != NULL)
-    default_small_icon = image_to_icon(best_small);
-  else
-    default_small_icon = NULL;
-}
-
-void Fl_X::set_default_icons(HICON big_icon, HICON small_icon) {
-  if (default_big_icon != NULL)
-    DestroyIcon(default_big_icon);
-  if (default_small_icon != NULL)
-    DestroyIcon(default_small_icon);
-
-  if (big_icon != NULL)
-    default_big_icon = CopyIcon(big_icon);
-  if (small_icon != NULL)
-    default_small_icon = CopyIcon(small_icon);
-}
-
-void Fl_X::set_icons() {
-  HICON big_icon, small_icon;
-
-  big_icon = NULL;
-  small_icon = NULL;
-
-  if (w->icon_->count) {
-    const Fl_RGB_Image *best_big, *best_small;
-
-    best_big = find_best_icon(GetSystemMetrics(SM_CXICON),
-                              (const Fl_RGB_Image **)w->icon_->icons,
-                              w->icon_->count);
-    best_small = find_best_icon(GetSystemMetrics(SM_CXSMICON),
-                                (const Fl_RGB_Image **)w->icon_->icons,
-                                w->icon_->count);
-
-    if (best_big != NULL)
-      big_icon = image_to_icon(best_big);
-    if (best_small != NULL)
-      small_icon = image_to_icon(best_small);
-  } else {
-    big_icon = default_big_icon;
-    small_icon = default_small_icon;
-  }
-
-  if (big_icon != NULL)
-    SendMessage(xid, WM_SETICON, ICON_BIG, (LPARAM)big_icon);
-  if (small_icon != NULL)
-    SendMessage(xid, WM_SETICON, ICON_SMALL, (LPARAM)small_icon);
-
-  if (w->icon_->count) {
-    if (big_icon != NULL)
-      DestroyIcon(big_icon);
-    if (small_icon != NULL)
-      DestroyIcon(small_icon);
-  }
-}
-
-void Fl_Window::default_icons(HICON big_icon, HICON small_icon) {
-  Fl_X::set_default_icons(big_icon, small_icon);
-}
-
-void Fl_Window::icons(HICON big_icon, HICON small_icon) {
-  free_icons();
-
-  if (big_icon != NULL)
-    icon_->big_icon = CopyIcon(big_icon);
-  if (small_icon != NULL)
-    icon_->small_icon = CopyIcon(small_icon);
-
-  if (i)
-    i->set_icons();
-}
-
-////////////////////////////////////////////////////////////////
-
-#ifndef IDC_HAND
-#  define IDC_HAND  MAKEINTRESOURCE(32649)
-#endif // !IDC_HAND
-
-int Fl_X::set_cursor(Fl_Cursor c) {
-  LPSTR n;
-  HCURSOR new_cursor;
-
-  if (c == FL_CURSOR_NONE)
-    new_cursor = NULL;
-  else {
-    switch (c) {
-    case FL_CURSOR_ARROW:   n = IDC_ARROW; break;
-    case FL_CURSOR_CROSS:   n = IDC_CROSS; break;
-    case FL_CURSOR_WAIT:    n = IDC_WAIT; break;
-    case FL_CURSOR_INSERT:  n = IDC_IBEAM; break;
-    case FL_CURSOR_HAND:    n = IDC_HAND; break;
-    case FL_CURSOR_HELP:    n = IDC_HELP; break;
-    case FL_CURSOR_MOVE:    n = IDC_SIZEALL; break;
-    case FL_CURSOR_N:
-    case FL_CURSOR_S:
-      // FIXME: Should probably have fallbacks for these instead
-    case FL_CURSOR_NS:      n = IDC_SIZENS; break;
-    case FL_CURSOR_NE:
-    case FL_CURSOR_SW:
-      // FIXME: Dito.
-    case FL_CURSOR_NESW:    n = IDC_SIZENESW; break;
-    case FL_CURSOR_E:
-    case FL_CURSOR_W:
-      // FIXME: Dito.
-    case FL_CURSOR_WE:      n = IDC_SIZEWE; break;
-    case FL_CURSOR_SE:
-    case FL_CURSOR_NW:
-      // FIXME: Dito.
-    case FL_CURSOR_NWSE:    n = IDC_SIZENWSE; break;
-    default:
-      return 0;
-    }
-
-    new_cursor = LoadCursor(NULL, n);
-    if (new_cursor == NULL)
-      return 0;
-  }
-
-  if ((cursor != NULL) && custom_cursor)
-    DestroyIcon(cursor);
-
-  cursor = new_cursor;
-  custom_cursor = 0;
-
-  SetCursor(cursor);
-
-  return 1;
-}
-
-int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) {
-  HCURSOR new_cursor;
-
-  new_cursor = image_to_icon(image, false, hotx, hoty);
-  if (new_cursor == NULL)
-    return 0;
-
-  if ((cursor != NULL) && custom_cursor)
-    DestroyIcon(cursor);
-
-  cursor = new_cursor;
-  custom_cursor = 1;
-
-  SetCursor(cursor);
-
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-// Implement the virtual functions for the base Fl_Window class:
-
-// If the box is a filled rectangle, we can make the redisplay *look*
-// faster by using X's background pixel erasing.  We can make it
-// actually *be* faster by drawing the frame only, this is done by
-// setting fl_boxcheat, which is seen by code in fl_drawbox.cxx:
-// For WIN32 it looks like all windows share a background color, so
-// I use FL_GRAY for this and only do this cheat for windows that are
-// that color.
-// Actually it is totally disabled.
-// Fl_Widget *fl_boxcheat;
-//static inline int can_boxcheat(uchar b) {return (b==1 || (b&2) && b<=15);}
-
-void Fl_Window::show() {
-  image(Fl::scheme_bg_);
-  if (Fl::scheme_bg_) {
-    labeltype(FL_NORMAL_LABEL);
-    align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-  } else {
-    labeltype(FL_NO_LABEL);
-  }
-  Fl_Tooltip::exit(this);
-  if (!shown()) {
-    // if (can_boxcheat(box())) fl_background_pixel = fl_xpixel(color());
-    Fl_X::make(this);
-  } else {
-    // Once again, we would lose the capture if we activated the window.
-    if (IsIconic(i->xid)) OpenIcon(i->xid);
-    if (!fl_capture) BringWindowToTop(i->xid);
-    //ShowWindow(i->xid,fl_capture?SW_SHOWNOACTIVATE:SW_RESTORE);
-  }
-#ifdef USE_PRINT_BUTTON
-void preparePrintFront(void);
-preparePrintFront();
-#endif
-}
-
-Fl_Window *Fl_Window::current_;
-// the current context
-HDC fl_gc = 0;
-// the current window handle, initially set to -1 so we can correctly
-// allocate fl_GetDC(0)
-HWND fl_window = NULL;
-
-// Here we ensure only one GetDC is ever in place.
-HDC fl_GetDC(HWND w) {
-  if (fl_gc) {
-    if (w == fl_window  &&  fl_window != NULL) return fl_gc;
-    if (fl_window) fl_release_dc(fl_window, fl_gc); // ReleaseDC
-  }
-  fl_gc = GetDC(w);
-  fl_save_dc(w, fl_gc);
-  fl_window = w;
-  // calling GetDC seems to always reset these: (?)
-  SetTextAlign(fl_gc, TA_BASELINE|TA_LEFT);
-  SetBkMode(fl_gc, TRANSPARENT);
-
-  return fl_gc;
-}
-
-// make X drawing go into this window (called by subclass flush() impl.)
-void Fl_Window::make_current() {
-  fl_GetDC(fl_xid(this));
-
-#if USE_COLORMAP
-  // Windows maintains a hardware and software color palette; the
-  // SelectPalette() call updates the current soft->hard mapping
-  // for all drawing calls, so we must select it here before any
-  // code does any drawing...
-
-  fl_select_palette();
-#endif // USE_COLORMAP
-
-  current_ = this;
-  fl_clip_region(0);
-
-
-}
-
-/* Make sure that all allocated fonts are released. This works only if 
-   Fl::run() is allowed to exit by closing all windows. Calling 'exit(int)'
-   will not automatically free any fonts. */
-void fl_free_fonts(void)
-{
-// remove the Fl_Font_Descriptor chains
-  int i;
-  Fl_Fontdesc * s;
-  Fl_Font_Descriptor * f;
-  Fl_Font_Descriptor * ff;
-  for (i=0; i<FL_FREE_FONT; i++) {
-    s = fl_fonts + i;
-    for (f=s->first; f; f=ff) {
-      ff = f->next;
-      delete f;
-      s->first = ff;
-    }
-  }
-}
-
-
-///////////////////////////////////////////////////////////////////////
-//
-//  The following routines help fix a problem with the leaking of Windows
-//  Device Context (DC) objects. The 'proper' protocol is for a program to
-//  acquire a DC, save its state, do the modifications needed for drawing,
-//  perform the drawing, restore the initial state, and release the DC. In
-//  FLTK, the save and restore steps have previously been omitted and DCs are
-//  not properly released, leading to a great number of DC leaks. As some
-//  Windows "OSs" will hang when any process exceeds roughly 10,000 GDI objects,
-//  it is important to control GDI leaks, which are much more important than memory
-//  leaks. The following struct, global variable, and routines help implement
-//  the above protocol for those cases where the GetDC and RestoreDC are not in
-//  the same routine. For each GetDC, fl_save_dc is used to create an entry in 
-//  a linked list that saves the window handle, the DC handle, and the initial
-//  state. When the DC is to be released, 'fl_release_dc' is called. It restores
-//  the initial state and releases the DC. When the program exits, 'fl_cleanup_dc_list'
-//  frees any remaining nodes in the list.
-
-struct Win_DC_List {      // linked list 
-  HWND    window;         // window handle
-  HDC     dc;             // device context handle
-  int     saved_dc;       // initial state of DC
-  Win_DC_List * next;     // pointer to next item
-};
-
-static Win_DC_List * win_DC_list = 0;
-
-void fl_save_dc( HWND w, HDC dc) {
-  Win_DC_List * t;
-  t = new Win_DC_List;
-  t->window = w;
-  t->dc = dc;
-  t->saved_dc = SaveDC(dc);
-  if (win_DC_list)
-    t->next = win_DC_list;
-  else
-    t->next = NULL;
-  win_DC_list = t;
-}
-
-void fl_release_dc(HWND w, HDC dc) {
-  Win_DC_List * t= win_DC_list;
-  Win_DC_List * prev = 0;
-  if (!t)
-    return;
-  do {
-    if (t->dc == dc) {
-      RestoreDC(dc, t->saved_dc);
-      ReleaseDC(w, dc);
-      if (!prev) {
-        win_DC_list = t->next;   // delete first item
-      } else {
-        prev->next = t->next;       // one in the middle
-      }
-      delete (t);
-      return;
-    }
-    prev = t;
-    t = t->next;
-  } while (t);
-}
-
-void fl_cleanup_dc_list(void) {          // clean up the list
-  Win_DC_List * t = win_DC_list;
-  if (!t)return;
-  do {
-    RestoreDC(t->dc, t->saved_dc);
-    ReleaseDC(t->window, t->dc);
-    win_DC_list = t->next;
-    delete (t);
-    t = win_DC_list;
-  } while(t);
-}
-
-Fl_Region XRectangleRegion(int x, int y, int w, int h) {
-  if (Fl_Surface_Device::surface()->class_name() == Fl_Display_Device::class_id) return CreateRectRgn(x,y,x+w,y+h);
-  // because rotation may apply, the rectangle becomes a polygon in device coords
-  POINT pt[4] = { {x, y}, {x + w, y}, {x + w, y + h}, {x, y + h} };
-  LPtoDP(fl_gc, pt, 4);
-  return CreatePolygonRgn(pt, 4, ALTERNATE);
-}
-
-Window fl_xid_(const Fl_Window *w) {
-  Fl_X *temp = Fl_X::i(w); 
-  return temp ? temp->xid : 0;
-}
-
-int Fl_Window::decorated_w()
-{
-  if (!shown() || parent() || !border() || !visible()) return w();
-  int X, Y, bt, bx, by;
-  Fl_X::fake_X_wm(this, X, Y, bt, bx, by);
-  return w() + 2 * bx;
-}
-
-int Fl_Window::decorated_h()
-{
-  if (!shown() || parent() || !border() || !visible()) return h();
-  int X, Y, bt, bx, by;
-  Fl_X::fake_X_wm(this, X, Y, bt, bx, by);
-  return h() + bt + 2 * by;
-}
-
-void Fl_Paged_Device::print_window(Fl_Window *win, int x_offset, int y_offset)
-{
-  if (!win->shown() || win->parent() || !win->border() || !win->visible()) {
-    this->print_widget(win, x_offset, y_offset);
-    return;
-  }
-  int X, Y, bt, bx, by, ww, wh; // compute the window border sizes
-  Fl_X::fake_X_wm(win, X, Y, bt, bx, by);
-  ww = win->w() + 2 * bx;
-  wh = win->h() + bt + 2 * by;
-  Fl_Display_Device::display_device()->set_current(); // make window current
-  win->show();
-  Fl::check();
-  win->make_current();
-  HDC save_gc = fl_gc;
-  fl_gc = GetDC(NULL); // get the screen device context
-  // capture the 4 window sides from screen
-  RECT r; GetWindowRect(fl_window, &r);
-  uchar *top_image = fl_read_image(NULL, r.left, r.top, ww, bt + by);
-  uchar *left_image = fl_read_image(NULL, r.left, r.top, bx, wh);
-  uchar *right_image = fl_read_image(NULL, r.right - bx, r.top, bx, wh);
-  uchar *bottom_image = fl_read_image(NULL, r.left, r.bottom-by, ww, by);
-  ReleaseDC(NULL, fl_gc); fl_gc = save_gc;
-  this->set_current();
-  // print the 4 window sides
-  fl_draw_image(top_image, x_offset, y_offset, ww, bt + by, 3);
-  fl_draw_image(left_image, x_offset, y_offset, bx, wh, 3);
-  fl_draw_image(right_image, x_offset + win->w() + bx, y_offset, bx, wh, 3);
-  fl_draw_image(bottom_image, x_offset, y_offset + win->h() + bt + by, ww, by, 3);
-  delete[] top_image;
-  delete[] left_image;
-  delete[] right_image;
-  delete[] bottom_image;
-  // print the window inner part
-  this->print_widget(win, x_offset + bx, y_offset + bt + by);
-  fl_gc = GetDC(fl_xid(win));
-  ReleaseDC(fl_xid(win), fl_gc);
-}  
-
-#ifdef USE_PRINT_BUTTON
-// to test the Fl_Printer class creating a "Print front window" button in a separate window
-// contains also preparePrintFront call above
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Button.H>
-void printFront(Fl_Widget *o, void *data)
-{
-  Fl_Printer printer;
-  o->window()->hide();
-  Fl_Window *win = Fl::first_window();
-  if(!win) return;
-  int w, h;
-  if( printer.start_job(1) ) { o->window()->show(); return; }
-  if( printer.start_page() ) { o->window()->show(); return; }
-  printer.printable_rect(&w,&h);
-  int  wh, ww;
-  wh = win->decorated_h();
-  ww = win->decorated_w();
-  // scale the printer device so that the window fits on the page
-  float scale = 1;
-  if (ww > w || wh > h) {
-    scale = (float)w/ww;
-    if ((float)h/wh < scale) scale = (float)h/wh;
-    printer.scale(scale, scale);
-  }
-// #define ROTATE 20.0
-#ifdef ROTATE
-  printer.scale(scale * 0.8, scale * 0.8);
-  printer.printable_rect(&w, &h);
-  printer.origin(w/2, h/2 );
-  printer.rotate(ROTATE);
-  printer.print_widget( win, - win->w()/2, - win->h()/2 );
-  //printer.print_window_part( win, 0,0, win->w(), win->h(), - win->w()/2, - win->h()/2 );
-#else  
-  printer.print_window(win);
-#endif
-  printer.end_page();
-  printer.end_job();
-  o->window()->show();
-}
-
-void preparePrintFront(void)
-{
-  static BOOL first=TRUE;
-  if(!first) return;
-  first=FALSE;
-  static Fl_Window w(0,0,120,30);
-  static Fl_Button b(0,0,w.w(),w.h(), "Print front window");
-  b.callback(printFront);
-  w.end();
-  w.show();
-}
-#endif // USE_PRINT_BUTTON
-
-#endif // FL_DOXYGEN
-
-//
-// End of "$Id: Fl_win32.cxx 8759 2011-05-30 12:33:51Z manolo $".
-//
diff --git a/common/fltk/src/Fl_x.cxx b/common/fltk/src/Fl_x.cxx
deleted file mode 100644
index f95cf80..0000000
--- a/common/fltk/src/Fl_x.cxx
+++ /dev/null
@@ -1,2630 +0,0 @@
-//
-// "$Id: Fl_x.cxx 8764 2011-05-30 16:47:48Z manolo $"
-//
-// X specific code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-//#  include "Fl_win32.cxx"
-#elif defined(__APPLE__)
-//#  include "Fl_mac.cxx"
-#elif !defined(FL_DOXYGEN)
-
-#  define CONSOLIDATE_MOTION 1
-/**** Define this if your keyboard lacks a backspace key... ****/
-/* #define BACKSPACE_HACK 1 */
-
-#  include <config.h>
-#  include <FL/Fl.H>
-#  include <FL/x.H>
-#  include <FL/Fl_Window.H>
-#  include <FL/fl_utf8.h>
-#  include <FL/Fl_Tooltip.H>
-#  include <FL/fl_draw.H>
-#  include <FL/Fl_Paged_Device.H>
-#  include <stdio.h>
-#  include <stdlib.h>
-#  include "flstring.h"
-#  include <unistd.h>
-#  include <sys/time.h>
-#  include <X11/Xmd.h>
-#  include <X11/Xlocale.h>
-#  include <X11/Xlib.h>
-#  include <X11/keysym.h>
-#  include <X11/cursorfont.h>
-
-#  if HAVE_XCURSOR
-#    include <X11/Xcursor/Xcursor.h>
-#  endif
-
-#  ifdef HAVE_XFIXES
-#  include <X11/extensions/Xfixes.h>
-#  endif
-
-static Fl_Xlib_Graphics_Driver fl_xlib_driver;
-static Fl_Display_Device fl_xlib_display(&fl_xlib_driver);
-FL_EXPORT Fl_Graphics_Driver *fl_graphics_driver = (Fl_Graphics_Driver*)&fl_xlib_driver; // the current target device of graphics operations
-Fl_Surface_Device* Fl_Surface_Device::_surface = (Fl_Surface_Device*)&fl_xlib_display; // the current target surface of graphics operations
-Fl_Display_Device *Fl_Display_Device::_display = &fl_xlib_display;// the platform display
-
-////////////////////////////////////////////////////////////////
-// interface to poll/select call:
-
-#  if USE_POLL
-
-#    include <poll.h>
-static pollfd *pollfds = 0;
-
-#  else
-#    if HAVE_SYS_SELECT_H
-#      include <sys/select.h>
-#    endif /* HAVE_SYS_SELECT_H */
-
-// The following #define is only needed for HP-UX 9.x and earlier:
-//#define select(a,b,c,d,e) select((a),(int *)(b),(int *)(c),(int *)(d),(e))
-
-static fd_set fdsets[3];
-static int maxfd;
-#    define POLLIN 1
-#    define POLLOUT 4
-#    define POLLERR 8
-
-#  endif /* USE_POLL */
-
-static int nfds = 0;
-static int fd_array_size = 0;
-struct FD {
-#  if !USE_POLL
-  int fd;
-  short events;
-#  endif
-  void (*cb)(int, void*);
-  void* arg;
-};
-
-static FD *fd = 0;
-
-void Fl::add_fd(int n, int events, void (*cb)(int, void*), void *v) {
-  remove_fd(n,events);
-  int i = nfds++;
-  if (i >= fd_array_size) {
-    FD *temp;
-    fd_array_size = 2*fd_array_size+1;
-
-    if (!fd) temp = (FD*)malloc(fd_array_size*sizeof(FD));
-    else temp = (FD*)realloc(fd, fd_array_size*sizeof(FD));
-
-    if (!temp) return;
-    fd = temp;
-
-#  if USE_POLL
-    pollfd *tpoll;
-
-    if (!pollfds) tpoll = (pollfd*)malloc(fd_array_size*sizeof(pollfd));
-    else tpoll = (pollfd*)realloc(pollfds, fd_array_size*sizeof(pollfd));
-
-    if (!tpoll) return;
-    pollfds = tpoll;
-#  endif
-  }
-  fd[i].cb = cb;
-  fd[i].arg = v;
-#  if USE_POLL
-  pollfds[i].fd = n;
-  pollfds[i].events = events;
-#  else
-  fd[i].fd = n;
-  fd[i].events = events;
-  if (events & POLLIN) FD_SET(n, &fdsets[0]);
-  if (events & POLLOUT) FD_SET(n, &fdsets[1]);
-  if (events & POLLERR) FD_SET(n, &fdsets[2]);
-  if (n > maxfd) maxfd = n;
-#  endif
-}
-
-void Fl::add_fd(int n, void (*cb)(int, void*), void* v) {
-  Fl::add_fd(n, POLLIN, cb, v);
-}
-
-void Fl::remove_fd(int n, int events) {
-  int i,j;
-# if !USE_POLL
-  maxfd = -1; // recalculate maxfd on the fly
-# endif
-  for (i=j=0; i<nfds; i++) {
-#  if USE_POLL
-    if (pollfds[i].fd == n) {
-      int e = pollfds[i].events & ~events;
-      if (!e) continue; // if no events left, delete this fd
-      pollfds[j].events = e;
-    }
-#  else
-    if (fd[i].fd == n) {
-      int e = fd[i].events & ~events;
-      if (!e) continue; // if no events left, delete this fd
-      fd[i].events = e;
-    }
-    if (fd[i].fd > maxfd) maxfd = fd[i].fd;
-#  endif
-    // move it down in the array if necessary:
-    if (j<i) {
-      fd[j] = fd[i];
-#  if USE_POLL
-      pollfds[j] = pollfds[i];
-#  endif
-    }
-    j++;
-  }
-  nfds = j;
-#  if !USE_POLL
-  if (events & POLLIN) FD_CLR(n, &fdsets[0]);
-  if (events & POLLOUT) FD_CLR(n, &fdsets[1]);
-  if (events & POLLERR) FD_CLR(n, &fdsets[2]);
-#  endif
-}
-
-void Fl::remove_fd(int n) {
-  remove_fd(n, -1);
-}
-
-#if CONSOLIDATE_MOTION
-static Fl_Window* send_motion;
-extern Fl_Window* fl_xmousewin;
-#endif
-static bool in_a_window; // true if in any of our windows, even destroyed ones
-static void do_queued_events() {
-  in_a_window = true;
-  while (XEventsQueued(fl_display,QueuedAfterReading)) {
-    XEvent xevent;
-    XNextEvent(fl_display, &xevent);
-    fl_handle(xevent);
-  }
-  // we send FL_LEAVE only if the mouse did not enter some other window:
-  if (!in_a_window) Fl::handle(FL_LEAVE, 0);
-#if CONSOLIDATE_MOTION
-  else if (send_motion == fl_xmousewin) {
-    send_motion = 0;
-    Fl::handle(FL_MOVE, fl_xmousewin);
-  }
-#endif
-}
-
-// these pointers are set by the Fl::lock() function:
-static void nothing() {}
-void (*fl_lock_function)() = nothing;
-void (*fl_unlock_function)() = nothing;
-
-// This is never called with time_to_wait < 0.0:
-// It should return negative on error, 0 if nothing happens before
-// timeout, and >0 if any callbacks were done.
-int fl_wait(double time_to_wait) {
-
-  // OpenGL and other broken libraries call XEventsQueued
-  // unnecessarily and thus cause the file descriptor to not be ready,
-  // so we must check for already-read events:
-  if (fl_display && XQLength(fl_display)) {do_queued_events(); return 1;}
-
-#  if !USE_POLL
-  fd_set fdt[3];
-  fdt[0] = fdsets[0];
-  fdt[1] = fdsets[1];
-  fdt[2] = fdsets[2];
-#  endif
-  int n;
-
-  fl_unlock_function();
-
-  if (time_to_wait < 2147483.648) {
-#  if USE_POLL
-    n = ::poll(pollfds, nfds, int(time_to_wait*1000 + .5));
-#  else
-    timeval t;
-    t.tv_sec = int(time_to_wait);
-    t.tv_usec = int(1000000 * (time_to_wait-t.tv_sec));
-    n = ::select(maxfd+1,&fdt[0],&fdt[1],&fdt[2],&t);
-#  endif
-  } else {
-#  if USE_POLL
-    n = ::poll(pollfds, nfds, -1);
-#  else
-    n = ::select(maxfd+1,&fdt[0],&fdt[1],&fdt[2],0);
-#  endif
-  }
-
-  fl_lock_function();
-
-  if (n > 0) {
-    for (int i=0; i<nfds; i++) {
-#  if USE_POLL
-      if (pollfds[i].revents) fd[i].cb(pollfds[i].fd, fd[i].arg);
-#  else
-      int f = fd[i].fd;
-      short revents = 0;
-      if (FD_ISSET(f,&fdt[0])) revents |= POLLIN;
-      if (FD_ISSET(f,&fdt[1])) revents |= POLLOUT;
-      if (FD_ISSET(f,&fdt[2])) revents |= POLLERR;
-      if (fd[i].events & revents) fd[i].cb(f, fd[i].arg);
-#  endif
-    }
-  }
-  return n;
-}
-
-// fl_ready() is just like fl_wait(0.0) except no callbacks are done:
-int fl_ready() {
-  if (XQLength(fl_display)) return 1;
-  if (!nfds) return 0; // nothing to select or poll
-#  if USE_POLL
-  return ::poll(pollfds, nfds, 0);
-#  else
-  timeval t;
-  t.tv_sec = 0;
-  t.tv_usec = 0;
-  fd_set fdt[3];
-  fdt[0] = fdsets[0];
-  fdt[1] = fdsets[1];
-  fdt[2] = fdsets[2];
-  return ::select(maxfd+1,&fdt[0],&fdt[1],&fdt[2],&t);
-#  endif
-}
-
-// replace \r\n by \n
-static void convert_crlf(unsigned char *string, long& len) {
-  unsigned char *a, *b;
-  a = b = string;
-  while (*a) {
-    if (*a == '\r' && a[1] == '\n') { a++; len--; }
-    else *b++ = *a++;
-  }
-  *b = 0;
-}
-
-////////////////////////////////////////////////////////////////
-
-Display *fl_display;
-Window fl_message_window = 0;
-int fl_screen;
-XVisualInfo *fl_visual;
-Colormap fl_colormap;
-XIM fl_xim_im = 0;
-XIC fl_xim_ic = 0;
-Window fl_xim_win = 0;
-char fl_is_over_the_spot = 0;
-static XRectangle status_area;
-static bool have_xfixes = false;
-static int xfixes_event_base = 0;
-
-static Atom WM_DELETE_WINDOW;
-static Atom WM_PROTOCOLS;
-static Atom fl_MOTIF_WM_HINTS;
-static Atom TARGETS;
-static Atom CLIPBOARD;
-static Atom TIMESTAMP;
-static Atom PRIMARY_TIMESTAMP;
-static Atom CLIPBOARD_TIMESTAMP;
-Atom fl_XdndAware;
-Atom fl_XdndSelection;
-Atom fl_XdndEnter;
-Atom fl_XdndTypeList;
-Atom fl_XdndPosition;
-Atom fl_XdndLeave;
-Atom fl_XdndDrop;
-Atom fl_XdndStatus;
-Atom fl_XdndActionCopy;
-Atom fl_XdndFinished;
-//Atom fl_XdndProxy;
-Atom fl_XdndURIList;
-Atom fl_Xatextplainutf;
-Atom fl_Xatextplain;
-static Atom fl_XaText;
-Atom fl_XaCompoundText;
-Atom fl_XaUtf8String;
-Atom fl_XaTextUriList;
-Atom fl_NET_WM_NAME;			// utf8 aware window label
-Atom fl_NET_WM_ICON_NAME;		// utf8 aware window icon name
-Atom fl_NET_SUPPORTING_WM_CHECK;
-Atom fl_NET_WM_STATE;
-Atom fl_NET_WM_STATE_FULLSCREEN;
-Atom fl_NET_WM_ICON;
-
-/*
-  X defines 32-bit-entities to have a format value of max. 32,
-  although sizeof(atom) can be 8 (64 bits) on a 64-bit OS.
-  See also fl_open_display() for sizeof(atom) < 4.
-  Used for XChangeProperty (see STR #2419).
-*/
-static int atom_bits = 32;
-
-static void fd_callback(int,void *) {
-  do_queued_events();
-}
-
-extern "C" {
-  static int io_error_handler(Display*) {
-    Fl::fatal("X I/O error");
-    return 0;
-  }
-
-  static int xerror_handler(Display* d, XErrorEvent* e) {
-    char buf1[128], buf2[128];
-    sprintf(buf1, "XRequest.%d", e->request_code);
-    XGetErrorDatabaseText(d,"",buf1,buf1,buf2,128);
-    XGetErrorText(d, e->error_code, buf1, 128);
-    Fl::warning("%s: %s 0x%lx", buf2, buf1, e->resourceid);
-    return 0;
-  }
-}
-
-extern char *fl_get_font_xfld(int fnum, int size);
-
-void fl_new_ic()
-{
-  XVaNestedList preedit_attr = NULL;
-  XVaNestedList status_attr = NULL;
-  static XFontSet fs = NULL;
-  char *fnt;
-  char **missing_list;
-  int missing_count;
-  char *def_string;
-  static XRectangle spot;
-  int predit = 0;
-  int sarea = 0;
-  XIMStyles* xim_styles = NULL;
-
-#if USE_XFT
-
-#if defined(__GNUC__)
-// FIXME: warning XFT support here
-#endif /*__GNUC__*/
-
-  if (!fs) {
-    fnt = (char*)"-misc-fixed-*";
-    fs = XCreateFontSet(fl_display, fnt, &missing_list,
-                        &missing_count, &def_string);
-  }
-#else
-  if (!fs) {
-    bool must_free_fnt = true;
-    fnt = fl_get_font_xfld(0, 14);
-    if (!fnt) {fnt = (char*)"-misc-fixed-*";must_free_fnt=false;}
-    fs = XCreateFontSet(fl_display, fnt, &missing_list,
-                        &missing_count, &def_string);
-    if (must_free_fnt) free(fnt);
-  }
-#endif
-  preedit_attr = XVaCreateNestedList(0,
-                                     XNSpotLocation, &spot,
-                                     XNFontSet, fs, NULL);
-  status_attr = XVaCreateNestedList(0,
-                                    XNAreaNeeded, &status_area,
-                                    XNFontSet, fs, NULL);
-
-  if (!XGetIMValues(fl_xim_im, XNQueryInputStyle,
-                    &xim_styles, NULL, NULL)) {
-    int i;
-    XIMStyle *style;
-    for (i = 0, style = xim_styles->supported_styles;
-         i < xim_styles->count_styles; i++, style++) {
-      if (*style == (XIMPreeditPosition | XIMStatusArea)) {
-        sarea = 1;
-        predit = 1;
-      } else if (*style == (XIMPreeditPosition | XIMStatusNothing)) {
-        predit = 1;
-      }
-    }
-  }
-  XFree(xim_styles);
-
-  if (sarea) {
-    fl_xim_ic = XCreateIC(fl_xim_im,
-                          XNInputStyle, (XIMPreeditPosition | XIMStatusArea),
-                          XNPreeditAttributes, preedit_attr,
-                          XNStatusAttributes, status_attr,
-                          NULL);
-  }
-
-  if (!fl_xim_ic && predit) {
-    fl_xim_ic = XCreateIC(fl_xim_im,
-                          XNInputStyle, (XIMPreeditPosition | XIMStatusNothing),
-                          XNPreeditAttributes, preedit_attr,
-                          NULL);
-  }
-  XFree(preedit_attr);
-  XFree(status_attr);
-  if (!fl_xim_ic) {
-    fl_is_over_the_spot = 0;
-    fl_xim_ic = XCreateIC(fl_xim_im,
-                          XNInputStyle, (XIMPreeditNothing | XIMStatusNothing),
-                          NULL);
-  } else {
-    fl_is_over_the_spot = 1;
-    XVaNestedList status_attr = NULL;
-    status_attr = XVaCreateNestedList(0, XNAreaNeeded, &status_area, NULL);
-
-    XGetICValues(fl_xim_ic, XNStatusAttributes, status_attr, NULL);
-    XFree(status_attr);
-  }
-}
-
-
-static XRectangle    spot;
-static int spotf = -1;
-static int spots = -1;
-
-void fl_reset_spot(void)
-{
-  spot.x = -1;
-  spot.y = -1;
-  //if (fl_xim_ic) XUnsetICFocus(fl_xim_ic);
-}
-
-void fl_set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win)
-{
-  int change = 0;
-  XVaNestedList preedit_attr;
-  static XFontSet fs = NULL;
-  char **missing_list;
-  int missing_count;
-  char *def_string;
-  char *fnt = NULL;
-  bool must_free_fnt =true;
-
-  static XIC ic = NULL;
-
-  if (!fl_xim_ic || !fl_is_over_the_spot) return;
-  //XSetICFocus(fl_xim_ic);
-  if (X != spot.x || Y != spot.y) {
-    spot.x = X;
-    spot.y = Y;
-    spot.height = H;
-    spot.width = W;
-    change = 1;
-  }
-  if (font != spotf || size != spots) {
-    spotf = font;
-    spots = size;
-    change = 1;
-    if (fs) {
-      XFreeFontSet(fl_display, fs);
-    }
-#if USE_XFT
-
-#if defined(__GNUC__)
-// FIXME: warning XFT support here
-#endif /*__GNUC__*/
-
-    fnt = NULL; // fl_get_font_xfld(font, size);
-    if (!fnt) {fnt = (char*)"-misc-fixed-*";must_free_fnt=false;}
-    fs = XCreateFontSet(fl_display, fnt, &missing_list,
-                        &missing_count, &def_string);
-#else
-    fnt = fl_get_font_xfld(font, size);
-    if (!fnt) {fnt = (char*)"-misc-fixed-*";must_free_fnt=false;}
-    fs = XCreateFontSet(fl_display, fnt, &missing_list,
-                        &missing_count, &def_string);
-#endif
-  }
-  if (fl_xim_ic != ic) {
-    ic = fl_xim_ic;
-    change = 1;
-  }
-
-  if (fnt && must_free_fnt) free(fnt);
-  if (!change) return;
-
-
-  preedit_attr = XVaCreateNestedList(0,
-                                     XNSpotLocation, &spot,
-                                     XNFontSet, fs, NULL);
-  XSetICValues(fl_xim_ic, XNPreeditAttributes, preedit_attr, NULL);
-  XFree(preedit_attr);
-}
-
-void fl_set_status(int x, int y, int w, int h)
-{
-  XVaNestedList status_attr;
-  status_area.x = x;
-  status_area.y = y;
-  status_area.width = w;
-  status_area.height = h;
-  if (!fl_xim_ic) return;
-  status_attr = XVaCreateNestedList(0, XNArea, &status_area, NULL);
-
-  XSetICValues(fl_xim_ic, XNStatusAttributes, status_attr, NULL);
-  XFree(status_attr);
-}
-
-void fl_init_xim() {
-  static int xim_warning = 2;
-  if (xim_warning > 0) xim_warning--;
-
-  //XIMStyle *style;
-  XIMStyles *xim_styles;
-  if (!fl_display) return;
-  if (fl_xim_im) return;
-
-  fl_xim_im = XOpenIM(fl_display, NULL, NULL, NULL);
-  xim_styles = NULL;
-  fl_xim_ic = NULL;
-
-  if (fl_xim_im) {
-    XGetIMValues (fl_xim_im, XNQueryInputStyle,
-                  &xim_styles, NULL, NULL);
-  } else {
-    if (xim_warning)
-      Fl::warning("XOpenIM() failed");
-    // if xim_styles is allocated, free it now
-    if (xim_styles) XFree(xim_styles);
-    return;
-  }
-
-  if (xim_styles && xim_styles->count_styles) {
-    fl_new_ic();
-   } else {
-     if (xim_warning)
-       Fl::warning("No XIM style found");
-     XCloseIM(fl_xim_im);
-     fl_xim_im = NULL;
-     // if xim_styles is allocated, free it now
-     if (xim_styles) XFree(xim_styles);
-     return;
-  }
-  if (!fl_xim_ic) {
-    if (xim_warning)
-      Fl::warning("XCreateIC() failed");
-    XCloseIM(fl_xim_im);
-    fl_xim_im = NULL;
-  }
-  // if xim_styles is still allocated, free it now
-  if(xim_styles) XFree(xim_styles);
-}
-
-void fl_xim_deactivate(void);
-
-void fl_xim_activate(Window xid)
-{
-  if (!fl_xim_im)
-    return;
-
-  // If the focused window has changed, then use the brute force method
-  // of completely recreating the input context.
-  if (fl_xim_win != xid) {
-    fl_xim_deactivate();
-
-    fl_new_ic();
-    fl_xim_win = xid;
-
-    XSetICValues(fl_xim_ic,
-                 XNFocusWindow, fl_xim_win,
-                 XNClientWindow, fl_xim_win,
-                 NULL);
-  }
-
-  fl_set_spot(spotf, spots, spot.x, spot.y, spot.width, spot.height);
-}
-
-void fl_xim_deactivate(void)
-{
-  if (!fl_xim_ic)
-    return;
-
-  XDestroyIC(fl_xim_ic);
-  fl_xim_ic = NULL;
-
-  fl_xim_win = 0;
-}
-
-extern Fl_Window *fl_xfocus;
-
-void fl_update_focus(void)
-{
-  Fl_Widget *focus;
-
-  focus = Fl::grab();
-  if (!focus)
-    focus = Fl::focus();
-  if (!focus)
-    return;
-
-  if (focus->simple_keyboard()) {
-    fl_xim_deactivate();
-  } else {
-    // fl_xfocus should always be set if something has focus, but let's
-    // play it safe
-    if (!fl_xfocus || !fl_xid(fl_xfocus))
-      return;
-
-    fl_xim_activate(fl_xid(fl_xfocus));
-  }
-}
-
-void fl_open_display() {
-  if (fl_display) return;
-
-  setlocale(LC_CTYPE, "");
-  XSetLocaleModifiers("");
-
-  XSetIOErrorHandler(io_error_handler);
-  XSetErrorHandler(xerror_handler);
-
-  Display *d = XOpenDisplay(0);
-  if (!d) Fl::fatal("Can't open display: %s",XDisplayName(0));
-
-  fl_open_display(d);
-}
-
-void fl_open_display(Display* d) {
-  fl_display = d;
-
-  WM_DELETE_WINDOW      = XInternAtom(d, "WM_DELETE_WINDOW",    0);
-  WM_PROTOCOLS          = XInternAtom(d, "WM_PROTOCOLS",        0);
-  fl_MOTIF_WM_HINTS     = XInternAtom(d, "_MOTIF_WM_HINTS",     0);
-  TARGETS               = XInternAtom(d, "TARGETS",             0);
-  CLIPBOARD             = XInternAtom(d, "CLIPBOARD",           0);
-  TIMESTAMP             = XInternAtom(d, "TIMESTAMP",           0);
-  PRIMARY_TIMESTAMP     = XInternAtom(d, "PRIMARY_TIMESTAMP",   0);
-  CLIPBOARD_TIMESTAMP   = XInternAtom(d, "CLIPBOARD_TIMESTAMP", 0);
-  fl_XdndAware          = XInternAtom(d, "XdndAware",           0);
-  fl_XdndSelection      = XInternAtom(d, "XdndSelection",       0);
-  fl_XdndEnter          = XInternAtom(d, "XdndEnter",           0);
-  fl_XdndTypeList       = XInternAtom(d, "XdndTypeList",        0);
-  fl_XdndPosition       = XInternAtom(d, "XdndPosition",        0);
-  fl_XdndLeave          = XInternAtom(d, "XdndLeave",           0);
-  fl_XdndDrop           = XInternAtom(d, "XdndDrop",            0);
-  fl_XdndStatus         = XInternAtom(d, "XdndStatus",          0);
-  fl_XdndActionCopy     = XInternAtom(d, "XdndActionCopy",      0);
-  fl_XdndFinished       = XInternAtom(d, "XdndFinished",        0);
-  //fl_XdndProxy        = XInternAtom(d, "XdndProxy",           0);
-  fl_XdndEnter          = XInternAtom(d, "XdndEnter",           0);
-  fl_XdndURIList        = XInternAtom(d, "text/uri-list",       0);
-  fl_Xatextplainutf     = XInternAtom(d, "text/plain;charset=UTF-8",0);
-  fl_Xatextplain        = XInternAtom(d, "text/plain",          0);
-  fl_XaText             = XInternAtom(d, "TEXT",                0);
-  fl_XaCompoundText     = XInternAtom(d, "COMPOUND_TEXT",       0);
-  fl_XaUtf8String       = XInternAtom(d, "UTF8_STRING",         0);
-  fl_XaTextUriList      = XInternAtom(d, "text/uri-list",       0);
-  fl_NET_WM_NAME        = XInternAtom(d, "_NET_WM_NAME",        0);
-  fl_NET_WM_ICON_NAME   = XInternAtom(d, "_NET_WM_ICON_NAME",   0);
-  fl_NET_SUPPORTING_WM_CHECK = XInternAtom(d, "_NET_SUPPORTING_WM_CHECK", 0);
-  fl_NET_WM_STATE       = XInternAtom(d, "_NET_WM_STATE",       0);
-  fl_NET_WM_STATE_FULLSCREEN = XInternAtom(d, "_NET_WM_STATE_FULLSCREEN", 0);
-  fl_NET_WM_ICON        = XInternAtom(d, "_NET_WM_ICON",        0);
-
-  if (sizeof(Atom) < 4)
-    atom_bits = sizeof(Atom) * 8;
-
-  Fl::add_fd(ConnectionNumber(d), POLLIN, fd_callback);
-
-  fl_screen = DefaultScreen(d);
-
-  fl_message_window =
-    XCreateSimpleWindow(d, RootWindow(d,fl_screen), 0,0,1,1,0, 0, 0);
-
-// construct an XVisualInfo that matches the default Visual:
-  XVisualInfo templt; int num;
-  templt.visualid = XVisualIDFromVisual(DefaultVisual(d, fl_screen));
-  fl_visual = XGetVisualInfo(d, VisualIDMask, &templt, &num);
-  fl_colormap = DefaultColormap(d, fl_screen);
-  fl_init_xim();
-
-#if !USE_COLORMAP
-  Fl::visual(FL_RGB);
-#endif
-
-#ifdef HAVE_XFIXES
-  int error_base;
-  if (XFixesQueryExtension(d, &xfixes_event_base, &error_base))
-    have_xfixes = true;
-  else
-    have_xfixes = false;
-#endif
-}
-
-void fl_close_display() {
-  Fl::remove_fd(ConnectionNumber(fl_display));
-  XCloseDisplay(fl_display);
-}
-
-static int fl_workarea_xywh[4] = { -1, -1, -1, -1 };
-
-static void fl_init_workarea() {
-  fl_open_display();
-
-  Atom _NET_WORKAREA = XInternAtom(fl_display, "_NET_WORKAREA", 0);
-  Atom actual;
-  unsigned long count, remaining;
-  int format;
-  unsigned *xywh;
-
-  if (XGetWindowProperty(fl_display, RootWindow(fl_display, fl_screen),
-                         _NET_WORKAREA, 0, 4 * sizeof(unsigned), False,
-                         XA_CARDINAL, &actual, &format, &count, &remaining,
-                         (unsigned char **)&xywh) || !xywh || !xywh[2] ||
-                         !xywh[3])
-  {
-    fl_workarea_xywh[0] = 0;
-    fl_workarea_xywh[1] = 0;
-    fl_workarea_xywh[2] = DisplayWidth(fl_display, fl_screen);
-    fl_workarea_xywh[3] = DisplayHeight(fl_display, fl_screen);
-  }
-  else
-  {
-    fl_workarea_xywh[0] = (int)xywh[0];
-    fl_workarea_xywh[1] = (int)xywh[1];
-    fl_workarea_xywh[2] = (int)xywh[2];
-    fl_workarea_xywh[3] = (int)xywh[3];
-    XFree(xywh);
-  }
-}
-
-int Fl::x() {
-  if (fl_workarea_xywh[0] < 0) fl_init_workarea();
-  return fl_workarea_xywh[0];
-}
-
-int Fl::y() {
-  if (fl_workarea_xywh[0] < 0) fl_init_workarea();
-  return fl_workarea_xywh[1];
-}
-
-int Fl::w() {
-  if (fl_workarea_xywh[0] < 0) fl_init_workarea();
-  return fl_workarea_xywh[2];
-}
-
-int Fl::h() {
-  if (fl_workarea_xywh[0] < 0) fl_init_workarea();
-  return fl_workarea_xywh[3];
-}
-
-void Fl::get_mouse(int &xx, int &yy) {
-  fl_open_display();
-  Window root = RootWindow(fl_display, fl_screen);
-  Window c; int mx,my,cx,cy; unsigned int mask;
-  XQueryPointer(fl_display,root,&root,&c,&mx,&my,&cx,&cy,&mask);
-  xx = mx;
-  yy = my;
-}
-
-////////////////////////////////////////////////////////////////
-// Code used for paste and DnD into the program:
-
-Fl_Widget *fl_selection_requestor;
-char *fl_selection_buffer[2];
-int fl_selection_length[2];
-int fl_selection_buffer_length[2];
-char fl_i_own_selection[2] = {0,0};
-
-// Call this when a "paste" operation happens:
-void Fl::paste(Fl_Widget &receiver, int clipboard) {
-  if (fl_i_own_selection[clipboard]) {
-    // We already have it, do it quickly without window server.
-    // Notice that the text is clobbered if set_selection is
-    // called in response to FL_PASTE!
-    Fl::e_text = fl_selection_buffer[clipboard];
-    Fl::e_length = fl_selection_length[clipboard];
-    if (!Fl::e_text) Fl::e_text = (char *)"";
-    receiver.handle(FL_PASTE);
-    return;
-  }
-  // otherwise get the window server to return it:
-  fl_selection_requestor = &receiver;
-  Atom property = clipboard ? CLIPBOARD : XA_PRIMARY;
-  XConvertSelection(fl_display, property, TARGETS, property,
-                    fl_xid(Fl::first_window()), fl_event_time);
-}
-
-Window fl_dnd_source_window;
-Atom *fl_dnd_source_types; // null-terminated list of data types being supplied
-Atom fl_dnd_type;
-Atom fl_dnd_source_action;
-Atom fl_dnd_action;
-
-void fl_sendClientMessage(Window window, Atom message,
-                                 unsigned long d0,
-                                 unsigned long d1=0,
-                                 unsigned long d2=0,
-                                 unsigned long d3=0,
-                                 unsigned long d4=0)
-{
-  XEvent e;
-  e.xany.type = ClientMessage;
-  e.xany.window = window;
-  e.xclient.message_type = message;
-  e.xclient.format = 32;
-  e.xclient.data.l[0] = (long)d0;
-  e.xclient.data.l[1] = (long)d1;
-  e.xclient.data.l[2] = (long)d2;
-  e.xclient.data.l[3] = (long)d3;
-  e.xclient.data.l[4] = (long)d4;
-  XSendEvent(fl_display, window, 0, 0, &e);
-}
-
-
-/* 
-   Get window property value (32 bit format) 
-   Returns zero on success, -1 on error
-*/
-static int get_xwinprop(Window wnd, Atom prop, long max_length,
-                        unsigned long *nitems, unsigned long **data) {
-  Atom actual;
-  int format;
-  unsigned long bytes_after;
-  
-  if (Success != XGetWindowProperty(fl_display, wnd, prop, 0, max_length, 
-                                    False, AnyPropertyType, &actual, &format, 
-                                    nitems, &bytes_after, (unsigned char**)data)) {
-    return -1;
-  }
-
-  if (actual == None || format != 32) {
-    return -1;
-  }
-
-  return 0;
-}
-
-
-////////////////////////////////////////////////////////////////
-// Code for copying to clipboard and DnD out of the program:
-
-void Fl::copy(const char *stuff, int len, int clipboard) {
-  if (!stuff || len<0) return;
-  if (len+1 > fl_selection_buffer_length[clipboard]) {
-    delete[] fl_selection_buffer[clipboard];
-    fl_selection_buffer[clipboard] = new char[len+100];
-    fl_selection_buffer_length[clipboard] = len+100;
-  }
-  memcpy(fl_selection_buffer[clipboard], stuff, len);
-  fl_selection_buffer[clipboard][len] = 0; // needed for direct paste
-  fl_selection_length[clipboard] = len;
-  fl_i_own_selection[clipboard] = 1;
-  Atom property = clipboard ? CLIPBOARD : XA_PRIMARY;
-  XSetSelectionOwner(fl_display, property, fl_message_window, fl_event_time);
-}
-
-////////////////////////////////////////////////////////////////
-// Code for tracking clipboard changes:
-
-static Time primary_timestamp = -1;
-static Time clipboard_timestamp = -1;
-
-extern bool fl_clipboard_notify_empty(void);
-extern void fl_trigger_clipboard_notify(int source);
-
-static void poll_clipboard_owner(void) {
-  Window xid;
-
-  // No polling needed with Xfixes
-  if (have_xfixes)
-    return;
-
-  // No one is interested, so no point polling
-  if (fl_clipboard_notify_empty())
-    return;
-
-  // We need a window for this to work
-  if (!Fl::first_window())
-    return;
-  xid = fl_xid(Fl::first_window());
-  if (!xid)
-    return;
-
-  // Request an update of the selection time for both the primary and
-  // clipboard selections. Magic continues when we get a SelectionNotify.
-  if (!fl_i_own_selection[0])
-    XConvertSelection(fl_display, XA_PRIMARY, TIMESTAMP, PRIMARY_TIMESTAMP,
-                      xid, fl_event_time);
-  if (!fl_i_own_selection[1])
-    XConvertSelection(fl_display, CLIPBOARD, TIMESTAMP, CLIPBOARD_TIMESTAMP,
-                      xid, fl_event_time);
-}
-
-static void clipboard_timeout(void *data)
-{
-  // No one is interested, so stop polling
-  if (fl_clipboard_notify_empty())
-    return;
-
-  poll_clipboard_owner();
-
-  Fl::repeat_timeout(0.5, clipboard_timeout);
-}
-
-static void handle_clipboard_timestamp(int clipboard, Time time)
-{
-  Time *timestamp;
-
-  timestamp = clipboard ? &clipboard_timestamp : &primary_timestamp;
-
-  if (!have_xfixes) {
-    // Initial scan, just store the value
-    if (*timestamp == (Time)-1) {
-      *timestamp = time;
-      return;
-    }
-  }
-
-  // Same selection
-  if (time == *timestamp)
-    return;
-
-  *timestamp = time;
-
-  // Something happened! Let's tell someone!
-  fl_trigger_clipboard_notify(clipboard);
-}
-
-void fl_clipboard_notify_change() {
-  // Reset the timestamps if we've going idle so that you don't
-  // get a bogus immediate trigger next time they're activated.
-  if (fl_clipboard_notify_empty()) {
-    primary_timestamp = -1;
-    clipboard_timestamp = -1;
-  } else {
-    if (!have_xfixes) {
-      poll_clipboard_owner();
-
-      if (!Fl::has_timeout(clipboard_timeout))
-        Fl::add_timeout(0.5, clipboard_timeout);
-    }
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-const XEvent* fl_xevent; // the current x event
-ulong fl_event_time; // the last timestamp from an x event
-
-char fl_key_vector[32]; // used by Fl::get_key()
-
-// Record event mouse position and state from an XEvent:
-
-static int px, py;
-static ulong ptime;
-
-static void set_event_xy() {
-#  if CONSOLIDATE_MOTION
-  send_motion = 0;
-#  endif
-  Fl::e_x_root  = fl_xevent->xbutton.x_root;
-  Fl::e_x       = fl_xevent->xbutton.x;
-  Fl::e_y_root  = fl_xevent->xbutton.y_root;
-  Fl::e_y       = fl_xevent->xbutton.y;
-  Fl::e_state   = fl_xevent->xbutton.state << 16;
-  fl_event_time = fl_xevent->xbutton.time;
-#  ifdef __sgi
-  // get the meta key off PC keyboards:
-  if (fl_key_vector[18]&0x18) Fl::e_state |= FL_META;
-#  endif
-  // turn off is_click if enough time or mouse movement has passed:
-  if (abs(Fl::e_x_root-px)+abs(Fl::e_y_root-py) > 3 ||
-      fl_event_time >= ptime+1000)
-    Fl::e_is_click = 0;
-}
-
-// if this is same event as last && is_click, increment click count:
-static inline void checkdouble() {
-  if (Fl::e_is_click == Fl::e_keysym)
-    Fl::e_clicks++;
-  else {
-    Fl::e_clicks = 0;
-    Fl::e_is_click = Fl::e_keysym;
-  }
-  px = Fl::e_x_root;
-  py = Fl::e_y_root;
-  ptime = fl_event_time;
-}
-
-static Fl_Window* resize_bug_fix;
-
-////////////////////////////////////////////////////////////////
-
-static char unknown[] = "<unknown>";
-const int unknown_len = 10;
-
-extern "C" {
-
-static int xerror = 0;
-
-static int ignoreXEvents(Display *display, XErrorEvent *event) {
-  xerror = 1;
-  return 0;
-}
-
-static XErrorHandler catchXExceptions() {
-  xerror = 0;
-  return ignoreXEvents;
-}
-
-static int wasXExceptionRaised() {
-  return xerror;
-}
-
-}
-
-
-int fl_handle(const XEvent& thisevent)
-{
-  XEvent xevent = thisevent;
-  fl_xevent = &thisevent;
-  Window xid = xevent.xany.window;
-
-  if (fl_xim_ic && xevent.type == DestroyNotify &&
-        xid != fl_xim_win && !fl_find(xid))
-  {
-    XIM xim_im;
-    xim_im = XOpenIM(fl_display, NULL, NULL, NULL);
-    if (!xim_im) {
-      /*  XIM server has crashed */
-      XSetLocaleModifiers("@im=");
-      fl_xim_im = NULL;
-      fl_init_xim();
-    } else {
-      XCloseIM(xim_im);	// see STR 2185 for comment
-    }
-    return 0;
-  }
-
-  if (fl_xim_ic) {
-    if (XFilterEvent((XEvent *)&xevent, 0))
-      return 1;
-  }
-
-  switch (xevent.type) {
-
-  case KeymapNotify:
-    memcpy(fl_key_vector, xevent.xkeymap.key_vector, 32);
-    return 0;
-
-  case MappingNotify:
-    XRefreshKeyboardMapping((XMappingEvent*)&xevent.xmapping);
-    return 0;
-
-  case SelectionNotify: {
-    static unsigned char* buffer = 0;
-    if (buffer) {XFree(buffer); buffer = 0;}
-    long bytesread = 0;
-    if (fl_xevent->xselection.property) for (;;) {
-      // The Xdnd code pastes 64K chunks together, possibly to avoid
-      // bugs in X servers, or maybe to avoid an extra round-trip to
-      // get the property length.  I copy this here:
-      Atom actual; int format; unsigned long count, remaining;
-      unsigned char* portion = NULL;
-      if (XGetWindowProperty(fl_display,
-                             fl_xevent->xselection.requestor,
-                             fl_xevent->xselection.property,
-                             bytesread/4, 65536, 1, 0,
-                             &actual, &format, &count, &remaining,
-                             &portion)) break; // quit on error
-
-      if ((fl_xevent->xselection.property == PRIMARY_TIMESTAMP) ||
-          (fl_xevent->xselection.property == CLIPBOARD_TIMESTAMP)) {
-        if (portion && format == 32 && count == 1) {
-          Time t = *(unsigned int*)portion;
-          if (fl_xevent->xselection.property == CLIPBOARD_TIMESTAMP)
-            handle_clipboard_timestamp(1, t);
-          else
-            handle_clipboard_timestamp(0, t);
-        }
-        return true;
-      }
-
-      if (actual == TARGETS || actual == XA_ATOM) {
-	Atom type = XA_STRING;
-	for (unsigned i = 0; i<count; i++) {
-	  Atom t = ((Atom*)portion)[i];
-	    if (t == fl_Xatextplainutf ||
-		  t == fl_Xatextplain ||
-		  t == fl_XaUtf8String) {type = t; break;}
-	    // rest are only used if no utf-8 available:
-	    if (t == fl_XaText ||
-		  t == fl_XaTextUriList ||
-		  t == fl_XaCompoundText) type = t;
-	}
-	XFree(portion);
-	Atom property = xevent.xselection.property;
-	XConvertSelection(fl_display, property, type, property,
-	      fl_xid(Fl::first_window()),
-	      fl_event_time);
-	return true;
-      }
-      // Make sure we got something sane...
-      if ((portion == NULL) || (format != 8) || (count == 0)) {
-	if (portion) XFree(portion);
-        return true;
-	}
-      buffer = (unsigned char*)realloc(buffer, bytesread+count+remaining+1);
-      memcpy(buffer+bytesread, portion, count);
-      XFree(portion);
-      bytesread += count;
-      // Cannot trust data to be null terminated
-      buffer[bytesread] = '\0';
-      if (!remaining) break;
-    }
-    if (buffer) {
-      buffer[bytesread] = 0;
-      convert_crlf(buffer, bytesread);
-    }
-
-    if (!fl_selection_requestor) return 0;
-
-    Fl::e_text = buffer ? (char*)buffer : (char *)"";
-    Fl::e_length = bytesread;
-    int old_event = Fl::e_number;
-    fl_selection_requestor->handle(Fl::e_number = FL_PASTE);
-    Fl::e_number = old_event;
-    // Detect if this paste is due to Xdnd by the property name (I use
-    // XA_SECONDARY for that) and send an XdndFinished message. It is not
-    // clear if this has to be delayed until now or if it can be done
-    // immediatly after calling XConvertSelection.
-    if (fl_xevent->xselection.property == XA_SECONDARY &&
-        fl_dnd_source_window) {
-      fl_sendClientMessage(fl_dnd_source_window, fl_XdndFinished,
-                           fl_xevent->xselection.requestor);
-      fl_dnd_source_window = 0; // don't send a second time
-    }
-    return 1;}
-
-  case SelectionClear: {
-    int clipboard = fl_xevent->xselectionclear.selection == CLIPBOARD;
-    fl_i_own_selection[clipboard] = 0;
-    poll_clipboard_owner();
-    return 1;}
-
-  case SelectionRequest: {
-    XSelectionEvent e;
-    e.type = SelectionNotify;
-    e.requestor = fl_xevent->xselectionrequest.requestor;
-    e.selection = fl_xevent->xselectionrequest.selection;
-    int clipboard = e.selection == CLIPBOARD;
-    e.target = fl_xevent->xselectionrequest.target;
-    e.time = fl_xevent->xselectionrequest.time;
-    e.property = fl_xevent->xselectionrequest.property;
-    if (e.target == TARGETS) {
-      Atom a[3] = {fl_XaUtf8String, XA_STRING, fl_XaText};
-      XChangeProperty(fl_display, e.requestor, e.property,
-                      XA_ATOM, atom_bits, 0, (unsigned char*)a, 3);
-    } else if (/*e.target == XA_STRING &&*/ fl_selection_length[clipboard]) {
-    if (e.target == fl_XaUtf8String ||
-	     e.target == XA_STRING ||
-	     e.target == fl_XaCompoundText ||
-	     e.target == fl_XaText ||
-	     e.target == fl_Xatextplain ||
-	     e.target == fl_Xatextplainutf) {
-	// clobber the target type, this seems to make some applications
-	// behave that insist on asking for XA_TEXT instead of UTF8_STRING
-	// Does not change XA_STRING as that breaks xclipboard.
-	if (e.target != XA_STRING) e.target = fl_XaUtf8String;
-	XChangeProperty(fl_display, e.requestor, e.property,
-			 e.target, 8, 0,
-			 (unsigned char *)fl_selection_buffer[clipboard],
-			 fl_selection_length[clipboard]);
-      }
-    } else {
-//    char* x = XGetAtomName(fl_display,e.target);
-//    fprintf(stderr,"selection request of %s\n",x);
-//    XFree(x);
-      e.property = 0;
-    }
-    XSendEvent(fl_display, e.requestor, 0, 0, (XEvent *)&e);}
-    return 1;
-
-  // events where interesting window id is in a different place:
-  case CirculateNotify:
-  case CirculateRequest:
-  case ConfigureNotify:
-  case ConfigureRequest:
-  case CreateNotify:
-  case DestroyNotify:
-  case GravityNotify:
-  case MapNotify:
-  case MapRequest:
-  case ReparentNotify:
-  case UnmapNotify:
-    xid = xevent.xmaprequest.window;
-    break;
-  }
-
-  int event = 0;
-  Fl_Window* window = fl_find(xid);
-
-  if (window) switch (xevent.type) {
-
-    case DestroyNotify: { // an X11 window was closed externally from the program
-      Fl::handle(FL_CLOSE, window);
-      Fl_X* X = Fl_X::i(window);
-      if (X) { // indicates the FLTK window was not closed
-	X->xid = (Window)0; // indicates the X11 window was already destroyed
-	window->hide();
-	int oldx = window->x(), oldy = window->y();
-	window->position(0, 0);
-	window->position(oldx, oldy);
-	window->show(); // recreate the X11 window in support of the FLTK window
-	}
-      return 1;
-    }
-  case ClientMessage: {
-    Atom message = fl_xevent->xclient.message_type;
-    const long* data = fl_xevent->xclient.data.l;
-    if ((Atom)(data[0]) == WM_DELETE_WINDOW) {
-      event = FL_CLOSE;
-    } else if (message == fl_XdndEnter) {
-      fl_xmousewin = window;
-      in_a_window = true;
-      fl_dnd_source_window = data[0];
-      // version number is data[1]>>24
-//      printf("XdndEnter, version %ld\n", data[1] >> 24);
-      if (data[1]&1) {
-        // get list of data types:
-        Atom actual; int format; unsigned long count, remaining;
-        unsigned char *buffer = 0;
-        XGetWindowProperty(fl_display, fl_dnd_source_window, fl_XdndTypeList,
-                           0, 0x8000000L, False, XA_ATOM, &actual, &format,
-                           &count, &remaining, &buffer);
-        if (actual != XA_ATOM || format != 32 || count<4 || !buffer)
-          goto FAILED;
-        delete [] fl_dnd_source_types;
-        fl_dnd_source_types = new Atom[count+1];
-        for (unsigned i = 0; i < count; i++) {
-          fl_dnd_source_types[i] = ((Atom*)buffer)[i];
-        }
-        fl_dnd_source_types[count] = 0;
-      } else {
-      FAILED:
-        // less than four data types, or if the above messes up:
-        if (!fl_dnd_source_types) fl_dnd_source_types = new Atom[4];
-        fl_dnd_source_types[0] = data[2];
-        fl_dnd_source_types[1] = data[3];
-        fl_dnd_source_types[2] = data[4];
-        fl_dnd_source_types[3] = 0;
-      }
-
-      // Loop through the source types and pick the first text type...
-      int i;
-
-      for (i = 0; fl_dnd_source_types[i]; i ++)
-      {
-//        printf("fl_dnd_source_types[%d] = %ld (%s)\n", i,
-//             fl_dnd_source_types[i],
-//             XGetAtomName(fl_display, fl_dnd_source_types[i]));
-
-        if (!strncmp(XGetAtomName(fl_display, fl_dnd_source_types[i]),
-                     "text/", 5))
-          break;
-      }
-
-      if (fl_dnd_source_types[i])
-        fl_dnd_type = fl_dnd_source_types[i];
-      else
-        fl_dnd_type = fl_dnd_source_types[0];
-
-      event = FL_DND_ENTER;
-      Fl::e_text = unknown;
-      Fl::e_length = unknown_len;
-      break;
-
-    } else if (message == fl_XdndPosition) {
-      fl_xmousewin = window;
-      in_a_window = true;
-      fl_dnd_source_window = data[0];
-      Fl::e_x_root = data[2]>>16;
-      Fl::e_y_root = data[2]&0xFFFF;
-      if (window) {
-        Fl::e_x = Fl::e_x_root-window->x();
-        Fl::e_y = Fl::e_y_root-window->y();
-      }
-      fl_event_time = data[3];
-      fl_dnd_source_action = data[4];
-      fl_dnd_action = fl_XdndActionCopy;
-      Fl::e_text = unknown;
-      Fl::e_length = unknown_len;
-      int accept = Fl::handle(FL_DND_DRAG, window);
-      fl_sendClientMessage(data[0], fl_XdndStatus,
-                           fl_xevent->xclient.window,
-                           accept ? 1 : 0,
-                           0, // used for xy rectangle to not send position inside
-                           0, // used for width+height of rectangle
-                           accept ? fl_dnd_action : None);
-      return 1;
-
-    } else if (message == fl_XdndLeave) {
-      fl_dnd_source_window = 0; // don't send a finished message to it
-      event = FL_DND_LEAVE;
-      Fl::e_text = unknown;
-      Fl::e_length = unknown_len;
-      break;
-
-    } else if (message == fl_XdndDrop) {
-      fl_xmousewin = window;
-      in_a_window = true;
-      fl_dnd_source_window = data[0];
-      fl_event_time = data[2];
-      Window to_window = fl_xevent->xclient.window;
-      Fl::e_text = unknown;
-      Fl::e_length = unknown_len;
-      if (Fl::handle(FL_DND_RELEASE, window)) {
-        fl_selection_requestor = Fl::belowmouse();
-        XConvertSelection(fl_display, fl_XdndSelection,
-                          fl_dnd_type, XA_SECONDARY,
-                          to_window, fl_event_time);
-      } else {
-        // Send the finished message if I refuse the drop.
-        // It is not clear whether I can just send finished always,
-        // or if I have to wait for the SelectionNotify event as the
-        // code is currently doing.
-        fl_sendClientMessage(fl_dnd_source_window, fl_XdndFinished, to_window);
-        fl_dnd_source_window = 0;
-      }
-      return 1;
-
-    }
-    break;}
-
-  case UnmapNotify:
-    event = FL_HIDE;
-    break;
-
-  case Expose:
-    Fl_X::i(window)->wait_for_expose = 0;
-#  if 0
-    // try to keep windows on top even if WM_TRANSIENT_FOR does not work:
-    // opaque move/resize window managers do not like this, so I disabled it.
-    if (Fl::first_window()->non_modal() && window != Fl::first_window())
-      Fl::first_window()->show();
-#  endif
-
-  case GraphicsExpose:
-    window->damage(FL_DAMAGE_EXPOSE, xevent.xexpose.x, xevent.xexpose.y,
-                   xevent.xexpose.width, xevent.xexpose.height);
-    return 1;
-
-  case FocusIn:
-    if (fl_xim_ic) XSetICFocus(fl_xim_ic);
-    event = FL_FOCUS;
-    // If the user has toggled from another application to this one,
-    // then it's a good time to check for clipboard changes.
-    poll_clipboard_owner();
-    break;
-
-  case FocusOut:
-    if (fl_xim_ic) XUnsetICFocus(fl_xim_ic);
-    event = FL_UNFOCUS;
-    break;
-
-  case KeyPress:
-  case KeyRelease: {
-  KEYPRESS:
-    int keycode = xevent.xkey.keycode;
-    fl_key_vector[keycode/8] |= (1 << (keycode%8));
-    static char *buffer = NULL;
-    static int buffer_len = 0;
-    int len;
-    KeySym keysym;
-    if (buffer_len == 0) {
-      buffer_len = 4096;
-      buffer = (char*) malloc(buffer_len);
-    }
-    if (xevent.type == KeyPress) {
-      event = FL_KEYDOWN;
-      int len = 0;
-
-      if (fl_xim_ic) {
-	Status status;
-	len = XUtf8LookupString(fl_xim_ic, (XKeyPressedEvent *)&xevent.xkey,
-			     buffer, buffer_len, &keysym, &status);
-
-	while (status == XBufferOverflow && buffer_len < 50000) {
-	  buffer_len = buffer_len * 5 + 1;
-	  buffer = (char*)realloc(buffer, buffer_len);
-	  len = XUtf8LookupString(fl_xim_ic, (XKeyPressedEvent *)&xevent.xkey,
-			     buffer, buffer_len, &keysym, &status);
-	}
-	keysym = XKeycodeToKeysym(fl_display, keycode, 0);
-      } else {
-        //static XComposeStatus compose;
-        len = XLookupString((XKeyEvent*)&(xevent.xkey),
-                             buffer, buffer_len, &keysym, 0/*&compose*/);
-        // XLookupString() is only defined to return Latin-1 (although it
-        // often gives you more). To be safe, use our own lookups based on
-        // keysym.
-        len = fl_utf8encode(XKeysymToUcs(keysym), buffer);
-        if (len < 1)
-          len = 1;
-        // ignore all effects of shift on the keysyms, which makes it a lot
-        // easier to program shortcuts and is Windoze-compatable:
-        keysym = XKeycodeToKeysym(fl_display, keycode, 0);
-      }
-      // MRS: Can't use Fl::event_state(FL_CTRL) since the state is not
-      //      set until set_event_xy() is called later...
-      if ((xevent.xkey.state & ControlMask) && keysym == '-') buffer[0] = 0x1f; // ^_
-      buffer[len] = 0;
-      Fl::e_text = buffer;
-      Fl::e_length = len;
-    } else {
-      // Stupid X sends fake key-up events when a repeating key is held
-      // down, probably due to some back compatibility problem. Fortunately
-      // we can detect this because the repeating KeyPress event is in
-      // the queue, get it and execute it instead:
-
-      // Bool XkbSetDetectableAutorepeat ( display, detectable, supported_rtrn )
-      // Display * display ;
-      // Bool detectable ;
-      // Bool * supported_rtrn ;
-      // ...would be the easy way to corrct this isuue. Unfortunatly, this call is also
-      // broken on many Unix distros including Ubuntu and Solaris (as of Dec 2009)
-
-      // Bogus KeyUp events are generated by repeated KeyDown events. One
-      // neccessary condition is an identical key event pending right after
-      // the bogus KeyUp.
-      // The new code introduced Dec 2009 differs in that it only check the very
-      // next event in the queue, not the entire queue of events.
-      // This function wrongly detects a repeat key if a software keyboard
-      // sends a burst of events containing two consecutive equal keys. However,
-      // in every non-gaming situation, this is no problem because both KeyPress
-      // events will cause the expected behavior.
-      XEvent peekevent;
-      if (XPending(fl_display)) {
-        XPeekEvent(fl_display, &peekevent);
-        if (   (peekevent.type == KeyPress) // must be a KeyPress event
-            && (peekevent.xkey.keycode == xevent.xkey.keycode) // must be the same key
-            && (peekevent.xkey.time == xevent.xkey.time) // must be sent at the exact same time
-            ) {
-          XNextEvent(fl_display, &xevent);
-          goto KEYPRESS;
-        }
-      }
-
-      event = FL_KEYUP;
-      fl_key_vector[keycode/8] &= ~(1 << (keycode%8));
-      // keyup events just get the unshifted keysym:
-      keysym = XKeycodeToKeysym(fl_display, keycode, 0);
-    }
-#  ifdef __sgi
-    // You can plug a microsoft keyboard into an sgi but the extra shift
-    // keys are not translated.  Make them translate like XFree86 does:
-    if (!keysym) switch(keycode) {
-    case 147: keysym = FL_Meta_L; break;
-    case 148: keysym = FL_Meta_R; break;
-    case 149: keysym = FL_Menu; break;
-    }
-#  endif
-#  if BACKSPACE_HACK
-    // Attempt to fix keyboards that send "delete" for the key in the
-    // upper-right corner of the main keyboard.  But it appears that
-    // very few of these remain?
-    static int got_backspace = 0;
-    if (!got_backspace) {
-      if (keysym == FL_Delete) keysym = FL_BackSpace;
-      else if (keysym == FL_BackSpace) got_backspace = 1;
-    }
-#  endif
-    // For the first few years, there wasn't a good consensus on what the
-    // Windows keys should be mapped to for X11. So we need to help out a
-    // bit and map all variants to the same FLTK key...
-    switch (keysym) {
-	case XK_Meta_L:
-	case XK_Hyper_L:
-	case XK_Super_L:
-	  keysym = FL_Meta_L;
-	  break;
-	case XK_Meta_R:
-	case XK_Hyper_R:
-	case XK_Super_R:
-	  keysym = FL_Meta_R;
-	  break;
-      }
-    // Convert the multimedia keys to safer, portable values
-    switch (keysym) { // XF names come from X11/XF86keysym.h
-      case 0x1008FF11: // XF86XK_AudioLowerVolume:
-	keysym = FL_Volume_Down;
-	break;
-      case 0x1008FF12: // XF86XK_AudioMute:
-	keysym = FL_Volume_Mute;
-	break;
-      case 0x1008FF13: // XF86XK_AudioRaiseVolume:
-	keysym = FL_Volume_Up;
-	break;
-      case 0x1008FF14: // XF86XK_AudioPlay:
-	keysym = FL_Media_Play;
-	break;
-      case 0x1008FF15: // XF86XK_AudioStop:
-	keysym = FL_Media_Stop;
-	break;
-      case 0x1008FF16: // XF86XK_AudioPrev:
-	keysym = FL_Media_Prev;
-	break;
-      case 0x1008FF17: // XF86XK_AudioNext:
-	keysym = FL_Media_Next;
-	break;
-      case 0x1008FF18: // XF86XK_HomePage:
-	keysym = FL_Home_Page;
-	break;
-      case 0x1008FF19: // XF86XK_Mail:
-	keysym = FL_Mail;
-	break;
-      case 0x1008FF1B: // XF86XK_Search:
-	keysym = FL_Search;
-	break;
-      case 0x1008FF26: // XF86XK_Back:
-	keysym = FL_Back;
-	break;
-      case 0x1008FF27: // XF86XK_Forward:
-	keysym = FL_Forward;
-	break;
-      case 0x1008FF28: // XF86XK_Stop:
-	keysym = FL_Stop;
-	break;
-      case 0x1008FF29: // XF86XK_Refresh:
-	keysym = FL_Refresh;
-	break;
-      case 0x1008FF2F: // XF86XK_Sleep:
-	keysym = FL_Sleep;
-	break;
-      case 0x1008FF30: // XF86XK_Favorites:
-	keysym = FL_Favorites;
-	break;
-    }
-    // We have to get rid of the XK_KP_function keys, because they are
-    // not produced on Windoze and thus case statements tend not to check
-    // for them.  There are 15 of these in the range 0xff91 ... 0xff9f
-    if (keysym >= 0xff91 && keysym <= 0xff9f) {
-      // Map keypad keysym to character or keysym depending on
-      // numlock state...
-      unsigned long keysym1 = XKeycodeToKeysym(fl_display, keycode, 1);
-      if (keysym1 <= 0x7f || (keysym1 > 0xff9f && keysym1 <= FL_KP_Last))
-        Fl::e_original_keysym = (int)(keysym1 | FL_KP);
-      if ((xevent.xkey.state & Mod2Mask) &&
-          (keysym1 <= 0x7f || (keysym1 > 0xff9f && keysym1 <= FL_KP_Last))) {
-        // Store ASCII numeric keypad value...
-        keysym = keysym1 | FL_KP;
-        buffer[0] = char(keysym1) & 0x7F;
-        len = 1;
-      } else {
-        // Map keypad to special key...
-        static const unsigned short table[15] = {
-          FL_F+1, FL_F+2, FL_F+3, FL_F+4,
-          FL_Home, FL_Left, FL_Up, FL_Right,
-          FL_Down, FL_Page_Up, FL_Page_Down, FL_End,
-          0xff0b/*XK_Clear*/, FL_Insert, FL_Delete};
-        keysym = table[keysym-0xff91];
-      }
-    } else {
-      // Store this so we can later know if the KP was used
-      Fl::e_original_keysym = (int)keysym;
-    }
-    Fl::e_keysym = int(keysym);
-
-    // replace XK_ISO_Left_Tab (Shift-TAB) with FL_Tab (modifier flags are set correctly by X11)
-    if (Fl::e_keysym == 0xfe20) Fl::e_keysym = FL_Tab;
-
-    set_event_xy();
-    Fl::e_is_click = 0;
-    break;}
-
-  case ButtonPress:
-    Fl::e_keysym = FL_Button + xevent.xbutton.button;
-    set_event_xy();
-    Fl::e_dx = Fl::e_dy = 0;
-    if (xevent.xbutton.button == Button4) {
-      Fl::e_dy = -1; // Up
-      event = FL_MOUSEWHEEL;
-    } else if (xevent.xbutton.button == Button5) {
-      Fl::e_dy = +1; // Down
-      event = FL_MOUSEWHEEL;
-    } else if (xevent.xbutton.button == 6) {
-      Fl::e_dx = -1; // Left
-      event = FL_MOUSEWHEEL;
-    } else if (xevent.xbutton.button == 7) {
-      Fl::e_dx = +1; // Right
-      event = FL_MOUSEWHEEL;
-    } else {
-      Fl::e_state |= (FL_BUTTON1 << (xevent.xbutton.button-1));
-      event = FL_PUSH;
-      checkdouble();
-    }
-
-    fl_xmousewin = window;
-    in_a_window = true;
-    break;
-
-  case PropertyNotify:
-    if (xevent.xproperty.atom == fl_NET_WM_STATE) {
-      int fullscreen_state = 0;
-      if (xevent.xproperty.state != PropertyDelete) {
-        unsigned long nitems;
-        unsigned long *words = 0;
-        if (0 == get_xwinprop(xid, fl_NET_WM_STATE, 64, &nitems, &words) ) { 
-          for (unsigned long item = 0; item < nitems; item++) {
-            if (words[item] == fl_NET_WM_STATE_FULLSCREEN) {
-              fullscreen_state = 1;
-            }
-          }
-        }
-      }
-      if (window->fullscreen_active() && !fullscreen_state) {
-        window->_clear_fullscreen();
-        event = FL_FULLSCREEN;
-      }
-      if (!window->fullscreen_active() && fullscreen_state) {
-        window->_set_fullscreen();
-        event = FL_FULLSCREEN;
-      }
-    }
-    break;
-
-  case MotionNotify:
-    set_event_xy();
-#  if CONSOLIDATE_MOTION
-    send_motion = fl_xmousewin = window;
-    in_a_window = true;
-    return 0;
-#  else
-    event = FL_MOVE;
-    fl_xmousewin = window;
-    in_a_window = true;
-    break;
-#  endif
-
-  case ButtonRelease:
-    Fl::e_keysym = FL_Button + xevent.xbutton.button;
-    set_event_xy();
-    Fl::e_state &= ~(FL_BUTTON1 << (xevent.xbutton.button-1));
-    if (xevent.xbutton.button == Button4 ||
-        xevent.xbutton.button == Button5) return 0;
-    event = FL_RELEASE;
-
-    fl_xmousewin = window;
-    in_a_window = true;
-    break;
-
-  case EnterNotify:
-    if (xevent.xcrossing.detail == NotifyInferior) break;
-    // XInstallColormap(fl_display, Fl_X::i(window)->colormap);
-    set_event_xy();
-    Fl::e_state = xevent.xcrossing.state << 16;
-    event = FL_ENTER;
-
-    fl_xmousewin = window;
-    in_a_window = true;
-    { XIMStyles *xim_styles = NULL;
-      if(!fl_xim_im || XGetIMValues(fl_xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL)) {
-	fl_init_xim();
-      }
-      if (xim_styles) XFree(xim_styles);
-    }
-    break;
-
-  case LeaveNotify:
-    if (xevent.xcrossing.detail == NotifyInferior) break;
-    set_event_xy();
-    Fl::e_state = xevent.xcrossing.state << 16;
-    fl_xmousewin = 0;
-    in_a_window = false; // make do_queued_events produce FL_LEAVE event
-    return 0;
-
-  // We cannot rely on the x,y position in the configure notify event.
-  // I now think this is an unavoidable problem with X: it is impossible
-  // for a window manager to prevent the "real" notify event from being
-  // sent when it resizes the contents, even though it can send an
-  // artificial event with the correct position afterwards (and some
-  // window managers do not send this fake event anyway)
-  // So anyway, do a round trip to find the correct x,y:
-  case MapNotify:
-    event = FL_SHOW;
-
-  case ConfigureNotify: {
-    if (window->parent()) break; // ignore child windows
-
-    // figure out where OS really put window
-    XWindowAttributes actual;
-    XGetWindowAttributes(fl_display, fl_xid(window), &actual);
-    Window cr; int X, Y, W = actual.width, H = actual.height;
-    XTranslateCoordinates(fl_display, fl_xid(window), actual.root,
-                          0, 0, &X, &Y, &cr);
-
-    // tell Fl_Window about it and set flag to prevent echoing:
-    resize_bug_fix = window;
-    window->resize(X, Y, W, H);
-    break; // allow add_handler to do something too
-    }
-
-  case ReparentNotify: {
-    int xpos, ypos;
-    Window junk;
-
-    // on some systems, the ReparentNotify event is not handled as we would expect.
-    XErrorHandler oldHandler = XSetErrorHandler(catchXExceptions());
-
-    //ReparentNotify gives the new position of the window relative to
-    //the new parent. FLTK cares about the position on the root window.
-    XTranslateCoordinates(fl_display, xevent.xreparent.parent,
-                          XRootWindow(fl_display, fl_screen),
-                          xevent.xreparent.x, xevent.xreparent.y,
-                          &xpos, &ypos, &junk);
-    XSetErrorHandler(oldHandler);
-
-    // tell Fl_Window about it and set flag to prevent echoing:
-    if ( !wasXExceptionRaised() ) {
-      resize_bug_fix = window;
-      window->position(xpos, ypos);
-    }
-    break;
-    }
-  }
-
-#ifdef HAVE_XFIXES
-  switch (xevent.type - xfixes_event_base) {
-  case XFixesSelectionNotify: {
-    // Someone feeding us bogus events?
-    if (!have_xfixes)
-      return true;
-
-    XFixesSelectionNotifyEvent *selection_notify = (XFixesSelectionNotifyEvent *)&xevent;
-
-    if ((selection_notify->selection == XA_PRIMARY) && !fl_i_own_selection[0])
-      handle_clipboard_timestamp(0, selection_notify->selection_timestamp);
-    else if ((selection_notify->selection == CLIPBOARD) && !fl_i_own_selection[1])
-      handle_clipboard_timestamp(1, selection_notify->selection_timestamp);
-
-    return true;
-    }
-  }
-#endif
-
-  return Fl::handle(event, window);
-}
-
-////////////////////////////////////////////////////////////////
-
-void Fl_Window::resize(int X,int Y,int W,int H) {
-  int is_a_move = (X != x() || Y != y());
-  int is_a_resize = (W != w() || H != h());
-  int is_a_enlarge = (W > w() || H > h());
-  int resize_from_program = (this != resize_bug_fix);
-  if (!resize_from_program) resize_bug_fix = 0;
-  if (is_a_move && resize_from_program) set_flag(FORCE_POSITION);
-  else if (!is_a_resize && !is_a_move) return;
-  if (is_a_resize) {
-    Fl_Group::resize(X,Y,W,H);
-    if (shown()) {redraw(); if(is_a_enlarge) i->wait_for_expose = 1;}
-  } else {
-    x(X); y(Y);
-  }
-
-  if (resize_from_program && is_a_resize && !resizable()) {
-    size_range(w(), h(), w(), h());
-  }
-
-  if (resize_from_program && shown()) {
-    if (is_a_resize) {
-      if (!resizable()) size_range(w(),h(),w(),h());
-      if (is_a_move) {
-        XMoveResizeWindow(fl_display, i->xid, X, Y, W>0 ? W : 1, H>0 ? H : 1);
-      } else {
-        XResizeWindow(fl_display, i->xid, W>0 ? W : 1, H>0 ? H : 1);
-      }
-    } else
-      XMoveWindow(fl_display, i->xid, X, Y);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-#define _NET_WM_STATE_REMOVE        0  /* remove/unset property */
-#define _NET_WM_STATE_ADD           1  /* add/set property */
-#define _NET_WM_STATE_TOGGLE        2  /* toggle property  */
-
-static void send_wm_state_event(Window wnd, int add, Atom prop) {
-  XEvent e;
-  e.xany.type = ClientMessage;
-  e.xany.window = wnd;
-  e.xclient.message_type = fl_NET_WM_STATE;
-  e.xclient.format = 32;
-  e.xclient.data.l[0] = add ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE;
-  e.xclient.data.l[1] = prop;
-  e.xclient.data.l[2] = 0;
-  e.xclient.data.l[3] = 0;
-  e.xclient.data.l[4] = 0;
-  XSendEvent(fl_display, RootWindow(fl_display, fl_screen),
-             0, SubstructureNotifyMask | SubstructureRedirectMask,
-             &e);
-}
-
-int ewmh_supported() {
-  static int result = -1;
-
-  if (result == -1) {
-    result = 0;
-    unsigned long nitems;
-    unsigned long *words = 0;
-    if (0 == get_xwinprop(XRootWindow(fl_display, fl_screen), fl_NET_SUPPORTING_WM_CHECK, 64,
-                          &nitems, &words) && nitems == 1) {
-      Window child = words[0];
-      if (0 == get_xwinprop(child, fl_NET_SUPPORTING_WM_CHECK, 64,
-                           &nitems, &words) && nitems == 1) {
-        result = (child == words[0]);
-      }
-    }
-  }
-
-  return result;
-}
-
-/* Change an existing window to fullscreen */
-void fullscreen_x(Fl_Window *w) {
-  if (ewmh_supported()) {
-    send_wm_state_event(fl_xid(w), 1, fl_NET_WM_STATE_FULLSCREEN);
-  } else {
-    w->_set_fullscreen();
-    w->hide();
-    w->show();
-    /* We want to grab the window, not a widget, so we cannot use Fl::grab */
-    XGrabKeyboard(fl_display, fl_xid(w), 1, GrabModeAsync, GrabModeAsync, fl_event_time);
-    Fl::handle(FL_FULLSCREEN, w);
-  }
-}
-
-void fullscreen_off_x(Fl_Window *w, int X, int Y, int W, int H) {
-  if (ewmh_supported()) {
-    send_wm_state_event(fl_xid(w), 0, fl_NET_WM_STATE_FULLSCREEN);
-  } else {
-    w->_clear_fullscreen();
-    /* The grab will be lost when the window is destroyed */
-    w->hide();
-    w->resize(X,Y,W,H);
-    w->show();
-    Fl::handle(FL_FULLSCREEN, w);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-// A subclass of Fl_Window may call this to associate an X window it
-// creates with the Fl_Window:
-
-void fl_fix_focus(); // in Fl.cxx
-
-Fl_X* Fl_X::set_xid(Fl_Window* win, Window winxid) {
-  Fl_X* xp = new Fl_X;
-  xp->xid = winxid;
-  xp->other_xid = 0;
-  xp->setwindow(win);
-  xp->next = Fl_X::first;
-  xp->region = 0;
-  xp->wait_for_expose = 1;
-  xp->backbuffer_bad = 1;
-  Fl_X::first = xp;
-  if (win->modal()) {Fl::modal_ = win; fl_fix_focus();}
-  return xp;
-}
-
-// More commonly a subclass calls this, because it hides the really
-// ugly parts of X and sets all the stuff for a window that is set
-// normally.  The global variables like fl_show_iconic are so that
-// subclasses of *that* class may change the behavior...
-
-char fl_show_iconic;    // hack for iconize()
-int fl_background_pixel = -1; // hack to speed up bg box drawing
-int fl_disable_transient_for; // secret method of removing TRANSIENT_FOR
-
-static const int childEventMask = ExposureMask;
-
-static const int XEventMask =
-ExposureMask|StructureNotifyMask
-|KeyPressMask|KeyReleaseMask|KeymapStateMask|FocusChangeMask
-|ButtonPressMask|ButtonReleaseMask
-|EnterWindowMask|LeaveWindowMask
-|PropertyChangeMask
-|PointerMotionMask;
-
-void Fl_X::make_xid(Fl_Window* win, XVisualInfo *visual, Colormap colormap)
-{
-  Fl_Group::current(0); // get rid of very common user bug: forgot end()
-
-  int X = win->x();
-  int Y = win->y();
-  int W = win->w();
-  if (W <= 0) W = 1; // X don't like zero...
-  int H = win->h();
-  if (H <= 0) H = 1; // X don't like zero...
-  if (!win->parent() && !Fl::grab()) {
-    // center windows in case window manager does not do anything:
-#ifdef FL_CENTER_WINDOWS
-    if (!(win->flags() & Fl_Widget::FORCE_POSITION)) {
-      win->x(X = scr_x+(scr_w-W)/2);
-      win->y(Y = scr_y+(scr_h-H)/2);
-    }
-#endif // FL_CENTER_WINDOWS
-
-    // force the window to be on-screen.  Usually the X window manager
-    // does this, but a few don't, so we do it here for consistency:
-    int scr_x, scr_y, scr_w, scr_h;
-    Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h, X, Y);
-
-    if (win->border()) {
-      // ensure border is on screen:
-      // (assume extremely minimal dimensions for this border)
-      const int top = 20;
-      const int left = 1;
-      const int right = 1;
-      const int bottom = 1;
-      if (X+W+right > scr_x+scr_w) X = scr_x+scr_w-right-W;
-      if (X-left < scr_x) X = scr_x+left;
-      if (Y+H+bottom > scr_y+scr_h) Y = scr_y+scr_h-bottom-H;
-      if (Y-top < scr_y) Y = scr_y+top;
-    }
-    // now insure contents are on-screen (more important than border):
-    if (X+W > scr_x+scr_w) X = scr_x+scr_w-W;
-    if (X < scr_x) X = scr_x;
-    if (Y+H > scr_y+scr_h) Y = scr_y+scr_h-H;
-    if (Y < scr_y) Y = scr_y;
-  }
-
-  // if the window is a subwindow and our parent is not mapped yet, we
-  // mark this window visible, so that mapping the parent at a later
-  // point in time will call this function again to finally map the subwindow.
-  if (win->parent() && !Fl_X::i(win->window())) {
-    win->set_visible();
-    return;
-  }
-
-  ulong root = win->parent() ?
-    fl_xid(win->window()) : RootWindow(fl_display, fl_screen);
-
-  XSetWindowAttributes attr;
-  int mask = CWBorderPixel|CWColormap|CWEventMask|CWBitGravity;
-  attr.event_mask = win->parent() ? childEventMask : XEventMask;
-  attr.colormap = colormap;
-  attr.border_pixel = 0;
-  attr.bit_gravity = 0; // StaticGravity;
-  if (win->override()) {
-    attr.override_redirect = 1;
-    attr.save_under = 1;
-    mask |= CWOverrideRedirect | CWSaveUnder;
-  } else attr.override_redirect = 0;
-  if (Fl::grab()) {
-    attr.save_under = 1; mask |= CWSaveUnder;
-    if (!win->border()) {attr.override_redirect = 1; mask |= CWOverrideRedirect;}
-  }
-  // For the non-EWMH fullscreen case, we cannot use the code above,
-  // since we do not want save_under, do not want to turn off the
-  // border, and cannot grab without an existing window. Besides, 
-  // there is no clear_override(). 
-  if (win->flags() & Fl_Widget::FULLSCREEN && !ewmh_supported()) {
-    attr.override_redirect = 1;
-    mask |= CWOverrideRedirect;
-    Fl::screen_xywh(X, Y, W, H, X, Y, W, H);
-  }
-
-  if (fl_background_pixel >= 0) {
-    attr.background_pixel = fl_background_pixel;
-    fl_background_pixel = -1;
-    mask |= CWBackPixel;
-  }
-
-  Fl_X* xp =
-    set_xid(win, XCreateWindow(fl_display,
-                               root,
-                               X, Y, W, H,
-                               0, // borderwidth
-                               visual->depth,
-                               InputOutput,
-                               visual->visual,
-                               mask, &attr));
-  int showit = 1;
-
-  if (!win->parent() && !attr.override_redirect) {
-    // Communicate all kinds 'o junk to the X Window Manager:
-
-    win->label(win->label(), win->iconlabel());
-
-    XChangeProperty(fl_display, xp->xid, WM_PROTOCOLS,
-                    XA_ATOM, 32, 0, (uchar*)&WM_DELETE_WINDOW, 1);
-
-    // send size limits and border:
-    xp->sendxjunk();
-
-    // set the class property, which controls the icon used:
-    if (win->xclass()) {
-      char buffer[1024];
-      char *p; const char *q;
-      // truncate on any punctuation, because they break XResource lookup:
-      for (p = buffer, q = win->xclass(); isalnum(*q)||(*q&128);) *p++ = *q++;
-      *p++ = 0;
-      // create the capitalized version:
-      q = buffer;
-      *p = toupper(*q++); if (*p++ == 'X') *p++ = toupper(*q++);
-      while ((*p++ = *q++));
-      XChangeProperty(fl_display, xp->xid, XA_WM_CLASS, XA_STRING, 8, 0,
-                      (unsigned char *)buffer, p-buffer-1);
-    }
-
-    if (win->non_modal() && xp->next && !fl_disable_transient_for) {
-      // find some other window to be "transient for":
-      Fl_Window* wp = xp->next->w;
-      while (wp->parent()) wp = wp->window();
-      XSetTransientForHint(fl_display, xp->xid, fl_xid(wp));
-      if (!wp->visible()) showit = 0; // guess that wm will not show it
-    }
-
-    // Make sure that borderless windows do not show in the task bar
-    if (!win->border()) {
-      Atom net_wm_state = XInternAtom (fl_display, "_NET_WM_STATE", 0);
-      Atom net_wm_state_skip_taskbar = XInternAtom (fl_display, "_NET_WM_STATE_SKIP_TASKBAR", 0);
-      XChangeProperty (fl_display, xp->xid, net_wm_state, XA_ATOM, 32,
-          PropModeAppend, (unsigned char*) &net_wm_state_skip_taskbar, 1);
-    }
-
-    // If asked for, create fullscreen
-    if (win->flags() & Fl_Widget::FULLSCREEN && ewmh_supported()) {
-      XChangeProperty (fl_display, xp->xid, fl_NET_WM_STATE, XA_ATOM, 32,
-                       PropModeAppend, (unsigned char*) &fl_NET_WM_STATE_FULLSCREEN, 1);
-    }
-
-    // Make it receptive to DnD:
-    long version = 4;
-    XChangeProperty(fl_display, xp->xid, fl_XdndAware,
-                    XA_ATOM, sizeof(int)*8, 0, (unsigned char*)&version, 1);
-
-    XWMHints *hints = XAllocWMHints();
-    hints->input = True;
-    hints->flags = InputHint;
-    if (fl_show_iconic) {
-      hints->flags |= StateHint;
-      hints->initial_state = IconicState;
-      fl_show_iconic = 0;
-      showit = 0;
-    }
-    if (win->icon_->legacy_icon) {
-      hints->icon_pixmap = (Pixmap)win->icon_->legacy_icon;
-      hints->flags       |= IconPixmapHint;
-    }
-    XSetWMHints(fl_display, xp->xid, hints);
-    XFree(hints);
-
-    xp->set_icons();
-  }
-
-  // set the window type for menu and tooltip windows to avoid animations (compiz)
-  if (win->menu_window() || win->tooltip_window()) {
-    Atom net_wm_type = XInternAtom(fl_display, "_NET_WM_WINDOW_TYPE", False);
-    Atom net_wm_type_kind = XInternAtom(fl_display, "_NET_WM_WINDOW_TYPE_MENU", False);
-    XChangeProperty(fl_display, xp->xid, net_wm_type, XA_ATOM, 32, PropModeReplace, (unsigned char*)&net_wm_type_kind, 1);
-  }
-
-#ifdef HAVE_XFIXES
-  // register for clipboard change notifications
-  if (have_xfixes && !win->parent()) {
-    XFixesSelectSelectionInput(fl_display, xp->xid, XA_PRIMARY,
-                               XFixesSetSelectionOwnerNotifyMask);
-    XFixesSelectSelectionInput(fl_display, xp->xid, CLIPBOARD,
-                               XFixesSetSelectionOwnerNotifyMask);
-  }
-#endif
-
-  XMapWindow(fl_display, xp->xid);
-  if (showit) {
-    win->set_visible();
-    int old_event = Fl::e_number;
-    win->handle(Fl::e_number = FL_SHOW); // get child windows to appear
-    Fl::e_number = old_event;
-    win->redraw();
-  }
-
-  // non-EWMH fullscreen case, need grab
-  if (win->flags() & Fl_Widget::FULLSCREEN && !ewmh_supported()) {
-    XGrabKeyboard(fl_display, xp->xid, 1, GrabModeAsync, GrabModeAsync, fl_event_time);
-  }
-
-}
-
-////////////////////////////////////////////////////////////////
-// Send X window stuff that can be changed over time:
-
-void Fl_X::sendxjunk() {
-  if (w->parent() || w->override()) return; // it's not a window manager window!
-
-  if (!w->size_range_set) { // default size_range based on resizable():
-    if (w->resizable()) {
-      Fl_Widget *o = w->resizable();
-      int minw = o->w(); if (minw > 100) minw = 100;
-      int minh = o->h(); if (minh > 100) minh = 100;
-      w->size_range(w->w() - o->w() + minw, w->h() - o->h() + minh, 0, 0);
-    } else {
-      w->size_range(w->w(), w->h(), w->w(), w->h());
-    }
-    return; // because this recursively called here
-  }
-
-  XSizeHints *hints = XAllocSizeHints();
-  // memset(&hints, 0, sizeof(hints)); jreiser suggestion to fix purify?
-  hints->min_width = w->minw;
-  hints->min_height = w->minh;
-  hints->max_width = w->maxw;
-  hints->max_height = w->maxh;
-  hints->width_inc = w->dw;
-  hints->height_inc = w->dh;
-  hints->win_gravity = StaticGravity;
-
-  // see the file /usr/include/X11/Xm/MwmUtil.h:
-  // fill all fields to avoid bugs in kwm and perhaps other window managers:
-  // 0, MWM_FUNC_ALL, MWM_DECOR_ALL
-  long prop[5] = {0, 1, 1, 0, 0};
-
-  if (hints->min_width != hints->max_width ||
-      hints->min_height != hints->max_height) { // resizable
-    hints->flags = PMinSize|PWinGravity;
-    if (hints->max_width >= hints->min_width ||
-        hints->max_height >= hints->min_height) {
-      hints->flags = PMinSize|PMaxSize|PWinGravity;
-      // unfortunately we can't set just one maximum size.  Guess a
-      // value for the other one.  Some window managers will make the
-      // window fit on screen when maximized, others will put it off screen:
-      if (hints->max_width < hints->min_width) hints->max_width = Fl::w();
-      if (hints->max_height < hints->min_height) hints->max_height = Fl::h();
-    }
-    if (hints->width_inc && hints->height_inc) hints->flags |= PResizeInc;
-    if (w->aspect) {
-      // stupid X!  It could insist that the corner go on the
-      // straight line between min and max...
-      hints->min_aspect.x = hints->max_aspect.x = hints->min_width;
-      hints->min_aspect.y = hints->max_aspect.y = hints->min_height;
-      hints->flags |= PAspect;
-    }
-  } else { // not resizable:
-    hints->flags = PMinSize|PMaxSize|PWinGravity;
-    prop[0] = 1; // MWM_HINTS_FUNCTIONS
-    prop[1] = 1|2|16; // MWM_FUNC_ALL | MWM_FUNC_RESIZE | MWM_FUNC_MAXIMIZE
-  }
-
-  if (w->flags() & Fl_Widget::FORCE_POSITION) {
-    hints->flags |= USPosition;
-    hints->x = w->x();
-    hints->y = w->y();
-  }
-
-  if (!w->border()) {
-    prop[0] |= 2; // MWM_HINTS_DECORATIONS
-    prop[2] = 0; // no decorations
-  }
-
-  XSetWMNormalHints(fl_display, xid, hints);
-  XChangeProperty(fl_display, xid,
-                  fl_MOTIF_WM_HINTS, fl_MOTIF_WM_HINTS,
-                  32, 0, (unsigned char *)prop, 5);
-  XFree(hints);
-}
-
-void Fl_Window::size_range_() {
-  size_range_set = 1;
-  if (shown()) i->sendxjunk();
-}
-
-////////////////////////////////////////////////////////////////
-
-static unsigned long *default_net_wm_icons = 0L;
-static size_t default_net_wm_icons_size = 0;
-
-void icons_to_property(const Fl_RGB_Image *icons[], int count,
-                       unsigned long **property, size_t *len) {
-  size_t sz;
-  unsigned long *data;
-
-  sz = 0;
-  for (int i = 0;i < count;i++)
-    sz += 2 + icons[i]->w() * icons[i]->h();
-
-  // FIXME: Might want to sort the icons
-
-  *property = data = new unsigned long[sz];
-  *len = sz;
-
-  for (int i = 0;i < count;i++) {
-    const Fl_RGB_Image *image;
-
-    image = icons[i];
-
-    data[0] = image->w();
-    data[1] = image->h();
-    data += 2;
-
-    const uchar *in = (const uchar*)*image->data();
-    for (int y = 0;y < image->h();y++) {
-      for (int x = 0;x < image->w();x++) {
-        switch (image->d()) {
-        case 1:
-          *data = ( 0xff<<24) | (in[0]<<16) | (in[0]<<8) | in[0];
-          break;
-        case 2:
-          *data = (in[1]<<24) | (in[0]<<16) | (in[0]<<8) | in[0];
-          break;
-        case 3:
-          *data = ( 0xff<<24) | (in[0]<<16) | (in[1]<<8) | in[2];
-          break;
-        case 4:
-          *data = (in[3]<<24) | (in[0]<<16) | (in[1]<<8) | in[2];
-          break;
-        }
-        in += image->d();
-        data++;
-      }
-      in += image->ld();
-    }
-  }
-}
-
-void Fl_X::set_default_icons(const Fl_RGB_Image *icons[], int count) {
-  if (default_net_wm_icons) {
-    delete [] default_net_wm_icons;
-    default_net_wm_icons = 0L;
-    default_net_wm_icons_size = 0;
-  }
-
-  if (count > 0)
-    icons_to_property(icons, count,
-                      &default_net_wm_icons, &default_net_wm_icons_size);
-}
-
-void Fl_X::set_icons() {
-  unsigned long *net_wm_icons;
-  size_t net_wm_icons_size;
-
-  if (w->icon_->count) {
-    icons_to_property((const Fl_RGB_Image **)w->icon_->icons, w->icon_->count,
-                      &net_wm_icons, &net_wm_icons_size);
-  } else {
-    net_wm_icons = default_net_wm_icons;
-    net_wm_icons_size = default_net_wm_icons_size;
-  }
-
-  XChangeProperty (fl_display, xid, fl_NET_WM_ICON, XA_CARDINAL, 32,
-      PropModeReplace, (unsigned char*) net_wm_icons, net_wm_icons_size);
-
-  if (w->icon_->count) {
-    delete [] net_wm_icons;
-    net_wm_icons = 0L;
-    net_wm_icons_size = 0;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-int Fl_X::set_cursor(Fl_Cursor c) {
-  unsigned int shape;
-  Cursor xc;
-
-  switch (c) {
-  case FL_CURSOR_ARROW:   shape = XC_left_ptr; break;
-  case FL_CURSOR_CROSS:   shape = XC_tcross; break;
-  case FL_CURSOR_WAIT:    shape = XC_watch; break;
-  case FL_CURSOR_INSERT:  shape = XC_xterm; break;
-  case FL_CURSOR_HAND:    shape = XC_hand2; break;
-  case FL_CURSOR_HELP:    shape = XC_question_arrow; break;
-  case FL_CURSOR_MOVE:    shape = XC_fleur; break;
-  case FL_CURSOR_NS:      shape = XC_sb_v_double_arrow; break;
-  case FL_CURSOR_WE:      shape = XC_sb_h_double_arrow; break;
-  case FL_CURSOR_NE:      shape = XC_top_right_corner; break;
-  case FL_CURSOR_N:       shape = XC_top_side; break;
-  case FL_CURSOR_NW:      shape = XC_top_left_corner; break;
-  case FL_CURSOR_E:       shape = XC_right_side; break;
-  case FL_CURSOR_W:       shape = XC_left_side; break;
-  case FL_CURSOR_SE:      shape = XC_bottom_right_corner; break;
-  case FL_CURSOR_S:       shape = XC_bottom_side; break;
-  case FL_CURSOR_SW:      shape = XC_bottom_left_corner; break;
-  default:
-    return 0;
-  }
-
-  xc = XCreateFontCursor(fl_display, shape);
-  XDefineCursor(fl_display, xid, xc);
-  XFreeCursor(fl_display, xc);
-
-  return 1;
-}
-
-int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) {
-#if ! HAVE_XCURSOR
-  return 0;
-#else
-  XcursorImage *cursor;
-  Cursor xc;
-
-  if ((hotx < 0) || (hotx >= image->w()))
-    return 0;
-  if ((hoty < 0) || (hoty >= image->h()))
-    return 0;
-
-  cursor = XcursorImageCreate(image->w(), image->h());
-  if (!cursor)
-    return 0;
-
-  const uchar *i = (const uchar*)*image->data();
-  XcursorPixel *o = cursor->pixels;
-  for (int y = 0;y < image->h();y++) {
-    for (int x = 0;x < image->w();x++) {
-      switch (image->d()) {
-      case 1:
-        *o = (0xff<<24) | (i[0]<<16) | (i[0]<<8) | i[0];
-        break;
-      case 2:
-        *o = (i[1]<<24) | (i[0]<<16) | (i[0]<<8) | i[0];
-        break;
-      case 3:
-        *o = (0xff<<24) | (i[0]<<16) | (i[1]<<8) | i[2];
-        break;
-      case 4:
-        *o = (i[3]<<24) | (i[0]<<16) | (i[1]<<8) | i[2];
-        break;
-      }
-      i += image->d();
-      o++;
-    }
-    i += image->ld();
-  }
-
-  cursor->xhot = hotx;
-  cursor->yhot = hoty;
-
-  xc = XcursorImageLoadCursor(fl_display, cursor);
-  XDefineCursor(fl_display, xid, xc);
-  XFreeCursor(fl_display, xc);
-
-  XcursorImageDestroy(cursor);
-
-  return 1;
-#endif
-}
-
-////////////////////////////////////////////////////////////////
-
-// returns pointer to the filename, or null if name ends with '/'
-const char *fl_filename_name(const char *name) {
-  const char *p,*q;
-  if (!name) return (0);
-  for (p=q=name; *p;) if (*p++ == '/') q = p;
-  return q;
-}
-
-void Fl_Window::label(const char *name,const char *iname) {
-  Fl_Widget::label(name);
-  iconlabel_ = iname;
-  if (shown() && !parent()) {
-    if (!name) name = "";
-    int namelen = strlen(name);
-    if (!iname) iname = fl_filename_name(name);
-    int inamelen = strlen(iname);
-    XChangeProperty(fl_display, i->xid, fl_NET_WM_NAME,      fl_XaUtf8String, 8, 0, (uchar*)name,  namelen);	// utf8
-    XChangeProperty(fl_display, i->xid, XA_WM_NAME,          XA_STRING,       8, 0, (uchar*)name,  namelen);	// non-utf8
-    XChangeProperty(fl_display, i->xid, fl_NET_WM_ICON_NAME, fl_XaUtf8String, 8, 0, (uchar*)iname, inamelen);	// utf8
-    XChangeProperty(fl_display, i->xid, XA_WM_ICON_NAME,     XA_STRING,       8, 0, (uchar*)iname, inamelen);	// non-utf8
-  }
-}
-
-////////////////////////////////////////////////////////////////
-// Implement the virtual functions for the base Fl_Window class:
-
-// If the box is a filled rectangle, we can make the redisplay *look*
-// faster by using X's background pixel erasing.  We can make it
-// actually *be* faster by drawing the frame only, this is done by
-// setting fl_boxcheat, which is seen by code in fl_drawbox.cxx:
-//
-// On XFree86 (and prehaps all X's) this has a problem if the window
-// is resized while a save-behind window is atop it.  The previous
-// contents are restored to the area, but this assumes the area
-// is cleared to background color.  So this is disabled in this version.
-// Fl_Window *fl_boxcheat;
-static inline int can_boxcheat(uchar b) {return (b==1 || ((b&2) && b<=15));}
-
-void Fl_Window::show() {
-  image(Fl::scheme_bg_);
-  if (Fl::scheme_bg_) {
-    labeltype(FL_NORMAL_LABEL);
-    align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-  } else {
-    labeltype(FL_NO_LABEL);
-  }
-  Fl_Tooltip::exit(this);
-  if (!shown()) {
-    fl_open_display();
-    // Don't set background pixel for double-buffered windows...
-    if (type() == FL_WINDOW && can_boxcheat(box())) {
-      fl_background_pixel = int(fl_xpixel(color()));
-    }
-    Fl_X::make_xid(this);
-  } else {
-    XMapRaised(fl_display, i->xid);
-  }
-#ifdef USE_PRINT_BUTTON
-void preparePrintFront(void);
-preparePrintFront();
-#endif
-}
-
-Window fl_window;
-Fl_Window *Fl_Window::current_;
-GC fl_gc;
-
-// make X drawing go into this window (called by subclass flush() impl.)
-void Fl_Window::make_current() {
-  static GC gc; // the GC used by all X windows
-  if (!gc) gc = XCreateGC(fl_display, i->xid, 0, 0);
-  fl_window = i->xid;
-  fl_gc = gc;
-  current_ = this;
-  fl_clip_region(0);
-
-#ifdef FLTK_USE_CAIRO
-  // update the cairo_t context
-  if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this);
-#endif
-}
-
-Window fl_xid_(const Fl_Window *w) {
-  Fl_X *temp = Fl_X::i(w);
-  return temp ? temp->xid : 0;
-}
-
-static void decorated_win_size(Fl_Window *win, int &w, int &h)
-{
-  w = win->w();
-  h = win->h();
-  if (!win->shown() || win->parent() || !win->border() || !win->visible()) return;
-  Window root, parent, *children;
-  unsigned n = 0;
-  Status status = XQueryTree(fl_display, Fl_X::i(win)->xid, &root, &parent, &children, &n); 
-  if (status != 0 && n) XFree(children);
-  // when compiz is used, root and parent are the same window 
-  // and I don't know where to find the window decoration
-  if (status == 0 || root == parent) return; 
-  XWindowAttributes attributes;
-  XGetWindowAttributes(fl_display, parent, &attributes);
-  w = attributes.width;
-  h = attributes.height;
-}
-
-int Fl_Window::decorated_h()
-{
-  int w, h;
-  decorated_win_size(this, w, h);
-  return h;
-}
-
-int Fl_Window::decorated_w()
-{
-  int w, h;
-  decorated_win_size(this, w, h);
-  return w;
-}
-
-void Fl_Paged_Device::print_window(Fl_Window *win, int x_offset, int y_offset)
-{
-  if (!win->shown() || win->parent() || !win->border() || !win->visible()) {
-    this->print_widget(win, x_offset, y_offset);
-    return;
-  }
-  Fl_Display_Device::display_device()->set_current();
-  win->show();
-  Fl::check();
-  win->make_current();
-  Window root, parent, *children, child_win, from;
-  unsigned n = 0;
-  int bx, bt, do_it;
-  from = fl_window;
-  do_it = (XQueryTree(fl_display, fl_window, &root, &parent, &children, &n) != 0 && 
-	   XTranslateCoordinates(fl_display, fl_window, parent, 0, 0, &bx, &bt, &child_win) == True);
-  if (n) XFree(children);
-  // hack to bypass STR #2648: when compiz is used, root and parent are the same window 
-  // and I don't know where to find the window decoration
-  if (do_it && root == parent) do_it = 0; 
-  if (!do_it) {
-    this->set_current();
-    this->print_widget(win, x_offset, y_offset);
-    return;
-  }
-  fl_window = parent;
-  uchar *top_image = 0, *left_image = 0, *right_image = 0, *bottom_image = 0;
-  top_image = fl_read_image(NULL, 0, 0, - (win->w() + 2 * bx), bt);
-  if (bx) {
-    left_image = fl_read_image(NULL, 0, bt, -bx, win->h() + bx);
-    right_image = fl_read_image(NULL, win->w() + bx, bt, -bx, win->h() + bx);
-    bottom_image = fl_read_image(NULL, 0, bt + win->h(), -(win->w() + 2*bx), bx);
-  }
-  fl_window = from;
-  this->set_current();
-  if (top_image) {
-    fl_draw_image(top_image, x_offset, y_offset, win->w() + 2 * bx, bt, 3);
-    delete[] top_image;
-  }
-  if (bx) {
-    if (left_image) fl_draw_image(left_image, x_offset, y_offset + bt, bx, win->h() + bx, 3);
-    if (right_image) fl_draw_image(right_image, x_offset + win->w() + bx, y_offset + bt, bx, win->h() + bx, 3);
-    if (bottom_image) fl_draw_image(bottom_image, x_offset, y_offset + bt + win->h(), win->w() + 2*bx, bx, 3);
-    if (left_image) delete[] left_image;
-    if (right_image) delete[] right_image;
-    if (bottom_image) delete[] bottom_image;
-  }
-  this->print_widget( win, x_offset + bx, y_offset + bt );
-}
-
-#ifdef USE_PRINT_BUTTON
-// to test the Fl_Printer class creating a "Print front window" button in a separate window
-// contains also preparePrintFront call above
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Button.H>
-void printFront(Fl_Widget *o, void *data)
-{
-  Fl_Printer printer;
-  o->window()->hide();
-  Fl_Window *win = Fl::first_window();
-  if(!win) return;
-  int w, h;
-  if( printer.start_job(1) ) { o->window()->show(); return; }
-  if( printer.start_page() ) { o->window()->show(); return; }
-  printer.printable_rect(&w,&h);
-  // scale the printer device so that the window fits on the page
-  float scale = 1;
-  int ww = win->decorated_w();
-  int wh = win->decorated_h();
-  if (ww > w || wh > h) {
-    scale = (float)w/ww;
-    if ((float)h/wh < scale) scale = (float)h/wh;
-    printer.scale(scale, scale);
-  }
-
-// #define ROTATE 20.0
-#ifdef ROTATE
-  printer.scale(scale * 0.8, scale * 0.8);
-  printer.printable_rect(&w, &h);
-  printer.origin(w/2, h/2 );
-  printer.rotate(ROTATE);
-  printer.print_widget( win, - win->w()/2, - win->h()/2 );
-  //printer.print_window_part( win, 0,0, win->w(), win->h(), - win->w()/2, - win->h()/2 );
-#else  
-  printer.print_window(win);
-#endif
-
-  printer.end_page();
-  printer.end_job();
-  o->window()->show();
-}
-
-void preparePrintFront(void)
-{
-  static int first=1;
-  if(!first) return;
-  first=0;
-  static Fl_Window w(0,0,150,30);
-  static Fl_Button b(0,0,w.w(),w.h(), "Print front window");
-  b.callback(printFront);
-  w.end();
-  w.show();
-}
-#endif // USE_PRINT_BUTTON
-
-#endif
-
-//
-// End of "$Id: Fl_x.cxx 8764 2011-05-30 16:47:48Z manolo $".
-//
diff --git a/common/fltk/src/Makefile b/common/fltk/src/Makefile
deleted file mode 100644
index 7806854..0000000
--- a/common/fltk/src/Makefile
+++ /dev/null
@@ -1,810 +0,0 @@
-#
-# "$Id: Makefile 8389 2011-02-06 14:08:08Z manolo $"
-#
-# Library makefile for the Fast Light Tool Kit (FLTK).
-#
-# Copyright 1998-2010 by Bill Spitzak and others.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA.
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-CPPFILES = \
-	Fl.cxx \
-	Fl_Adjuster.cxx \
-	Fl_Bitmap.cxx \
-	Fl_Browser.cxx \
-	Fl_Browser_.cxx \
-	Fl_Browser_load.cxx \
-	Fl_Box.cxx \
-	Fl_Button.cxx \
-	Fl_Chart.cxx \
-	Fl_Check_Browser.cxx \
-	Fl_Check_Button.cxx \
-	Fl_Choice.cxx \
-	Fl_Clock.cxx \
-	Fl_Color_Chooser.cxx \
-	Fl_Counter.cxx \
-	Fl_Dial.cxx \
-	Fl_Device.cxx \
-	Fl_Double_Window.cxx \
-	Fl_File_Browser.cxx \
-	Fl_File_Chooser.cxx \
-	Fl_File_Chooser2.cxx \
-	Fl_File_Icon.cxx \
-	Fl_File_Input.cxx \
-	Fl_Group.cxx \
-	Fl_Help_View.cxx \
-	Fl_Image.cxx \
-	Fl_Input.cxx \
-	Fl_Input_.cxx \
-	Fl_Light_Button.cxx \
-	Fl_Menu.cxx \
-	Fl_Menu_.cxx \
-	Fl_Menu_Bar.cxx \
-	Fl_Sys_Menu_Bar.cxx \
-	Fl_Menu_Button.cxx \
-	Fl_Menu_Window.cxx \
-	Fl_Menu_add.cxx \
-	Fl_Menu_global.cxx \
-	Fl_Multi_Label.cxx \
-	Fl_Native_File_Chooser.cxx \
-	Fl_Overlay_Window.cxx \
-	Fl_Pack.cxx \
-	Fl_Paged_Device.cxx \
-	Fl_Pixmap.cxx \
-	Fl_Positioner.cxx \
-	Fl_Preferences.cxx \
-	Fl_Printer.cxx \
-	Fl_Progress.cxx \
-	Fl_Repeat_Button.cxx \
-	Fl_Return_Button.cxx \
-	Fl_Roller.cxx \
-	Fl_Round_Button.cxx \
-	Fl_Scroll.cxx \
-	Fl_Scrollbar.cxx \
-	Fl_Shared_Image.cxx \
-	Fl_Single_Window.cxx \
-	Fl_Slider.cxx \
-	Fl_Table.cxx \
-	Fl_Table_Row.cxx \
-	Fl_Tabs.cxx \
-	Fl_Text_Buffer.cxx \
-	Fl_Text_Display.cxx \
-	Fl_Text_Editor.cxx \
-	Fl_Tile.cxx \
-	Fl_Tiled_Image.cxx \
-	Fl_Tree.cxx \
-	Fl_Tree_Item.cxx \
-	Fl_Tree_Item_Array.cxx \
-	Fl_Tree_Prefs.cxx \
-	Fl_Tooltip.cxx \
-	Fl_Valuator.cxx \
-	Fl_Value_Input.cxx \
-	Fl_Value_Output.cxx \
-	Fl_Value_Slider.cxx \
-	Fl_Widget.cxx \
-	Fl_Window.cxx \
-	Fl_Window_fullscreen.cxx \
-	Fl_Window_hotspot.cxx \
-	Fl_Window_iconize.cxx \
-	Fl_Wizard.cxx \
-	Fl_XBM_Image.cxx \
-	Fl_XPM_Image.cxx \
-	Fl_abort.cxx \
-	Fl_add_idle.cxx \
-	Fl_arg.cxx \
-	Fl_compose.cxx \
-	Fl_display.cxx \
-	Fl_get_key.cxx \
-	Fl_get_system_colors.cxx \
-	Fl_grab.cxx \
-	Fl_lock.cxx \
-	Fl_own_colormap.cxx \
-	Fl_visual.cxx \
-	Fl_x.cxx \
-	filename_absolute.cxx \
-	filename_expand.cxx \
-	filename_ext.cxx \
-	filename_isdir.cxx \
-	filename_list.cxx \
-	filename_match.cxx \
-	filename_setext.cxx \
-	fl_arc.cxx \
-	fl_arci.cxx \
-	fl_ask.cxx \
-	fl_boxtype.cxx \
-	fl_color.cxx \
-	fl_cursor.cxx \
-	fl_curve.cxx \
-	fl_diamond_box.cxx \
-	fl_dnd.cxx \
-	fl_draw.cxx \
-	fl_draw_image.cxx \
-	fl_draw_pixmap.cxx \
-	fl_encoding_latin1.cxx \
-	fl_encoding_mac_roman.cxx \
-	fl_engraved_label.cxx \
-	fl_file_dir.cxx \
-	fl_font.cxx \
-	fl_gtk.cxx \
-	fl_labeltype.cxx \
-	fl_line_style.cxx \
-	fl_open_uri.cxx \
-	fl_oval_box.cxx \
-	fl_overlay.cxx \
-	fl_overlay_visual.cxx \
-	fl_plastic.cxx \
-	fl_read_image.cxx \
-	fl_rect.cxx \
-	fl_round_box.cxx \
-	fl_rounded_box.cxx \
-	fl_set_font.cxx \
-	fl_set_fonts.cxx \
-	fl_scroll_area.cxx \
-	fl_shadow_box.cxx \
-	fl_shortcut.cxx \
-	fl_show_colormap.cxx \
-	fl_symbols.cxx \
-	fl_vertex.cxx \
-	screen_xywh.cxx \
-	fl_utf8.cxx \
-	ps_image.cxx
-	
-OBJCPPFILES = \
-    Fl_cocoa.mm \
-    Fl_Quartz_Printer.mm \
-    Fl_Native_File_Chooser_MAC.mm
-	
-FLCPPFILES = \
-	forms_compatability.cxx \
-	forms_bitmap.cxx \
-	forms_free.cxx \
-	forms_fselect.cxx \
-	forms_pixmap.cxx \
-	forms_timer.cxx
-
-GLCPPFILES = \
-	Fl_Gl_Choice.cxx \
-	Fl_Gl_Overlay.cxx \
-	Fl_Gl_Device_Plugin.cxx \
-	Fl_Gl_Window.cxx \
-	freeglut_geometry.cxx \
-	freeglut_stroke_mono_roman.cxx \
-	freeglut_stroke_roman.cxx \
-	freeglut_teapot.cxx \
-	gl_draw.cxx \
-	gl_start.cxx \
-	glut_compatability.cxx \
-	glut_font.cxx
-
-IMGCPPFILES = \
-	fl_images_core.cxx \
-	Fl_BMP_Image.cxx \
-	Fl_File_Icon2.cxx \
-	Fl_GIF_Image.cxx \
-	Fl_Help_Dialog.cxx \
-	Fl_JPEG_Image.cxx \
-	Fl_PNG_Image.cxx \
-	Fl_PNM_Image.cxx
-
-
-CFILES = fl_call_main.c flstring.c scandir.c numericsort.c vsnprintf.c fl_utf.c
-
-UTF8CFILES = \
-	xutf8/case.c \
-	xutf8/is_right2left.c \
-	xutf8/is_spacing.c \
-	xutf8/keysym2Ucs.c \
-	xutf8/utf8Input.c \
-	xutf8/utf8Utils.c \
-	xutf8/utf8Wrap.c
-
-################################################################
-FLTKFLAGS = -DFL_LIBRARY
-include ../makeinclude
-
-MMFILES = $(shell if test $(USEMMFILES) = Yes; then echo $(OBJCPPFILES); fi)
-
-OBJECTS =  $(MMFILES:.mm=.o) $(CPPFILES:.cxx=.o) $(CFILES:.c=.o) $(UTF8CFILES:.c=.o)
-GLOBJECTS = $(GLCPPFILES:.cxx=.o)
-FLOBJECTS = $(FLCPPFILES:.cxx=.o)
-IMGOBJECTS = $(IMGCPPFILES:.cxx=.o)
-
-all:	$(LIBNAME) $(DSONAME) \
-	$(FLLIBNAME) $(FLDSONAME) \
-	$(GLLIBNAME) $(GLDSONAME) \
-	$(IMGLIBNAME) $(IMGDSONAME) 
-
-$(LIBNAME): $(OBJECTS)
-	echo $(LIBCOMMAND) $@ ...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(OBJECTS)
-	$(RANLIB) $@
-
-libfltk.so.1.3: $(OBJECTS)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(OBJECTS)
-	$(RM) libfltk.so
-	$(LN) libfltk.so.1.3 libfltk.so
-
-libfltk.sl.1.3: $(OBJECTS)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(OBJECTS)
-	$(RM) libfltk.sl
-	$(LN) libfltk.sl.1.3 libfltk.sl
-
-libfltk.1.3.dylib: $(OBJECTS)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ \
-		-install_name $(libdir)/$@ \
-		-current_version 1.3.0 \
-		-compatibility_version 1.3.0 \
-		$(OBJECTS) $(LDLIBS)
-	$(RM) libfltk.dylib
-	$(LN) libfltk.1.3.dylib libfltk.dylib
-
-libfltk_s.a: $(OBJECTS)
-	echo $(DSOCOMMAND) libfltk_s.o ...
-	$(DSOCOMMAND) libfltk_s.o $(OBJECTS) $(IMAGELIBS)
-	echo $(LIBCOMMAND) libfltk_s.a libfltk_s.o
-	$(RM) $@
-	$(LIBCOMMAND) libfltk_s.a libfltk_s.o
-	$(CHMOD) +x libfltk_s.a
-
-$(FLLIBNAME): $(FLOBJECTS)
-	echo $(LIBCOMMAND) $@ ...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(FLOBJECTS)
-	$(RANLIB) $@
-
-libfltk_forms.so.1.3: $(FLOBJECTS) libfltk.so.1.3
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(FLOBJECTS) -L. -lfltk
-	$(RM) libfltk_forms.so
-	$(LN) libfltk_forms.so.1.3 libfltk_forms.so
-
-libfltk_forms.sl.1.3: $(FLOBJECTS) libfltk.sl.1.3
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(FLOBJECTS) -L. -lfltk
-	$(RM) libfltk_forms.sl
-	$(LN) libfltk_forms.sl.1.3 libfltk_forms.sl
-
-libfltk_forms.1.3.dylib: $(FLOBJECTS) libfltk.1.3.dylib
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ \
-		-install_name $(libdir)/$@ \
-		-current_version 1.3.0 \
-		-compatibility_version 1.3.0 \
-		$(FLOBJECTS) -L. $(LDLIBS) -lfltk
-	$(RM) libfltk_forms.dylib
-	$(LN) libfltk_forms.1.3.dylib libfltk_forms.dylib
-
-libfltk_forms_s.a: $(FLOBJECTS)
-	echo $(DSOCOMMAND) libfltk_forms_s.o ...
-	$(DSOCOMMAND) libfltk_forms_s.o $(FLOBJECTS)
-	echo $(LIBCOMMAND) libfltk_forms_s.a libfltk_forms_s.o
-	$(RM) $@
-	$(LIBCOMMAND) libfltk_forms_s.a libfltk_forms_s.o
-	$(CHMOD) +x libfltk_forms_s.a
-
-$(GLLIBNAME): $(GLOBJECTS)
-	echo $(LIBCOMMAND) $@ ...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(GLOBJECTS)
-	$(RANLIB) $@
-
-libfltk_gl.so.1.3: $(GLOBJECTS) libfltk.so.1.3
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(GLOBJECTS) -L. -lfltk
-	$(RM) libfltk_gl.so
-	$(LN) libfltk_gl.so.1.3 libfltk_gl.so
-
-libfltk_gl.sl.1.3: $(GLOBJECTS) libfltk.sl.1.3
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(GLOBJECTS) -L. -lfltk
-	$(RM) libfltk_gl.sl
-	$(LN) libfltk_gl.sl.1.3 libfltk_gl.sl
-
-libfltk_gl.1.3.dylib: $(GLOBJECTS) libfltk.1.3.dylib
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ \
-		-install_name $(libdir)/$@ \
-		-current_version 1.3.0 \
-		-compatibility_version 1.3.0 \
-		$(GLOBJECTS) -L. $(GLDLIBS) -lfltk
-	$(RM) libfltk_gl.dylib
-	$(LN) libfltk_gl.1.3.dylib libfltk_gl.dylib
-
-libfltk_gl_s.a: $(GLOBJECTS)
-	echo $(DSOCOMMAND) libfltk_gl_s.o ...
-	$(DSOCOMMAND) libfltk_gl_s.o $(GLOBJECTS)
-	echo $(LIBCOMMAND) libfltk_gl_s.a libfltk_gl_s.o
-	$(RM) $@
-	$(LIBCOMMAND) libfltk_gl_s.a libfltk_gl_s.o
-	$(CHMOD) +x libfltk_gl_s.a
-
-$(IMGLIBNAME): $(IMGOBJECTS)
-	echo $(LIBCOMMAND) $@ ...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(IMGOBJECTS)
-	$(RANLIB) $@
-
-libfltk_images.so.1.3: $(IMGOBJECTS) libfltk.so.1.3
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(IMGOBJECTS) -L. $(IMAGELIBS) -lfltk
-	$(RM) libfltk_images.so
-	$(LN) libfltk_images.so.1.3 libfltk_images.so
-
-libfltk_images.sl.1.3: $(IMGOBJECTS) libfltk.sl.1.3
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(IMGOBJECTS) -L. $(IMAGELIBS) -lfltk
-	$(RM) libfltk_images.sl
-	$(LN) libfltk_images.sl.1.3 libfltk_images.sl
-
-libfltk_images.1.3.dylib: $(IMGOBJECTS) libfltk.1.3.dylib
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ \
-		-install_name $(libdir)/$@ \
-		-current_version 1.3.0 \
-		-compatibility_version 1.3.0 \
-		$(IMGOBJECTS)  -L. $(LDLIBS) $(IMAGELIBS) -lfltk
-	$(RM) libfltk_images.dylib
-	$(LN) libfltk_images.1.3.dylib libfltk_images.dylib
-
-libfltk_images_s.a: $(IMGOBJECTS)
-	echo $(DSOCOMMAND) libfltk_images_s.o ...
-	$(DSOCOMMAND) libfltk_images_s.o $(IMGOBJECTS)
-	echo $(LIBCOMMAND) libfltk_images_s.a libfltk_images_s.o
-	$(RM) $@
-	$(LIBCOMMAND) libfltk_images_s.a libfltk_images_s.o
-	$(CHMOD) +x libfltk_images_s.a
-
-#-----------------------------------------------------------------
-# - the import libraries libfltk*.dll.a and the .dll files
-#   are created from the libfltk*.a files. They are built
-#   into the src dir.
-# - The _images, _gl, _forms and dlls must be linked
-#   against the import libraries in the src dir.
-#-----------------------------------------------------------------
-
-#-----------------------------------------------------------------
-# cygwin GDI shared libraries
-#-----------------------------------------------------------------
-
-cygfltknox-1.3.dll: $(LIBNAME)
-	echo $(DSOCOMMAND) $(LIBNAME) ...
-	$(DSOCOMMAND) $(LIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk.dll.a $(LDLIBS)
-
-cygfltknox_forms-1.3.dll: $(FLLIBNAME) cygfltknox-1.3.dll
-	echo $(DSOCOMMAND) $(FLLIBNAME) ...
-	$(DSOCOMMAND) $(FLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_forms.dll.a \
-		-L. -lfltk $(LDLIBS)
-
-cygfltknox_gl-1.3.dll: $(GLLIBNAME) cygfltknox-1.3.dll
-	echo $(DSOCOMMAND) $(GLLIBNAME) ...
-	$(DSOCOMMAND) $(GLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_gl.dll.a \
-		-L. -lfltk $(GLDLIBS)
-
-cygfltknox_images-1.3.dll: $(IMGLIBNAME) cygfltknox-1.3.dll
-	echo $(DSOCOMMAND) $(IMGLIBNAME) ...
-	$(DSOCOMMAND) $(IMGLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_images.dll.a \
-		-L. -lfltk -Wl,--exclude-libs -Wl,libfltk_png.a \
-			$(IMAGELIBS) $(LDLIBS)
-
-#-----------------------------------------------------------------
-# cygwin X11 shared libraries
-#-----------------------------------------------------------------
-
-cygfltk-1.3.dll: $(LIBNAME)
-	echo $(DSOCOMMAND) $(LIBNAME) ...
-	$(DSOCOMMAND) $(LIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk.dll.a $(LDLIBS)
-
-cygfltk_forms-1.3.dll: $(FLLIBNAME) cygfltk-1.3.dll
-	echo $(DSOCOMMAND) $(FLLIBNAME) ...
-	$(DSOCOMMAND) $(FLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_forms.dll.a \
-		-L. -lfltk $(LDLIBS)
-
-cygfltk_gl-1.3.dll: $(GLLIBNAME) cygfltk-1.3.dll
-	echo $(DSOCOMMAND) $(GLLIBNAME) ...
-	$(DSOCOMMAND) $(GLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_gl.dll.a \
-		-L. -lfltk $(GLDLIBS)
-
-cygfltk_images-1.3.dll: $(IMGLIBNAME) cygfltk-1.3.dll
-	echo $(DSOCOMMAND) $(IMGLIBNAME) ...
-	$(DSOCOMMAND) $(IMGLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_images.dll.a \
-		-L. -lfltk -Wl,--exclude-libs -Wl,libfltk_png.a \
-			$(IMAGELIBS) $(LDLIBS)
-
-mgwfltknox-1.3.dll: $(LIBNAME)
-	echo $(DSOCOMMAND) $(LIBNAME) ...
-	$(DSOCOMMAND) $(LIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk.dll.a $(LDLIBS)
-
-mgwfltknox_forms-1.3.dll: $(FLLIBNAME) mgwfltknox-1.3.dll
-	echo $(DSOCOMMAND) $(FLLIBNAME) ...
-	$(DSOCOMMAND) $(FLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_forms.dll.a \
-		-L. -lfltk $(LDLIBS)
-
-mgwfltknox_gl-1.3.dll: $(GLLIBNAME) mgwfltknox-1.3.dll
-	echo $(DSOCOMMAND) $(GLLIBNAME) ...
-	$(DSOCOMMAND) $(GLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_gl.dll.a \
-		-L. -lfltk $(GLDLIBS)
-
-#-----------------------------------------------------
-# See STR #1585 for --exclude-libs
-#-----------------------------------------------------
-
-mgwfltknox_images-1.3.dll: $(IMGLIBNAME) mgwfltknox-1.3.dll
-	echo $(DSOCOMMAND) $(IMGLIBNAME) ...
-	$(DSOCOMMAND) $(IMGLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_images.dll.a \
-		-L. -lfltk -Wl,--exclude-libs -Wl,libfltk_png.a \
-			$(IMAGELIBS) $(LDLIBS)
-
-clean:
-	-$(RM) *.o xutf8/*.o *.dll.a core.* *~ *.bak *.bck
-	-$(RM) $(DSONAME) $(FLDSONAME) $(GLDSONAME) $(IMGDSONAME) \
-		$(LIBNAME) $(FLLIBNAME) $(GLLIBNAME) \
-		$(IMGLIBNAME) \
-		libfltk.so libfltk_forms.so libfltk_gl.so libfltk_images.so \
-		libfltk.sl libfltk_forms.sl libfltk_gl.sl libfltk_images.sl \
-		libfltk.dylib libfltk_forms.dylib \
-		libfltk_gl.dylib libfltk_images.dylib \
-		cmap core
-
-depend:	$(CPPFILES) $(MMFILES) $(FLCPPFILES) $(GLCPPFILES) $(IMGCPPFILES) $(CFILES) $(UTF8CFILES)
-	makedepend -Y -I.. -f makedepend $(CPPFILES) $(MMFILES) $(FLCPPFILES) \
-		$(GLCPPFILES) $(IMGCPPFILES) $(CFILES) $(UTF8CFILES)
-
-# Automatically generated dependencies... generated on a Linux/Unix host !
-include makedepend
-
-# These dependencies aren't part of the makedepend file since
-# they are part of the WIN32 and MacOS code base...
-# Please add only non-Linux/Unix files or such that are optional
-# (like "*xft*") here:
-Fl_get_key.o:	Fl_get_key_mac.cxx Fl_get_key_win32.cxx
-Fl_Native_File_Chooser.o : Fl_Native_File_Chooser_WIN32.cxx
-Fl_Native_File_Chooser_MAC.o:	Fl_Native_File_Chooser_MAC.mm
-Fl.o:		Fl_win32.cxx
-Fl_cocoa.o:	Fl_cocoa.mm
-fl_color.o:	fl_color_mac.cxx fl_color_win32.cxx
-fl_dnd.o:	fl_dnd_win32.cxx fl_dnd_x.cxx
-fl_draw_image.o: fl_draw_image_mac.cxx fl_draw_image_win32.cxx
-fl_font.o:	fl_font_mac.cxx fl_font_x.cxx fl_font_xft.cxx fl_font_win32.cxx
-fl_read_image.o: fl_read_image_mac.cxx fl_read_image_win32.cxx
-fl_set_fonts.o:	fl_set_fonts_mac.cxx fl_set_fonts_x.cxx \
-		fl_set_fonts_xft.cxx fl_set_fonts_win32.cxx
-Fl_Printer.o: Fl_GDI_Printer.cxx Fl_PostScript.cxx
-Fl_Quartz_Printer.o:	Fl_Quartz_Printer.mm
-fl_arci.o:	../FL/mac.H ../FL/win32.H
-Fl_arg.o:	../FL/mac.H ../FL/win32.H
-fl_ask.o:	../FL/mac.H ../FL/win32.H
-Fl_Bitmap.o:	../FL/mac.H ../FL/win32.H
-fl_color.o:	../FL/mac.H ../FL/win32.H
-fl_cursor.o:	../FL/mac.H ../FL/win32.H
-fl_dnd.o:	../FL/mac.H ../FL/win32.H
-Fl.o:	../FL/mac.H ../FL/win32.H
-Fl_Double_Window.o:	../FL/mac.H ../FL/win32.H
-fl_draw_image.o:	../FL/mac.H ../FL/win32.H
-fl_draw_image_mac.o:	../FL/mac.H ../FL/win32.H
-fl_draw_image_win32.o:	../FL/mac.H ../FL/win32.H
-fl_draw_pixmap.o:	../FL/mac.H ../FL/win32.H
-fl_encoding_latin1.o:	../FL/mac.H ../FL/win32.H
-fl_encoding_mac_roman.o:   ../FL/mac.H ../FL/win32.H
-Fl_File_Chooser2.o:	../FL/mac.H ../FL/win32.H
-fl_font.o:	../FL/mac.H ../FL/win32.H
-Fl_get_key.o:	../FL/mac.H ../FL/win32.H
-Fl_get_system_colors.o:	../FL/mac.H ../FL/win32.H
-Fl_Gl_Choice.o:	../FL/mac.H ../FL/win32.H
-Fl_Gl_Overlay.o:	../FL/mac.H ../FL/win32.H
-Fl_Gl_Window.o:	../FL/mac.H ../FL/win32.H
-Fl_grab.o:	../FL/mac.H ../FL/win32.H
-Fl_Image.o:	../FL/mac.H ../FL/win32.H
-fl_line_style.o:	../FL/mac.H ../FL/win32.H
-Fl_Menu_Window.o:	../FL/mac.H ../FL/win32.H
-fl_overlay.o:	../FL/mac.H ../FL/win32.H
-fl_overlay_visual.o:	../FL/mac.H ../FL/win32.H
-Fl_Overlay_Window.o:	../FL/mac.H ../FL/win32.H
-Fl_own_colormap.o:	../FL/mac.H ../FL/win32.H
-Fl_Pixmap.o:	../FL/mac.H ../FL/win32.H
-Fl_Printer.o:  ../FL/mac.H ../FL/win32.H
-fl_read_image.o:	../FL/mac.H ../FL/win32.H
-fl_read_image_mac.o:	../FL/mac.H ../FL/win32.H
-fl_read_image_win32.o:	../FL/mac.H ../FL/win32.H
-fl_rect.o:	../FL/mac.H ../FL/win32.H
-fl_scroll_area.o:	../FL/mac.H ../FL/win32.H
-fl_set_font.o:	../FL/mac.H ../FL/win32.H
-fl_set_fonts.o:	../FL/mac.H ../FL/win32.H
-fl_shortcut.o:	../FL/mac.H ../FL/win32.H
-fl_vertex.o:	../FL/mac.H ../FL/win32.H
-Fl_visual.o:	../FL/mac.H ../FL/win32.H
-Fl_Window_fullscreen.o:	../FL/mac.H ../FL/win32.H
-Fl_Window_iconize.o:	../FL/mac.H ../FL/win32.H
-Fl_x.o:	../FL/mac.H ../FL/win32.H
-gl_draw.o:	../FL/mac.H ../FL/win32.H
-gl_start.o:	../FL/mac.H ../FL/win32.H
-
-################################################################
-
-install: $(LIBNAME) $(DSONAME) \
-	$(FLLIBNAME) $(FLDSONAME) \
-	$(GLLIBNAME) $(GLDSONAME) \
-	$(IMGLIBNAME) $(IMGDSONAME) 
-	echo "Installing libraries in $(DESTDIR)$(libdir)..."
-	-$(INSTALL_DIR) $(DESTDIR)$(libdir)
-	-$(INSTALL_DIR) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(libdir)/$(LIBBASENAME)
-	$(INSTALL_LIB) $(LIBNAME) $(DESTDIR)$(libdir)
-	$(INSTALL_LIB) $(FLLIBNAME) $(DESTDIR)$(libdir)
-	$(INSTALL_LIB) $(IMGLIBNAME) $(DESTDIR)$(libdir)
-	$(RANLIB) $(DESTDIR)$(libdir)/$(LIBBASENAME)
-	$(RANLIB) $(DESTDIR)$(libdir)/$(FLLIBBASENAME)
-	if test x$(GLLIBNAME) != x; then \
-		$(INSTALL_LIB) $(GLLIBNAME) $(DESTDIR)$(libdir); \
-		$(RANLIB) $(DESTDIR)$(libdir)/$(GLLIBBASENAME); \
-	fi
-	$(RANLIB) $(DESTDIR)$(libdir)/$(IMGLIBBASENAME)
-	if test x$(DSONAME) = xlibfltk.so.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.so*;\
-		$(INSTALL_LIB) libfltk.so.1.3 $(DESTDIR)$(libdir); \
-		$(LN) libfltk.so.1.3 $(DESTDIR)$(libdir)/libfltk.so;\
-	fi
-	if test x$(DSONAME) = xlibfltk.sl.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.sl*;\
-		$(INSTALL_LIB) libfltk.sl.1.3 $(DESTDIR)$(libdir); \
-		$(LN) libfltk.sl.1.3 $(DESTDIR)$(libdir)/libfltk.sl;\
-	fi
-	if test x$(DSONAME) = xlibfltk.1.3.dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.*dylib;\
-		$(INSTALL_LIB) libfltk.1.3.dylib $(DESTDIR)$(libdir); \
-		$(LN) libfltk.1.3.dylib $(DESTDIR)$(libdir)/libfltk.dylib;\
-	fi
-	if test x$(DSONAME) = xlibfltk_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_s.a;\
-		$(INSTALL_LIB) libfltk_s.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(DSONAME) = xcygfltknox-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(DSONAME);\
-		$(INSTALL_LIB) $(DSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk.dll.a;\
-		$(INSTALL_LIB) libfltk.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(DSONAME) = xmgwfltknox-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(DSONAME);\
-		$(INSTALL_LIB) $(DSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk.dll.a;\
-		$(INSTALL_LIB) libfltk.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms.so.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.so*;\
-		$(INSTALL_LIB) libfltk_forms.so.1.3 $(DESTDIR)$(libdir); \
-		$(LN) libfltk_forms.so.1.3 $(DESTDIR)$(libdir)/libfltk_forms.so;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms.sl.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.sl*;\
-		$(INSTALL_LIB) libfltk_forms.sl.1.3 $(DESTDIR)$(libdir); \
-		$(LN) libfltk_forms.sl.1.3 $(DESTDIR)$(libdir)/libfltk_forms.sl;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms.1.3.dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.*dylib;\
-		$(INSTALL_LIB) libfltk_forms.1.3.dylib $(DESTDIR)$(libdir); \
-		$(LN) libfltk_forms.1.3.dylib $(DESTDIR)$(libdir)/libfltk_forms.dylib;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms_s.a;\
-		$(INSTALL_LIB) libfltk_forms_s.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(FLDSONAME) = xcygfltknox_forms-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(FLDSONAME);\
-		$(INSTALL_LIB) $(FLDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.dll.a;\
-		$(INSTALL_LIB) libfltk_forms.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(FLDSONAME) = xmgwfltknox_forms-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(FLDSONAME);\
-		$(INSTALL_LIB) $(FLDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.dll.a;\
-		$(INSTALL_LIB) libfltk_forms.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.so.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.so*;\
-		$(INSTALL_LIB) libfltk_gl.so.1.3 $(DESTDIR)$(libdir); \
-		$(LN) libfltk_gl.so.1.3 $(DESTDIR)$(libdir)/libfltk_gl.so;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.sl.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.sl*;\
-		$(INSTALL_LIB) libfltk_gl.sl.1.3 $(DESTDIR)$(libdir); \
-		$(LN) libfltk_gl.sl.1.3 $(DESTDIR)$(libdir)/libfltk_gl.sl;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.1.3.dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.*dylib;\
-		$(INSTALL_LIB) libfltk_gl.1.3.dylib $(DESTDIR)$(libdir); \
-		$(LN) libfltk_gl.1.3.dylib $(DESTDIR)$(libdir)/libfltk_gl.dylib;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl_s.a;\
-		$(INSTALL_LIB) libfltk_gl_s.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(GLDSONAME) = xcygfltknox_gl-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(GLDSONAME);\
-		$(INSTALL_LIB) $(GLDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.dll.a;\
-		$(INSTALL_LIB) libfltk_gl.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(GLDSONAME) = xmgwfltknox_gl-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(GLDSONAME);\
-		$(INSTALL_LIB) $(GLDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.dll.a;\
-		$(INSTALL_LIB) libfltk_gl.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.so.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.so*;\
-		$(INSTALL_LIB) libfltk_images.so.1.3 $(DESTDIR)$(libdir); \
-		$(LN) libfltk_images.so.1.3 $(DESTDIR)$(libdir)/libfltk_images.so;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.sl.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.sl*;\
-		$(INSTALL_LIB) libfltk_images.sl.1.3 $(DESTDIR)$(libdir); \
-		$(LN) libfltk_images.sl.1.3 $(DESTDIR)$(libdir)/libfltk_images.sl;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.1.3.dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.*dylib;\
-		$(INSTALL_LIB) libfltk_images.1.3.dylib $(DESTDIR)$(libdir); \
-		$(LN) libfltk_images.1.3.dylib $(DESTDIR)$(libdir)/libfltk_images.dylib;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images_s.a;\
-		$(INSTALL_LIB) libfltk_images_s.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(IMGDSONAME) = xcygfltknox_images-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(IMGDSONAME); \
-		$(INSTALL_LIB) $(IMGDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
-		$(INSTALL_LIB) libfltk_images.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(IMGDSONAME) = xmgwfltknox_images-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(IMGDSONAME); \
-		$(INSTALL_LIB) $(IMGDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
-		$(INSTALL_LIB) libfltk_images.dll.a $(DESTDIR)$(libdir); \
-	fi
-
-
-uninstall:
-	echo "Uninstalling libraries..."
-	$(RM) $(DESTDIR)$(libdir)/$(LIBBASENAME)
-	if test x$(DSONAME) = xlibfltk.so.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.so*;\
-	fi
-	if test x$(DSONAME) = xlibfltk.sl.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.sl*;\
-	fi
-	if test x$(DSONAME) = xlibfltk.1.3.dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.*dylib;\
-	fi
-	if test x$(DSONAME) = xlibfltk_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_s.a;\
-	fi
-	if test x$(DSONAME) = xcygfltknox-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(DSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk.dll.a;\
-	fi
-	if test x$(DSONAME) = xcygfltk-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(DSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk.dll.a;\
-	fi
-	if test x$(DSONAME) = xmgwfltknox-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(DSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk.dll.a;\
-	fi
-	$(RM) $(DESTDIR)$(libdir)/$(FLLIBBASENAME);
-	if test x$(FLDSONAME) = xlibfltk_forms.so.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.so*;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms.sl.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.sl*;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms.1.3.dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.*dylib;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms_s.a;\
-	fi
-	if test x$(FLDSONAME) = xcygfltknox_forms-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(FLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.dll.a;\
-	fi
-	if test x$(FLDSONAME) = xcygfltk_forms-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(FLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.dll.a;\
-	fi
-	if test x$(FLDSONAME) = xmgwfltknox_forms-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(FLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.dll.a;\
-	fi
-	if test x$(GLLIBNAME) != x; then\
-		$(RM) $(DESTDIR)$(libdir)/$(GLLIBBASENAME);\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.so.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.so*;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.sl.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.sl*;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.1.3.dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.*dylib;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl_s.a;\
-	fi
-	if test x$(GLDSONAME) = xcygfltknox_gl-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(GLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.dll.a;\
-	fi
-	if test x$(GLDSONAME) = xcygfltk_gl-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(GLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.dll.a;\
-	fi
-	if test x$(GLDSONAME) = xmgwfltknox_gl-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(GLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.dll.a;\
-	fi
-	if test x$(IMGLIBNAME) != x; then\
-		$(RM) $(DESTDIR)$(libdir)/$(IMGLIBBASENAME);\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.so.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.so*;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.sl.1.3; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.sl*;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.1.3.dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.*dylib;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images_s.a;\
-	fi
-	if test x$(IMGDSONAME) = xcygfltknox_images-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(IMGDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
-	fi
-	if test x$(IMGDSONAME) = xcygfltk_images-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(IMGDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
-	fi
-	if test x$(IMGDSONAME) = xmgwfltknox_images-1.3.dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(IMGDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
-	fi
-
-#
-# End of "$Id: Makefile 8389 2011-02-06 14:08:08Z manolo $".
-#
diff --git a/common/fltk/src/aimm.h b/common/fltk/src/aimm.h
deleted file mode 100644
index 0251255..0000000
--- a/common/fltk/src/aimm.h
+++ /dev/null
@@ -1,431 +0,0 @@
-//
-// "$Id: aimm.h 7913 2010-11-29 18:18:27Z greg.ercolano $"
-//
-// Standard dialog header file for the UTF-8 Fast Light Tool Kit (FLTK-UTF8).
-//
-// Copyright 2009-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version
-// with exceptions that allow sub-classing and static linking in
-// non-LGPL compliant software. These exceptions are subject to
-// conditions, see the FLTK License for more details.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the FLTK
-// License for more details.
-//
-// You should have received a copy of the FLTK License along with
-// this library; if not, write to  OksiD Software, Jean-Marc Lienher,
-// Rue de la Cheminee 1, CH-2065 Savagnier, Switzerland.
-//
-// Please report all bugs and problems to "oksid@bluewin.ch".
-//
-
-#ifndef AIMM_H
-#  define AIMM_H
-//#  define HANDLE_PTR HANDLE* 
-//#  define DWORD_PTR DWORD*
-//#  define CLSCTX_INPROC_SERVER 0x1
-const GUID IID_IActiveIMMApp = { 0x8c0e040, 0x62d1, 0x11d1, {0x93, 0x26, 0x00, 0x60, 0xb0, 0x67, 0xb8, 0x6e}};
-const GUID CLSID_CActiveIMM = { 0x4955dd33, 0xb159, 0x11d0, {0x8f, 0xcf, 0x00, 0xaa, 0x00, 0x6b, 0xcc, 0x59}};
-/*
-	class IUnknown
-    {
-    public:
-        
-        virtual long __stdcall QueryInterface( 
-            const GUID & riid,
-            void **ppvObject) = 0;
-        
-        virtual ULONG __stdcall AddRef( void) = 0;
-        
-        virtual ULONG __stdcall Release( void) = 0;
-    };
-
-extern "C" __declspec(dllimport) long __stdcall CoInitialize(void far *pvReserved);
-extern "C" __declspec(dllimport) long __stdcall CoCreateInstance(const GUID & rclsid, IUnknown * pUnkOuter,
-                    DWORD dwClsContext, const GUID & riid, LPVOID FAR* ppv);
-
-*/
-
-    class IActiveIMMApp : public IUnknown
-    {
-    public:
-        virtual long __stdcall AssociateContext( 
-             HWND hWnd,
-             HIMC hIME,
-             HIMC  *phPrev) = 0;
-        
-        virtual long __stdcall ConfigureIMEA( 
-             HKL hKL,
-             HWND hWnd,
-             DWORD dwMode,
-             void  *pData) = 0;
-        
-        virtual long __stdcall ConfigureIMEW( 
-             HKL hKL,
-             HWND hWnd,
-             DWORD dwMode,
-             void  *pData) = 0;
-        
-        virtual long __stdcall CreateContext( 
-             HIMC  *phIMC) = 0;
-        
-        virtual long __stdcall DestroyContext( 
-             HIMC hIME) = 0;
-        
-        virtual long __stdcall EnumRegisterWordA( 
-             HKL hKL,
-             LPSTR szReading,
-             DWORD dwStyle,
-             LPSTR szRegister,
-             LPVOID pData,
-             void  **pEnum) = 0;
-        
-        virtual long __stdcall EnumRegisterWordW( 
-             HKL hKL,
-             LPWSTR szReading,
-             DWORD dwStyle,
-             LPWSTR szRegister,
-             LPVOID pData,
-             void  **pEnum) = 0;
-        
-        virtual long __stdcall EscapeA( 
-             HKL hKL,
-             HIMC hIMC,
-             UINT uEscape,
-            /* [out][in] */ LPVOID pData,
-             LRESULT  *plResult) = 0;
-        
-        virtual long __stdcall EscapeW( 
-             HKL hKL,
-             HIMC hIMC,
-             UINT uEscape,
-            /* [out][in] */ LPVOID pData,
-             LRESULT  *plResult) = 0;
-        
-        virtual long __stdcall GetCandidateListA( 
-             HIMC hIMC,
-             DWORD dwIndex,
-             UINT uBufLen,
-             void  *pCandList,
-             UINT  *puCopied) = 0;
-        
-        virtual long __stdcall GetCandidateListW( 
-             HIMC hIMC,
-             DWORD dwIndex,
-             UINT uBufLen,
-             void  *pCandList,
-             UINT  *puCopied) = 0;
-        
-        virtual long __stdcall GetCandidateListCountA( 
-             HIMC hIMC,
-             DWORD  *pdwListSize,
-             DWORD  *pdwBufLen) = 0;
-        
-        virtual long __stdcall GetCandidateListCountW( 
-             HIMC hIMC,
-             DWORD  *pdwListSize,
-             DWORD  *pdwBufLen) = 0;
-        
-        virtual long __stdcall GetCandidateWindow( 
-             HIMC hIMC,
-             DWORD dwIndex,
-             void  *pCandidate) = 0;
-        
-        virtual long __stdcall GetCompositionFontA( 
-             HIMC hIMC,
-             LOGFONTA  *plf) = 0;
-        
-        virtual long __stdcall GetCompositionFontW( 
-             HIMC hIMC,
-             LOGFONTW  *plf) = 0;
-        
-        virtual long __stdcall GetCompositionStringA( 
-             HIMC hIMC,
-             DWORD dwIndex,
-             DWORD dwBufLen,
-             LONG  *plCopied,
-             LPVOID pBuf) = 0;
-        
-        virtual long __stdcall GetCompositionStringW( 
-             HIMC hIMC,
-             DWORD dwIndex,
-             DWORD dwBufLen,
-             LONG  *plCopied,
-             LPVOID pBuf) = 0;
-        
-        virtual long __stdcall GetCompositionWindow( 
-             HIMC hIMC,
-             void  *pCompForm) = 0;
-        
-        virtual long __stdcall GetContext( 
-             HWND hWnd,
-             HIMC  *phIMC) = 0;
-        
-        virtual long __stdcall GetConversionListA( 
-             HKL hKL,
-             HIMC hIMC,
-             LPSTR pSrc,
-             UINT uBufLen,
-             UINT uFlag,
-             void  *pDst,
-             UINT  *puCopied) = 0;
-        
-        virtual long __stdcall GetConversionListW( 
-             HKL hKL,
-             HIMC hIMC,
-             LPWSTR pSrc,
-             UINT uBufLen,
-             UINT uFlag,
-             void  *pDst,
-             UINT  *puCopied) = 0;
-        
-        virtual long __stdcall GetConversionStatus( 
-             HIMC hIMC,
-             DWORD  *pfdwConversion,
-             DWORD  *pfdwSentence) = 0;
-        
-        virtual long __stdcall GetDefaultIMEWnd( 
-             HWND hWnd,
-             HWND  *phDefWnd) = 0;
-        
-        virtual long __stdcall GetDescriptionA( 
-             HKL hKL,
-             UINT uBufLen,
-             LPSTR szDescription,
-             UINT  *puCopied) = 0;
-        
-        virtual long __stdcall GetDescriptionW( 
-             HKL hKL,
-             UINT uBufLen,
-             LPWSTR szDescription,
-             UINT  *puCopied) = 0;
-        
-        virtual long __stdcall GetGuideLineA( 
-             HIMC hIMC,
-             DWORD dwIndex,
-             DWORD dwBufLen,
-             LPSTR pBuf,
-             DWORD  *pdwResult) = 0;
-        
-        virtual long __stdcall GetGuideLineW( 
-             HIMC hIMC,
-             DWORD dwIndex,
-             DWORD dwBufLen,
-             LPWSTR pBuf,
-             DWORD  *pdwResult) = 0;
-        
-        virtual long __stdcall GetIMEFileNameA( 
-             HKL hKL,
-             UINT uBufLen,
-             LPSTR szFileName,
-             UINT  *puCopied) = 0;
-        
-        virtual long __stdcall GetIMEFileNameW( 
-             HKL hKL,
-             UINT uBufLen,
-             LPWSTR szFileName,
-             UINT  *puCopied) = 0;
-        
-        virtual long __stdcall GetOpenStatus( 
-             HIMC hIMC) = 0;
-        
-        virtual long __stdcall GetProperty( 
-             HKL hKL,
-             DWORD fdwIndex,
-             DWORD  *pdwProperty) = 0;
-        
-        virtual long __stdcall GetRegisterWordStyleA( 
-             HKL hKL,
-             UINT nItem,
-             STYLEBUFA  *pStyleBuf,
-             UINT  *puCopied) = 0;
-        
-        virtual long __stdcall GetRegisterWordStyleW( 
-             HKL hKL,
-             UINT nItem,
-             STYLEBUFW  *pStyleBuf,
-             UINT  *puCopied) = 0;
-        
-        virtual long __stdcall GetStatusWindowPos( 
-             HIMC hIMC,
-             POINT  *pptPos) = 0;
-        
-        virtual long __stdcall GetVirtualKey( 
-             HWND hWnd,
-             UINT  *puVirtualKey) = 0;
-        
-        virtual long __stdcall InstallIMEA( 
-             LPSTR szIMEFileName,
-             LPSTR szLayoutText,
-             HKL  *phKL) = 0;
-        
-        virtual long __stdcall InstallIMEW( 
-             LPWSTR szIMEFileName,
-             LPWSTR szLayoutText,
-             HKL  *phKL) = 0;
-        
-        virtual long __stdcall IsIME( 
-             HKL hKL) = 0;
-        
-        virtual long __stdcall IsUIMessageA( 
-             HWND hWndIME,
-             UINT msg,
-             WPARAM wParam,
-             LPARAM lParam) = 0;
-        
-        virtual long __stdcall IsUIMessageW( 
-             HWND hWndIME,
-             UINT msg,
-             WPARAM wParam,
-             LPARAM lParam) = 0;
-        
-        virtual long __stdcall NotifyIME( 
-             HIMC hIMC,
-             DWORD dwAction,
-             DWORD dwIndex,
-             DWORD dwValue) = 0;
-        
-        virtual long __stdcall RegisterWordA( 
-             HKL hKL,
-             LPSTR szReading,
-             DWORD dwStyle,
-             LPSTR szRegister) = 0;
-        
-        virtual long __stdcall RegisterWordW( 
-             HKL hKL,
-             LPWSTR szReading,
-             DWORD dwStyle,
-             LPWSTR szRegister) = 0;
-        
-        virtual long __stdcall ReleaseContext( 
-             HWND hWnd,
-             HIMC hIMC) = 0;
-        
-        virtual long __stdcall SetCandidateWindow( 
-             HIMC hIMC,
-             void  *pCandidate) = 0;
-        
-        virtual long __stdcall SetCompositionFontA( 
-             HIMC hIMC,
-             LOGFONTA  *plf) = 0;
-        
-        virtual long __stdcall SetCompositionFontW( 
-             HIMC hIMC,
-             LOGFONTW  *plf) = 0;
-        
-        virtual long __stdcall SetCompositionStringA( 
-             HIMC hIMC,
-             DWORD dwIndex,
-             LPVOID pComp,
-             DWORD dwCompLen,
-             LPVOID pRead,
-             DWORD dwReadLen) = 0;
-        
-        virtual long __stdcall SetCompositionStringW( 
-             HIMC hIMC,
-             DWORD dwIndex,
-             LPVOID pComp,
-             DWORD dwCompLen,
-             LPVOID pRead,
-             DWORD dwReadLen) = 0;
-        
-        virtual long __stdcall SetCompositionWindow( 
-             HIMC hIMC,
-             void  *pCompForm) = 0;
-        
-        virtual long __stdcall SetConversionStatus( 
-             HIMC hIMC,
-             DWORD fdwConversion,
-             DWORD fdwSentence) = 0;
-        
-        virtual long __stdcall SetOpenStatus( 
-             HIMC hIMC,
-             BOOL fOpen) = 0;
-        
-        virtual long __stdcall SetStatusWindowPos( 
-             HIMC hIMC,
-             POINT  *pptPos) = 0;
-        
-        virtual long __stdcall SimulateHotKey( 
-             HWND hWnd,
-             DWORD dwHotKeyID) = 0;
-        
-        virtual long __stdcall UnregisterWordA( 
-             HKL hKL,
-             LPSTR szReading,
-             DWORD dwStyle,
-             LPSTR szUnregister) = 0;
-        
-        virtual long __stdcall UnregisterWordW( 
-             HKL hKL,
-             LPWSTR szReading,
-             DWORD dwStyle,
-             LPWSTR szUnregister) = 0;
-        
-        virtual long __stdcall Activate( 
-             BOOL fRestoreLayout) = 0;
-        
-        virtual long __stdcall Deactivate( void) = 0;
-        
-        virtual long __stdcall OnDefWindowProc( 
-             HWND hWnd,
-             UINT Msg,
-             WPARAM wParam,
-             LPARAM lParam,
-             LRESULT  *plResult) = 0;
-        
-        virtual long __stdcall FilterClientWindows( 
-             ATOM  *aaClassList,
-             UINT uSize) = 0;
-        
-        virtual long __stdcall GetCodePageA( 
-             HKL hKL,
-             UINT  *uCodePage) = 0;
-        
-        virtual long __stdcall GetLangId( 
-             HKL hKL,
-             WORD  *plid) = 0;
-        
-        virtual long __stdcall AssociateContextEx( 
-             HWND hWnd,
-             HIMC hIMC,
-             DWORD dwFlags) = 0;
-        
-        virtual long __stdcall DisableIME( 
-             DWORD idThread) = 0;
-        
-        virtual long __stdcall GetImeMenuItemsA( 
-             HIMC hIMC,
-             DWORD dwFlags,
-             DWORD dwType,
-             void  *pImeParentMenu,
-             void  *pImeMenu,
-             DWORD dwSize,
-             DWORD  *pdwResult) = 0;
-        
-        virtual long __stdcall GetImeMenuItemsW( 
-             HIMC hIMC,
-             DWORD dwFlags,
-             DWORD dwType,
-             void  *pImeParentMenu,
-            void  *pImeMenu,
-             DWORD dwSize,
-             DWORD  *pdwResult) = 0;
-        
-        virtual long __stdcall EnumInputContext( 
-             DWORD idThread,
-             void  **ppEnum) = 0;
-        
-    };
-
-#endif
-
-//
-// End of "$Id: aimm.h 7913 2010-11-29 18:18:27Z greg.ercolano $".
-//
diff --git a/common/fltk/src/allfiles.xbm b/common/fltk/src/allfiles.xbm
deleted file mode 100644
index 26373b6..0000000
--- a/common/fltk/src/allfiles.xbm
+++ /dev/null
@@ -1,6 +0,0 @@
-#define allfiles_width 16
-#define allfiles_height 16
-static unsigned char allfiles_bits[] = {
-   0xfc, 0x3f, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x84, 0x21, 0xa4, 0x25,
-   0xc4, 0x23, 0xf4, 0x2f, 0xf4, 0x2f, 0xc4, 0x23, 0xa4, 0x25, 0x84, 0x21,
-   0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0xfc, 0x3f};
diff --git a/common/fltk/src/cgdebug.h b/common/fltk/src/cgdebug.h
deleted file mode 100644
index 469beb5..0000000
--- a/common/fltk/src/cgdebug.h
+++ /dev/null
@@ -1,215 +0,0 @@
-//
-// "$Id: cgdebug.h 7913 2010-11-29 18:18:27Z greg.ercolano $"
-//
-// OS X Core Graphics debugging help for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This file allows easier debugging of Mac OS X Core Graphics 
-// code. This file is normally not included into any FLTK builds,
-// but since it has proven to be tremendously useful in debugging
-// the FLTK port to "Quartz", I decided to add this file in case
-// more bugs show up.
-//
-// This header is activated by adding the following
-// line to "config.h"
-//   #include "src/cgdebug.h"
-//
-// Running "./configure" will remove this line from "config.h".
-//
-// When used erreanously, Core Graphics prints warnings to 
-// stderr. This is helpful, however it is not possible to 
-// associate a line number or source file with the warning message.
-// This headr file outputs a trace of CG calls, interweaveing
-// them with CG warnings.
-//
-// Matthias
-
-#ifndef CGDEBUG
-#define CGDEBUG
-
-#include <stdio.h>
-#include <Carbon/Carbon.h>
-
-//+BitmapContextCreate
-//+BitmapContextGetData
-// ClipCGContextToRegion
-// QDBeginCGContext
-// QDEndCGContext
-
-//+AddArc
-//+AddLineToPoint
-// ClipToRect
-// ClosePath
-//+ConcatCTM
-//+DrawImage
-// FillPath
-// FillRect
-// Flush
-//+GetCTM
-// MoveToPoint
-//+Release
-// RestoreGState
-// SaveGState
-//+ScaleCTM
-//+SetLineCap
-//+SetLineDash
-//+SetLineJoin
-//+SetLineWidth
-//+SetRGBFillColor
-//+SetRGBStrokeColor
-//+SetShouldAntialias
-//+SetTextMatrix
-//+StrokePath
-//+TranslateCTM
-
-inline OSStatus dbgLocation(const char *file, int line) 
-{
-  fprintf(stderr, "%s:%d ", file, line);
-  return 0;
-}
-
-inline OSStatus dbgEndl()     
-{
-  fprintf(stderr, "\n");
-  return 0;
-}
-
-
-inline void dbgCGContextClipToRect(CGContextRef a, CGRect b)
-{
-  CGContextClipToRect(a, b);
-}
-
-#define CGContextClipToRect(a, b) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextClipToRect(a, b); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextFillRect(CGContextRef a, CGRect b)
-{
-  CGContextFillRect(a, b);
-}
-
-#define CGContextFillRect(a, b) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextFillRect(a, b); \
-  fprintf(stderr, "\n"); }
-
-inline OSStatus dbgQDEndCGContext(CGrafPtr a, CGContextRef *b) 
-{
-  return QDEndCGContext(a, b);
-}
-
-#define QDEndCGContext(a, b) ( \
-  dbgLocation(__FILE__, __LINE__) + \
-  dbgQDEndCGContext(a, b) + \
-  dbgEndl() )
-
-inline OSStatus dbgQDBeginCGContext(CGrafPtr a, CGContextRef *b) 
-{
-  return QDBeginCGContext(a, b);
-}
-
-#define QDBeginCGContext(a, b) ( \
-  dbgLocation(__FILE__, __LINE__) + \
-  dbgQDBeginCGContext(a, b) + \
-  dbgEndl() )
-
-inline void dbgClipCGContextToRegion(CGContextRef a, const Rect *b, RgnHandle c) 
-{
-  ClipCGContextToRegion(a, b, c);
-}
-
-#define ClipCGContextToRegion(a, b, c) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgClipCGContextToRegion(a, b, c); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextMoveToPoint(CGContextRef context, float x, float y)
-{
-  CGContextMoveToPoint(context, x, y);
-}
-
-#define CGContextMoveToPoint(a, b, c) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextMoveToPoint(a, b, c); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextFillPath(CGContextRef context)
-{ 
-  CGContextFillPath(context);
-}
-
-#define CGContextFillPath(a) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextFillPath(a); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextClosePath(CGContextRef context)
-{ 
-  CGContextClosePath(context);
-}
-
-#define CGContextClosePath(a) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextClosePath(a); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextFlush(CGContextRef context)
-{ 
-  CGContextFlush(context);
-}
-
-#define CGContextFlush(a) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextFlush(a); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextSaveGState(CGContextRef context)
-{ 
-  CGContextSaveGState(context);
-}
-
-#define CGContextSaveGState(a) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextSaveGState(a); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextRestoreGState(CGContextRef context)
-{ 
-  CGContextRestoreGState(context);
-}
-
-#define CGContextRestoreGState(a) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextRestoreGState(a); \
-  fprintf(stderr, "\n"); }
-
-
-#endif
-
-//
-// End of "$Id: cgdebug.h 7913 2010-11-29 18:18:27Z greg.ercolano $".
-//
-
diff --git a/common/fltk/src/cmap.cxx b/common/fltk/src/cmap.cxx
deleted file mode 100644
index 8bd489e..0000000
--- a/common/fltk/src/cmap.cxx
+++ /dev/null
@@ -1,181 +0,0 @@
-//
-// "$Id: cmap.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Colormap generation program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This program produces the contents of "fl_cmap.h" as stdout
-
-// #include <gl/gl.h>
-#include <stdio.h>
-
-// This table is initialized with color values I got by reading the
-// colormap on an IRIX 4.3 machine:
-
-// "full intensity colors" have been turned down some to make white
-// background less intense by default.  The hope is that this will make
-// fltk programs more friendly on color-adjusted screens.  If you want
-// pure colors you should get them out of the colormap.
-
-//#define III 244 // maximum intensity of the basic colors
-
-// that results in errors and unshared colormap entries, so full intensity:
-#define III 255 // maximum intensity of the basic colors
-
-static short cmap[256][3] = {
-// 3-bit colormap:
-  {  0,  0,  0},	// black
-  {III,  0,  0},	// red
-  {  0,III,  0},	// green
-  {III,III,  0},	// yellow
-  {  0,  0,III},	// blue
-  {III,  0,III},	// magenta
-  {  0,III,III},	// cyan
-  {III,III,III},	// white
-// pastel versions of those colors, from SGI's standard color map:
-  { 85, 85, 85},	// 1/3 gray
-  {198,113,113},	// salmon? pale red?
-  {113,198,113},	// pale green
-  {142,142, 56},	// khaki
-  {113,113,198},	// pale blue
-  {142, 56,142},	// purple, orchid, pale magenta
-  { 56,142,142},	// cadet blue, aquamarine, pale cyan
-// The next location is used for FL_SELECTION_COLOR. It formerly was 2/3 gray
-// but this is changed to be the Windows blue color. This allows the default
-// behavior on both X and Windows to match:
-  {  0,  0,128},
-//{170,170,170},	// old 2/3 gray color
-// These next 16 are the FL_FREE_COLOR area. In some versions of fltk
-// these were filled with random colors that a Irix 5.3 machine placed
-// in these locations. Other versions of fltk filled this with the 1/3
-// gray above to discourage their use. This newest version uses colors
-// that NewTek has assigned for their GUI:
-#if 0
-  // The Irix 5.3 colors:
-  { 16, 16, 16},
-  {128, 40,128},
-  {198, 30, 30},
-  { 66, 30, 30},
-  {176,140,140},
-  {  0, 20, 20},
-  { 20, 10, 10},
-  { 40, 20, 20},
-  { 60, 30, 30},
-  {  0, 80, 80},
-  {  0, 40, 40},
-  { 20, 20,  0},
-  { 40, 40,  0},
-  { 80, 80, 10},
-  {150,150, 20},
-  {160, 10, 10},
-#else
-  // The NewTek colors: (from George Yohng)
-  {168,168,152},
-  {232,232,216},
-  {104,104, 88},
-  {152,168,168},
-  {216,232,232},
-  { 88,104,104},
-  {156,156,168},
-  {220,220,232},
-  { 92, 92,104},
-  {156,168,156},
-  {220,232,220},
-  { 92,104, 92},
-  {144,144,144},
-  {192,192,192},
-  { 80, 80, 80},
-  {160,160,160},
-#endif
-// The rest of the colormap is a gray ramp and table, filled in below:
-};
-
-// This is Fl::background from Fl_get_system_colors.cxx, with modifications:
-
-#define FL_GRAY_RAMP 32
-#define FL_NUM_GRAY  24
-#define FL_GRAY 49 // old value is 47
-typedef unsigned char uchar;
-#include <math.h>
-
-void background(uchar r, uchar g, uchar b) {
-  // replace the gray ramp so that color 47 (by default 2/3) is this color
-  if (!r) r = 1; else if (r==255) r = 254;
-  double powr = log(r/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  if (!g) g = 1; else if (g==255) g = 254;
-  double powg = log(g/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  if (!b) b = 1; else if (b==255) b = 254;
-  double powb = log(b/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  for (int i = 0; i < FL_NUM_GRAY; i++) {
-    double gray = i/(FL_NUM_GRAY-1.0);
-    cmap[i+FL_GRAY_RAMP][0] = uchar(pow(gray,powr)*255+.5);
-    cmap[i+FL_GRAY_RAMP][1] = uchar(pow(gray,powg)*255+.5);
-    cmap[i+FL_GRAY_RAMP][2] = uchar(pow(gray,powb)*255+.5);
-  }
-}
-
-int main() {
-  int i,r,g,b;
-#if 0
-  /* Read colormap colors into internal table */
-  long cmwin;
-  noport();
-  cmwin = winopen("CM");
-  for (i=0; i<256; i++)
-    getmcolor(i,&cmap[i][0],&cmap[i][1],&cmap[i][2]);
-  winclose(cmwin);
-#endif
-// overwrite the X allocation area with one color so people are
-// discouraged from using it:
-  //for (i=16; i<32; i++) {cmap[i][0]=cmap[i][1]=cmap[i][2] = 85;}
-
-  // fill in the gray ramp:
-  background(0xc0, 0xc0, 0xc0); // microsoft colors
-  // background(170, 170, 170); // old fltk colors
-  // copy the 1/3 and 2/3 gray to the closest locations in gray ramp:
-  cmap[39][0] = cmap[39][1] = cmap[39][2] = 85;
-  cmap[47][0] = cmap[47][1] = cmap[47][2] = 170;
-
-  // fill in the color cube
-  i = 56;
-  for (b=0; b<5; b++)
-    for (r=0; r<5; r++)
-      for (g=0; g<8; g++) {
-	cmap[i][0] = r*255/4;
-	cmap[i][1] = g*255/7;
-	cmap[i][2] = b*255/4;
-	i++;
-      }
-
-  for (i=0; i<256; i++) {
-    printf("\t0x%02x%02x%02x00",cmap[i][0],cmap[i][1],cmap[i][2]);
-    if (i < 255) printf(",\n");
-  }
-  printf("\n");
-  return 0;
-}
-
-//
-// End of "$Id: cmap.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/d1.xbm b/common/fltk/src/d1.xbm
deleted file mode 100644
index a0e67f0..0000000
--- a/common/fltk/src/d1.xbm
+++ /dev/null
@@ -1,6 +0,0 @@
-#define d1_width 16
-#define d1_height 16
-static unsigned char d1_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x38, 0x00, 0x78, 0x00,
-   0xe8, 0x00, 0xc0, 0x01, 0x80, 0x03, 0x00, 0x17, 0x00, 0x1e, 0x00, 0x1c,
-   0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/common/fltk/src/d1_mask.xbm b/common/fltk/src/d1_mask.xbm
deleted file mode 100644
index 6b1e14d..0000000
--- a/common/fltk/src/d1_mask.xbm
+++ /dev/null
@@ -1,6 +0,0 @@
-#define d1_mask_width 16
-#define d1_mask_height 16
-static unsigned char d1_mask_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x7c, 0x00, 0xfc, 0x00,
-   0xfc, 0x01, 0xec, 0x03, 0xc0, 0x37, 0x80, 0x3f, 0x00, 0x3f, 0x00, 0x3e,
-   0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00};
diff --git a/common/fltk/src/dump_compose.c b/common/fltk/src/dump_compose.c
deleted file mode 100644
index fe41991..0000000
--- a/common/fltk/src/dump_compose.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* write out the documentation for the compose key */
-
-/* copy the string from Fl_Input.C */
-static const char* const compose_pairs =
-"  ! @ # $ y=| & : c a <<~ - r _ * +-2 3 ' u p . , 1 o >>141234? "
-"A`A'A^A~A:A*AEC,E`E'E^E:I`I'I^I:D-N~O`O'O^O~O:x O/U`U'U^U:Y'DDss"
-"a`a'a^a~a:a*aec,e`e'e^e:i`i'i^i:d-n~o`o'o^o~o:-:o/u`u'u^u:y'ddy:";
-
-#include <stdio.h>
-
-int main() {
-  int x,y;
-  for (x = 0; x<16; x++) {
-    for (y = 0; y<6; y++) {
-      const char *p = compose_pairs + (16*y+x)*2;
-      if (p[1] == ' ')
-	printf("<td><code>%c&nbsp</code>&nbsp&nbsp&nbsp%c\n",
-	       p[0],(p-compose_pairs)/2+0xA0);
-      else
-	printf("<td><code>%c%c</code>&nbsp&nbsp&nbsp%c\n",
-	       p[0],p[1],(p-compose_pairs)/2+0xA0);
-    }
-    printf("<tr>");
-  }
-  return 0;
-}
diff --git a/common/fltk/src/ew.xbm b/common/fltk/src/ew.xbm
deleted file mode 100644
index 1ff835c..0000000
--- a/common/fltk/src/ew.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define ew_width 16
-#define ew_height 16
-#define ew_x_hot 8
-#define ew_y_hot 8
-static unsigned char ew_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
-   0x0c, 0x30, 0xfe, 0x7f, 0xfe, 0x7f, 0x0c, 0x30, 0x08, 0x10, 0x00, 0x00,
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/common/fltk/src/ew_mask.xbm b/common/fltk/src/ew_mask.xbm
deleted file mode 100644
index 49dc1df..0000000
--- a/common/fltk/src/ew_mask.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define ew_mask_width 16
-#define ew_mask_height 16
-#define ew_mask_x_hot 8
-#define ew_mask_y_hot 8
-static unsigned char ew_mask_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1c, 0x38,
-   0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0x1c, 0x38, 0x18, 0x18,
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/common/fltk/src/fastarrow.h b/common/fltk/src/fastarrow.h
deleted file mode 100644
index e381acd..0000000
--- a/common/fltk/src/fastarrow.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#define fastarrow_width 16
-#define fastarrow_height 16
-static unsigned char fastarrow_bits[] = {
-   0x00, 0x00, 0x00, 0x07, 0xe0, 0x07, 0xfc, 0x03, 0xff, 0xff, 0xfc, 0x03,
-   0xe0, 0x07, 0x00, 0x07, 0xe0, 0x00, 0xe0, 0x07, 0xc0, 0x3f, 0xff, 0xff,
-   0xc0, 0x3f, 0xe0, 0x07, 0xe0, 0x00, 0x00, 0x00};
diff --git a/common/fltk/src/filename_absolute.cxx b/common/fltk/src/filename_absolute.cxx
deleted file mode 100644
index b98d5ee..0000000
--- a/common/fltk/src/filename_absolute.cxx
+++ /dev/null
@@ -1,272 +0,0 @@
-//
-// "$Id: filename_absolute.cxx 8146 2010-12-31 22:13:07Z matt $"
-//
-// Filename expansion routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* expand a file name by prepending current directory, deleting . and
-   .. (not really correct for symbolic links) between the prepended
-   current directory.  Use $PWD if it exists.
-   Returns true if any changes were made.
-*/
-
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
-#include <stdlib.h>
-#include "flstring.h"
-#include <ctype.h>
-#if defined(WIN32) && !defined(__CYGWIN__)
-# include <direct.h>
-#else
-#  include <unistd.h>
-#endif
-
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-inline int isdirsep(char c) {return c=='/' || c=='\\';}
-#else
-#define isdirsep(c) ((c)=='/')
-#endif
-
-/** Makes a filename absolute from a relative filename.
-    \code
-    #include <FL/filename.H>
-    [..]
-    chdir("/var/tmp");
-    fl_filename_absolute(out, sizeof(out), "foo.txt");         // out="/var/tmp/foo.txt"
-    fl_filename_absolute(out, sizeof(out), "./foo.txt");       // out="/var/tmp/foo.txt"
-    fl_filename_absolute(out, sizeof(out), "../log/messages"); // out="/var/log/messages"
-    \endcode
-    \param[out] to resulting absolute filename
-    \param[in]  tolen size of the absolute filename buffer 
-    \param[in]  from relative filename
-    \return 0 if no change, non zero otherwise
- */
-int fl_filename_absolute(char *to, int tolen, const char *from) {
-  if (isdirsep(*from) || *from == '|'
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-      || from[1]==':'
-#endif
-      ) {
-    strlcpy(to, from, tolen);
-    return 0;
-  }
-
-  char *a;
-  char *temp = new char[tolen];
-  const char *start = from;
-
-  a = fl_getcwd(temp, tolen);
-  if (!a) {
-    strlcpy(to, from, tolen);
-    delete[] temp;
-    return 0;
-  }
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-  for (a = temp; *a; a++) if (*a=='\\') *a = '/'; // ha ha
-#else
-  a = temp+strlen(temp);
-#endif
-  if (isdirsep(*(a-1))) a--;
-  /* remove intermediate . and .. names: */
-  while (*start == '.') {
-    if (start[1]=='.' && isdirsep(start[2])) {
-      char *b;
-      for (b = a-1; b >= temp && !isdirsep(*b); b--);
-      if (b < temp) break;
-      a = b;
-      start += 3;
-    } else if (isdirsep(start[1])) {
-      start += 2;
-    } else if (!start[1]) {
-      start ++; // Skip lone "."
-      break;
-    } else
-      break;
-  }
-
-  *a++ = '/';
-  strlcpy(a,start,tolen - (a - temp));
-
-  strlcpy(to, temp, tolen);
-
-  delete[] temp;
-
-  return 1;
-}
-
-/** Makes a filename relative to the current working directory.
-    \code
-    #include <FL/filename.H>
-    [..]
-    chdir("/var/tmp/somedir");       // set cwd to /var/tmp/somedir
-    [..]
-    char out[FL_PATH_MAX];
-    fl_filename_relative(out, sizeof(out), "/var/tmp/somedir/foo.txt");  // out="foo.txt",    return=1
-    fl_filename_relative(out, sizeof(out), "/var/tmp/foo.txt");          // out="../foo.txt", return=1
-    fl_filename_relative(out, sizeof(out), "foo.txt");                   // out="foo.txt",    return=0 (no change)
-    fl_filename_relative(out, sizeof(out), "./foo.txt");                 // out="./foo.txt",  return=0 (no change)
-    fl_filename_relative(out, sizeof(out), "../foo.txt");                // out="../foo.txt", return=0 (no change)
-    \endcode
-    \param[out] to resulting relative filename
-    \param[in]  tolen size of the relative filename buffer 
-    \param[in]  from absolute filename
-    \return 0 if no change, non zero otherwise
- */
-int					// O - 0 if no change, 1 if changed
-fl_filename_relative(char       *to,	// O - Relative filename
-                     int        tolen,	// I - Size of "to" buffer
-                     const char *from)  // I - Absolute filename
-{
-  char cwd_buf[FL_PATH_MAX];	// Current directory
-  // get the current directory and return if we can't
-  if (!fl_getcwd(cwd_buf, sizeof(cwd_buf))) {
-    strlcpy(to, from, tolen);
-    return 0;
-  }
-  return fl_filename_relative(to, tolen, from, cwd_buf);
-}
-
-
-/** Makes a filename relative to any other directory.
- \param[out] to resulting relative filename
- \param[in]  tolen size of the relative filename buffer 
- \param[in]  from absolute filename
- \param[in]  base relative to this absolute path
- \return 0 if no change, non zero otherwise
- */
-int					// O - 0 if no change, 1 if changed
-fl_filename_relative(char       *to,	// O - Relative filename
-                     int        tolen,	// I - Size of "to" buffer
-                     const char *from,  // I - Absolute filename
-                     const char *base) { // I - Find path relative to this path
-  
-  char          *newslash;		// Directory separator
-  const char	*slash;			// Directory separator
-  char          *cwd = 0L, *cwd_buf = 0L;
-  if (base) cwd = cwd_buf = strdup(base);
-  
-  // return if "from" is not an absolute path
-#if defined(WIN32) || defined(__EMX__)
-  if (from[0] == '\0' ||
-      (!isdirsep(*from) && !isalpha(*from) && from[1] != ':' &&
-       !isdirsep(from[2]))) {
-#else
-  if (from[0] == '\0' || !isdirsep(*from)) {
-#endif // WIN32 || __EMX__
-    strlcpy(to, from, tolen);
-    if (cwd_buf) free(cwd_buf);
-    return 0;
-  }
-        
-  // return if "cwd" is not an absolute path
-#if defined(WIN32) || defined(__EMX__)
-  if (!cwd || cwd[0] == '\0' ||
-      (!isdirsep(*cwd) && !isalpha(*cwd) && cwd[1] != ':' &&
-       !isdirsep(cwd[2]))) {
-#else
-  if (!cwd || cwd[0] == '\0' || !isdirsep(*cwd)) {
-#endif // WIN32 || __EMX__
-    strlcpy(to, from, tolen);
-    if (cwd_buf) free(cwd_buf);
-    return 0;
-  }
-              
-#if defined(WIN32) || defined(__EMX__)
-  // convert all backslashes into forward slashes
-  for (newslash = strchr(cwd, '\\'); newslash; newslash = strchr(newslash + 1, '\\'))
-    *newslash = '/';
-
-  // test for the exact same string and return "." if so
-  if (!strcasecmp(from, cwd)) {
-    strlcpy(to, ".", tolen);
-    free(cwd_buf);
-    return (1);
-  }
-
-  // test for the same drive. Return the absolute path if not
-  if (tolower(*from & 255) != tolower(*cwd & 255)) {
-    // Not the same drive...
-    strlcpy(to, from, tolen);
-    free(cwd_buf);
-    return 0;
-  }
-
-  // compare the path name without the drive prefix
-  from += 2; cwd += 2;
-#else
-  // test for the exact same string and return "." if so
-  if (!strcmp(from, cwd)) {
-    strlcpy(to, ".", tolen);
-    free(cwd_buf);
-    return (1);
-  }
-#endif // WIN32 || __EMX__
-
-  // compare both path names until we find a difference
-  for (slash = from, newslash = cwd;
-      *slash != '\0' && *newslash != '\0';
-       slash ++, newslash ++)
-    if (isdirsep(*slash) && isdirsep(*newslash)) continue;
-#if defined(WIN32) || defined(__EMX__) || defined(__APPLE__)
-    else if (tolower(*slash & 255) != tolower(*newslash & 255)) break;
-#else
-    else if (*slash != *newslash) break;
-#endif // WIN32 || __EMX__ || __APPLE__
-
-  // skip over trailing slashes
-  if ( *newslash == '\0' && *slash != '\0' && !isdirsep(*slash)
-     &&(newslash==cwd || !isdirsep(newslash[-1])) )
-    newslash--;
-
-  // now go back to the first character of the first differing paths segment
-  while (!isdirsep(*slash) && slash > from) slash --;
-  if (isdirsep(*slash)) slash ++;
-
-  // do the same for the current dir
-  if (isdirsep(*newslash)) newslash --;
-  if (*newslash != '\0')
-    while (!isdirsep(*newslash) && newslash > cwd) newslash --;
-
-  // prepare the destination buffer
-  to[0]         = '\0';
-  to[tolen - 1] = '\0';
-
-  // now add a "previous dir" sequence for every following slash in the cwd
-  while (*newslash != '\0') {
-    if (isdirsep(*newslash)) strlcat(to, "../", tolen);
-
-    newslash ++;
-  }
-
-  // finally add the differing path from "from"
-  strlcat(to, slash, tolen);
-
-  free(cwd_buf);
-  return 1;
-}
-
-
-//
-// End of "$Id: filename_absolute.cxx 8146 2010-12-31 22:13:07Z matt $".
-//
diff --git a/common/fltk/src/filename_expand.cxx b/common/fltk/src/filename_expand.cxx
deleted file mode 100644
index 2591ec4..0000000
--- a/common/fltk/src/filename_expand.cxx
+++ /dev/null
@@ -1,134 +0,0 @@
-//
-// "$Id: filename_expand.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Filename expansion routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* expand a file name by substuting environment variables and
-   home directories.  Returns true if any changes were made.
-   to & from may be the same buffer.
-*/
-
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
-#include <stdlib.h>
-#include "flstring.h"
-#if defined(WIN32) && !defined(__CYGWIN__)
-#include <windows.h>
-#else
-# include <unistd.h>
-# include <pwd.h>
-#endif
-
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-static inline int isdirsep(char c) {return c=='/' || c=='\\';}
-#else
-#define isdirsep(c) ((c)=='/')
-#endif
-
-/** Expands a filename containing shell variables and tilde (~).
-    Currently handles these variants:
-    \code
-    "~username"               // if 'username' does not exist, result will be unchanged
-    "~/file"
-    "$VARNAME"                // does NOT handle ${VARNAME}
-    \endcode
-
-    \b Examples:
-    \code
-    #include <FL/filename.H>
-    [..]
-    putenv("TMPDIR=/var/tmp");
-    fl_filename_expand(out, sizeof(out), "~fred/.cshrc");     // out="/usr/fred/.cshrc"
-    fl_filename_expand(out, sizeof(out), "~/.cshrc");         // out="/usr/<yourname>/.cshrc"
-    fl_filename_expand(out, sizeof(out), "$TMPDIR/foo.txt");  // out="/var/tmp/foo.txt"
-    \endcode
-    \param[out] to resulting expanded filename
-    \param[in]  tolen size of the expanded filename buffer 
-    \param[in]  from filename containing shell variables
-    \return 0 if no change, non zero otherwise
- */
-int fl_filename_expand(char *to,int tolen, const char *from) {
-
-  char *temp = new char[tolen];
-  strlcpy(temp,from, tolen);
-  char *start = temp;
-  char *end = temp+strlen(temp);
-
-  int ret = 0;
-
-  for (char *a=temp; a<end; ) {	// for each slash component
-    char *e; for (e=a; e<end && !isdirsep(*e); e++); // find next slash
-    const char *value = 0; // this will point at substitute value
-    switch (*a) {
-    case '~':	// a home directory name
-      if (e <= a+1) {	// current user's directory
-        value = fl_getenv("HOME");
-#ifndef WIN32
-      } else {	// another user's directory
-	struct passwd *pwd;
-	char t = *e; *(char *)e = 0; 
-        pwd = getpwnam(a+1); 
-        *(char *)e = t;
-	    if (pwd) value = pwd->pw_dir;
-#endif
-      }
-      break;
-    case '$':		/* an environment variable */
-      {char t = *e; *(char *)e = 0; value = fl_getenv(a+1); *(char *)e = t;}
-      break;
-    }
-    if (value) {
-      // substitutions that start with slash delete everything before them:
-      if (isdirsep(value[0])) start = a;
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-      // also if it starts with "A:"
-      if (value[0] && value[1]==':') start = a;
-#endif
-      int t = strlen(value); if (isdirsep(value[t-1])) t--;
-      if ((end+1-e+t) >= tolen) end += tolen - (end+1-e+t);
-      memmove(a+t, e, end+1-e);
-      end = a+t+(end-e);
-      *end = '\0';
-      memcpy(a, value, t);
-      ret++;
-    } else {
-      a = e+1;
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-      if (*e == '\\') {*e = '/'; ret++;} // ha ha!
-#endif
-    }
-  }
-
-  strlcpy(to, start, tolen);
-
-  delete[] temp;
-
-  return ret;
-}
-
-
-//
-// End of "$Id: filename_expand.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/filename_ext.cxx b/common/fltk/src/filename_ext.cxx
deleted file mode 100644
index f9be104..0000000
--- a/common/fltk/src/filename_ext.cxx
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// "$Id: filename_ext.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Filename extension routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// returns pointer to the last '.' or to the null if none:
-
-#include <FL/filename.H>
-
-/** Gets the extensions of a filename.
-   \code
-   #include <FL/filename.H>
-   [..]
-   const char *out;
-   out = fl_filename_ext("/some/path/foo.txt");        // result: ".txt"
-   out = fl_filename_ext("/some/path/foo");            // result: NULL
-   \endcode
-   \param[in] buf the filename to be parsed
-   \return a pointer to the extension (including '.') if any or NULL otherwise
- */
-const char *fl_filename_ext(const char *buf) {
-  const char *q = 0;
-  const char *p = buf;
-  for (p=buf; *p; p++) {
-    if (*p == '/') q = 0;
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-    else if (*p == '\\') q = 0;
-#endif
-    else if (*p == '.') q = p;
-  }
-  return q ? q : p;
-}
-
-//
-// End of "$Id: filename_ext.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/filename_isdir.cxx b/common/fltk/src/filename_isdir.cxx
deleted file mode 100644
index 253bc07..0000000
--- a/common/fltk/src/filename_isdir.cxx
+++ /dev/null
@@ -1,103 +0,0 @@
-//
-// "$Id: filename_isdir.cxx 8063 2010-12-19 21:20:10Z matt $"
-//
-// Directory detection routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Used by fl_file_chooser
-
-#include "flstring.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <ctype.h>
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
-
-
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-static inline int isdirsep(char c) {return c=='/' || c=='\\';}
-#else
-#define isdirsep(c) ((c)=='/')
-#endif
-
-int _fl_filename_isdir_quick(const char* n) {
-  // Do a quick optimization for filenames with a trailing slash...
-  if (*n && isdirsep(n[strlen(n) - 1])) return 1;
-  return fl_filename_isdir(n);
-}
-
-/**
-   Determines if a file exists and is a directory from its filename.
-   \code
-   #include <FL/filename.H>
-   [..]
-   fl_filename_isdir("/etc");		// returns non-zero
-   fl_filename_isdir("/etc/hosts");	// returns 0
-   \endcode
-   \param[in] n the filename to parse
-   \return non zero if file exists and is a directory, zero otherwise
-*/
-int fl_filename_isdir(const char* n) {
-  struct stat	s;
-  char		fn[FL_PATH_MAX];
-  int		length;
-
-  length = strlen(n);
-
-#ifdef WIN32
-  // This workaround brought to you by the fine folks at Microsoft!
-  // (read lots of sarcasm in that...)
-  if (length < (int)(sizeof(fn) - 1)) {
-    if (length < 4 && isalpha(n[0]) && n[1] == ':' &&
-        (isdirsep(n[2]) || !n[2])) {
-      // Always use D:/ for drive letters
-      fn[0] = n[0];
-      strcpy(fn + 1, ":/");
-      n = fn;
-    } else if (length > 0 && isdirsep(n[length - 1])) {
-      // Strip trailing slash from name...
-      length --;
-      memcpy(fn, n, length);
-      fn[length] = '\0';
-      n = fn;
-    }
-  }
-#else
-  // Matt: Just in case, we strip the slash for other operating
-  // systems as well, avoid bugs by sloppy implementations
-  // of "stat".
-  if (length > 1 && isdirsep(n[length - 1])) {
-    length --;
-    memcpy(fn, n, length);
-    fn[length] = '\0';
-    n = fn;
-  }
-#endif
-
-  return !fl_stat(n, &s) && (s.st_mode&0170000)==0040000;
-}
-
-//
-// End of "$Id: filename_isdir.cxx 8063 2010-12-19 21:20:10Z matt $".
-//
diff --git a/common/fltk/src/filename_list.cxx b/common/fltk/src/filename_list.cxx
deleted file mode 100644
index 6434d67..0000000
--- a/common/fltk/src/filename_list.cxx
+++ /dev/null
@@ -1,206 +0,0 @@
-//
-// "$Id: filename_list.cxx 8192 2011-01-05 16:50:10Z manolo $"
-//
-// Filename list routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Wrapper for scandir with const-correct function prototypes.
-
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <stdlib.h>
-
-
-extern "C" {
-#ifndef HAVE_SCANDIR
-  int fl_scandir (const char *dir, dirent ***namelist,
-	          int (*select)(dirent *),
-	          int (*compar)(dirent **, dirent **));
-#endif
-}
-
-int fl_alphasort(struct dirent **a, struct dirent **b) {
-  return strcmp((*a)->d_name, (*b)->d_name);
-}
-
-int fl_casealphasort(struct dirent **a, struct dirent **b) {
-  return strcasecmp((*a)->d_name, (*b)->d_name);
-}
-
-
-/**
-   Portable and const-correct wrapper for the scandir() function. 
-   For each file in that directory a "dirent" structure is created. 
-   The only portable thing about a dirent is that dirent.d_name is the nul-terminated file name. 
-   An pointers array to these dirent's is created and a pointer to the array is returned in *list.
-   The number of entries is given as a return value. 
-   If there is an error reading the directory a number less than zero is returned, 
-   and errno has the reason; errno does not work under WIN32. 
-
-   \b Include:
-   \code
-   #include <FL/filename.H>
-   \endcode
-
-   \param[in] d the name of the directory to list.  It does not matter if it has a trailing slash.
-   \param[out] list table containing the resulting directory listing
-   \param[in] sort sorting functor:
-    - fl_alphasort: The files are sorted in ascending alphabetical order; 
-        upper and lowercase letters are compared according to their ASCII ordering  uppercase before lowercase.
-    - fl_casealphasort: The files are sorted in ascending alphabetical order; 
-        upper and lowercase letters are compared equally case is not significant.
-    - fl_casenumericsort: The files are sorted in ascending "alphanumeric" order, where an attempt is made 
-        to put unpadded numbers in consecutive order; upper and lowercase letters 
-        are compared equally case is not significant.
-    - fl_numericsort: The files are sorted in ascending "alphanumeric" order, where an attempt is made 
-        to put unpadded numbers in consecutive order; upper and lowercase letters are compared 
-        according to their ASCII ordering - uppercase before lowercase. 
-   \return the number of entries if no error, a negative value otherwise.
-*/
-int fl_filename_list(const char *d, dirent ***list,
-                     Fl_File_Sort_F *sort) {
-#if defined(WIN32) && !defined(__CYGWIN__) && !defined(HAVE_SCANDIR)
-  // For Windows we have a special scandir implementation that uses
-  // the Win32 "wide" functions for lookup, avoiding the code page mess
-  // entirely. It also fixes up the trailing '/'.
-  return fl_scandir(d, list, 0, sort);
-
-#else // WIN32
-
-  int dirlen;
-  char *dirloc;
-
-  // Assume that locale encoding is no less dense than UTF-8
-  dirlen = strlen(d);
-#ifdef __APPLE__
-  dirloc = (char *)d;
-#else
-  dirloc = (char *)malloc(dirlen + 1);
-  fl_utf8to_mb(d, dirlen, dirloc, dirlen + 1);
-#endif
-
-#ifndef HAVE_SCANDIR
-  // This version is when we define our own scandir
-  int n = fl_scandir(dirloc, list, 0, sort);
-#elif defined(HAVE_SCANDIR_POSIX) && !defined(__APPLE__)
-  // POSIX (2008) defines the comparison function like this:
-  int n = scandir(dirloc, list, 0, (int(*)(const dirent **, const dirent **))sort);
-#elif defined(__osf__)
-  // OSF, DU 4.0x
-  int n = scandir(dirloc, list, 0, (int(*)(dirent **, dirent **))sort);
-#elif defined(_AIX)
-  // AIX is almost standard...
-  int n = scandir(dirloc, list, 0, (int(*)(void*, void*))sort);
-#elif defined(__sgi)
-  int n = scandir(dirloc, list, 0, sort);
-#else
-  // The vast majority of UNIX systems want the sort function to have this
-  // prototype, most likely so that it can be passed to qsort without any
-  // changes:
-  int n = scandir(dirloc, list, 0, (int(*)(const void*,const void*))sort);
-#endif
-
-#ifndef __APPLE__
-  free(dirloc);
-#endif
-
-  // convert every filename to utf-8, and append a '/' to all
-  // filenames that are directories
-  int i;
-  char *fullname = (char*)malloc(dirlen+FL_PATH_MAX+3); // Add enough extra for two /'s and a nul
-  // Use memcpy for speed since we already know the length of the string...
-  memcpy(fullname, d, dirlen+1);
-
-  char *name = fullname + dirlen;
-  if (name!=fullname && name[-1]!='/')
-    *name++ = '/';
-
-  for (i=0; i<n; i++) {
-    int newlen;
-    dirent *de = (*list)[i];
-    int len = strlen(de->d_name);
-#ifdef __APPLE__
-    newlen = len;
-#else
-    newlen = fl_utf8from_mb(NULL, 0, de->d_name, len);
-#endif
-    dirent *newde = (dirent*)malloc(de->d_name - (char*)de + newlen + 2); // Add space for a / and a nul
-
-    // Conversion to UTF-8
-    memcpy(newde, de, de->d_name - (char*)de);
-#ifdef __APPLE__
-    strcpy(newde->d_name, de->d_name);
-#else
-    fl_utf8from_mb(newde->d_name, newlen + 1, de->d_name, len);
-#endif
-
-    // Check if dir (checks done on "old" name as we need to interact with
-    // the underlying OS)
-    if (de->d_name[len-1]!='/' && len<=FL_PATH_MAX) {
-      // Use memcpy for speed since we already know the length of the string...
-      memcpy(name, de->d_name, len+1);
-      if (fl_filename_isdir(fullname)) {
-        char *dst = newde->d_name + newlen;
-        *dst++ = '/';
-        *dst = 0;
-      }
-    }
-
-    free(de);
-    (*list)[i] = newde;
-  }
-  free(fullname);
-
-  return n;
-
-#endif // WIN32
-}
-
-/**
- \brief Free the list of filenames that is generated by fl_filename_list().
- 
- Free everything that was allocated by a previous call to fl_filename_list().
- Use the return values as parameters for this function.
- 
- \param[in,out] list table containing the resulting directory listing
- \param[in] n number of entries in the list
- */
-void fl_filename_free_list(struct dirent ***list, int n)
-{
-  if (n<0) return;
-  
-  int i;
-  for (i = 0; i < n; i ++) {
-    if ((*list)[i])
-      free((*list)[i]);
-  }  
-  free(*list);
-  *list = 0;
-}
-
-
-//
-// End of "$Id: filename_list.cxx 8192 2011-01-05 16:50:10Z manolo $".
-//
diff --git a/common/fltk/src/filename_match.cxx b/common/fltk/src/filename_match.cxx
deleted file mode 100644
index 41e6dfd..0000000
--- a/common/fltk/src/filename_match.cxx
+++ /dev/null
@@ -1,128 +0,0 @@
-//
-// "$Id: filename_match.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Pattern matching routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* Adapted from Rich Salz. */
-#include <FL/filename.H>
-#include <ctype.h>
-
-/**
-    Checks if a string \p s matches a pattern \p p. 
-    The following syntax is used for the pattern:
-    - * matches any sequence of 0 or more characters.
-    - ? matches any single character.
-    - [set] matches any character in the set. Set can contain any single characters, or a-z to represent a range. 
-      To match ] or - they must be the first characters. To match ^ or ! they must not be the first characters.
-    - [^set] or [!set] matches any character not in the set.
-    - {X|Y|Z} or {X,Y,Z} matches any one of the subexpressions literally.
-    - \\x quotes the character x so it has no special meaning.
-    - x all other characters must be matched exactly.
-
-    \b Include:
-    \code
-    #include <FL/filename.H>
-    \endcode
-
-    \param[in] s the string to check for a match
-    \param[in] p the string pattern 
-    \return non zero if the string matches the pattern
-*/
-int fl_filename_match(const char *s, const char *p) {
-  int matched;
-
-  for (;;) {
-    switch(*p++) {
-
-    case '?' :	// match any single character
-      if (!*s++) return 0;
-      break;
-
-    case '*' :	// match 0-n of any characters
-      if (!*p) return 1; // do trailing * quickly
-      while (!fl_filename_match(s, p)) if (!*s++) return 0;
-      return 1;
-
-    case '[': {	// match one character in set of form [abc-d] or [^a-b]
-      if (!*s) return 0;
-      int reverse = (*p=='^' || *p=='!'); if (reverse) p++;
-      matched = 0;
-      char last = 0;
-      while (*p) {
-	if (*p=='-' && last) {
-	  if (*s <= *++p && *s >= last ) matched = 1;
-	  last = 0;
-	} else {
-	  if (*s == *p) matched = 1;
-	}
-	last = *p++;
-	if (*p==']') break;
-      }
-      if (matched == reverse) return 0;
-      s++; p++;}
-    break;
-
-    case '{' : // {pattern1|pattern2|pattern3}
-    NEXTCASE:
-    if (fl_filename_match(s,p)) return 1;
-    for (matched = 0;;) {
-      switch (*p++) {
-      case '\\': if (*p) p++; break;
-      case '{': matched++; break;
-      case '}': if (!matched--) return 0; break;
-      case '|': case ',': if (matched==0) goto NEXTCASE;
-      case 0: return 0;
-      }
-    }
-    case '|':	// skip rest of |pattern|pattern} when called recursively
-    case ',':
-      for (matched = 0; *p && matched >= 0;) {
-	switch (*p++) {
-	case '\\': if (*p) p++; break;
-	case '{': matched++; break;
-	case '}': matched--; break;
-	}
-      }
-      break;
-    case '}':
-      break;
-
-    case 0:	// end of pattern
-      return !*s;
-
-    case '\\':	// quote next character
-      if (*p) p++;
-      /* FALLTHROUGH */
-    default:
-      if (tolower(*s) != tolower(*(p-1))) return 0;
-      s++;
-      break;
-    }
-  }
-}
-
-//
-// End of "$Id: filename_match.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/filename_setext.cxx b/common/fltk/src/filename_setext.cxx
deleted file mode 100644
index 927ea48..0000000
--- a/common/fltk/src/filename_setext.cxx
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// "$Id: filename_setext.cxx 8063 2010-12-19 21:20:10Z matt $"
-//
-// Filename extension routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Replace .ext with new extension
-
-#include <FL/filename.H>
-#include "flstring.h"
-
-/**
-   Replaces the extension in \p buf of max.<br>
-   size \p buflen with the extension in \p ext.<br>
-   If there's no '.' in \p buf, \p ext is appended.<br>
-   If \p ext is NULL, behaves as if it were an empty string ("").
-
-   \b Example
-   \code
-   #include <FL/filename.H>
-   [..]
-   char buf[FL_PATH_MAX] = "/path/myfile.cxx";
-   fl_filename_setext(buf, sizeof(buf), ".txt");      // buf[] becomes "/path/myfile.txt"
-   \endcode
-
-   \return buf itself for calling convenience.
-*/
-char *fl_filename_setext(char *buf, int buflen, const char *ext) {
-  char *q = (char *)fl_filename_ext(buf);
-  if (ext) {
-    strlcpy(q,ext,buflen - (q - buf));
-  } else *q = 0;
-  return(buf);
-}
-
-
-//
-// End of "$Id: filename_setext.cxx 8063 2010-12-19 21:20:10Z matt $".
-//
diff --git a/common/fltk/src/fl_arc.cxx b/common/fltk/src/fl_arc.cxx
deleted file mode 100644
index 70b29e7..0000000
--- a/common/fltk/src/fl_arc.cxx
+++ /dev/null
@@ -1,91 +0,0 @@
-//
-// "$Id: fl_arc.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Arc functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_arc.cxx
-  \brief Utility functions for drawing arcs and circles.
-*/
-
-// Utility for drawing arcs and circles.  They are added to
-// the current fl_begin/fl_vertex/fl_end path.
-// Incremental math implementation:
-
-#include <FL/fl_draw.H>
-#include <FL/math.h>
-
-// avoid problems with some platforms that don't 
-// implement hypot.
-static double _fl_hypot(double x, double y) {
-  return sqrt(x*x + y*y);
-}
-
-void Fl_Graphics_Driver::arc(double x, double y, double r, double start, double end) {
-
-  // draw start point accurately:
-  
-  double A = start*(M_PI/180);		// Initial angle (radians)
-  double X =  r*cos(A);			// Initial displacement, (X,Y)
-  double Y = -r*sin(A);			//   from center to initial point
-  fl_vertex(x+X,y+Y);			// Insert initial point
-
-  // Maximum arc length to approximate with chord with error <= 0.125
-  
-  double epsilon; {
-    double r1 = _fl_hypot(fl_transform_dx(r,0), // Horizontal "radius"
-		          fl_transform_dy(r,0));
-    double r2 = _fl_hypot(fl_transform_dx(0,r), // Vertical "radius"
-		          fl_transform_dy(0,r));
-		      
-    if (r1 > r2) r1 = r2;		// r1 = minimum "radius"
-    if (r1 < 2.) r1 = 2.;		// radius for circa 9 chords/circle
-    
-    epsilon = 2*acos(1.0 - 0.125/r1);	// Maximum arc angle
-  }
-  A = end*(M_PI/180) - A;		// Displacement angle (radians)
-  int i = int(ceil(fabs(A)/epsilon));	// Segments in approximation
-  
-  if (i) {
-    epsilon = A/i;			// Arc length for equal-size steps
-    double cos_e = cos(epsilon);	// Rotation coefficients
-    double sin_e = sin(epsilon);
-    do {
-      double Xnew =  cos_e*X + sin_e*Y;
-		Y = -sin_e*X + cos_e*Y;
-      fl_vertex(x + (X=Xnew), y + Y);
-    } while (--i);
-  }
-}
-
-#if 0 // portable version.  X-specific one in fl_vertex.cxx
-void fl_circle(double x,double y,double r) {
-  _fl_arc(x, y, r, r, 0, 360);
-}
-#endif
-
-//
-// End of "$Id: fl_arc.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_arci.cxx b/common/fltk/src/fl_arci.cxx
deleted file mode 100644
index 963d62c..0000000
--- a/common/fltk/src/fl_arci.cxx
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// "$Id: fl_arci.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Arc (integer) drawing functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_arci.cxx
-  \brief Utility functions for drawing circles using integers
-*/
-
-// "integer" circle drawing functions.  These draw the limited
-// circle types provided by X and NT graphics.  The advantage of
-// these is that small ones draw quite nicely (probably due to stored
-// hand-drawn bitmaps of small circles!) and may be implemented by
-// hardware and thus are fast.
-
-// Probably should add fl_chord.
-
-// 3/10/98: created
-
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#ifdef WIN32
-#  include <FL/math.h>
-#endif
-#include <config.h>
-
-void Fl_Graphics_Driver::arc(int x,int y,int w,int h,double a1,double a2) {
-  if (w <= 0 || h <= 0) return;
-
-#if defined(USE_X11)
-  XDrawArc(fl_display, fl_window, fl_gc, x,y,w-1,h-1, int(a1*64),int((a2-a1)*64));
-#elif defined(WIN32)
-  int xa = x+w/2+int(w*cos(a1/180.0*M_PI));
-  int ya = y+h/2-int(h*sin(a1/180.0*M_PI));
-  int xb = x+w/2+int(w*cos(a2/180.0*M_PI));
-  int yb = y+h/2-int(h*sin(a2/180.0*M_PI));
-  if (fabs(a1 - a2) < 90) {
-    if (xa == xb && ya == yb) SetPixel(fl_gc, xa, ya, fl_RGB());
-    else Arc(fl_gc, x, y, x+w, y+h, xa, ya, xb, yb);
-  } else Arc(fl_gc, x, y, x+w, y+h, xa, ya, xb, yb);
-#elif defined(__APPLE_QUARTZ__)
-  a1 = (-a1)/180.0f*M_PI; a2 = (-a2)/180.0f*M_PI;
-  float cx = x + 0.5f*w - 0.5f, cy = y + 0.5f*h - 0.5f;
-  CGContextSetShouldAntialias(fl_gc, true);
-  if (w!=h) {
-    CGContextSaveGState(fl_gc);
-    CGContextTranslateCTM(fl_gc, cx, cy);
-    CGContextScaleCTM(fl_gc, w-1.0f, h-1.0f);
-    CGContextAddArc(fl_gc, 0, 0, 0.5, a1, a2, 1);
-    CGContextRestoreGState(fl_gc);
-  } else {
-    float r = (w+h)*0.25f-0.5f;
-    CGContextAddArc(fl_gc, cx, cy, r, a1, a2, 1);
-  }
-  CGContextStrokePath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::pie(int x,int y,int w,int h,double a1,double a2) {
-  if (w <= 0 || h <= 0) return;
-
-#if defined(USE_X11)
-  XFillArc(fl_display, fl_window, fl_gc, x,y,w-1,h-1, int(a1*64),int((a2-a1)*64));
-#elif defined(WIN32)
-  if (a1 == a2) return;
-  int xa = x+w/2+int(w*cos(a1/180.0*M_PI));
-  int ya = y+h/2-int(h*sin(a1/180.0*M_PI));
-  int xb = x+w/2+int(w*cos(a2/180.0*M_PI));
-  int yb = y+h/2-int(h*sin(a2/180.0*M_PI));
-  SelectObject(fl_gc, fl_brush());
-  if (fabs(a1 - a2) < 90) {
-    if (xa == xb && ya == yb) {
-      MoveToEx(fl_gc, x+w/2, y+h/2, 0L); 
-      LineTo(fl_gc, xa, ya);
-      SetPixel(fl_gc, xa, ya, fl_RGB());
-    } else Pie(fl_gc, x, y, x+w, y+h, xa, ya, xb, yb);
-  } else Pie(fl_gc, x, y, x+w, y+h, xa, ya, xb, yb); 
-#elif defined(__APPLE_QUARTZ__)
-  a1 = (-a1)/180.0f*M_PI; a2 = (-a2)/180.0f*M_PI;
-  float cx = x + 0.5f*w - 0.5f, cy = y + 0.5f*h - 0.5f;
-  CGContextSetShouldAntialias(fl_gc, true);
-  if (w!=h) {
-    CGContextSaveGState(fl_gc);
-    CGContextTranslateCTM(fl_gc, cx, cy);
-    CGContextScaleCTM(fl_gc, w, h);
-    CGContextAddArc(fl_gc, 0, 0, 0.5, a1, a2, 1);
-    CGContextAddLineToPoint(fl_gc, 0, 0);
-    CGContextClosePath(fl_gc);
-    CGContextRestoreGState(fl_gc);
-  } else {
-    float r = (w+h)*0.25f;
-    CGContextAddArc(fl_gc, cx, cy, r, a1, a2, 1);
-    CGContextAddLineToPoint(fl_gc, cx, cy);
-    CGContextClosePath(fl_gc);
-  }
-  CGContextFillPath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-//
-// End of "$Id: fl_arci.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_ask.cxx b/common/fltk/src/fl_ask.cxx
deleted file mode 100644
index e2dfc0a..0000000
--- a/common/fltk/src/fl_ask.cxx
+++ /dev/null
@@ -1,571 +0,0 @@
-//
-// "$Id: fl_ask.cxx 8616 2011-04-20 14:54:42Z AlbrechtS $"
-//
-// Standard dialog functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Implementation of fl_message, fl_ask, fl_choice, fl_input
-// The three-message fl_show_x functions are for forms compatibility
-// mostly.  In most cases it is easier to get a multi-line message
-// by putting newlines in the message.
-
-#include <stdio.h>
-#include <stdarg.h>
-#include "flstring.h"
-
-#include <FL/Fl.H>
-
-#include <FL/fl_ask.H>
-
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Secret_Input.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-static Fl_Window *message_form;
-static Fl_Box *message;
-static Fl_Box *icon;
-static Fl_Button *button[3];
-static Fl_Input *input;
-static int ret_val;
-static const char *iconlabel = "?";
-static const char *message_title_default;
-Fl_Font fl_message_font_ = FL_HELVETICA;
-Fl_Fontsize fl_message_size_ = -1;
-static int enableHotspot = 1;
-#ifdef __APPLE__
-extern "C" void NSBeep(void);
-#endif
-
-static char avoidRecursion = 0;
-
-// Sets the global return value (ret_val) and closes the window.
-// Note: this is used for the button callbacks and the window
-// callback (closing the window with the close button or menu).
-// The first argument (Fl_Widget *) can either be an Fl_Button*
-// pointer to one of the buttons or an Fl_Window* pointer to the
-// message window (message_form).
-static void button_cb(Fl_Widget *, void *val) {
-  ret_val = (fl_intptr_t)val;
-  message_form->hide();
-}
-
-static Fl_Window *makeform() {
- if (message_form) {
-   message_form->size(410,103);
-   return message_form;
- }
- // make sure that the dialog does not become the child of some
- // current group
- Fl_Group *previously_current_group = Fl_Group::current();
- Fl_Group::current(0);
- // create a new top level window
- Fl_Window *w = message_form = new Fl_Window(410,103);
- message_form->callback(button_cb,(void *)0);
- // w->clear_border();
- // w->box(FL_UP_BOX);
- (message = new Fl_Box(60, 25, 340, 20))
-   ->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_WRAP);
- (input = new Fl_Input(60, 37, 340, 23))->hide();
- {Fl_Box* o = icon = new Fl_Box(10, 10, 50, 50);
-  o->box(FL_THIN_UP_BOX);
-  o->labelfont(FL_TIMES_BOLD);
-  o->labelsize(34);
-  o->color(FL_WHITE);
-  o->labelcolor(FL_BLUE);
- }
- w->end(); // don't add the buttons automatically
- // create the buttons (right to left)
- for (int b=0, x=310; b<3; b++, x -= 100) {
-   if (b==1)
-     button[b] = new Fl_Return_Button(x, 70, 90, 23);
-   else
-     button[b] = new Fl_Button(x, 70, 90, 23);
-   button[b]->align(FL_ALIGN_INSIDE|FL_ALIGN_WRAP);
-   button[b]->callback(button_cb,(void *)b);
- }
- button[0]->shortcut(FL_Escape);
- // add the buttons (left to right)
- for (int b=2; b>=0; b--)
-   w->add(button[b]);
- w->begin();
- w->resizable(new Fl_Box(60,10,110-60,27));
- w->end();
- w->set_modal();
- Fl_Group::current(previously_current_group);
- return w;
-}
-
-/*
- * 'resizeform()' - Resize the form and widgets so that they hold everything
- *                  that is asked of them...
- */
-
-void resizeform() {
-  int	i;
-  int	message_w, message_h;
-  int	text_height;
-  int	button_w[3], button_h[3];
-  int	x, w, h, max_w, max_h;
-	const int icon_size = 50;
-
-  fl_font(message->labelfont(), message->labelsize());
-  message_w = message_h = 0;
-  fl_measure(message->label(), message_w, message_h);
-
-  message_w += 10;
-  message_h += 10;
-  if (message_w < 340)
-    message_w = 340;
-  if (message_h < 30)
-    message_h = 30;
-
-  fl_font(button[0]->labelfont(), button[0]->labelsize());
-
-  memset(button_w, 0, sizeof(button_w));
-  memset(button_h, 0, sizeof(button_h));
-
-  for (max_h = 25, i = 0; i < 3; i ++)
-    if (button[i]->visible())
-    {
-      fl_measure(button[i]->label(), button_w[i], button_h[i]);
-
-      if (i == 1)
-        button_w[1] += 20;
-
-      button_w[i] += 30;
-      button_h[i] += 10;
-
-      if (button_h[i] > max_h)
-        max_h = button_h[i];
-    }
-
-  if (input->visible()) text_height = message_h + 25;
-  else text_height = message_h;
-
-  max_w = message_w + 10 + icon_size;
-  w     = button_w[0] + button_w[1] + button_w[2] - 10;
-
-  if (w > max_w)
-    max_w = w;
-
-  message_w = max_w - 10 - icon_size;
-
-  w = max_w + 20;
-  h = max_h + 30 + text_height;
-
-  message_form->size(w, h);
-  message_form->size_range(w, h, w, h);
-
-  message->resize(20 + icon_size, 10, message_w, message_h);
-  icon->resize(10, 10, icon_size, icon_size);
-  icon->labelsize(icon_size - 10);
-  input->resize(20 + icon_size, 10 + message_h, message_w, 25);
-
-  for (x = w, i = 0; i < 3; i ++)
-    if (button_w[i])
-    {
-      x -= button_w[i];
-      button[i]->resize(x, h - 10 - max_h, button_w[i] - 10, max_h);
-
-//      printf("button %d (%s) is %dx%d+%d,%d\n", i, button[i]->label(),
-//             button[i]->w(), button[i]->h(),
-//	     button[i]->x(), button[i]->y());
-    }
-}
-
-static int innards(const char* fmt, va_list ap,
-  const char *b0,
-  const char *b1,
-  const char *b2)
-{
-  Fl::pushed(0); // stop dragging (STR #2159)
-
-  avoidRecursion = 1;
-
-  makeform();
-  char buffer[1024];
-  if (!strcmp(fmt,"%s")) {
-    message->label(va_arg(ap, const char*));
-  } else {
-    ::vsnprintf(buffer, 1024, fmt, ap);
-    message->label(buffer);
-  }
-
-  message->labelfont(fl_message_font_);
-  if (fl_message_size_ == -1)
-    message->labelsize(FL_NORMAL_SIZE);
-  else
-    message->labelsize(fl_message_size_);
-  if (b0) {button[0]->show(); button[0]->label(b0); button[1]->position(210,70);}
-  else {button[0]->hide(); button[1]->position(310,70);}
-  if (b1) {button[1]->show(); button[1]->label(b1);}
-  else button[1]->hide();
-  if (b2) {button[2]->show(); button[2]->label(b2);}
-  else button[2]->hide();
-  const char* prev_icon_label = icon->label();
-  if (!prev_icon_label) icon->label(iconlabel);
-
-  resizeform();
-
-  if (button[1]->visible() && !input->visible())
-    button[1]->take_focus();
-  if (enableHotspot)
-    message_form->hotspot(button[0]);
-  if (b0 && Fl_Widget::label_shortcut(b0))
-    button[0]->shortcut(0);
-  else
-    button[0]->shortcut(FL_Escape);
-
-  // set default window title, if defined and a specific title is not set
-  if (!message_form->label() && message_title_default)
-    message_form->label(message_title_default);
-
-  // deactivate Fl::grab(), because it is incompatible with modal windows
-  Fl_Window* g = Fl::grab();
-  if (g) Fl::grab(0);
-  message_form->show();
-  while (message_form->shown()) Fl::wait();
-  if (g) // regrab the previous popup menu, if there was one
-    Fl::grab(g);
-  icon->label(prev_icon_label);
-  message_form->label(0); // reset window title
-
-  avoidRecursion = 0;
-  return ret_val;
-}
-
- /** \addtogroup group_comdlg
-    @{ */
-
-// pointers you can use to change FLTK to another language:
-const char* fl_no = "No";        ///< string pointer used in common dialogs, you can change it to another language
-const char* fl_yes= "Yes";       ///< string pointer used in common dialogs, you can change it to another language
-const char* fl_ok = "OK";        ///< string pointer used in common dialogs, you can change it to another language
-const char* fl_cancel= "Cancel"; ///< string pointer used in common dialogs, you can change it to another language
-const char* fl_close= "Close";   ///< string pointer used in common dialogs, you can change it to another language
-
-// fltk functions:
-/**
-   Emits a system beep message.
-   \note \#include <FL/fl_ask.H>
- */
-void fl_beep(int type) {
-#ifdef WIN32
-  switch (type) {
-    case FL_BEEP_QUESTION :
-    case FL_BEEP_PASSWORD :
-      MessageBeep(MB_ICONQUESTION);
-      break;
-    case FL_BEEP_MESSAGE :
-      MessageBeep(MB_ICONASTERISK);
-      break;
-    case FL_BEEP_NOTIFICATION :
-      MessageBeep(MB_ICONASTERISK);
-      break;
-    case FL_BEEP_ERROR :
-      MessageBeep(MB_ICONERROR);
-      break;
-    default :
-      MessageBeep(0xFFFFFFFF);
-      break;
-  }
-#elif defined(__APPLE__)
-  switch (type) {
-    case FL_BEEP_DEFAULT :
-    case FL_BEEP_ERROR :
-      NSBeep();
-      break;
-    default :
-      break;
-  }
-#else
-  switch (type) {
-    case FL_BEEP_DEFAULT :
-    case FL_BEEP_ERROR :
-      if (!fl_display) fl_open_display();
-
-      XBell(fl_display, 100);
-      break;
-    default :
-      if (!fl_display) fl_open_display();
-
-      XBell(fl_display, 50);
-      break;
-  }
-#endif // WIN32
-}
-
-/** Shows an information message dialog box.
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-   can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
- */
-void fl_message(const char *fmt, ...) {
-
-  if (avoidRecursion) return;
-
-  va_list ap;
-
-  fl_beep(FL_BEEP_MESSAGE);
-
-  va_start(ap, fmt);
-  iconlabel = "i";
-  innards(fmt, ap, 0, fl_close, 0);
-  va_end(ap);
-  iconlabel = "?";
-}
-
-/** Shows an alert message dialog box
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-   can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
- */
-void fl_alert(const char *fmt, ...) {
-
-  if (avoidRecursion) return;
-
-  va_list ap;
-
-  fl_beep(FL_BEEP_ERROR);
-
-  va_start(ap, fmt);
-  iconlabel = "!";
-  innards(fmt, ap, 0, fl_close, 0);
-  va_end(ap);
-  iconlabel = "?";
-}
-/** Shows a dialog displaying the \p fmt message,
-    this dialog features 2 yes/no buttons
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-   can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
-   \retval 0 if the no button is selected or another dialog box is still open
-   \retval 1 if yes is selected
- */
-int fl_ask(const char *fmt, ...) {
-
-  if (avoidRecursion) return 0;
-
-  va_list ap;
-
-  fl_beep(FL_BEEP_QUESTION);
-
-  va_start(ap, fmt);
-  int r = innards(fmt, ap, fl_no, fl_yes, 0);
-  va_end(ap);
-
-  return r;
-}
-
-/** Shows a dialog displaying the \p fmt message,
-    this dialog features up to 3 customizable choice buttons
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-    can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
-   \param[in] b0 text label of button 0
-   \param[in] b1 text label of button 1
-   \param[in] b2 text label of button 2
-   \retval 0 if the first button with \p b0 text is selected or another dialog box is still open
-   \retval 1 if the second button with \p b1 text is selected
-   \retval 2 if the third button with \p b2 text is selected
- */
-int fl_choice(const char*fmt,const char *b0,const char *b1,const char *b2,...){
-
-  if (avoidRecursion) return 0;
-
-  va_list ap;
-
-  fl_beep(FL_BEEP_QUESTION);
-
-  va_start(ap, b2);
-  int r = innards(fmt, ap, b0, b1, b2);
-  va_end(ap);
-  return r;
-}
-/** Gets the Fl_Box icon container of the current default dialog used in
-    many common dialogs like fl_message(), fl_alert(),
-    fl_ask(), fl_choice(), fl_input(), fl_password()
-    \note \#include <FL/fl_ask.H>
-*/
-Fl_Widget *fl_message_icon() {makeform(); return icon;}
-
-static const char* input_innards(const char* fmt, va_list ap,
-				 const char* defstr, uchar type) {
-  makeform();
-  message->position(60,10);
-  input->type(type);
-  input->show();
-  input->value(defstr);
-  input->take_focus();
-
-  int r = innards(fmt, ap, fl_cancel, fl_ok, 0);
-  input->hide();
-  message->position(60,25);
-  return r ? input->value() : 0;
-}
-
-/** Shows an input dialog displaying the \p fmt message
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-   can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
-   \param[in] defstr defines the default returned string if no text is entered
-   \return the user string input if OK was pushed, NULL if Cancel was pushed or another dialog box was still open
- */
-const char* fl_input(const char *fmt, const char *defstr, ...) {
-
-  if (avoidRecursion) return 0;
-
-  fl_beep(FL_BEEP_QUESTION);
-
-  va_list ap;
-  va_start(ap, defstr);
-  const char* r = input_innards(fmt, ap, defstr, FL_NORMAL_INPUT);
-  va_end(ap);
-  return r;
-}
-
-/** Shows an input dialog displaying the \p fmt message.
-
-    Like fl_input() except the input text is not shown,
-    '*' characters are displayed instead.
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-   can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
-   \param[in] defstr defines the default returned string if no text is entered
-   \return the user string input if OK was pushed, NULL if Cancel was pushed or aother dialog box was still open
- */
-const char *fl_password(const char *fmt, const char *defstr, ...) {
-
-  if (avoidRecursion) return 0;
-
-  fl_beep(FL_BEEP_PASSWORD);
-
-  va_list ap;
-  va_start(ap, defstr);
-  const char* r = input_innards(fmt, ap, defstr, FL_SECRET_INPUT);
-  va_end(ap);
-  return r;
-}
-
-/** Sets whether or not to move the common message box used in
-    many common dialogs like fl_message(), fl_alert(),
-    fl_ask(), fl_choice(), fl_input(), fl_password() to follow
-    the mouse pointer.
-
-    The default is \e enabled, so that the default button is the
-    hotspot and appears at the mouse position.
-    \note \#include <FL/fl_ask.H>
-    \param[in]	enable	non-zero enables hotspot behavior,
-			0 disables hotspot
- */
-void fl_message_hotspot(int enable) {
-  enableHotspot = enable ? 1 : 0;
-}
-
-/** Gets whether or not to move the common message box used in
-    many common dialogs like fl_message(), fl_alert(),
-    fl_ask(), fl_choice(), fl_input(), fl_password() to follow
-    the mouse pointer.
-    \note \#include <FL/fl_ask.H>
-    \return	0 if disable, non-zero otherwise
-    \see fl_message_hotspot(int)
- */
-int fl_message_hotspot(void) {
-  return enableHotspot;
-}
-
-/** Sets the title of the dialog window used in many common dialogs.
-
-    This window \p title will be used in the next call of one of the
-    common dialogs like fl_message(), fl_alert(), fl_ask(), fl_choice(),
-    fl_input(), fl_password().
-
-    The \p title string is copied internally, so that you can use a
-    local variable or free the string immediately after this call. It
-    applies only to the \b next call of one of the common dialogs and
-    will be reset to an empty title (the default for all dialogs) after
-    that call.
-
-    \note \#include <FL/fl_ask.H>
-    \param[in] title	window label, string copied internally
-*/
-void fl_message_title(const char *title) {
-  makeform();
-  message_form->copy_label(title);
-}
-
-/** Sets the default title of the dialog window used in many common dialogs.
-
-    This window \p title will be used in all subsequent calls of one of the
-    common dialogs like fl_message(), fl_alert(), fl_ask(), fl_choice(),
-    fl_input(), fl_password(), unless a specific title has been set
-    with fl_message_title(const char *title).
-    
-    The default is no title. You can override the default title for a
-    single dialog with fl_message_title(const char *title).
-
-    The \p title string is copied internally, so that you can use a
-    local variable or free the string immediately after this call.
-
-    \note \#include <FL/fl_ask.H>
-    \param[in] title	default window label, string copied internally
-*/
-void fl_message_title_default(const char *title) {
-  if (message_title_default) {
-    free ((void *)message_title_default);
-    message_title_default = 0;
-  }
-  if (title)
-    message_title_default = strdup(title);
-}
-
-/** @} */
-
-//
-// End of "$Id: fl_ask.cxx 8616 2011-04-20 14:54:42Z AlbrechtS $".
-//
diff --git a/common/fltk/src/fl_boxtype.cxx b/common/fltk/src/fl_boxtype.cxx
deleted file mode 100644
index ffbc698..0000000
--- a/common/fltk/src/fl_boxtype.cxx
+++ /dev/null
@@ -1,429 +0,0 @@
-//
-// "$Id: fl_boxtype.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Box drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_boxtype.cxx
-  \brief drawing code for common box types.
-*/
-
-// Box drawing code for the common box types and the table of
-// boxtypes.  Other box types are in separate files so they are not
-// linked in if not used.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-#include <config.h>
-
-////////////////////////////////////////////////////////////////
-
-static uchar active_ramp[24] = {
-  FL_GRAY_RAMP+0, FL_GRAY_RAMP+1, FL_GRAY_RAMP+2, FL_GRAY_RAMP+3,
-  FL_GRAY_RAMP+4, FL_GRAY_RAMP+5, FL_GRAY_RAMP+6, FL_GRAY_RAMP+7,
-  FL_GRAY_RAMP+8, FL_GRAY_RAMP+9, FL_GRAY_RAMP+10,FL_GRAY_RAMP+11,
-  FL_GRAY_RAMP+12,FL_GRAY_RAMP+13,FL_GRAY_RAMP+14,FL_GRAY_RAMP+15,
-  FL_GRAY_RAMP+16,FL_GRAY_RAMP+17,FL_GRAY_RAMP+18,FL_GRAY_RAMP+19,
-  FL_GRAY_RAMP+20,FL_GRAY_RAMP+21,FL_GRAY_RAMP+22,FL_GRAY_RAMP+23};
-static uchar inactive_ramp[24] = {
-  43, 43, 44, 44,
-  44, 45, 45, 46,
-  46, 46, 47, 47,
-  48, 48, 48, 49,
-  49, 49, 50, 50,
-  51, 51, 52, 52};
-static int draw_it_active = 1;
-
-/**
-  Determines if the current draw box is active or inactive. 
-  If inactive, the box color is changed by the inactive color.
-*/
-int Fl::draw_box_active() { return draw_it_active; }
-
-uchar *fl_gray_ramp() {return (draw_it_active?active_ramp:inactive_ramp)-'A';}
-
-/**
-  Draws a series of line segments around the given box.
-  The string \p s must contain groups of 4 letters which specify one of 24
-  standard grayscale values, where 'A' is black and 'X' is white.
-  The order of each set of 4 characters is: top, left, bottom, right.
-  The result of calling fl_frame() with a string that is not a multiple
-  of 4 characters in length is undefined.
-  The only difference between this function and fl_frame2() is the order
-  of the line segments.
-  \param[in] s sets of 4 grayscale values in top, left, bottom, right order
-  \param[in] x, y, w, h position and size
-*/
-void fl_frame(const char* s, int x, int y, int w, int h) {
-  uchar *g = fl_gray_ramp();
-  if (h > 0 && w > 0) for (;*s;) {
-    // draw top line:
-    fl_color(g[(int)*s++]);
-    fl_xyline(x, y, x+w-1);
-    y++; if (--h <= 0) break;
-    // draw left line:
-    fl_color(g[(int)*s++]);
-    fl_yxline(x, y+h-1, y);
-    x++; if (--w <= 0) break;
-    // draw bottom line:
-    fl_color(g[(int)*s++]);
-    fl_xyline(x, y+h-1, x+w-1);
-    if (--h <= 0) break;
-    // draw right line:
-    fl_color(g[(int)*s++]);
-    fl_yxline(x+w-1, y+h-1, y);
-    if (--w <= 0) break;
-  }
-}
-
-/**
-  Draws a series of line segments around the given box.
-  The string \p s must contain groups of 4 letters which specify one of 24
-  standard grayscale values, where 'A' is black and 'X' is white.
-  The order of each set of 4 characters is: bottom, right, top, left.
-  The result of calling fl_frame2() with a string that is not a multiple
-  of 4 characters in length is undefined.
-  The only difference between this function and fl_frame() is the order
-  of the line segments.
-  \param[in] s sets of 4 grayscale values in bottom, right, top, left order
-  \param[in] x, y, w, h position and size
-*/
-void fl_frame2(const char* s, int x, int y, int w, int h) {
-  uchar *g = fl_gray_ramp();
-  if (h > 0 && w > 0) for (;*s;) {
-    // draw bottom line:
-    fl_color(g[(int)*s++]);
-    fl_xyline(x, y+h-1, x+w-1);
-    if (--h <= 0) break;
-    // draw right line:
-    fl_color(g[(int)*s++]);
-    fl_yxline(x+w-1, y+h-1, y);
-    if (--w <= 0) break;
-    // draw top line:
-    fl_color(g[(int)*s++]);
-    fl_xyline(x, y, x+w-1);
-    y++; if (--h <= 0) break;
-    // draw left line:
-    fl_color(g[(int)*s++]);
-    fl_yxline(x, y+h-1, y);
-    x++; if (--w <= 0) break;
-  }
-}
-
-/** Draws a box of type FL_NO_BOX */
-void fl_no_box(int, int, int, int, Fl_Color) {}
-
-/** Draws a frame of type FL_THIN_DOWN_FRAME */
-void fl_thin_down_frame(int x, int y, int w, int h, Fl_Color) {
-  fl_frame2("WWHH",x,y,w,h);
-}
-
-/** Draws a box of type FL_THIN_DOWN_BOX */
-void fl_thin_down_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_thin_down_frame(x,y,w,h,c);
-  fl_color(draw_it_active ? c : fl_inactive(c));
-  fl_rectf(x+1, y+1, w-2, h-2);
-}
-
-/** Draws a frame of type FL_THIN_UP_FRAME */
-void fl_thin_up_frame(int x, int y, int w, int h, Fl_Color) {
-  fl_frame2("HHWW",x,y,w,h);
-}
-
-/** Draws a box of type FL_THIN_UP_BOX */
-void fl_thin_up_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_thin_up_frame(x,y,w,h,c);
-  fl_color(draw_it_active ? c : fl_inactive(c));
-  fl_rectf(x+1, y+1, w-2, h-2);
-}
-
-/** Draws a frame of type FL_UP_FRAME */
-void fl_up_frame(int x, int y, int w, int h, Fl_Color) {
-#if BORDER_WIDTH == 1
-  fl_frame2("HHWW",x,y,w,h);
-#else
-#if BORDER_WIDTH == 2
-  fl_frame2("AAWWMMTT",x,y,w,h);
-#else
-  fl_frame("AAAAWWJJUTNN",x,y,w,h);
-#endif
-#endif
-}
-
-#define D1 BORDER_WIDTH
-#define D2 (BORDER_WIDTH+BORDER_WIDTH)
-
-/** Draws a box of type FL_UP_BOX */
-void fl_up_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_up_frame(x,y,w,h,c);
-  fl_color(draw_it_active ? c : fl_inactive(c));
-  fl_rectf(x+D1, y+D1, w-D2, h-D2);
-}
-
-/** Draws a frame of type FL_DOWN_FRAME */
-void fl_down_frame(int x, int y, int w, int h, Fl_Color) {
-#if BORDER_WIDTH == 1
-  fl_frame2("WWHH",x,y,w,h);
-#else
-#if BORDER_WIDTH == 2
-  fl_frame2("WWMMPPAA",x,y,w,h);
-#else
-  fl_frame("NNTUJJWWAAAA",x,y,w,h);
-#endif
-#endif
-}
-
-/** Draws a box of type FL_DOWN_BOX */
-void fl_down_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_down_frame(x,y,w,h,c);
-  fl_color(c); fl_rectf(x+D1, y+D1, w-D2, h-D2);
-}
-
-/** Draws a frame of type FL_ENGRAVED_FRAME */
-void fl_engraved_frame(int x, int y, int w, int h, Fl_Color) {
-  fl_frame("HHWWWWHH",x,y,w,h);
-}
-
-/** Draws a box of type FL_ENGRAVED_BOX */
-void fl_engraved_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_engraved_frame(x,y,w,h,c);
-  fl_color(draw_it_active ? c : fl_inactive(c));
-  fl_rectf(x+2, y+2, w-4, h-4);
-}
-
-/** Draws a frame of type FL_EMBOSSED_FRAME */
-void fl_embossed_frame(int x, int y, int w, int h, Fl_Color) {
-  fl_frame("WWHHHHWW",x,y,w,h);
-}
-
-/** Draws a box of type FL_EMBOSSED_BOX */
-void fl_embossed_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_embossed_frame(x,y,w,h,c);
-  fl_color(draw_it_active ? c : fl_inactive(c));
-  fl_rectf(x+2, y+2, w-4, h-4);
-}
-
-/**
-  Draws a bounded rectangle with a given position, size and color.
-  Equivalent to drawing a box of type FL_BORDER_BOX.
-*/
-void fl_rectbound(int x, int y, int w, int h, Fl_Color bgcolor) {
-  fl_color(draw_it_active ? FL_BLACK : fl_inactive(FL_BLACK));
-  fl_rect(x, y, w, h);
-  fl_color(draw_it_active ? bgcolor : fl_inactive(bgcolor));
-  fl_rectf(x+1, y+1, w-2, h-2);
-}
-#define fl_border_box fl_rectbound	/**< allow consistent naming */
-
-/**
-  Draws a frame of type FL_BORDER_FRAME.
-*/
-void fl_border_frame(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(draw_it_active ? c : fl_inactive(c));
-  fl_rect(x, y, w, h);
-}
-
-////////////////////////////////////////////////////////////////
-
-static struct {
-  Fl_Box_Draw_F *f;
-  uchar dx, dy, dw, dh;
-  int set;
-} fl_box_table[256] = {
-// must match list in Enumerations.H!!!
-  {fl_no_box,		0,0,0,0,1},		
-  {fl_rectf,		0,0,0,0,1}, // FL_FLAT_BOX
-  {fl_up_box,		D1,D1,D2,D2,1},
-  {fl_down_box,		D1,D1,D2,D2,1},
-  {fl_up_frame,		D1,D1,D2,D2,1},
-  {fl_down_frame,	D1,D1,D2,D2,1},
-  {fl_thin_up_box,	1,1,2,2,1},
-  {fl_thin_down_box,	1,1,2,2,1},
-  {fl_thin_up_frame,	1,1,2,2,1},
-  {fl_thin_down_frame,	1,1,2,2,1},
-  {fl_engraved_box,	2,2,4,4,1},
-  {fl_embossed_box,	2,2,4,4,1},
-  {fl_engraved_frame,	2,2,4,4,1},
-  {fl_embossed_frame,	2,2,4,4,1},
-  {fl_border_box,	1,1,2,2,1},
-  {fl_border_box,	1,1,5,5,0}, // _FL_SHADOW_BOX,
-  {fl_border_frame,	1,1,2,2,1},
-  {fl_border_frame,	1,1,5,5,0}, // _FL_SHADOW_FRAME,
-  {fl_border_box,	1,1,2,2,0}, // _FL_ROUNDED_BOX,
-  {fl_border_box,	1,1,2,2,0}, // _FL_RSHADOW_BOX,
-  {fl_border_frame,	1,1,2,2,0}, // _FL_ROUNDED_FRAME
-  {fl_rectf,		0,0,0,0,0}, // _FL_RFLAT_BOX,
-  {fl_up_box,		3,3,6,6,0}, // _FL_ROUND_UP_BOX
-  {fl_down_box,		3,3,6,6,0}, // _FL_ROUND_DOWN_BOX,
-  {fl_up_box,		0,0,0,0,0}, // _FL_DIAMOND_UP_BOX
-  {fl_down_box,		0,0,0,0,0}, // _FL_DIAMOND_DOWN_BOX
-  {fl_border_box,	1,1,2,2,0}, // _FL_OVAL_BOX,
-  {fl_border_box,	1,1,2,2,0}, // _FL_OVAL_SHADOW_BOX,
-  {fl_border_frame,	1,1,2,2,0}, // _FL_OVAL_FRAME
-  {fl_rectf,		0,0,0,0,0}, // _FL_OVAL_FLAT_BOX,
-  {fl_up_box,		4,4,8,8,0}, // _FL_PLASTIC_UP_BOX,
-  {fl_down_box,		2,2,4,4,0}, // _FL_PLASTIC_DOWN_BOX,
-  {fl_up_frame,		2,2,4,4,0}, // _FL_PLASTIC_UP_FRAME,
-  {fl_down_frame,	2,2,4,4,0}, // _FL_PLASTIC_DOWN_FRAME,
-  {fl_up_box,		2,2,4,4,0}, // _FL_PLASTIC_THIN_UP_BOX,
-  {fl_down_box,		2,2,4,4,0}, // _FL_PLASTIC_THIN_DOWN_BOX,
-  {fl_up_box,		2,2,4,4,0}, // _FL_PLASTIC_ROUND_UP_BOX,
-  {fl_down_box,		2,2,4,4,0}, // _FL_PLASTIC_ROUND_DOWN_BOX,
-  {fl_up_box,		2,2,4,4,0}, // _FL_GTK_UP_BOX,
-  {fl_down_box,		2,2,4,4,0}, // _FL_GTK_DOWN_BOX,
-  {fl_up_frame,		2,2,4,4,0}, // _FL_GTK_UP_FRAME,
-  {fl_down_frame,	2,2,4,4,0}, // _FL_GTK_DOWN_FRAME,
-  {fl_up_frame,		1,1,2,2,0}, // _FL_GTK_THIN_UP_FRAME,
-  {fl_down_frame,	1,1,2,2,0}, // _FL_GTK_THIN_DOWN_FRAME,
-  {fl_up_box,		1,1,2,2,0}, // _FL_GTK_THIN_ROUND_UP_BOX,
-  {fl_down_box,		1,1,2,2,0}, // _FL_GTK_THIN_ROUND_DOWN_BOX,
-  {fl_up_box,		2,2,4,4,0}, // _FL_GTK_ROUND_UP_BOX,
-  {fl_down_box,		2,2,4,4,0}, // _FL_GTK_ROUND_DOWN_BOX,
-  {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+0
-  {fl_down_box,		3,3,6,6,0}, // FL_FREE_BOX+1
-  {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+2
-  {fl_down_box,		3,3,6,6,0}, // FL_FREE_BOX+3
-  {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+4
-  {fl_down_box,		3,3,6,6,0}, // FL_FREE_BOX+5
-  {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+6
-  {fl_down_box,		3,3,6,6,0}, // FL_FREE_BOX+7
-};
-
-/**
-  Returns the X offset for the given boxtype.
-  \see box_dy()
-*/
-int Fl::box_dx(Fl_Boxtype t) {return fl_box_table[t].dx;}
-
-/**
-    Returns the Y offset for the given boxtype.
-
-    These functions return the offset values necessary for a given
-    boxtype, useful for computing the area inside a box's borders, to
-    prevent overdrawing the borders.
-
-    For instance, in the case of a boxtype like FL_DOWN_BOX
-    where the border width might be 2 pixels all around, the above 
-    functions would return 2, 2, 4, and 4 for box_dx, 
-    box_dy, box_dw, and box_dh respectively.
-
-    An example to compute the area inside a widget's box():
-    \code
-         int X = yourwidget->x() + Fl::box_dx(yourwidget->box());
-         int Y = yourwidget->y() + Fl::box_dy(yourwidget->box());
-         int W = yourwidget->w() - Fl::box_dw(yourwidget->box());
-         int H = yourwidget->h() - Fl::box_dh(yourwidget->box());
-    \endcode
-    These functions are mainly useful in the draw() code 
-    for deriving custom widgets, where one wants to avoid drawing 
-    over the widget's own border box().
-*/
-int Fl::box_dy(Fl_Boxtype t) {return fl_box_table[t].dy;}
-
-/**
-  Returns the width offset for the given boxtype.
-  \see box_dy().
-*/
-int Fl::box_dw(Fl_Boxtype t) {return fl_box_table[t].dw;}
-
-/**
-  Returns the height offset for the given boxtype.
-  \see box_dy().
-*/
-int Fl::box_dh(Fl_Boxtype t) {return fl_box_table[t].dh;}
-
-/**
-  Sets the drawing function for a given box type.
-  \param[in] t box type
-  \param[in] f box drawing function
-*/
-void fl_internal_boxtype(Fl_Boxtype t, Fl_Box_Draw_F* f) {
-  if (!fl_box_table[t].set) {
-    fl_box_table[t].f   = f;
-    fl_box_table[t].set = 1;
-  }
-}
-
-/** Gets the current box drawing function for the specified box type. */
-Fl_Box_Draw_F *Fl::get_boxtype(Fl_Boxtype t) {
-  return fl_box_table[t].f;
-}
-/** Sets the function to call to draw a specific boxtype. */
-void Fl::set_boxtype(Fl_Boxtype t, Fl_Box_Draw_F* f,
-		      uchar a, uchar b, uchar c, uchar d) {
-  fl_box_table[t].f   = f;
-  fl_box_table[t].set = 1;
-  fl_box_table[t].dx  = a;
-  fl_box_table[t].dy  = b;
-  fl_box_table[t].dw  = c;
-  fl_box_table[t].dh  = d;
-}
-/** Copies the from boxtype. */
-void Fl::set_boxtype(Fl_Boxtype to, Fl_Boxtype from) {
-  fl_box_table[to] = fl_box_table[from];
-}
-
-/**
-  Draws a box using given type, position, size and color.
-  \param[in] t box type
-  \param[in] x, y, w, h position and size
-  \param[in] c color
-*/
-void fl_draw_box(Fl_Boxtype t, int x, int y, int w, int h, Fl_Color c) {
-  if (t && fl_box_table[t].f) fl_box_table[t].f(x,y,w,h,c);
-}
-
-//extern Fl_Widget *fl_boxcheat; // hack set by Fl_Window.cxx
-/** Draws the widget box according its box style */
-void Fl_Widget::draw_box() const {
-  if (box_) draw_box((Fl_Boxtype)box_, x_, y_, w_, h_, color_);
-  draw_backdrop();
-}
-/** If FL_ALIGN_IMAGE_BACKDROP is set, the image or deimage will be drawn */
-void Fl_Widget::draw_backdrop() const {
-  if (align() & FL_ALIGN_IMAGE_BACKDROP) {
-    const Fl_Image *img = image();
-    // if there is no image, we will not draw the deimage either
-    if (img && deimage() && !active_r())
-      img = deimage();
-    if (img) 
-      ((Fl_Image*)img)->draw(x_+(w_-img->w())/2, y_+(h_-img->h())/2);
-  }
-}
-/** Draws a box of type t, of color c at the widget's position and size. */
-void Fl_Widget::draw_box(Fl_Boxtype t, Fl_Color c) const {
-  draw_box(t, x_, y_, w_, h_, c);
-}
-/** Draws a box of type t, of color c at the position X,Y and size W,H. */
-void Fl_Widget::draw_box(Fl_Boxtype t, int X, int Y, int W, int H, Fl_Color c) const {
-  draw_it_active = active_r();
-  fl_box_table[t].f(X, Y, W, H, c);
-  draw_it_active = 1;
-}
-
-//
-// End of "$Id: fl_boxtype.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_call_main.c b/common/fltk/src/fl_call_main.c
deleted file mode 100644
index 00f349f..0000000
--- a/common/fltk/src/fl_call_main.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * "$Id: fl_call_main.c 7903 2010-11-28 21:06:39Z matt $"
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * fl_call_main() calls main() for you Windows people.  Needs to be done in C
- * because Borland C++ won't let you call main() from C++.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * This WinMain() function can be overridden by an application and
- * is provided for compatibility with programs written for other
- * operating systems that conform to the ANSI standard entry point
- * "main()".  This will allow you to build a WIN32 Application
- * without any special settings.
- *
- * Because of problems with the Microsoft Visual C++ header files
- * and/or compiler, you cannot have a WinMain function in a DLL.
- * I don't know why.  Thus, this nifty feature is only available
- * if you link to the static library.
- *
- * Currently the debug version of this library will create a
- * console window for your application so you can put printf()
- * statements for debugging or informational purposes.  Ultimately
- * we want to update this to always use the parent's console,
- * but at present we have not identified a function or API in
- * Microsoft(r) Windows(r) that allows for it.
- */
-
-#if defined(WIN32) && !defined(FL_DLL) && !defined (__GNUC__)
-
-#  include <windows.h>
-#  include <stdio.h>
-#  include <stdlib.h>
-#  include <FL/fl_utf8.h>
-
-extern int main(int, char *[]);
-
-#  ifdef BORLAND5
-#    define __argc _argc
-#    define __argv _argv
-#  endif /* BORLAND5 */
-
-/* static int mbcs2utf(const char *s, int l, char *dst, unsigned dstlen) */
-static int mbcs2utf(const char *s, int l, char *dst)
-{
-  static xchar *mbwbuf;
-  unsigned dstlen = 0;
-  if (!s) return 0;
-  dstlen = (l * 6) + 6;
-  mbwbuf = (xchar*)malloc(dstlen * sizeof(xchar));
-  l = mbstowcs(mbwbuf, s, l);
-/* l = fl_unicode2utf(mbwbuf, l, dst); */
-  l = fl_utf8fromwc(dst, dstlen, mbwbuf, l);
-  dst[l] = 0;
-  free(mbwbuf);
-  return l;
-}
-
-int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
-                             LPSTR lpCmdLine, int nCmdShow) {
-  int rc, i;
-  char **ar;
-
-#  ifdef _DEBUG
- /*
-  * If we are using compiling in debug mode, open a console window so
-  * we can see any printf's, etc...
-  *
-  * While we can detect if the program was run from the command-line -
-  * look at the CMDLINE environment variable, it will be "WIN" for
-  * programs started from the GUI - the shell seems to run all WIN32
-  * applications in the background anyways...
-  */
-
-  AllocConsole();
-  freopen("conin$", "r", stdin);
-  freopen("conout$", "w", stdout);
-  freopen("conout$", "w", stderr);
-#  endif /* _DEBUG */
-
-  ar = (char**) malloc(sizeof(char*) * (__argc + 1));
-  i = 0;
-  while (i < __argc) {
-    int l;
-    unsigned dstlen;
-    if (__wargv ) {
-      for (l = 0; __wargv[i] && __wargv[i][l]; l++) {}; /* is this just wstrlen??? */
-      dstlen = (l * 5) + 1;
-      ar[i] = (char*) malloc(dstlen);
-/*    ar[i][fl_unicode2utf(__wargv[i], l, ar[i])] = 0; */
-      dstlen = fl_utf8fromwc(ar[i], dstlen, __wargv[i], l);
-      ar[i][dstlen] = 0;
-    } else {
-      for (l = 0; __argv[i] && __argv[i][l]; l++) {};
-      dstlen = (l * 5) + 1;
-      ar[i] = (char*) malloc(dstlen);
-/*      ar[i][mbcs2utf(__argv[i], l, ar[i], dstlen)] = 0; */
-      ar[i][mbcs2utf(__argv[i], l, ar[i])] = 0;
-    }
-    i++;
-  }
-  ar[__argc] = 0;
-  /* Run the standard main entry point function... */
-  rc = main(__argc, ar);
-
-#  ifdef _DEBUG
-  fclose(stdin);
-  fclose(stdout);
-  fclose(stderr);
-#  endif /* _DEBUG */
-
-  return rc;
-}
-
-#elif defined(__hpux)
-/* This code to prevent "empty translation unit" or similar warnings... */
-static void dummy(void) {}
-#endif /* WIN32 && !FL_DLL && !__GNUC__ */
-
-/*
- * End of "$Id: fl_call_main.c 7903 2010-11-28 21:06:39Z matt $".
- */
-
diff --git a/common/fltk/src/fl_cmap.h b/common/fltk/src/fl_cmap.h
deleted file mode 100644
index 3b05ee7..0000000
--- a/common/fltk/src/fl_cmap.h
+++ /dev/null
@@ -1,256 +0,0 @@
-	0x00000000,
-	0xff000000,
-	0x00ff0000,
-	0xffff0000,
-	0x0000ff00,
-	0xff00ff00,
-	0x00ffff00,
-	0xffffff00,
-	0x55555500,
-	0xc6717100,
-	0x71c67100,
-	0x8e8e3800,
-	0x7171c600,
-	0x8e388e00,
-	0x388e8e00,
-	0x00008000,
-	0xa8a89800,
-	0xe8e8d800,
-	0x68685800,
-	0x98a8a800,
-	0xd8e8e800,
-	0x58686800,
-	0x9c9ca800,
-	0xdcdce800,
-	0x5c5c6800,
-	0x9ca89c00,
-	0xdce8dc00,
-	0x5c685c00,
-	0x90909000,
-	0xc0c0c000,
-	0x50505000,
-	0xa0a0a000,
-	0x00000000,
-	0x0d0d0d00,
-	0x1a1a1a00,
-	0x26262600,
-	0x31313100,
-	0x3d3d3d00,
-	0x48484800,
-	0x55555500,
-	0x5f5f5f00,
-	0x6a6a6a00,
-	0x75757500,
-	0x80808000,
-	0x8a8a8a00,
-	0x95959500,
-	0xa0a0a000,
-	0xaaaaaa00,
-	0xb5b5b500,
-	0xc0c0c000,
-	0xcbcbcb00,
-	0xd5d5d500,
-	0xe0e0e000,
-	0xeaeaea00,
-	0xf5f5f500,
-	0xffffff00,
-	0x00000000,
-	0x00240000,
-	0x00480000,
-	0x006d0000,
-	0x00910000,
-	0x00b60000,
-	0x00da0000,
-	0x00ff0000,
-	0x3f000000,
-	0x3f240000,
-	0x3f480000,
-	0x3f6d0000,
-	0x3f910000,
-	0x3fb60000,
-	0x3fda0000,
-	0x3fff0000,
-	0x7f000000,
-	0x7f240000,
-	0x7f480000,
-	0x7f6d0000,
-	0x7f910000,
-	0x7fb60000,
-	0x7fda0000,
-	0x7fff0000,
-	0xbf000000,
-	0xbf240000,
-	0xbf480000,
-	0xbf6d0000,
-	0xbf910000,
-	0xbfb60000,
-	0xbfda0000,
-	0xbfff0000,
-	0xff000000,
-	0xff240000,
-	0xff480000,
-	0xff6d0000,
-	0xff910000,
-	0xffb60000,
-	0xffda0000,
-	0xffff0000,
-	0x00003f00,
-	0x00243f00,
-	0x00483f00,
-	0x006d3f00,
-	0x00913f00,
-	0x00b63f00,
-	0x00da3f00,
-	0x00ff3f00,
-	0x3f003f00,
-	0x3f243f00,
-	0x3f483f00,
-	0x3f6d3f00,
-	0x3f913f00,
-	0x3fb63f00,
-	0x3fda3f00,
-	0x3fff3f00,
-	0x7f003f00,
-	0x7f243f00,
-	0x7f483f00,
-	0x7f6d3f00,
-	0x7f913f00,
-	0x7fb63f00,
-	0x7fda3f00,
-	0x7fff3f00,
-	0xbf003f00,
-	0xbf243f00,
-	0xbf483f00,
-	0xbf6d3f00,
-	0xbf913f00,
-	0xbfb63f00,
-	0xbfda3f00,
-	0xbfff3f00,
-	0xff003f00,
-	0xff243f00,
-	0xff483f00,
-	0xff6d3f00,
-	0xff913f00,
-	0xffb63f00,
-	0xffda3f00,
-	0xffff3f00,
-	0x00007f00,
-	0x00247f00,
-	0x00487f00,
-	0x006d7f00,
-	0x00917f00,
-	0x00b67f00,
-	0x00da7f00,
-	0x00ff7f00,
-	0x3f007f00,
-	0x3f247f00,
-	0x3f487f00,
-	0x3f6d7f00,
-	0x3f917f00,
-	0x3fb67f00,
-	0x3fda7f00,
-	0x3fff7f00,
-	0x7f007f00,
-	0x7f247f00,
-	0x7f487f00,
-	0x7f6d7f00,
-	0x7f917f00,
-	0x7fb67f00,
-	0x7fda7f00,
-	0x7fff7f00,
-	0xbf007f00,
-	0xbf247f00,
-	0xbf487f00,
-	0xbf6d7f00,
-	0xbf917f00,
-	0xbfb67f00,
-	0xbfda7f00,
-	0xbfff7f00,
-	0xff007f00,
-	0xff247f00,
-	0xff487f00,
-	0xff6d7f00,
-	0xff917f00,
-	0xffb67f00,
-	0xffda7f00,
-	0xffff7f00,
-	0x0000bf00,
-	0x0024bf00,
-	0x0048bf00,
-	0x006dbf00,
-	0x0091bf00,
-	0x00b6bf00,
-	0x00dabf00,
-	0x00ffbf00,
-	0x3f00bf00,
-	0x3f24bf00,
-	0x3f48bf00,
-	0x3f6dbf00,
-	0x3f91bf00,
-	0x3fb6bf00,
-	0x3fdabf00,
-	0x3fffbf00,
-	0x7f00bf00,
-	0x7f24bf00,
-	0x7f48bf00,
-	0x7f6dbf00,
-	0x7f91bf00,
-	0x7fb6bf00,
-	0x7fdabf00,
-	0x7fffbf00,
-	0xbf00bf00,
-	0xbf24bf00,
-	0xbf48bf00,
-	0xbf6dbf00,
-	0xbf91bf00,
-	0xbfb6bf00,
-	0xbfdabf00,
-	0xbfffbf00,
-	0xff00bf00,
-	0xff24bf00,
-	0xff48bf00,
-	0xff6dbf00,
-	0xff91bf00,
-	0xffb6bf00,
-	0xffdabf00,
-	0xffffbf00,
-	0x0000ff00,
-	0x0024ff00,
-	0x0048ff00,
-	0x006dff00,
-	0x0091ff00,
-	0x00b6ff00,
-	0x00daff00,
-	0x00ffff00,
-	0x3f00ff00,
-	0x3f24ff00,
-	0x3f48ff00,
-	0x3f6dff00,
-	0x3f91ff00,
-	0x3fb6ff00,
-	0x3fdaff00,
-	0x3fffff00,
-	0x7f00ff00,
-	0x7f24ff00,
-	0x7f48ff00,
-	0x7f6dff00,
-	0x7f91ff00,
-	0x7fb6ff00,
-	0x7fdaff00,
-	0x7fffff00,
-	0xbf00ff00,
-	0xbf24ff00,
-	0xbf48ff00,
-	0xbf6dff00,
-	0xbf91ff00,
-	0xbfb6ff00,
-	0xbfdaff00,
-	0xbfffff00,
-	0xff00ff00,
-	0xff24ff00,
-	0xff48ff00,
-	0xff6dff00,
-	0xff91ff00,
-	0xffb6ff00,
-	0xffdaff00,
-	0xffffff00
diff --git a/common/fltk/src/fl_color.cxx b/common/fltk/src/fl_color.cxx
deleted file mode 100644
index 0645f1a..0000000
--- a/common/fltk/src/fl_color.cxx
+++ /dev/null
@@ -1,471 +0,0 @@
-//
-// "$Id: fl_color.cxx 8384 2011-02-06 12:32:23Z manolo $"
-//
-// Color functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_color.cxx
-  \brief Color handling
-*/
-
-// Implementation of fl_color(i), fl_color(r,g,b).
-
-#ifdef WIN32
-#  include "fl_color_win32.cxx"
-#elif defined(__APPLE__)
-#  include "fl_color_mac.cxx"
-#else
-
-// Also code to look at the X visual and figure out the best way to turn
-// a color into a pixel value.
-
-// SGI compiler seems to have problems with unsigned char arguments
-// being used to index arrays.  So I always copy them to an integer
-// before use.
-
-#  include "Fl_XColor.H"
-#  include <FL/Fl.H>
-#  include <FL/x.H>
-#  include <FL/fl_draw.H>
-
-////////////////////////////////////////////////////////////////
-// figure_out_visual() calculates masks & shifts for generating
-// pixels in true-color visuals:
-
-uchar fl_redmask;	/**< color mask used in current color map handling */
-uchar fl_greenmask;	/**< color mask used in current color map handling */
-uchar fl_bluemask;	/**< color mask used in current color map handling */
-
-int fl_redshift;	/**< color shift used in current color map handling */
-int fl_greenshift;	/**< color shift used in current color map handling */
-int fl_blueshift;	/**< color shift used in current color map handling */
-int fl_extrashift;	/**< color shift used in current color map handling */
-
-static uchar beenhere;
-
-static void figure_out_visual() {
-  beenhere = 1;
-  if (!fl_visual->red_mask || !fl_visual->green_mask || !fl_visual->blue_mask){
-#  if USE_COLORMAP
-    fl_redmask = 0;
-    return;
-#  else
-    Fl::fatal("Requires true color visual");
-#  endif
-  }
-
-  // get the bit masks into a more useful form:
-  int i,j,m;
-
-  for (i = 0, m = 1; m; i++, m<<=1) if (fl_visual->red_mask & m) break;
-  for (j = i; m; j++, m<<=1) if (!(fl_visual->red_mask & m)) break;
-  fl_redshift = j-8;
-  fl_redmask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
-
-  for (i = 0, m = 1; m; i++, m<<=1) if (fl_visual->green_mask & m) break;
-  for (j = i; m; j++, m<<=1) if (!(fl_visual->green_mask & m)) break;
-  fl_greenshift = j-8;
-  fl_greenmask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
-
-  for (i = 0, m = 1; m; i++, m<<=1) if (fl_visual->blue_mask & m) break;
-  for (j = i; m; j++, m<<=1) if (!(fl_visual->blue_mask & m)) break;
-  fl_blueshift = j-8;
-  fl_bluemask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
-
-  i = fl_redshift;
-  if (fl_greenshift < i) i = fl_greenshift;
-  if (fl_blueshift < i) i = fl_blueshift;
-  if (i < 0) {
-    fl_extrashift = -i;
-    fl_redshift -= i; fl_greenshift -= i; fl_blueshift -= i;
-  } else
-    fl_extrashift = 0;
-
-}
-
-static unsigned fl_cmap[256] = {
-#include "fl_cmap.h" // this is a file produced by "cmap.cxx":
-};
-
-#  if HAVE_OVERLAY
-/** HAVE_OVERLAY determines whether fl_xmap is one or two planes */
-Fl_XColor fl_xmap[2][256];
-/** HAVE_OVERLAY determines whether fl_overlay is variable or defined as 0 */
-uchar fl_overlay;
-Colormap fl_overlay_colormap;
-XVisualInfo* fl_overlay_visual;
-ulong fl_transparent_pixel;
-#  else
-/** HAVE_OVERLAY determines whether fl_xmap is one or two planes */
-Fl_XColor fl_xmap[1][256];
-/** HAVE_OVERLAY determines whether fl_overlay is variable or defined as 0 */
-#    define fl_overlay 0
-#  endif
-
-void Fl_Xlib_Graphics_Driver::color(Fl_Color i) {
-  if (i & 0xffffff00) {
-    unsigned rgb = (unsigned)i;
-    fl_color((uchar)(rgb >> 24), (uchar)(rgb >> 16), (uchar)(rgb >> 8));
-  } else {
-    Fl_Graphics_Driver::color(i);
-    if(!fl_gc) return; // don't get a default gc if current window is not yet created/valid
-    XSetForeground(fl_display, fl_gc, fl_xpixel(i));
-  }
-}
-
-void Fl_Xlib_Graphics_Driver::color(uchar r,uchar g,uchar b) {
-  Fl_Graphics_Driver::color( fl_rgb_color(r, g, b) );
-  if(!fl_gc) return; // don't get a default gc if current window is not yet created/valid
-  XSetForeground(fl_display, fl_gc, fl_xpixel(r,g,b));
-}
-
-/** \addtogroup  fl_attributes
-    @{ */
-////////////////////////////////////////////////////////////////
-// Get an rgb color.  This is easy for a truecolor visual.  For
-// colormapped it picks the closest color out of the cube in the
-// fltk colormap.  However if this color cube entry has been
-// requested before, you will get the earlier requested color, and
-// even this may be approximated if the X colormap was full.
-
-/**
-  Returns the X pixel number used to draw the given rgb color.
-  This is the X pixel that fl_color() would use.
-  \param[in] r,g,b color components
-  \return X pixel number
-*/
-ulong fl_xpixel(uchar r,uchar g,uchar b) {
-  if (!beenhere) figure_out_visual();
-#  if USE_COLORMAP
-  if (!fl_redmask) {
-    // find closest entry in the colormap:
-    Fl_Color i =
-      fl_color_cube(r*FL_NUM_RED/256,g*FL_NUM_GREEN/256,b*FL_NUM_BLUE/256);
-    Fl_XColor &xmap = fl_xmap[fl_overlay][i];
-    if (xmap.mapped) return xmap.pixel;
-    // if not black or white, change the entry to be an exact match:
-    if (i != FL_COLOR_CUBE && i != 0xFF)
-      fl_cmap[i] = (r<<24)|(g<<16)|(b<<8);
-    return fl_xpixel(i); // allocate an X color
-  }
-#  endif
-  return
-    (((r&fl_redmask) << fl_redshift)+
-     ((g&fl_greenmask)<<fl_greenshift)+
-     ((b&fl_bluemask)<< fl_blueshift)
-     ) >> fl_extrashift;
-}
-
-////////////////////////////////////////////////////////////////
-// Get a color out of the fltk colormap.  Again for truecolor
-// visuals this is easy.  For colormap this actually tries to allocate
-// an X color, and does a least-squares match to find the closest
-// color if X cannot allocate that color.
-
-// calculate what color is actually on the screen for a mask:
-static inline uchar realcolor(uchar color, uchar mask) {
-#  if 0
-  // accurate version if the display has linear gamma, but fl_draw_image
-  // works better with the simpler version on most screens...
-  uchar m = mask;
-  uchar result = color&m;
-  for (;;) {
-    while (m&mask) {m>>=1; color>>=1;}
-    if (!m) break;
-    mask = m;
-    result |= color&m;
-  }
-  return result;
-#  else
-  return (color&mask) | ( (~mask)&(mask>>1) );
-#  endif
-}
-
-/**
-  Returns the X pixel number used to draw the given FLTK color index.
-  This is the X pixel that fl_color() would use.
-  \param[in] i color index
-  \return X pixel number
-*/
-ulong fl_xpixel(Fl_Color i) {
-  if (i & 0xffffff00) {
-    return fl_xpixel((i >> 24) & 255, (i >> 16) & 255, (i >> 8) & 255);
-  }
-
-  Fl_XColor &xmap = fl_xmap[fl_overlay][i];
-  if (xmap.mapped) return xmap.pixel;
-
-  if (!beenhere) figure_out_visual();
-
-  uchar r,g,b;
-  {unsigned c = fl_cmap[i]; r=uchar(c>>24); g=uchar(c>>16); b=uchar(c>>8);}
-
-#  if USE_COLORMAP
-  Colormap colormap = fl_colormap;
-#    if HAVE_OVERLAY
-  if (fl_overlay) colormap = fl_overlay_colormap; else
-#    endif
-  if (fl_redmask) {
-#  endif
-    // return color for a truecolor visual:
-    xmap.mapped = 2; // 2 prevents XFreeColor from being called
-    xmap.r = realcolor(r, fl_redmask);
-    xmap.g = realcolor(g, fl_greenmask);
-    xmap.b = realcolor(b, fl_bluemask);
-    return xmap.pixel = 
-      (((r&fl_redmask) << fl_redshift)+
-       ((g&fl_greenmask)<<fl_greenshift)+
-       ((b&fl_bluemask)<< fl_blueshift)
-       ) >> fl_extrashift;
-#  if USE_COLORMAP
-  }
-#    if HAVE_OVERLAY
-  static XColor* ac[2];
-  XColor*& allcolors = ac[fl_overlay];
-  static int nc[2];
-  int& numcolors = nc[fl_overlay];
-#    else
-  static XColor *allcolors;
-  static int numcolors;
-#    endif
-
-  // I don't try to allocate colors with XAllocColor once it fails
-  // with any color.  It is possible that it will work, since a color
-  // may have been freed, but some servers are extremely slow and this
-  // avoids one round trip:
-  if (!numcolors) { // don't try after a failure
-    XColor xcol;
-    xcol.red = r<<8; xcol.green = g<<8; xcol.blue = b<<8;
-    if (XAllocColor(fl_display, colormap, &xcol)) {
-      xmap.mapped = 1;
-      xmap.r = xcol.red>>8;
-      xmap.g = xcol.green>>8;
-      xmap.b = xcol.blue>>8;
-      return xmap.pixel = xcol.pixel;
-    }
-
-    // I only read the colormap once.  Again this is due to the slowness
-    // of round-trips to the X server, even though other programs may alter
-    // the colormap after this and make decisions here wrong.
-#    if HAVE_OVERLAY
-    if (fl_overlay) numcolors = fl_overlay_visual->colormap_size; else
-#    endif
-      numcolors = fl_visual->colormap_size;
-    if (!allcolors) allcolors = new XColor[numcolors];
-    for (int p = numcolors; p--;) allcolors[p].pixel = p;
-    XQueryColors(fl_display, colormap, allcolors, numcolors);
-  }
-
-  // find least-squares match:
-  int mindist = 0x7FFFFFFF;
-  unsigned int bestmatch = 0;
-  for (unsigned int n = numcolors; n--;) {
-#    if HAVE_OVERLAY
-    if (fl_overlay && n == fl_transparent_pixel) continue;
-#    endif
-    XColor &a = allcolors[n];
-    int d, t;
-    t = int(r)-int(a.red>>8); d = t*t;
-    t = int(g)-int(a.green>>8); d += t*t;
-    t = int(b)-int(a.blue>>8); d += t*t;
-    if (d <= mindist) {bestmatch = n; mindist = d;}
-  }
-  XColor &p = allcolors[bestmatch];
-
-  // It appears to "work" to not call this XAllocColor, which will
-  // avoid another round-trip to the server.  But then X does not
-  // know that this program "owns" this value, and can (and will)
-  // change it when the program that did allocate it exits:
-  if (XAllocColor(fl_display, colormap, &p)) {
-    xmap.mapped = 1;
-    xmap.pixel = p.pixel;
-  } else {
-    // However, if that XAllocColor fails, I have to give up and
-    // assume the pixel is ok for the duration of the program.  This
-    // is due to bugs (?) in the Solaris X and some X terminals
-    // where XAllocColor *always* fails when the colormap is full,
-    // even if we ask for a color already in it...
-    xmap.mapped = 2; // 2 prevents XFreeColor from being called
-    xmap.pixel = bestmatch;
-  }
-  xmap.r = p.red>>8;
-  xmap.g = p.green>>8;
-  xmap.b = p.blue>>8;
-  return xmap.pixel;
-#  endif
-}
-
-/**
-  Free color \p i if used, and clear mapping table entry.
-  \param[in] i color index
-  \param[in] overlay 0 for normal, 1 for overlay color
-*/
-void Fl::free_color(Fl_Color i, int overlay) {
-#  if HAVE_OVERLAY
-#  else
-  if (overlay) return;
-#  endif
-  if (fl_xmap[overlay][i].mapped) {
-#  if USE_COLORMAP
-#    if HAVE_OVERLAY
-    Colormap colormap = overlay ? fl_overlay_colormap : fl_colormap;
-#    else
-    Colormap colormap = fl_colormap;
-#    endif
-    if (fl_xmap[overlay][i].mapped == 1)
-      XFreeColors(fl_display, colormap, &(fl_xmap[overlay][i].pixel), 1, 0);
-#  endif
-    fl_xmap[overlay][i].mapped = 0;
-  }
-}
-
-/**
-  Set color mapping table entry \p i to color \p c
-  \param[in] i color index
-  \param[in] c color
-*/
-void Fl::set_color(Fl_Color i, unsigned c) {
-  if (fl_cmap[i] != c) {
-    free_color(i,0);
-#  if HAVE_OVERLAY
-    free_color(i,1);
-#  endif
-    fl_cmap[i] = c;
-  }
-}
-
-#endif // end of X-specific code
-/**
-    Returns the RGB value(s) for the given FLTK color index.
-    
-    This form returns the RGB values packed in a 32-bit unsigned
-    integer with the red value in the upper 8 bits, the green value
-    in the next 8 bits, and the blue value in bits 8-15.  The lower
-    8 bits will always be 0.
-*/
-unsigned Fl::get_color(Fl_Color i) {
-  if (i & 0xffffff00) return (i);
-  else return fl_cmap[i];
-}
-/**
-    Sets an entry in the fl_color index table.  You can set it to
-    any 8-bit RGB color.  The color is not allocated until fl_color(i)
-    is used.
-*/
-void Fl::set_color(Fl_Color i, uchar red, uchar green, uchar blue) {
-  Fl::set_color((Fl_Color)(i & 255),
-	((unsigned)red<<24)+((unsigned)green<<16)+((unsigned)blue<<8));
-}
-/**
-    Returns the RGB value(s) for the given FLTK color index. 
-    
-    This form returns the red, green, and blue values
-    separately in referenced variables.
-
-    See also unsigned get_color(Fl_Color c)
- */
-void Fl::get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue) {
-  unsigned c;
-
-  if (i & 0xffffff00) c = (unsigned)i;
-  else c = fl_cmap[i];
-
-  red   = uchar(c>>24);
-  green = uchar(c>>16);
-  blue  = uchar(c>>8);
-}
-
-/**
-  Returns the weighted average color between the two given colors.
-  The red, green and blue values are averages using the following formula:
-  \code
-  color = color1 * weight  + color2 * (1 - weight)
-  \endcode
-  Thus, a \p weight value of 1.0 will return the first color, while a
-  value of 0.0 will return the second color.
-  \param[in] color1, color2 boundary colors
-  \param[in] weight weighting factor
-*/
-Fl_Color fl_color_average(Fl_Color color1, Fl_Color color2, float weight) {
-  unsigned rgb1;
-  unsigned rgb2;
-  uchar r, g, b;
-
-  if (color1 & 0xffffff00) rgb1 = color1;
-  else rgb1 = fl_cmap[color1 & 255];
-
-  if (color2 & 0xffffff00) rgb2 = color2;
-  else rgb2 = fl_cmap[color2 & 255];
-
-  r = (uchar)(((uchar)(rgb1>>24))*weight + ((uchar)(rgb2>>24))*(1-weight));
-  g = (uchar)(((uchar)(rgb1>>16))*weight + ((uchar)(rgb2>>16))*(1-weight));
-  b = (uchar)(((uchar)(rgb1>>8))*weight + ((uchar)(rgb2>>8))*(1-weight));
-
-  return fl_rgb_color(r, g, b);
-}
-
-/**
-  Returns the inactive, dimmed version of the given color
-*/
-Fl_Color fl_inactive(Fl_Color c) {
-  return fl_color_average(c, FL_GRAY, .33f);
-}
-
-/**
-  Returns a color that contrasts with the background color.
-  This will be the foreground color if it contrasts sufficiently with the
-  background color. Otherwise, returns \p FL_WHITE or \p FL_BLACK depending
-  on which color provides the best contrast.
-  \param[in] fg,bg foreground and background colors
-  \return contrasting color
-*/
-Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg) {
-  unsigned c1, c2;	// RGB colors
-  int l1, l2;		// Luminosities
-
-
-  // Get the RGB values for each color...
-  if (fg & 0xffffff00) c1 = (unsigned)fg;
-  else c1 = fl_cmap[fg];
-
-  if (bg & 0xffffff00) c2 = (unsigned)bg;
-  else c2 = fl_cmap[bg];
-
-  // Compute the luminosity...
-  l1 = ((c1 >> 24) * 30 + ((c1 >> 16) & 255) * 59 + ((c1 >> 8) & 255) * 11) / 100;
-  l2 = ((c2 >> 24) * 30 + ((c2 >> 16) & 255) * 59 + ((c2 >> 8) & 255) * 11) / 100;
-
-  // Compare and return the contrasting color...
-  if ((l1 - l2) > 99) return fg;
-  else if ((l2 - l1) > 99) return fg;
-  else if (l2 > 127) return FL_BLACK;
-  else return FL_WHITE;
-}
-/**
-   @}
-*/
-//
-// End of "$Id: fl_color.cxx 8384 2011-02-06 12:32:23Z manolo $".
-//
diff --git a/common/fltk/src/fl_color_mac.cxx b/common/fltk/src/fl_color_mac.cxx
deleted file mode 100644
index c6351c0..0000000
--- a/common/fltk/src/fl_color_mac.cxx
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// "$Id: fl_color_mac.cxx 8384 2011-02-06 12:32:23Z manolo $"
-//
-// MacOS color functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// The fltk "colormap".  This allows ui colors to be stored in 8-bit
-// locations, and provides a level of indirection so that global color
-// changes can be made.  Not to be confused with the X colormap, which
-// I try to hide completely.
-
-// matt: Neither Quartz nor Quickdraw support colormaps in this implementation
-// matt: Quartz support done
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-static unsigned fl_cmap[256] = {
-#include "fl_cmap.h" // this is a file produced by "cmap.cxx":
-};
-
-// Translations to mac data structures:
-Fl_XMap fl_xmap[256];
-
-Fl_XMap* fl_current_xmap;
-
-void Fl_Quartz_Graphics_Driver::color(Fl_Color i) {
-  Fl_Graphics_Driver::color(i);
-  int index;
-  uchar r, g, b;
-  if (i & 0xFFFFFF00) {
-    // translate rgb colors into color index
-    r = i>>24;
-    g = i>>16;
-    b = i>> 8;
-  } else {
-    // translate index into rgb:
-    index = i;
-    unsigned c = fl_cmap[i];
-    r = c>>24;
-    g = c>>16;
-    b = c>> 8;
-  }
-  if (!fl_gc) return; // no context yet? We will assign the color later.
-  float fr = r/255.0f;
-  float fg = g/255.0f;
-  float fb = b/255.0f;
-  CGContextSetRGBFillColor(fl_gc, fr, fg, fb, 1.0f);
-  CGContextSetRGBStrokeColor(fl_gc, fr, fg, fb, 1.0f);
-}
-
-void Fl_Quartz_Graphics_Driver::color(uchar r, uchar g, uchar b) {
-  Fl_Graphics_Driver::color( fl_rgb_color(r, g, b) );
-  float fr = r/255.0f;
-  float fg = g/255.0f;
-  float fb = b/255.0f;
-  CGContextSetRGBFillColor(fl_gc, fr, fg, fb, 1.0f);
-  CGContextSetRGBStrokeColor(fl_gc, fr, fg, fb, 1.0f);
-}
-
-void Fl::set_color(Fl_Color i, unsigned c) {
-  if (fl_cmap[i] != c) {
-    fl_cmap[i] = c;
-  }
-}
-
-//
-// End of "$Id: fl_color_mac.cxx 8384 2011-02-06 12:32:23Z manolo $".
-//
diff --git a/common/fltk/src/fl_color_win32.cxx b/common/fltk/src/fl_color_win32.cxx
deleted file mode 100644
index 7925f2d..0000000
--- a/common/fltk/src/fl_color_win32.cxx
+++ /dev/null
@@ -1,252 +0,0 @@
-//
-// "$Id: fl_color_win32.cxx 8384 2011-02-06 12:32:23Z manolo $"
-//
-// WIN32 color functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// The fltk "colormap".  This allows ui colors to be stored in 8-bit
-// locations, and provides a level of indirection so that global color
-// changes can be made.  Not to be confused with the X colormap, which
-// I try to hide completely.
-
-// SGI compiler seems to have problems with unsigned char arguments
-// being used to index arrays.  So I always copy them to an integer
-// before use.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-static unsigned fl_cmap[256] = {
-#include "fl_cmap.h" // this is a file produced by "cmap.cxx":
-};
-
-// Translations to win32 data structures:
-Fl_XMap fl_xmap[256];
-
-Fl_XMap* fl_current_xmap;
-
-HPALETTE fl_palette;
-static HGDIOBJ tmppen=0;
-static HPEN savepen=0;
-
-void fl_cleanup_pens(void) {
-  for (int i=0; i<256; i++) {
-    if (fl_xmap[i].pen) DeleteObject(fl_xmap[i].pen);
-  }
-}
-
-void fl_save_pen(void) {
-    if(!tmppen) tmppen = CreatePen(PS_SOLID, 1, 0);
-    savepen = (HPEN)SelectObject(fl_gc, tmppen);
-}
-
-void fl_restore_pen(void) {
-    if (savepen) SelectObject(fl_gc, savepen);
-    DeleteObject(tmppen);
-    tmppen = 0;
-    savepen = 0;
-}
-
-static void clear_xmap(Fl_XMap& xmap) {
-  if (xmap.pen) {
-    HGDIOBJ tmppen = GetStockObject(BLACK_PEN);
-    HGDIOBJ oldpen = SelectObject(fl_gc, tmppen);       // Push out the current pen of the gc
-    if(oldpen != xmap.pen) SelectObject(fl_gc, oldpen); // Put it back if it is not the one we are about to delete
-    DeleteObject((HGDIOBJ)(xmap.pen));
-    xmap.pen = 0;
-    xmap.brush = -1;
-  }
-}
-
-static void set_xmap(Fl_XMap& xmap, COLORREF c) {
-  xmap.rgb = c;
-  if (xmap.pen) {
-      HGDIOBJ oldpen = SelectObject(fl_gc,GetStockObject(BLACK_PEN)); // replace current pen with safe one
-      if (oldpen != xmap.pen)SelectObject(fl_gc,oldpen);              // if old one not xmap.pen, need to put it back
-      DeleteObject(xmap.pen);                                         // delete pen
-  }
-  xmap.pen = CreatePen(PS_SOLID, 1, xmap.rgb);                        // get a pen into xmap.pen
-  xmap.brush = -1;
-}
-
-void Fl_GDI_Graphics_Driver::color(Fl_Color i) {
-  if (i & 0xffffff00) {
-    unsigned rgb = (unsigned)i;
-    fl_color((uchar)(rgb >> 24), (uchar)(rgb >> 16), (uchar)(rgb >> 8));
-  } else {
-    Fl_Graphics_Driver::color(i);
-    Fl_XMap &xmap = fl_xmap[i];
-    if (!xmap.pen) {
-#if USE_COLORMAP
-      if (fl_palette) {
-	set_xmap(xmap, PALETTEINDEX(i));
-      } else {
-#endif
-	unsigned c = fl_cmap[i];
-	set_xmap(xmap, RGB(uchar(c>>24), uchar(c>>16), uchar(c>>8)));
-#if USE_COLORMAP
-      }
-#endif
-    }
-    fl_current_xmap = &xmap;
-    SelectObject(fl_gc, (HGDIOBJ)(xmap.pen));
-  }
-}
-
-void Fl_GDI_Graphics_Driver::color(uchar r, uchar g, uchar b) {
-  static Fl_XMap xmap;
-  COLORREF c = RGB(r,g,b);
-  Fl_Graphics_Driver::color( fl_rgb_color(r, g, b) );
-  if (!xmap.pen || c != xmap.rgb) {
-    clear_xmap(xmap);
-    set_xmap(xmap, c);
-  }
-  fl_current_xmap = &xmap;
-  SelectObject(fl_gc, (HGDIOBJ)(xmap.pen));
-}
-
-HBRUSH fl_brush() {
-  return fl_brush_action(0);
-}
-
-HBRUSH fl_brush_action(int action) {
-  Fl_XMap *xmap = fl_current_xmap;
-  // Wonko: we use some statistics to cache only a limited number
-  // of brushes:
-#define FL_N_BRUSH 16
-  static struct Fl_Brush {
-    HBRUSH brush;
-    unsigned short usage;
-    Fl_XMap* backref;
-  } brushes[FL_N_BRUSH];
-
-  if (action) {
-    SelectObject(fl_gc, GetStockObject(BLACK_BRUSH));  // Load stock object
-    for (int i=0; i<FL_N_BRUSH; i++) {
-      if (brushes[i].brush)
-        DeleteObject(brushes[i].brush); // delete all brushes in array
-    }
-    return NULL;
-  }
-
-  int i = xmap->brush; // find the associated brush
-  if (i != -1) { // if the brush was allready allocated
-    if (brushes[i].brush == NULL) goto CREATE_BRUSH;
-    if ( (++brushes[i].usage) > 32000 ) { // keep a usage statistic
-      for (int j=0; j<FL_N_BRUSH; j++) {
-	if (brushes[j].usage>16000)
-	  brushes[j].usage -= 16000;
-	else 
-	  brushes[j].usage = 0;
-      }
-    }
-    return brushes[i].brush;
-  } else {
-    int umin = 32000, imin = 0;
-    for (i=0; i<FL_N_BRUSH; i++) {
-      if (brushes[i].brush == NULL) goto CREATE_BRUSH;
-      if (brushes[i].usage<umin) {
-	umin = brushes[i].usage;
-	imin = i;
-      }
-    }
-    i = imin;
-    HGDIOBJ tmpbrush = GetStockObject(BLACK_BRUSH);  // get a stock brush
-    HGDIOBJ oldbrush = SelectObject(fl_gc,tmpbrush); // load in into current context
-    if (oldbrush != brushes[i].brush) SelectObject(fl_gc,oldbrush);  // reload old one
-    DeleteObject(brushes[i].brush);      // delete the one in list
-    brushes[i].brush = NULL;
-    brushes[i].backref->brush = -1;
-  }
-CREATE_BRUSH:
-  brushes[i].brush = CreateSolidBrush(xmap->rgb);
-  brushes[i].usage = 0;
-  brushes[i].backref = xmap;
-  xmap->brush = i;
-  return brushes[i].brush;
-}
-
-void Fl::free_color(Fl_Color i, int overlay) {
-  if (overlay) return; // do something about GL overlay?
-  clear_xmap(fl_xmap[i]);
-}
-
-void Fl::set_color(Fl_Color i, unsigned c) {
-  if (fl_cmap[i] != c) {
-    clear_xmap(fl_xmap[i]);
-    fl_cmap[i] = c;
-  }
-}
-
-#if USE_COLORMAP
-
-// 'fl_select_palette()' - Make a color palette for 8-bit displays if necessary
-// Thanks to Michael Sweet @ Easy Software Products for this
-
-HPALETTE
-fl_select_palette(void)
-{
-  static char beenhere;
-  if (!beenhere) {
-    beenhere = 1;
-
-    //if (GetDeviceCaps(fl_gc, BITSPIXEL) > 8) return NULL;
-    int nColors = GetDeviceCaps(fl_gc, SIZEPALETTE);
-    if (nColors <= 0 || nColors > 256) return NULL;
-    // this will try to work on < 256 color screens, but will probably
-    // come out quite badly.
-
-    // I lamely try to get this variable-sized object allocated on stack:
-    ulong foo[(sizeof(LOGPALETTE)+256*sizeof(PALETTEENTRY))/sizeof(ulong)+1];
-    LOGPALETTE *pPal = (LOGPALETTE*)foo;
-
-    pPal->palVersion    = 0x300;
-    pPal->palNumEntries = nColors;
-
-    // Build 256 colors from the standard FLTK colormap...
-
-    for (int i = 0; i < nColors; i ++) {
-      pPal->palPalEntry[i].peRed   = (fl_cmap[i] >> 24) & 255;
-      pPal->palPalEntry[i].peGreen = (fl_cmap[i] >> 16) & 255;
-      pPal->palPalEntry[i].peBlue  = (fl_cmap[i] >>  8) & 255;
-      pPal->palPalEntry[i].peFlags = 0;
-    };
-
-    // Create the palette:
-    fl_palette = CreatePalette(pPal);
-  }
-  if (fl_palette) {
-    SelectPalette(fl_gc, fl_palette, FALSE);
-    RealizePalette(fl_gc);
-  }
-  return fl_palette;
-}
-
-#endif
-
-//
-// End of "$Id: fl_color_win32.cxx 8384 2011-02-06 12:32:23Z manolo $".
-//
diff --git a/common/fltk/src/fl_cursor.cxx b/common/fltk/src/fl_cursor.cxx
deleted file mode 100644
index bad3936..0000000
--- a/common/fltk/src/fl_cursor.cxx
+++ /dev/null
@@ -1,188 +0,0 @@
-//
-// "$Id: fl_cursor.cxx 8055 2010-12-18 22:31:01Z manolo $"
-//
-// Mouse cursor support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Change the current cursor.
-// Under X the cursor is attached to the X window.  I tried to hide
-// this and pretend that changing the cursor is a drawing function.
-// This avoids a field in the Fl_Window, and I suspect is more
-// portable to other systems.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_RGB_Image.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-#include "fl_cursor_wait.xpm"
-#include "fl_cursor_help.xpm"
-#include "fl_cursor_nwse.xpm"
-#include "fl_cursor_nesw.xpm"
-#include "fl_cursor_none.xpm"
-
-/**
-  Sets the cursor for the current window to the specified shape and colors.
-  The cursors are defined in the <FL/Enumerations.H> header file. 
-  */
-void fl_cursor(Fl_Cursor c) {
-  if (Fl::first_window()) Fl::first_window()->cursor(c);
-}
-
-/* For back compatibility only. */
-void fl_cursor(Fl_Cursor c, Fl_Color fg, Fl_Color bg) {
-  fl_cursor(c);
-}
-
-
-/** 
-    Sets the default window cursor. This is the cursor that will be used
-    after the mouse pointer leaves a widget with a custom cursor set.
-
-    \see cursor(const Fl_RGB_Image*, int, int), default_cursor()
-*/
-void Fl_Window::default_cursor(Fl_Cursor c) {
-  cursor_default = c;
-  cursor(c);
-}
-
-
-void fallback_cursor(Fl_Window *w, Fl_Cursor c) {
-  const char **xpm;
-  int hotx, hoty;
-
-  // The standard arrow is our final fallback, so something is broken
-  // if we get called back here with that as an argument.
-  if (c == FL_CURSOR_ARROW)
-    return;
-
-  switch (c) {
-  case FL_CURSOR_WAIT:
-    xpm = (const char**)fl_cursor_wait_xpm;
-    hotx = 8;
-    hoty = 15;
-    break;
-  case FL_CURSOR_HELP:
-    xpm = (const char**)fl_cursor_help_xpm;
-    hotx = 1;
-    hoty = 3;
-    break;
-  case FL_CURSOR_NWSE:
-    xpm = (const char**)fl_cursor_nwse_xpm;
-    hotx = 7;
-    hoty = 7;
-    break;
-  case FL_CURSOR_NESW:
-    xpm = (const char**)fl_cursor_nesw_xpm;
-    hotx = 7;
-    hoty = 7;
-    break;
-  case FL_CURSOR_NONE:
-    xpm = (const char**)fl_cursor_none_xpm;
-    hotx = 0;
-    hoty = 0;
-    break;
-  default:
-    w->cursor(FL_CURSOR_ARROW);
-    return;
-  }
-
-  Fl_Pixmap pxm(xpm);
-  Fl_RGB_Image image(&pxm);
-
-  w->cursor(&image, hotx, hoty);
-}
-
-
-void Fl_Window::cursor(Fl_Cursor c) {
-  int ret;
-
-  // the cursor must be set for the top level window, not for subwindows
-  Fl_Window *w = window(), *toplevel = this;
-
-  while (w) {
-    toplevel = w;
-    w = w->window();
-  }
-
-  if (toplevel != this) {
-    toplevel->cursor(c);
-    return;
-  }
-
-  if (c == FL_CURSOR_DEFAULT)
-    c = cursor_default;
-
-  if (!i)
-    return;
-
-  ret = i->set_cursor(c);
-  if (ret)
-    return;
-
-  fallback_cursor(this, c);
-}
-
-/**
-  Changes the cursor for this window.  This always calls the system, if
-  you are changing the cursor a lot you may want to keep track of how
-  you set it in a static variable and call this only if the new cursor
-  is different.
-
-  The default cursor will be used if the provided image cannot be used
-  as a cursor.
-
-  \see cursor(Fl_Cursor), default_cursor()
-*/
-void Fl_Window::cursor(const Fl_RGB_Image *image, int hotx, int hoty) {
-  int ret;
-
-  // the cursor must be set for the top level window, not for subwindows
-  Fl_Window *w = window(), *toplevel = this;
-
-  while (w) {
-    toplevel = w;
-    w = w->window();
-  }
-
-  if (toplevel != this) {
-    toplevel->cursor(image, hotx, hoty);
-    return;
-  }
-
-  if (!i)
-    return;
-
-  ret = i->set_cursor(image, hotx, hoty);
-  if (ret)
-    return;
-
-  cursor(FL_CURSOR_DEFAULT);
-}
-
-//
-// End of "$Id: fl_cursor.cxx 8055 2010-12-18 22:31:01Z manolo $".
-//
diff --git a/common/fltk/src/fl_cursor_help.xpm b/common/fltk/src/fl_cursor_help.xpm
deleted file mode 100644
index 2d5b257..0000000
--- a/common/fltk/src/fl_cursor_help.xpm
+++ /dev/null
@@ -1,95 +0,0 @@
-/* XPM */
-static const char * fl_cursor_help_xpm[] = {
-"16 27 65 1",
-" 	c None",
-".	c #FFFFFF",
-"+	c #E2E2E2",
-"@	c #1C1C1C",
-"#	c #E7E7E7",
-"$	c #000000",
-"%	c #212121",
-"&	c #EAEAEA",
-"*	c #262626",
-"=	c #EDEDED",
-"-	c #2C2C2C",
-";	c #F0F0F0",
-">	c #333333",
-",	c #F1F1F1",
-"'	c #393939",
-")	c #F3F3F3",
-"!	c #404040",
-"~	c #484848",
-"{	c #F4F4F4",
-"]	c #050505",
-"^	c #202020",
-"/	c #707070",
-"(	c #F5F5F5",
-"_	c #040404",
-":	c #E1E1E1",
-"<	c #EEEEEE",
-"[	c #EFEFEF",
-"}	c #FEFEFE",
-"|	c #3D3D3D",
-"1	c #7E7E7E",
-"2	c #696969",
-"3	c #414141",
-"4	c #131313",
-"5	c #080808",
-"6	c #454545",
-"7	c #F2F2F2",
-"8	c #878787",
-"9	c #7D7D7D",
-"0	c #101010",
-"a	c #111111",
-"b	c #FDFDFD",
-"c	c #8A8A8A",
-"d	c #E6E6E6",
-"e	c #7B7B7B",
-"f	c #4C4C4C",
-"g	c #5C5C5C",
-"h	c #9F9F9F",
-"i	c #F9F9F9",
-"j	c #F7F7F7",
-"k	c #B1B1B1",
-"l	c #2E2E2E",
-"m	c #767676",
-"n	c #DCDCDC",
-"o	c #DEDEDE",
-"p	c #C7C7C7",
-"q	c #1B1B1B",
-"r	c #6B6B6B",
-"s	c #575757",
-"t	c #797979",
-"u	c #020202",
-"v	c #010101",
-"w	c #FBFBFB",
-"x	c #D7D7D7",
-"y	c #D8D8D8",
-"z	c #060606",
-"                ",
-".               ",
-".+              ",
-".@#             ",
-".$%&            ",
-".$$*=           ",
-".$$$-;          ",
-".$$$$>,         ",
-".$$$$$')        ",
-".$$$$$$!)       ",
-".$$$$$$$~{      ",
-".$$$$]^^^/(     ",
-".$$$$_:(<<[}    ",
-".$$|1$2<        ",
-".$3,(45[        ",
-".67 78$9,       ",
-".7   {0a( ....  ",
-"b    ,c5[defgh, ",
-"      )ijk_la$m.",
-"         no.p$q.",
-"           .r$s.",
-"          .t$-= ",
-"          7uv+  ",
-"          wxy.  ",
-"          :$z.  ",
-"          :$z.  ",
-"          ....  "};
diff --git a/common/fltk/src/fl_cursor_nesw.xpm b/common/fltk/src/fl_cursor_nesw.xpm
deleted file mode 100644
index 5a7113a..0000000
--- a/common/fltk/src/fl_cursor_nesw.xpm
+++ /dev/null
@@ -1,46 +0,0 @@
-/* XPM */
-static const char * fl_cursor_nesw_xpm[] = {
-"15 15 28 1",
-" 	c None",
-".	c #FFFFFF",
-"+	c #767676",
-"@	c #000000",
-"#	c #4E4E4E",
-"$	c #0C0C0C",
-"%	c #494949",
-"&	c #4D4D4D",
-"*	c #1B1B1B",
-"=	c #515151",
-"-	c #646464",
-";	c #363636",
-">	c #6A6A6A",
-",	c #545454",
-"'	c #585858",
-")	c #242424",
-"!	c #797979",
-"~	c #2E2E2E",
-"{	c #444444",
-"]	c #3B3B3B",
-"^	c #0A0A0A",
-"/	c #595959",
-"(	c #F7F7F7",
-"_	c #080808",
-":	c #6B6B6B",
-"<	c #FDFDFD",
-"[	c #FCFCFC",
-"}	c #FEFEFE",
-"     ..........",
-"      .+@@@@@@.",
-"       .#@@@@@.",
-"        .$@@@@.",
-"       .%@@@@@.",
-".     .&@@@*@@.",
-"..   .=@@@-.;@.",
-".>. .,@@@'. .).",
-".@!.'@@@#.   ..",
-".@@~@@@{.     .",
-".@@@@@].       ",
-".@@@@^.        ",
-".@@@@@/(       ",
-".______:(      ",
-"<[[[[[[[[}     "};
diff --git a/common/fltk/src/fl_cursor_none.xpm b/common/fltk/src/fl_cursor_none.xpm
deleted file mode 100644
index 054e461..0000000
--- a/common/fltk/src/fl_cursor_none.xpm
+++ /dev/null
@@ -1,19 +0,0 @@
-/* XPM */
-static const char * fl_cursor_none_xpm[] = {
-"15 15 1 1",
-" 	c None",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               "};
diff --git a/common/fltk/src/fl_cursor_nwse.xpm b/common/fltk/src/fl_cursor_nwse.xpm
deleted file mode 100644
index d495eb4..0000000
--- a/common/fltk/src/fl_cursor_nwse.xpm
+++ /dev/null
@@ -1,46 +0,0 @@
-/* XPM */
-static const char * fl_cursor_nwse_xpm[] = {
-"15 15 28 1",
-" 	c None",
-".	c #FFFFFF",
-"+	c #000000",
-"@	c #767676",
-"#	c #4E4E4E",
-"$	c #0C0C0C",
-"%	c #494949",
-"&	c #1B1B1B",
-"*	c #4D4D4D",
-"=	c #363636",
-"-	c #646464",
-";	c #515151",
-">	c #242424",
-",	c #585858",
-"'	c #545454",
-")	c #6A6A6A",
-"!	c #797979",
-"~	c #444444",
-"{	c #2E2E2E",
-"]	c #3B3B3B",
-"^	c #0A0A0A",
-"/	c #F7F7F7",
-"(	c #595959",
-"_	c #6B6B6B",
-":	c #080808",
-"<	c #FEFEFE",
-"[	c #FCFCFC",
-"}	c #FDFDFD",
-"..........     ",
-".++++++@.      ",
-".+++++#.       ",
-".++++$.        ",
-".+++++%.       ",
-".++&+++*.     .",
-".+=.-+++;.   ..",
-".>. .,+++'. .).",
-"..   .#+++,.!+.",
-".     .~+++{++.",
-"       .]+++++.",
-"        .^++++.",
-"       /(+++++.",
-"      /_::::::.",
-"     <[[[[[[[[}"};
diff --git a/common/fltk/src/fl_cursor_wait.xpm b/common/fltk/src/fl_cursor_wait.xpm
deleted file mode 100644
index 400d44d..0000000
--- a/common/fltk/src/fl_cursor_wait.xpm
+++ /dev/null
@@ -1,72 +0,0 @@
-/* XPM */
-static const char * fl_cursor_wait_xpm[] = {
-"17 32 37 1",
-" 	c None",
-".	c #FFFFFF",
-"+	c #2E2E2E",
-"@	c #202020",
-"#	c #F1F1F1",
-"$	c #2D2D2D",
-"%	c #000000",
-"&	c #EDEDED",
-"*	c #585858",
-"=	c #575757",
-"-	c #FBFBFB",
-";	c #848484",
-">	c #B8B8B8",
-",	c #E5E5E5",
-"'	c #F7F7F7",
-")	c #181818",
-"!	c #F0F0F0",
-"~	c #616161",
-"{	c #B7B7B7",
-"]	c #F5F5F5",
-"^	c #050505",
-"/	c #D4D4D4",
-"(	c #EEEEEE",
-"_	c #595959",
-":	c #7B7B7B",
-"<	c #E9E9E9",
-"[	c #131313",
-"}	c #E3E3E3",
-"|	c #767676",
-"1	c #505050",
-"2	c #F3F3F3",
-"3	c #2A2A2A",
-"4	c #070707",
-"5	c #343434",
-"6	c #939393",
-"7	c #191919",
-"8	c #6A6A6A",
-".................",
-".+@@@@@@@@@@@@@+.",
-".................",
-" #$%%%%%%%%%%%$# ",
-" &*%%%%%%%%%%%=& ",
-" -;%%%%%%%%%%%;- ",
-"  >%%%%%%%%%%%>  ",
-"  ,%%%%%%%%%%%,  ",
-"  ')%%%%%%%%%)'  ",
-"  !~%%%%%%%%%~!  ",
-"   {%%%%%%%%%{   ",
-"   ]^/...../^]   ",
-"   (_:.....:_(   ",
-"    <[}...}[<    ",
-"    !|1...1|!    ",
-"     2[3.3[2     ",
-"     2[%.%[2     ",
-"    !|%%.%%|!    ",
-"    <4%%.%%4<    ",
-"   (_%%%.%%%_(   ",
-"   ]^%%%.%%%^]   ",
-"   {%%%%.%%%%{   ",
-"  !~%%%%.%%%%~!  ",
-"  ')%%%%.%%%%)'  ",
-"  ,%%56{.{65%%,  ",
-"  >%*.......*%>  ",
-" -;7&.......&7;- ",
-" &*8.........8=& ",
-" #$%%%%%%%%%%%$# ",
-".................",
-".+@@@@@@@@@@@@@+.",
-"................."};
diff --git a/common/fltk/src/fl_curve.cxx b/common/fltk/src/fl_curve.cxx
deleted file mode 100644
index 2f86552..0000000
--- a/common/fltk/src/fl_curve.cxx
+++ /dev/null
@@ -1,110 +0,0 @@
-//
-// "$Id: fl_curve.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Bezier curve functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_curve.cxx
-  \brief Utility for drawing Bezier curves, adding the points to the
-         current fl_begin/fl_vertex/fl_end path.
-
-  Incremental math implementation:
-  I very much doubt this is optimal!  From Foley/vanDam page 511.
-  If anybody has a better algorithm, please send it!
-*/
-
-#include <FL/fl_draw.H>
-#include <math.h>
-
-void Fl_Graphics_Driver::curve(double X0, double Y0,
-	      double X1, double Y1,
-	      double X2, double Y2,
-	      double X3, double Y3) {
-
-  double x = fl_transform_x(X0,Y0);
-  double y = fl_transform_y(X0,Y0);
-
-  // draw point 0:
-  fl_transformed_vertex(x,y);
-
-  double x1 = fl_transform_x(X1,Y1);
-  double yy1 = fl_transform_y(X1,Y1);
-  double x2 = fl_transform_x(X2,Y2);
-  double y2 = fl_transform_y(X2,Y2);
-  double x3 = fl_transform_x(X3,Y3);
-  double y3 = fl_transform_y(X3,Y3);
-
-  // find the area:
-  double a = fabs((x-x2)*(y3-yy1)-(y-y2)*(x3-x1));
-  double b = fabs((x-x3)*(y2-yy1)-(y-y3)*(x2-x1));
-  if (b > a) a = b;
-
-  // use that to guess at the number of segments:
-  int n = int(sqrt(a)/4);
-  if (n > 1) {
-    if (n > 100) n = 100; // make huge curves not hang forever
-
-    double e = 1.0/n;
-
-    // calculate the coefficients of 3rd order equation:
-    double xa = (x3-3*x2+3*x1-x);
-    double xb = 3*(x2-2*x1+x);
-    double xc = 3*(x1-x);
-    // calculate the forward differences:
-    double dx1 = ((xa*e+xb)*e+xc)*e;
-    double dx3 = 6*xa*e*e*e;
-    double dx2 = dx3 + 2*xb*e*e;
-
-    // calculate the coefficients of 3rd order equation:
-    double ya = (y3-3*y2+3*yy1-y);
-    double yb = 3*(y2-2*yy1+y);
-    double yc = 3*(yy1-y);
-    // calculate the forward differences:
-    double dy1 = ((ya*e+yb)*e+yc)*e;
-    double dy3 = 6*ya*e*e*e;
-    double dy2 = dy3 + 2*yb*e*e;
-
-    // draw points 1 .. n-2:
-    for (int m=2; m<n; m++) {
-      x += dx1;
-      dx1 += dx2;
-      dx2 += dx3;
-      y += dy1;
-      dy1 += dy2;
-      dy2 += dy3;
-      fl_transformed_vertex(x,y);
-    }
-
-    // draw point n-1:
-    fl_transformed_vertex(x+dx1, y+dy1);
-  }
-
-  // draw point n:
-  fl_transformed_vertex(x3,y3);
-}
-
-//
-// End of "$Id: fl_curve.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_diamond_box.cxx b/common/fltk/src/fl_diamond_box.cxx
deleted file mode 100644
index 4f4af91..0000000
--- a/common/fltk/src/fl_diamond_box.cxx
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// "$Id: fl_diamond_box.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Diamond box code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Box drawing code for an obscure box type.
-// These box types are in separate files so they are not linked
-// in if not used.
-
-// The diamond box draws best if the area is square!
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-extern uchar* fl_gray_ramp();
-
-static void fl_diamond_up_box(int x,int y,int w,int h,Fl_Color bgcolor) {
-  w &= -2;
-  h &= -2;
-  int x1 = x+w/2;
-  int y1 = y+h/2;
-  fl_color(bgcolor); fl_polygon(x+3, y1, x1,y+3, x+w-3,y1, x1,y+h-3);
-  uchar *g = fl_gray_ramp();
-  fl_color(g['W']); fl_line(x+1, y1, x1, y+1, x+w-1, y1);
-  fl_color(g['U']); fl_line(x+2, y1, x1, y+2, x+w-2, y1);
-  fl_color(g['S']); fl_line(x+3, y1, x1, y+3, x+w-3, y1);
-  fl_color(g['P']); fl_line(x+3, y1, x1, y+h-3, x+w-3, y1);
-  fl_color(g['N']); fl_line(x+2, y1, x1, y+h-2, x+w-2, y1);
-  fl_color(g['H']); fl_line(x+1, y1, x1, y+h-1, x+w-1, y1);
-  fl_color(g['A']); fl_loop(x, y1, x1, y, x+w, y1, x1, y+h);
-}
-
-static void fl_diamond_down_box(int x,int y,int w,int h,Fl_Color bgcolor) {
-  w &= -2;
-  h &= -2;
-  int x1 = x+w/2;
-  int y1 = y+h/2;
-  uchar *g = fl_gray_ramp();
-  fl_color(g['P']); fl_line(x+0, y1, x1, y+0, x+w-0, y1);
-  fl_color(g['N']); fl_line(x+1, y1, x1, y+1, x+w-1, y1);
-  fl_color(g['H']); fl_line(x+2, y1, x1, y+2, x+w-2, y1);
-  fl_color(g['W']); fl_line(x+2, y1, x1, y+h-2, x+w-2, y1);
-  fl_color(g['U']); fl_line(x+1, y1, x1, y+h-1, x+w-1, y1);
-  fl_color(g['S']); fl_line(x+0, y1, x1, y+h-0, x+w-0, y1);
-  fl_color(bgcolor); fl_polygon(x+3, y1, x1,y+3, x+w-3,y1, x1,y+h-3);
-  fl_color(g['A']); fl_loop(x+3, y1, x1, y+3, x+w-3, y1, x1, y+h-3);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-Fl_Boxtype fl_define_FL_DIAMOND_BOX() {
-  fl_internal_boxtype(_FL_DIAMOND_DOWN_BOX, fl_diamond_down_box);
-  fl_internal_boxtype(_FL_DIAMOND_UP_BOX,fl_diamond_up_box);
-  return _FL_DIAMOND_UP_BOX;
-}
-
-//
-// End of "$Id: fl_diamond_box.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_dnd.cxx b/common/fltk/src/fl_dnd.cxx
deleted file mode 100644
index 701cf10..0000000
--- a/common/fltk/src/fl_dnd.cxx
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-// "$Id: fl_dnd.cxx 8055 2010-12-18 22:31:01Z manolo $"
-//
-// Drag & Drop code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-#  include "fl_dnd_win32.cxx"
-#elif defined(__APPLE__)
-//#  include "fl_dnd_mac.cxx"
-#else
-#  include "fl_dnd_x.cxx"
-#endif
-
-//
-// End of "$Id: fl_dnd.cxx 8055 2010-12-18 22:31:01Z manolo $".
-//
diff --git a/common/fltk/src/fl_dnd_win32.cxx b/common/fltk/src/fl_dnd_win32.cxx
deleted file mode 100644
index 48cd9c5..0000000
--- a/common/fltk/src/fl_dnd_win32.cxx
+++ /dev/null
@@ -1,555 +0,0 @@
-//
-// "$Id: fl_dnd_win32.cxx 8028 2010-12-14 19:46:55Z AlbrechtS $"
-//
-// Drag & Drop code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-
-// This file contains win32-specific code for fltk which is always linked
-// in.  Search other files for "WIN32" or filenames ending in _win32.cxx
-// for other system-specific code.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <objidl.h>
-#include <time.h>
-#if defined(__CYGWIN__)
-#include <sys/time.h>
-#include <unistd.h>
-#endif
-
-extern char *fl_selection_buffer[2];
-extern int fl_selection_length[2];
-extern int fl_selection_buffer_length[2];
-extern char fl_i_own_selection[2];
-extern char *fl_locale2utf8(const char *s, UINT codepage = 0);
-extern unsigned int fl_codepage;
-
-Fl_Window *fl_dnd_target_window = 0;
-
-#include <ole2.h>
-#include <shellapi.h>
-#include <shlobj.h>
-
-
-/**
- * subclass the IDropTarget to receive data from DnD operations
- */
-class FLDropTarget : public IDropTarget
-{
-  DWORD m_cRefCount;
-  DWORD lastEffect;
-  int px, py;
-public:
-  FLDropTarget() : m_cRefCount(0) { } // initialize
-  HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, LPVOID *ppvObject ) {
-    if (IID_IUnknown==riid || IID_IDropTarget==riid)
-    {
-      *ppvObject=this;
-      ((LPUNKNOWN)*ppvObject)->AddRef();
-      return S_OK;
-    }
-    *ppvObject = NULL;
-    return E_NOINTERFACE;
-  }
-  ULONG STDMETHODCALLTYPE AddRef() { return ++m_cRefCount; }
-  ULONG STDMETHODCALLTYPE Release() {
-    long nTemp;
-    nTemp = --m_cRefCount;
-    if(nTemp==0)
-      delete this;
-    return nTemp;
-  }
-  HRESULT STDMETHODCALLTYPE DragEnter( IDataObject *pDataObj, DWORD /*grfKeyState*/, POINTL pt, DWORD *pdwEffect) {
-    if( !pDataObj ) return E_INVALIDARG;
-    // set e_modifiers here from grfKeyState, set e_x and e_root_x
-    // check if FLTK handles this drag and return if it can't (i.e. BMP drag without filename)
-    POINT ppt;
-    Fl::e_x_root = ppt.x = pt.x;
-    Fl::e_y_root = ppt.y = pt.y;
-    HWND hWnd = WindowFromPoint( ppt );
-    Fl_Window *target = fl_find( hWnd );
-    if (target) {
-      Fl::e_x = Fl::e_x_root-target->x();
-      Fl::e_y = Fl::e_y_root-target->y();
-    }
-    fl_dnd_target_window = target;
-    px = pt.x; py = pt.y;
-    if (fillCurrentDragData(pDataObj)) {
-      // FLTK has no mechanism yet for the different drop effects, so we allow move and copy
-      if ( target && Fl::handle( FL_DND_ENTER, target ) )
-        *pdwEffect = DROPEFFECT_MOVE|DROPEFFECT_COPY; //|DROPEFFECT_LINK;
-      else
-        *pdwEffect = DROPEFFECT_NONE;
-    } else {
-      *pdwEffect = DROPEFFECT_NONE;
-    }
-    lastEffect = *pdwEffect;
-    return S_OK;
-  }
-  HRESULT STDMETHODCALLTYPE DragOver( DWORD /*grfKeyState*/, POINTL pt, DWORD *pdwEffect) {
-    if ( px==pt.x && py==pt.y )
-    {
-      *pdwEffect = lastEffect;
-      return S_OK;
-    }
-    if ( !fl_dnd_target_window )
-    {
-      *pdwEffect = lastEffect = DROPEFFECT_NONE;
-      return S_OK;
-    }
-    // set e_modifiers here from grfKeyState, set e_x and e_root_x
-    Fl::e_x_root = pt.x;
-    Fl::e_y_root = pt.y;
-    if (fl_dnd_target_window) {
-      Fl::e_x = Fl::e_x_root-fl_dnd_target_window->x();
-      Fl::e_y = Fl::e_y_root-fl_dnd_target_window->y();
-    }
-    if (fillCurrentDragData(0)) {
-      // Fl_Group will change DND_DRAG into DND_ENTER and DND_LEAVE if needed
-      if ( Fl::handle( FL_DND_DRAG, fl_dnd_target_window ) )
-        *pdwEffect = DROPEFFECT_MOVE|DROPEFFECT_COPY; //|DROPEFFECT_LINK;
-      else
-        *pdwEffect = DROPEFFECT_NONE;
-    } else {
-      *pdwEffect = DROPEFFECT_NONE;
-    }
-    px = pt.x; py = pt.y;
-    lastEffect = *pdwEffect;
-    return S_OK;
-  }
-  HRESULT STDMETHODCALLTYPE DragLeave() {
-    if ( fl_dnd_target_window && fillCurrentDragData(0))
-    {
-      Fl::handle( FL_DND_LEAVE, fl_dnd_target_window );
-      fl_dnd_target_window = 0;
-      clearCurrentDragData();
-    }
-    return S_OK;
-  }
-  HRESULT STDMETHODCALLTYPE Drop( IDataObject *data, DWORD /*grfKeyState*/, POINTL pt, DWORD* /*pdwEffect*/) {
-    if ( !fl_dnd_target_window )
-      return S_OK;
-    Fl_Window *target = fl_dnd_target_window;
-    fl_dnd_target_window = 0;
-    Fl::e_x_root = pt.x;
-    Fl::e_y_root = pt.y;
-    if (target) {
-      Fl::e_x = Fl::e_x_root-target->x();
-      Fl::e_y = Fl::e_y_root-target->y();
-    }
-    // tell FLTK that the user released an object on this widget
-    if ( !Fl::handle( FL_DND_RELEASE, target ) )
-      return S_OK;
-
-    Fl_Widget *w = target;
-    while (w->parent()) w = w->window();
-    HWND hwnd = fl_xid( (Fl_Window*)w );
-    if (fillCurrentDragData(data)) {
-      int old_event = Fl::e_number;
-      char *a, *b;
-      a = b = currDragData;
-      while (*a) { // strip the CRLF pairs
-	if (*a == '\r' && a[1] == '\n') a++;
-	else *b++ = *a++;
-      }
-      *b = 0;
-      Fl::e_text = currDragData;
-      Fl::e_length = b - currDragData;
-      Fl::belowmouse()->handle(Fl::e_number = FL_PASTE); // e_text will be invalid after this call
-      Fl::e_number = old_event;
-      SetForegroundWindow( hwnd );
-      clearCurrentDragData();
-      return S_OK;
-    }
-    return S_OK;
-  }
-private:
-
-  static IDataObject *currDragRef;
-  static char *currDragData;
-  static int currDragSize;
-  static char currDragResult;
-
-  static void clearCurrentDragData() {
-    currDragRef = 0;
-    if (currDragData) free(currDragData);
-    currDragData = 0;
-    currDragSize = 0;
-    currDragResult = 0;
-  }
-  static char fillCurrentDragData(IDataObject *data) {
-    // shortcut through this whole procedure if there is no fresh data
-    if (!data) 
-      return currDragResult;
-    // shortcut through this whole procedure if this is still the same drag event
-    // (* this is safe, because 'currDragRef' is cleared on Leave and Drop events)
-    if (data==currDragRef)
-      return currDragResult;
-
-    // clear currDrag* for a new drag event
-    clearCurrentDragData();
-    
-    currDragRef = data;
-    // fill currDrag* with UTF-8 data, if available
-    FORMATETC fmt = { 0 };
-    STGMEDIUM medium = { 0 };
-    fmt.tymed = TYMED_HGLOBAL;
-    fmt.dwAspect = DVASPECT_CONTENT;
-    fmt.lindex = -1;
-    fmt.cfFormat = CF_UNICODETEXT;
-    // if it is UNICODE text, return a UTF-8-converted copy of it
-    if ( data->GetData( &fmt, &medium )==S_OK )
-    {
-      void *stuff = GlobalLock( medium.hGlobal );
-      unsigned srclen = 0;
-      const wchar_t *wstuff = (const wchar_t *)stuff;
-      while (*wstuff++) srclen++;
-      wstuff = (const wchar_t *)stuff;
-      unsigned utf8len = fl_utf8fromwc(NULL, 0, wstuff, srclen);
-      currDragSize = utf8len;
-      currDragData = (char*)malloc(utf8len + 1);
-      fl_utf8fromwc(currDragData, currDragSize+1, wstuff, srclen+1); // include null-byte
-      GlobalUnlock( medium.hGlobal );
-      ReleaseStgMedium( &medium );
-      currDragResult = 1;
-      return currDragResult;
-    }
-    fmt.cfFormat = CF_TEXT;
-    // if it is CP1252 text, return a UTF-8-converted copy of it
-    if ( data->GetData( &fmt, &medium )==S_OK )
-    {
-      int len;
-      char *p, *q, *last;
-      unsigned u;
-      void *stuff = GlobalLock( medium.hGlobal );
-      currDragData = (char*)malloc(3 * strlen((char*)stuff) + 10);
-      p = (char*)stuff; 
-      last = p + strlen(p);
-      q = currDragData;
-      while (p < last) {
-	u = fl_utf8decode(p, last, &len);
-	p += len;
-	len = fl_utf8encode(u, q);
-	q += len;
-	}
-      *q = 0;
-      currDragSize = q - currDragData;
-      currDragData = (char*)realloc(currDragData, currDragSize + 1);
-      GlobalUnlock( medium.hGlobal );
-      ReleaseStgMedium( &medium );
-      currDragResult = 1;
-      return currDragResult;
-    }
-    // else fill currDrag* with filenames, if possible
-    memset(&fmt, 0, sizeof(fmt));
-    fmt.tymed = TYMED_HGLOBAL;
-    fmt.dwAspect = DVASPECT_CONTENT;
-    fmt.lindex = -1;
-    fmt.cfFormat = CF_HDROP;
-    // if it is a pathname list, send an FL_PASTE with a \n separated list of filepaths
-    if ( data->GetData( &fmt, &medium )==S_OK )
-    {
-      HDROP hdrop = (HDROP)medium.hGlobal;
-      int i, n, nn = 0, nf = DragQueryFileW( hdrop, (UINT)-1, 0, 0 );
-        for ( i=0; i<nf; i++ ) nn += DragQueryFileW( hdrop, i, 0, 0 );
-      nn += nf;
-        xchar *dst = (xchar *)malloc(nn * sizeof(xchar));
-        xchar *bu = dst;
-      for ( i=0; i<nf; i++ ) {
-          n = DragQueryFileW( hdrop, i, (WCHAR*)dst, nn );
-          dst += n;
-          if ( i<nf-1 ) {
-            *dst++ = L'\n';
-          }
-        }
-         *dst=0;
-
-        currDragData = (char*) malloc(nn * 5 + 1);
-//      Fl::e_length = fl_unicode2utf(bu, nn, Fl::e_text);
-        currDragSize = fl_utf8fromwc(currDragData, (nn*5+1), bu, nn);
-        currDragData[currDragSize] = 0;
-        free(bu);
-
-//    Fl::belowmouse()->handle(FL_DROP);
-//      free( Fl::e_text );
-      ReleaseStgMedium( &medium );
-      currDragResult = 1;
-      return currDragResult;
-    }
-    currDragResult = 0;
-    return currDragResult;
-  }
-} flDropTarget;
-
-IDropTarget *flIDropTarget = &flDropTarget;
-
-IDataObject *FLDropTarget::currDragRef = 0;
-char *FLDropTarget::currDragData = 0;
-int FLDropTarget::currDragSize = 0;
-char FLDropTarget::currDragResult = 0;
-
-/**
- * this class is needed to allow FLTK apps to be a DnD source
- */
-class FLDropSource : public IDropSource
-{
-  DWORD m_cRefCount;
-public:
-  FLDropSource() { m_cRefCount = 0; }
-  HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, LPVOID *ppvObject ) {
-    if (IID_IUnknown==riid || IID_IDropSource==riid)
-    {
-      *ppvObject=this;
-      ((LPUNKNOWN)*ppvObject)->AddRef();
-      return S_OK;
-    }
-    *ppvObject = NULL;
-    return E_NOINTERFACE;
-  }
-  ULONG STDMETHODCALLTYPE AddRef() { return ++m_cRefCount; }
-  ULONG STDMETHODCALLTYPE Release() {
-    long nTemp;
-    nTemp = --m_cRefCount;
-    if(nTemp==0)
-      delete this;
-    return nTemp;
-  }
-  STDMETHODIMP GiveFeedback( ulong ) { return DRAGDROP_S_USEDEFAULTCURSORS; }
-  STDMETHODIMP QueryContinueDrag( BOOL esc, DWORD keyState ) {
-    if ( esc )
-      return DRAGDROP_S_CANCEL;
-    if ( !(keyState & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON)) )
-      return DRAGDROP_S_DROP;
-    return S_OK;
-  }
-};
-class FLEnum : public IEnumFORMATETC
-{
-public:
-  int n;
-  LONG m_lRefCount;
-
-  ULONG __stdcall AddRef(void) {
-    return InterlockedIncrement(&m_lRefCount);
-  }
-
-  ULONG __stdcall Release(void) {
-    LONG count = InterlockedDecrement(&m_lRefCount);
-    if(count == 0) {
-      delete this;
-      return 0;
-    } else {
-      return count;
-    }
-  }
-
-
-  HRESULT __stdcall QueryInterface(REFIID iid, void **ppvObject) {
-    if(iid == IID_IEnumFORMATETC || iid == IID_IUnknown) {
-       AddRef();
-       *ppvObject = this;
-       return S_OK;
-    } else {
-        *ppvObject = 0;
-        return E_NOINTERFACE;
-    }
-  }
-
-  HRESULT __stdcall Next(ULONG celt, FORMATETC * rgelt, ULONG *pceltFetched) {
-    if (n > 0) return S_FALSE;
-    for (ULONG i = 0; i < celt; i++) {
-      n++;
-      rgelt->cfFormat = CF_HDROP;
-      rgelt->dwAspect = DVASPECT_CONTENT;
-      rgelt->lindex = -1;
-      rgelt->ptd = NULL;
-      rgelt->tymed = TYMED_HGLOBAL;
-    }
-    if (pceltFetched) *pceltFetched = celt;
-    return S_OK;
-  }
-
-  HRESULT __stdcall Skip(ULONG celt) {
-    n += celt;
-    return  (n == 0) ? S_OK : S_FALSE;
-  }
-
-  HRESULT __stdcall Reset(void) {
-	n = 0;
-	return S_OK;
-  }
-
-  HRESULT __stdcall Clone(IEnumFORMATETC  **ppenum){
-    *ppenum = new FLEnum();
-    return S_OK;
-  }
-
-  FLEnum(void) {
-    m_lRefCount   = 1;
-    n = 0;
-  }
-
-  virtual ~FLEnum(void) {
-    n = 0;
-  }
-};
-
-
-/**
-  This is the actual object that FLTK can drop somewhere.
-
-  The implementation is minimal, but it should work with all decent Win32 drop targets
-*/
-class FLDataObject : public IDataObject
-{
-  DWORD m_cRefCount;
-  FLEnum *m_EnumF;
-public:
-  FLDataObject() { m_cRefCount = 1; }// m_EnumF = new FLEnum();}
-  HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, LPVOID *ppvObject ) {
-    if (IID_IUnknown==riid || IID_IDataObject==riid)
-    {
-      *ppvObject=this;
-      ((LPUNKNOWN)*ppvObject)->AddRef();
-      return S_OK;
-    }
-    *ppvObject = NULL;
-    return E_NOINTERFACE;
-  }
-  ULONG STDMETHODCALLTYPE AddRef() { return ++m_cRefCount; }
-  ULONG STDMETHODCALLTYPE Release() {
-    long nTemp;
-    nTemp = --m_cRefCount;
-    if(nTemp==0)
-      delete this;
-    return nTemp;
-  }
-  // GetData currently allows UNICODE text through Global Memory only
-  HRESULT STDMETHODCALLTYPE GetData( FORMATETC *pformatetcIn, STGMEDIUM *pmedium ) {
-    if ((pformatetcIn->dwAspect & DVASPECT_CONTENT) &&
-        (pformatetcIn->tymed & TYMED_HGLOBAL) &&
-        (pformatetcIn->cfFormat == CF_UNICODETEXT))
-    {
-      int utf16_len = fl_utf8toUtf16(fl_selection_buffer[0], fl_selection_length[0], 0, 0);
-      HGLOBAL gh = GlobalAlloc( GHND, utf16_len * 2 + 2 );
-      char *pMem = (char*)GlobalLock( gh );
-      fl_utf8toUtf16(fl_selection_buffer[0], fl_selection_length[0], (unsigned short*)pMem, utf16_len + 1);
-//      HGLOBAL gh = GlobalAlloc( GHND| GMEM_SHARE,
-//                            (fl_selection_length[0]+4) * sizeof(short)
-//                            + sizeof(DROPFILES));
-//      unsigned char *pMem = (unsigned char*)GlobalLock( gh );
-//      if (!pMem) {
-//        GlobalFree(gh);
-//        return DV_E_FORMATETC;
-//      }
-//      DROPFILES *df =(DROPFILES*) pMem;
-//      int l;
-//      df->pFiles = sizeof(DROPFILES);
-//      df->pt.x = 0;
-//      df->pt.y = 0;
-//      df->fNC = FALSE;
-//      for (int i = 0; i < fl_selection_length[0]; i++) {
-//        if (fl_selection_buffer[0][i] == '\n') {
-//          fl_selection_buffer[0][i] = '\0';
-//        }
-//      }
-//
-//        df->fWide = TRUE;
-//        l = fl_utf2unicode((unsigned char*)fl_selection_buffer[0],
-//                             fl_selection_length[0], (xchar*)(((char*)pMem)
-//                              + sizeof(DROPFILES)));
-//
-//      pMem[l * sizeof(WCHAR) + sizeof(DROPFILES)] = 0;
-//      pMem[l * sizeof(WCHAR) + 1 + sizeof(DROPFILES)] = 0;
-//      pMem[l * sizeof(WCHAR) + 2 + sizeof(DROPFILES)] = 0;
-//      pMem[l * sizeof(WCHAR) + 3 + sizeof(DROPFILES)] = 0;
-      pmedium->tymed	      = TYMED_HGLOBAL;
-      pmedium->hGlobal	      = gh;
-      pmedium->pUnkForRelease = NULL;
-      GlobalUnlock( gh );
-      return S_OK;
-    }
-    return DV_E_FORMATETC;
-  }
-  HRESULT STDMETHODCALLTYPE QueryGetData( FORMATETC *pformatetc )
-  {
-    if ((pformatetc->dwAspect & DVASPECT_CONTENT) &&
-        (pformatetc->tymed & TYMED_HGLOBAL) &&
-        (pformatetc->cfFormat == CF_UNICODETEXT))
-      return S_OK;
-    return DV_E_FORMATETC;
-  }
-//  HRESULT STDMETHODCALLTYPE EnumFormatEtc( DWORD dir, IEnumFORMATETC** ppenumFormatEtc) {
-//	*ppenumFormatEtc = m_EnumF;
-//	return S_OK;
-//  }
-
-  // all the following methods are not really needed for a DnD object
-  HRESULT STDMETHODCALLTYPE GetDataHere( FORMATETC* /*pformatetcIn*/, STGMEDIUM* /*pmedium*/) { return E_NOTIMPL; }
-  HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc( FORMATETC* /*in*/, FORMATETC* /*out*/) { return E_NOTIMPL; }
-  HRESULT STDMETHODCALLTYPE SetData( FORMATETC* /*pformatetc*/, STGMEDIUM* /*pmedium*/, BOOL /*fRelease*/) { return E_NOTIMPL; }
-  HRESULT STDMETHODCALLTYPE EnumFormatEtc( DWORD /*dir*/, IEnumFORMATETC** /*ppenumFormatEtc*/) { return E_NOTIMPL; }
-//  HRESULT STDMETHODCALLTYPE EnumFormatEtc( DWORD dir, IEnumFORMATETC** ppenumFormatEtc) {*ppenumFormatEtc = m_EnumF; return S_OK;}
-  HRESULT STDMETHODCALLTYPE DAdvise( FORMATETC* /*pformatetc*/, DWORD /*advf*/,
-      IAdviseSink* /*pAdvSink*/, DWORD* /*pdwConnection*/) { return E_NOTIMPL; }
-  HRESULT STDMETHODCALLTYPE DUnadvise( DWORD /*dwConnection*/) { return E_NOTIMPL; }
-  HRESULT STDMETHODCALLTYPE EnumDAdvise( IEnumSTATDATA** /*ppenumAdvise*/) { return E_NOTIMPL; }
-};
-
-
-int Fl::dnd()
-{
-  DWORD dropEffect;
-  ReleaseCapture();
-
-  FLDataObject *fdo = new FLDataObject;
-  fdo->AddRef();
-  FLDropSource *fds = new FLDropSource;
-  fds->AddRef();
-
-  HRESULT ret = DoDragDrop( fdo, fds, DROPEFFECT_MOVE|DROPEFFECT_LINK|DROPEFFECT_COPY, &dropEffect );
-
-  fdo->Release();
-  fds->Release();
-
-  Fl_Widget *w = Fl::pushed();
-  if ( w )
-  {
-    int old_event = Fl::e_number;
-    w->handle(Fl::e_number = FL_RELEASE);
-    Fl::e_number = old_event;
-    Fl::pushed( 0 );
-  }
-  if ( ret==DRAGDROP_S_DROP ) return 1; // or DD_S_CANCEL
-  return 0;
-}
-
-//
-// End of "$Id: fl_dnd_win32.cxx 8028 2010-12-14 19:46:55Z AlbrechtS $".
-//
diff --git a/common/fltk/src/fl_dnd_x.cxx b/common/fltk/src/fl_dnd_x.cxx
deleted file mode 100644
index 4062875..0000000
--- a/common/fltk/src/fl_dnd_x.cxx
+++ /dev/null
@@ -1,202 +0,0 @@
-//
-// "$Id: fl_dnd_x.cxx 7992 2010-12-09 21:52:07Z manolo $"
-//
-// Drag & Drop code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/x.H>
-#include "flstring.h"
-
-
-extern Atom fl_XdndAware;
-extern Atom fl_XdndSelection;
-extern Atom fl_XdndEnter;
-extern Atom fl_XdndTypeList;
-extern Atom fl_XdndPosition;
-extern Atom fl_XdndLeave;
-extern Atom fl_XdndDrop;
-extern Atom fl_XdndStatus;
-extern Atom fl_XdndActionCopy;
-extern Atom fl_XdndFinished;
-//extern Atom fl_XdndProxy;
-extern Atom fl_XdndURIList;
-extern Atom fl_XaUtf8String;
-
-extern char fl_i_own_selection[2];
-extern char *fl_selection_buffer[2];
-
-extern void fl_sendClientMessage(Window window, Atom message,
-                                 unsigned long d0,
-                                 unsigned long d1=0,
-                                 unsigned long d2=0,
-                                 unsigned long d3=0,
-                                 unsigned long d4=0);
-
-// return version # of Xdnd this window supports.  Also change the
-// window to the proxy if it uses a proxy:
-static int dnd_aware(Window& window) {
-  Atom actual; int format; unsigned long count, remaining;
-  unsigned char *data = 0;
-  XGetWindowProperty(fl_display, window, fl_XdndAware,
-		     0, 4, False, XA_ATOM,
-		     &actual, &format,
-		     &count, &remaining, &data);
-  if (actual == XA_ATOM && format==32 && count && data)
-    return int(*(Atom*)data);
-  return 0;
-}
-
-static int grabfunc(int event) {
-  if (event == FL_RELEASE) Fl::pushed(0);
-  return 0;
-}
-
-extern int (*fl_local_grab)(int); // in Fl.cxx
-
-// send an event to an fltk window belonging to this program:
-static int local_handle(int event, Fl_Window* window) {
-  fl_local_grab = 0;
-  Fl::e_x = Fl::e_x_root-window->x();
-  Fl::e_y = Fl::e_y_root-window->y();
-  int ret = Fl::handle(event,window);
-  fl_local_grab = grabfunc;
-  return ret;
-}
-
-int Fl::dnd() {
-  Fl_Window *source_fl_win = Fl::first_window();
-  Fl::first_window()->cursor(FL_CURSOR_MOVE);
-  Window source_window = fl_xid(Fl::first_window());
-  fl_local_grab = grabfunc;
-  Window target_window = 0;
-  Fl_Window* local_window = 0;
-  int dndversion = 4; int dest_x, dest_y;
-  XSetSelectionOwner(fl_display, fl_XdndSelection, fl_message_window, fl_event_time);
-
-  while (Fl::pushed()) {
-
-    // figure out what window we are pointing at:
-    Window new_window = 0; int new_version = 0;
-    Fl_Window* new_local_window = 0;
-    for (Window child = RootWindow(fl_display, fl_screen);;) {
-      Window root; unsigned int junk3;
-      XQueryPointer(fl_display, child, &root, &child,
-		    &e_x_root, &e_y_root, &dest_x, &dest_y, &junk3);
-      if (!child) {
-	if (!new_window && (new_version = dnd_aware(root))) new_window = root;
-	break;
-      }
-      new_window = child;
-      if ((new_local_window = fl_find(child))) break;
-      if ((new_version = dnd_aware(new_window))) break;
-    }
-
-    if (new_window != target_window) {
-      if (local_window) {
-	local_handle(FL_DND_LEAVE, local_window);
-      } else if (dndversion) {
-	fl_sendClientMessage(target_window, fl_XdndLeave, source_window);
-      }
-      dndversion = new_version;
-      target_window = new_window;
-      local_window = new_local_window;
-      if (local_window) {
-	local_handle(FL_DND_ENTER, local_window);
-      } else if (dndversion) {
-        // Send an X-DND message to the target window.  In order to
-	// support dragging of files/URLs as well as arbitrary text,
-	// we look at the selection buffer - if the buffer starts
-	// with a common URI scheme, does not contain spaces, and
-	// contains at least one CR LF, then we flag the data as
-	// both a URI list (MIME media type "text/uri-list") and
-	// plain text.  Otherwise, we just say it is plain text.
-        if ((!strncmp(fl_selection_buffer[0], "file:///", 8) ||
-	     !strncmp(fl_selection_buffer[0], "ftp://", 6) ||
-	     !strncmp(fl_selection_buffer[0], "http://", 7) ||
-	     !strncmp(fl_selection_buffer[0], "https://", 8) ||
-	     !strncmp(fl_selection_buffer[0], "ipp://", 6) ||
-	     !strncmp(fl_selection_buffer[0], "ldap:", 5) ||
-	     !strncmp(fl_selection_buffer[0], "mailto:", 7) ||
-	     !strncmp(fl_selection_buffer[0], "news:", 5) ||
-	     !strncmp(fl_selection_buffer[0], "smb://", 6)) &&
-	    !strchr(fl_selection_buffer[0], ' ') &&
-	    strstr(fl_selection_buffer[0], "\r\n")) {
-	  // Send file/URI list...
-	  fl_sendClientMessage(target_window, fl_XdndEnter, source_window,
-			       dndversion<<24, fl_XdndURIList, XA_STRING, 0);
-        } else {
-	  // Send plain text...
-	  fl_sendClientMessage(target_window, fl_XdndEnter, source_window,
-			       dndversion<<24, fl_XaUtf8String, 0, 0);
-	}
-      }
-    }
-    if (local_window) {
-      local_handle(FL_DND_DRAG, local_window);
-    } else if (dndversion) {
-      fl_sendClientMessage(target_window, fl_XdndPosition, source_window,
-			   0, (e_x_root<<16)|e_y_root, fl_event_time,
-			   fl_XdndActionCopy);
-    }
-    Fl::wait();
-  }
-
-  if (local_window) {
-    fl_i_own_selection[0] = 1;
-    if (local_handle(FL_DND_RELEASE, local_window)) paste(*belowmouse(), 0);
-  } else if (dndversion) {
-    fl_sendClientMessage(target_window, fl_XdndDrop, source_window,
-			 0, fl_event_time);
-  } else if (target_window) {
-    // fake a drop by clicking the middle mouse button:
-    XButtonEvent msg;
-    msg.type = ButtonPress;
-    msg.window = target_window;
-    msg.root = RootWindow(fl_display, fl_screen);
-    msg.subwindow = 0;
-    msg.time = fl_event_time+1;
-    msg.x = dest_x;
-    msg.y = dest_y;
-    msg.x_root = Fl::e_x_root;
-    msg.y_root = Fl::e_y_root;
-    msg.state = 0x0;
-    msg.button = Button2;
-    XSendEvent(fl_display, target_window, False, 0L, (XEvent*)&msg);
-    msg.time++;
-    msg.state = 0x200;
-    msg.type = ButtonRelease;
-    XSendEvent(fl_display, target_window, False, 0L, (XEvent*)&msg);
-  }
-
-  fl_local_grab = 0;
-  source_fl_win->cursor(FL_CURSOR_DEFAULT);
-  return 1;
-}
-
-
-//
-// End of "$Id: fl_dnd_x.cxx 7992 2010-12-09 21:52:07Z manolo $".
-//
diff --git a/common/fltk/src/fl_draw.cxx b/common/fltk/src/fl_draw.cxx
deleted file mode 100644
index b88cc70..0000000
--- a/common/fltk/src/fl_draw.cxx
+++ /dev/null
@@ -1,486 +0,0 @@
-//
-// "$Id: fl_draw.cxx 8763 2011-05-30 16:08:46Z manolo $"
-//
-// Label drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Implementation of fl_draw(const char*,int,int,int,int,Fl_Align)
-// Used to draw all the labels and text, this routine:
-// Word wraps the labels to fit into their bounding box.
-// Breaks them into lines at the newlines.
-// Expands all unprintable characters to ^X or \nnn notation
-// Aligns them against the inside of the box.
-
-#include <FL/fl_utf8.h>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Image.H>
-
-#include "flstring.h"
-#include <ctype.h>
-#include <math.h>
-
-#define MAXBUF 1024
-
-char fl_draw_shortcut;	// set by fl_labeltypes.cxx
-
-static char* underline_at;
-
-/** 
-    utf8 multibyte char seq. detection an pass-thru routine.
-    \retval false if no utf8 seq detected, no change made. true if utf8 and d copied with s seq.
-    note that for n bytes copied dest incremented of n, but s of n-1 for compatible loop use see below.
-*/
-#define C_IN(c,a,b) ((c)>=(a) && (c)<=(b)) 
-#define C_UTF8(c)   C_IN(c,0x80,0xBF)
-
-static bool handle_utf8_seq(const char * &s,char * &d) {
-  register const unsigned char* p=(const unsigned char*)s;
-  if (p[0] < 0xc2 || p[0] > 0xf4)
-    return false; // not adressed in this function
-  else if ( C_IN(p[0], 0xc2, 0xdf) && C_UTF8(p[1]) ) {
-    d[0]=s[0]; d[1]=s[1];
-    d+=2; s++;
-    // non-overlong 2-byte
-  }
-  else if ( p[0]==0xe0 && C_IN(p[1], 0xa0, 0xbf) && C_UTF8(p[2]) ) {
-    d[0]=s[0]; d[1]=s[1];d[2]=s[2];
-    d+=3; s+=2;
-    //  excluding overlongs
-  }
-  else if (p[0]==0xed && C_IN(p[1], 0x80, 0x9f) && C_UTF8(p[2]) ) {
-    d[0]=s[0]; d[1]=s[1];d[2]=s[2];
-    d+=3; s+=2;
-    //  excluding surrogates
-  }
-  else if (p[0]!=0xed && C_IN(p[0], 0xe1, 0xef) && C_UTF8(p[1]) && C_UTF8(p[2]) ) {
-    d[0]=s[0]; d[1]=s[1];d[2]=s[2];
-    d+=3; s+=2;
-    // straight 3-byte
-  }
-  else if (p[0]==0xf0 && C_IN(p[1], 0x90, 0xbf)   && C_UTF8(p[2]) && C_UTF8(p[3]) ) {
-    d[0]=s[0]; d[1]=s[1]; d[2]=s[2]; d[3]=s[3];
-    d+=4; s+=3;
-    // planes 1-3
-  }
-  else if (C_IN(p[0], 0xf1, 0xf3) && C_UTF8(p[1]) && C_UTF8(p[2]) && C_UTF8(p[3]) ) {
-    d[0]=s[0]; d[1]=s[1]; d[2]=s[2]; d[3]=s[3];
-    d+=4; s+=3;
-    // planes 4-15
-  }
-  else if (p[0]==0xf4 && C_IN(p[1], 0x80, 0x8f)   && C_UTF8(p[2]) && C_UTF8(p[3]) ) {
-    d[0]=s[0]; d[1]=s[1]; d[2]=s[2]; d[3]=s[3];
-    d+=4; s+=3;
-    // planes 16
-  } else { // non utf8 compliant, maybe CP125x or broken utf8 string
-    // fprintf(stderr, "Not UTF8 char \n");
-    return false; 
-  }
-  return true; //  we did handled and copied the utf8 multibyte char seq.
-}
-
-/**
- Copy \p from to \p buf, replacing unprintable characters with ^X and \\nnn.
-
- Stop at a newline or if MAXBUF characters written to buffer.
- Also word-wrap if width exceeds maxw.
- Returns a pointer to the start of the next line of characters.
- Sets n to the number of characters put into the buffer.
- Sets width to the width of the string in the current font.
-*/
-const char*
-fl_expand_text(const char* from, char* buf, int maxbuf, double maxw, int& n, 
-	double &width, int wrap, int draw_symbols) {
-  char* o = buf;
-  char* e = buf+(maxbuf-4);
-  underline_at = 0;
-  char* word_end = o;
-  const char* word_start = from;
-  double w = 0;
-
-  const char* p = from;
-  for (;; p++) {
-
-    int c = *p & 255;
-
-    if (!c || c == ' ' || c == '\n') {
-      // test for word-wrap:
-      if (word_start < p && wrap) {
-	double newwidth = w + fl_width(word_end, o-word_end);
-	if (word_end > buf && newwidth > maxw) { // break before this word
-	  o = word_end;
-	  p = word_start;
-	  break;
-	}
-	word_end = o;
-	w = newwidth;
-      }
-      if (!c) break;
-      else if (c == '\n') {p++; break;}
-      word_start = p+1;
-    }
-
-    if (o > e) break; // don't overflow buffer
-
-    if (c == '\t') {
-      for (c = fl_utf_nb_char((uchar*)buf, o-buf)%8; c<8 && o<e; c++) 
-           *o++ = ' ';
-    } else if (c == '&' && fl_draw_shortcut && *(p+1)) {
-      if (*(p+1) == '&') {p++; *o++ = '&';}
-      else if (fl_draw_shortcut != 2) underline_at = o;
-    } else if (c < ' ' || c == 127) { // ^X
-      *o++ = '^';
-      *o++ = c ^ 0x40;
-    } else  if (handle_utf8_seq(p, o)) { // figure out if we have an utf8 valid sequence before we determine the nbsp test validity:
-#ifdef __APPLE__
-    } else if (c == 0xCA) { // non-breaking space in MacRoman
-#else
-    } else if (c == 0xA0) { // non-breaking space in ISO 8859
-#endif
-      *o++ = ' ';
-       
-    } else if (c == '@' && draw_symbols) { // Symbol???
-      if (p[1] && p[1] != '@')  break;
-      *o++ = c;
-      if (p[1]) p++;
-    } else {
-      *o++ = c;
-    }
-  }
-
-  width = w + fl_width(word_end, o-word_end);
-  *o = 0;
-  n = o-buf;
-  return p;
-}
-
-/**
-  The same as fl_draw(const char*,int,int,int,int,Fl_Align,Fl_Image*,int) with
-  the addition of the \p callthis parameter, which is a pointer to a text drawing
-  function such as fl_draw(const char*, int, int, int) to do the real work
-*/
-void fl_draw(
-    const char* str,	// the (multi-line) string
-    int x, int y, int w, int h,	// bounding box
-    Fl_Align align,
-    void (*callthis)(const char*,int,int,int),
-    Fl_Image* img, int draw_symbols) 
-{
-  const char* p;
-  const char* e;
-  char buf[MAXBUF];
-  int buflen;
-  char symbol[2][255], *symptr;
-  int symwidth[2], symoffset, symtotal, imgtotal;
-
-  // count how many lines and put the last one into the buffer:
-  int lines;
-  double width;
-
-  // if the image is set as a backdrop, ignore it here
-  if (img && (align & FL_ALIGN_IMAGE_BACKDROP)) img = 0;
-      
-  symbol[0][0] = '\0';
-  symwidth[0]  = 0;
-
-  symbol[1][0] = '\0';
-  symwidth[1]  = 0;
-
-  if (draw_symbols) {
-    if (str && str[0] == '@' && str[1] && str[1] != '@') {
-      // Start with a symbol...
-      for (symptr = symbol[0];
-           *str && !isspace(*str) && symptr < (symbol[0] + sizeof(symbol[0]) - 1);
-           *symptr++ = *str++);
-      *symptr = '\0';
-      if (isspace(*str)) str++;
-      symwidth[0] = (w < h ? w : h);
-    }
-
-    if (str && (p = strrchr(str, '@')) != NULL && p > (str + 1) && p[-1] != '@') {
-      strlcpy(symbol[1], p, sizeof(symbol[1]));
-      symwidth[1] = (w < h ? w : h);
-    }
-  }
-
-  symtotal = symwidth[0] + symwidth[1];
-  imgtotal = (img && (align&FL_ALIGN_IMAGE_NEXT_TO_TEXT)) ? img->w() : 0;
-  
-  int strw = 0;
-  int strh;
-
-  if (str) {
-    for (p = str, lines=0; p;) {
-      e = fl_expand_text(p, buf, MAXBUF, w - symtotal - imgtotal, buflen, width, 
-                         align&FL_ALIGN_WRAP, draw_symbols);
-      if (strw<width) strw = (int)width;
-      lines++;
-      if (!*e || (*e == '@' && e[1] != '@' && draw_symbols)) break;
-      p = e;
-    }
-  } else lines = 0;
-  
-  if ((symwidth[0] || symwidth[1]) && lines) {
-    if (symwidth[0]) symwidth[0] = lines * fl_height();
-    if (symwidth[1]) symwidth[1] = lines * fl_height();
-  }
-
-  symtotal = symwidth[0] + symwidth[1];
-  strh = lines * fl_height();
-  
-  // figure out vertical position of the first line:
-  int xpos;
-  int ypos;
-  int height = fl_height();
-  int imgvert = ((align&FL_ALIGN_IMAGE_NEXT_TO_TEXT)==0);
-  int imgh = img && imgvert ? img->h() : 0;
-  int imgw[2] = {0, 0};
-
-  symoffset = 0;
-
-  if (align & FL_ALIGN_BOTTOM) ypos = y+h-(lines-1)*height-imgh;
-  else if (align & FL_ALIGN_TOP) ypos = y+height;
-  else ypos = y+(h-lines*height-imgh)/2+height;
-
-  // draw the image unless the "text over image" alignment flag is set...
-  if (img && imgvert && !(align & FL_ALIGN_TEXT_OVER_IMAGE)) {
-    if (img->w() > symoffset) symoffset = img->w();
-
-    if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0];
-    else if (align & FL_ALIGN_RIGHT) xpos = x + w - img->w() - symwidth[1];
-    else xpos = x + (w - img->w() - symtotal) / 2 + symwidth[0];
-
-    img->draw(xpos, ypos - height);
-    ypos += img->h();
-  }
-
-  // draw the image to the side of the text
-  if (img && !imgvert /* && (align & !FL_ALIGN_TEXT_NEXT_TO_IMAGE)*/ ) {
-    if (align & FL_ALIGN_TEXT_OVER_IMAGE) { // image is right of text
-      imgw[1] = img->w();
-      if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0] + strw + 1;
-      else if (align & FL_ALIGN_RIGHT) xpos = x + w - symwidth[1] - imgw[1] + 1;
-      else xpos = x + (w - strw - symtotal - imgw[1]) / 2 + symwidth[0] + strw + 1;
-    } else { // image is to the left of the text
-      imgw[0] = img->w();
-      if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0] - 1;
-      else if (align & FL_ALIGN_RIGHT) xpos = x + w - symwidth[1] - strw - imgw[0] - 1;
-      else xpos = x + (w - strw - symtotal - imgw[0]) / 2 - 1;
-    }
-    int yimg = ypos - height;
-    if (align & FL_ALIGN_TOP) ;
-    else if (align & FL_ALIGN_BOTTOM) yimg += strh - img->h() - 1;
-    else yimg += (strh - img->h() - 1) / 2;
-    img->draw(xpos, yimg);
-  }
-  
-  // now draw all the lines:
-  if (str) {
-    int desc = fl_descent();
-    for (p=str; ; ypos += height) {
-      if (lines>1) e = fl_expand_text(p, buf, MAXBUF, w - symtotal - imgtotal, buflen, 
-				width, align&FL_ALIGN_WRAP, draw_symbols);
-      else e = "";
-
-      if (width > symoffset) symoffset = (int)(width + 0.5);
-
-      if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0] + imgw[0];
-      else if (align & FL_ALIGN_RIGHT) xpos = x + w - (int)(width + .5) - symwidth[1] - imgw[1];
-      else xpos = x + (w - (int)(width + .5) - symtotal - imgw[0] - imgw[1]) / 2 + symwidth[0] + imgw[0];
-
-      callthis(buf,buflen,xpos,ypos-desc);
-
-      if (underline_at && underline_at >= buf && underline_at < (buf + buflen))
-	callthis("_",1,xpos+int(fl_width(buf,underline_at-buf)),ypos-desc);
-
-      if (!*e || (*e == '@' && e[1] != '@')) break;
-      p = e;
-    }
-  }
-
-  // draw the image if the "text over image" alignment flag is set...
-  if (img && imgvert && (align & FL_ALIGN_TEXT_OVER_IMAGE)) {
-    if (img->w() > symoffset) symoffset = img->w();
-
-    if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0];
-    else if (align & FL_ALIGN_RIGHT) xpos = x + w - img->w() - symwidth[1];
-    else xpos = x + (w - img->w() - symtotal) / 2 + symwidth[0];
-
-    img->draw(xpos, ypos);
-  }
-
-  // draw the symbols, if any...
-  if (symwidth[0]) {
-    // draw to the left
-    if (align & FL_ALIGN_LEFT) xpos = x;
-    else if (align & FL_ALIGN_RIGHT) xpos = x + w - symtotal - symoffset;
-    else xpos = x + (w - symoffset - symtotal) / 2;
-
-    if (align & FL_ALIGN_BOTTOM) ypos = y + h - symwidth[0];
-    else if (align & FL_ALIGN_TOP) ypos = y;
-    else ypos = y + (h - symwidth[0]) / 2;
-
-    fl_draw_symbol(symbol[0], xpos, ypos, symwidth[0], symwidth[0], fl_color());
-  }
-
-  if (symwidth[1]) {
-    // draw to the right
-    if (align & FL_ALIGN_LEFT) xpos = x + symoffset + symwidth[0];
-    else if (align & FL_ALIGN_RIGHT) xpos = x + w - symwidth[1];
-    else xpos = x + (w - symoffset - symtotal) / 2 + symoffset + symwidth[0];
-
-    if (align & FL_ALIGN_BOTTOM) ypos = y + h - symwidth[1];
-    else if (align & FL_ALIGN_TOP) ypos = y;
-    else ypos = y + (h - symwidth[1]) / 2;
-
-    fl_draw_symbol(symbol[1], xpos, ypos, symwidth[1], symwidth[1], fl_color());
-  }
-}
-
-/**
-  Fancy string drawing function which is used to draw all the labels.
-
-  The string is formatted and aligned inside the passed box.
-  Handles '\\t' and '\\n', expands all other control characters to '^X',
-  and aligns inside or against the edges of the box.
-  See Fl_Widget::align() for values of \p align. The value FL_ALIGN_INSIDE
-  is ignored, as this function always prints inside the box.
-  If \p img is provided and is not \p NULL, the image is drawn above or
-  below the text as specified by the \p align value.
-  The \p draw_symbols argument specifies whether or not to look for symbol
-  names starting with the '\@' character'
-  The text length is limited to 1024 characters per line.
-*/
-void fl_draw(
-  const char* str,
-  int x, int y, int w, int h,
-  Fl_Align align,
-  Fl_Image* img,
-  int draw_symbols)
-{
-  if ((!str || !*str) && !img) return;
-  if (w && h && !fl_not_clipped(x, y, w, h) && (align & FL_ALIGN_INSIDE)) return;
-  if (align & FL_ALIGN_CLIP) 
-    fl_push_clip(x, y, w, h);
-  fl_draw(str, x, y, w, h, align, fl_draw, img, draw_symbols);
-  if (align & FL_ALIGN_CLIP) 
-    fl_pop_clip();
-}
-
-/**
-  Measure how wide and tall the string will be when printed by the
-  fl_draw() function with \p align parameter. If the incoming \p w
-  is non-zero it will wrap to that width.
-  \param[in] str nul-terminated string
-  \param[out] w,h width and height of string in current font
-  \param[in] draw_symbols non-zero to enable @@symbol handling [default=1]
-*/
-void fl_measure(const char* str, int& w, int& h, int draw_symbols) {
-  if (!str || !*str) {w = 0; h = 0; return;}
-  h = fl_height();
-  const char* p;
-  const char* e;
-  char buf[MAXBUF];
-  int buflen;
-  int lines;
-  double width=0;
-  int W = 0;
-  char symbol[2][255], *symptr;
-  int symwidth[2], symtotal;
-
-  // count how many lines and put the last one into the buffer:
-  symbol[0][0] = '\0';
-  symwidth[0]  = 0;
-
-  symbol[1][0] = '\0';
-  symwidth[1]  = 0;
-
-  if (draw_symbols) {
-    if (str && str[0] == '@' && str[1] && str[1] != '@') {
-      // Start with a symbol...
-      for (symptr = symbol[0];
-           *str && !isspace(*str) && symptr < (symbol[0] + sizeof(symbol[0]) - 1);
-           *symptr++ = *str++);
-      *symptr = '\0';
-      if (isspace(*str)) str++;
-      symwidth[0] = h;
-    }
-
-    if (str && (p = strrchr(str, '@')) != NULL && p > (str + 1) && p[-1]!='@') {
-      strlcpy(symbol[1], p, sizeof(symbol[1]));
-      symwidth[1] = h;
-    }
-  }
-
-  symtotal = symwidth[0] + symwidth[1];
-  
-  for (p = str, lines=0; p;) {
-//    e = expand(p, buf, w - symtotal, buflen, width, w != 0, draw_symbols);
-    e = fl_expand_text(p, buf, MAXBUF, w - symtotal, buflen, width, 
-			w != 0, draw_symbols);
-    if ((int)ceil(width) > W) W = (int)ceil(width);
-    lines++;
-    if (!*e || (*e == '@' && e[1] != '@' && draw_symbols)) break;
-    p = e;
-  }
-
-  if ((symwidth[0] || symwidth[1]) && lines) {
-    if (symwidth[0]) symwidth[0] = lines * fl_height();
-    if (symwidth[1]) symwidth[1] = lines * fl_height();
-  }
-
-  symtotal = symwidth[0] + symwidth[1];
-
-  w = W + symtotal;
-  h = lines*h;
-}
-
-/**
-  This function returns the actual height of the specified \p font
-  and \p size. Normally the font height should always be 'size',
-  but with the advent of XFT, there are (currently) complexities
-  that seem to only be solved by asking the font what its actual
-  font height is. (See STR#2115)
-  
-  This function was originally undocumented in 1.1.x, and was used
-  only by Fl_Text_Display. We're now documenting it in 1.3.x so that
-  apps that need precise height info can get it with this function.
-
-  \returns the height of the font in pixels.
-  
-  \todo  In the future, when the XFT issues are resolved, this function
-         should simply return the 'size' value.
-*/
-int fl_height(int font, int size) {
-    if ( font == fl_font() && size == fl_size() ) return(fl_height());
-    int tf = fl_font(), ts = fl_size();   // save
-    fl_font(font,size);
-    int height = fl_height();
-    fl_font(tf,ts);                       // restore
-    return(height);
-}
-
-//
-// End of "$Id: fl_draw.cxx 8763 2011-05-30 16:08:46Z manolo $".
-//
diff --git a/common/fltk/src/fl_draw_image.cxx b/common/fltk/src/fl_draw_image.cxx
deleted file mode 100644
index 384a4c6..0000000
--- a/common/fltk/src/fl_draw_image.cxx
+++ /dev/null
@@ -1,578 +0,0 @@
-//
-// "$Id: fl_draw_image.cxx 8731 2011-05-23 21:05:22Z AlbrechtS $"
-//
-// Image drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// I hope a simple and portable method of drawing color and monochrome
-// images.  To keep this simple, only a single storage type is
-// supported: 8 bit unsigned data, byte order RGB, and pixels are
-// stored packed into rows with the origin at the top-left.  It is
-// possible to alter the size of pixels with the "delta" argument, to
-// add alpha or other information per pixel.  It is also possible to
-// change the origin and direction of the image data by messing with
-// the "delta" and "linedelta", making them negative, though this may
-// defeat some of the shortcuts in translating the image for X.
-
-#ifdef WIN32
-#  include "fl_draw_image_win32.cxx"
-#elif defined(__APPLE__)
-#  include "fl_draw_image_mac.cxx"
-#else
-
-// A list of assumptions made about the X display:
-
-// bits_per_pixel must be one of 8, 16, 24, 32.
-
-// scanline_pad must be a power of 2 and greater or equal to 8.
-
-// PsuedoColor visuals must have 8 bits_per_pixel (although the depth
-// may be less than 8).  This is the only limitation that affects any
-// modern X displays, you can't use 12 or 16 bit colormaps.
-
-// The mask bits in TrueColor visuals for each color are
-// contiguous and have at least one bit of each color.  This
-// is not checked for.
-
-// For 24 and 32 bit visuals there must be at least 8 bits of each color.
-
-////////////////////////////////////////////////////////////////
-
-#  include <FL/Fl.H>
-#  include <FL/fl_draw.H>
-#  include <FL/x.H>
-#  include "Fl_XColor.H"
-#  include "flstring.h"
-
-static XImage xi;	// template used to pass info to X
-static int bytes_per_pixel;
-static int scanline_add;
-static int scanline_mask;
-
-static void (*converter)(const uchar *from, uchar *to, int w, int delta);
-static void (*mono_converter)(const uchar *from, uchar *to, int w, int delta);
-
-static int dir;		// direction-alternator
-static int ri,gi,bi;	// saved error-diffusion value
-
-#  if USE_COLORMAP
-////////////////////////////////////////////////////////////////
-// 8-bit converter with error diffusion
-
-static void color8_converter(const uchar *from, uchar *to, int w, int delta) {
-  int r=ri, g=gi, b=bi;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    to = to+(w-1);
-    d = -delta;
-    td = -1;
-  } else {
-    dir = 1;
-    d = delta;
-    td = 1;
-  }
-  for (; w--; from += d, to += td) {
-    r += from[0]; if (r < 0) r = 0; else if (r>255) r = 255;
-    g += from[1]; if (g < 0) g = 0; else if (g>255) g = 255;
-    b += from[2]; if (b < 0) b = 0; else if (b>255) b = 255;
-    Fl_Color i = fl_color_cube(r*FL_NUM_RED/256,g*FL_NUM_GREEN/256,b*FL_NUM_BLUE/256);
-    Fl_XColor& xmap = fl_xmap[0][i];
-    if (!xmap.mapped) {if (!fl_redmask) fl_xpixel(r,g,b); else fl_xpixel(i);}
-    r -= xmap.r;
-    g -= xmap.g;
-    b -= xmap.b;
-    *to = uchar(xmap.pixel);
-  }
-  ri = r; gi = g; bi = b;
-}
-
-static void mono8_converter(const uchar *from, uchar *to, int w, int delta) {
-  int r=ri, g=gi, b=bi;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    to = to+(w-1);
-    d = -delta;
-    td = -1;
-  } else {
-    dir = 1;
-    d = delta;
-    td = 1;
-  }
-  for (; w--; from += d, to += td) {
-    r += from[0]; if (r < 0) r = 0; else if (r>255) r = 255;
-    g += from[0]; if (g < 0) g = 0; else if (g>255) g = 255;
-    b += from[0]; if (b < 0) b = 0; else if (b>255) b = 255;
-    Fl_Color i = fl_color_cube(r*FL_NUM_RED/256,g*FL_NUM_GREEN/256,b*FL_NUM_BLUE/256);
-    Fl_XColor& xmap = fl_xmap[0][i];
-    if (!xmap.mapped) {if (!fl_redmask) fl_xpixel(r,g,b); else fl_xpixel(i);}
-    r -= xmap.r;
-    g -= xmap.g;
-    b -= xmap.b;
-    *to = uchar(xmap.pixel);
-  }
-  ri = r; gi = g; bi = b;
-}
-
-#  endif
-
-////////////////////////////////////////////////////////////////
-// 16 bit TrueColor converters with error diffusion
-// Cray computers have no 16-bit type, so we use character pointers
-// (which may be slow)
-
-#  ifdef U16
-#    define OUTTYPE U16
-#    define OUTSIZE 1
-#    define OUTASSIGN(v) *t = v
-#  else
-#    define OUTTYPE uchar
-#    define OUTSIZE 2
-#    define OUTASSIGN(v) int tt=v; t[0] = uchar(tt>>8); t[1] = uchar(tt)
-#  endif
-
-static void color16_converter(const uchar *from, uchar *to, int w, int delta) {
-  OUTTYPE *t = (OUTTYPE *)to;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    t = t+(w-1)*OUTSIZE;
-    d = -delta;
-    td = -OUTSIZE;
-  } else {
-    dir = 1;
-    d = delta;
-    td = OUTSIZE;
-  }
-  int r=ri, g=gi, b=bi;
-  for (; w--; from += d, t += td) {
-    r = (r&~fl_redmask)  +from[0]; if (r>255) r = 255;
-    g = (g&~fl_greenmask)+from[1]; if (g>255) g = 255;
-    b = (b&~fl_bluemask) +from[2]; if (b>255) b = 255;
-    OUTASSIGN((
-      ((r&fl_redmask)<<fl_redshift)+
-      ((g&fl_greenmask)<<fl_greenshift)+
-      ((b&fl_bluemask)<<fl_blueshift)
-      ) >> fl_extrashift);
-  }
-  ri = r; gi = g; bi = b;
-}
-
-static void mono16_converter(const uchar *from,uchar *to,int w, int delta) {
-  OUTTYPE *t = (OUTTYPE *)to;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    t = t+(w-1)*OUTSIZE;
-    d = -delta;
-    td = -OUTSIZE;
-  } else {
-    dir = 1;
-    d = delta;
-    td = OUTSIZE;
-  }
-  uchar mask = fl_redmask & fl_greenmask & fl_bluemask;
-  int r=ri;
-  for (; w--; from += d, t += td) {
-    r = (r&~mask) + *from; if (r > 255) r = 255;
-    uchar m = r&mask;
-    OUTASSIGN((
-      (m<<fl_redshift)+
-      (m<<fl_greenshift)+
-      (m<<fl_blueshift)
-      ) >> fl_extrashift);
-  }
-  ri = r;
-}
-
-// special-case the 5r6g5b layout used by XFree86:
-
-static void c565_converter(const uchar *from, uchar *to, int w, int delta) {
-  OUTTYPE *t = (OUTTYPE *)to;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    t = t+(w-1)*OUTSIZE;
-    d = -delta;
-    td = -OUTSIZE;
-  } else {
-    dir = 1;
-    d = delta;
-    td = OUTSIZE;
-  }
-  int r=ri, g=gi, b=bi;
-  for (; w--; from += d, t += td) {
-    r = (r&7)+from[0]; if (r>255) r = 255;
-    g = (g&3)+from[1]; if (g>255) g = 255;
-    b = (b&7)+from[2]; if (b>255) b = 255;
-    OUTASSIGN(((r&0xf8)<<8) + ((g&0xfc)<<3) + (b>>3));
-  }
-  ri = r; gi = g; bi = b;
-}
-
-static void m565_converter(const uchar *from,uchar *to,int w, int delta) {
-  OUTTYPE *t = (OUTTYPE *)to;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    t = t+(w-1)*OUTSIZE;
-    d = -delta;
-    td = -OUTSIZE;
-  } else {
-    dir = 1;
-    d = delta;
-    td = OUTSIZE;
-  }
-  int r=ri;
-  for (; w--; from += d, t += td) {
-    r = (r&7) + *from; if (r > 255) r = 255;
-    OUTASSIGN((r>>3) * 0x841);
-  }
-  ri = r;
-}
-
-////////////////////////////////////////////////////////////////
-// 24bit TrueColor converters:
-
-static void rgb_converter(const uchar *from, uchar *to, int w, int delta) {
-  int d = delta-3;
-  for (; w--; from += d) {
-    *to++ = *from++;
-    *to++ = *from++;
-    *to++ = *from++;
-  }
-}
-
-static void bgr_converter(const uchar *from, uchar *to, int w, int delta) {
-  for (; w--; from += delta) {
-    uchar r = from[0];
-    uchar g = from[1];
-    *to++ = from[2];
-    *to++ = g;
-    *to++ = r;
-  }
-}
-
-static void rrr_converter(const uchar *from, uchar *to, int w, int delta) {
-  for (; w--; from += delta) {
-    *to++ = *from;
-    *to++ = *from;
-    *to++ = *from;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-// 32bit TrueColor converters on a 32 or 64-bit machine:
-
-#  ifdef U64
-#    define STORETYPE U64
-#    if WORDS_BIGENDIAN
-#      define INNARDS32(f) \
-  U64 *t = (U64*)to; \
-  int w1 = w/2; \
-  for (; w1--; from += delta) {U64 i = f; from += delta; *t++ = (i<<32)|(f);} \
-  if (w&1) *t++ = (U64)(f)<<32;
-#    else
-#      define INNARDS32(f) \
-  U64 *t = (U64*)to; \
-  int w1 = w/2; \
-  for (; w1--; from += delta) {U64 i = f; from += delta; *t++ = ((U64)(f)<<32)|i;} \
-  if (w&1) *t++ = (U64)(f);
-#    endif
-#  else
-#    define STORETYPE U32
-#    define INNARDS32(f) \
-  U32 *t = (U32*)to; for (; w--; from += delta) *t++ = f
-#  endif
-
-static void rgbx_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32((unsigned(from[0])<<24)+(from[1]<<16)+(from[2]<<8));
-}
-
-static void xbgr_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32((from[0])+(from[1]<<8)+(from[2]<<16));
-}
-
-static void xrgb_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32((from[0]<<16)+(from[1]<<8)+(from[2]));
-}
-
-static void bgrx_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32((from[0]<<8)+(from[1]<<16)+(unsigned(from[2])<<24));
-}
-
-static void rrrx_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32(unsigned(*from) * 0x1010100U);
-}
-
-static void xrrr_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32(*from * 0x10101U);
-}
-
-static void
-color32_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32(
-    (from[0]<<fl_redshift)+(from[1]<<fl_greenshift)+(from[2]<<fl_blueshift));
-}
-
-static void
-mono32_converter(const uchar *from,uchar *to,int w, int delta) {
-  INNARDS32(
-    (*from << fl_redshift)+(*from << fl_greenshift)+(*from << fl_blueshift));
-}
-
-////////////////////////////////////////////////////////////////
-
-static void figure_out_visual() {
-
-  fl_xpixel(FL_BLACK); // setup fl_redmask, etc, in fl_color.cxx
-  fl_xpixel(FL_WHITE); // also make sure white is allocated
-
-  static XPixmapFormatValues *pfvlist;
-  static int FL_NUM_pfv;
-  if (!pfvlist) pfvlist = XListPixmapFormats(fl_display,&FL_NUM_pfv);
-  XPixmapFormatValues *pfv;
-  for (pfv = pfvlist; pfv < pfvlist+FL_NUM_pfv; pfv++)
-    if (pfv->depth == fl_visual->depth) break;
-  xi.format = ZPixmap;
-  xi.byte_order = ImageByteOrder(fl_display);
-//i.bitmap_unit = 8;
-//i.bitmap_bit_order = MSBFirst;
-//i.bitmap_pad = 8;
-  xi.depth = fl_visual->depth;
-  xi.bits_per_pixel = pfv->bits_per_pixel;
-
-  if (xi.bits_per_pixel & 7) bytes_per_pixel = 0; // produce fatal error
-  else bytes_per_pixel = xi.bits_per_pixel/8;
-
-  unsigned int n = pfv->scanline_pad/8;
-  if (pfv->scanline_pad & 7 || (n&(n-1)))
-    Fl::fatal("Can't do scanline_pad of %d",pfv->scanline_pad);
-  if (n < sizeof(STORETYPE)) n = sizeof(STORETYPE);
-  scanline_add = n-1;
-  scanline_mask = -n;
-
-#  if USE_COLORMAP
-  if (bytes_per_pixel == 1) {
-    converter = color8_converter;
-    mono_converter = mono8_converter;
-    return;
-  }
-  if (!fl_visual->red_mask)
-    Fl::fatal("Can't do %d bits_per_pixel colormap",xi.bits_per_pixel);
-#  endif
-
-  // otherwise it is a TrueColor visual:
-
-  int rs = fl_redshift;
-  int gs = fl_greenshift;
-  int bs = fl_blueshift;
-
-  switch (bytes_per_pixel) {
-
-  case 2:
-    // All 16-bit TrueColor visuals are supported on any machine with
-    // 24 or more bits per integer.
-#  ifdef U16
-    xi.byte_order = WORDS_BIGENDIAN;
-#  else
-    xi.byte_order = 1;
-#  endif
-    if (rs == 11 && gs == 6 && bs == 0 && fl_extrashift == 3) {
-      converter = c565_converter;
-      mono_converter = m565_converter;
-    } else {
-      converter = color16_converter;
-      mono_converter = mono16_converter;
-    }
-    break;
-
-  case 3:
-    if (xi.byte_order) {rs = 16-rs; gs = 16-gs; bs = 16-bs;}
-    if (rs == 0 && gs == 8 && bs == 16) {
-      converter = rgb_converter;
-      mono_converter = rrr_converter;
-    } else if (rs == 16 && gs == 8 && bs == 0) {
-      converter = bgr_converter;
-      mono_converter = rrr_converter;
-    } else {
-      Fl::fatal("Can't do arbitrary 24bit color");
-    }
-    break;
-
-  case 4:
-    if ((xi.byte_order!=0) != WORDS_BIGENDIAN)
-      {rs = 24-rs; gs = 24-gs; bs = 24-bs;}
-    if (rs == 0 && gs == 8 && bs == 16) {
-      converter = xbgr_converter;
-      mono_converter = xrrr_converter;
-    } else if (rs == 24 && gs == 16 && bs == 8) {
-      converter = rgbx_converter;
-      mono_converter = rrrx_converter;
-    } else if (rs == 8 && gs == 16 && bs == 24) {
-      converter = bgrx_converter;
-      mono_converter = rrrx_converter;
-    } else if (rs == 16 && gs == 8 && bs == 0) {
-      converter = xrgb_converter;
-      mono_converter = xrrr_converter;
-    } else {
-      xi.byte_order = WORDS_BIGENDIAN;
-      converter = color32_converter;
-      mono_converter = mono32_converter;
-    }
-    break;
-
-  default:
-    Fl::fatal("Can't do %d bits_per_pixel",xi.bits_per_pixel);
-  }
-
-}
-
-#  define MAXBUFFER 0x40000 // 256k
-
-static void innards(const uchar *buf, int X, int Y, int W, int H,
-		    int delta, int linedelta, int mono,
-		    Fl_Draw_Image_Cb cb, void* userdata)
-{
-  if (!linedelta) linedelta = W*delta;
-
-  int dx, dy, w, h;
-  fl_clip_box(X,Y,W,H,dx,dy,w,h);
-  if (w<=0 || h<=0) return;
-  dx -= X;
-  dy -= Y;
-
-  if (!bytes_per_pixel) figure_out_visual();
-  xi.width = w;
-  xi.height = h;
-
-  void (*conv)(const uchar *from, uchar *to, int w, int delta) = converter;
-  if (mono) conv = mono_converter;
-
-  // See if the data is already in the right format.  Unfortunately
-  // some 32-bit x servers (XFree86) care about the unknown 8 bits
-  // and they must be zero.  I can't confirm this for user-supplied
-  // data, so the 32-bit shortcut is disabled...
-  // This can set bytes_per_line negative if image is bottom-to-top
-  // I tested it on Linux, but it may fail on other Xlib implementations:
-  if (buf && (
-#  if 0	// set this to 1 to allow 32-bit shortcut
-      delta == 4 &&
-#    if WORDS_BIGENDIAN
-      conv == rgbx_converter
-#    else
-      conv == xbgr_converter
-#    endif
-      ||
-#  endif
-      conv == rgb_converter && delta==3
-      ) && !(linedelta&scanline_add)) {
-    xi.data = (char *)(buf+delta*dx+linedelta*dy);
-    xi.bytes_per_line = linedelta;
-
-  } else {
-    int linesize = ((w*bytes_per_pixel+scanline_add)&scanline_mask)/sizeof(STORETYPE);
-    int blocking = h;
-    static STORETYPE *buffer;	// our storage, always word aligned
-    static long buffer_size;
-    {int size = linesize*h;
-    if (size > MAXBUFFER) {
-      size = MAXBUFFER;
-      blocking = MAXBUFFER/linesize;
-    }
-    if (size > buffer_size) {
-      delete[] buffer;
-      buffer_size = size;
-      buffer = new STORETYPE[size];
-    }}
-    xi.data = (char *)buffer;
-    xi.bytes_per_line = linesize*sizeof(STORETYPE);
-    if (buf) {
-      buf += delta*dx+linedelta*dy;
-      for (int j=0; j<h; ) {
-	STORETYPE *to = buffer;
-	int k;
-	for (k = 0; j<h && k<blocking; k++, j++) {
-	  conv(buf, (uchar*)to, w, delta);
-	  buf += linedelta;
-	  to += linesize;
-	}
-	XPutImage(fl_display,fl_window,fl_gc, &xi, 0, 0, X+dx, Y+dy+j-k, w, k);
-      }
-    } else {
-      STORETYPE* linebuf = new STORETYPE[(W*delta+(sizeof(STORETYPE)-1))/sizeof(STORETYPE)];
-      for (int j=0; j<h; ) {
-	STORETYPE *to = buffer;
-	int k;
-	for (k = 0; j<h && k<blocking; k++, j++) {
-	  cb(userdata, dx, dy+j, w, (uchar*)linebuf);
-	  conv((uchar*)linebuf, (uchar*)to, w, delta);
-	  to += linesize;
-	}
-	XPutImage(fl_display,fl_window,fl_gc, &xi, 0, 0, X+dx, Y+dy+j-k, w, k);
-      }
-
-      delete[] linebuf;
-    }
-  }
-}
-
-void Fl_Xlib_Graphics_Driver::draw_image(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  innards(buf,x,y,w,h,d,l,(d<3&&d>-3),0,0);
-}
-void Fl_Xlib_Graphics_Driver::draw_image(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  innards(0,x,y,w,h,d,0,(d<3&&d>-3),cb,data);
-}
-void Fl_Xlib_Graphics_Driver::draw_image_mono(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  innards(buf,x,y,w,h,d,l,1,0,0);
-}
-void Fl_Xlib_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  innards(0,x,y,w,h,d,0,1,cb,data);
-}
-
-void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) {
-  if (fl_visual->depth > 16) {
-    fl_color(r,g,b);
-    fl_rectf(x,y,w,h);
-  } else {
-    uchar c[3];
-    c[0] = r; c[1] = g; c[2] = b;
-    innards(c,x,y,w,h,0,0,0,0,0);
-  }
-}
-
-#endif
-
-//
-// End of "$Id: fl_draw_image.cxx 8731 2011-05-23 21:05:22Z AlbrechtS $".
-//
diff --git a/common/fltk/src/fl_draw_image_mac.cxx b/common/fltk/src/fl_draw_image_mac.cxx
deleted file mode 100644
index 73af992..0000000
--- a/common/fltk/src/fl_draw_image_mac.cxx
+++ /dev/null
@@ -1,176 +0,0 @@
-//
-// "$Id: fl_draw_image_mac.cxx 8581 2011-04-12 11:38:43Z manolo $"
-//
-// MacOS image drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-////////////////////////////////////////////////////////////////
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Printer.H>
-#include <FL/x.H>
-
-#define MAXBUFFER 0x40000 // 256k
-
-static void dataReleaseCB(void *info, const void *data, size_t size)
-{
-  delete[] (uchar *)data;
-}
-
-/*
- * draw an image based on the input parameters
- *
- * buf:       image source data
- * X, Y:      position (in buffer?!)
- * W, H:      size of picture (in pixel?)
- * delta:     distance from pixel to pixel in buf in bytes
- * linedelta: distance from line to line in buf in bytes
- * mono:      if set, pixel is one byte - if zero, pixel is 3 byte
- * cb:        callback to copy image data into (RGB?) buffer
- *   buf:       pointer to first byte in image source
- *   x, y:      position in buffer
- *   w:         width (in bytes?)
- *   dst:       destination buffer
- * userdata:  ?
- */
-static void innards(const uchar *buf, int X, int Y, int W, int H,
-		    int delta, int linedelta, int mono,
-		    Fl_Draw_Image_Cb cb, void* userdata)
-{
-  if (!linedelta) linedelta = W*delta;
-
-  const void *array = buf;
-  uchar *tmpBuf = 0;
-  if (cb || Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) {
-    tmpBuf = new uchar[ H*W*delta ];
-    if (cb) {
-      for (int i=0; i<H; i++) {
-	cb(userdata, 0, i, W, tmpBuf+i*W*delta);
-      }
-    } else {
-      uchar *p = tmpBuf;
-      for (int i=0; i<H; i++) {
-	memcpy(p, buf+i*linedelta, W*delta);
-	p += W*delta;
-	}
-    }
-    array = (void*)tmpBuf;
-    linedelta = W*delta;
-  }
-  // create an image context
-  CGColorSpaceRef   lut = 0;
-  if (delta<=2) 
-    lut = CGColorSpaceCreateDeviceGray();
-  else
-    lut = CGColorSpaceCreateDeviceRGB();
-  // a release callback is necessary when the fl_gc is a print context because the image data
-  // must be kept until the page is closed. Thus tmpBuf can't be deleted here. It's too early.
-  CGDataProviderRef src = CGDataProviderCreateWithData( 0L, array, linedelta*H, 
-						       tmpBuf ? dataReleaseCB : NULL
-						       );
-  CGImageRef        img = CGImageCreate( W, H, 8, 8*delta, linedelta,
-                            lut, delta&1?kCGImageAlphaNone:kCGImageAlphaNoneSkipLast,
-                            //lut, delta&1?kCGImageAlphaNone:kCGImageAlphaLast,
-                            src, 0L, false, kCGRenderingIntentDefault);
-  // draw the image into the destination context
-  if (img) {
-    CGRect rect = { { X, Y }, { W, H } };
-    Fl_X::q_begin_image(rect, 0, 0, W, H);
-    CGContextDrawImage(fl_gc, rect, img);
-    Fl_X::q_end_image();
-    // release all allocated resources
-    CGImageRelease(img);
-  }
-  CGColorSpaceRelease(lut);
-  CGDataProviderRelease(src);
-  if (img) return; // else fall through to slow mode
-  // following the very save (and very slow) way to write the image into the give port
-  CGContextSetShouldAntialias(fl_gc, false);
-  if ( cb )
-  {
-    uchar *tmpBuf = new uchar[ W*4 ];
-    for ( int i=0; i<H; i++ )
-    {
-      uchar *src = tmpBuf;
-      cb( userdata, 0, i, W, tmpBuf );
-      for ( int j=0; j<W; j++ )
-      {
-        if ( mono )
-          { fl_color( src[0], src[0], src[0] ); }
-        else
-          { fl_color( src[0], src[1], src[2] ); }
-        CGContextMoveToPoint(fl_gc, X+j, Y+i);
-        CGContextAddLineToPoint(fl_gc, X+j, Y+i);
-        CGContextStrokePath(fl_gc);
-        src+=delta;
-      }
-    }
-    delete[] tmpBuf;
-  }
-  else
-  {
-    for ( int i=0; i<H; i++ )
-    {
-      const uchar *src = buf+i*linedelta;
-      for ( int j=0; j<W; j++ )
-      {
-        if ( mono )
-          fl_color( src[0], src[0], src[0] );
-        else
-          fl_color( src[0], src[1], src[2] );
-        CGContextMoveToPoint(fl_gc, X+j, Y+i);
-        CGContextAddLineToPoint(fl_gc, X+j, Y+i);
-        CGContextStrokePath(fl_gc);
-        src += delta;
-      }
-    }
-  }
-  CGContextSetShouldAntialias(fl_gc, true);
-}
-
-void Fl_Quartz_Graphics_Driver::draw_image(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  innards(buf,x,y,w,h,d,l,(d<3&&d>-3),0,0);
-}
-void Fl_Quartz_Graphics_Driver::draw_image(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  innards(0,x,y,w,h,d,0,(d<3&&d>-3),cb,data);
-}
-void Fl_Quartz_Graphics_Driver::draw_image_mono(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  innards(buf,x,y,w,h,d,l,1,0,0);
-}
-void Fl_Quartz_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  innards(0,x,y,w,h,d,0,1,cb,data);
-}
-
-void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) {
-  fl_color(r,g,b);
-  fl_rectf(x,y,w,h);
-}
-
-//
-// End of "$Id: fl_draw_image_mac.cxx 8581 2011-04-12 11:38:43Z manolo $".
-//
diff --git a/common/fltk/src/fl_draw_image_win32.cxx b/common/fltk/src/fl_draw_image_win32.cxx
deleted file mode 100644
index 625112a..0000000
--- a/common/fltk/src/fl_draw_image_win32.cxx
+++ /dev/null
@@ -1,345 +0,0 @@
-//
-// "$Id: fl_draw_image_win32.cxx 8294 2011-01-20 12:55:50Z manolo $"
-//
-// WIN32 image drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// I hope a simple and portable method of drawing color and monochrome
-// images.  To keep this simple, only a single storage type is
-// supported: 8 bit unsigned data, byte order RGB, and pixels are
-// stored packed into rows with the origin at the top-left.  It is
-// possible to alter the size of pixels with the "delta" argument, to
-// add alpha or other information per pixel.  It is also possible to
-// change the origin and direction of the image data by messing with
-// the "delta" and "linedelta", making them negative, though this may
-// defeat some of the shortcuts in translating the image for X.
-
-// Unbelievably (since it conflicts with how most PC software works)
-// Micro$oft picked a bottom-up and BGR storage format for their
-// DIB images.  I'm pretty certain there is a way around this, but
-// I can't find any other than the brute-force method of drawing
-// each line as a separate image.  This may also need to be done
-// if the delta is any amount other than 1, 3, or 4.
-
-////////////////////////////////////////////////////////////////
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Printer.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-
-#define MAXBUFFER 0x40000 // 256k
-
-#if USE_COLORMAP
-
-// error-diffusion dither into the FLTK colormap
-static void dither(uchar* to, const uchar* from, int w, int delta) {
-  static int ri, gi, bi, dir;
-  int r=ri, g=gi, b=bi;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    to = to+(w-1);
-    d = -delta;
-    td = -1;
-  } else {
-    dir = 1;
-    d = delta;
-    td = 1;
-  }
-  for (; w--; from += d, to += td) {
-    r += from[0]; if (r < 0) r = 0; else if (r>255) r = 255;
-    int rr = r*FL_NUM_RED/256;
-    r -= rr*255/(FL_NUM_RED-1);
-    g += from[1]; if (g < 0) g = 0; else if (g>255) g = 255;
-    int gg = g*FL_NUM_GREEN/256;
-    g -= gg*255/(FL_NUM_GREEN-1);
-    b += from[2]; if (b < 0) b = 0; else if (b>255) b = 255;
-    int bb = b*FL_NUM_BLUE/256;
-    b -= bb*255/(FL_NUM_BLUE-1);
-    *to = uchar(FL_COLOR_CUBE+(bb*FL_NUM_RED+rr)*FL_NUM_GREEN+gg);
-  }
-  ri = r; gi = g; bi = b;
-}
-
-// error-diffusion dither into the FLTK colormap
-static void monodither(uchar* to, const uchar* from, int w, int delta) {
-  static int ri,dir;
-  int r=ri;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    to = to+(w-1);
-    d = -delta;
-    td = -1;
-  } else {
-    dir = 1;
-    d = delta;
-    td = 1;
-  }
-  for (; w--; from += d, to += td) {
-    r += *from; if (r < 0) r = 0; else if (r>255) r = 255;
-    int rr = r*FL_NUM_GRAY/256;
-    r -= rr*255/(FL_NUM_GRAY-1);
-    *to = uchar(FL_GRAY_RAMP+rr);
-  }
-  ri = r;
-}
-
-#endif // USE_COLORMAP
-
-static void innards(const uchar *buf, int X, int Y, int W, int H,
-		    int delta, int linedelta, int depth,
-		    Fl_Draw_Image_Cb cb, void* userdata)
-{
-  char indexed = 0;
-
-#if USE_COLORMAP
-  indexed = (fl_palette != 0);
-#endif
-
-  if (depth==0) depth = 3;
-  if (indexed || !fl_can_do_alpha_blending()) 
-    depth = (depth-1)|1;
-
-  if (!linedelta) linedelta = W*delta;
-
-  int x, y, w, h;
-  fl_clip_box(X,Y,W,H,x,y,w,h);
-  if (w<=0 || h<=0) return;
-  if (buf) buf += (x-X)*delta + (y-Y)*linedelta;
-
-  static U32 bmibuffer[256+12];
-  BITMAPINFO &bmi = *((BITMAPINFO*)bmibuffer);
-  if (!bmi.bmiHeader.biSize) {
-    bmi.bmiHeader.biSize = sizeof(bmi)-4; // does it use this to determine type?
-    bmi.bmiHeader.biPlanes = 1;
-    bmi.bmiHeader.biCompression = BI_RGB;
-    bmi.bmiHeader.biXPelsPerMeter = 0;
-    bmi.bmiHeader.biYPelsPerMeter = 0;
-    bmi.bmiHeader.biClrUsed = 0;
-    bmi.bmiHeader.biClrImportant = 0;
-  }
-#if USE_COLORMAP
-  if (indexed) {
-    for (short i=0; i<256; i++) {
-      *((short*)(bmi.bmiColors)+i) = i;
-    }
-  } else
-#endif
-  if (depth<3) {
-    for (int i=0; i<256; i++) {
-      bmi.bmiColors[i].rgbBlue = (uchar)i;
-      bmi.bmiColors[i].rgbGreen = (uchar)i;
-      bmi.bmiColors[i].rgbRed = (uchar)i;
-      bmi.bmiColors[i].rgbReserved = (uchar)0; // must be zero
-    }
-  }
-  bmi.bmiHeader.biWidth = w;
-#if USE_COLORMAP
-  bmi.bmiHeader.biBitCount = indexed ? 8 : depth*8;
-  int pixelsize = indexed ? 1 : depth;
-#else
-  bmi.bmiHeader.biBitCount = depth*8;
-  int pixelsize = depth;
-#endif
-  if (depth==2) { // special case: gray with alpha
-    bmi.bmiHeader.biBitCount = 32;
-    pixelsize = 4;
-  }
-  int linesize = (pixelsize*w+3)&~3;
-  
-  static U32* buffer;
-  static long buffer_size;
-  int blocking = h;
-  {int size = linesize*h;
-  // when printing, don't limit buffer size not to get a crash in StretchDIBits
-  if (size > MAXBUFFER && Fl_Surface_Device::surface()->class_name() != Fl_Printer::class_id) {
-    size = MAXBUFFER;
-    blocking = MAXBUFFER/linesize;
-  }
-  if (size > buffer_size) {
-    delete[] buffer;
-    buffer_size = size;
-    buffer = new U32[(size+3)/4];
-  }}
-  bmi.bmiHeader.biHeight = blocking;
-  static U32* line_buffer;
-  if (!buf) {
-    int size = W*delta;
-    static int line_buf_size;
-    if (size > line_buf_size) {
-      delete[] line_buffer;
-      line_buf_size = size;
-      line_buffer = new U32[(size+3)/4];
-    }
-  }
-  for (int j=0; j<h; ) {
-    int k;
-    for (k = 0; j<h && k<blocking; k++, j++) {
-      const uchar* from;
-      if (!buf) { // run the converter:
-	cb(userdata, x-X, y-Y+j, w, (uchar*)line_buffer);
-	from = (uchar*)line_buffer;
-      } else {
-	from = buf;
-	buf += linedelta;
-      }
-      uchar *to = (uchar*)buffer+(blocking-k-1)*linesize;
-#if USE_COLORMAP
-      if (indexed) {
-	if (depth<3)
-	  monodither(to, from, w, delta);
-	else 
-	  dither(to, from, w, delta);
-	to += w;
-      } else
-#endif
-      {
-        int i;
-        switch (depth) {
-          case 1: 
-            for (i=w; i--; from += delta) *to++ = *from;
-            break;
-          case 2:
-	    for (i=w; i--; from += delta, to += 4) {
-	      uchar a = from[1];
-	      uchar gray = (from[0]*a)>>8;
-	      to[0] = gray;
-	      to[1] = gray;
-	      to[2] = gray;
-	      to[3] = a;
-            }
-            break;
-          case 3:
-	    for (i=w; i--; from += delta, to += 3) {
-	      uchar r = from[0];
-	      to[0] = from[2];
-	      to[1] = from[1];
-	      to[2] = r;
-            }
-            break;          
-          case 4:
-	    for (i=w; i--; from += delta, to += 4) {
-              uchar a = from[3];
-	      uchar r = from[0];
-	      to[0] = (from[2]*a)>>8;
-	      to[1] = (from[1]*a)>>8;
-	      to[2] = (r*a)>>8;
-	      to[3] = from[3];
-            }
-            break;          
-        }            
-      }
-    }
-    if(Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) {
-      // if print context, device and logical units are not equal, so SetDIBitsToDevice
-      // does not do the expected job, whereas StretchDIBits does it.
-      StretchDIBits(fl_gc, x, y+j-k, w, k, 0, 0, w, k,
-		    (LPSTR)((uchar*)buffer+(blocking-k)*linesize),
-		    &bmi,
-#if USE_COLORMAP
-		    indexed ? DIB_PAL_COLORS : DIB_RGB_COLORS
-#else
-		    DIB_RGB_COLORS
-#endif
-		    , SRCCOPY );
-      delete[] buffer;
-      buffer = NULL;
-      buffer_size = 0;
-    }
-    else {
-      SetDIBitsToDevice(fl_gc, x, y+j-k, w, k, 0, 0, 0, k,
-			(LPSTR)((uchar*)buffer+(blocking-k)*linesize),
-			&bmi,
-#if USE_COLORMAP
-			indexed ? DIB_PAL_COLORS : DIB_RGB_COLORS
-#else
-			DIB_RGB_COLORS
-#endif
-			);
-      }
-  }
-}
-
-static int fl_abs(int v) { return v<0 ? -v : v; }
-
-void Fl_GDI_Graphics_Driver::draw_image(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  if (fl_abs(d)&FL_IMAGE_WITH_ALPHA) {
-    d ^= FL_IMAGE_WITH_ALPHA;
-    innards(buf,x,y,w,h,d,l,fl_abs(d),0,0);
-  } else {
-    innards(buf,x,y,w,h,d,l,(d<3&&d>-3),0,0);
-  }
-}
-
-void Fl_GDI_Graphics_Driver::draw_image(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  if (fl_abs(d)&FL_IMAGE_WITH_ALPHA) {
-    d ^= FL_IMAGE_WITH_ALPHA;
-    innards(0,x,y,w,h,d,0,(d<3&&d>-3),cb,data);
-  } else {
-    innards(0,x,y,w,h,d,0,(d<3&&d>-3),cb,data);
-  }
-}
-
-void Fl_GDI_Graphics_Driver::draw_image_mono(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  if (fl_abs(d)&FL_IMAGE_WITH_ALPHA) {
-    d ^= FL_IMAGE_WITH_ALPHA;
-    innards(buf,x,y,w,h,d,l,1,0,0);
-  } else {
-    innards(buf,x,y,w,h,d,l,1,0,0);
-  }
-}
-
-void Fl_GDI_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  if (fl_abs(d)&FL_IMAGE_WITH_ALPHA) {
-    d ^= FL_IMAGE_WITH_ALPHA;
-    innards(0,x,y,w,h,d,0,1,cb,data);
-  } else {
-    innards(0,x,y,w,h,d,0,1,cb,data);
-  }
-}
-
-void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) {
-#if USE_COLORMAP
-  // use the error diffusion dithering code to produce a much nicer block:
-  if (fl_palette) {
-    uchar c[3];
-    c[0] = r; c[1] = g; c[2] = b;
-    innards(c,x,y,w,h,0,0,0,0,0);
-    return;
-  }
-#endif
-  fl_color(r,g,b);
-  fl_rectf(x,y,w,h);
-}
-
-//
-// End of "$Id: fl_draw_image_win32.cxx 8294 2011-01-20 12:55:50Z manolo $".
-//
diff --git a/common/fltk/src/fl_draw_pixmap.cxx b/common/fltk/src/fl_draw_pixmap.cxx
deleted file mode 100644
index b024485..0000000
--- a/common/fltk/src/fl_draw_pixmap.cxx
+++ /dev/null
@@ -1,304 +0,0 @@
-//
-// "$Id: fl_draw_pixmap.cxx 8362 2011-02-02 18:39:34Z manolo $"
-//
-// Pixmap drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Implemented without using the xpm library (which I can't use because
-// it interferes with the color cube used by fl_draw_image).
-// Current implementation is cheap and slow, and works best on a full-color
-// display.  Transparency is not handled, and colors are dithered to
-// the color cube.  Color index is achieved by adding the id
-// characters together!  Also mallocs a lot of temporary memory!
-// Notice that there is no pixmap file interface.  This is on purpose,
-// as I want to discourage programs that require support files to work.
-// All data needed by a program ui should be compiled in!!!
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <stdio.h>
-#include "flstring.h"
-
-static int ncolors, chars_per_pixel;
-
-/**
-  Get the dimensions of a pixmap.
-  An XPM image contains the dimensions in its data. This function
-  returns te width and height.
-  \param[in]  data pointer to XPM image data.
-  \param[out] w,h  width and height of image
-  \returns non-zero if the dimensions were parsed OK
-  \returns 0 if there were any problems
-  */
-int fl_measure_pixmap(/*const*/ char* const* data, int &w, int &h) {
-  return fl_measure_pixmap((const char*const*)data,w,h);
-}
-
-/**
-  Get the dimensions of a pixmap.
-  \see fl_measure_pixmap(char* const* data, int &w, int &h)
-  */
-int fl_measure_pixmap(const char * const *cdata, int &w, int &h) {
-  int i = sscanf(cdata[0],"%d%d%d%d",&w,&h,&ncolors,&chars_per_pixel);
-  if (i<4 || w<=0 || h<=0 ||
-      (chars_per_pixel!=1 && chars_per_pixel!=2) ) return w=0;
-  return 1;
-}
-
-uchar **fl_mask_bitmap; // if non-zero, create bitmap and store pointer here
-
-/**
-  Draw XPM image data, with the top-left corner at the given position.
-  The image is dithered on 8-bit displays so you won't lose color
-  space for programs displaying both images and pixmaps.
-  \param[in] data pointer to XPM image data
-  \param[in] x,y  position of top-left corner
-  \param[in] bg   background color
-  \returns 0 if there was any error decoding the XPM data.
-  */
-int fl_draw_pixmap(/*const*/ char* const* data, int x,int y,Fl_Color bg) {
-  return fl_draw_pixmap((const char*const*)data,x,y,bg);
-}
-
-#ifdef WIN32
-// to compute an unused color to be used for the pixmap background
-FL_EXPORT UINT win_pixmap_bg_color; // the RGB() of the pixmap background color
-static int color_count; // # of non-transparent colors used in pixmap
-static uchar *used_colors; // used_colors[3*i+j] j=0,1,2 are the RGB values of the ith used color
-
-static void make_unused_color(uchar &r, uchar &g, uchar &b)
-// makes an RGB triplet different from all the colors used in the pixmap
-// and compute win_pixmap_bg_color from this triplet
-{
-  int i;
-  r = 2; g = 3; b = 4;
-  while (1) {
-    for ( i = 0; i < color_count; i++) {
-      if(used_colors[3*i] == r && used_colors[3*i+1] == g && used_colors[3*i+2] == b) break;
-      }
-    if (i >= color_count) {
-      free(used_colors);
-      win_pixmap_bg_color = RGB(r, g, b);
-      return;
-      }
-    if (r < 255) r++;
-    else {
-      r = 0;
-      if (g < 255) g++;
-      else {
-	g = 0;
-	b++;
-	}
-      }
-    }
-}
-#endif
-
-int fl_convert_pixmap(const char*const* cdata, uchar* out, Fl_Color bg) {
-  int w, h;
-  const uchar*const* data = (const uchar*const*)(cdata+1);
-  int transparent_index = -1;
-  uchar *transparent_c = (uchar *)0; // such that transparent_c[0,1,2] are the RGB of the transparent color
-
-  if (!fl_measure_pixmap(cdata, w, h))
-    return 0;
-
-  if ((chars_per_pixel < 1) || (chars_per_pixel > 2))
-    return 0;
-
-  uchar (*colors)[4] = new uchar [1<<(chars_per_pixel*8)][4];
-
-#ifdef WIN32
-  color_count = 0;
-  used_colors = (uchar *)malloc(abs(ncolors)*3*sizeof(uchar));
-#endif
-
-  if (ncolors < 0) {
-    // FLTK (non standard) compressed colormap
-    ncolors = -ncolors;
-    const uchar *p = *data++;
-    // if first color is ' ' it is transparent (put it later to make
-    // it not be transparent):
-    if (*p == ' ') {
-      uchar* c = colors[(int)' '];
-      transparent_index = ' ';
-      Fl::get_color(bg, c[0], c[1], c[2]); c[3] = 0;
-      transparent_c = c;
-      p += 4;
-      ncolors--;
-    }
-    // read all the rest of the colors:
-    for (int i=0; i < ncolors; i++) {
-      uchar* c = colors[*p++];
-#ifdef WIN32
-      used_colors[3*color_count] = *p;
-      used_colors[3*color_count+1] = *(p+1);
-      used_colors[3*color_count+2] = *(p+2);
-      color_count++;
-#endif
-      *c++ = *p++;
-      *c++ = *p++;
-      *c++ = *p++;
-      *c = 255;
-    }
-  } else {
-    // normal XPM colormap with names
-    for (int i=0; i<ncolors; i++) {
-      const uchar *p = *data++;
-      // the first 1 or 2 characters are the color index:
-      int ind = *p++;
-      uchar* c;
-      if (chars_per_pixel>1)
-        ind = (ind<<8)|*p++;
-      c = colors[ind];
-      // look for "c word", or last word if none:
-      const uchar *previous_word = p;
-      for (;;) {
-        while (*p && isspace(*p)) p++;
-        uchar what = *p++;
-        while (*p && !isspace(*p)) p++;
-        while (*p && isspace(*p)) p++;
-        if (!*p) {p = previous_word; break;}
-        if (what == 'c') break;
-        previous_word = p;
-        while (*p && !isspace(*p)) p++;
-      }
-      int parse = fl_parse_color((const char*)p, c[0], c[1], c[2]);
-      c[3] = 255;
-      if (parse) {
-#ifdef WIN32
-        used_colors[3*color_count] = c[0];
-        used_colors[3*color_count+1] = c[1];
-        used_colors[3*color_count+2] = c[2];
-        color_count++;
-#endif
-      } else {
-        // assume "None" or "#transparent" for any errors
-        // "bg" should be transparent...
-        Fl::get_color(bg, c[0], c[1], c[2]);
-        c[3] = 0;
-        transparent_index = ind;
-        transparent_c = c;
-      }
-    }
-  }
-#ifdef WIN32
-  if (transparent_c) {
-    make_unused_color(transparent_c[0], transparent_c[1], transparent_c[2]);
-  }
-  else {
-    uchar r, g, b;
-    make_unused_color(r, g, b);
-  }
-#endif
-
-  U32 *q = (U32*)out;
-  for (int Y = 0; Y < h; Y++) {
-    const uchar* p = data[Y];
-    if (chars_per_pixel <= 1) {
-      for (int X = 0; X < w; X++)
-        memcpy(q++, colors[*p++], 4);
-    } else {
-      for (int X = 0; X < w; X++) {
-        int ind = (*p++)<<8;
-        ind |= *p++;
-        memcpy(q++, colors[ind], 4);
-      }
-    }
-  }
-  
-  delete [] colors;
-  return 1;
-}
-
-/**
-  Draw XPM image data, with the top-left corner at the given position.
-  \see fl_draw_pixmap(char* const* data, int x, int y, Fl_Color bg)
-  */
-int fl_draw_pixmap(const char*const* cdata, int x, int y, Fl_Color bg) {
-  int w, h;
-
-  if (!fl_measure_pixmap(cdata, w, h))
-    return 0;
-
-  uchar *buffer = new uchar[w*h*4];
-
-  if (!fl_convert_pixmap(cdata, buffer, bg)) {
-    delete buffer;
-    return 0;
-  }
-
-  // FIXME: Hack until fl_draw_image() supports alpha properly
-#ifdef  __APPLE_QUARTZ__
-  if (fl_graphics_driver->class_name() == Fl_Quartz_Graphics_Driver::class_id ) {
-    CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
-    CGDataProviderRef src = CGDataProviderCreateWithData( 0L, buffer, w * h * 4, 0L);
-    CGImageRef img = CGImageCreate(w, h, 8, 4*8, 4*w,
-                                   lut, kCGImageAlphaLast,
-                                   src, 0L, false, kCGRenderingIntentDefault);
-    CGColorSpaceRelease(lut);
-    CGDataProviderRelease(src);
-    CGRect rect = { { x, y }, { w, h } };
-    Fl_X::q_begin_image(rect, 0, 0, w, h);
-    CGContextDrawImage(fl_gc, rect, img);
-    Fl_X::q_end_image();
-    CGImageRelease(img);
-  } else {
-#endif // __APPLE_QUARTZ__
-  // build the mask bitmap used by Fl_Pixmap:
-  if (fl_mask_bitmap) {
-    int W = (w+7)/8;
-    uchar* bitmap = new uchar[W * h];
-    *fl_mask_bitmap = bitmap;
-    const uchar *p = &buffer[3];
-    for (int Y = 0; Y < h; Y++) {
-      int dw = w;
-      for (int X = 0; X < W; X++) {
-        uchar b = 0;
-        for (int bit = 0x01;bit <= 0x80;bit<<=1) {
-          if (dw-- < 0)
-            break;
-          if (*p > 127)
-            b |= bit;
-          p += 4;
-        }
-        *bitmap++ = b;
-      }
-    }
-  }
-
-  fl_draw_image(buffer, x, y, w, h, 4);
-
-#ifdef __APPLE_QUARTZ__
-    }
-#endif
-
-  delete buffer;
-  return 1;
-}
-
-//
-// End of "$Id: fl_draw_pixmap.cxx 8362 2011-02-02 18:39:34Z manolo $".
-//
diff --git a/common/fltk/src/fl_encoding_latin1.cxx b/common/fltk/src/fl_encoding_latin1.cxx
deleted file mode 100644
index bac5311..0000000
--- a/common/fltk/src/fl_encoding_latin1.cxx
+++ /dev/null
@@ -1,137 +0,0 @@
-//
-// "$Id: fl_encoding_latin1.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Convert MSWindows-1252 (Latin-1) encoded text to the local encoding.
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/fl_draw.H>
-#include <FL/Enumerations.H>
-#include <stdlib.h>
-#include "flstring.h"
-
-#ifdef __APPLE__
- 
-// These function assume a western code page. If you need to support 
-// scripts that are not part of this code page, you might want to
-// take a look at FLTK2, which uses utf8 for text encoding.
-//
-// By keeping these conversion tables in their own module, they will not
-// be statically linked (by a smart linker) unless actually used.
-//
-// On MS-Windows, nothing need to be converted. We simply return the 
-// original pointer.
-//
-// Most X11 implementations seem to default to Latin-1 as a code since it
-// is a superset of ISO 8859-1, the original wetsern codepage on X11.
-//
-// Apple's OS X however renders text in MacRoman for western settings. The
-// lookup tables below will convert all common character codes and replace
-// unknown characters with an upsidedown question mark.
-
-// This table converts MSWindows-1252/Latin 1 into MacRoman encoding
-static uchar latin2roman[128] = {
-0xdb, 0xc0, 0xe2, 0xc4, 0xe3, 0xc9, 0xa0, 0xe0, 0xf6, 0xe4, 0xc0, 0xdc, 0xce, 0xc0, 0xc0, 0xc0, 
-0xc0, 0xd4, 0xd5, 0xd2, 0xd3, 0xa5, 0xd0, 0xd1, 0xf7, 0xaa, 0xc0, 0xdd, 0xcf, 0xc0, 0xc0, 0xd9, 
-0xca, 0xc1, 0xa2, 0xa3, 0xc0, 0xb4, 0xc0, 0xa4, 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0xc0, 0xa8, 0xf8, 
-0xa1, 0xb1, 0xc0, 0xc0, 0xab, 0xb5, 0xa6, 0xe1, 0xfc, 0xc0, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 
-0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, 
-0xc0, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xc0, 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0xc0, 0xc0, 0xa7, 
-0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, 
-0xc0, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xc0, 0xc0, 0xd8
-};
-
-// This table converts MacRoman into MSWindows-1252/Latin 1
-static uchar roman2latin[128] = {
-0xc4, 0xc5, 0xc7, 0xc9, 0xd1, 0xd6, 0xdc, 0xe1, 0xe0, 0xe2, 0xe4, 0xe3, 0xe5, 0xe7, 0xe9, 0xe8, 
-0xea, 0xeb, 0xed, 0xec, 0xee, 0xef, 0xf1, 0xf3, 0xf2, 0xf4, 0xf6, 0xf5, 0xfa, 0xf9, 0xfb, 0xfc, 
-0x86, 0xb0, 0xa2, 0xa3, 0xa7, 0x95, 0xb6, 0xdf, 0xae, 0xa9, 0x99, 0xb4, 0xa8, 0xbf, 0xc6, 0xd8, 
-0xbf, 0xb1, 0xbf, 0xbf, 0xa5, 0xb5, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xaa, 0xba, 0xbf, 0xe6, 0xf8, 
-0xbf, 0xa1, 0xac, 0xbf, 0x83, 0xbf, 0xbf, 0xab, 0xbb, 0x85, 0xa0, 0xc0, 0xc3, 0xd5, 0x8c, 0x9c, 
-0x96, 0x97, 0x93, 0x94, 0x91, 0x92, 0xf7, 0xbf, 0xff, 0x9f, 0xbf, 0x80, 0x8b, 0x9b, 0xbf, 0xbf, 
-0x87, 0xb7, 0x82, 0x84, 0x89, 0xc2, 0xca, 0xc1, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, 0xcc, 0xd3, 0xd4, 
-0xbf, 0xd2, 0xda, 0xdb, 0xd9, 0xbf, 0x88, 0x98, 0xaf, 0xbf, 0xbf, 0xbf, 0xb8, 0xbf, 0xbf, 0xbf
-};
-
-static char *buf = 0;
-static int n_buf = 0;
-
-const char *fl_latin1_to_local(const char *t, int n)  
-{
-  if (n==-1) n = strlen(t);
-  if (n<=n_buf) {
-    n_buf = (n + 257) & 0x7fffff00;
-    if (buf) free(buf);
-    buf = (char*)malloc(n_buf);
-  }
-  const uchar *src = (const uchar*)t;
-  uchar *dst = (uchar*)buf;
-  for ( ; n>0; n--) {
-    uchar c = *src++;
-    if (c>127) 
-      *dst = latin2roman[c-128];
-    else
-      *dst = c;
-  }
-  //*dst = 0; // this would be wrong!
-  return buf;
-}
-
-const char *fl_local_to_latin1(const char *t, int n)
-{
-  if (n==-1) n = strlen(t);
-  if (n<=n_buf) {
-    n_buf = (n + 257) & 0x7fffff00;
-    if (buf) free(buf);
-    buf = (char*)malloc(n_buf);
-  }
-  const uchar *src = (const uchar*)t;
-  uchar *dst = (uchar*)buf;
-  for ( ; n>0; n--) {
-    uchar c = *src++;
-    if (c>127)
-      *dst++ = roman2latin[c-128];
-    else
-      *dst++ = c;
-  }
-  //*dst = 0; // this would be wrong
-  return buf;
-}
-
-#else 
-
-const char *fl_latin1_to_local(const char *t, int) 
-{
-  return t;
-}
-
-const char *fl_local_to_latin1(const char *t, int)
-{
-  return t;
-}
-
-#endif
-
-//
-// End of "$Id: fl_encoding_latin1.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_encoding_mac_roman.cxx b/common/fltk/src/fl_encoding_mac_roman.cxx
deleted file mode 100644
index 45d6115..0000000
--- a/common/fltk/src/fl_encoding_mac_roman.cxx
+++ /dev/null
@@ -1,134 +0,0 @@
-//
-// "$Id: fl_encoding_mac_roman.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Convert Mac Roman encoded text to the local encoding.
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/fl_draw.H>
-#include <FL/Enumerations.H>
-#include <stdlib.h>
-#include "flstring.h"
-
-// These function assume a western code page. If you need to support 
-// scripts that are not part of this code page, you might want to
-// take a look at FLTK2, which uses utf8 for text encoding.
-//
-// By keeping these conversion tables in their own module, they will not
-// be statically linked (by a smart linker) unless actually used.
-//
-// On Mac OS X, nothing need to be converted. We simply return the 
-// original pointer.
-//
-// MSWindows and X11 render text in ISO or Latin-1 for western settings. The
-// lookup tables below will convert all common character codes and replace
-// unknown characters with an upsidedown question mark.
-
-#ifdef __APPLE__
-
-const char *fl_mac_roman_to_local(const char *t, int)
-{
-  return t;
-}
-
-const char *fl_local_to_mac_roman(const char *t, int)
-{
-  return t;
-}
-
-#else
-
-// This table converts MSWindows-1252/Latin 1 into MacRoman encoding
-static uchar latin2roman[128] = {
-0xdb, 0xc0, 0xe2, 0xc4, 0xe3, 0xc9, 0xa0, 0xe0, 0xf6, 0xe4, 0xc0, 0xdc, 0xce, 0xc0, 0xc0, 0xc0, 
-0xc0, 0xd4, 0xd5, 0xd2, 0xd3, 0xa5, 0xd0, 0xd1, 0xf7, 0xaa, 0xc0, 0xdd, 0xcf, 0xc0, 0xc0, 0xd9, 
-0xca, 0xc1, 0xa2, 0xa3, 0xc0, 0xb4, 0xc0, 0xa4, 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0xc0, 0xa8, 0xf8, 
-0xa1, 0xb1, 0xc0, 0xc0, 0xab, 0xb5, 0xa6, 0xe1, 0xfc, 0xc0, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 
-0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, 
-0xc0, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xc0, 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0xc0, 0xc0, 0xa7, 
-0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, 
-0xc0, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xc0, 0xc0, 0xd8
-};
-
-// This table converts MacRoman into MSWindows-1252/Latin 1
-static uchar roman2latin[128] = {
-0xc4, 0xc5, 0xc7, 0xc9, 0xd1, 0xd6, 0xdc, 0xe1, 0xe0, 0xe2, 0xe4, 0xe3, 0xe5, 0xe7, 0xe9, 0xe8, 
-0xea, 0xeb, 0xed, 0xec, 0xee, 0xef, 0xf1, 0xf3, 0xf2, 0xf4, 0xf6, 0xf5, 0xfa, 0xf9, 0xfb, 0xfc, 
-0x86, 0xb0, 0xa2, 0xa3, 0xa7, 0x95, 0xb6, 0xdf, 0xae, 0xa9, 0x99, 0xb4, 0xa8, 0xbf, 0xc6, 0xd8, 
-0xbf, 0xb1, 0xbf, 0xbf, 0xa5, 0xb5, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xaa, 0xba, 0xbf, 0xe6, 0xf8, 
-0xbf, 0xa1, 0xac, 0xbf, 0x83, 0xbf, 0xbf, 0xab, 0xbb, 0x85, 0xa0, 0xc0, 0xc3, 0xd5, 0x8c, 0x9c, 
-0x96, 0x97, 0x93, 0x94, 0x91, 0x92, 0xf7, 0xbf, 0xff, 0x9f, 0xbf, 0x80, 0x8b, 0x9b, 0xbf, 0xbf, 
-0x87, 0xb7, 0x82, 0x84, 0x89, 0xc2, 0xca, 0xc1, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, 0xcc, 0xd3, 0xd4, 
-0xbf, 0xd2, 0xda, 0xdb, 0xd9, 0xbf, 0x88, 0x98, 0xaf, 0xbf, 0xbf, 0xbf, 0xb8, 0xbf, 0xbf, 0xbf
-};
-
-static char *buf = 0;
-static int n_buf = 0;
-
-const char *fl_local_to_mac_roman(const char *t, int n)  
-{
-  if (n==-1) n = strlen(t);
-  if (n<=n_buf) {
-    n_buf = (n + 257) & 0x7fffff00;
-    if (buf) free(buf);
-    buf = (char*)malloc(n_buf);
-  }
-  const uchar *src = (const uchar*)t;
-  uchar *dst = (uchar*)buf;
-  for ( ; n>0; n--) {
-    uchar c = *src;
-    if (c>127) 
-      *dst = latin2roman[c-128];
-    else
-      *dst = c;
-  }
-  //*dst = 0; // this would be wrong!
-  return buf;
-}
-
-const char *fl_mac_roman_to_local(const char *t, int n)
-{
-  if (n==-1) n = strlen(t);
-  if (n<=n_buf) {
-    n_buf = (n + 257) & 0x7fffff00;
-    if (buf) free(buf);
-    buf = (char*)malloc(n_buf);
-  }
-  const uchar *src = (const uchar*)t;
-  uchar *dst = (uchar*)buf;
-  for ( ; n>0; n--) {
-    uchar c = *src++;
-    if (c>127)
-      *dst++ = roman2latin[c-128];
-    else
-      *dst++ = c;
-  }
-  //*dst = 0; // this would be wrong
-  return buf;
-}
-
-#endif
-
-//
-// End of "$Id: fl_encoding_mac_roman.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_engraved_label.cxx b/common/fltk/src/fl_engraved_label.cxx
deleted file mode 100644
index bd0af89..0000000
--- a/common/fltk/src/fl_engraved_label.cxx
+++ /dev/null
@@ -1,93 +0,0 @@
-//
-// "$Id: fl_engraved_label.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Engraved label drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Drawing code for XForms style engraved & embossed labels
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-
-// data[] is dx, dy, color triples
-
-static void innards(
-    const Fl_Label* o, int X, int Y, int W, int H, Fl_Align align,
-    int data[][3], int n)
-{
-  Fl_Align a1 = align;
-  if (a1 & FL_ALIGN_CLIP) {
-    fl_push_clip(X, Y, W, H); a1 = (Fl_Align)(a1&~FL_ALIGN_CLIP);}
-  fl_font((Fl_Font)o->font, o->size);
-  for (int i = 0; i < n; i++) {
-    fl_color((Fl_Color)(i < n-1 ? data[i][2] : o->color));
-    fl_draw(o->value, X+data[i][0], Y+data[i][1], W, H, a1);
-  }
-  if (align & FL_ALIGN_CLIP) fl_pop_clip();
-}
-
-static void fl_shadow_label(
-    const Fl_Label* o, int X, int Y, int W, int H, Fl_Align align)
-{
-  static int data[2][3] = {{2,2,FL_DARK3},{0,0,0}};
-  innards(o, X, Y, W, H, align, data, 2);
-}
-
-static void fl_engraved_label(
-    const Fl_Label* o, int X, int Y, int W, int H, Fl_Align align)
-{
-  static int data[7][3] = {
-    {1,0,FL_LIGHT3},{1,1,FL_LIGHT3},{0,1,FL_LIGHT3},
-    {-1,0,FL_DARK3},{-1,-1,FL_DARK3},{0,-1,FL_DARK3},
-    {0,0,0}};
-  innards(o, X, Y, W, H, align, data, 7);
-}
-
-static void fl_embossed_label(
-    const Fl_Label* o, int X, int Y, int W, int H, Fl_Align align)
-{
-  static int data[7][3] = {
-    {-1,0,FL_LIGHT3},{-1,-1,FL_LIGHT3},{0,-1,FL_LIGHT3},
-    {1,0,FL_DARK3},{1,1,FL_DARK3},{0,1,FL_DARK3},
-    {0,0,0}};
-  innards(o, X, Y, W, H, align, data, 7);
-}
-
-Fl_Labeltype fl_define_FL_SHADOW_LABEL() {
-  Fl::set_labeltype(_FL_SHADOW_LABEL, fl_shadow_label, 0);
-  return _FL_SHADOW_LABEL;
-}
-Fl_Labeltype fl_define_FL_ENGRAVED_LABEL() {
-  Fl::set_labeltype(_FL_ENGRAVED_LABEL, fl_engraved_label, 0);
-  return _FL_ENGRAVED_LABEL;
-}
-Fl_Labeltype fl_define_FL_EMBOSSED_LABEL() {
-  Fl::set_labeltype(_FL_EMBOSSED_LABEL, fl_embossed_label, 0);
-  return _FL_EMBOSSED_LABEL;
-}
-
-//
-// End of "$Id: fl_engraved_label.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_file_dir.cxx b/common/fltk/src/fl_file_dir.cxx
deleted file mode 100644
index a96070a..0000000
--- a/common/fltk/src/fl_file_dir.cxx
+++ /dev/null
@@ -1,200 +0,0 @@
-//
-// "$Id: fl_file_dir.cxx 8345 2011-01-31 18:04:09Z manolo $"
-//
-// File chooser widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "flstring.h"
-#include <FL/filename.H>
-#include <FL/Fl_File_Chooser.H>
-#include <FL/fl_ask.H>
-
-
-static Fl_File_Chooser	*fc = (Fl_File_Chooser *)0;
-static void		(*current_callback)(const char*) = 0;
-static const char	*current_label = fl_ok;
-
-
-// Do a file chooser callback...
-static void callback(Fl_File_Chooser *, void*) {
-  if (current_callback && fc->value())
-    (*current_callback)(fc->value());
-}
-
-/** \addtogroup  group_comdlg 
-    @{ */
-
-/** 
-    Set the file chooser callback
-    \note \#include <FL/Fl_File_Chooser.H>
-    \relates Fl_File_Chooser
-*/
-void fl_file_chooser_callback(void (*cb)(const char*)) {
-  current_callback = cb;
-}
-
-
-/** 
-    Set the "OK" button label
-    \note \#include <FL/Fl_File_Chooser.H>
-    \relates Fl_File_Chooser
-*/
-void fl_file_chooser_ok_label(const char *l) {
-  if (l) current_label = l;
-  else current_label = fl_ok;
-}
-
-/** 
-    Shows a file chooser dialog and gets a filename. 
-    \note \#include <FL/Fl_File_Chooser.H>
-    \image html Fl_File_Chooser.jpg 
-    \image latex  Fl_File_Chooser.jpg "Fl_File_Chooser" width=12cm
-    \param[in] message text in title bar
-    \param[in] pat filename pattern filter
-    \param[in] fname initial/default filename selection
-    \param[in] relative 0 for absolute path name, relative path name otherwise
-    \return the user selected filename, in absolute or relative format 
-            or NULL if user cancels
-    \relates Fl_File_Chooser
-*/
-char *					// O - Filename or NULL
-fl_file_chooser(const char *message,	// I - Message in titlebar
-                const char *pat,	// I - Filename pattern
-		const char *fname,	// I - Initial filename selection
-		int        relative) {	// I - 0 for absolute path
-  static char	retname[FL_PATH_MAX];		// Returned filename
-
-  if (!fc) {
-    if (!fname || !*fname) fname = ".";
-
-    fc = new Fl_File_Chooser(fname, pat, Fl_File_Chooser::CREATE, message);
-    fc->callback(callback, 0);
-  } else {
-    fc->type(Fl_File_Chooser::CREATE);
-    // see, if we use the same pattern between calls
-    char same_pattern = 0;
-    const char *fcf = fc->filter();
-    if ( fcf && pat && strcmp(fcf, pat)==0)
-      same_pattern = 1;
-    else if ( (fcf==0L || *fcf==0) && (pat==0L || *pat==0) )
-      same_pattern = 1;
-    // now set the pattern to the new pattern (even if they are the same)
-    fc->filter(pat);
-    fc->label(message);
-
-    if (!fname) { // null pointer reuses same filename if pattern didn't change
-      if (!same_pattern && fc->value()) {
-	// if pattern is different, remove name but leave old directory:
-	strlcpy(retname, fc->value(), sizeof(retname));
-
-	char *p = strrchr(retname, '/');
-
-        if (p) {
-	  // If the filename is "/foo", then the directory will be "/", not
-	  // ""...
-	  if (p == retname)
-	    retname[1] = '\0';
-	  else
-	    *p = '\0';
-	}
-	// Set the directory...
-	fc->value(retname);
-      } else {
-        // re-use the previously selected name
-      }
-    } else if (!*fname) { // empty filename reuses directory with empty name
-      const char *fcv = fc->value();
-      if (fcv) 
-        strlcpy(retname, fc->value(), sizeof(retname));
-      else 
-        *retname = 0;
-      const char *n = fl_filename_name(retname);
-      if (n) *((char*)n) = 0;
-      fc->value("");
-      fc->directory(retname);
-    } else {
-       fc->value(fname);
-    }
-  }
-
-  fc->ok_label(current_label);
-  fc->show();
-
-  while (fc->shown())
-    Fl::wait();
-
-  if (fc->value() && relative) {
-    fl_filename_relative(retname, sizeof(retname), fc->value());
-
-    return retname;
-  } else if (fc->value()) return (char *)fc->value();
-  else return 0;
-}
-
-/** Shows a file chooser dialog and gets a directory.
-    \note \#include <FL/Fl_File_Chooser.H>
-    \param[in] message title bar text
-    \param[in] fname initial/default directory name
-    \param[in] relative 0 for absolute path return, relative otherwise
-    \return the directory path string chosen by the user or NULL if user cancels
-    \relates Fl_File_Chooser
-*/
-char *					// O - Directory or NULL
-fl_dir_chooser(const char *message,	// I - Message for titlebar
-               const char *fname,	// I - Initial directory name
-	       int        relative)	// I - 0 for absolute
-{
-  static char	retname[FL_PATH_MAX];		// Returned directory name
-
-  if (!fc) {
-    if (!fname || !*fname) fname = ".";
-
-    fc = new Fl_File_Chooser(fname, "*", Fl_File_Chooser::CREATE |
-                                         Fl_File_Chooser::DIRECTORY, message);
-    fc->callback(callback, 0);
-  } else {
-    fc->type(Fl_File_Chooser::CREATE | Fl_File_Chooser::DIRECTORY);
-    fc->filter("*");
-    if (fname && *fname) fc->value(fname);
-    fc->label(message);
-  }
-
-  fc->show();
-
-  while (fc->shown())
-    Fl::wait();
-
-  if (fc->value() && relative) {
-    fl_filename_relative(retname, sizeof(retname), fc->value());
-
-    return retname;
-  } else if (fc->value()) return (char *)fc->value();
-  else return 0;
-}
-/** @} */
-
-
-//
-// End of "$Id: fl_file_dir.cxx 8345 2011-01-31 18:04:09Z manolo $".
-//
diff --git a/common/fltk/src/fl_font.cxx b/common/fltk/src/fl_font.cxx
deleted file mode 100644
index e208ed7..0000000
--- a/common/fltk/src/fl_font.cxx
+++ /dev/null
@@ -1,99 +0,0 @@
-//
-// "$Id: fl_font.cxx 8722 2011-05-23 16:06:13Z ianmacarthur $"
-//
-// Font selection code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-# ifndef WIN32_LEAN_AND_MEAN
-#  define WIN32_LEAN_AND_MEAN
-# endif
-/* We require Windows 2000 features such as GetGlyphIndices */
-# if !defined(WINVER) || (WINVER < 0x0500)
-#  ifdef WINVER
-#   undef WINVER
-#  endif
-#  define WINVER 0x0500
-# endif
-# if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
-#  ifdef _WIN32_WINNT
-#   undef _WIN32_WINNT
-#  endif
-#  define _WIN32_WINNT 0x0500
-# endif
-#endif
-
-// Select fonts from the FLTK font table.
-#include "flstring.h"
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include "Fl_Font.H"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifdef WIN32
-#  include "fl_font_win32.cxx"
-#elif defined(__APPLE__)
-#  include "fl_font_mac.cxx"
-#elif USE_XFT
-#  include "fl_font_xft.cxx"
-#else
-#  include "fl_font_x.cxx"
-#endif // WIN32
-
-
-double fl_width(const char* c) {
-  if (c) return fl_width(c, strlen(c));
-  else return 0.0f;
-}
-
-void fl_draw(const char* str, int x, int y) {
-  fl_draw(str, strlen(str), x, y);
-}
-
-void fl_draw(int angle, const char* str, int x, int y) {
-  fl_draw(angle, str, strlen(str), x, y);//must be fixed!
-}
-
-void fl_text_extents(const char *c, int &dx, int &dy, int &w, int &h) {
-  if (c)  fl_text_extents(c, strlen(c), dx, dy, w, h);
-  else {
-    w = 0; h = 0;
-    dx = 0; dy = 0;
-  }
-} // fl_text_extents
-
-
-void fl_draw(const char* str, int l, float x, float y) {
-#ifdef __APPLE__
-  fl_graphics_driver->draw(str, l, x, y);
-#else
-  fl_draw(str, l, (int)x, (int)y);
-#endif
-}
-//
-// End of "$Id: fl_font.cxx 8722 2011-05-23 16:06:13Z ianmacarthur $".
-//
diff --git a/common/fltk/src/fl_font_mac.cxx b/common/fltk/src/fl_font_mac.cxx
deleted file mode 100644
index b65de06..0000000
--- a/common/fltk/src/fl_font_mac.cxx
+++ /dev/null
@@ -1,541 +0,0 @@
-//
-// "$Id: fl_font_mac.cxx 8597 2011-04-17 13:18:55Z ianmacarthur $"
-//
-// MacOS font selection routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-
-/* from fl_utf.c */
-extern unsigned fl_utf8toUtf16(const char* src, unsigned srclen, unsigned short* dst, unsigned dstlen);
-
-static CGAffineTransform font_mx = { 1, 0, 0, -1, 0, 0 };
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-static CFMutableDictionaryRef attributes = NULL;
-#endif
-
-Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize Size) {
-  next = 0;
-#  if HAVE_GL
-  listbase = 0;
-#  endif
-
-//  knowWidths = 0;
-    // OpenGL needs those for its font handling
-  q_name = strdup(name);
-  size = Size;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-if (fl_mac_os_version >= 100500) {//unfortunately, CTFontCreateWithName != NULL on 10.4 also!
-  CFStringRef str = CFStringCreateWithCString(NULL, name, kCFStringEncodingUTF8);
-  fontref = CTFontCreateWithName(str, size, NULL);
-  CGGlyph glyph[2];
-  const UniChar A[2]={'W','.'};
-  CTFontGetGlyphsForCharacters(fontref, A, glyph, 2);
-  CGSize advances[2];
-  double w;
-  CTFontGetAdvancesForGlyphs(fontref, kCTFontHorizontalOrientation, glyph, advances, 2);
-  w = advances[0].width;
-  if ( abs(advances[0].width - advances[1].width) < 1E-2 ) {//this is a fixed-width font
-    // slightly rescale fixed-width fonts so the character width has an integral value
-    CFRelease(fontref);
-    CGFloat fsize = size / ( w/floor(w + 0.5) );
-    fontref = CTFontCreateWithName(str, fsize, NULL);
-    w = CTFontGetAdvancesForGlyphs(fontref, kCTFontHorizontalOrientation, glyph, NULL, 1);
-  }
-  CFRelease(str);
-  ascent = (short)(CTFontGetAscent(fontref) + 0.5);
-  descent = (short)(CTFontGetDescent(fontref) + 0.5);
-  q_width = w + 0.5;
-  for (unsigned i = 0; i < sizeof(width)/sizeof(float*); i++) width[i] = NULL;
-  if (!attributes) {
-    static CFNumberRef zero_ref;
-    float zero = 0.;
-    zero_ref = CFNumberCreate(NULL, kCFNumberFloat32Type, &zero);
-    // deactivate kerning for all fonts, so that string width = sum of character widths
-    // which allows fast fl_width() implementation.
-    attributes = CFDictionaryCreateMutable(kCFAllocatorDefault,
-					   3,
-					   &kCFTypeDictionaryKeyCallBacks,
-					   &kCFTypeDictionaryValueCallBacks);
-    CFDictionarySetValue (attributes, kCTKernAttributeName, zero_ref);
-  }
-  if (ascent == 0) { // this may happen with some third party fonts
-    CFDictionarySetValue (attributes, kCTFontAttributeName, fontref);
-    CFAttributedStringRef mastr = CFAttributedStringCreate(kCFAllocatorDefault, CFSTR("Wj"), attributes);
-    CTLineRef ctline = CTLineCreateWithAttributedString(mastr);
-    CFRelease(mastr);
-    CGFloat fascent, fdescent;
-    CTLineGetTypographicBounds(ctline, &fascent, &fdescent, NULL);
-    CFRelease(ctline);
-    ascent = (short)(fascent + 0.5);
-    descent = (short)(fdescent + 0.5);
-    }
-}
-else {
-#endif
-#if ! __LP64__
-  OSStatus err;
-    // fill our structure with a few default values
-  ascent = Size*3/4;
-  descent = Size-ascent;
-  q_width = Size*2/3;
-	// now use ATS to get the actual Glyph size information
-	// say that our passed-in name is encoded as UTF-8, since this works for plain ASCII names too...
-  CFStringRef cfname = CFStringCreateWithCString(0L, name, kCFStringEncodingUTF8);
-  ATSFontRef font = ATSFontFindFromName(cfname, kATSOptionFlagsDefault);
-  if (font) {
-    ATSFontMetrics m = { 0 };
-    ATSFontGetHorizontalMetrics(font, kATSOptionFlagsDefault, &m);
-    if (m.avgAdvanceWidth) q_width = int(m.avgAdvanceWidth*Size);
-      // playing with the offsets a little to make standard sizes fit
-    if (m.ascent) ascent  = int(m.ascent*Size-0.5f);
-    if (m.descent) descent = -int(m.descent*Size-1.5f);
-  }
-  CFRelease(cfname);
-    // now we allocate everything needed to render text in this font later
-    // get us the default layout and style
-  err = ATSUCreateTextLayout(&layout);
-  UniChar mTxt[2] = { 65, 0 };
-  err = ATSUSetTextPointerLocation(layout, mTxt, kATSUFromTextBeginning, 1, 1);
-  err = ATSUCreateStyle(&style);
-  err = ATSUSetRunStyle(layout, style, kATSUFromTextBeginning, kATSUToTextEnd);
-    // now set the actual font, size and attributes. We also set the font matrix to
-    // render our font up-side-down, so when rendered through our inverted CGContext,
-    // text will appear normal again.
-  Fixed fsize = IntToFixed(Size);
-//  ATSUFontID fontID = FMGetFontFromATSFontRef(font);
-  ATSUFontID fontID;
-  ATSUFindFontFromName(name, strlen(name), kFontFullName, kFontMacintoshPlatform, kFontRomanScript, kFontEnglishLanguage, &fontID);
-
-  // draw the font upside-down... Compensate for fltk/OSX origin differences
-  ATSUAttributeTag sTag[] = { kATSUFontTag, kATSUSizeTag, kATSUFontMatrixTag };
-  ByteCount sBytes[] = { sizeof(ATSUFontID), sizeof(Fixed), sizeof(CGAffineTransform) };
-  ATSUAttributeValuePtr sAttr[] = { &fontID, &fsize, &font_mx };
-  err = ATSUSetAttributes(style, 3, sTag, sBytes, sAttr);
-    // next, make sure that Quartz will only render at integer coordinates
-  ATSLineLayoutOptions llo = kATSLineUseDeviceMetrics | kATSLineDisableAllLayoutOperations;
-  ATSUAttributeTag aTag[] = { kATSULineLayoutOptionsTag };
-  ByteCount aBytes[] = { sizeof(ATSLineLayoutOptions) };
-  ATSUAttributeValuePtr aAttr[] = { &llo };
-  err = ATSUSetLineControls (layout, kATSUFromTextBeginning, 1, aTag, aBytes, aAttr);
-    // now we are finally ready to measure some letter to get the bounding box
-  Fixed bBefore, bAfter, bAscent, bDescent;
-  err = ATSUGetUnjustifiedBounds(layout, kATSUFromTextBeginning, 1, &bBefore, &bAfter, &bAscent, &bDescent);
-    // Requesting a certain height font on Mac does not guarantee that ascent+descent
-    // equal the requested height. fl_height will reflect the actual height that we got.
-    // The font "Apple Chancery" is a pretty extreme example of overlapping letters.
-  float fa = -FixedToFloat(bAscent), fd = -FixedToFloat(bDescent);
-  if (fa>0.0f && fd>0.0f) {
-    //float f = Size/(fa+fd);
-    ascent = int(fa); //int(fa*f+0.5f);
-    descent = int(fd); //Size - ascent;
-  }
-  int w = FixedToInt(bAfter);
-  if (w)
-    q_width = FixedToInt(bAfter);
-
-# define ENABLE_TRANSIENT_FONTS  1
-
-# ifdef ENABLE_TRANSIENT_FONTS
-  // Now, by way of experiment, try enabling Transient Font Matching, this will
-  // cause ATSU to find a suitable font to render any chars the current font can't do...
-  ATSUSetTransientFontMatching (layout, true);
-# endif
-#endif//__LP64__
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-}
-
-Fl_Font_Descriptor::~Fl_Font_Descriptor() {
-/*
-#if HAVE_GL
- // ++ todo: remove OpenGL font alocations
-// Delete list created by gl_draw().  This is not done by this code
-// as it will link in GL unnecessarily.  There should be some kind
-// of "free" routine pointer, or a subclass?
-// if (listbase) {
-//  int base = font->min_char_or_byte2;
-//  int size = font->max_char_or_byte2-base+1;
-//  int base = 0; int size = 256;
-//  glDeleteLists(listbase+base,size);
-// }
-#endif
-  */
-  if (this == fl_graphics_driver->font_descriptor()) fl_graphics_driver->font_descriptor(NULL);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  if (fl_mac_os_version >= 100500)  {
-    CFRelease(fontref);
-    for (unsigned i = 0; i < sizeof(width)/sizeof(float*); i++) {
-      if (width[i]) free(width[i]);
-      }
-  }
-#endif
-}
-
-////////////////////////////////////////////////////////////////
-
-static Fl_Fontdesc built_in_table[] = {
-{"Arial"},
-{"Arial Bold"},
-{"Arial Italic"},
-{"Arial Bold Italic"},
-{"Courier New"},
-{"Courier New Bold"},
-{"Courier New Italic"},
-{"Courier New Bold Italic"},
-{"Times New Roman"},
-{"Times New Roman Bold"},
-{"Times New Roman Italic"},
-{"Times New Roman Bold Italic"},
-{"Symbol"},
-{"Monaco"},
-{"Andale Mono"}, // there is no bold Monaco font on standard Mac
-{"Webdings"},
-};
-
-static UniChar *utfWbuf = 0;
-static unsigned utfWlen = 0;
-
-static UniChar *mac_Utf8_to_Utf16(const char *txt, int len, int *new_len)
-{
-  unsigned wlen = fl_utf8toUtf16(txt, len, (unsigned short*)utfWbuf, utfWlen);
-  if (wlen >= utfWlen)
-  {
-    utfWlen = wlen + 100;
-	if (utfWbuf) free(utfWbuf);
-    utfWbuf = (UniChar*)malloc((utfWlen)*sizeof(UniChar));
-	wlen = fl_utf8toUtf16(txt, len, (unsigned short*)utfWbuf, utfWlen);
-  }
-  *new_len = wlen;
-  return utfWbuf;
-} // mac_Utf8_to_Utf16
-
-Fl_Fontdesc* fl_fonts = built_in_table;
-
-static Fl_Font_Descriptor* find(Fl_Font fnum, Fl_Fontsize size) {
-  Fl_Fontdesc* s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // use 0 if fnum undefined
-  Fl_Font_Descriptor* f;
-  for (f = s->first; f; f = f->next)
-    if (f->size == size) return f;
-  f = new Fl_Font_Descriptor(s->name, size);
-  f->next = s->first;
-  s->first = f;
-  return f;
-}
-
-////////////////////////////////////////////////////////////////
-// Public interface:
-
-void Fl_Quartz_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
-  if (fnum==-1) {
-    Fl_Graphics_Driver::font(0, 0);
-    return;
-  }
-  Fl_Graphics_Driver::font(fnum, size);
-  this->font_descriptor( find(fnum, size) );
-}
-
-int Fl_Quartz_Graphics_Driver::height() {
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  return fl_fontsize->ascent + fl_fontsize->descent;
-}
-
-int Fl_Quartz_Graphics_Driver::descent() {
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  return fl_fontsize->descent+1;
-}
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-// returns width of a pair of UniChar's in the surrogate range
-static CGFloat surrogate_width(const UniChar *txt, Fl_Font_Descriptor *fl_fontsize)
-{
-  CTFontRef font2 = fl_fontsize->fontref;
-  bool must_release = false;
-  CGGlyph glyphs[2];
-  bool b = CTFontGetGlyphsForCharacters(font2, txt, glyphs, 2);
-  CGSize a;
-  if(!b) { // the current font doesn't contain this char
-    CFStringRef str = CFStringCreateWithCharactersNoCopy(NULL, txt, 2, kCFAllocatorNull);
-    // find a font that contains it
-    font2 = CTFontCreateForString(font2, str, CFRangeMake(0,2));
-    must_release = true;
-    CFRelease(str);
-    b = CTFontGetGlyphsForCharacters(font2, txt, glyphs, 2);
-  }
-  if (b) CTFontGetAdvancesForGlyphs(font2, kCTFontHorizontalOrientation, glyphs, &a, 1);
-  else a.width = fl_fontsize->q_width;
-  if(must_release) CFRelease(font2);
-  return a.width;
-}
-#endif
-
-static double fl_mac_width(const UniChar* txt, int n, Fl_Font_Descriptor *fl_fontsize) {
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-if (fl_mac_os_version >= 100500) {
-  double retval = 0;
-  UniChar uni;
-  int i;
-  for (i = 0; i < n; i++) { // loop over txt
-    uni = txt[i];
-    if (uni >= 0xD800 && uni <= 0xDBFF) { // handles the surrogate range
-      retval += surrogate_width(&txt[i], fl_fontsize);
-      i++; // because a pair of UniChar's represent a single character
-      continue;
-    }
-    const int block = 0x10000 / (sizeof(fl_fontsize->width)/sizeof(float*)); // block size
-    // r: index of the character block containing uni
-    unsigned int r = uni >> 7; // change 7 if sizeof(width) is changed
-    if (!fl_fontsize->width[r]) { // this character block has not been hit yet
-//fprintf(stderr,"r=%d size=%d name=%s\n",r,fl_fontsize->size, fl_fontsize->q_name);
-      // allocate memory to hold width of each character in the block
-      fl_fontsize->width[r] = (float*) malloc(sizeof(float) * block);
-      UniChar ii = r * block;
-      CGSize advance_size;
-      CGGlyph glyph;
-      for (int j = 0; j < block; j++) { // loop over the block
-	CTFontRef font2 = fl_fontsize->fontref;
-	bool must_release = false;
-	// ii spans all characters of this block
-	bool b = CTFontGetGlyphsForCharacters(font2, &ii, &glyph, 1);
-	if (!b) { // the current font doesn't contain this char
-	  CFStringRef str = CFStringCreateWithCharactersNoCopy(NULL, &ii, 1, kCFAllocatorNull);
-	  // find a font that contains it
-	  font2 = CTFontCreateForString(font2, str, CFRangeMake(0,1));
-	  must_release = true;
-	  CFRelease(str);
-	  b = CTFontGetGlyphsForCharacters(font2, &ii, &glyph, 1);
-	  }
-	if (b) CTFontGetAdvancesForGlyphs(font2, kCTFontHorizontalOrientation, &glyph, &advance_size, 1);
-	else advance_size.width = 0.;
-	// the width of one character of this block of characters
-	fl_fontsize->width[r][j] = advance_size.width;
-	if (must_release) CFRelease(font2);
-	ii++;
-      }
-    }
-    // sum the widths of all characters of txt
-    retval += fl_fontsize->width[r][uni & (block-1)];
-  }
-  return retval;
-} else {
-#endif
-#if ! __LP64__
-  OSStatus err;
-  Fixed bBefore, bAfter, bAscent, bDescent;
-  ATSUTextLayout layout;
-  ByteCount iSize;
-  ATSUAttributeTag iTag;
-  ATSUAttributeValuePtr iValuePtr;
-
-  // Here's my ATSU text measuring attempt... This seems to do the Right Thing
-  // now collect our ATSU resources and measure our text string
-  layout = fl_fontsize->layout;
-  // activate the current GC
-  iSize = sizeof(CGContextRef);
-  iTag = kATSUCGContextTag;
-  iValuePtr = &fl_gc;
-  ATSUSetLayoutControls(layout, 1, &iTag, &iSize, &iValuePtr);
-  // now measure the bounding box
-  err = ATSUSetTextPointerLocation(layout, txt, kATSUFromTextBeginning, n, n);
-  err = ATSUGetUnjustifiedBounds(layout, kATSUFromTextBeginning, n, &bBefore, &bAfter, &bAscent, &bDescent);
-  // If err is OK then return length, else return 0. Or something...
-  int len = FixedToInt(bAfter);
-  return len;
-#endif
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-  return 0;
-}
-
-double Fl_Quartz_Graphics_Driver::width(const char* txt, int n) {
-  int wc_len = n;
-  UniChar *uniStr = mac_Utf8_to_Utf16(txt, n, &wc_len);
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  return fl_mac_width(uniStr, wc_len, font_descriptor());
-}
-
-double Fl_Quartz_Graphics_Driver::width(unsigned int wc) {
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-
-  UniChar utf16[3];
-  int l = 1;
-  if (wc <= 0xFFFF) {
-    *utf16 = wc;
-  }
-  else {
-//    char buf[4];
-//    l = fl_utf8encode(wc, buf);
-//    l = (int)fl_utf8toUtf16(buf, l, utf16, 3);
-    l = (int)fl_ucs_to_Utf16(wc, utf16, 3);
-  }
-  return fl_mac_width(utf16, l, font_descriptor());
-}
-
-// text extent calculation
-void Fl_Quartz_Graphics_Driver::text_extents(const char *str8, int n, int &dx, int &dy, int &w, int &h) {
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  UniChar *txt = mac_Utf8_to_Utf16(str8, n, &n);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-if (fl_mac_os_version >= 100500) {
-  CFStringRef str16 = CFStringCreateWithCharactersNoCopy(NULL, txt, n,  kCFAllocatorNull);
-  CFDictionarySetValue (attributes, kCTFontAttributeName, fl_fontsize->fontref);
-  CFAttributedStringRef mastr = CFAttributedStringCreate(kCFAllocatorDefault, str16, attributes);
-  CFRelease(str16);
-  CTLineRef ctline = CTLineCreateWithAttributedString(mastr);
-  CFRelease(mastr);
-  CGContextSetTextPosition(fl_gc, 0, 0);
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGRect rect = CTLineGetImageBounds(ctline, fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-  CFRelease(ctline);
-  dx = floor(rect.origin.x + 0.5);
-  dy = floor(- rect.origin.y - rect.size.height + 0.5);
-  w = rect.size.width + 0.5;
-  h = rect.size.height + 0.5;
-  }
-else {
-#endif
-#if ! __LP64__
-  OSStatus err;
-  ATSUTextLayout layout;
-  ByteCount iSize;
-  ATSUAttributeTag iTag;
-  ATSUAttributeValuePtr iValuePtr;
-
-// Here's my ATSU text measuring attempt... This seems to do the Right Thing
-  // now collect our ATSU resources and measure our text string
-  layout = fl_fontsize->layout;
-        // activate the current GC
-  iSize = sizeof(CGContextRef);
-  iTag = kATSUCGContextTag;
-  iValuePtr = &fl_gc;
-      ATSUSetLayoutControls(layout, 1, &iTag, &iSize, &iValuePtr);
-        // now measure the bounding box
-  err = ATSUSetTextPointerLocation(layout, txt, kATSUFromTextBeginning, n, n);
-  Rect bbox;
-  err = ATSUMeasureTextImage(layout, kATSUFromTextBeginning, n, 0, 0, &bbox);
-  w = bbox.right - bbox.left;
-  h = bbox.bottom - bbox.top;
-  dx = bbox.left;
-  dy = -bbox.bottom;
-//printf("r: %d l: %d t: %d b: %d w: %d h: %d\n", bbox.right, bbox.left, bbox.top, bbox.bottom, w, h);
-#endif
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-  return;
-} // fl_text_extents
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-static CGColorRef flcolortocgcolor(Fl_Color i)
-{
-  uchar r, g, b;
-  Fl::get_color(i, r, g, b);
-  CGFloat components[4] = {r/255.0f, g/255.0f, b/255.0f, 1.};
-  static CGColorSpaceRef cspace = NULL;
-  if (cspace == NULL) {
-    cspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
-    }
-  return CGColorCreate(cspace, components);
-}
-#endif
-
-static void fl_mac_draw(const char *str, int n, float x, float y, Fl_Graphics_Driver *driver) {
-  // convert to UTF-16 first
-  UniChar *uniStr = mac_Utf8_to_Utf16(str, n, &n);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  if (fl_mac_os_version >= 100500) {
-    CFStringRef str16 = CFStringCreateWithCharactersNoCopy(NULL, uniStr, n,  kCFAllocatorNull);
-    if (str16 == NULL) return; // shd not happen
-    CGColorRef color = flcolortocgcolor(driver->color());
-    CFDictionarySetValue (attributes, kCTFontAttributeName, driver->font_descriptor()->fontref);
-    CFDictionarySetValue (attributes, kCTForegroundColorAttributeName, color);
-    CFAttributedStringRef mastr = CFAttributedStringCreate(kCFAllocatorDefault, str16, attributes);
-    CFRelease(str16);
-    CFRelease(color);
-    CTLineRef ctline = CTLineCreateWithAttributedString(mastr);
-    CFRelease(mastr);
-    CGContextSetTextMatrix(fl_gc, font_mx);
-    CGContextSetTextPosition(fl_gc, x, y);
-    CGContextSetShouldAntialias(fl_gc, true);
-    CTLineDraw(ctline, fl_gc);
-    CGContextSetShouldAntialias(fl_gc, false);
-    CFRelease(ctline);
-  } else {
-#endif
-#if ! __LP64__
-  OSStatus err;
-  // now collect our ATSU resources
-  ATSUTextLayout layout = driver->font_descriptor()->layout;
-
-  ByteCount iSize = sizeof(CGContextRef);
-  ATSUAttributeTag iTag = kATSUCGContextTag;
-  ATSUAttributeValuePtr iValuePtr=&fl_gc;
-  ATSUSetLayoutControls(layout, 1, &iTag, &iSize, &iValuePtr);
-
-  err = ATSUSetTextPointerLocation(layout, uniStr, kATSUFromTextBeginning, n, n);
-  CGContextSetShouldAntialias(fl_gc, true);
-  err = ATSUDrawText(layout, kATSUFromTextBeginning, n, FloatToFixed(x), FloatToFixed(y));
-  CGContextSetShouldAntialias(fl_gc, false);
-#endif
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-}
-
-void Fl_Quartz_Graphics_Driver::draw(const char *str, int n, float x, float y) {
-  // avoid a crash if no font has been selected by user yet !
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  fl_mac_draw(str, n, x, y, this);
-}
-
-void Fl_Quartz_Graphics_Driver::draw(const char* str, int n, int x, int y) {
-  // avoid a crash if no font has been selected by user yet !
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  fl_mac_draw(str, n, (float)x-0.0f, (float)y+0.5f, this);
-}
-
-void Fl_Quartz_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) {
-  CGContextSaveGState(fl_gc);
-  CGContextTranslateCTM(fl_gc, x, y);
-  CGContextRotateCTM(fl_gc, - angle*(M_PI/180) );
-  draw(str, n, 0, 0);
-  CGContextRestoreGState(fl_gc);
-}
-
-void Fl_Quartz_Graphics_Driver::rtl_draw(const char* c, int n, int x, int y) {
-  int dx, dy, w, h;
-  text_extents(c, n, dx, dy, w, h);
-  draw(c, n, x - w - dx, y);
-}
-
-//
-// End of "$Id: fl_font_mac.cxx 8597 2011-04-17 13:18:55Z ianmacarthur $".
-//
diff --git a/common/fltk/src/fl_font_win32.cxx b/common/fltk/src/fl_font_win32.cxx
deleted file mode 100644
index 537fc2e..0000000
--- a/common/fltk/src/fl_font_win32.cxx
+++ /dev/null
@@ -1,452 +0,0 @@
-//
-// "$Id: fl_font_win32.cxx 8644 2011-05-10 15:37:05Z ianmacarthur $"
-//
-// WIN32 font selection routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Printer.H>
-
-static int fl_angle_ = 0;
-
-#ifndef FL_DOXYGEN
-Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize fsize) {
-  int weight = FW_NORMAL;
-  int italic = 0;
-  switch (*name++) {
-  case 'I': italic = 1; break;
-  case 'P': italic = 1;
-  case 'B': weight = FW_BOLD; break;
-  case ' ': break;
-  default: name--;
-  }
-  fid = CreateFont(
-    -fsize, // negative makes it use "char size"
-    0,	            // logical average character width
-    fl_angle_*10,	            // angle of escapement
-    fl_angle_*10,	            // base-line orientation angle
-    weight,
-    italic,
-    FALSE,	        // underline attribute flag
-    FALSE,	        // strikeout attribute flag
-    DEFAULT_CHARSET,    // character set identifier
-    OUT_DEFAULT_PRECIS,	// output precision
-    CLIP_DEFAULT_PRECIS,// clipping precision
-    DEFAULT_QUALITY,	// output quality
-    DEFAULT_PITCH,	// pitch and family
-    name	        // pointer to typeface name string
-    );
-  angle = fl_angle_;
-  if (!fl_gc) fl_GetDC(0);
-  SelectObject(fl_gc, fid);
-  GetTextMetrics(fl_gc, &metr);
-//  BOOL ret = GetCharWidthFloat(fl_gc, metr.tmFirstChar, metr.tmLastChar, font->width+metr.tmFirstChar);
-// ...would be the right call, but is not implemented into Window95! (WinNT?)
-  //GetCharWidth(fl_gc, 0, 255, width);
-  int i;
-  for (i = 0; i < 64; i++) width[i] = NULL;
-#if HAVE_GL
-  listbase = 0;
-  for (i = 0; i < 64; i++) glok[i] = 0;
-#endif
-  size = fsize;
-}
-
-Fl_Font_Descriptor::~Fl_Font_Descriptor() {
-#if HAVE_GL
-// Delete list created by gl_draw().  This is not done by this code
-// as it will link in GL unnecessarily.  There should be some kind
-// of "free" routine pointer, or a subclass?
-// if (listbase) {
-//  int base = font->min_char_or_byte2;
-//  int size = font->max_char_or_byte2-base+1;
-//  int base = 0; int size = 256;
-//  glDeleteLists(listbase+base,size);
-// }
-#endif
-  if (this == fl_graphics_driver->font_descriptor()) fl_graphics_driver->font_descriptor(NULL);
-  DeleteObject(fid);
-  int i;
-  for (i = 0; i < 64; i++) free(width[i]);
-}
-
-////////////////////////////////////////////////////////////////
-
-// WARNING: if you add to this table, you must redefine FL_FREE_FONT
-// in Enumerations.H & recompile!!
-static Fl_Fontdesc built_in_table[] = {
-{" Arial"},
-{"BArial"},
-{"IArial"},
-{"PArial"},
-{" Courier New"},
-{"BCourier New"},
-{"ICourier New"},
-{"PCourier New"},
-{" Times New Roman"},
-{"BTimes New Roman"},
-{"ITimes New Roman"},
-{"PTimes New Roman"},
-{" Symbol"},
-{" Terminal"},
-{"BTerminal"},
-{" Wingdings"},
-};
-
-Fl_Fontdesc* fl_fonts = built_in_table;
-
-static Fl_Font_Descriptor* find(Fl_Font fnum, Fl_Fontsize size, int angle) {
-  Fl_Fontdesc* s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // use 0 if fnum undefined
-  Fl_Font_Descriptor* f;
-  for (f = s->first; f; f = f->next)
-    if (f->size == size && f->angle == angle) return f;
-  f = new Fl_Font_Descriptor(s->name, size);
-  f->next = s->first;
-  s->first = f;
-  return f;
-}
-
-////////////////////////////////////////////////////////////////
-// Public interface:
-
-static void fl_font(Fl_Graphics_Driver *driver, Fl_Font fnum, Fl_Fontsize size, int angle) {
-  if (fnum==-1) { // just make sure that we will load a new font next time
-    fl_angle_ = 0;
-    driver->Fl_Graphics_Driver::font(0, 0);
-    return;
-  }
-  if (fnum == driver->Fl_Graphics_Driver::font() && size == driver->size() && angle == fl_angle_) return;
-  fl_angle_ = angle;
-  driver->Fl_Graphics_Driver::font(fnum, size);
-  driver->font_descriptor( find(fnum, size, angle) );
-}
-
-void Fl_GDI_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
-  fl_font(this, fnum, size, 0);
-}
-
-int Fl_GDI_Graphics_Driver::height() {
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  if (fl_fontsize) return (fl_fontsize->metr.tmAscent + fl_fontsize->metr.tmDescent);
-  else return -1;
-}
-
-int Fl_GDI_Graphics_Driver::descent() {
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  if (fl_fontsize) return fl_fontsize->metr.tmDescent;
-  else return -1;
-}
-
-// Unicode string buffer
-static unsigned short *wstr = NULL;
-static int wstr_len    = 0;
-
-
-double Fl_GDI_Graphics_Driver::width(const char* c, int n) {
-  int i = 0;
-  if (!font_descriptor()) return -1.0;
-  double w = 0.0;
-  char *end = (char *)&c[n];
-  while (i < n) {
-    unsigned int ucs;
-    int l;
-    ucs = fl_utf8decode((const char*)(c + i), end, &l);
-//  if (l < 1) l = 1;
-    i += l;
-    if (!fl_nonspacing(ucs)) {
-      w += width(ucs);
-    }
-  }
-  return w;
-}
-
-double Fl_GDI_Graphics_Driver::width(unsigned int c) {
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  unsigned int r;
-  SIZE s;
-  // Special Case Handling of Unicode points over U+FFFF.
-  // The logic (below) computes a lookup table for char widths
-  // on-the-fly, but the table only covers codepoints up to
-  // U+FFFF, which covers the basic multilingual plane, but
-  // not any higher plane, or glyphs that require surrogate-pairs
-  // to encode them in WinXX, which is UTF16.
-  // This code assumes that these glyphs are rarely used and simply
-  // measures them explicitly if they occur - This will be slow...
-  if(c > 0x0000FFFF) { // UTF16 surrogate pair is needed
-    if (!fl_gc) { // We have no valid gc, so nothing to measure - bail out
-      return 0.0;
-    }
-    int cc; // cell count
-    unsigned short u16[4]; // Array for UTF16 representation of c
-    // Creates a UTF16 string from a UCS code point.
-    cc = fl_ucs_to_Utf16(c, u16, 4);
-    // Make sure the current font is selected before we make the measurement
-    SelectObject(fl_gc, fl_fontsize->fid);
-    // measure the glyph width
-    GetTextExtentPoint32W(fl_gc, (WCHAR*)u16, cc, &s);
-    return (double)s.cx;
-  }
-  // else - this falls through to the lookup-table for glyph widths
-  // in the basic multilingual plane
-  r = (c & 0xFC00) >> 10;
-  if (!fl_fontsize->width[r]) {
-    fl_fontsize->width[r] = (int*) malloc(sizeof(int) * 0x0400);
-    unsigned short i = 0, ii = r * 0x400;
-    // The following code makes a best effort attempt to obtain a valid fl_gc.
-    // If no fl_gc is available at the time we call fl_width(), then we first
-    // try to obtain a gc from the first fltk window.
-    // If that is null then we attempt to obtain the gc from the current screen
-    // using (GetDC(NULL)).
-    // This should resolve STR #2086
-    HDC gc = fl_gc;
-    HWND hWnd = 0;
-    if (!gc) { // We have no valid gc, try and obtain one
-      // Use our first fltk window, or fallback to using the screen via GetDC(NULL)
-      hWnd = Fl::first_window() ? fl_xid(Fl::first_window()) : NULL;
-      gc = GetDC(hWnd);
-    }
-    if (!gc)
-	Fl::fatal("Invalid graphic context: fl_width() failed because no valid HDC was found!");
-    SelectObject(gc, fl_fontsize->fid);
-    for (; i < 0x400; i++) {
-      GetTextExtentPoint32W(gc, (WCHAR*)&ii, 1, &s);
-      fl_fontsize->width[r][i] = s.cx;
-      ii++;
-    }
-    if (gc && gc!=fl_gc) ReleaseDC(hWnd, gc);
-  }
-  return (double) fl_fontsize->width[r][c & 0x03FF];
-}
-
-/* Add function pointer to allow us to access GetGlyphIndicesW on systems that have it,
- * without crashing on systems that do not. */
-/* DWORD WINAPI GetGlyphIndicesW(HDC,LPCWSTR,int,LPWORD,DWORD) */
-typedef DWORD (WINAPI* fl_GetGlyphIndices_func)(HDC,LPCWSTR,int,LPWORD,DWORD);
-
-static fl_GetGlyphIndices_func fl_GetGlyphIndices = NULL; // used to hold a proc pointer for GetGlyphIndicesW
-static int have_loaded_GetGlyphIndices = 0; // Set this non-zero once we have tried to load GetGlyphIndices
-
-// Function that tries to dynamically load GetGlyphIndicesW at runtime
-static void GetGlyphIndices_init() {
-  // Since not all versions of Windows include GetGlyphIndicesW support,
-  // we do a run-time check for the required function.
-  HMODULE hMod = GetModuleHandle("GDI32.DLL");
-  if (hMod) {
-    // check that GetGlyphIndicesW is available
-    fl_GetGlyphIndices = (fl_GetGlyphIndices_func)GetProcAddress(hMod, "GetGlyphIndicesW");
-  }
-  have_loaded_GetGlyphIndices = -1; // set this non-zero when we have attempted to load GetGlyphIndicesW
-} // GetGlyphIndices_init function
-
-static void on_printer_extents_update(int &dx, int &dy, int &w, int &h)
-// converts text extents from device coords to logical coords
-{
-  POINT pt[3] = { {0, 0}, {dx, dy}, {dx+w, dy+h} };
-  DPtoLP(fl_gc, pt, 3);
-  w = pt[2].x - pt[1].x;
-  h = pt[2].y - pt[1].y;
-  dx = pt[1].x - pt[0].x;
-  dy = pt[1].y - pt[0].y;
-}
-
-// if printer context, extents shd be converted to logical coords
-#define EXTENTS_UPDATE(x,y,w,h) \
-  if (Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) { on_printer_extents_update(x,y,w,h); }
-
-// Function to determine the extent of the "inked" area of the glyphs in a string
-void Fl_GDI_Graphics_Driver::text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h) {
-
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  if (!fl_fontsize) { // no valid font, nothing to measure
-    w = 0; h = 0;
-    dx = dy = 0;
-    return;
-  }
-
-  static unsigned short *ext_buff = NULL; // UTF-16 converted version of input UTF-8 string
-  static WORD  *w_buff = NULL; // glyph indices array
-  static unsigned wc_len = 0;  // current string buffer dimensions
-  static const MAT2 matrix = { { 0, 1 }, { 0, 0 }, { 0, 0 }, { 0, 1 } }; // identity mat for GetGlyphOutlineW
-  GLYPHMETRICS metrics;
-  int maxw = 0, maxh = 0, dh;
-  int minx = 0, miny = -999999;
-  unsigned len = 0, idx = 0;
-  HWND hWnd = 0;
-  HDC gc = fl_gc; // local copy of current gc - make a copy in case we change it...
-  int has_surrogates; // will be set if the string contains surrogate pairs
-
-  // Have we loaded the GetGlyphIndicesW function yet?
-  if (have_loaded_GetGlyphIndices == 0) {
-    GetGlyphIndices_init();
-  }
-  // Do we have a usable GetGlyphIndices function?
-  if(!fl_GetGlyphIndices) goto exit_error; // No GetGlyphIndices function, use fallback mechanism instead
-
-  // The following code makes a best effort attempt to obtain a valid fl_gc.
-  // See description in fl_width() above for an explanation.
-  if (!gc) { // We have no valid gc, try and obtain one
-    // Use our first fltk window, or fallback to using the screen via GetDC(NULL)
-    hWnd = Fl::first_window() ? fl_xid(Fl::first_window()) : NULL;
-    gc = GetDC(hWnd);
-  }
-  if (!gc) goto exit_error; // no valid gc, attempt to use fallback measure
-
-  // now convert the string to WCHAR and measure it
-  len = fl_utf8toUtf16(c, n, ext_buff, wc_len);
-  if(len >= wc_len) {
-    if(ext_buff) {delete [] ext_buff;}
-    if(w_buff) {delete [] w_buff;}
-    wc_len = len + 64;
-    ext_buff = new unsigned short[wc_len];
-    w_buff = new WORD[wc_len];
-    len = fl_utf8toUtf16(c, n, ext_buff, wc_len);
-  }
-  SelectObject(gc, fl_fontsize->fid);
-
-  // Are there surrogate-pairs in this string? If so GetGlyphIndicesW will fail
-  // since it can only handle the BMP range.
-  // We ideally want to use GetGlyphIndicesW, as it is the Right Thing, but it
-  // only works for the BMP, so we leverage GetCharacterPlacementW instead, which
-  // is not ideal, but works adequately well, and does handle surrogate pairs.
-  has_surrogates = 0;
-  for(unsigned ll = 0; ll < len; ll++) {
-    if((ext_buff[ll] >= 0xD800) && (ext_buff[ll] < 0xE000)) {
-      has_surrogates = -1;
-      break;
-    }
-  }
-  if (has_surrogates) {
-    // GetGlyphIndices will not work - use GetCharacterPlacementW() instead
-    GCP_RESULTSW gcp_res;
-    memset(w_buff, 0, (sizeof(WORD) * wc_len));
-    memset(&gcp_res, 0, sizeof(GCP_RESULTSW));
-    gcp_res.lpGlyphs = (LPWSTR)w_buff;
-    gcp_res.nGlyphs = wc_len;
-    gcp_res.lStructSize = sizeof(gcp_res);
-
-    DWORD dr = GetCharacterPlacementW(gc, (WCHAR*)ext_buff, len, 0, &gcp_res, GCP_GLYPHSHAPE);
-    if(dr) {
-      len = gcp_res.nGlyphs;
-    } else goto exit_error;
-  } else {
-    if (fl_GetGlyphIndices(gc, (WCHAR*)ext_buff, len, w_buff, GGI_MARK_NONEXISTING_GLYPHS) == GDI_ERROR) {
-      // some error occured here - just return fl_measure values
-      goto exit_error;
-    }
-  }
-
-  // now we have the glyph array we measure each glyph in turn...
-  for(idx = 0; idx < len; idx++){
-    if (GetGlyphOutlineW (gc, w_buff[idx], GGO_METRICS | GGO_GLYPH_INDEX,
-                          &metrics, 0, NULL, &matrix) == GDI_ERROR) {
-      goto exit_error;
-    }
-    maxw += metrics.gmCellIncX;
-    if(idx == 0) minx = metrics.gmptGlyphOrigin.x;
-    dh = metrics.gmBlackBoxY - metrics.gmptGlyphOrigin.y;
-    if(dh > maxh) maxh = dh;
-    if(miny < metrics.gmptGlyphOrigin.y) miny = metrics.gmptGlyphOrigin.y;
-  }
-  // for the last cell, we only want the bounding X-extent, not the glyphs increment step
-  maxw = maxw - metrics.gmCellIncX + metrics.gmBlackBoxX + metrics.gmptGlyphOrigin.x;
-  w = maxw - minx;
-  h = maxh + miny;
-  dx = minx;
-  dy = -miny;
-  EXTENTS_UPDATE(dx, dy, w, h);
-  return; // normal exit
-
-exit_error:
-  // some error here - just return fl_measure values
-  w = (int)width(c, n);
-  h = height();
-  dx = 0;
-  dy = descent() - h;
-  EXTENTS_UPDATE(dx, dy, w, h);
-  return;
-} // fl_text_extents
-
-void Fl_GDI_Graphics_Driver::draw(const char* str, int n, int x, int y) {
-  COLORREF oldColor = SetTextColor(fl_gc, fl_RGB());
-  SelectObject(fl_gc, font_descriptor()->fid);
-  int wn = fl_utf8toUtf16(str, n, wstr, wstr_len);
-  if(wn >= wstr_len) {
-    wstr = (unsigned short*) realloc(wstr, sizeof(unsigned short) * (wn + 1));
-    wstr_len = wn + 1;
-    wn = fl_utf8toUtf16(str, n, wstr, wstr_len);
-  }
-  TextOutW(fl_gc, x, y, (WCHAR*)wstr, wn);
-  SetTextColor(fl_gc, oldColor); // restore initial state
-}
-
-void Fl_GDI_Graphics_Driver::draw(int angle, const char* str, int n, int x, int y) {
-  fl_font(this, Fl_Graphics_Driver::font(), size(), angle);
-  int wn = 0; // count of UTF16 cells to render full string
-  COLORREF oldColor = SetTextColor(fl_gc, fl_RGB());
-  SelectObject(fl_gc, font_descriptor()->fid);
-  wn = fl_utf8toUtf16(str, n, wstr, wstr_len);
-  if(wn >= wstr_len) { // Array too small
-    wstr = (unsigned short*) realloc(wstr, sizeof(unsigned short) * (wn + 1));
-    wstr_len = wn + 1;
-    wn = fl_utf8toUtf16(str, n, wstr, wstr_len); // respin the translation
-  }
-  TextOutW(fl_gc, x, y, (WCHAR*)wstr, wn);
-  SetTextColor(fl_gc, oldColor);
-  fl_font(this, Fl_Graphics_Driver::font(), size(), 0);
-}
-
-void Fl_GDI_Graphics_Driver::rtl_draw(const char* c, int n, int x, int y) {
-  int wn;
-  wn = fl_utf8toUtf16(c, n, wstr, wstr_len);
-  if(wn >= wstr_len) {
-    wstr = (unsigned short*) realloc(wstr, sizeof(unsigned short) * (wn + 1));
-    wstr_len = wn + 1;
-    wn = fl_utf8toUtf16(c, n, wstr, wstr_len);
-  }
-
-  COLORREF oldColor = SetTextColor(fl_gc, fl_RGB());
-  SelectObject(fl_gc, font_descriptor()->fid);
-#ifdef RTL_CHAR_BY_CHAR
-  int i = 0;
-  int lx = 0;
-  while (i < wn) { // output char by char is very bad for Arabic but coherent with fl_width()
-    lx = (int) width(wstr[i]);
-    x -= lx;
-    TextOutW(fl_gc, x, y, (WCHAR*)wstr + i, 1);
-    if (fl_nonspacing(wstr[i])) {
-      x += lx;
-    }
-    i++;
-  }
-#else
-  UINT old_align = SetTextAlign(fl_gc, TA_RIGHT | TA_RTLREADING);
-  TextOutW(fl_gc, x, y - height() + descent(), (WCHAR*)wstr, wn);
-  SetTextAlign(fl_gc, old_align);
-#endif
-  SetTextColor(fl_gc, oldColor);
-}
-#endif
-//
-// End of "$Id: fl_font_win32.cxx 8644 2011-05-10 15:37:05Z ianmacarthur $".
-//
diff --git a/common/fltk/src/fl_font_x.cxx b/common/fltk/src/fl_font_x.cxx
deleted file mode 100644
index 1f1077c..0000000
--- a/common/fltk/src/fl_font_x.cxx
+++ /dev/null
@@ -1,344 +0,0 @@
-//
-// "$Id: fl_font_x.cxx 8446 2011-02-19 18:03:43Z manolo $"
-//
-// Standard X11 font selection code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#ifndef FL_DOXYGEN
-
-Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name) {
-  font = XCreateUtf8FontStruct(fl_display, name);
-  if (!font) {
-    Fl::warning("bad font: %s", name);
-    font = XCreateUtf8FontStruct(fl_display, "fixed");
-  }
-#  if HAVE_GL
-  listbase = 0;
-  for (int u = 0; u < 64; u++) glok[u] = 0;
-#  endif
-}
-
-Fl_XFont_On_Demand fl_xfont;
-
-Fl_Font_Descriptor::~Fl_Font_Descriptor() {
-#  if HAVE_GL
-// Delete list created by gl_draw().  This is not done by this code
-// as it will link in GL unnecessarily.  There should be some kind
-// of "free" routine pointer, or a subclass?
-// if (listbase) {
-//  int base = font->min_char_or_byte2;
-//  int size = font->max_char_or_byte2-base+1;
-//  int base = 0; int size = 256;
-//  glDeleteLists(listbase+base,size);
-// }
-#  endif
-  if (this == fl_graphics_driver->font_descriptor()) {
-    fl_graphics_driver->font_descriptor(NULL);
-    fl_xfont = 0;
-  }
-  XFreeUtf8FontStruct(fl_display, font);
-}
-
-////////////////////////////////////////////////////////////////
-
-// WARNING: if you add to this table, you must redefine FL_FREE_FONT
-// in Enumerations.H & recompile!!
-static Fl_Fontdesc built_in_table[] = {
-{"-*-helvetica-medium-r-normal--*"},
-{"-*-helvetica-bold-r-normal--*"},
-{"-*-helvetica-medium-o-normal--*"},
-{"-*-helvetica-bold-o-normal--*"},
-{"-*-courier-medium-r-normal--*"},
-{"-*-courier-bold-r-normal--*"},
-{"-*-courier-medium-o-normal--*"},
-{"-*-courier-bold-o-normal--*"},
-{"-*-times-medium-r-normal--*"},
-{"-*-times-bold-r-normal--*"},
-{"-*-times-medium-i-normal--*"},
-{"-*-times-bold-i-normal--*"},
-{"-*-symbol-*"},
-{"-*-lucidatypewriter-medium-r-normal-sans-*"},
-{"-*-lucidatypewriter-bold-r-normal-sans-*"},
-{"-*-*zapf dingbats-*"}
-};
-
-Fl_Fontdesc* fl_fonts = built_in_table;
-
-#define MAXSIZE 32767
-
-// return dash number N, or pointer to ending null if none:
-const char* fl_font_word(const char* p, int n) {
-  while (*p) {if (*p=='-') {if (!--n) break;} p++;}
-  return p;
-}
-
-// return a pointer to a number we think is "point size":
-char* fl_find_fontsize(char* name) {
-  char* c = name;
-  // for standard x font names, try after 7th dash:
-  if (*c == '-') {
-    c = (char*)fl_font_word(c,7);
-    if (*c++ && isdigit(*c)) return c;
-    return 0; // malformed x font name?
-  }
-  char* r = 0;
-  // find last set of digits:
-  for (c++;* c; c++)
-    if (isdigit(*c) && !isdigit(*(c-1))) r = c;
-  return r;
-}
-
-//const char* fl_encoding = "iso8859-1";
-const char* fl_encoding = "iso10646-1";
-
-// return true if this matches fl_encoding:
-int fl_correct_encoding(const char* name) {
-  if (*name != '-') return 0;
-  const char* c = fl_font_word(name,13);
-  return (*c++ && !strcmp(c,fl_encoding));
-}
-
-static const char *find_best_font(const char *fname, int size) {
-  int cnt;
-  static char **list = NULL;
-// locate or create an Fl_Font_Descriptor for a given Fl_Fontdesc and size:
-  if (list) XFreeFontNames(list);
-  list = XListFonts(fl_display, fname, 100, &cnt);
-  if (!list) return "fixed";
-
-  // search for largest <= font size:
-  char* name = list[0]; int ptsize = 0;     // best one found so far
-  int matchedlength = 32767;
-  char namebuffer[1024];        // holds scalable font name
-  int found_encoding = 0;
-  int m = cnt; if (m<0) m = -m;
-  for (int n=0; n < m; n++) {
-    char* thisname = list[n];
-    if (fl_correct_encoding(thisname)) {
-      if (!found_encoding) ptsize = 0; // force it to choose this
-      found_encoding = 1;
-    } else {
-      if (found_encoding) continue;
-    }
-    char* c = (char*)fl_find_fontsize(thisname);
-    int thissize = c ? atoi(c) : MAXSIZE;
-    int thislength = strlen(thisname);
-    if (thissize == size && thislength < matchedlength) {
-      // exact match, use it:
-      name = thisname;
-      ptsize = size;
-      matchedlength = thislength;
-    } else if (!thissize && ptsize!=size) {
-      // whoa!  A scalable font!  Use unless exact match found:
-      int l = c-thisname;
-      memcpy(namebuffer,thisname,l);
-      l += sprintf(namebuffer+l,"%d",size);
-      while (*c == '0') c++;
-      strcpy(namebuffer+l,c);
-      name = namebuffer;
-      ptsize = size;
-    } else if (!ptsize ||	// no fonts yet
-	       (thissize < ptsize && ptsize > size) || // current font too big
-	       (thissize > ptsize && thissize <= size) // current too small
-      ) {
-      name = thisname;
-      ptsize = thissize;
-      matchedlength = thislength;
-    }
-  }
-
-//  if (ptsize != size) { // see if we already found this unscalable font:
-//    for (f = s->first; f; f = f->next) {
-//      if (f->minsize <= ptsize && f->maxsize >= ptsize) {
-//	if (f->minsize > size) f->minsize = size;
-//	if (f->maxsize < size) f->maxsize = size;
-//	return f;
-//      }
-//    }
-//  }
-//
-//  // okay, we definately have some name, make the font:
-//  f = new Fl_Font_Descriptor(name);
-//  if (ptsize < size) {f->minsize = ptsize; f->maxsize = size;}
-//  else {f->minsize = size; f->maxsize = ptsize;}
-//  f->next = s->first;
-//  s->first = f;
-//  return f;
-
-  return name;
-}
-
-static char *put_font_size(const char *n, int size)
-{
-        int i = 0;
-        char *buf;
-        const char *ptr;
-        const char *f;
-        char *name;
-        int nbf = 1;
-        name = strdup(n);
-        while (name[i]) {
-                if (name[i] == ',') {nbf++; name[i] = '\0';}
-                i++;
-        }
-
-        buf = (char*) malloc(nbf * 256);
-        buf[0] = '\0';
-        ptr = name;
-        i = 0;
-        while (ptr && nbf > 0) {
-                f = find_best_font(ptr, size);
-                while (*f) {
-                        buf[i] = *f;
-                        f++; i++;
-                }
-                nbf--;
-                while (*ptr) ptr++;
-                if (nbf) {
-                        ptr++;
-                        buf[i] = ',';
-                        i++;
-                }
-                while(isspace(*ptr)) ptr++;
-        }
-        buf[i] = '\0';
-        free(name);
-        return buf;
-}
-
-
-char *fl_get_font_xfld(int fnum, int size) {
-  Fl_Fontdesc* s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // use font 0 if still undefined
-  fl_open_display();
-  return put_font_size(s->name, size);
-}
-
-// locate or create an Fl_Font_Descriptor for a given Fl_Fontdesc and size:
-static Fl_Font_Descriptor* find(int fnum, int size) {
-  char *name;
-  Fl_Fontdesc* s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // use font 0 if still undefined
-  Fl_Font_Descriptor* f;
-  for (f = s->first; f; f = f->next)
-    if (f->size == size) return f;
-  fl_open_display();
-
-  name = put_font_size(s->name, size);
-  f = new Fl_Font_Descriptor(name);
-  f->size = size;
-  f->next = s->first;
-  s->first = f;
-  free(name);
-  return f;
-}
-
-
-////////////////////////////////////////////////////////////////
-// Public interface:
-
-void *fl_xftfont = 0;
-static GC font_gc;
-
-XFontStruct* Fl_XFont_On_Demand::value() {
-  return ptr;
-}
-
-void Fl_Xlib_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
-  if (fnum==-1) {
-    Fl_Graphics_Driver::font(0, 0);
-    return;
-  }
-  if (fnum == Fl_Graphics_Driver::font() && size == Fl_Graphics_Driver::size()) return;
-  Fl_Graphics_Driver::font(fnum, size);
-  Fl_Font_Descriptor* f = find(fnum, size);
-  if (f != this->font_descriptor()) {
-    this->font_descriptor(f);
-    fl_xfont = f->font->fonts[0];
-    font_gc = 0;
-  }
-}
-
-int Fl_Xlib_Graphics_Driver::height() {
-  if (font_descriptor()) return font_descriptor()->font->ascent + font_descriptor()->font->descent;
-  else return -1;
-}
-
-int Fl_Xlib_Graphics_Driver::descent() {
-  if (font_descriptor()) return font_descriptor()->font->descent;
-  else return -1;
-}
-
-double Fl_Xlib_Graphics_Driver::width(const char* c, int n) {
-  if (font_descriptor()) return (double) XUtf8TextWidth(font_descriptor()->font, c, n);
-  else return -1;
-}
-
-double Fl_Xlib_Graphics_Driver::width(unsigned int c) {
-  if (font_descriptor()) return (double) XUtf8UcsWidth(font_descriptor()->font, c);
-  else return -1;
-}
-
-void Fl_Xlib_Graphics_Driver::text_extents(const char *c, int n, int &dx, int &dy, int &W, int &H) {
-  if (font_gc != fl_gc) {
-    if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-    font_gc = fl_gc;
-    XSetFont(fl_display, fl_gc, font_descriptor()->font->fid);
-  }
-  int xx, yy, ww, hh;
-  xx = yy = ww = hh = 0;
-  if (fl_gc) XUtf8_measure_extents(fl_display, fl_window, font_descriptor()->font, fl_gc, &xx, &yy, &ww, &hh, c, n);
-
-  W = ww; H = hh; dx = xx; dy = yy;
-// This is the safe but mostly wrong thing we used to do...
-//  W = 0; H = 0;
-//  fl_measure(c, W, H, 0);
-//  dx = 0;
-//  dy = fl_descent() - H;
-}
-
-void Fl_Xlib_Graphics_Driver::draw(const char* c, int n, int x, int y) {
-  if (font_gc != fl_gc) {
-    if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE);
-    font_gc = fl_gc;
-    XSetFont(fl_display, fl_gc, font_descriptor()->font->fid);
-  }
-  if (fl_gc) XUtf8DrawString(fl_display, fl_window, font_descriptor()->font, fl_gc, x, y, c, n);
-}
-
-void Fl_Xlib_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) {
-  fprintf(stderr,"ROTATING TEXT NOT IMPLEMENTED\n");
-  this->draw(str, n, (int)x, (int)y);
-}
-
-void Fl_Xlib_Graphics_Driver::rtl_draw(const char* c, int n, int x, int y) {
-  if (font_gc != fl_gc) {
-    if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE);
-    font_gc = fl_gc;
-  }
-  if (fl_gc) XUtf8DrawRtlString(fl_display, fl_window, font_descriptor()->font, fl_gc, x, y, c, n);
-}
-#endif // FL_DOXYGEN
-//
-// End of "$Id: fl_font_x.cxx 8446 2011-02-19 18:03:43Z manolo $".
-//
diff --git a/common/fltk/src/fl_font_xft.cxx b/common/fltk/src/fl_font_xft.cxx
deleted file mode 100644
index 9e20fa0..0000000
--- a/common/fltk/src/fl_font_xft.cxx
+++ /dev/null
@@ -1,706 +0,0 @@
-//
-// "$Id: fl_font_xft.cxx 8442 2011-02-18 13:39:48Z manolo $"
-//
-// Xft font code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2001-2011 Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// Draw fonts using Keith Packard's Xft library to provide anti-
-// aliased text. Yow!
-//
-// Many thanks to Carl for making the original version of this.
-//
-// This font code only requires libXft to work.  Contrary to popular
-// belief there is no need to have FreeType, or the Xrender extension
-// available to use this code.  You will just get normal Xlib fonts
-// (Xft calls them "core" fonts) The Xft algorithms for choosing
-// these is about as good as the FLTK ones (I hope to fix it so it is
-// exactly as good...), plus it can cache its results and share them
-// between programs, so using this should be a win in all cases. Also
-// it should be obvious by comparing this file and fl_font_x.cxx that
-// it is a lot easier to program with Xft than with Xlib.
-//
-// Also, Xft supports UTF-8 text rendering directly, which will allow
-// us to support UTF-8 on all platforms more easily.
-//
-// To actually get antialiasing you need the following:
-//
-//     1. You have XFree86 4
-//     2. You have the XRender extension
-//     3. Your X device driver supports the render extension
-//     4. You have libXft
-//     5. Your libXft has FreeType2 support compiled in
-//     6. You have the FreeType2 library
-//
-// Distributions that have XFree86 4.0.3 or later should have all of this...
-//
-// Unlike some other Xft packages, I tried to keep this simple and not
-// to work around the current problems in Xft by making the "patterns"
-// complicated. I believe doing this defeats our ability to improve Xft
-// itself. You should edit the ~/.xftconfig file to "fix" things, there
-// are several web pages of information on how to do this.
-//
-#ifndef FL_DOXYGEN
-
-#include <X11/Xft/Xft.h>
-
-#include <math.h>
-
-// The predefined fonts that FLTK has:
-static Fl_Fontdesc built_in_table[] = {
-#if 1
-{" sans"},
-{"Bsans"},
-{"Isans"},
-{"Psans"},
-{" mono"},
-{"Bmono"},
-{"Imono"},
-{"Pmono"},
-{" serif"},
-{"Bserif"},
-{"Iserif"},
-{"Pserif"},
-{" symbol"},
-{" screen"},
-{"Bscreen"},
-{" zapf dingbats"},
-#else
-{" helvetica"},
-{"Bhelvetica"},
-{"Ihelvetica"},
-{"Phelvetica"},
-{" courier"},
-{"Bcourier"},
-{"Icourier"},
-{"Pcourier"},
-{" times"},
-{"Btimes"},
-{"Itimes"},
-{"Ptimes"},
-{" symbol"},
-{" lucidatypewriter"},
-{"Blucidatypewriter"},
-{" zapf dingbats"},
-#endif
-};
-
-Fl_Fontdesc* fl_fonts = built_in_table;
-
-Fl_XFont_On_Demand fl_xfont;
-void *fl_xftfont = 0;
-//const char* fl_encoding_ = "iso8859-1";
-const char* fl_encoding_ = "iso10646-1";
-
-static void fl_xft_font(Fl_Xlib_Graphics_Driver *driver, Fl_Font fnum, Fl_Fontsize size, int angle) {
-  if (fnum==-1) { // special case to stop font caching
-    driver->Fl_Graphics_Driver::font(0, 0);
-    return;
-  }
-  Fl_Font_Descriptor* f = driver->font_descriptor();
-  if (fnum == driver->Fl_Graphics_Driver::font() && size == driver->size() && f && f->angle == angle)
-    return;
-  driver->Fl_Graphics_Driver::font(fnum, size);
-  Fl_Fontdesc *font = fl_fonts + fnum;
-  // search the fontsizes we have generated already
-  for (f = font->first; f; f = f->next) {
-    if (f->size == size && f->angle == angle)// && !strcasecmp(f->encoding, fl_encoding_))
-      break;
-  }
-  if (!f) {
-    f = new Fl_Font_Descriptor(font->name, size, angle);
-    f->next = font->first;
-    font->first = f;
-  }
-  driver->font_descriptor(f);
-#if XFT_MAJOR < 2
-  fl_xfont    = f->font->u.core.font;
-#else
-  fl_xfont    = NULL; // invalidate
-#endif // XFT_MAJOR < 2
-  fl_xftfont = (void*)f->font;
-}
-
-void Fl_Xlib_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
-  fl_xft_font(this,fnum,size,0);
-}
-
-static XftFont* fontopen(const char* name, Fl_Fontsize size, bool core, int angle) {
-  // Check: does it look like we have been passed an old-school XLFD fontname?
-  bool is_xlfd = false;
-  int hyphen_count = 0;
-  int comma_count = 0;
-  unsigned len = strlen(name);
-  if (len > 512) len = 512; // ensure we are not passed an unbounded font name
-  for(unsigned idx = 0; idx < len; idx++) {
-    if(name[idx] == '-') hyphen_count++; // check for XLFD hyphens
-    if(name[idx] == ',') comma_count++;  // are there multiple names?
-  }
-  if(hyphen_count >= 14) is_xlfd = true; // Not a robust check, but good enough?
-
-  fl_open_display();
-
-  if(!is_xlfd) { // Not an XLFD - open as a XFT style name
-    XftFont *the_font; // the font we will return;
-    XftPattern *fnt_pat = XftPatternCreate(); // the pattern we will use for matching
-    int slant = XFT_SLANT_ROMAN;
-    int weight = XFT_WEIGHT_MEDIUM;
-
-    /* This "converts" FLTK-style font names back into "regular" names, extracting
-     * the BOLD and ITALIC codes as it does so - all FLTK font names are prefixed
-     * by 'I' (italic) 'B' (bold) 'P' (bold italic) or ' ' (regular) modifiers.
-     * This gives a fairly limited font selection ability, but is retained for
-     * compatibility reasons. If you really need a more complex choice, you are best
-     * calling Fl::set_fonts(*) then selecting the font by font-index rather than by
-     * name anyway. Probably.
-     * If you want to load a font who's name does actually begin with I, B or P, you
-     * MUST use a leading space OR simply use lowercase for the name...
-     */
-    /* This may be efficient, but it is non-obvious. */
-    switch (*name++) {
-    case 'I': slant = XFT_SLANT_ITALIC; break; // italic
-    case 'P': slant = XFT_SLANT_ITALIC;        // bold-italic (falls-through)
-    case 'B': weight = XFT_WEIGHT_BOLD; break; // bold
-    case ' ': break;                           // regular
-    default: name--;                           // no prefix, restore name
-    }
-
-    if(comma_count) { // multiple comma-separated names were passed
-      char *local_name = strdup(name); // duplicate the full name so we can edit the copy
-      char *curr = local_name; // points to first name in string
-      char *nxt; // next name in string
-      do {
-        nxt = strchr(curr, ','); // find comma separator
-        if (nxt) {
-          *nxt = 0; // terminate first name
-          nxt++; // first char of next name
-        }
-
-	// Add the current name to the match pattern
-	XftPatternAddString(fnt_pat, XFT_FAMILY, curr);
-
-        if(nxt) curr = nxt; // move onto next name (if it exists)
-	// Now do a cut-down version of the FLTK name conversion.
-	// NOTE: we only use the slant and weight of the first name,
-	// subsequent names we ignore this for... But we still need to do the check.
-        switch (*curr++) {
-        case 'I': break; // italic
-        case 'P':        // bold-italic (falls-through)
-        case 'B': break; // bold
-        case ' ': break; // regular
-        default: curr--; // no prefix, restore name
-        }
-
-        comma_count--; // decrement name sections count
-      } while (comma_count >= 0);
-      free(local_name); // release our local copy of font names
-    }
-    else { // single name was passed - add it directly
-      XftPatternAddString(fnt_pat, XFT_FAMILY, name);
-    }
-
-    // Construct a match pattern for the font we want...
-    XftPatternAddInteger(fnt_pat, XFT_WEIGHT, weight);
-    XftPatternAddInteger(fnt_pat, XFT_SLANT, slant);
-    XftPatternAddDouble (fnt_pat, XFT_PIXEL_SIZE, (double)size);
-    XftPatternAddString (fnt_pat, XFT_ENCODING, fl_encoding_);
-
-    // rotate font if angle!=0
-    if (angle !=0) {
-      XftMatrix m;
-      XftMatrixInit(&m);
-      XftMatrixRotate(&m,cos(M_PI*angle/180.),sin(M_PI*angle/180.));
-      XftPatternAddMatrix (fnt_pat, XFT_MATRIX,&m);
-    }
-
-    if (core) {
-      XftPatternAddBool(fnt_pat, XFT_CORE, FcTrue);
-      XftPatternAddBool(fnt_pat, XFT_RENDER, FcFalse);
-    }
-
-    XftPattern *match_pat;  // the best available match on the system
-    XftResult match_result; // the result of our matching attempt
-
-    // query the system to find a match for this font
-    match_pat = XftFontMatch(fl_display, fl_screen, fnt_pat, &match_result);
-
-#if 0 // the XftResult never seems to get set to anything... abandon this code?
-    switch(match_result) { // how good a match is this font for our request?
-      case XftResultMatch:
-	puts("Object exists with the specified ID");
-	break;
-
-      case XftResultTypeMismatch:
-	puts("Object exists, but the type does not match");
-	break;
-
-      case XftResultNoId:
-	puts("Object exists, but has fewer values than specified");
-	break;
-
-      case FcResultOutOfMemory:
-	puts("FcResult: Malloc failed");
-	break;
-
-      case XftResultNoMatch:
-	puts("Object does not exist at all");
-	break;
-
-      default:
-	printf("Invalid XftResult status %d \n", match_result);
-	break;
-    }
-#endif
-
-#if 0 // diagnostic to print the "full name" of the font we matched. This works.
-    FcChar8 *picked_name =  FcNameUnparse(match_pat);
-    printf("Match: %s\n", picked_name);
-    free(picked_name);
-#endif
-
-    if (!match_pat) {
-      // last chance, just open any font in the right size
-      the_font = XftFontOpen (fl_display, fl_screen,
-                        XFT_FAMILY, XftTypeString, "sans",
-                        XFT_SIZE, XftTypeDouble, (double)size,
-                        NULL);
-      XftPatternDestroy(fnt_pat);
-      if (!the_font) {
-        Fl::error("Unable to find fonts. Check your FontConfig configuration.\n");
-        exit(1);
-      }
-      return the_font;
-    }
-
-    // open the matched font
-    the_font = XftFontOpenPattern(fl_display, match_pat);
-
-#if 0 // diagnostic to print the "full name" of the font we actually opened. This works.
-    FcChar8 *picked_name2 =  FcNameUnparse(the_font->pattern);
-    printf("Open : %s\n", picked_name2);
-    free(picked_name2);
-#endif
-
-    XftPatternDestroy(fnt_pat);
-//  XftPatternDestroy(match_pat); // FontConfig will destroy this resource for us. We must not!
-
-    return the_font;
-  }
-  else { // We were passed a font name in XLFD format
-    /* OksiD's X font code could handle being passed a comma separated list
-     * of XLFD's. It then attempted to find which font was "best" from this list.
-     * But XftFontOpenXlfd can not do this, so if a list is passed, we just
-     * terminate it at the first comma.
-     * A "better" solution might be to use XftXlfdParse() on each of the passed
-     * XLFD's to construct a "super-pattern" that incorporates attributes from all
-     * XLFD's and use that to perform a XftFontMatch(). Maybe...
-     */
-    char *local_name = strdup(name);
-    if(comma_count) { // This means we were passed multiple XLFD's
-      char *pc = strchr(local_name, ',');
-      *pc = 0; // terminate the XLFD at the first comma
-    }
-    XftFont *the_font = XftFontOpenXlfd(fl_display, fl_screen, local_name);
-    free(local_name);
-#if 0 // diagnostic to print the "full name" of the font we actually opened. This works.
-puts("Font Opened"); fflush(stdout);
-    FcChar8 *picked_name2 =  FcNameUnparse(the_font->pattern);
-    printf("Open : %s\n", picked_name2); fflush(stdout);
-    free(picked_name2);
-#endif
-   return the_font;
-  }
-} // end of fontopen
-
-Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize fsize, int fangle) {
-//  encoding = fl_encoding_;
-  size = fsize;
-  angle = fangle;
-#if HAVE_GL
-  listbase = 0;
-#endif // HAVE_GL
-  font = fontopen(name, fsize, false, angle);
-}
-
-Fl_Font_Descriptor::~Fl_Font_Descriptor() {
-  if (this == fl_graphics_driver->font_descriptor()) fl_graphics_driver->font_descriptor(NULL);
-//  XftFontClose(fl_display, font);
-}
-
-/* decodes the input UTF-8 string into a series of wchar_t characters.
- n is set upon return to the number of characters.
- Don't deallocate the returned memory.
- */
-static const wchar_t *utf8reformat(const char *str, int& n)
-{
-  static const wchar_t empty[] = {0};
-  static wchar_t *buffer;
-  static int lbuf = 0;
-  int newn;
-  if (n == 0) return empty;
-  newn = fl_utf8towc(str, n, (wchar_t*)buffer, lbuf);
-  if (newn >= lbuf) {
-    lbuf = newn + 100;
-    if (buffer) free(buffer);
-    buffer = (wchar_t*)malloc(lbuf * sizeof(wchar_t));
-    n = fl_utf8towc(str, n, (wchar_t*)buffer, lbuf);
-  } else {
-    n = newn;
-  }
-  return buffer;
-}
-
-static void utf8extents(Fl_Font_Descriptor *desc, const char *str, int n, XGlyphInfo *extents)
-{
-  memset(extents, 0, sizeof(XGlyphInfo));
-  const wchar_t *buffer = utf8reformat(str, n);
-#ifdef __CYGWIN__
-    XftTextExtents16(fl_display, desc->font, (XftChar16 *)buffer, n, extents);
-#else
-    XftTextExtents32(fl_display, desc->font, (XftChar32 *)buffer, n, extents);
-#endif
-}
-
-int Fl_Xlib_Graphics_Driver::height() {
-  if (font_descriptor()) return font_descriptor()->font->ascent + font_descriptor()->font->descent;
-  else return -1;
-}
-
-int Fl_Xlib_Graphics_Driver::descent() {
-  if (font_descriptor()) return font_descriptor()->font->descent;
-  else return -1;
-}
-
-double Fl_Xlib_Graphics_Driver::width(const char* str, int n) {
-  if (!font_descriptor()) return -1.0;
-  XGlyphInfo i;
-  utf8extents(font_descriptor(), str, n, &i);
-  return i.xOff;
-}
-
-/*double fl_width(uchar c) {
-  return fl_graphics_driver->width((const char *)(&c), 1);
-}*/
-
-static double fl_xft_width(Fl_Font_Descriptor *desc, FcChar32 *str, int n) {
-  if (!desc) return -1.0;
-  XGlyphInfo i;
-  XftTextExtents32(fl_display, desc->font, str, n, &i);
-  return i.xOff;
-}
-
-double Fl_Xlib_Graphics_Driver::width(unsigned int c) {
-  return fl_xft_width(font_descriptor(), (FcChar32 *)(&c), 1);
-}
-
-void Fl_Xlib_Graphics_Driver::text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h) {
-  if (!font_descriptor()) {
-    w = h = 0;
-    dx = dy = 0;
-    return;
-  }
-  XGlyphInfo gi;
-  utf8extents(font_descriptor(), c, n, &gi);
-
-  w = gi.width;
-  h = gi.height;
-  dx = -gi.x;
-  dy = -gi.y;
-} // fl_text_extents
-
-
-/* This code is used (mainly by opengl) to get a bitmapped font. The
- * original XFT-1 code used XFT's "core" fonts methods to load an XFT
- * font that was actually a X-bitmap font, that could then be readily
- * used with GL.  But XFT-2 does not provide that ability, and there
- * is no easy method to use an XFT font directly with GL. So...
-*/
-
-#  if XFT_MAJOR > 1
-// This function attempts, on XFT2 systems, to find a suitable "core" Xfont
-// for GL or other bitmap font needs (we dont have an XglUseXftFont(...) function.)
-// There's probably a better way to do this. I can't believe it is this hard...
-// Anyway... This code attempts to make an XLFD out of the fltk-style font
-// name it is passed, then tries to load that font. Surprisingly, this quite
-// often works - boxes that have XFT generally also have a fontserver that
-// can serve TTF and other fonts to X, and so the font name that fltk makes
-// from the XFT name often also "exists" as an "core" X font...
-// If this code fails to load the requested font, it falls back through a
-// series of tried 'n tested alternatives, ultimately resorting to what the
-// original fltk code did.
-// NOTE: On my test boxes (FC6, FC7, FC8, ubuntu8.04, 9.04, 9.10) this works 
-//       well for the fltk "built-in" font names.
-static XFontStruct* load_xfont_for_xft2(Fl_Graphics_Driver *driver) {
-  XFontStruct* xgl_font = 0;
-  int size = driver->size();
-  int fnum = driver->font();
-  const char *wt_med = "medium";
-  const char *wt_bold = "bold";
-  const char *weight = wt_med; // no specifc weight requested - accept any
-  char slant = 'r';   // regular non-italic by default
-  char xlfd[128];     // we will put our synthetic XLFD in here
-  char *pc = strdup(fl_fonts[fnum].name); // what font were we asked for?
-  const char *name = pc;    // keep a handle to the original name for freeing later
-  // Parse the "fltk-name" of the font
-  switch (*name++) {
-  case 'I': slant = 'i'; break;       // italic
-  case 'P': slant = 'i';              // bold-italic (falls-through)
-  case 'B': weight = wt_bold; break;  // bold
-  case ' ': break;                    // regular
-  default: name--;                    // no prefix, restore name
-  }
-
-  // first, we do a query with no prefered size, to see if the font exists at all
-  snprintf(xlfd, 128, "-*-%s-%s-%c-*--*-*-*-*-*-*-*-*", name, weight, slant); // make up xlfd style name
-  xgl_font = XLoadQueryFont(fl_display, xlfd);
-  if(xgl_font) { // the face exists, but can we get it in a suitable size?
-    XFreeFont(fl_display, xgl_font); // release the non-sized version
-    snprintf(xlfd, 128, "-*-%s-%s-%c-*--*-%d-*-*-*-*-*-*", name, weight, slant, (size*10));
-    xgl_font = XLoadQueryFont(fl_display, xlfd); // attempt to load the font at the right size
-  }
-//puts(xlfd);
-
-  // try alternative names
-  if (!xgl_font) {
-    if (!strcmp(name, "sans")) {
-      name = "helvetica";
-    } else if (!strcmp(name, "mono")) {
-      name = "courier";
-    } else if (!strcmp(name, "serif")) {
-      name = "times";
-    } else if (!strcmp(name, "screen")) {
-      name = "lucidatypewriter";
-    } else if (!strcmp(name, "dingbats")) {
-      name = "zapf dingbats";
-    }
-    snprintf(xlfd, 128, "-*-*%s*-%s-%c-*--*-%d-*-*-*-*-*-*", name, weight, slant, (size*10));
-    xgl_font = XLoadQueryFont(fl_display, xlfd);
-  }  
-  free(pc); // release our copy of the font name
-  
-  // if we have nothing loaded, try a generic proportional font
-  if(!xgl_font) {
-    snprintf(xlfd, 128, "-*-helvetica-*-%c-*--*-%d-*-*-*-*-*-*", slant, (size*10));
-    xgl_font = XLoadQueryFont(fl_display, xlfd);
-  }
-  // If that still didn't work, try this instead
-  if(!xgl_font) {
-    snprintf(xlfd, 128, "-*-courier-medium-%c-*--*-%d-*-*-*-*-*-*", slant, (size*10));
-    xgl_font = XLoadQueryFont(fl_display, xlfd);
-  }
-//printf("glf: %d\n%s\n%s\n", size, xlfd, fl_fonts[fl_font_].name);
-//if(xgl_font) puts("ok");
-
-  // Last chance fallback - this usually loads something...
-  if (!xgl_font) xgl_font = XLoadQueryFont(fl_display, "fixed");
-
-  return xgl_font;
-} // end of load_xfont_for_xft2
-#  endif
-
-static XFontStruct* fl_xxfont(Fl_Graphics_Driver *driver) {
-#  if XFT_MAJOR > 1
-  // kludge! XFT 2 and later does not provide core fonts for us to use with GL
-  // try to load a bitmap X font instead
-  static XFontStruct* xgl_font = 0;
-  static int glsize = 0;
-  static int glfont = -1;
-  // Do we need to load a new font?
-  if ((!xgl_font) || (glsize != driver->size()) || (glfont != driver->font())) {
-    // create a dummy XLFD for some font of the appropriate size...
-    if (xgl_font) XFreeFont(fl_display, xgl_font); // font already loaded, free it - this *might* be a Bad Idea
-    glsize = driver->size(); // record current font size
-    glfont = driver->font(); // and face
-    xgl_font = load_xfont_for_xft2(driver);
-  }
-  return xgl_font;
-#  else // XFT-1 provides a means to load a "core" font directly
-  if (driver->font_descriptor()->font->core) {
-    return driver->font_descriptor()->font->u.core.font; // is the current font a "core" font? If so, use it.
-    }
-  static XftFont* xftfont;
-  if (xftfont) XftFontClose (fl_display, xftfont);
-  xftfont = fontopen(fl_fonts[driver->font()].name, driver->size(), true, 0); // else request XFT to load a suitable "core" font instead.
-  return xftfont->u.core.font;
-#  endif // XFT_MAJOR > 1
-}
-
-XFontStruct* Fl_XFont_On_Demand::value() {
-  if (!ptr) ptr = fl_xxfont(fl_graphics_driver);
-  return ptr;
-}
-
-#if USE_OVERLAY
-// Currently Xft does not work with colormapped visuals, so this probably
-// does not work unless you have a true-color overlay.
-extern bool fl_overlay;
-extern Colormap fl_overlay_colormap;
-extern XVisualInfo* fl_overlay_visual;
-#endif
-
-// For some reason Xft produces errors if you destroy a window whose id
-// still exists in an XftDraw structure. It would be nice if this is not
-// true, a lot of junk is needed to try to stop this:
-
-static XftDraw* draw_;
-static Window draw_window;
-#if USE_OVERLAY
-static XftDraw* draw_overlay;
-static Window draw_overlay_window;
-#endif
-
-void fl_destroy_xft_draw(Window id) {
-  if (id == draw_window)
-    XftDrawChange(draw_, draw_window = fl_message_window);
-#if USE_OVERLAY
-  if (id == draw_overlay_window)
-    XftDrawChange(draw_overlay, draw_overlay_window = fl_message_window);
-#endif
-}
-
-void Fl_Xlib_Graphics_Driver::draw(const char *str, int n, int x, int y) {
-  if ( !this->font_descriptor() ) {
-    this->font(FL_HELVETICA, FL_NORMAL_SIZE);
-  }
-#if USE_OVERLAY
-  XftDraw*& draw_ = fl_overlay ? draw_overlay : ::draw_;
-  if (fl_overlay) {
-    if (!draw_)
-      draw_ = XftDrawCreate(fl_display, draw_overlay_window = fl_window,
-			   fl_overlay_visual->visual, fl_overlay_colormap);
-    else //if (draw_overlay_window != fl_window)
-      XftDrawChange(draw_, draw_overlay_window = fl_window);
-  } else
-#endif
-  if (!draw_)
-    draw_ = XftDrawCreate(fl_display, draw_window = fl_window,
-			 fl_visual->visual, fl_colormap);
-  else //if (draw_window != fl_window)
-    XftDrawChange(draw_, draw_window = fl_window);
-
-  Region region = fl_clip_region();
-  if (region && XEmptyRegion(region)) return;
-  XftDrawSetClip(draw_, region);
-
-  // Use fltk's color allocator, copy the results to match what
-  // XftCollorAllocValue returns:
-  XftColor color;
-  color.pixel = fl_xpixel(Fl_Graphics_Driver::color());
-  uchar r,g,b; Fl::get_color(Fl_Graphics_Driver::color(), r,g,b);
-  color.color.red   = ((int)r)*0x101;
-  color.color.green = ((int)g)*0x101;
-  color.color.blue  = ((int)b)*0x101;
-  color.color.alpha = 0xffff;
-  
-  const wchar_t *buffer = utf8reformat(str, n);
-#ifdef __CYGWIN__
-  XftDrawString16(draw_, &color, font_descriptor()->font, x, y, (XftChar16 *)buffer, n);
-#else
-  XftDrawString32(draw_, &color, font_descriptor()->font, x, y, (XftChar32 *)buffer, n);
-#endif
-}
-
-void Fl_Xlib_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) {
-  fl_xft_font(this, this->Fl_Graphics_Driver::font(), this->size(), angle);
-  this->draw(str, n, (int)x, (int)y);
-  fl_xft_font(this, this->Fl_Graphics_Driver::font(), this->size(), 0);
-}
-
-static void fl_drawUCS4(Fl_Graphics_Driver *driver, const FcChar32 *str, int n, int x, int y) {
-#if USE_OVERLAY
-  XftDraw*& draw_ = fl_overlay ? draw_overlay : ::draw_;
-  if (fl_overlay) {
-    if (!draw_)
-      draw_ = XftDrawCreate(fl_display, draw_overlay_window = fl_window,
-			   fl_overlay_visual->visual, fl_overlay_colormap);
-    else //if (draw_overlay_window != fl_window)
-      XftDrawChange(draw_, draw_overlay_window = fl_window);
-  } else
-#endif
-  if (!draw_)
-    draw_ = XftDrawCreate(fl_display, draw_window = fl_window,
-			 fl_visual->visual, fl_colormap);
-  else //if (draw_window != fl_window)
-    XftDrawChange(draw_, draw_window = fl_window);
-
-  Region region = fl_clip_region();
-  if (region && XEmptyRegion(region)) return;
-  XftDrawSetClip(draw_, region);
-
-  // Use fltk's color allocator, copy the results to match what
-  // XftCollorAllocValue returns:
-  XftColor color;
-  color.pixel = fl_xpixel(driver->color());
-  uchar r,g,b; Fl::get_color(driver->color(), r,g,b);
-  color.color.red   = ((int)r)*0x101;
-  color.color.green = ((int)g)*0x101;
-  color.color.blue  = ((int)b)*0x101;
-  color.color.alpha = 0xffff;
-
-  XftDrawString32(draw_, &color, driver->font_descriptor()->font, x, y, (FcChar32 *)str, n);
-}
-
-
-void Fl_Xlib_Graphics_Driver::rtl_draw(const char* c, int n, int x, int y) {
-
-#if defined(__GNUC__)
-// FIXME: warning Need to improve this XFT right to left draw function
-#endif /*__GNUC__*/
-
-// This actually draws LtoR, but aligned to R edge with the glyph order reversed...
-// but you can't just byte-rev a UTF-8 string, that isn't valid.
-// You can reverse a UCS4 string though...
-  int num_chars, wid, utf_len = strlen(c);
-  FcChar8 *u8 = (FcChar8 *)c;
-  FcBool valid = FcUtf8Len(u8, utf_len, &num_chars, &wid);
-  if (!valid)
-  {
-    // badly formed Utf-8 input string
-    return;
-  }
-  if (num_chars < n) n = num_chars; // limit drawing to usable characters in input array
-  FcChar32 *ucs_txt = new FcChar32[n+1];
-  FcChar32* pu;
-  int in, out, sz;
-  ucs_txt[n] = 0;
-  in = 0; out = n-1;
-  while ((out >= 0) && (utf_len > 0))
-  {
-    pu = &ucs_txt[out];
-    sz = FcUtf8ToUcs4(u8, pu, utf_len);
-    utf_len = utf_len - sz;
-    u8 = u8 + sz;
-    out = out - 1;
-  }
-  // Now we have a UCS4 version of the input text, reversed, in ucs_txt
-  int offs = (int)fl_xft_width(font_descriptor(), ucs_txt, n);
-  fl_drawUCS4(this, ucs_txt, n, (x-offs), y);
-
-  delete[] ucs_txt;
-}
-#endif
-
-//
-// End of "$Id: fl_font_xft.cxx 8442 2011-02-18 13:39:48Z manolo $"
-//
diff --git a/common/fltk/src/fl_gtk.cxx b/common/fltk/src/fl_gtk.cxx
deleted file mode 100644
index 76cbe4c..0000000
--- a/common/fltk/src/fl_gtk.cxx
+++ /dev/null
@@ -1,304 +0,0 @@
-//
-// "$Id: fl_gtk.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// "GTK" drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// These box types provide a GTK+ look, based on Red Hat's Bluecurve
-// theme...
-//
-// Copyright 2006-2010 by Michael Sweet.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Box drawing code for an obscure box type.
-// These box types are in separate files so they are not linked
-// in if not used.
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-
-
-static void gtk_color(Fl_Color c) {
-  if (Fl::draw_box_active()) fl_color(c);
-  else fl_color(fl_inactive(c));
-}
-
-
-static void gtk_up_frame(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(fl_color_average(FL_WHITE, c, 0.5));
-  fl_xyline(x + 2, y + 1, x + w - 3);
-  fl_yxline(x + 1, y + 2, y + h - 3);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.5));
-  fl_begin_loop();
-    fl_vertex(x, y + 2);
-    fl_vertex(x + 2, y);
-    fl_vertex(x + w - 3, y);
-    fl_vertex(x + w - 1, y + 2);
-    fl_vertex(x + w - 1, y + h - 3);
-    fl_vertex(x + w - 3, y + h - 1);
-    fl_vertex(x + 2, y + h - 1);
-    fl_vertex(x, y + h - 3);
-  fl_end_loop();
-}
-
-
-static void gtk_up_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_up_frame(x, y, w, h, c);
-
-  gtk_color(fl_color_average(FL_WHITE, c, 0.4f));
-  fl_xyline(x + 2, y + 2, x + w - 3);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.2f));
-  fl_xyline(x + 2, y + 3, x + w - 3);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.1f));
-  fl_xyline(x + 2, y + 4, x + w - 3);
-  gtk_color(c);
-  fl_rectf(x + 2, y + 5, w - 4, h - 7);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.025f));
-  fl_xyline(x + 2, y + h - 4, x + w - 3);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.05f));
-  fl_xyline(x + 2, y + h - 3, x + w - 3);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.1f));
-  fl_xyline(x + 2, y + h - 2, x + w - 3);
-  fl_yxline(x + w - 2, y + 2, y + h - 3);
-}
-
-
-static void gtk_down_frame(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(fl_color_average(FL_BLACK, c, 0.5));
-  fl_begin_loop();
-    fl_vertex(x, y + 2);
-    fl_vertex(x + 2, y);
-    fl_vertex(x + w - 3, y);
-    fl_vertex(x + w - 1, y + 2);
-    fl_vertex(x + w - 1, y + h - 3);
-    fl_vertex(x + w - 3, y + h - 1);
-    fl_vertex(x + 2, y + h - 1);
-    fl_vertex(x, y + h - 3);
-  fl_end_loop();
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.1f));
-  fl_xyline(x + 2, y + 1, x + w - 3);
-  fl_yxline(x + 1, y + 2, y + h - 3);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.05f));
-  fl_yxline(x + 2, y + h - 2, y + 2, x + w - 2);
-}
-
-
-static void gtk_down_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_down_frame(x, y, w, h, c);
-
-  gtk_color(c);
-  fl_rectf(x + 3, y + 3, w - 5, h - 4);
-  fl_yxline(x + w - 2, y + 3, y + h - 3);
-}
-
-
-static void gtk_thin_up_frame(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(fl_color_average(FL_WHITE, c, 0.6f));
-  fl_xyline(x + 1, y, x + w - 2);
-  fl_yxline(x, y + 1, y + h - 2);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.4f));
-  fl_xyline(x + 1, y + h - 1, x + w - 2);
-  fl_yxline(x + w - 1, y + 1, y + h - 2);
-}
-
-
-static void gtk_thin_up_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_thin_up_frame(x, y, w, h, c);
-
-  gtk_color(fl_color_average(FL_WHITE, c, 0.4f));
-  fl_xyline(x + 1, y + 1, x + w - 2);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.2f));
-  fl_xyline(x + 1, y + 2, x + w - 2);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.1f));
-  fl_xyline(x + 1, y + 3, x + w - 2);
-  gtk_color(c);
-  fl_rectf(x + 1, y + 4, w - 2, h - 8);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.025f));
-  fl_xyline(x + 1, y + h - 4, x + w - 2);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.05f));
-  fl_xyline(x + 1, y + h - 3, x + w - 2);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.1f));
-  fl_xyline(x + 1, y + h - 2, x + w - 2);
-}
-
-
-static void gtk_thin_down_frame(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(fl_color_average(FL_BLACK, c, 0.4f));
-  fl_xyline(x + 1, y, x + w - 2);
-  fl_yxline(x, y + 1, y + h - 2);
-
-  gtk_color(fl_color_average(FL_WHITE, c, 0.6f));
-  fl_xyline(x + 1, y + h - 1, x + w - 2);
-  fl_yxline(x + w - 1, y + 1, y + h - 2);
-}
-
-
-static void gtk_thin_down_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_thin_down_frame(x, y, w, h, c);
-
-  gtk_color(c);
-  fl_rectf(x + 1, y + 1, w - 2, h - 2);
-}
-
-//------------------------
-// new GTK+ style for round buttons
-#if 1
-
-static void fl_arc_i(int x,int y,int w,int h,double a1,double a2) {
-  fl_arc(x,y,w,h,a1,a2);
-}
-
-enum {UPPER_LEFT, LOWER_RIGHT, CLOSED, FILL};
-
-static void draw(int which, int x,int y,int w,int h, int inset)
-{
-  if (inset*2 >= w) inset = (w-1)/2;
-  if (inset*2 >= h) inset = (h-1)/2;
-  x += inset;
-  y += inset;
-  w -= 2*inset;
-  h -= 2*inset;
-  int d = w <= h ? w : h;
-  if (d <= 1) return;
-  void (*f)(int,int,int,int,double,double);
-  f = (which==FILL) ? fl_pie : fl_arc_i;
-  if (which >= CLOSED) {
-    f(x+w-d, y, d, d, w<=h ? 0 : -90, w<=h ? 180 : 90);
-    f(x, y+h-d, d, d, w<=h ? 180 : 90, w<=h ? 360 : 270);
-  } else if (which == UPPER_LEFT) {
-    f(x+w-d, y, d, d, 45, w<=h ? 180 : 90);
-    f(x, y+h-d, d, d, w<=h ? 180 : 90, 225);
-  } else { // LOWER_RIGHT
-    f(x, y+h-d, d, d, 225, w<=h ? 360 : 270);
-    f(x+w-d, y, d, d, w<=h ? 360 : 270, 360+45);
-  }
-  if (which == FILL) {
-    if (w < h)
-      fl_rectf(x, y+d/2, w, h-(d&-2));
-    else if (w > h)
-      fl_rectf(x+d/2, y, w-(d&-2), h);
-  } else {
-    if (w < h) {
-      if (which != UPPER_LEFT) fl_yxline(x+w-1, y+d/2-1, y+h-d/2+1);
-      if (which != LOWER_RIGHT) fl_yxline(x, y+d/2-1, y+h-d/2+1);
-    } else if (w > h) {
-      if (which != UPPER_LEFT) fl_xyline(x+d/2-1, y+h-1, x+w-d/2+1);
-      if (which != LOWER_RIGHT) fl_xyline(x+d/2-1, y, x+w-d/2+1);
-    }
-  }
-}
-
-void gtk_round_up_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(c);
-  draw(FILL,	    x,   y, w,   h, 2);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.025f));
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 2);
-  draw(LOWER_RIGHT, x,   y, w,   h, 3);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.05f));
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 1);
-  draw(LOWER_RIGHT, x,   y, w,   h, 2);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.1f));
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 0);
-  draw(LOWER_RIGHT, x,   y, w,   h, 1);
-
-  gtk_color(fl_color_average(FL_WHITE, c, 0.1f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 4);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 3);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.2f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 3);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 2);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.4f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 2);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 1);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.5f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 1);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 0);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.5f));
-  draw(CLOSED,	    x,   y, w,   h, 0);
-}
-
-void gtk_round_down_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(c);
-  draw(FILL,	    x,   y, w,   h, 2);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.05f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 2);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 1);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.1f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 1);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 0);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.5f));
-  draw(CLOSED,	    x,   y, w,   h, 0);
-}
-
-#else
-
-static void gtk_round_up_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(c);
-  fl_pie(x, y, w, h, 0.0, 360.0);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.5f));
-  fl_arc(x, y, w, h, 45.0, 180.0);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.25f));
-  fl_arc(x, y, w, h, 180.0, 405.0);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.5f));
-  fl_arc(x, y, w, h, 225.0, 360.0);
-}
-
-
-static void gtk_round_down_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(c);
-  fl_pie(x, y, w, h, 0.0, 360.0);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.2));
-  fl_arc(x + 1, y, w, h, 90.0, 210.0);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.6));
-  fl_arc(x, y, w, h, 0.0, 360.0);
-}
-
-#endif
-
-Fl_Boxtype fl_define_FL_GTK_UP_BOX() {
-  fl_internal_boxtype(_FL_GTK_UP_BOX, gtk_up_box);
-  fl_internal_boxtype(_FL_GTK_DOWN_BOX, gtk_down_box);
-  fl_internal_boxtype(_FL_GTK_UP_FRAME, gtk_up_frame);
-  fl_internal_boxtype(_FL_GTK_DOWN_FRAME, gtk_down_frame);
-  fl_internal_boxtype(_FL_GTK_THIN_UP_BOX, gtk_thin_up_box);
-  fl_internal_boxtype(_FL_GTK_THIN_DOWN_BOX, gtk_thin_down_box);
-  fl_internal_boxtype(_FL_GTK_THIN_UP_FRAME, gtk_thin_up_frame);
-  fl_internal_boxtype(_FL_GTK_THIN_DOWN_FRAME, gtk_thin_down_frame);
-  fl_internal_boxtype(_FL_GTK_ROUND_UP_BOX, gtk_round_up_box);
-  fl_internal_boxtype(_FL_GTK_ROUND_DOWN_BOX, gtk_round_down_box);
-
-  return _FL_GTK_UP_BOX;
-}
-
-
-//
-// End of "$Id: fl_gtk.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_labeltype.cxx b/common/fltk/src/fl_labeltype.cxx
deleted file mode 100644
index e9d3ae9..0000000
--- a/common/fltk/src/fl_labeltype.cxx
+++ /dev/null
@@ -1,144 +0,0 @@
-//
-// "$Id: fl_labeltype.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Label drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Drawing code for the (one) common label types.
-// Other label types (symbols) are in their own source files
-// to avoid linking if not used.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Group.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Image.H>
-
-void
-fl_no_label(const Fl_Label*,int,int,int,int,Fl_Align) {}
-
-void
-fl_normal_label(const Fl_Label* o, int X, int Y, int W, int H, Fl_Align align)
-{
-  fl_font(o->font, o->size);
-  fl_color((Fl_Color)o->color);
-  fl_draw(o->value, X, Y, W, H, align, o->image);
-}
-
-void
-fl_normal_measure(const Fl_Label* o, int& W, int& H) {
-  fl_font(o->font, o->size);
-  fl_measure(o->value, W, H);
-  if (o->image) {
-    if (o->image->w() > W) W = o->image->w();
-    H += o->image->h();
-  }
-}
-
-#define MAX_LABELTYPE 16
-
-static Fl_Label_Draw_F* table[MAX_LABELTYPE] = {
-  fl_normal_label,
-  fl_no_label,
-  fl_normal_label,	// _FL_SHADOW_LABEL,
-  fl_normal_label,	// _FL_ENGRAVED_LABEL,
-  fl_normal_label,	// _FL_EMBOSSED_LABEL,
-  fl_no_label,		// _FL_MULTI_LABEL,
-  fl_no_label,		// _FL_ICON_LABEL,
-  // FL_FREE_LABELTYPE+n:
-  fl_no_label, fl_no_label, fl_no_label,
-  fl_no_label, fl_no_label, fl_no_label,
-  fl_no_label, fl_no_label, fl_no_label
-};
-
-static Fl_Label_Measure_F* measure[MAX_LABELTYPE];
-
-/** Sets the functions to call to draw and measure a specific labeltype. */
-void Fl::set_labeltype(Fl_Labeltype t,Fl_Label_Draw_F* f,Fl_Label_Measure_F*m) 
-{
-  table[t] = f; measure[t] = m;
-}
-
-////////////////////////////////////////////////////////////////
-
-/** Draws a label with arbitrary alignment in an arbitrary box. */
-void Fl_Label::draw(int X, int Y, int W, int H, Fl_Align align) const {
-  if (!value && !image) return;
-  table[type](this, X, Y, W, H, align);
-}
-/** 
-    Measures the size of the label.
-    \param[in,out] W, H : this is the requested size for the label text plus image;
-         on return, this will contain the size needed to fit the label
-*/
-void Fl_Label::measure(int& W, int& H) const {
-  if (!value && !image) {
-    W = H = 0;
-    return;
-  }
-
-  Fl_Label_Measure_F* f = ::measure[type]; if (!f) f = fl_normal_measure;
-  f(this, W, H);
-}
-
-/** Draws the widget's label at the defined label position.
-    This is the normal call for a widget's draw() method.
- */
-void Fl_Widget::draw_label() const {
-  int X = x_+Fl::box_dx(box());
-  int W = w_-Fl::box_dw(box());
-  if (W > 11 && align()&(FL_ALIGN_LEFT|FL_ALIGN_RIGHT)) {X += 3; W -= 6;}
-  draw_label(X, y_+Fl::box_dy(box()), W, h_-Fl::box_dh(box()));
-}
-
-/** Draws the label in an arbitrary bounding box.
-    draw() can use this instead of draw_label(void) to change the bounding box
- */
-void Fl_Widget::draw_label(int X, int Y, int W, int H) const {
-  // quit if we are not drawing a label inside the widget:
-  if ((align()&15) && !(align() & FL_ALIGN_INSIDE)) return;
-  draw_label(X,Y,W,H,align());
-}
-
-/** Draws the label in an arbitrary bounding box with an arbitrary alignment.
-    Anybody can call this to force the label to draw anywhere.
- */
-void Fl_Widget::draw_label(int X, int Y, int W, int H, Fl_Align a) const {
-  if (flags()&SHORTCUT_LABEL) fl_draw_shortcut = 1;
-  Fl_Label l1 = label_;
-  if (!active_r()) {
-    l1.color = fl_inactive((Fl_Color)l1.color);
-    if (l1.deimage) l1.image = l1.deimage;
-  }
-  l1.draw(X,Y,W,H,a);
-  fl_draw_shortcut = 0;
-}
-
-// include these vars here so they can be referenced without including
-// Fl_Input_ code:
-#include <FL/Fl_Input_.H>
-
-//
-// End of "$Id: fl_labeltype.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_line_style.cxx b/common/fltk/src/fl_line_style.cxx
deleted file mode 100644
index f9b61bf..0000000
--- a/common/fltk/src/fl_line_style.cxx
+++ /dev/null
@@ -1,174 +0,0 @@
-//
-// "$Id: fl_line_style.cxx 8190 2011-01-05 10:21:45Z manolo $"
-//
-// Line style code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_line_style.cxx
-  \brief Line style drawing utility hiding different platforms.
-*/
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl_Printer.H>
-#include "flstring.h"
-#include <stdio.h>
-
-// We save the current line width (absolute value) here.
-// This is currently used only for X11 clipping, see src/fl_rect.cxx.
-// FIXME: this would probably better be in class Fl::
-int fl_line_width_ = 0;
-
-#ifdef __APPLE_QUARTZ__
-float fl_quartz_line_width_ = 1.0f;
-static enum CGLineCap fl_quartz_line_cap_ = kCGLineCapButt;
-static enum CGLineJoin fl_quartz_line_join_ = kCGLineJoinMiter;
-static CGFloat *fl_quartz_line_pattern = 0;
-static int fl_quartz_line_pattern_size = 0;
-void fl_quartz_restore_line_style_() {
-  CGContextSetLineWidth(fl_gc, fl_quartz_line_width_);
-  CGContextSetLineCap(fl_gc, fl_quartz_line_cap_);
-  CGContextSetLineJoin(fl_gc, fl_quartz_line_join_);
-  CGContextSetLineDash(fl_gc, 0, fl_quartz_line_pattern, fl_quartz_line_pattern_size);
-}
-#endif
-
-void Fl_Graphics_Driver::line_style(int style, int width, char* dashes) {
-
-  // save line width in global variable for X11 clipping
-  if (width == 0) fl_line_width_ = 1;
-  else fl_line_width_ = width>0 ? width : -width;
-
-#if defined(USE_X11)
-  int ndashes = dashes ? strlen(dashes) : 0;
-  // emulate the WIN32 dash patterns on X
-  char buf[7];
-  if (!ndashes && (style&0xff)) {
-    int w = width ? width : 1;
-    char dash, dot, gap;
-    // adjust lengths to account for cap:
-    if (style & 0x200) {
-      dash = char(2*w);
-      dot = 1; // unfortunately 0 does not work
-      gap = char(2*w-1);
-    } else {
-      dash = char(3*w);
-      dot = gap = char(w);
-    }
-    char* p = dashes = buf;
-    switch (style & 0xff) {
-    case FL_DASH:	*p++ = dash; *p++ = gap; break;
-    case FL_DOT:	*p++ = dot; *p++ = gap; break;
-    case FL_DASHDOT:	*p++ = dash; *p++ = gap; *p++ = dot; *p++ = gap; break;
-    case FL_DASHDOTDOT: *p++ = dash; *p++ = gap; *p++ = dot; *p++ = gap; *p++ = dot; *p++ = gap; break;
-    }
-    ndashes = p-buf;
-  }
-  static int Cap[4] = {CapButt, CapButt, CapRound, CapProjecting};
-  static int Join[4] = {JoinMiter, JoinMiter, JoinRound, JoinBevel};
-  XSetLineAttributes(fl_display, fl_gc, width, 
-		     ndashes ? LineOnOffDash : LineSolid,
-		     Cap[(style>>8)&3], Join[(style>>12)&3]);
-  if (ndashes) XSetDashes(fl_display, fl_gc, 0, dashes, ndashes);
-#elif defined(WIN32)
-  // According to Bill, the "default" cap and join should be the
-  // "fastest" mode supported for the platform.  I don't know why
-  // they should be different (same graphics cards, etc., right?) MRS
-  static DWORD Cap[4]= {PS_ENDCAP_FLAT, PS_ENDCAP_FLAT, PS_ENDCAP_ROUND, PS_ENDCAP_SQUARE};
-  static DWORD Join[4]={PS_JOIN_ROUND, PS_JOIN_MITER, PS_JOIN_ROUND, PS_JOIN_BEVEL};
-  int s1 = PS_GEOMETRIC | Cap[(style>>8)&3] | Join[(style>>12)&3];
-  DWORD a[16]; int n = 0;
-  if (dashes && dashes[0]) {
-    s1 |= PS_USERSTYLE;
-    for (n = 0; n < 16 && *dashes; n++) a[n] = *dashes++;
-  } else {
-    s1 |= style & 0xff; // allow them to pass any low 8 bits for style
-  }
-  if ((style || n) && !width) width = 1; // fix cards that do nothing for 0?
-  LOGBRUSH penbrush = {BS_SOLID,fl_RGB(),0}; // can this be fl_brush()?
-  HPEN newpen = ExtCreatePen(s1, width, &penbrush, n, n ? a : 0);
-  if (!newpen) {
-    Fl::error("fl_line_style(): Could not create GDI pen object.");
-    return;
-  }
-  HPEN oldpen = (HPEN)SelectObject(fl_gc, newpen);
-  DeleteObject(oldpen);
-  DeleteObject(fl_current_xmap->pen);
-  fl_current_xmap->pen = newpen;
-#elif defined(__APPLE_QUARTZ__)
-  static enum CGLineCap Cap[4] = { kCGLineCapButt, kCGLineCapButt, 
-                                   kCGLineCapRound, kCGLineCapSquare };
-  static enum CGLineJoin Join[4] = { kCGLineJoinMiter, kCGLineJoinMiter, 
-                                    kCGLineJoinRound, kCGLineJoinBevel };
-  if (width<1) width = 1;
-  fl_quartz_line_width_ = (float)width; 
-  fl_quartz_line_cap_ = Cap[(style>>8)&3];
-  // when printing kCGLineCapSquare seems better for solid lines
-  if ( Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id && style == FL_SOLID && dashes == NULL ) {
-    fl_quartz_line_cap_ = kCGLineCapSquare;
-    }
-  fl_quartz_line_join_ = Join[(style>>12)&3];
-  char *d = dashes; 
-  static CGFloat pattern[16];
-  if (d && *d) {
-	CGFloat *p = pattern;
-    while (*d) { *p++ = (float)*d++; }
-    fl_quartz_line_pattern = pattern;
-    fl_quartz_line_pattern_size = d-dashes;
-  } else if (style & 0xff) {
-    char dash, dot, gap;
-    // adjust lengths to account for cap:
-    if (style & 0x200) {
-      dash = char(2*width);
-      dot = 1; 
-      gap = char(2*width-1);
-    } else {
-      dash = char(3*width);
-      dot = gap = char(width);
-    }
-	CGFloat *p = pattern;
-    switch (style & 0xff) {
-    case FL_DASH:       *p++ = dash; *p++ = gap; break;
-    case FL_DOT:        *p++ = dot; *p++ = gap; break;
-    case FL_DASHDOT:    *p++ = dash; *p++ = gap; *p++ = dot; *p++ = gap; break;
-    case FL_DASHDOTDOT: *p++ = dash; *p++ = gap; *p++ = dot; *p++ = gap; *p++ = dot; *p++ = gap; break;
-    }
-    fl_quartz_line_pattern_size = p-pattern;
-    fl_quartz_line_pattern = pattern;
-  } else {
-    fl_quartz_line_pattern = 0; 
-		fl_quartz_line_pattern_size = 0;
-  }
-  fl_quartz_restore_line_style_();
-#else
-# error unsupported platform
-#endif
-}
-
-
-//
-// End of "$Id: fl_line_style.cxx 8190 2011-01-05 10:21:45Z manolo $".
-//
diff --git a/common/fltk/src/fl_open_uri.cxx b/common/fltk/src/fl_open_uri.cxx
deleted file mode 100644
index adeb4cb..0000000
--- a/common/fltk/src/fl_open_uri.cxx
+++ /dev/null
@@ -1,383 +0,0 @@
-//
-// "$Id: fl_open_uri.cxx 8063 2010-12-19 21:20:10Z matt $"
-//
-// fl_open_uri() code for FLTK.
-//
-// Test with:
-//
-//    gcc -I/fltk/dir -I/fltk/dir/src -DTEST -o fl_open_uri fl_open_uri.cxx -lfltk
-//
-// Copyright 2003-2010 by Michael R Sweet
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-
-//
-// Include necessary headers...
-//
-
-#include <FL/filename.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include "flstring.h"
-#ifdef WIN32
-#  include <windows.h>
-#  include <shellapi.h>
-#else
-#  include <sys/wait.h>
-#  include <signal.h>
-#  include <fcntl.h>
-#  include <unistd.h>
-#endif // WIN32
-
-
-//
-// Local functions...
-//
-
-#if !defined(WIN32) && !defined(__APPLE__)
-static char	*path_find(const char *program, char *filename, int filesize);
-#endif // !WIN32 && !__APPLE__
-#ifndef WIN32
-static int	run_program(const char *program, char **argv, char *msg, int msglen);
-#endif // !WIN32
-
-/** \addtogroup filenames
- @{ */
-
-/**
- * Opens the specified Uniform Resource Identifier (URI).
- * Uses an operating-system dependent program or interface. For URIs
- * using the "ftp", "http", or "https" schemes, the system default web
- * browser is used to open the URI, while "mailto" and "news" URIs are
- * typically opened using the system default mail reader and "file" URIs
- * are opened using the file system navigator.
- *
- * On success, the (optional) msg buffer is filled with the command that
- * was run to open the URI; on Windows, this will always be "open uri".
- *
- * On failure, the msg buffer is filled with an English error message.
- *
- * \b Example
- * \code
- * #include <FL/filename.H>
- * [..]
- * char errmsg[512];
- * if ( !fl_open_uri("http://google.com/", errmsg, sizeof(errmsg)) ) {
- *     char warnmsg[768];
- *     sprintf(warnmsg, "Error: %s", errmsg);
- *     fl_alert(warnmsg);
- * }
- * \endcode
- *
- * @param uri The URI to open
- * @param msg Optional buffer which contains the command or error message
- * @param msglen Length of optional buffer
- * @return 1 on success, 0 on failure
- */
-
-int
-fl_open_uri(const char *uri, char *msg, int msglen) {
-  // Supported URI schemes...
-  static const char * const schemes[] = {
-    "file://",
-    "ftp://",
-    "http://",
-    "https://",
-    "mailto:",
-    "news://",
-    NULL
-  };
-
-  // Validate the URI scheme...
-  int i;
-  for (i = 0; schemes[i]; i ++)
-    if (!strncmp(uri, schemes[i], strlen(schemes[i])))
-      break;
-
-  if (!schemes[i]) {
-    if (msg) {
-      char scheme[255];
-      if (sscanf(uri, "%254[^:]", scheme) == 1) {
-        snprintf(msg, msglen, "URI scheme \"%s\" not supported.", scheme);
-      } else {
-        snprintf(msg, msglen, "Bad URI \"%s\"", uri);
-      }
-    }
-
-    return 0;
-  }
-
-#ifdef WIN32
-  if (msg) snprintf(msg, msglen, "open %s", uri);
-
-  return (int)(ShellExecute(HWND_DESKTOP, "open", uri, NULL, NULL, SW_SHOW) > (void *)32);
-
-#elif defined(__APPLE__)
-  char	*argv[3];			// Command-line arguments
-
-  argv[0] = (char*)"open";
-  argv[1] = (char*)uri;
-  argv[2] = (char*)0;
-
-  if (msg) snprintf(msg, msglen, "open %s", uri);
-
-  return run_program("/usr/bin/open", argv, msg, msglen) != 0;
-
-#else // !WIN32 && !__APPLE__
-  // Run any of several well-known commands to open the URI.
-  //
-  // We give preference to the Portland group's xdg-utils
-  // programs which run the user's preferred web browser, etc.
-  // based on the current desktop environment in use.  We fall
-  // back on older standards and then finally test popular programs
-  // until we find one we can use.
-  //
-  // Note that we specifically do not support the MAILER and
-  // BROWSER environment variables because we have no idea whether
-  // we need to run the listed commands in a terminal program.
-
-  char	command[FL_PATH_MAX],		// Command to run...
-	*argv[4],			// Command-line arguments
-	remote[1024];			// Remote-mode command...
-  const char * const *commands;		// Array of commands to check...
-  static const char * const browsers[] = {
-    "xdg-open", // Portland
-    "htmlview", // Freedesktop.org
-    "firefox",
-    "mozilla",
-    "netscape",
-    "konqueror", // KDE
-    "opera",
-    "hotjava", // Solaris
-    "mosaic",
-    NULL
-  };
-  static const char * const readers[] = {
-    "xdg-email", // Portland
-    "thunderbird",
-    "mozilla",
-    "netscape",
-    "evolution", // GNOME
-    "kmailservice", // KDE
-    NULL
-  };
-  static const char * const managers[] = {
-    "xdg-open", // Portland
-    "fm", // IRIX
-    "dtaction", // CDE
-    "nautilus", // GNOME
-    "konqueror", // KDE
-    NULL
-  };
-
-  // Figure out which commands to check for...
-  if (!strncmp(uri, "file://", 7)) commands = managers;
-  else if (!strncmp(uri, "mailto:", 7) ||
-           !strncmp(uri, "news:", 5)) commands = readers;
-  else commands = browsers;
-
-  // Find the command to run...
-  for (i = 0; commands[i]; i ++)
-    if (path_find(commands[i], command, sizeof(command))) break;
-
-  if (!commands[i]) {
-    if (msg) {
-      snprintf(msg, msglen, "No helper application found for \"%s\"", uri);
-    }
-
-    return 0;
-  }
-
-  // Handle command-specific arguments...
-  argv[0] = (char *)commands[i];
-
-  if (!strcmp(commands[i], "firefox") ||
-      !strcmp(commands[i], "mozilla") ||
-      !strcmp(commands[i], "netscape") ||
-      !strcmp(commands[i], "thunderbird")) {
-    // program -remote openURL(uri)
-    snprintf(remote, sizeof(remote), "openURL(%s)", uri);
-
-    argv[1] = (char *)"-remote";
-    argv[2] = remote;
-    argv[3] = 0;
-  } else if (!strcmp(commands[i], "dtaction")) {
-    // dtaction open uri
-    argv[1] = (char *)"open";
-    argv[2] = (char *)uri;
-    argv[3] = 0;
-  } else {
-    // program uri
-    argv[1] = (char *)uri;
-    argv[2] = 0;
-  }
-
-  if (msg) {
-    strlcpy(msg, argv[0], msglen);
-
-    for (i = 1; argv[i]; i ++) {
-      strlcat(msg, " ", msglen);
-      strlcat(msg, argv[i], msglen);
-    }
-  }
-
-  return run_program(command, argv, msg, msglen) != 0;
-#endif // WIN32
-}
-
-/**   @} */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-// Find a program in the path...
-static char *path_find(const char *program, char *filename, int filesize) {
-  const char	*path;			// Search path
-  char		*ptr,			// Pointer into filename
-		*end;			// End of filename buffer
-
-
-  if ((path = getenv("PATH")) == NULL) path = "/bin:/usr/bin";
-
-  for (ptr = filename, end = filename + filesize - 1; *path; path ++) {
-    if (*path == ':') {
-      if (ptr > filename && ptr[-1] != '/' && ptr < end) *ptr++ = '/';
-
-      strlcpy(ptr, program, end - ptr + 1);
-
-      if (!access(filename, X_OK)) return filename;
-
-      ptr = filename;
-    } else if (ptr < end) *ptr++ = *path;
-  }
-
-  if (ptr > filename) {
-    if (ptr[-1] != '/' && ptr < end) *ptr++ = '/';
-
-    strlcpy(ptr, program, end - ptr + 1);
-
-    if (!access(filename, X_OK)) return filename;
-  }
-
-  return 0;
-}
-#endif // !WIN32 && !__APPLE__
-
-
-#ifndef WIN32
-// Run the specified program, returning 1 on success and 0 on failure
-static int
-run_program(const char *program, char **argv, char *msg, int msglen) {
-  pid_t	pid;				// Process ID of first child
-  int status;				// Exit status from first child
-  sigset_t set, oldset;			// Signal masks
-
-
-  // Block SIGCHLD while we run the program...
-  //
-  // Note that I only use the POSIX signal APIs, however older operating
-  // systems may either not support POSIX signals or have side effects.
-  // IRIX, for example, provides three separate and incompatible signal
-  // APIs, so it is possible that an application setting a signal handler
-  // via signal() or sigset() will not have its SIGCHLD signals blocked...
-
-  sigemptyset(&set);
-  sigaddset(&set, SIGCHLD);
-  sigprocmask(SIG_BLOCK, &set, &oldset);
-
-  // Create child processes that actually run the program for us...
-  if ((pid = fork()) == 0) {
-    // First child comes here, fork a second child and exit...
-    if (!fork()) {
-      // Second child comes here, redirect stdin/out/err to /dev/null...
-      close(0);
-      open("/dev/null", O_RDONLY);
-
-      close(1);
-      open("/dev/null", O_WRONLY);
-
-      close(2);
-      open("/dev/null", O_WRONLY);
-
-      // Detach from the current process group...
-      setsid();
-
-      // Run the program...
-      execv(program, argv);
-      _exit(0);
-    } else {
-      // First child gets here, exit immediately...
-      _exit(0);
-    }
-  } else if (pid < 0) {
-    // Restore signal handling...
-    sigprocmask(SIG_SETMASK, &oldset, NULL);
-
-    // Return indicating failure...
-    return 0;
-  }
-
-  // Wait for the first child to exit...
-  while (waitpid(pid, &status, 0) < 0) {
-    if (errno != EINTR) {
-      // Someone else grabbed the child status...
-      if (msg) snprintf(msg, msglen, "waitpid(%ld) failed: %s", (long)pid,
-                        strerror(errno));
-
-      // Restore signal handling...
-      sigprocmask(SIG_SETMASK, &oldset, NULL);
-
-      // Return indicating failure...
-      return 0;
-    }
-  }
-
-  // Restore signal handling...
-  sigprocmask(SIG_SETMASK, &oldset, NULL);
-
-  // Return indicating success...
-  return 1;
-}
-#endif // !WIN32
-
-
-#ifdef TEST
-//
-// Test code...
-//
-
-// Open the URI on the command-line...
-int main(int argc, char **argv) {
-  char msg[1024];
-
-
-  if (argc != 2) {
-    puts("Usage: fl_open_uri URI");
-    return 1;
-  }
-
-  if (!fl_open_uri(argv[1], msg, sizeof(msg))) {
-    puts(msg);
-    return 1;
-  } else return 0;
-}
-#endif // TEST
-
-
-//
-// End of "$Id: fl_open_uri.cxx 8063 2010-12-19 21:20:10Z matt $".
-//
diff --git a/common/fltk/src/fl_oval_box.cxx b/common/fltk/src/fl_oval_box.cxx
deleted file mode 100644
index 0dad6d7..0000000
--- a/common/fltk/src/fl_oval_box.cxx
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// "$Id: fl_oval_box.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Oval box drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// Less-used box types are in separate files so they are not linked
-// in if not used.
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-static void fl_oval_flat_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(c);
-  fl_pie(x, y, w, h, 0, 360);
-}
-
-static void fl_oval_frame(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(c);
-  fl_arc(x, y, w, h, 0, 360);
-}
-
-static void fl_oval_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_oval_flat_box(x,y,w,h,c);
-  fl_oval_frame(x,y,w,h,FL_BLACK);
-}
-
-static void fl_oval_shadow_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_oval_flat_box(x+3,y+3,w,h,FL_DARK3);
-  fl_oval_box(x,y,w,h,c);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-Fl_Boxtype fl_define_FL_OVAL_BOX() {
-  fl_internal_boxtype(_FL_OSHADOW_BOX,fl_oval_shadow_box);
-  fl_internal_boxtype(_FL_OVAL_FRAME,fl_oval_frame);
-  fl_internal_boxtype(_FL_OFLAT_BOX,fl_oval_flat_box);
-  fl_internal_boxtype(_FL_OVAL_BOX,fl_oval_box);
-  return _FL_OVAL_BOX;
-}
-
-//
-// End of "$Id: fl_oval_box.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_overlay.cxx b/common/fltk/src/fl_overlay.cxx
deleted file mode 100644
index adcd871..0000000
--- a/common/fltk/src/fl_overlay.cxx
+++ /dev/null
@@ -1,129 +0,0 @@
-//
-// "$Id: fl_overlay.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Overlay support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Extremely limited "overlay" support.  You can use this to drag out
-// a rectangle in response to mouse events.  It is your responsibility
-// to erase the overlay before drawing anything that might intersect
-// it.
-
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#ifdef __APPLE__
-#include <config.h>
-#endif
-
-//#define USE_XOR
-
-static int px,py,pw,ph;
-
-#ifndef USE_XOR
-#include <stdlib.h>
-static uchar *bgN = 0L, *bgS = 0L, *bgE = 0L, *bgW = 0L;
-static int bgx, bgy, bgw, bgh;
-#endif
-
-static void draw_current_rect() {
-#ifdef USE_XOR
-# if defined(USE_X11)
-  XSetFunction(fl_display, fl_gc, GXxor);
-  XSetForeground(fl_display, fl_gc, 0xffffffff);
-  XDrawRectangle(fl_display, fl_window, fl_gc, px, py, pw, ph);
-  XSetFunction(fl_display, fl_gc, GXcopy);
-# elif defined(WIN32)
-  int old = SetROP2(fl_gc, R2_NOT);
-  fl_rect(px, py, pw, ph);
-  SetROP2(fl_gc, old);
-# elif defined(__APPLE_QUARTZ__)
-  // warning: Quartz does not support xor drawing
-  // Use the Fl_Overlay_Window instead.
-  fl_color(FL_WHITE);
-  fl_rect(px, py, pw, ph);
-# else
-#  error unsupported platform
-# endif
-#else
-  if (bgN) { free(bgN); bgN = 0L; }
-  if (bgS) { free(bgS); bgS = 0L; }
-  if (bgE) { free(bgE); bgE = 0L; }
-  if (bgW) { free(bgW); bgW = 0L; }
-  if (pw>0 && ph>0) {
-    bgE = fl_read_image(0L, px+pw-1, py, 1, ph);
-    bgW = fl_read_image(0L, px, py, 1, ph);
-    bgS = fl_read_image(0L, px, py+ph-1, pw, 1);
-    bgN = fl_read_image(0L, px, py, pw, 1);
-    bgx = px; bgy = py;
-    bgw = pw; bgh = ph;
-  }
-  fl_color(FL_WHITE);
-  fl_line_style(FL_SOLID);
-  fl_rect(px, py, pw, ph);
-  fl_color(FL_BLACK);
-  fl_line_style(FL_DOT);
-  fl_rect(px, py, pw, ph);
-  fl_line_style(FL_SOLID);
-#endif
-}
-
-static void erase_current_rect() {
-#ifdef USE_XOR
-# ifdef __APPLE_QUARTZ__
-  fl_rect(px, py, pw, ph);
-# else
-  draw_current_rect();
-# endif
-#else
-  if (bgN) fl_draw_image(bgN, bgx, bgy, bgw, 1);
-  if (bgS) fl_draw_image(bgS, bgx, bgy+bgh-1, bgw, 1);
-  if (bgW) fl_draw_image(bgW, bgx, bgy, 1, bgh);
-  if (bgE) fl_draw_image(bgE, bgx+bgw-1, bgy, 1, bgh);
-#endif
-}
-
-/**
-  Erase a selection rectangle without drawing a new one
-  */
-void fl_overlay_clear() {
-  if (pw > 0) {erase_current_rect(); pw = 0;}
-}
-
-/**
-  Draws a selection rectangle, erasing a previous one by XOR'ing it first.
-  */
-void fl_overlay_rect(int x, int y, int w, int h) {
-  if (w < 0) {x += w; w = -w;} else if (!w) w = 1;
-  if (h < 0) {y += h; h = -h;} else if (!h) h = 1;
-  if (pw > 0) {
-    if (x==px && y==py && w==pw && h==ph) return;
-    erase_current_rect();
-  }
-  px = x; py = y; pw = w; ph = h;
-  draw_current_rect();
-}
-
-//
-// End of "$Id: fl_overlay.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_overlay_visual.cxx b/common/fltk/src/fl_overlay_visual.cxx
deleted file mode 100644
index 392898f..0000000
--- a/common/fltk/src/fl_overlay_visual.cxx
+++ /dev/null
@@ -1,105 +0,0 @@
-//
-// "$Id: fl_overlay_visual.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// X overlay support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Return an overlay visual, if any.  Also allocate a colormap and
-// record the depth for fl_color() to use.
-// Another disgusting X interface, based on code extracted and
-// purified with great difficulty from XLayerUtil.cxx:
-
-#include <config.h>
-#if HAVE_OVERLAY
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-// SERVER_OVERLAY_VISUALS property element:
-struct OverlayInfo {
-  long overlay_visual;
-  long transparent_type;
-  long value;
-  long layer;
-};
-
-extern Colormap fl_overlay_colormap;
-extern XVisualInfo* fl_overlay_visual;
-extern ulong fl_transparent_pixel;
-
-XVisualInfo *fl_find_overlay_visual() {
-  static char beenhere;
-  if (beenhere) return fl_overlay_visual;
-  beenhere = 1;
-
-  fl_open_display();
-  Atom overlayVisualsAtom =
-    XInternAtom(fl_display,"SERVER_OVERLAY_VISUALS",1);
-  if (!overlayVisualsAtom) return 0;
-  OverlayInfo *overlayInfo;
-  ulong sizeData, bytesLeft;
-  Atom actualType;
-  int actualFormat;
-  if (XGetWindowProperty(fl_display, RootWindow(fl_display, fl_screen),
-			 overlayVisualsAtom, 0L, 10000L, False,
-			 overlayVisualsAtom, &actualType, &actualFormat,
-			 &sizeData, &bytesLeft,
-			 (unsigned char **) &overlayInfo)) return 0;
-
-  if (actualType == overlayVisualsAtom && actualFormat == 32) {
-    int n = int(sizeData/4);
-    XVisualInfo* v = 0;
-    // find the greatest depth that has a transparent pixel:
-    for (int i = 0; i < n; i++) {
-      if (overlayInfo[i].transparent_type != 1) continue;
-      if (overlayInfo[i].layer <= 0) continue;
-      XVisualInfo templt;
-      templt.visualid = overlayInfo[i].overlay_visual;
-      int num;
-      XVisualInfo *v1=XGetVisualInfo(fl_display, VisualIDMask, &templt, &num);
-      if (v1->screen == fl_screen && v1->c_class == PseudoColor
-	  && (!v || v1->depth > v->depth && v1->depth <= 8)) {
-	if (v) XFree((char*)v);
-	v = v1;
-	fl_transparent_pixel = overlayInfo[i].value;
-      } else {
-	XFree((char*)v1);
-      }
-    }
-    if (v) {
-      fl_overlay_visual = v;
-      fl_overlay_colormap = 
-	XCreateColormap(fl_display, RootWindow(fl_display, fl_screen),
-			v->visual, AllocNone);
-    }
-  }
-  XFree((char*)overlayInfo);
-  //printf("overlay visual %ld selected\n", fl_overlay_visual->visualid);
-  return fl_overlay_visual;
-}
-
-#endif
-
-//
-// End of "$Id: fl_overlay_visual.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_plastic.cxx b/common/fltk/src/fl_plastic.cxx
deleted file mode 100644
index 28a50c7..0000000
--- a/common/fltk/src/fl_plastic.cxx
+++ /dev/null
@@ -1,381 +0,0 @@
-//
-// "$Id: fl_plastic.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// "Plastic" drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// These box types provide a cross between Aqua and KDE buttons; kindof
-// like translucent plastic buttons...
-//
-// Copyright 2001-2010 by Michael Sweet.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Box drawing code for an obscure box type.
-// These box types are in separate files so they are not linked
-// in if not used.
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-
-//
-// Uncomment the following line to restore the old plastic box type
-// appearance.
-//
-
-//#define USE_OLD_PLASTIC_BOX
-#define USE_OLD_PLASTIC_COLOR
-
-extern uchar *fl_gray_ramp();
-
-inline Fl_Color shade_color(uchar gc, Fl_Color bc) {
-#ifdef USE_OLD_PLASTIC_COLOR
-  return fl_color_average((Fl_Color)gc, bc, 0.75f);
-#else
-  unsigned	grgb = Fl::get_color((Fl_Color)gc),
-		brgb = Fl::get_color(bc);
-  int		red, green, blue, gray;
-
-
-  gray  = ((grgb >> 24) & 255);
-  red   = gray * ((brgb >> 24) & 255) / 255 + gray * gray / 510;
-  gray  = ((grgb >> 16) & 255);
-  green = gray * ((brgb >> 16) & 255) / 255 + gray * gray / 510;
-  gray  = ((grgb >> 8) & 255);
-  blue  = gray * ((brgb >> 8) & 255) / 255 + gray * gray / 510;
-
-  if (red > 255)
-    red = 255;
-
-  if (green > 255)
-    green = 255;
-
-  if (blue > 255)
-    blue = 255;
-
-  if (Fl::draw_box_active())
-    return fl_rgb_color(red, green, blue);
-  else
-    return fl_color_average(FL_GRAY, fl_rgb_color(red, green, blue), 0.75f);
-#endif // USE_OLD_PLASTIC_COLOR
-}
-
-
-static void frame_rect(int x, int y, int w, int h, const char *c, Fl_Color bc) {
-  uchar *g = fl_gray_ramp();
-  int b = strlen(c) / 4 + 1;
-
-  for (x += b, y += b, w -= 2 * b, h -= 2 * b; b > 1; b --)
-  {
-    // Draw lines around the perimeter of the button, 4 colors per
-    // circuit.
-    fl_color(shade_color(g[(int)*c++], bc));
-    fl_line(x, y + h + b, x + w - 1, y + h + b, x + w + b - 1, y + h);
-    fl_color(shade_color(g[(int)*c++], bc));
-    fl_line(x + w + b - 1, y + h, x + w + b - 1, y, x + w - 1, y - b);
-    fl_color(shade_color(g[(int)*c++], bc));
-    fl_line(x + w - 1, y - b, x, y - b, x - b, y);
-    fl_color(shade_color(g[(int)*c++], bc));
-    fl_line(x - b, y, x - b, y + h, x, y + h + b);
-  }
-}
-
-
-static void frame_round(int x, int y, int w, int h, const char *c, Fl_Color bc) {
-  uchar *g = fl_gray_ramp();
-  int b = strlen(c) / 4 + 1;
-
-  if (w==h) {
-    for (; b > 1; b --, x ++, y ++, w -= 2, h -= 2)
-    {
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, h, 45.0, 135.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, h, 315.0, 405.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, h, 225.0, 315.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, h, 135.0, 225.0);
-    }
-  } else if (w>h) {
-    int d = h/2;
-    for (; b > 1; d--, b --, x ++, y ++, w -= 2, h -= 2)
-    {
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, h, h, 90.0, 135.0);
-      fl_xyline(x+d, y, x+w-d);
-      fl_arc(x+w-h, y, h, h, 45.0, 90.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x+w-h, y, h, h, 315.0, 405.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x+w-h, y, h, h, 270.0, 315.0);
-      fl_xyline(x+d, y+h-1, x+w-d);
-      fl_arc(x, y, h, h, 225.0, 270.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, h, h, 135.0, 225.0);
-    }
-  } else if (w<h) {
-    int d = w/2;
-    for (; b > 1; d--, b --, x ++, y ++, w -= 2, h -= 2)
-    {
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, w, 45.0, 135.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, w, 0.0, 45.0);
-      fl_yxline(x+w-1, y+d, y+h-d);
-      fl_arc(x, y+h-w, w, w, 315.0, 360.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y+h-w, w, w, 225.0, 315.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y+h-w, w, w, 180.0, 225.0);
-      fl_yxline(x, y+d, y+h-d);
-      fl_arc(x, y, w, w, 135.0, 180.0);
-    }
-  }
-}
-
-
-static void shade_rect(int x, int y, int w, int h, const char *c, Fl_Color bc) {
-  uchar		*g = fl_gray_ramp();
-  int		i, j;
-  int		clen = strlen(c) - 1;
-  int		chalf = clen / 2;
-  int		cstep = 1;
-
-  if (h < (w * 2)) {
-    // Horizontal shading...
-    if (clen >= h) cstep = 2;
-
-    for (i = 0, j = 0; j < chalf; i ++, j += cstep) {
-      // Draw the top line and points...
-      fl_color(shade_color(g[(int)c[i]], bc));
-      fl_xyline(x + 1, y + i, x + w - 2);
-
-      fl_color(shade_color(g[c[i] - 2], bc));
-      fl_point(x, y + i + 1);
-      fl_point(x + w - 1, y + i + 1);
-
-      // Draw the bottom line and points...
-      fl_color(shade_color(g[(int)c[clen - i]], bc));
-      fl_xyline(x + 1, y + h - i, x + w - 2);
-
-      fl_color(shade_color(g[c[clen - i] - 2], bc));
-      fl_point(x, y + h - i);
-      fl_point(x + w - 1, y + h - i);
-    }
-
-    // Draw the interior and sides...
-    i = chalf / cstep;
-
-    fl_color(shade_color(g[(int)c[chalf]], bc));
-    fl_rectf(x + 1, y + i, w - 2, h - 2 * i + 1);
-
-    fl_color(shade_color(g[c[chalf] - 2], bc));
-    fl_yxline(x, y + i, y + h - i);
-    fl_yxline(x + w - 1, y + i, y + h - i);
-  } else {
-    // Vertical shading...
-    if (clen >= w) cstep = 2;
-
-    for (i = 0, j = 0; j < chalf; i ++, j += cstep) {
-      // Draw the left line and points...
-      fl_color(shade_color(g[(int)c[i]], bc));
-      fl_yxline(x + i, y + 1, y + h - 1);
-
-      fl_color(shade_color(g[c[i] - 2], bc));
-      fl_point(x + i + 1, y);
-      fl_point(x + i + 1, y + h);
-
-      // Draw the right line and points...
-      fl_color(shade_color(g[(int)c[clen - i]], bc));
-      fl_yxline(x + w - 1 - i, y + 1, y + h - 1);
-
-      fl_color(shade_color(g[c[clen - i] - 2], bc));
-      fl_point(x + w - 2 - i, y);
-      fl_point(x + w - 2 - i, y + h);
-    }
-
-    // Draw the interior, top, and bottom...
-    i = chalf / cstep;
-
-    fl_color(shade_color(g[(int)c[chalf]], bc));
-    fl_rectf(x + i, y + 1, w - 2 * i, h - 1);
-
-    fl_color(shade_color(g[c[chalf] - 2], bc));
-    fl_xyline(x + i, y, x + w - i);
-    fl_xyline(x + i, y + h, x + w - i);
-  }
-}
-
-static void shade_round(int x, int y, int w, int h, const char *c, Fl_Color bc) {
-  uchar		*g = fl_gray_ramp();
-  int		i;
-  int		clen = strlen(c) - 1;
-  int		chalf = clen / 2;
-
-  if (w>h) {
-    int d = h/2;
-    const int na = 8;
-    for (i=0; i<chalf; i++, d--, x++, y++, w-=2, h-=2)
-    {
-      fl_color(shade_color(g[(int)c[i]], bc));
-      fl_pie(x, y, h, h, 90.0, 135.0+i*na);
-      fl_xyline(x+d, y, x+w-d);
-      fl_pie(x+w-h, y, h, h, 45.0+i*na, 90.0);
-      fl_color(shade_color(g[(int)c[i] - 2], bc));
-      fl_pie(x+w-h, y, h, h, 315.0+i*na, 405.0+i*na);
-      fl_color(shade_color(g[(int)c[clen - i]], bc));
-      fl_pie(x+w-h, y, h, h, 270.0, 315.0+i*na);
-      fl_xyline(x+d, y+h-1, x+w-d);
-      fl_pie(x, y, h, h, 225.0+i*na, 270.0);
-      fl_color(shade_color(g[c[(int)clen - i] - 2], bc));
-      fl_pie(x, y, h, h, 135.0+i*na, 225.0+i*na);
-    }
-    fl_color(shade_color(g[(int)c[chalf]], bc));
-    fl_rectf(x+d, y, w-h+1, h+1);
-    fl_pie(x, y, h, h, 90.0, 270.0);
-    fl_pie(x+w-h, y, h, h, 270.0, 90.0);
-  } else {
-    int d = w/2;
-    const int na = 8;
-    for (i=0; i<chalf; i++, d--, x++, y++, w-=2, h-=2)
-    {
-      fl_color(shade_color(g[(int)c[i]], bc));
-      fl_pie(x, y, w, w, 45.0+i*na, 135.0+i*na);
-      fl_color(shade_color(g[c[i] - 2], bc));
-      fl_pie(x, y, w, w, 0.0, 45.0+i*na);
-      fl_yxline(x+w-1, y+d, y+h-d);
-      fl_pie(x, y+h-w, w, w, 315.0+i*na, 360.0);
-      fl_color(shade_color(g[(int)c[clen - i]], bc));
-      fl_pie(x, y+h-w, w, w, 225.0+i*na, 315.0+i*na);
-      fl_color(shade_color(g[c[clen - i] - 2], bc));
-      fl_pie(x, y+h-w, w, w, 180.0, 225.0+i*na);
-      fl_yxline(x, y+d, y+h-d);
-      fl_pie(x, y, w, w, 135.0+i*na, 180.0);
-    }
-    fl_color(shade_color(g[(int)c[chalf]], bc));
-    fl_rectf(x, y+d, w+1, h-w+1);
-    fl_pie(x, y, w, w, 0.0, 180.0);
-    fl_pie(x, y+h-w, w, w, 180.0, 360.0);
-  }
-}
-
-
-static void up_frame(int x, int y, int w, int h, Fl_Color c) {
-  frame_rect(x, y, w, h - 1, "KLDIIJLM", c);
-}
-
-
-static void narrow_thin_box(int x, int y, int w, int h, Fl_Color c) {
-  if (h<=0 || w<=0) return;
-  uchar *g = fl_gray_ramp();
-  fl_color(shade_color(g['R'], c));
-  fl_rectf(x+1, y+1, w-2, h-2);
-  fl_color(shade_color(g['I'], c));
-  if (w > 1) {
-    fl_xyline(x+1, y, x+w-2);
-    fl_xyline(x+1, y+h-1, x+w-2);
-  }
-  if (h > 1) {
-    fl_yxline(x, y+1, y+h-2);
-    fl_yxline(x+w-1, y+1, y+h-2);
-  }
-}
-
-
-static void thin_up_box(int x, int y, int w, int h, Fl_Color c) {
-#ifdef USE_OLD_PLASTIC_BOX
-  shade_rect(x + 2, y + 2, w - 4, h - 5, "RVQNOPQRSTUVWVQ", c);
-  up_frame(x, y, w, h, c);
-#else
-  if (w > 4 && h > 4) {
-    shade_rect(x + 1, y + 1, w - 2, h - 3, "RQOQSUWQ", c);
-    frame_rect(x, y, w, h - 1, "IJLM", c);
-  } else {
-    narrow_thin_box(x, y, w, h, c);
-  }
-#endif // USE_OLD_PLASTIC_BOX
-}
-
-
-static void up_box(int x, int y, int w, int h, Fl_Color c) {
-#ifdef USE_OLD_PLASTIC_BOX
-  shade_rect(x + 2, y + 2, w - 4, h - 5, "RVQNOPQRSTUVWVQ", c);
-  up_frame(x, y, w, h, c);
-#else
-  if (w > 8 && h > 8) {
-    shade_rect(x + 1, y + 1, w - 2, h - 3, "RVQNOPQRSTUVWVQ", c);
-    frame_rect(x, y, w, h - 1, "IJLM", c);
-  } else {
-    thin_up_box(x, y, w, h, c);
-  }
-#endif // USE_OLD_PLASTIC_BOX
-}
-
-
-static void up_round(int x, int y, int w, int h, Fl_Color c) {
-  shade_round(x, y, w, h, "RVQNOPQRSTUVWVQ", c);
-  frame_round(x, y, w, h, "IJLM", c);
-}
-
-
-static void down_frame(int x, int y, int w, int h, Fl_Color c) {
-  frame_rect(x, y, w, h - 1, "LLLLTTRR", c);
-}
-
-
-static void down_box(int x, int y, int w, int h, Fl_Color c) {
-  if (w > 6 && h > 6) {
-    shade_rect(x + 2, y + 2, w - 4, h - 5, "STUVWWWVT", c);
-    down_frame(x, y, w, h, c);
-  }
-  else {
-    narrow_thin_box(x, y, w, h, c);
-  }
-}
-
-
-static void down_round(int x, int y, int w, int h, Fl_Color c) {
-  shade_round(x, y, w, h, "STUVWWWVT", c);
-  frame_round(x, y, w, h, "IJLM", c);
-}
-
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-
-
-Fl_Boxtype fl_define_FL_PLASTIC_UP_BOX() {
-  fl_internal_boxtype(_FL_PLASTIC_UP_BOX, up_box);
-  fl_internal_boxtype(_FL_PLASTIC_DOWN_BOX, down_box);
-  fl_internal_boxtype(_FL_PLASTIC_UP_FRAME, up_frame);
-  fl_internal_boxtype(_FL_PLASTIC_DOWN_FRAME, down_frame);
-  fl_internal_boxtype(_FL_PLASTIC_THIN_UP_BOX, thin_up_box);
-  fl_internal_boxtype(_FL_PLASTIC_THIN_DOWN_BOX, down_box);
-  fl_internal_boxtype(_FL_PLASTIC_ROUND_UP_BOX, up_round);
-  fl_internal_boxtype(_FL_PLASTIC_ROUND_DOWN_BOX, down_round);
-
-  return _FL_PLASTIC_UP_BOX;
-}
-
-
-//
-// End of "$Id: fl_plastic.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_read_image.cxx b/common/fltk/src/fl_read_image.cxx
deleted file mode 100644
index f02cbea..0000000
--- a/common/fltk/src/fl_read_image.cxx
+++ /dev/null
@@ -1,509 +0,0 @@
-//
-// "$Id: fl_read_image.cxx 8593 2011-04-15 21:38:05Z manolo $"
-//
-// X11 image reading routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/x.H>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-
-#ifdef DEBUG
-#  include <stdio.h>
-#endif // DEBUG
-
-#ifdef WIN32
-#  include "fl_read_image_win32.cxx"
-#elif defined(__APPLE__)
-#  include "fl_read_image_mac.cxx"
-#else
-#  include <X11/Xutil.h>
-#  ifdef __sgi
-#    include <X11/extensions/readdisplay.h>
-#  else
-#    include <stdlib.h>
-#  endif // __sgi
-
-// Defined in fl_color.cxx
-extern uchar fl_redmask, fl_greenmask, fl_bluemask;
-extern int fl_redshift, fl_greenshift, fl_blueshift, fl_extrashift;
-
-//
-// 'fl_subimage_offsets()' - Calculate subimage offsets for an axis
-static inline int
-fl_subimage_offsets(int a, int aw, int b, int bw, int &obw)
-{
-  int off;
-  int ob;
-
-  if (b >= a) {
-    ob = b;
-    off = 0;
-  } else {
-    ob = a;
-    off = a - b;
-  }
-
-  bw -= off;
-
-  if (ob + bw <= a + aw) {
-    obw = bw;
-  } else {
-    obw = (a + aw) - ob;
-  }
-
-  return off;
-}
-
-// this handler will catch and ignore exceptions during XGetImage
-// to avoid an application crash
-static int xgetimageerrhandler(Display *display, XErrorEvent *error) {
-  return 0;
-}
-
-//
-// 'fl_read_image()' - Read an image from the current window.
-//
-
-uchar *				// O - Pixel buffer or NULL if failed
-fl_read_image(uchar *p,		// I - Pixel buffer or NULL to allocate
-              int   X,		// I - Left position
-	      int   Y,		// I - Top position
-	      int   w,		// I - Width of area to read
-	                        // negative allows capture of window title bar and frame
-	      int   h,		// I - Height of area to read
-	      int   alpha) {	// I - Alpha value for image (0 for none)
-  XImage	*image;		// Captured image
-  int		i, maxindex;	// Looping vars
-  int           x, y;		// Current X & Y in image
-  int		d;		// Depth of image
-  unsigned char *line,		// Array to hold image row
-		*line_ptr;	// Pointer to current line image
-  unsigned char	*pixel;		// Current color value
-  XColor	colors[4096];	// Colors from the colormap...
-  unsigned char	cvals[4096][3];	// Color values from the colormap...
-  unsigned	index_mask,
-		index_shift,
-		red_mask,
-		red_shift,
-		green_mask,
-		green_shift,
-		blue_mask,
-		blue_shift;
-
-
-  //
-  // Under X11 we have the option of the XGetImage() interface or SGI's
-  // ReadDisplay extension which does all of the really hard work for
-  // us...
-  //
-  int allow_outside = w < 0;    // negative w allows negative X or Y, that is, window frame
-  if (w < 0) w = - w;
-
-#  ifdef __sgi
-  if (XReadDisplayQueryExtension(fl_display, &i, &i)) {
-    image = XReadDisplay(fl_display, fl_window, X, Y, w, h, 0, NULL);
-  } else
-#  else
-  image = 0;
-#  endif // __sgi
-
-  if (!image) {
-    // fetch absolute coordinates
-    int dx, dy, sx, sy, sw, sh;
-    Window child_win;
-    
-    Fl_Window *win;
-    if (allow_outside) win = (Fl_Window*)1;
-    else win = fl_find(fl_window);
-    if (win) {
-      XTranslateCoordinates(fl_display, fl_window,
-          RootWindow(fl_display, fl_screen), X, Y, &dx, &dy, &child_win);
-      // screen dimensions
-      Fl::screen_xywh(sx, sy, sw, sh, fl_screen);
-    }
-    if (!win || (dx >= sx && dy >= sy && dx + w <= sw && dy + h <= sh)) {
-      // the image is fully contained, we can use the traditional method
-      // however, if the window is obscured etc. the function will still fail. Make sure we
-      // catch the error and continue, otherwise an exception will be thrown.
-      XErrorHandler old_handler = XSetErrorHandler(xgetimageerrhandler);
-      image = XGetImage(fl_display, fl_window, X, Y, w, h, AllPlanes, ZPixmap);
-      XSetErrorHandler(old_handler);
-    } else {
-      // image is crossing borders, determine visible region
-      int nw, nh, noffx, noffy;
-      noffx = fl_subimage_offsets(sx, sw, dx, w, nw);
-      noffy = fl_subimage_offsets(sy, sh, dy, h, nh);
-      if (nw <= 0 || nh <= 0) return 0;
-
-      // allocate the image
-      int bpp = fl_visual->depth + ((fl_visual->depth / 8) % 2) * 8;
-      char* buf = (char*)malloc(bpp / 8 * w * h);
-      image = XCreateImage(fl_display, fl_visual->visual,
-	  fl_visual->depth, ZPixmap, 0, buf, w, h, bpp, 0);
-      if (!image) {
-	if (buf) free(buf);
-	return 0;
-      }
-
-      XErrorHandler old_handler = XSetErrorHandler(xgetimageerrhandler);
-      XImage *subimg = XGetSubImage(fl_display, fl_window, X + noffx, Y + noffy,
-                                    nw, nh, AllPlanes, ZPixmap, image, noffx, noffy);
-      XSetErrorHandler(old_handler);
-      if (!subimg) {
-        XDestroyImage(image);
-        return 0;
-      }
-    }
-  }
-
-  if (!image) return 0;
-
-#ifdef DEBUG
-  printf("width            = %d\n", image->width);
-  printf("height           = %d\n", image->height);
-  printf("xoffset          = %d\n", image->xoffset);
-  printf("format           = %d\n", image->format);
-  printf("data             = %p\n", image->data);
-  printf("byte_order       = %d\n", image->byte_order);
-  printf("bitmap_unit      = %d\n", image->bitmap_unit);
-  printf("bitmap_bit_order = %d\n", image->bitmap_bit_order);
-  printf("bitmap_pad       = %d\n", image->bitmap_pad);
-  printf("depth            = %d\n", image->depth);
-  printf("bytes_per_line   = %d\n", image->bytes_per_line);
-  printf("bits_per_pixel   = %d\n", image->bits_per_pixel);
-  printf("red_mask         = %08x\n", image->red_mask);
-  printf("green_mask       = %08x\n", image->green_mask);
-  printf("blue_mask        = %08x\n", image->blue_mask);
-  printf("map_entries      = %d\n", fl_visual->visual->map_entries);
-#endif // DEBUG
-
-  d = alpha ? 4 : 3;
-
-  // Allocate the image data array as needed...
-  if (!p) p = new uchar[w * h * d];
-
-  // Initialize the default colors/alpha in the whole image...
-  memset(p, alpha, w * h * d);
-
-  // Check that we have valid mask/shift values...
-  if (!image->red_mask && image->bits_per_pixel > 12) {
-    // Greater than 12 bits must be TrueColor...
-    image->red_mask   = fl_visual->visual->red_mask;
-    image->green_mask = fl_visual->visual->green_mask;
-    image->blue_mask  = fl_visual->visual->blue_mask;
-
-#ifdef DEBUG
-    puts("\n---- UPDATED ----");
-    printf("fl_redmask       = %08x\n", fl_redmask);
-    printf("fl_redshift      = %d\n", fl_redshift);
-    printf("fl_greenmask     = %08x\n", fl_greenmask);
-    printf("fl_greenshift    = %d\n", fl_greenshift);
-    printf("fl_bluemask      = %08x\n", fl_bluemask);
-    printf("fl_blueshift     = %d\n", fl_blueshift);
-    printf("red_mask         = %08x\n", image->red_mask);
-    printf("green_mask       = %08x\n", image->green_mask);
-    printf("blue_mask        = %08x\n", image->blue_mask);
-#endif // DEBUG
-  }
-
-  // Check if we have colormap image...
-  if (!image->red_mask) {
-    // Get the colormap entries for this window...
-    maxindex = fl_visual->visual->map_entries;
-
-    for (i = 0; i < maxindex; i ++) colors[i].pixel = i;
-
-    XQueryColors(fl_display, fl_colormap, colors, maxindex);
-
-    for (i = 0; i < maxindex; i ++) {
-      cvals[i][0] = colors[i].red >> 8;
-      cvals[i][1] = colors[i].green >> 8;
-      cvals[i][2] = colors[i].blue >> 8;
-    }
-
-    // Read the pixels and output an RGB image...
-    for (y = 0; y < image->height; y ++) {
-      pixel = (unsigned char *)(image->data + y * image->bytes_per_line);
-      line  = p + y * w * d;
-
-      switch (image->bits_per_pixel) {
-        case 1 :
-	  for (x = image->width, line_ptr = line, index_mask = 128;
-	       x > 0;
-	       x --, line_ptr += d) {
-	    if (*pixel & index_mask) {
-	      line_ptr[0] = cvals[1][0];
-	      line_ptr[1] = cvals[1][1];
-	      line_ptr[2] = cvals[1][2];
-            } else {
-	      line_ptr[0] = cvals[0][0];
-	      line_ptr[1] = cvals[0][1];
-	      line_ptr[2] = cvals[0][2];
-            }
-
-            if (index_mask > 1) {
-	      index_mask >>= 1;
-	    } else {
-              index_mask = 128;
-              pixel ++;
-            }
-	  }
-          break;
-
-        case 2 :
-	  for (x = image->width, line_ptr = line, index_shift = 6;
-	       x > 0;
-	       x --, line_ptr += d) {
-	    i = (*pixel >> index_shift) & 3;
-
-	    line_ptr[0] = cvals[i][0];
-	    line_ptr[1] = cvals[i][1];
-	    line_ptr[2] = cvals[i][2];
-
-            if (index_shift > 0) {
-              index_mask >>= 2;
-              index_shift -= 2;
-            } else {
-              index_mask  = 192;
-              index_shift = 6;
-              pixel ++;
-            }
-	  }
-          break;
-
-        case 4 :
-	  for (x = image->width, line_ptr = line, index_shift = 4;
-	       x > 0;
-	       x --, line_ptr += d) {
-	    if (index_shift == 4) i = (*pixel >> 4) & 15;
-	    else i = *pixel & 15;
-
-	    line_ptr[0] = cvals[i][0];
-	    line_ptr[1] = cvals[i][1];
-	    line_ptr[2] = cvals[i][2];
-
-            if (index_shift > 0) {
-              index_shift = 0;
-	    } else {
-              index_shift = 4;
-              pixel ++;
-            }
-	  }
-          break;
-
-        case 8 :
-	  for (x = image->width, line_ptr = line;
-	       x > 0;
-	       x --, line_ptr += d, pixel ++) {
-	    line_ptr[0] = cvals[*pixel][0];
-	    line_ptr[1] = cvals[*pixel][1];
-	    line_ptr[2] = cvals[*pixel][2];
-	  }
-          break;
-
-        case 12 :
-	  for (x = image->width, line_ptr = line, index_shift = 0;
-	       x > 0;
-	       x --, line_ptr += d) {
-	    if (index_shift == 0) {
-	      i = ((pixel[0] << 4) | (pixel[1] >> 4)) & 4095;
-	    } else {
-	      i = ((pixel[1] << 8) | pixel[2]) & 4095;
-	    }
-
-	    line_ptr[0] = cvals[i][0];
-	    line_ptr[1] = cvals[i][1];
-	    line_ptr[2] = cvals[i][2];
-
-            if (index_shift == 0) {
-              index_shift = 4;
-            } else {
-              index_shift = 0;
-              pixel += 3;
-            }
-	  }
-          break;
-      }
-    }
-  } else {
-    // RGB(A) image, so figure out the shifts & masks...
-    red_mask  = image->red_mask;
-    red_shift = 0;
-
-    while ((red_mask & 1) == 0) {
-      red_mask >>= 1;
-      red_shift ++;
-    }
-
-    green_mask  = image->green_mask;
-    green_shift = 0;
-
-    while ((green_mask & 1) == 0) {
-      green_mask >>= 1;
-      green_shift ++;
-    }
-
-    blue_mask  = image->blue_mask;
-    blue_shift = 0;
-
-    while ((blue_mask & 1) == 0) {
-      blue_mask >>= 1;
-      blue_shift ++;
-    }
-
-    // Read the pixels and output an RGB image...
-    for (y = 0; y < image->height; y ++) {
-      pixel = (unsigned char *)(image->data + y * image->bytes_per_line);
-      line  = p + y * w * d;
-
-      switch (image->bits_per_pixel) {
-        case 8 :
-	  for (x = image->width, line_ptr = line;
-	       x > 0;
-	       x --, line_ptr += d, pixel ++) {
-	    i = *pixel;
-
-	    line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	    line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	    line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	  }
-          break;
-
-        case 12 :
-	  for (x = image->width, line_ptr = line, index_shift = 0;
-	       x > 0;
-	       x --, line_ptr += d) {
-	    if (index_shift == 0) {
-	      i = ((pixel[0] << 4) | (pixel[1] >> 4)) & 4095;
-	    } else {
-	      i = ((pixel[1] << 8) | pixel[2]) & 4095;
-            }
-
-	    line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	    line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	    line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-
-            if (index_shift == 0) {
-              index_shift = 4;
-            } else {
-              index_shift = 0;
-              pixel += 3;
-            }
-	  }
-          break;
-
-        case 16 :
-          if (image->byte_order == LSBFirst) {
-            // Little-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 2) {
-	      i = (pixel[1] << 8) | pixel[0];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  } else {
-            // Big-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 2) {
-	      i = (pixel[0] << 8) | pixel[1];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  }
-          break;
-
-        case 24 :
-          if (image->byte_order == LSBFirst) {
-            // Little-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 3) {
-	      i = (((pixel[2] << 8) | pixel[1]) << 8) | pixel[0];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  } else {
-            // Big-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 3) {
-	      i = (((pixel[0] << 8) | pixel[1]) << 8) | pixel[2];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  }
-          break;
-
-        case 32 :
-          if (image->byte_order == LSBFirst) {
-            // Little-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 4) {
-	      i = (((((pixel[3] << 8) | pixel[2]) << 8) | pixel[1]) << 8) | pixel[0];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  } else {
-            // Big-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 4) {
-	      i = (((((pixel[0] << 8) | pixel[1]) << 8) | pixel[2]) << 8) | pixel[3];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  }
-          break;
-      }
-    }
-  }
-
-  // Destroy the X image we've read and return the RGB(A) image...
-  XDestroyImage(image);
-
-  return p;
-}
-
-#endif
-
-//
-// End of "$Id: fl_read_image.cxx 8593 2011-04-15 21:38:05Z manolo $".
-//
diff --git a/common/fltk/src/fl_read_image_mac.cxx b/common/fltk/src/fl_read_image_mac.cxx
deleted file mode 100644
index da575b5..0000000
--- a/common/fltk/src/fl_read_image_mac.cxx
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// "$Id: fl_read_image_mac.cxx 8362 2011-02-02 18:39:34Z manolo $"
-//
-// WIN32 image reading routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-
-//
-// 'fl_read_image()' - Read an image from the current window or off-screen buffer.
-//
-
-uchar *				// O - Pixel buffer or NULL if failed
-fl_read_image(uchar *p,		// I - Pixel buffer or NULL to allocate
-              int   x,		// I - Left position
-	      int   y,		// I - Top position
-	      int   w,		// I - Width of area to read
-	      int   h,		// I - Height of area to read
-	      int   alpha) {	// I - Alpha value for image (0 for none)
-  uchar *base;
-  int rowBytes, delta;
-  if(fl_window == NULL) { // reading from an offscreen buffer
-    CGContextRef src = (CGContextRef)fl_gc;   // get bitmap context
-    base = (uchar *)CGBitmapContextGetData(src);  // get data
-    if(!base) return NULL;
-    int sw = CGBitmapContextGetWidth(src);
-    int sh = CGBitmapContextGetHeight(src);
-    rowBytes = CGBitmapContextGetBytesPerRow(src);
-    delta = CGBitmapContextGetBitsPerPixel(src)/8;
-    if( (sw - x < w) || (sh - y < h) )  return NULL;
-    }
-  else { // reading from current window
-    Fl_Window *window = Fl_Window::current();
-    while(window->window()) window = window->window();
-    base = Fl_X::bitmap_from_window_rect(window,x,y,w,h,&delta);
-    rowBytes = delta*w;
-    x = y = 0;
-    }
-  // Allocate the image data array as needed...
-  int d = alpha ? 4 : 3;
-  if (!p) p = new uchar[w * h * d];
-  // Initialize the default colors/alpha in the whole image...
-  memset(p, alpha, w * h * d);
-  // Copy the image from the off-screen buffer to the memory buffer.
-  int           idx, idy;	// Current X & Y in image
-  uchar *pdst, *psrc;
-  for (idy = y, pdst = p; idy < h + y; idy ++) {
-    for (idx = 0, psrc = base + idy * rowBytes + x * delta; idx < w; idx ++, psrc += delta, pdst += d) {
-      pdst[0] = psrc[0];  // R
-      pdst[1] = psrc[1];  // G
-      pdst[2] = psrc[2];  // B
-    }
-  }
-  if(fl_window != NULL) delete[] base;
-  return p;
-}
-
-
-//
-// End of "$Id: fl_read_image_mac.cxx 8362 2011-02-02 18:39:34Z manolo $".
-//
diff --git a/common/fltk/src/fl_read_image_win32.cxx b/common/fltk/src/fl_read_image_win32.cxx
deleted file mode 100644
index a58bafa..0000000
--- a/common/fltk/src/fl_read_image_win32.cxx
+++ /dev/null
@@ -1,133 +0,0 @@
-//
-// "$Id: fl_read_image_win32.cxx 8595 2011-04-17 08:48:40Z manolo $"
-//
-// WIN32 image reading routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// 'fl_read_image()' - Read an image from the current window.
-//
-
-uchar *				// O - Pixel buffer or NULL if failed
-fl_read_image(uchar *p,		// I - Pixel buffer or NULL to allocate
-              int   X,		// I - Left position
-	      int   Y,		// I - Top position
-	      int   w,		// I - Width of area to read
-	      int   h,		// I - Height of area to read
-	      int   alpha) {	// I - Alpha value for image (0 for none)
-
-  int	d;			// Depth of image
-
-  // Allocate the image data array as needed...
-  d = alpha ? 4 : 3;
-
-  if (!p) p = new uchar[w * h * d];
-
-  // Initialize the default colors/alpha in the whole image...
-  memset(p, alpha, w * h * d);
-
-  // Grab all of the pixels in the image...
-
-  // Assure that we are not trying to read non-existing data. If it is so, the
-  // function should still work, but the out-of-bounds part of the image is
-  // untouched (initialized with the alpha value or 0 (black), resp.).
-
-  int ww = w; // We need the original width for output data line size
-
-  int shift_x = 0; // X target shift if X modified
-  int shift_y = 0; // Y target shift if X modified
-
-  if (X < 0) {
-    shift_x = -X;
-    w += X;
-    X = 0;
-  }
-  if (Y < 0) {
-    shift_y = -Y;
-    h += Y;
-    Y = 0;
-  }
-
-  if (h < 1 || w < 1) return p;		// nothing to copy
-
-  int line_size = ((3*w+3)/4) * 4;	// each line is aligned on a DWORD (4 bytes)
-  uchar *dib = new uchar[line_size*h];	// create temporary buffer to read DIB
-
-  // fill in bitmap info for GetDIBits
-
-  BITMAPINFO   bi;
-  bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
-  bi.bmiHeader.biWidth = w;
-  bi.bmiHeader.biHeight = -h;		// negative => top-down DIB
-  bi.bmiHeader.biPlanes = 1;
-  bi.bmiHeader.biBitCount = 24;		// 24 bits RGB
-  bi.bmiHeader.biCompression = BI_RGB;
-  bi.bmiHeader.biSizeImage = 0;
-  bi.bmiHeader.biXPelsPerMeter = 0;
-  bi.bmiHeader.biYPelsPerMeter = 0;
-  bi.bmiHeader.biClrUsed = 0;
-  bi.bmiHeader.biClrImportant = 0;
-
-  // copy bitmap from original DC (Window, Fl_Offscreen, ...)
-
-  HDC hdc = CreateCompatibleDC(fl_gc);
-  HBITMAP hbm = CreateCompatibleBitmap(fl_gc,w,h);
-
-  int save_dc = SaveDC(hdc);			// save context for cleanup
-  SelectObject(hdc,hbm);			// select bitmap
-  BitBlt(hdc,0,0,w,h,fl_gc,X,Y,SRCCOPY);	// copy image section to DDB
-
-  // copy RGB image data to the allocated DIB
-
-  GetDIBits(hdc, hbm, 0, h, dib, (BITMAPINFO *)&bi, DIB_RGB_COLORS);
-
-  // finally copy the image data to the user buffer
-
-  for (int j = 0; j<h; j++) {
-    const uchar *src = dib + j * line_size;			// source line
-    uchar *tg = p + (j + shift_y) * d * ww + shift_x * d;	// target line
-    for (int i = 0; i<w; i++) {
-      uchar b = *src++;
-      uchar g = *src++;
-      *tg++ = *src++;	// R
-      *tg++ = g;	// G
-      *tg++ = b;	// B
-      if (alpha)
-	*tg++ = alpha;	// alpha
-    }
-  }
-
-  // free used GDI and other structures
-
-  RestoreDC(hdc,save_dc);	// reset DC
-  DeleteDC(hdc);
-  DeleteObject(hbm);
-  delete[] dib;		// delete DIB temporary buffer
-
-  return p;
-}
-
-//
-// End of "$Id: fl_read_image_win32.cxx 8595 2011-04-17 08:48:40Z manolo $".
-//
diff --git a/common/fltk/src/fl_rect.cxx b/common/fltk/src/fl_rect.cxx
deleted file mode 100644
index 812fa4d..0000000
--- a/common/fltk/src/fl_rect.cxx
+++ /dev/null
@@ -1,727 +0,0 @@
-//
-// "$Id: fl_rect.cxx 8630 2011-05-01 12:45:29Z AlbrechtS $"
-//
-// Rectangle drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_rect.cxx
-  \brief Drawing and clipping routines for rectangles.
-*/
-
-// These routines from fl_draw.H are used by the standard boxtypes
-// and thus are always linked into an fltk program.
-// Also all fl_clip routines, since they are always linked in so
-// that minimal update works.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Printer.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-
-// fl_line_width_ must contain the absolute value of the current
-// line width to be used for X11 clipping (see below).
-// This is defined in src/fl_line_style.cxx
-extern int fl_line_width_;
-
-#ifdef __APPLE_QUARTZ__
-extern float fl_quartz_line_width_;
-#define USINGQUARTZPRINTER  (Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id)
-#endif
-
-#ifdef USE_X11
-
-#ifndef SHRT_MAX
-#define SHRT_MAX (32767)
-#endif
-
-/*
-  We need to check some coordinates for areas for clipping before we
-  use X functions, because X can't handle coordinates outside the 16-bit
-  range. Since all windows use relative coordinates > 0, we do also
-  check for negative values. X11 only, see also STR #2304.
-  
-  Note that this is only necessary for large objects, where only a
-  part of the object is visible. The draw() functions (e.g. box
-  drawing) must be clipped correctly. This is usually only a matter
-  for large container widgets. The individual child widgets will be
-  clipped completely.
-
-  We define the usable X coordinate space as [ -LW : SHRT_MAX - LW ]
-  where LW = current line width for drawing. This is done so that
-  horizontal and vertical line drawing works correctly, even in real
-  border cases, e.g. drawing a rectangle slightly outside the top left
-  window corner, but with a line width so that a part of the line should
-  be visible (in this case 2 of 5 pixels):
-
-    fl_line_style (FL_SOLID,5);	// line width = 5
-    fl_rect (-1,-1,100,100);	// top/left: 2 pixels visible
-  
-  In this example case, no clipping would be done, because X can
-  handle it and clip unneeded pixels.
-  
-  Note that we must also take care of the case where fl_line_width_
-  is zero (maybe unitialized). If this is the case, we assume a line
-  width of 1.
-
-  Todo: Arbitrary line drawings (e.g. polygons) and clip regions
-  are not yet done.
-
-  Note:
-
-  We could use max. screen coordinates instead of SHRT_MAX, but that
-  would need more work and would probably be slower. We assume that
-  all window coordinates are >= 0 and that no window extends up to
-  32767 - LW (where LW = current line width). Thus it is safe to clip
-  all coordinates to this range before calling X functions. If this
-  is not true, then clip_to_short() and clip_x() must be redefined.
-
-  It would be somewhat easier if we had fl_clip_w and fl_clip_h, as
-  defined in FLTK 2.0 (for the upper clipping bounds)...
-*/
-
-/*
-  clip_to_short() returns 1, if the area is invisible (clipped),
-  because ...
-
-    (a) w or h are <= 0		i.e. nothing is visible
-    (b) x+w or y+h are < kmin	i.e. left of or above visible area
-    (c) x or y are > kmax	i.e. right of or below visible area
-
-  kmin and kmax are the minimal and maximal X coordinate values,
-  as defined above. In this case x, y, w, and h are not changed.
-
-  It returns 0, if the area is potentially visible and X can handle
-  clipping. x, y, w, and h may have been adjusted to fit into the
-  X coordinate space.
-
-  Use this for clipping rectangles, as used in fl_rect() and
-  fl_rectf().
-*/
-
-static int clip_to_short(int &x, int &y, int &w, int &h) {
-
-  int lw = (fl_line_width_ > 0) ? fl_line_width_ : 1;
-  int kmin = -lw;
-  int kmax = SHRT_MAX - lw;
-
-  if (w <= 0 || h <= 0) return 1;		// (a)
-  if (x+w < kmin || y+h < kmin) return 1;	// (b)
-  if (x > kmax || y > kmax) return 1;		// (c)
-
-  if (x < kmin) { w -= (kmin-x); x = kmin; }
-  if (y < kmin) { h -= (kmin-y); y = kmin; }
-  if (x+w > kmax) w = kmax - x;
-  if (y+h > kmax) h = kmax - y;
-
-  return 0;
-}
-
-/*
-  clip_x() returns a coordinate value clipped to the 16-bit coordinate
-  space (see above). This can be used to draw horizontal and vertical
-  lines that can be handled by X11. Each single coordinate value can
-  be clipped individually, and the result can be used directly, e.g.
-  in fl_xyline() and fl_yxline(). Note that this can't be used for
-  arbitrary lines (not horizontal or vertical).
-*/
-static int clip_x (int x) {
-
-  int lw = (fl_line_width_ > 0) ? fl_line_width_ : 1;
-  int kmin = -lw;
-  int kmax = SHRT_MAX - lw;
-
-  if (x < kmin)
-    x = kmin;
-  else if (x > kmax)
-    x = kmax;
-  return x;
-}
-
-#endif	// USE_X11
-
-
-void Fl_Graphics_Driver::rect(int x, int y, int w, int h) {
-
-  if (w<=0 || h<=0) return;
-#if defined(USE_X11)
-  if (!clip_to_short(x, y, w, h))
-    XDrawRectangle(fl_display, fl_window, fl_gc, x, y, w-1, h-1);
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x+w-1, y);
-  LineTo(fl_gc, x+w-1, y+h-1);
-  LineTo(fl_gc, x, y+h-1);
-  LineTo(fl_gc, x, y);
-#elif defined(__APPLE_QUARTZ__)
-  if ( (!USINGQUARTZPRINTER) && fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGRect rect = CGRectMake(x, y, w-1, h-1);
-  CGContextStrokeRect(fl_gc, rect);
-  if ( (!USINGQUARTZPRINTER) && fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::rectf(int x, int y, int w, int h) {
-  if (w<=0 || h<=0) return;
-#if defined(USE_X11)
-  if (!clip_to_short(x, y, w, h))
-    XFillRectangle(fl_display, fl_window, fl_gc, x, y, w, h);
-#elif defined(WIN32)
-  RECT rect;
-  rect.left = x; rect.top = y;  
-  rect.right = x + w; rect.bottom = y + h;
-  FillRect(fl_gc, &rect, fl_brush());
-#elif defined(__APPLE_QUARTZ__)
-  CGFloat delta_size =  0.9;
-  CGFloat delta_ori = 0;
-  if (USINGQUARTZPRINTER) {
-    delta_size = 0;
-    delta_ori = 0.5;
-    }
-  CGRect  rect = CGRectMake(x - delta_ori, y - delta_ori, w - delta_size , h - delta_size);
-  CGContextFillRect(fl_gc, rect);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::xyline(int x, int y, int x1) {
-#if defined(USE_X11)
-  XDrawLine(fl_display, fl_window, fl_gc, clip_x(x), clip_x(y), clip_x(x1), clip_x(y));
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); LineTo(fl_gc, x1+1, y);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y);
-  CGContextStrokePath(fl_gc);
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::xyline(int x, int y, int x1, int y2) {
-#if defined (USE_X11)
-  XPoint p[3];
-  p[0].x = clip_x(x);  p[0].y = p[1].y = clip_x(y);
-  p[1].x = p[2].x = clip_x(x1); p[2].y = clip_x(y2);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0);
-#elif defined(WIN32)
-  if (y2 < y) y2--;
-  else y2++;
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y);
-  LineTo(fl_gc, x1, y2);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y);
-  CGContextAddLineToPoint(fl_gc, x1, y2);
-  CGContextStrokePath(fl_gc);
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-#error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::xyline(int x, int y, int x1, int y2, int x3) {
-#if defined(USE_X11)
-  XPoint p[4];
-  p[0].x = clip_x(x);  p[0].y = p[1].y = clip_x(y);
-  p[1].x = p[2].x = clip_x(x1); p[2].y = p[3].y = clip_x(y2);
-  p[3].x = clip_x(x3);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#elif defined(WIN32)
-  if(x3 < x1) x3--;
-  else x3++;
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y);
-  LineTo(fl_gc, x1, y2);
-  LineTo(fl_gc, x3, y2);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y);
-  CGContextAddLineToPoint(fl_gc, x1, y2);
-  CGContextAddLineToPoint(fl_gc, x3, y2);
-  CGContextStrokePath(fl_gc);
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::yxline(int x, int y, int y1) {
-#if defined(USE_X11)
-  XDrawLine(fl_display, fl_window, fl_gc, clip_x(x), clip_x(y), clip_x(x), clip_x(y1));
-#elif defined(WIN32)
-  if (y1 < y) y1--;
-  else y1++;
-  MoveToEx(fl_gc, x, y, 0L); LineTo(fl_gc, x, y1);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x, y1);
-  CGContextStrokePath(fl_gc);
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::yxline(int x, int y, int y1, int x2) {
-#if defined(USE_X11)
-  XPoint p[3];
-  p[0].x = p[1].x = clip_x(x);  p[0].y = clip_x(y);
-  p[1].y = p[2].y = clip_x(y1); p[2].x = clip_x(x2);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0);
-#elif defined(WIN32)
-  if (x2 > x) x2++;
-  else x2--;
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x, y1);
-  LineTo(fl_gc, x2, y1);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y1);
-  CGContextStrokePath(fl_gc);
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::yxline(int x, int y, int y1, int x2, int y3) {
-#if defined(USE_X11)
-  XPoint p[4];
-  p[0].x = p[1].x = clip_x(x);  p[0].y = clip_x(y);
-  p[1].y = p[2].y = clip_x(y1); p[2].x = p[3].x = clip_x(x2);
-  p[3].y = clip_x(y3);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#elif defined(WIN32)
-  if(y3<y1) y3--;
-  else y3++;
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x, y1);
-  LineTo(fl_gc, x2, y1);
-  LineTo(fl_gc, x2, y3);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y3);
-  CGContextStrokePath(fl_gc);
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::line(int x, int y, int x1, int y1) {
-#if defined(USE_X11)
-  XDrawLine(fl_display, fl_window, fl_gc, x, y, x1, y1);
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y1);
-  // Draw the last point *again* because the GDI line drawing
-  // functions will not draw the last point ("it's a feature!"...)
-  SetPixel(fl_gc, x1, y1, fl_RGB());
-#elif defined(__APPLE_QUARTZ__)
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextStrokePath(fl_gc);
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::line(int x, int y, int x1, int y1, int x2, int y2) {
-#if defined(USE_X11)
-  XPoint p[3];
-  p[0].x = x;  p[0].y = y;
-  p[1].x = x1; p[1].y = y1;
-  p[2].x = x2; p[2].y = y2;
-  XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0);
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y1);
-  LineTo(fl_gc, x2, y2);
-  // Draw the last point *again* because the GDI line drawing
-  // functions will not draw the last point ("it's a feature!"...)
-  SetPixel(fl_gc, x2, y2, fl_RGB());
-#elif defined(__APPLE_QUARTZ__)
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y2);
-  CGContextStrokePath(fl_gc);
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::loop(int x, int y, int x1, int y1, int x2, int y2) {
-#if defined(USE_X11)
-  XPoint p[4];
-  p[0].x = x;  p[0].y = y;
-  p[1].x = x1; p[1].y = y1;
-  p[2].x = x2; p[2].y = y2;
-  p[3].x = x;  p[3].y = y;
-  XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y1);
-  LineTo(fl_gc, x2, y2);
-  LineTo(fl_gc, x, y);
-#elif defined(__APPLE_QUARTZ__)
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y2);
-  CGContextClosePath(fl_gc);
-  CGContextStrokePath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
-#if defined(USE_X11)
-  XPoint p[5];
-  p[0].x = x;  p[0].y = y;
-  p[1].x = x1; p[1].y = y1;
-  p[2].x = x2; p[2].y = y2;
-  p[3].x = x3; p[3].y = y3;
-  p[4].x = x;  p[4].y = y;
-  XDrawLines(fl_display, fl_window, fl_gc, p, 5, 0);
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y1);
-  LineTo(fl_gc, x2, y2);
-  LineTo(fl_gc, x3, y3);
-  LineTo(fl_gc, x, y);
-#elif defined(__APPLE_QUARTZ__)
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y2);
-  CGContextAddLineToPoint(fl_gc, x3, y3);
-  CGContextClosePath(fl_gc);
-  CGContextStrokePath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, int y2) {
-  XPoint p[4];
-  p[0].x = x;  p[0].y = y;
-  p[1].x = x1; p[1].y = y1;
-  p[2].x = x2; p[2].y = y2;
-#if defined (USE_X11)
-  p[3].x = x;  p[3].y = y;
-  XFillPolygon(fl_display, fl_window, fl_gc, p, 3, Convex, 0);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#elif defined(WIN32)
-  SelectObject(fl_gc, fl_brush());
-  Polygon(fl_gc, p, 3);
-#elif defined(__APPLE_QUARTZ__)
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y2);
-  CGContextClosePath(fl_gc);
-  CGContextFillPath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
-  XPoint p[5];
-  p[0].x = x;  p[0].y = y;
-  p[1].x = x1; p[1].y = y1;
-  p[2].x = x2; p[2].y = y2;
-  p[3].x = x3; p[3].y = y3;
-#if defined(USE_X11)
-  p[4].x = x;  p[4].y = y;
-  XFillPolygon(fl_display, fl_window, fl_gc, p, 4, Convex, 0);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 5, 0);
-#elif defined(WIN32)
-  SelectObject(fl_gc, fl_brush());
-  Polygon(fl_gc, p, 4);
-#elif defined(__APPLE_QUARTZ__)
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y2);
-  CGContextAddLineToPoint(fl_gc, x3, y3);
-  CGContextClosePath(fl_gc);
-  CGContextFillPath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::point(int x, int y) {
-#if defined(USE_X11)
-  XDrawPoint(fl_display, fl_window, fl_gc, clip_x(x), clip_x(y));
-#elif defined(WIN32)
-  SetPixel(fl_gc, x, y, fl_RGB());
-#elif defined(__APPLE_QUARTZ__)
-  CGContextFillRect(fl_gc, CGRectMake(x - 0.5, y - 0.5, 1, 1) );
-#else
-# error unsupported platform
-#endif
-}
-
-////////////////////////////////////////////////////////////////
-
-#if !defined(WIN32) && !defined(__APPLE__)
-// Missing X call: (is this the fastest way to init a 1-rectangle region?)
-// MSWindows equivalent exists, implemented inline in win32.H
-Fl_Region XRectangleRegion(int x, int y, int w, int h) {
-  XRectangle R;
-  clip_to_short(x, y, w, h);
-  R.x = x; R.y = y; R.width = w; R.height = h;
-  Fl_Region r = XCreateRegion();
-  XUnionRectWithRegion(&R, r, r);
-  return r;
-}
-#endif
-
-void Fl_Graphics_Driver::restore_clip() {
-  fl_clip_state_number++;
-  Fl_Region r = rstack[rstackptr];
-#if defined(USE_X11)
-  if (r) XSetRegion(fl_display, fl_gc, r);
-  else XSetClipMask(fl_display, fl_gc, 0);
-#elif defined(WIN32)
-  SelectClipRgn(fl_gc, r); //if r is NULL, clip is automatically cleared
-#elif defined(__APPLE_QUARTZ__)
-  if ( fl_window ) { // clipping for a true window
-    Fl_X::q_clear_clipping();
-    Fl_X::q_fill_context();//flip coords if bitmap context
-    //apply program clip
-    if (r) {
-      CGContextClipToRects(fl_gc, r->rects, r->count);
-    }
-  } else if (fl_gc) { // clipping for an offscreen drawing world (CGBitmap)
-    Fl_X::q_clear_clipping();
-    Fl_X::q_fill_context();
-    if (r) {
-      CGContextClipToRects(fl_gc, r->rects, r->count);
-    }
-  }
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::clip_region(Fl_Region r) {
-  Fl_Region oldr = rstack[rstackptr];
-  if (oldr) XDestroyRegion(oldr);
-  rstack[rstackptr] = r;
-  fl_restore_clip();
-}
-
-Fl_Region Fl_Graphics_Driver::clip_region() {
-  return rstack[rstackptr];
-}
-
-void Fl_Graphics_Driver::push_clip(int x, int y, int w, int h) {
-  Fl_Region r;
-  if (w > 0 && h > 0) {
-    r = XRectangleRegion(x,y,w,h);
-    Fl_Region current = rstack[rstackptr];
-    if (current) {
-#if defined(USE_X11)
-      Fl_Region temp = XCreateRegion();
-      XIntersectRegion(current, r, temp);
-      XDestroyRegion(r);
-      r = temp;
-#elif defined(WIN32)
-      CombineRgn(r,r,current,RGN_AND);
-#elif defined(__APPLE_QUARTZ__)
-      XDestroyRegion(r);
-      r = Fl_X::intersect_region_and_rect(current, x,y,w,h);
-#else
-# error unsupported platform
-#endif
-    }
-  } else { // make empty clip region:
-#if defined(USE_X11)
-    r = XCreateRegion();
-#elif defined(WIN32)
-    r = CreateRectRgn(0,0,0,0);
-#elif defined(__APPLE_QUARTZ__)
-    r = XRectangleRegion(0,0,0,0);
-#else
-# error unsupported platform
-#endif
-  }
-  if (rstackptr < region_stack_max) rstack[++rstackptr] = r;
-  else Fl::warning("fl_push_clip: clip stack overflow!\n");
-  fl_restore_clip();
-}
-
-// make there be no clip (used by fl_begin_offscreen() only!)
-void Fl_Graphics_Driver::push_no_clip() {
-  if (rstackptr < region_stack_max) rstack[++rstackptr] = 0;
-  else Fl::warning("fl_push_no_clip: clip stack overflow!\n");
-  fl_restore_clip();
-}
-
-// pop back to previous clip:
-void Fl_Graphics_Driver::pop_clip() {
-  if (rstackptr > 0) {
-    Fl_Region oldr = rstack[rstackptr--];
-    if (oldr) XDestroyRegion(oldr);
-  } else Fl::warning("fl_pop_clip: clip stack underflow!\n");
-  fl_restore_clip();
-}
-
-int Fl_Graphics_Driver::not_clipped(int x, int y, int w, int h) {
-  if (x+w <= 0 || y+h <= 0) return 0;
-  Fl_Region r = rstack[rstackptr];
-  if (!r) return 1;
-#if defined (USE_X11)
-  // get rid of coordinates outside the 16-bit range the X calls take.
-  if (clip_to_short(x,y,w,h)) return 0;	// clipped
-  return XRectInRegion(r, x, y, w, h);
-#elif defined(WIN32)
-  RECT rect;
-  if (Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) { // in case of print context, convert coords from logical to device
-    POINT pt[2] = { {x, y}, {x + w, y + h} };
-    LPtoDP(fl_gc, pt, 2);
-    rect.left = pt[0].x; rect.top = pt[0].y; rect.right = pt[1].x; rect.bottom = pt[1].y;
-  } else {
-    rect.left = x; rect.top = y; rect.right = x+w; rect.bottom = y+h;
-  }
-  return RectInRegion(r,&rect);
-#elif defined(__APPLE_QUARTZ__)
-  CGRect arg = fl_cgrectmake_cocoa(x, y, w, h);
-  for (int i = 0; i < r->count; i++) {
-    CGRect test = CGRectIntersection(r->rects[i], arg);
-    if (!CGRectIsEmpty(test)) return 1;
-  }
-  return 0;
-#else
-# error unsupported platform
-#endif
-}
-
-// return rectangle surrounding intersection of this rectangle and clip:
-int Fl_Graphics_Driver::clip_box(int x, int y, int w, int h, int& X, int& Y, int& W, int& H){
-  X = x; Y = y; W = w; H = h;
-  Fl_Region r = rstack[rstackptr];
-  if (!r) return 0;
-#if defined(USE_X11)
-  switch (XRectInRegion(r, x, y, w, h)) {
-  case 0: // completely outside
-    W = H = 0;
-    return 2;
-  case 1: // completely inside:
-    return 0;
-  default: // partial:
-    break;
-  }
-  Fl_Region rr = XRectangleRegion(x,y,w,h);
-  Fl_Region temp = XCreateRegion();
-  XIntersectRegion(r, rr, temp);
-  XRectangle rect;
-  XClipBox(temp, &rect);
-  X = rect.x; Y = rect.y; W = rect.width; H = rect.height;
-  XDestroyRegion(temp);
-  XDestroyRegion(rr);
-  return 1;
-#elif defined(WIN32)
-// The win32 API makes no distinction between partial and complete
-// intersection, so we have to check for partial intersection ourselves.
-// However, given that the regions may be composite, we have to do
-// some voodoo stuff...
-  Fl_Region rr = XRectangleRegion(x,y,w,h);
-  Fl_Region temp = CreateRectRgn(0,0,0,0);
-  int ret;
-  if (CombineRgn(temp, rr, r, RGN_AND) == NULLREGION) { // disjoint
-    W = H = 0;
-    ret = 2;
-  } else if (EqualRgn(temp, rr)) { // complete
-    ret = 0;
-  } else {	// partial intersection
-    RECT rect;
-    GetRgnBox(temp, &rect);
-    if(Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) { // if print context, convert coords from device to logical
-      POINT pt[2] = { {rect.left, rect.top}, {rect.right, rect.bottom} };
-      DPtoLP(fl_gc, pt, 2);
-      X = pt[0].x; Y = pt[0].y; W = pt[1].x - X; H = pt[1].y - Y;
-    }
-    else {
-      X = rect.left; Y = rect.top; W = rect.right - X; H = rect.bottom - Y;
-      }
-    ret = 1;
-  }
-  DeleteObject(temp);
-  DeleteObject(rr);
-  return ret;
-#elif defined(__APPLE_QUARTZ__)
-  CGRect arg = fl_cgrectmake_cocoa(x, y, w, h);
-  CGRect u = CGRectMake(0,0,0,0);
-  CGRect test;
-  for(int i = 0; i < r->count; i++) {
-    test = CGRectIntersection(r->rects[i], arg);
-    if( ! CGRectIsEmpty(test) ) {
-      if(CGRectIsEmpty(u)) u = test;
-      else u = CGRectUnion(u, test);
-    }
-  }
-  X = int(u.origin.x);
-  Y = int(u.origin.y);
-  W = int(u.size.width + 1);
-  H = int(u.size.height + 1);
-  if(CGRectIsEmpty(u)) W = H = 0;
-  return ! CGRectEqualToRect(arg, u);
-#else
-# error unsupported platform
-#endif
-}
-
-//
-// End of "$Id: fl_rect.cxx 8630 2011-05-01 12:45:29Z AlbrechtS $".
-//
diff --git a/common/fltk/src/fl_round_box.cxx b/common/fltk/src/fl_round_box.cxx
deleted file mode 100644
index f5a802c..0000000
--- a/common/fltk/src/fl_round_box.cxx
+++ /dev/null
@@ -1,124 +0,0 @@
-//
-// "$Id: fl_round_box.cxx 8630 2011-05-01 12:45:29Z AlbrechtS $"
-//
-// Round box drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Box drawing code for an obscure box type.
-// These box types are in separate files so they are not linked
-// in if not used.
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-// A compiler from a certain very large software company will not compile
-// the function pointer assignment due to the name conflict with fl_arc.
-// This function is to fix that:
-static void fl_arc_i(int x,int y,int w,int h,double a1,double a2) {
-  fl_arc(x,y,w,h,a1,a2);
-}
-
-enum {UPPER_LEFT, LOWER_RIGHT, CLOSED, FILL};
-
-static void draw(int which, int x,int y,int w,int h, int inset, Fl_Color color)
-{
-  if (inset*2 >= w) inset = (w-1)/2;
-  if (inset*2 >= h) inset = (h-1)/2;
-  x += inset;
-  y += inset;
-  w -= 2*inset;
-  h -= 2*inset;
-  int d = w <= h ? w : h;
-  if (d <= 1) return;
-  fl_color(color);
-  fl_line_style(0,1);
-  void (*f)(int,int,int,int,double,double);
-  f = (which==FILL) ? fl_pie : fl_arc_i;
-  if (which >= CLOSED) {
-    f(x+w-d, y, d, d, w<=h ? 0 : -90, w<=h ? 180 : 90);
-    f(x, y+h-d, d, d, w<=h ? 180 : 90, w<=h ? 360 : 270);
-  } else if (which == UPPER_LEFT) {
-    f(x+w-d, y, d, d, 45, w<=h ? 180 : 90);
-    f(x, y+h-d, d, d, w<=h ? 180 : 90, 225);
-  } else { // LOWER_RIGHT
-    f(x, y+h-d, d, d, 225, w<=h ? 360 : 270);
-    f(x+w-d, y, d, d, w<=h ? 360 : 270, 360+45);
-  }
-  if (which == FILL) {
-    if (w < h)
-      fl_rectf(x, y+d/2, w, h-(d&-2));
-    else if (w > h)
-      fl_rectf(x+d/2, y, w-(d&-2), h);
-  } else {
-    if (w < h) {
-      if (which != UPPER_LEFT) fl_yxline(x+w-1, y+d/2-1, y+h-d/2+1);
-      if (which != LOWER_RIGHT) fl_yxline(x, y+d/2-1, y+h-d/2+1);
-    } else if (w > h) {
-      if (which != UPPER_LEFT) fl_xyline(x+d/2-1, y+h-1, x+w-d/2+1);
-      if (which != LOWER_RIGHT) fl_xyline(x+d/2-1, y, x+w-d/2+1);
-    }
-  }
-  fl_line_style(0);
-}
-
-extern uchar* fl_gray_ramp();
-
-void fl_round_down_box(int x, int y, int w, int h, Fl_Color bgcolor) {
-  uchar *g = fl_gray_ramp();
-  draw(FILL,	    x,   y, w,   h, 2, bgcolor);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 0, (Fl_Color)g['N']);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 1, (Fl_Color)g['H']);
-  draw(UPPER_LEFT,  x,   y, w,   h, 0, (Fl_Color)g['N']);
-  draw(UPPER_LEFT,  x,   y, w,   h, 1, (Fl_Color)g['H']);
-  draw(LOWER_RIGHT, x,   y, w,   h, 0, (Fl_Color)g['S']);
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 0, (Fl_Color)g['U']);
-  draw(LOWER_RIGHT, x,   y, w,   h, 1, (Fl_Color)g['U']);
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 1, (Fl_Color)g['W']);
-  draw(CLOSED,	    x,   y, w,   h, 2, (Fl_Color)g['A']);
-}
-
-void fl_round_up_box(int x, int y, int w, int h, Fl_Color bgcolor) {
-  uchar *g = fl_gray_ramp();
-  draw(FILL,	    x,   y, w,   h, 2, bgcolor);
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 0, (Fl_Color)g['H']);
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 1, (Fl_Color)g['N']);
-  draw(LOWER_RIGHT, x,   y, w,   h, 1, (Fl_Color)g['H']);
-  draw(LOWER_RIGHT, x,   y, w,   h, 2, (Fl_Color)g['N']);
-  draw(UPPER_LEFT,  x,   y, w,   h, 2, (Fl_Color)g['U']);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 1, (Fl_Color)g['S']);
-  draw(UPPER_LEFT,  x,   y, w,   h, 1, (Fl_Color)g['W']);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 0, (Fl_Color)g['U']);
-  draw(CLOSED,	    x,   y, w,   h, 0, (Fl_Color)g['A']);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-Fl_Boxtype fl_define_FL_ROUND_UP_BOX() {
-  fl_internal_boxtype(_FL_ROUND_DOWN_BOX, fl_round_down_box);
-  fl_internal_boxtype(_FL_ROUND_UP_BOX, fl_round_up_box);
-  return _FL_ROUND_UP_BOX;
-}
-
-//
-// End of "$Id: fl_round_box.cxx 8630 2011-05-01 12:45:29Z AlbrechtS $".
-//
diff --git a/common/fltk/src/fl_rounded_box.cxx b/common/fltk/src/fl_rounded_box.cxx
deleted file mode 100644
index ca7f009..0000000
--- a/common/fltk/src/fl_rounded_box.cxx
+++ /dev/null
@@ -1,99 +0,0 @@
-//
-// "$Id: fl_rounded_box.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Rounded box drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-#define RN	5
-#define RS	15
-#define BW	3
-
-static double offset[RN] = { 0.0, 0.07612, 0.29289, 0.61732, 1.0};
-
-static void rbox(int fill, int x, int y, int w, int h) {
-  int i;
-  int rsx ,rsy, rs;
-  rsx = w*2/5; rsy = h*2/5;
-  if (rsx > rsy) rs = rsy; else  rs = rsx;
-  if (rs > RS) rs = RS;
-  rsx = rs; rsy = rs;
-
-  if (fill) fl_begin_polygon(); else fl_begin_loop();
-  for (i=0; i<RN; i++)
-    fl_vertex(x + offset[RN-i-1]*rsx, y + offset[i] * rsy);
-  for (i=0; i<RN; i++)
-    fl_vertex(x + offset[i]*rsx, y + h-1 - offset[RN-i-1] * rsy);
-  for (i=0; i<RN; i++)
-    fl_vertex(x + w-1 - offset[RN-i-1]*rsx, y + h-1 - offset[i] * rsy);
-  for (i=0; i<RN; i++)
-    fl_vertex(x + w-1 - offset[i]*rsx, y + offset[RN-i-1] * rsy);
-  if (fill) fl_end_polygon(); else fl_end_loop();
-}
-
-static void fl_rflat_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(c); rbox(1, x, y, w, h); rbox(0, x, y, w, h);
-}
-
-static void fl_rounded_frame(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(c); rbox(0, x, y, w, h);
-}
-
-static void fl_rounded_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(c); rbox(1, x, y, w, h);
-  fl_color(FL_BLACK); rbox(0, x, y, w, h);
-}
-
-static void fl_rshadow_box(int x, int y, int w, int h, Fl_Color c) {
-  // draw shadow:
-  fl_color(FL_DARK3);
-  rbox(1, x+BW, y+BW, w, h);
-  rbox(0, x+BW, y+BW, w, h);
-  // draw the box:
-  fl_rounded_box(x, y, w, h, c);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-
-Fl_Boxtype fl_define_FL_ROUNDED_BOX() {
-  fl_internal_boxtype(_FL_ROUNDED_FRAME, fl_rounded_frame);
-  fl_internal_boxtype(_FL_ROUNDED_BOX, fl_rounded_box);
-  return _FL_ROUNDED_BOX;
-}
-
-Fl_Boxtype fl_define_FL_RFLAT_BOX() {
-  fl_internal_boxtype(_FL_RFLAT_BOX, fl_rflat_box);
-  return _FL_RFLAT_BOX;
-}
-
-Fl_Boxtype fl_define_FL_RSHADOW_BOX() {
-  fl_internal_boxtype(_FL_RSHADOW_BOX, fl_rshadow_box);
-  return _FL_RSHADOW_BOX;
-}
-
-//
-// End of "$Id: fl_rounded_box.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_scroll_area.cxx b/common/fltk/src/fl_scroll_area.cxx
deleted file mode 100644
index 515a8cd..0000000
--- a/common/fltk/src/fl_scroll_area.cxx
+++ /dev/null
@@ -1,169 +0,0 @@
-//
-// "$Id: fl_scroll_area.cxx 8055 2010-12-18 22:31:01Z manolo $"
-//
-// Scrolling routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Drawing function to move the contents of a rectangle.  This is passed
-// a "callback" which is called to draw rectangular areas that are moved
-// into the drawing area.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-// scroll a rectangle and redraw the newly exposed portions:
-/**
-  Scroll a rectangle and draw the newly exposed portions.
-  \param[in] X,Y       position of top-left of rectangle
-  \param[in] W,H       size of rectangle
-  \param[in] dx,dy     pixel offsets for shifting rectangle
-  \param[in] draw_area callback function to draw rectangular areas
-  \param[in] data      pointer to user data for callback
-  The contents of the rectangular area is first shifted by \p dx
-  and \p dy pixels. The \p draw_area callback is then called for
-  every newly exposed rectangular area.
-  */
-void fl_scroll(int X, int Y, int W, int H, int dx, int dy,
-               void (*draw_area)(void*, int,int,int,int), void* data)
-{
-  if (!dx && !dy) return;
-  if (dx <= -W || dx >= W || dy <= -H || dy >= H) {
-    // no intersection of old an new scroll
-    draw_area(data,X,Y,W,H);
-    return;
-  }
-  int src_x, src_w, dest_x, clip_x, clip_w;
-  if (dx > 0) {
-    src_x = X;
-    dest_x = X+dx;
-    src_w = W-dx;
-    clip_x = X;
-    clip_w = dx;
-  } else {
-    src_x = X-dx;
-    dest_x = X;
-    src_w = W+dx;
-    clip_x = X+src_w;
-    clip_w = W-src_w;
-  }
-  int src_y, src_h, dest_y, clip_y, clip_h;
-  if (dy > 0) {
-    src_y = Y;
-    dest_y = Y+dy;
-    src_h = H-dy;
-    clip_y = Y;
-    clip_h = dy;
-  } else {
-    src_y = Y-dy;
-    dest_y = Y;
-    src_h = H+dy;
-    clip_y = Y+src_h;
-    clip_h = H-src_h;
-  }
-
-#if defined(USE_X11)
-  XCopyArea(fl_display, fl_window, fl_window, fl_gc,
-	    src_x, src_y, src_w, src_h, dest_x, dest_y);
-  // we have to sync the display and get the GraphicsExpose events! (sigh)
-  for (;;) {
-    XEvent e; XWindowEvent(fl_display, fl_window, ExposureMask, &e);
-    if (e.type == NoExpose) break;
-    // otherwise assume it is a GraphicsExpose event:
-    draw_area(data, e.xexpose.x, e.xexpose.y,
-	      e.xexpose.width, e.xexpose.height);
-    if (!e.xgraphicsexpose.count) break;
-  }
-#elif defined(WIN32)
-  typedef int (WINAPI* fl_GetRandomRgn_func)(HDC, HRGN, INT);
-  static fl_GetRandomRgn_func fl_GetRandomRgn = 0L;
-  static char first_time = 1;
-
-  // We will have to do some Region magic now, so let's see if the 
-  // required function is available (and it should be staring w/Win95)
-  if (first_time) {
-    HMODULE hMod = GetModuleHandle("GDI32.DLL");
-    if (hMod) {
-      fl_GetRandomRgn = (fl_GetRandomRgn_func)GetProcAddress(hMod, "GetRandomRgn");
-    }
-    first_time = 0;
-  }
-
-  // Now check if the source scrolling area is fully visible.
-  // If it is, we will do a quick scroll and just update the 
-  // newly exposed area. If it is not, we go the safe route and 
-  // re-render the full area instead.
-  // Note 1: we could go and find the areas that are actually
-  // obscured and recursively call fl_scroll for the newly found
-  // rectangles. However, this practice would rely on the 
-  // elements of the undocumented Rgn structure.
-  // Note 2: although this method should take care of most 
-  // multi-screen solutions, it will not solve issues scrolling
-  // from a different resolution screen onto another.
-  // Note 3: this has been tested with image maps, too.
-  if (fl_GetRandomRgn) {
-    // get the DC region minus all overlapping windows
-    HRGN sys_rgn = CreateRectRgn(0, 0, 0, 0);
-    fl_GetRandomRgn(fl_gc, sys_rgn, 4);
-    // now get the source scrolling rectangle 
-    HRGN src_rgn = CreateRectRgn(src_x, src_y, src_x+src_w, src_y+src_h);
-    POINT offset = { 0, 0 };
-    if (GetDCOrgEx(fl_gc, &offset)) {
-      OffsetRgn(src_rgn, offset.x, offset.y);
-    }
-    // see if all source pixels are available in the system region
-    // Note: we could be a bit more merciful and subtract the 
-    // scroll destination region as well.
-    HRGN dst_rgn = CreateRectRgn(0, 0, 0, 0);
-    int r = CombineRgn(dst_rgn, src_rgn, sys_rgn, RGN_DIFF);
-    DeleteObject(dst_rgn);
-    DeleteObject(src_rgn);
-    DeleteObject(sys_rgn);
-    if (r!=NULLREGION) {
-      draw_area(data,X,Y,W,H);
-      return;
-    }
-  }
-
-  // Great, we can do an accelerated scroll instead of re-rendering
-  BitBlt(fl_gc, dest_x, dest_y, src_w, src_h, fl_gc, src_x, src_y,SRCCOPY);
-
-#elif defined(__APPLE_QUARTZ__)
-  CGImageRef img = Fl_X::CGImage_from_window_rect(Fl_Window::current(), src_x, src_y, src_w, src_h);
-  CGRect rect = { { dest_x, dest_y }, { src_w, src_h } };
-  Fl_X::q_begin_image(rect, 0, 0, src_w, src_h);
-  CGContextDrawImage(fl_gc, rect, img);
-  Fl_X::q_end_image();
-  CFRelease(img);
-#else
-# error unsupported platform
-#endif
-  if (dx) draw_area(data, clip_x, dest_y, clip_w, src_h);
-  if (dy) draw_area(data, X, clip_y, W, clip_h);
-}
-
-//
-// End of "$Id: fl_scroll_area.cxx 8055 2010-12-18 22:31:01Z manolo $".
-//
diff --git a/common/fltk/src/fl_set_font.cxx b/common/fltk/src/fl_set_font.cxx
deleted file mode 100644
index 0ae7305..0000000
--- a/common/fltk/src/fl_set_font.cxx
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-// "$Id: fl_set_font.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Add a font to the internal table.
-// Also see fl_set_fonts.cxx which adds all possible fonts.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-#include "Fl_Font.H"
-#include <stdlib.h>
-
-static int table_size;
-/**
-  Changes a face.  The string pointer is simply stored,
-  the string is not copied, so the string must be in static memory.
-*/    
-void Fl::set_font(Fl_Font fnum, const char* name) {
-  while (fnum >= table_size) {
-    int i = table_size;
-    if (!i) {	// don't realloc the built-in table
-      table_size = 2*FL_FREE_FONT;
-      i = FL_FREE_FONT;
-      Fl_Fontdesc* t = (Fl_Fontdesc*)malloc(table_size*sizeof(Fl_Fontdesc));
-      memcpy(t, fl_fonts, FL_FREE_FONT*sizeof(Fl_Fontdesc));
-      fl_fonts = t;
-    } else {
-      table_size = 2*table_size;
-      fl_fonts=(Fl_Fontdesc*)realloc(fl_fonts, table_size*sizeof(Fl_Fontdesc));
-    }
-    for (; i < table_size; i++) {
-      fl_fonts[i].fontname[0] = 0;
-      fl_fonts[i].name = 0;
-#if !defined(WIN32) && !defined(__APPLE__)
-      fl_fonts[i].xlist = 0;
-      fl_fonts[i].n = 0;
-#endif // !WIN32 && !__APPLE__
-    }
-  }
-  Fl_Fontdesc* s = fl_fonts+fnum;
-  if (s->name) {
-    if (!strcmp(s->name, name)) {s->name = name; return;}
-#if !defined(WIN32) && !defined(__APPLE__)
-    if (s->xlist && s->n >= 0) XFreeFontNames(s->xlist);
-#endif
-    for (Fl_Font_Descriptor* f = s->first; f;) {
-      Fl_Font_Descriptor* n = f->next; delete f; f = n;
-    }
-    s->first = 0;
-  }
-  s->name = name;
-  s->fontname[0] = 0;
-#if !defined(WIN32) && !defined(__APPLE__)
-  s->xlist = 0;
-#endif
-  s->first = 0;
-  fl_font(-1, 0);
-}
-/** Copies one face to another. */
-void Fl::set_font(Fl_Font fnum, Fl_Font from) {
-  Fl::set_font(fnum, get_font(from));
-}
-/**
-    Gets the string for this face.  This string is different for each
-    face. Under X this value is passed to XListFonts to get all the sizes
-    of this face.
-*/
-const char* Fl::get_font(Fl_Font fnum) {return fl_fonts[fnum].name;}
-
-//
-// End of "$Id: fl_set_font.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_set_fonts.cxx b/common/fltk/src/fl_set_fonts.cxx
deleted file mode 100644
index d8973c1..0000000
--- a/common/fltk/src/fl_set_fonts.cxx
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// "$Id: fl_set_fonts.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// More font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include "Fl_Font.H"
-#include "flstring.h"
-#include <stdlib.h>
-
-#ifdef WIN32
-#  include "fl_set_fonts_win32.cxx"
-#elif defined(__APPLE__)
-#  include "fl_set_fonts_mac.cxx"
-#elif USE_XFT
-#  include "fl_set_fonts_xft.cxx"
-#else
-#  include "fl_set_fonts_x.cxx"
-#endif // WIN32
-
-//
-// End of "$Id: fl_set_fonts.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_set_fonts_mac.cxx b/common/fltk/src/fl_set_fonts_mac.cxx
deleted file mode 100644
index 7c3eb6f..0000000
--- a/common/fltk/src/fl_set_fonts_mac.cxx
+++ /dev/null
@@ -1,164 +0,0 @@
-//
-// "$Id: fl_set_fonts_mac.cxx 8504 2011-03-04 16:48:10Z manolo $"
-//
-// MacOS font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-
-// #inclde <SFNTTypes.h>
-
-// This function fills in the fltk font table with all the fonts that
-// are found on the X server.  It tries to place the fonts into families
-// and to sort them so the first 4 in a family are normal, bold, italic,
-// and bold italic.
-
-// Bug: older versions calculated the value for *ap as a side effect of
-// making the name, and then forgot about it. To avoid having to change
-// the header files I decided to store this value in the last character
-// of the font name array.
-#define ENDOFBUFFER 127 // sizeof(Fl_Font.fontname)-1
-
-// turn a stored font name into a pretty name:
-const char* Fl::get_font_name(Fl_Font fnum, int* ap) {
-  Fl_Fontdesc *f = fl_fonts + fnum;
-  if (!f->fontname[0]) {
-    const char* p = f->name;
-    if (!p || !*p) {if (ap) *ap = 0; return "";}
-    strlcpy(f->fontname, p, ENDOFBUFFER);
-    int type = 0;
-    if (strstr(f->name, "Bold")) type |= FL_BOLD;
-    if (strstr(f->name, "Italic")) type |= FL_ITALIC;
-    f->fontname[ENDOFBUFFER] = (char)type;
-  }
-  if (ap) *ap = f->fontname[ENDOFBUFFER];
-  return f->fontname;
-}
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-static int name_compare(const void *a, const void *b)
-{
-  return strcmp(*(char**)a, *(char**)b);
-}
-#endif
-
-static int fl_free_font = FL_FREE_FONT;
-
-Fl_Font Fl::set_fonts(const char* xstarname) {
-#pragma unused ( xstarname )
-if (fl_free_font > FL_FREE_FONT) return (Fl_Font)fl_free_font; // if already called
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-if(fl_mac_os_version >= 100500) {
-//if(CTFontCreateWithFontDescriptor != NULL) {// CTFontCreateWithFontDescriptor != NULL on 10.4 also!
-  int value[1] = {1};
-  CFDictionaryRef dict = CFDictionaryCreate(NULL, 
-					    (const void **)kCTFontCollectionRemoveDuplicatesOption, 
-					    (const void **)&value, 1, NULL, NULL);
-  CTFontCollectionRef fcref = CTFontCollectionCreateFromAvailableFonts(dict);
-  CFRelease(dict);
-  CFArrayRef arrayref = CTFontCollectionCreateMatchingFontDescriptors(fcref);
-  CFRelease(fcref);
-  CFIndex count = CFArrayGetCount(arrayref);
-  CFIndex i;
-  char **tabfontnames = new char*[count];
-  for (i = 0; i < count; i++) {
-	CTFontDescriptorRef fdesc = (CTFontDescriptorRef)CFArrayGetValueAtIndex(arrayref, i);
-	CTFontRef font = CTFontCreateWithFontDescriptor(fdesc, 0., NULL);
-	CFStringRef cfname = CTFontCopyFullName(font);
-	CFRelease(font);
-	static char fname[100];
-	CFStringGetCString(cfname, fname, sizeof(fname), kCFStringEncodingUTF8);
-	tabfontnames[i] = strdup(fname); // never free'ed
-	CFRelease(cfname);
-	}
-  CFRelease(arrayref);
-  qsort(tabfontnames, count, sizeof(char*), name_compare);
-  for (i = 0; i < count; i++) {
-    Fl::set_font((Fl_Font)(fl_free_font++), tabfontnames[i]);
-    }
-  delete[] tabfontnames;
-  return (Fl_Font)fl_free_font;
-}
-else {
-#endif
-#if ! __LP64__
-  ItemCount oFontCount, oCountAgain;
-  ATSUFontID *oFontIDs;
-  // How many fonts?
-  ATSUFontCount (&oFontCount);
-  // now allocate space for them...
-  oFontIDs = (ATSUFontID *)malloc((oFontCount+1) * sizeof(ATSUFontID));
-  ATSUGetFontIDs (oFontIDs, oFontCount, &oCountAgain);
-  // Now oFontIDs should contain a list of all the available Unicode fonts
-  // Iterate through the list to get each font name
-  for (ItemCount idx = 0; idx < oFontCount; idx++)
-  {
-//  ByteCount actualLength = 0;
-//	Ptr oName;
-    // How to get the name - Apples docs say call this twice, once to get the length, then again 
-	// to get the actual name...
-//    ATSUFindFontName (oFontIDs[idx], kFontFullName, kFontMacintoshPlatform, kFontRomanScript, kFontEnglishLanguage,
-//                      0, NULL, &actualLength, NULL);
-    // Now actualLength tells us the length of buffer we need
-//	oName = (Ptr)malloc(actualLength + 8);
-// But who's got time for that nonsense? Let's just hard code a fixed buffer (urgh!)
-    ByteCount actualLength = 511;
-	char oName[512];
-    ATSUFindFontName (oFontIDs[idx], kFontFullName, kFontMacintoshPlatform, kFontRomanScript, kFontEnglishLanguage,
-                      actualLength, oName, &actualLength, &oCountAgain);
-    // bounds check and terminate the returned name
-    if(actualLength > 511)
-      oName[511] = 0;
-    else
-      oName[actualLength] = 0;
-	Fl::set_font((Fl_Font)(fl_free_font++), strdup(oName));
-//	free(oName);
-  }
-  free(oFontIDs);
-  return (Fl_Font)fl_free_font;
-#endif //__LP64__
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-  return 0;
-}
-
-static int array[128];
-int Fl::get_font_sizes(Fl_Font fnum, int*& sizep) {
-  Fl_Fontdesc *s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // empty slot in table, use entry 0
-  int cnt = 0;
-
-  // ATS supports all font size 
-  array[0] = 0;
-  sizep = array;
-  cnt = 1;
-
-  return cnt;
-}
-
-//
-// End of "$Id: fl_set_fonts_mac.cxx 8504 2011-03-04 16:48:10Z manolo $".
-//
diff --git a/common/fltk/src/fl_set_fonts_win32.cxx b/common/fltk/src/fl_set_fonts_win32.cxx
deleted file mode 100644
index 18aeb26..0000000
--- a/common/fltk/src/fl_set_fonts_win32.cxx
+++ /dev/null
@@ -1,173 +0,0 @@
-//
-// "$Id: fl_set_fonts_win32.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $"
-//
-// WIN32 font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this7 library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This function fills in the FLTK font table with all the fonts that
-// are found on the X server.  It tries to place the fonts into families
-// and to sort them so the first 4 in a family are normal, bold, italic,
-// and bold italic.
-#include <FL/fl_utf8.h>
-#ifdef __CYGWIN__
-# include <wchar.h>
-#endif
-
-// Bug: older versions calculated the value for *ap as a side effect of
-// making the name, and then forgot about it. To avoid having to change
-// the header files I decided to store this value in the last character
-// of the font name array.
-#define ENDOFBUFFER 127 // sizeof(Fl_Font.fontname)-1
-
-// turn a stored font name into a pretty name:
-const char* Fl::get_font_name(Fl_Font fnum, int* ap) {
-  Fl_Fontdesc *f = fl_fonts + fnum;
-  if (!f->fontname[0]) {
-    const char* p = f->name;
-    if (!p || !*p) {if (ap) *ap = 0; return "";}
-    int type;
-    switch (*p) {
-    case 'B': type = FL_BOLD; break;
-    case 'I': type = FL_ITALIC; break;
-    case 'P': type = FL_BOLD | FL_ITALIC; break;
-    default:  type = 0; break;
-    }
-    strlcpy(f->fontname, p+1, ENDOFBUFFER);
-    if (type & FL_BOLD) strlcat(f->fontname, " bold", ENDOFBUFFER);
-    if (type & FL_ITALIC) strlcat(f->fontname, " italic", ENDOFBUFFER);
-    f->fontname[ENDOFBUFFER] = (char)type;
-  }
-  if (ap) *ap = f->fontname[ENDOFBUFFER];
-  return f->fontname;
-}
-
-static int fl_free_font = FL_FREE_FONT;
-
-static int CALLBACK
-enumcbw(CONST LOGFONTW    *lpelf,
-        CONST TEXTMETRICW * /*lpntm*/,
-       DWORD            /*FontType*/,
-       LPARAM           p) {
-  if (!p && lpelf->lfCharSet != ANSI_CHARSET) return 1;
-  char *n = NULL;
-  int l = wcslen(lpelf->lfFaceName);
-  unsigned dstlen = fl_utf8fromwc(n, 0, (xchar*)lpelf->lfFaceName, l) + 1; // measure the string
-  n = (char*) malloc(dstlen);
-//n[fl_unicode2utf((xchar*)lpelf->lfFaceName, l, n)] = 0;
-  dstlen = fl_utf8fromwc(n, dstlen, (xchar*)lpelf->lfFaceName, l); // convert the string
-  n[dstlen] = 0;
-  for (int i=0; i<FL_FREE_FONT; i++) // skip if one of our built-in fonts
-	  if (!strcmp(Fl::get_font_name((Fl_Font)i),n)) {free(n);return 1;}
-  char buffer[LF_FACESIZE + 1];
-  strcpy(buffer+1, n);
-  buffer[0] = ' '; Fl::set_font((Fl_Font)(fl_free_font++), strdup(buffer));
-  if (lpelf->lfWeight <= 400)
-    buffer[0] = 'B', Fl::set_font((Fl_Font)(fl_free_font++), strdup(buffer));
-  buffer[0] = 'I'; Fl::set_font((Fl_Font)(fl_free_font++), strdup(buffer));
-  if (lpelf->lfWeight <= 400)
-    buffer[0] = 'P', Fl::set_font((Fl_Font)(fl_free_font++), strdup(buffer));
-  free(n);
-  return 1;
-} /* enumcbw */
-
-Fl_Font Fl::set_fonts(const char* xstarname) {
-  if (fl_free_font == FL_FREE_FONT) {// if not already been called
-    if (!fl_gc) fl_GetDC(0);
-
-      EnumFontFamiliesW(fl_gc, NULL, (FONTENUMPROCW)enumcbw, xstarname != 0);
-
-  }
-  return (Fl_Font)fl_free_font;
-}
-
-
-static int nbSize;
-static int cyPerInch;
-static int sizes[128];
-static int CALLBACK
-
-EnumSizeCbW(CONST LOGFONTW    * /*lpelf*/,
-           CONST TEXTMETRICW *lpntm,
-           DWORD            fontType,
-           LPARAM           /*p*/) {
-  if ((fontType & RASTER_FONTTYPE) == 0) {
-    sizes[0] = 0;
-    nbSize = 1;
-
-    // Scalable font
-    return 0;
-  }
-
-  int add = lpntm->tmHeight - lpntm->tmInternalLeading;
-  add = MulDiv(add, 72, cyPerInch);
-
-  int start = 0;
-  while ((start < nbSize) && (sizes[start] < add)) {
-    start++;
-  }
-
-  if ((start < nbSize) && (sizes[start] == add)) {
-    return 1;
-  }
-
-  for (int i=nbSize; i>start; i--) sizes[i] = sizes[i - 1];
-
-  sizes[start] = add;
-  nbSize++;
-
-  // Stop enum if buffer overflow
-  return nbSize < 128;
-}
-
-
-int
-Fl::get_font_sizes(Fl_Font fnum, int*& sizep) {
-  nbSize = 0;
-  Fl_Fontdesc *s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // empty slot in table, use entry 0
-
-  if (!fl_gc) fl_GetDC(0);
-  cyPerInch = GetDeviceCaps(fl_gc, LOGPIXELSY);
-  if (cyPerInch < 1) cyPerInch = 1;
-
-//  int l = fl_utf_nb_char((unsigned char*)s->name+1, strlen(s->name+1));
-//  unsigned short *b = (unsigned short*) malloc((l + 1) * sizeof(short));
-//  fl_utf2unicode((unsigned char*)s->name+1, l, (xchar*)b);
-	const char *nm = (const char*)s->name+1;
-	int len = strlen(s->name+1);
-    int l = fl_utf8toUtf16(nm, len, NULL, 0); // Pass NULL to query length required
-    unsigned short *b = (unsigned short*) malloc((l + 1) * sizeof(short));
-    l = fl_utf8toUtf16(nm, len, b, (l+1)); // Now do the conversion
-    b[l] = 0;
-    EnumFontFamiliesW(fl_gc, (WCHAR*)b, (FONTENUMPROCW)EnumSizeCbW, 0);
-	free(b);
-
-  sizep = sizes;
-  return nbSize;
-}
-
-
-//
-// End of "$Id: fl_set_fonts_win32.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $".
-//
diff --git a/common/fltk/src/fl_set_fonts_x.cxx b/common/fltk/src/fl_set_fonts_x.cxx
deleted file mode 100644
index 0cc344c..0000000
--- a/common/fltk/src/fl_set_fonts_x.cxx
+++ /dev/null
@@ -1,350 +0,0 @@
-//
-// "$Id: fl_set_fonts_x.cxx 8037 2010-12-15 13:54:34Z manolo $"
-//
-// X11 font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This function fills in the fltk font table with all the fonts that
-// are found on the X server.  It tries to place the fonts into families
-// and to sort them so the first 4 in a family are normal, bold, italic,
-// and bold italic.
-
-// Standard X fonts are matched by a pattern that is always of
-// this form, and this pattern is put in the table:
-// "-*-family-weight-slant-width1-style-*-registry-encoding"
-
-// Non-standard font names (those not starting with '-') are matched
-// by a pattern of the form "prefix*suffix", where the '*' is where
-// fltk thinks the point size is, or by the actual font name if no
-// point size is found.
-
-// Fltk knows how to pull an "attribute" out of a font name, such as
-// bold or italic, by matching known x font field values.  All words
-// that don't match a known attribute are combined into the "name"
-// of the font.  Names are compared before attributes for sorting, this
-// makes the bold and plain version of a font come out next to each
-// other despite the poor X font naming scheme.
-
-// By default fl_set_fonts() only does iso8859-1 encoded fonts.  You can
-// do all normal X fonts by passing "-*" or every possible font with "*".
-
-// Fl::set_font will take strings other than the ones this stores
-// and can identify any font on X that way.  You may want to write your
-// own system of font management and not use this code.
-
-// turn word N of a X font name into either some attribute bits
-// (right now 0, FL_BOLD, or FL_ITALIC), or into -1 indicating that
-// the word should be put into the name:
-
-static int attribute(int n, const char *p) {
-  // don't put blank things into name:
-  if (!*p || *p=='-' || *p=='*') return 0;
-  if (n == 3) { // weight
-    if (!strncmp(p,"normal",6) ||
-	!strncmp(p,"light",5) ||
-	!strncmp(p,"medium",6) ||
-	!strncmp(p,"book",4)) return 0;
-    if (!strncmp(p,"bold",4) || !strncmp(p,"demi",4)) return FL_BOLD;
-  } else if (n == 4) { // slant
-    if (*p == 'r') return 0;
-    if (*p == 'i' || *p == 'o') return FL_ITALIC;
-  } else if (n == 5) { // sWidth
-    if (!strncmp(p,"normal",6)) return 0;
-  }
-  return -1;
-}
-
-// return non-zero if the registry-encoding should be used:
-extern const char* fl_encoding;
-static int use_registry(const char *p) {
-  return *p && *p!='*' && strcmp(p,fl_encoding);
-}
-
-// Bug: older versions calculated the value for *ap as a side effect of
-// making the name, and then forgot about it. To avoid having to change
-// the header files I decided to store this value in the last character
-// of the font name array.
-#define ENDOFBUFFER 127 // sizeof(Fl_Font.fontname)-1
-
-// turn a stored (with *'s) X font name into a pretty name:
-const char* Fl::get_font_name(Fl_Font fnum, int* ap) {
-  Fl_Fontdesc *f = fl_fonts + fnum;
-  if (!f->fontname[0]) {
-    int type = 0;
-    const char* p = f->name;
-    if (!p) {
-      if (ap) *ap = 0;
-      return "";
-    }
-    char *o = f->fontname;
-
-    if (*p != '-') { // non-standard font, just replace * with spaces:
-      if (strstr(p,"bold")) type = FL_BOLD;
-      if (strstr(p,"ital")) type |= FL_ITALIC;
-      for (;*p; p++) {
-	if (*p == '*' || *p == ' ' || *p == '-') {
-	  do p++; while (*p == '*' || *p == ' ' || *p == '-');
-	  if (!*p) break;
-	  if (o < (f->fontname + ENDOFBUFFER - 1)) *o++ = ' ';
-	}
-	if (o < (f->fontname + ENDOFBUFFER - 1)) *o++ = *p;
-      }
-      *o = 0;
-
-    } else { // standard dash-separated font:
-
-      // get the family:
-      const char *x = fl_font_word(p,2); if (*x) x++; if (*x=='*') x++;
-      if (!*x) {
-	if (ap) *ap = 0;
-	return p;
-      }
-      const char *e = fl_font_word(x,1);
-      if ((e - x) < (int)(ENDOFBUFFER - 1)) {
-	// MRS: we want strncpy here, not strlcpy...
-	strncpy(o,x,e-x);
-	o += e-x;
-      } else {
-	strlcpy(f->fontname, x, ENDOFBUFFER);
-	o = f->fontname+ENDOFBUFFER-1;
-      }
-
-      // collect all the attribute words:
-      for (int n = 3; n <= 6; n++) {
-	// get the next word:
-	if (*e) e++; x = e; e = fl_font_word(x,1);
-	int t = attribute(n,x);
-	if (t < 0) {
-	  if (o < (f->fontname + ENDOFBUFFER - 1)) *o++ = ' ';
-	  if ((e - x) < (int)(ENDOFBUFFER - (o - f->fontname) - 1)) {
-	    // MRS: we want strncpy here, not strlcpy...
-	    strncpy(o,x,e-x);
-	    o += e-x;
-	  } else {
-	    strlcpy(o,x, ENDOFBUFFER - (o - f->fontname) - 1);
-	    o = f->fontname+ENDOFBUFFER-1;
-	  }
-	} else type |= t;
-      }
-
-      // skip over the '*' for the size and get the registry-encoding:
-      x = fl_font_word(e,2);
-      if (*x) {x++; *o++ = '('; while (*x) *o++ = *x++; *o++ = ')';}
-
-      *o = 0;
-      if (type & FL_BOLD) strlcat(f->fontname, " bold", ENDOFBUFFER);
-      if (type & FL_ITALIC) strlcat(f->fontname, " italic", ENDOFBUFFER);
-    }
-    f->fontname[ENDOFBUFFER] = (char)type;
-  }
-  if (ap) *ap = f->fontname[ENDOFBUFFER];
-  return f->fontname;
-}
-
-extern "C" {
-// sort raw (non-'*') X font names into perfect order:
-
-static int ultrasort(const void *aa, const void *bb) {
-  const char *a = *(char **)aa;
-  const char *b = *(char **)bb;
-
-  // sort all non x-fonts at the end:
-  if (*a != '-') {
-    if (*b == '-') return 1;
-    // 2 non-x fonts are matched by "numeric sort"
-    int ret = 0;
-    for (;;) {
-      if (isdigit(*a) && isdigit(*b)) {
-	int na = strtol(a, (char **)&a, 10);
-	int nb = strtol(b, (char **)&b, 10);
-	if (!ret) ret = na-nb;
-      } else if (*a != *b) {
-	return (*a-*b);
-      } else if (!*a) {
-	return ret;
-      } else {
-	a++; b++;
-      }
-    }
-  } else {
-    if (*b != '-') return -1;
-  }
-
-  // skip the foundry (assume equal):
-  for (a++; *a && *a++!='-';);
-  for (b++; *b && *b++!='-';);
-
-  // compare the family and all the attribute words:
-  int atype = 0;
-  int btype = 0;
-  for (int n = 2; n <= 6; n++) {
-    int at = attribute(n,a);
-    int bt = attribute(n,b);
-    if (at < 0) {
-      if (bt >= 0) return 1;
-      for (;;) {if (*a!=*b) return *a-*b; b++; if (!*a || *a++=='-') break;}
-    } else {
-      if (bt < 0) return -1;
-      a = fl_font_word(a,1); if (*a) a++;
-      b = fl_font_word(b,1); if (*b) b++;
-      atype |= at; btype |= bt;
-    }
-  }
-
-  // remember the pixel size:
-  int asize = atoi(a);
-  int bsize = atoi(b);
-
-  // compare the registry/encoding:
-  a = fl_font_word(a,6); if (*a) a++;
-  b = fl_font_word(b,6); if (*b) b++;
-  if (use_registry(a)) {
-    if (!use_registry(b)) return 1;
-    int r = strcmp(a,b); if (r) return r;
-  } else {
-    if (use_registry(b)) return -1;
-  }
-
-  if (atype != btype) return atype-btype;
-  if (asize != bsize) return asize-bsize;
-
-  // something wrong, just do a string compare...
-  return strcmp(*(char**)aa, *(char**)bb);
-}
-}
-
-// converts a X font name to a standard starname, returns point size:
-static int to_canonical(char *to, const char *from, size_t tolen) {
-  char* c = fl_find_fontsize((char*)from);
-  if (!c) return -1; // no point size found...
-  const char* endptr;
-  int size = strtol(c,(char**)&endptr,10);
-  if (from[0] == '-') {
-    // replace the "foundry" with -*-:
-    *to++ = '-'; *to++ = '*';
-    for (from++; *from && *from != '-'; from++);
-    // skip to the registry-encoding:
-    endptr = (char*)fl_font_word(endptr,6);
-    if (*endptr && !use_registry(endptr+1)) endptr = "";
-  }
-  int n = c-from;
-  // MRS: we want strncpy here, not strlcpy...
-  if (n > (int)(tolen - 1)) return -1;
-  strncpy(to,from,n);
-  to[n++] = '*';
-  strlcpy(to+n,endptr, tolen - n);
-  return size;
-}
-
-static unsigned int fl_free_font = FL_FREE_FONT;
-
-Fl_Font Fl::set_fonts(const char* xstarname) {
-  if (fl_free_font > (unsigned)FL_FREE_FONT) // already been here
-    return (Fl_Font)fl_free_font;
-  fl_open_display();
-  int xlistsize;
-  char buf[20];
-  if (!xstarname) {
-    strcpy(buf,"-*-"); strcpy(buf+3,fl_encoding);
-    xstarname = buf;
-  }
-  char **xlist = XListFonts(fl_display, xstarname, 10000, &xlistsize);
-  if (!xlist) return (Fl_Font)fl_free_font;
-  qsort(xlist, xlistsize, sizeof(*xlist), ultrasort);
-  int used_xlist = 0;
-  for (int i=0; i<xlistsize;) {
-    int first_xlist = i;
-    const char *p = xlist[i++];
-    char canon[1024];
-    int size = to_canonical(canon, p, sizeof(canon));
-    if (size >= 0) {
-      for (;;) { // find all matching fonts:
-	if (i >= xlistsize) break;
-	const char *q = xlist[i];
-	char this_canon[1024];
-	if (to_canonical(this_canon, q, sizeof(this_canon)) < 0) break;
-	if (strcmp(canon, this_canon)) break;
-	i++;
-      }
-      /*if (*p=='-' || i > first_xlist+1)*/ p = canon;
-    }
-    unsigned int j;
-    for (j = 0;; j++) {
-      /*if (j < FL_FREE_FONT) {
-	// see if it is one of our built-in fonts:
-	// if so, set the list of x fonts, since we have it anyway
-	if (fl_fonts[j].name && !strcmp(fl_fonts[j].name, p)) break;
-      } else */{
-	j = fl_free_font++;
-	if (p == canon) p = strdup(p); else used_xlist = 1;
-	Fl::set_font((Fl_Font)j, p);
-	break;
-      }
-    }
-    if (!fl_fonts[j].xlist) {
-      fl_fonts[j].xlist = xlist+first_xlist;
-      fl_fonts[j].n = -(i-first_xlist);
-      used_xlist = 1;
-    }
-  }
-  if (!used_xlist) XFreeFontNames(xlist);
-  return (Fl_Font)fl_free_font;
-}
-
-int Fl::get_font_sizes(Fl_Font fnum, int*& sizep) {
-  Fl_Fontdesc *s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // empty slot in table, use entry 0
-  if (!s->xlist) {
-    fl_open_display();
-    s->xlist = XListFonts(fl_display, s->name, 100, &(s->n));
-    if (!s->xlist) return 0;
-  }
-  int listsize = s->n; if (listsize<0) listsize = -listsize;
-  static int sizes[128];
-  int numsizes = 0;
-  for (int i = 0; i < listsize; i++) {
-    char *q = s->xlist[i];
-    char *d = fl_find_fontsize(q);
-    if (!d) continue;
-    int s = strtol(d,0,10);
-    if (!numsizes || sizes[numsizes-1] < s) {
-      sizes[numsizes++] = s;
-    } else {
-      // insert-sort the new size into list:
-      int n;
-      for (n = numsizes-1; n > 0; n--) if (sizes[n-1] < s) break;
-      if (sizes[n] != s) {
-	for (int m = numsizes; m > n; m--) sizes[m] = sizes[m-1];
-	sizes[n] = s;
-	numsizes++;
-      }
-    }
-  }
-  sizep = sizes;
-  return numsizes;
-}
-
-//
-// End of "$Id: fl_set_fonts_x.cxx 8037 2010-12-15 13:54:34Z manolo $".
-//
diff --git a/common/fltk/src/fl_set_fonts_xft.cxx b/common/fltk/src/fl_set_fonts_xft.cxx
deleted file mode 100644
index 2b18178..0000000
--- a/common/fltk/src/fl_set_fonts_xft.cxx
+++ /dev/null
@@ -1,384 +0,0 @@
-//
-// "$Id: fl_set_fonts_xft.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $"
-//
-// More font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <X11/Xft/Xft.h>
-
-// This function fills in the fltk font table with all the fonts that
-// are found on the X server.  It tries to place the fonts into families
-// and to sort them so the first 4 in a family are normal, bold, italic,
-// and bold italic.
-
-// Bug: older versions calculated the value for *ap as a side effect of
-// making the name, and then forgot about it. To avoid having to change
-// the header files I decided to store this value in the last character
-// of the font name array.
-#define ENDOFBUFFER 127 // sizeof(Fl_Font.fontname)-1
-
-// turn a stored font name into a pretty name:
-const char* Fl::get_font_name(Fl_Font fnum, int* ap) {
-  Fl_Fontdesc *f = fl_fonts + fnum;
-  if (!f->fontname[0]) {
-    const char* p = f->name;
-    int type;
-    switch (p[0]) {
-    case 'B': type = FL_BOLD; break;
-    case 'I': type = FL_ITALIC; break;
-    case 'P': type = FL_BOLD | FL_ITALIC; break;
-    default:  type = 0; break;
-    }
-
-  // NOTE: This can cause duplications in fonts that already have Bold or Italic in
-  // their "name". Maybe we need to find a cleverer way?
-    strlcpy(f->fontname, p+1, ENDOFBUFFER);
-    if (type & FL_BOLD) strlcat(f->fontname, " bold", ENDOFBUFFER);
-    if (type & FL_ITALIC) strlcat(f->fontname, " italic", ENDOFBUFFER);
-    f->fontname[ENDOFBUFFER] = (char)type;
-  }
-  if (ap) *ap = f->fontname[ENDOFBUFFER];
-  return f->fontname;
-}
-
-///////////////////////////////////////////////////////////
-#define LOCAL_RAW_NAME_MAX 256
-
-extern "C" {
-// sort returned fontconfig font names
-static int name_sort(const void *aa, const void *bb) {
-  // What should we do here? Just do a string compare for now...
-  // NOTE: This yeilds some oddities - in particular a Blah Bold font will be
-  // listed before Blah...
-  // Also - the fontconfig listing returns some faces that are effectively duplicates
-  // as far as fltk is concerned, e.g. where there are ko or ja variants that we
-  // can't distinguish (since we are not yet fully UTF-*) - should we strip them here?
-  return strcasecmp(*(char**)aa, *(char**)bb);
-} // end of name_sort
-} // end of extern C section
-
-
-// Read the "pretty" name we have derived from fontconfig then convert
-// it into the format fltk uses internally for Xft names...
-// This is just a mess - I should have tokenised the strings and gone from there,
-// but I really thought this would be easier!
-static void make_raw_name(char *raw, char *pretty)
-{
-  // Input name will be "Some Name:style = Bold Italic" or whatever
-  // The plan is this:
-  // - the first char in the "raw" name becomes either I, B, P or " " for
-  //   italic, bold, bold italic or normal - this seems to be the fltk way...
-
-  char *style = strchr(pretty, ':');
-  char *last = style + strlen(style) - 2;
-
-  if (style)
-  {
-    *style = 0; // Terminate "name" string
-    style ++;   // point to start of style section
-  }
-
-  // It is still possible that the "pretty" name has multiple comma separated entries
-  // I've seen this often in CJK fonts, for example... Keep only the first one... This
-  // is not ideal, the CJK fonts often have the name in utf8 in several languages. What
-  // we ought to do is use fontconfig to query the available languages and pick one... But which?
-#if 0 // loop to keep the LAST name entry...
-  char *nm1 = pretty;
-  char *nm2 = strchr(nm1, ',');
-  while(nm2) {
-    nm1 = nm2 + 1;
-    nm2 = strchr(nm1, ',');
-  }
-  raw[0] = ' '; raw[1] = 0; // Default start of "raw name" text
-  strncat(raw, nm1, LOCAL_RAW_NAME_MAX);
-#else // keep the first remaining name entry
-  char *nm2 = strchr(pretty, ',');
-  if(nm2) *nm2 = 0; // terminate name after first entry
-  raw[0] = ' '; raw[1] = 0; // Default start of "raw name" text
-  strncat(raw, pretty, LOCAL_RAW_NAME_MAX-1);
-#endif
-  // At this point, the name is "marked" as regular...
-  if (style)
-  {
-#define PLAIN   0
-#define BOLD    1
-#define ITALIC  2
-#define BITALIC (BOLD | ITALIC)
-    int mods = PLAIN;
-    // Now try and parse the style string - look for the "=" sign
-    style = strchr(style, '=');
-    while ((style) && (style < last))
-    {
-      int type;
-      while ((*style == '=') || (*style == ' ') || (*style == '\t'))
-      {
-        style++; // Start of Style string
-        if ((style >= last) || (*style == 0)) continue;
-      }
-      type = toupper(style[0]);
-      switch (type)
-      {
-      // Things we might see: Regular Normal Bold Italic Oblique (??what??) Medium
-      // Roman Light Demi Sans SemiCondensed SuperBold Book... etc...
-      // Things we actually care about: Bold Italic Oblique SuperBold - Others???
-      case 'I':
-        if (strncasecmp(style, "Italic", 6) == 0)
-        {
-          mods |= ITALIC;
-        }
-        goto NEXT_STYLE;
-
-      case 'B':
-        if (strncasecmp(style, "Bold", 4) == 0)
-        {
-          mods |= BOLD;
-        }
-        goto NEXT_STYLE;
-
-      case 'O':
-        if (strncasecmp(style, "Oblique", 7) == 0)
-        {
-          mods |= ITALIC;
-        }
-        goto NEXT_STYLE;
-          
-      case 's':
-        if (strncasecmp(style, "SuperBold", 9) == 0)
-        {
-          mods |= BOLD;
-        }
-        goto NEXT_STYLE;
-          
-      default: // find the next gap
-        goto NEXT_STYLE;
-      } // switch end
-NEXT_STYLE:
-      while ((*style != ' ') && (*style != '\t'))
-      {
-        style++;
-        if ((style >= last) || (*style == 0)) goto STYLE_DONE;
-      }
-    }
-STYLE_DONE:
-    // Set the "modifier" character in the raw string
-    switch(mods)
-    {
-    case BOLD: raw[0] = 'B';
-      break;
-    case ITALIC: raw[0] = 'I';
-      break;
-    case BITALIC: raw[0] = 'P';
-      break;
-    default: raw[0] = ' ';
-      break;
-    }
-  }
-} // make_raw_name
-
-///////////////////////////////////////////////////////////
-
-static int fl_free_font = FL_FREE_FONT;
-
-// Uses the fontconfig lib to construct a list of all installed fonts.
-// I tried using XftListFonts for this, but the API is tricky - and when
-// I looked at the XftList* code, it calls the Fc* functions anyway, so...
-//
-// Also, for now I'm ignoring the "pattern_name" and just getting everything...
-// AND I don't try and skip the fonts we've already loaded in the defaults.
-// Blimey! What a hack!
-Fl_Font Fl::set_fonts(const char* pattern_name)
-{
-  FcFontSet  *fnt_set;     // Will hold the list of fonts we find
-  FcPattern   *fnt_pattern; // Holds the generic "match all names" pattern
-  FcObjectSet *fnt_obj_set = 0; // Holds the generic "match all objects" 
-  
-  int j; // loop iterator variable
-  int font_count; // Total number of fonts found to process
-  char **full_list; // The list of font names we build
-
-  if (fl_free_font > FL_FREE_FONT) // already been here
-    return (Fl_Font)fl_free_font;
-  
-  fl_open_display(); // Just in case...
-    
-  // Make sure fontconfig is ready... is this necessary? The docs say it is
-  // safe to call it multiple times, so just go for it anyway!
-  if (!FcInit())
-  {
-    // What to do? Just return defaults...
-    return FL_FREE_FONT;
-  }
-
-  // Create a search pattern that will match every font name - I think this
-  // does the Right Thing, but am not certain...
-  //
-  // This could possibly be "enhanced" to pay attention to the requested
-  // "pattern_name"?
-  fnt_pattern = FcPatternCreate();
-  fnt_obj_set = FcObjectSetBuild(FC_FAMILY, FC_STYLE, (void *)0);
-    
-  // Hopefully, this is a set of all the fonts...
-  fnt_set = FcFontList(0, fnt_pattern, fnt_obj_set);
-  
-  // We don't need the fnt_pattern any more, release it
-  FcPatternDestroy(fnt_pattern);
-
-  // Now, if we got any fonts, iterate through them...
-  if (fnt_set)
-  {
-    char *stop;
-    char *start;
-    char *first;
-    
-    font_count = fnt_set->nfont; // How many fonts?
-    
-    // Allocate array of char*'s to hold the name strings
-    full_list = (char **)malloc(sizeof(char *) * font_count);
-    
-    // iterate through all the font patterns and get the names out...
-      for (j = 0; j < font_count; j++)
-      {
-      // NOTE: FcChar8 is a typedef of "unsigned char"...
-      FcChar8 *font; // String to hold the font's name
-            
-      // Convert from fontconfig internal pattern to human readable name
-      // NOTE: This WILL malloc storage, so we need to free it later...
-      font = FcNameUnparse(fnt_set->fonts[j]);
-            
-      // The returned strings look like this...
-      // Century Schoolbook:style=Bold Italic,fed kursiv,Fett Kursiv,...
-      // So the bit we want is up to the first comma - BUT some strings have
-      // more than one name, separated by, guess what?, a comma...
-      stop = start = first = 0;
-      stop = strchr((char *)font, ',');
-      start = strchr((char *)font, ':');
-      if ((stop) && (start) && (stop < start))
-      {
-        first = stop + 1; // discard first version of name
-        // find first comma *after* the end of the name
-        stop = strchr((char *)start, ',');
-      }
-      else
-      {
-        first = (char *)font; // name is just what was returned
-      }
-      // Truncate the name after the (english) modifiers description
-      if (stop)
-      {
-        *stop = 0; // Terminate the string at the first comma, if there is one
-      }
-
-      // Copy the font description into our list
-      if (first == (char *)font)
-      { // The listed name is still OK
-        full_list[j] = (char *)font;
-      }
-      else
-      { // The listed name has been modified
-        full_list[j] = strdup(first);
-        // Free the font name storage
-        free (font);
-      }
-      // replace "style=Regular" so strcmp sorts it first
-      if (start) {
-        char *reg = strstr(full_list[j], "=Regular");
-        if (reg) reg[1]='.';
-      }
-    }
-        
-    // Release the fnt_set - we don't need it any more
-    FcFontSetDestroy(fnt_set);
-        
-    // Sort the list into alphabetic order
-    qsort(full_list, font_count, sizeof(*full_list), name_sort);
-    
-    // Now let us add the names we got to fltk's font list...
-    for (j = 0; j < font_count; j++)
-    {
-      if (full_list[j])
-      {
-        char xft_name[LOCAL_RAW_NAME_MAX];
-        char *stored_name;
-        // Parse the strings into FLTK-XFT style..
-        make_raw_name(xft_name, full_list[j]);
-        // NOTE: This just adds on AFTER the default fonts - no attempt is made
-        // to identify already loaded fonts. Is this bad?
-        stored_name = strdup(xft_name);
-        Fl::set_font((Fl_Font)(j + FL_FREE_FONT), stored_name);
-        fl_free_font ++;
-        
-        free(full_list[j]); // release that name from our internal array
-      }
-    }
-    // Now we are done with the list, release it fully
-    free(full_list);
-  }
-  return (Fl_Font)fl_free_font;
-} // ::set_fonts
-////////////////////////////////////////////////////////////////
-
-
-extern "C" {
-static int int_sort(const void *aa, const void *bb) {
-  return (*(int*)aa)-(*(int*)bb);
-}
-}
-
-////////////////////////////////////////////////////////////////
-
-// Return all the point sizes supported by this font:
-// Suprisingly enough Xft works exactly like fltk does and returns
-// the same list. Except there is no way to tell if the font is scalable.
-int Fl::get_font_sizes(Fl_Font fnum, int*& sizep) {
-  Fl_Fontdesc *s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // empty slot in table, use entry 0
-
-  fl_open_display();
-  XftFontSet* fs = XftListFonts(fl_display, fl_screen,
-                                XFT_FAMILY, XftTypeString, s->name+1,
-				(void *)0,
-                                XFT_PIXEL_SIZE,
-				(void *)0);
-  static int* array = 0;
-  static int array_size = 0;
-  if (fs->nfont >= array_size) {
-    delete[] array;
-    array = new int[array_size = fs->nfont+1];
-  }
-  array[0] = 0; int j = 1; // claim all fonts are scalable
-  for (int i = 0; i < fs->nfont; i++) {
-    double v;
-    if (XftPatternGetDouble(fs->fonts[i], XFT_PIXEL_SIZE, 0, &v) == XftResultMatch) {
-      array[j++] = int(v);
-    }
-  }
-  qsort(array+1, j-1, sizeof(int), int_sort);
-  XftFontSetDestroy(fs);
-  sizep = array;
-  return j;
-}
-
-//
-// End of "$Id: fl_set_fonts_xft.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $".
-//
diff --git a/common/fltk/src/fl_shadow_box.cxx b/common/fltk/src/fl_shadow_box.cxx
deleted file mode 100644
index 02cf660..0000000
--- a/common/fltk/src/fl_shadow_box.cxx
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// "$Id: fl_shadow_box.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Shadow box drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-#define BW 3
-
-static void fl_shadow_frame(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(FL_DARK3);
-  fl_rectf(x+BW, y+h-BW,  w - BW, BW);
-  fl_rectf(x+w-BW,  y+BW, BW,  h - BW);
-  fl_color(c);
-  fl_rect(x,y,w-BW,h-BW);
-}
-
-static void fl_shadow_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(c);
-  fl_rectf(x+1,y+1,w-2-BW,h-2-BW);
-  fl_shadow_frame(x,y,w,h,FL_GRAY0);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-Fl_Boxtype fl_define_FL_SHADOW_BOX() {
-  fl_internal_boxtype(_FL_SHADOW_FRAME, fl_shadow_frame);
-  fl_internal_boxtype(_FL_SHADOW_BOX, fl_shadow_box);
-  return _FL_SHADOW_BOX;
-}
-
-//
-// End of "$Id: fl_shadow_box.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_shortcut.cxx b/common/fltk/src/fl_shortcut.cxx
deleted file mode 100644
index 84c84f7..0000000
--- a/common/fltk/src/fl_shortcut.cxx
+++ /dev/null
@@ -1,386 +0,0 @@
-//
-// "$Id: fl_shortcut.cxx 8621 2011-04-23 15:46:30Z AlbrechtS $"
-//
-// Shortcut support routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Code to test and parse fltk shortcut numbers.
-//
-// A shortcut is a keysym or'd with shift flags.  In the simplest
-// sense a shortcut is matched if the shift state is exactly as
-// given and the key returning that keysym is pressed.
-//
-// To make it easier to match some things it is more complex:
-//
-// Only FL_META, FL_ALT, FL_SHIFT, and FL_CTRL must be "off".  A
-// zero in the other shift flags indicates "don't care".
-//
-// It also checks against the first character of Fl::event_text(),
-// and zero for FL_SHIFT means "don't care".
-// This allows punctuation shortcuts like "#" to work (rather than
-// calling it "shift+3" on a US keyboard)
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Button.H>
-#include <FL/fl_draw.H>
-#include <ctype.h>
-#include "flstring.h"
-#if !defined(WIN32) && !defined(__APPLE__)
-#include <FL/x.H>
-#endif
-
-/**
-  Tests the current event, which must be an FL_KEYBOARD or
-  FL_SHORTCUT, against a shortcut value (described in Fl_Button).
-
-  Not to be confused with Fl_Widget::test_shortcut().
-
-  \return non-zero if there is a match.
-*/
-int Fl::test_shortcut(unsigned int shortcut) {
-  if (!shortcut) return 0;
-
-  unsigned int v = shortcut & FL_KEY_MASK;
-  if (((unsigned)fl_tolower(v))!=v) {
-    shortcut |= FL_SHIFT;
-  }
-
-  int shift = Fl::event_state();
-  // see if any required shift flags are off:
-  if ((shortcut&shift) != (shortcut&0x7fff0000)) return 0;
-  // record shift flags that are wrong:
-  int mismatch = (shortcut^shift)&0x7fff0000;
-  // these three must always be correct:
-  if (mismatch&(FL_META|FL_ALT|FL_CTRL)) return 0;
-
-  unsigned int key = shortcut & FL_KEY_MASK;
-
-  // if shift is also correct, check for exactly equal keysyms:
-  if (!(mismatch&(FL_SHIFT)) && key == (unsigned)Fl::event_key()) return 1;
-
-  // try matching utf8, ignore shift:
-  unsigned int firstChar = fl_utf8decode(Fl::event_text(), Fl::event_text()+Fl::event_length(), 0);
-  if ( ! (FL_CAPS_LOCK&shift) && key==firstChar) return 1;
-
-  // kludge so that Ctrl+'_' works (as opposed to Ctrl+'^_'):
-  if ((shift&FL_CTRL) && key >= 0x3f && key <= 0x5F
-      && firstChar==(key^0x40)) return 1; // firstChar should be within a-z
-  return 0;
-}
-
-// This table must be in numeric order by fltk (X) keysym number:
-struct Keyname {unsigned int key; const char* name;};
-#if defined(WIN32)
-static Keyname table[] = {
-  {' ', "Space"},
-  {FL_BackSpace, "Backspace"},
-  {FL_Tab,	"Tab"},
-  {0xff0b/*XK_Clear*/, "Clear"},
-  {FL_Enter,	"Enter"}, // X says "Enter"
-  {FL_Pause,	"Pause"},
-  {FL_Scroll_Lock, "Scroll_Lock"},
-  {FL_Escape,	"Escape"},
-  {FL_Home,	"Home"},
-  {FL_Left,	"Left"},
-  {FL_Up,	"Up"},
-  {FL_Right,	"Right"},
-  {FL_Down,	"Down"},
-  {FL_Page_Up,	"Page_Up"}, // X says "Prior"
-  {FL_Page_Down,"Page_Down"}, // X says "Next"
-  {FL_End,	"End"},
-  {FL_Print,	"Print"},
-  {FL_Insert,	"Insert"},
-  {FL_Menu,	"Menu"},
-  {FL_Num_Lock,	"Num_Lock"},
-  {FL_KP_Enter,	"KP_Enter"},
-  {FL_Shift_L,	"Shift_L"},
-  {FL_Shift_R,	"Shift_R"},
-  {FL_Control_L,"Control_L"},
-  {FL_Control_R,"Control_R"},
-  {FL_Caps_Lock,"Caps_Lock"},
-  {FL_Meta_L,	"Meta_L"},
-  {FL_Meta_R,	"Meta_R"},
-  {FL_Alt_L,	"Alt_L"},
-  {FL_Alt_R,	"Alt_R"},
-  {FL_Delete,	"Delete"}
-};
-#elif defined(__APPLE__) 
-static Keyname table[] = {
-                                 // v - this column contains UTF-8 characters
-  {' ', "Space"},
-  {FL_BackSpace,"\xe2\x8c\xab"}, // erase to the left
-  {FL_Tab,	"\xe2\x87\xa5"}, // rightwards arrow to bar
-  {0xff0b,      "\xe2\x8c\xa6"}, // erase to the right
-  {FL_Enter,	"\xe2\x86\xa9"}, // leftwards arrow with hook
-  {FL_Pause,	"Pause"},
-  {FL_Scroll_Lock, "Scroll_Lock"},
-  {FL_Escape,	"\xe2\x90\x9b"},
-  {FL_Home,	"\xe2\x86\x96"}, // north west arrow
-  {FL_Left,	"\xe2\x86\x90"}, // leftwards arrow
-  {FL_Up,	"\xe2\x86\x91"}, // upwards arrow
-  {FL_Right,	"\xe2\x86\x92"}, // rightwards arrow
-  {FL_Down,	"\xe2\x86\x93"}, // downwards arrow
-  {FL_Page_Up,	"\xe2\x87\x9e"}, // upwards arrow with double stroke
-  {FL_Page_Down,"\xe2\x87\x9f"}, // downwards arrow with double stroke
-  {FL_End,	"\xe2\x86\x98"}, // south east arrow
-  {FL_Print,	"Print"},
-  {FL_Insert,	"Insert"},
-  {FL_Menu,	"Menu"},
-  {FL_Num_Lock,	"Num_Lock"},
-  {FL_KP_Enter,	"\xe2\x8c\xa4"}, // up arrow head between two horizontal bars
-  {FL_Shift_L,	"Shift_L"},
-  {FL_Shift_R,	"Shift_R"},
-  {FL_Control_L,"Control_L"},
-  {FL_Control_R,"Control_R"},
-  {FL_Caps_Lock,"\xe2\x87\xaa"}, // upwards white arrow from bar
-  {FL_Meta_L,	"Meta_L"},
-  {FL_Meta_R,	"Meta_R"},
-  {FL_Alt_L,	"Alt_L"},
-  {FL_Alt_R,	"Alt_R"},
-  {FL_Delete,	"\xe2\x8c\xa7"}  // x in a rectangle box
-};
-#endif
-
-/**
-  Get a human-readable string from a shortcut value.
-
-  Unparse a shortcut value as used by Fl_Button or Fl_Menu_Item into
-  a human-readable string like "Alt+N". This only works if the shortcut
-  is a character key or a numbered function key. If the shortcut is
-  zero then an empty string is returned. The return value points at
-  a static buffer that is overwritten with each call.
-
-  \param [in] shortcut the integer value containing the ascii character or extended keystroke plus modifiers
-  \return a pointer to a static buffer containing human readable text for the shortcut
-  */
-const char* fl_shortcut_label(unsigned int shortcut) {
-  return fl_shortcut_label(shortcut, 0L);
-}
-
-/** 
-  Get a human-readable string from a shortcut value.
-
-  \param [in] shortcut the integer value containing the ascii character or extended keystroke plus modifiers
-  \param [in] eom if this pointer is set, it will receive a pointer to the end of the modifier text
-  \return a pointer to a static buffer containing human readable text for the shortcut
-  \see fl_shortcut_label(unsigned int shortcut)
-  */
-const char* fl_shortcut_label(unsigned int shortcut, const char **eom) {
-  static char buf[20];
-  char *p = buf;
-  if (eom) *eom = p;
-  if (!shortcut) {*p = 0; return buf;}
-  // fix upper case shortcuts
-  unsigned int v = shortcut & FL_KEY_MASK;
-  if (((unsigned)fl_tolower(v))!=v) {
-    shortcut |= FL_SHIFT;
-  }
-#ifdef __APPLE__
-  //                        this column contains utf8 characters - v
-  if (shortcut & FL_SHIFT) {strcpy(p,"\xe2\x87\xa7"); p += 3;}  // upwards white arrow
-  if (shortcut & FL_CTRL)  {strcpy(p,"\xe2\x8c\x83"); p += 3;}  // up arrowhead
-  if (shortcut & FL_ALT)   {strcpy(p,"\xe2\x8c\xa5"); p += 3;}  // alternative key symbol
-  if (shortcut & FL_META)  {strcpy(p,"\xe2\x8c\x98"); p += 3;}  // place of interest sign
-#else
-  if (shortcut & FL_META) {strcpy(p,"Meta+"); p += 5;}
-  if (shortcut & FL_ALT) {strcpy(p,"Alt+"); p += 4;}
-  if (shortcut & FL_SHIFT) {strcpy(p,"Shift+"); p += 6;}
-  if (shortcut & FL_CTRL) {strcpy(p,"Ctrl+"); p += 5;}
-#endif // __APPLE__
-  if (eom) *eom = p;
-  unsigned int key = shortcut & FL_KEY_MASK;
-#if defined(WIN32) || defined(__APPLE__) // if not X
-  if (key >= FL_F && key <= FL_F_Last) {
-    *p++ = 'F';
-    if (key > FL_F+9) *p++ = (key-FL_F)/10+'0';
-    *p++ = (key-FL_F)%10 + '0';
-  } else {
-    // binary search the table for a match:
-    int a = 0;
-    int b = sizeof(table)/sizeof(*table);
-    while (a < b) {
-      int c = (a+b)/2;
-      if (table[c].key == key) {
-        if (p > buf) {
-          strcpy(p,table[c].name); 
-          return buf;
-        } else {
-          const char *sp = table[c].name;
-          if (eom) *eom = sp;
-          return sp;
-        }
-      }
-      if (table[c].key < key) a = c+1;
-      else b = c;
-    }
-    if (key >= FL_KP && key <= FL_KP_Last) {
-      // mark keypad keys with KP_ prefix
-      strcpy(p,"KP_"); p += 3;
-      *p++ = uchar(key & 127);
-    } else {
-      // if none found, use the keystroke as a match:
-      p += fl_utf8encode(fl_toupper(key), p); 
-    }
-  }
-  *p = 0;
-  return buf;
-#else
-  const char* q;
-  if (key == FL_Enter || key == '\r') q="Enter";  // don't use Xlib's "Return":
-  else if (key > 32 && key < 0x100) q = 0;
-  else q = XKeysymToString(key);
-  if (!q) {
-    p += fl_utf8encode(fl_toupper(key), p); 
-    *p = 0; 
-    return buf;
-  }
-  if (p > buf) {
-    strcpy(p,q); 
-    return buf;
-  } else {
-    if (eom) *eom = q;
-    return q;
-  }
-#endif
-}
-
-// Emulation of XForms named shortcuts
-#include <stdlib.h>
-/**
-  Emulation of XForms named shortcuts.
-
-  Converts ascii shortcut specifications (eg. "^c") 
-  into the FLTK integer equivalent (eg. FL_CTRL+'c')
-
-  These ascii characters are used to specify the various keyboard modifier keys:
-  \verbatim
-   # - Alt
-   + - Shift
-   ^ - Control
-  \endverbatim
-*/
-unsigned int fl_old_shortcut(const char* s) {
-  if (!s || !*s) return 0;
-  unsigned int n = 0;
-  if (*s == '#') {n |= FL_ALT; s++;}
-  if (*s == '+') {n |= FL_SHIFT; s++;}
-  if (*s == '^') {n |= FL_CTRL; s++;}
-  if (*s && s[1]) return n | (int)strtol(s,0,0); // allow 0xf00 to get any key
-  return n | *s;
-}
-
-// Tests for &x shortcuts in button labels:
-
-/** Returns the Unicode value of the '&x' shortcut in a given text.
-
-  The given text \p t (usually a widget's label or a menu text) is
-  searched for a '&x' shortcut label, and if found, the Unicode
-  value (code point) of the '&x' shortcut is returned.
-
-  \param t text or label to search for '&x' shortcut.
-
-  \return Unicode (UCS-4) value of shortcut in \p t or 0.
-
-  \note Internal use only.
-*/
-unsigned int Fl_Widget::label_shortcut(const char *t) {
-  if (!t) return 0;
-  for (;;) {
-    if (*t==0) return 0;
-    if (*t=='&') {
-      unsigned int s = fl_utf8decode(t+1, 0, 0);
-      if (s==0) return 0;
-      else if (s==(unsigned int)'&') t++;
-      else return s;
-    }
-    t++;
-  }
-}
-
-/** Returns true if the given text \p t contains the entered '&x' shortcut.
-
-  This method must only be called in handle() methods or callbacks after
-  a keypress event (usually FL_KEYDOWN or FL_SHORTCUT). The given text
-  \p t (usually a widget's label or menu text) is searched for a '&x'
-  shortcut, and if found, this is compared with the entered key value.
-
-  Fl::event_text() is used to get the entered key value.
-  Fl::event_state() is used to get the Alt modifier, if \p require_alt
-  is true.
-
-  \param t text or label to search for '&x' shortcut.
-  \param require_alt if true: match only if Alt key is pressed.
-
-  \return true, if the entered text matches the '&x' shortcut in \p t
-	  false (0) otherwise.
-
-  \note Internal use only.
-*/
-int Fl_Widget::test_shortcut(const char *t, const bool require_alt) {
-  if (!t) return 0;
-  // for menubars etc. shortcuts must work only if the Alt modifier is pressed
-  if (require_alt && Fl::event_state(FL_ALT)==0) return 0;
-  unsigned int c = fl_utf8decode(Fl::event_text(), Fl::event_text()+Fl::event_length(), 0);
-#ifdef __APPLE__
-  // this line makes underline shortcuts work the same way they do on MSWindow
-  // and Linux. 
-  if (c && Fl::event_state(FL_ALT)) 
-    c = Fl::event_key();
-#endif
-  if (!c) return 0;
-  unsigned int ls = label_shortcut(t);
-  if (c == ls)
-    return 1;
-#ifdef __APPLE__
-  // On OS X, we need to simulate the upper case keystroke as well
-  if (Fl::event_state(FL_ALT) && c<128 && isalpha(c) && (unsigned)toupper(c)==ls)
-    return 1;
-#endif
-  return 0;
-}
-
-/** Returns true if the widget's label contains the entered '&x' shortcut.
-
-  This method must only be called in handle() methods or callbacks after
-  a keypress event (usually FL_KEYDOWN or FL_SHORTCUT).
-  The widget's label is searched for a '&x'
-  shortcut, and if found, this is compared with the entered key value.
-
-  Fl::event_text() is used to get the entered key value.
-
-  \return true, if the entered text matches the widget's'&x' shortcut,
-	  false (0) otherwise.
-
-  \note Internal use only.
-*/
-
-int Fl_Widget::test_shortcut() {
-  if (!(flags()&SHORTCUT_LABEL)) return 0;
-  return test_shortcut(label());
-}
-
-//
-// End of "$Id: fl_shortcut.cxx 8621 2011-04-23 15:46:30Z AlbrechtS $".
-//
diff --git a/common/fltk/src/fl_show_colormap.cxx b/common/fltk/src/fl_show_colormap.cxx
deleted file mode 100644
index b3d705a..0000000
--- a/common/fltk/src/fl_show_colormap.cxx
+++ /dev/null
@@ -1,162 +0,0 @@
-//
-// "$Id: fl_show_colormap.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Colormap color selection dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Single_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_show_colormap.H>
-#include <config.h>
-
-#define BOXSIZE 14
-#define BORDER 4
-
-/** 
- This widget creates a modal window for selecting a color from the colormap.
- Pretty much unchanged from Forms.
-*/
-class ColorMenu : public Fl_Window {
-  Fl_Color initial;
-  Fl_Color which, previous;
-  int done;
-  void drawbox(Fl_Color);
-  void draw();
-  int handle(int);
-public:
-  ColorMenu(Fl_Color oldcol);
-  Fl_Color run();
-};
-
-ColorMenu::ColorMenu(Fl_Color oldcol) :
-  Fl_Window(BOXSIZE*8+1+2*BORDER, BOXSIZE*32+1+2*BORDER) {
-  clear_border();
-  set_modal();
-  initial = which = oldcol;
-}
-
-void ColorMenu::drawbox(Fl_Color c) {
-  if (c < 0 || c > 255) return;
-  int X = (c%8)*BOXSIZE+BORDER;
-  int Y = (c/8)*BOXSIZE+BORDER;
-#if BORDER_WIDTH < 3
-  if (c == which) fl_draw_box(FL_DOWN_BOX, X+1, Y+1, BOXSIZE-1, BOXSIZE-1, c);
-  else fl_draw_box(FL_BORDER_BOX, X, Y, BOXSIZE+1, BOXSIZE+1, c);
-#else
-  fl_draw_box(c == which ? FL_DOWN_BOX : FL_BORDER_BOX,
-	      X, Y, BOXSIZE+1, BOXSIZE+1, c);
-#endif
-}
-
-void ColorMenu::draw() {
-  if (damage() != FL_DAMAGE_CHILD) {
-    fl_draw_box(FL_UP_BOX,0,0,w(),h(),color());
-    for (int c = 0; c < 256; c++) drawbox((Fl_Color)c);
-  } else {
-    drawbox(previous);
-    drawbox(which);
-  }
-  previous = which;
-}
-
-int ColorMenu::handle(int e) {
-  Fl_Color c = which;
-  switch (e) {
-  case FL_PUSH:
-  case FL_DRAG: {
-    int X = (Fl::event_x_root() - x() - BORDER);
-    if (X >= 0) X = X/BOXSIZE;
-    int Y = (Fl::event_y_root() - y() - BORDER);
-    if (Y >= 0) Y = Y/BOXSIZE;
-    if (X >= 0 && X < 8 && Y >= 0 && Y < 32)
-      c = 8*Y + X;
-    else
-      c = initial;
-    } break;
-  case FL_RELEASE:
-    done = 1;
-    return 1;
-  case FL_KEYBOARD:
-    switch (Fl::event_key()) {
-    case FL_Up: if (c > 7) c -= 8; break;
-    case FL_Down: if (c < 256-8) c += 8; break;
-    case FL_Left: if (c > 0) c--; break;
-    case FL_Right: if (c < 255) c++; break;
-    case FL_Escape: which = initial; done = 1; return 1;
-    case FL_KP_Enter:
-    case FL_Enter: done = 1; return 1;
-    default: return 0;
-    }
-    break;
-  default:
-    return 0;
-  }
-  if (c != which) {
-    which = (Fl_Color)c; damage(FL_DAMAGE_CHILD);
-    int bx = (c%8)*BOXSIZE+BORDER;
-    int by = (c/8)*BOXSIZE+BORDER;
-    int px = x();
-    int py = y();
-    int scr_x, scr_y, scr_w, scr_h;
-    Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h);
-    if (px < scr_x) px = scr_x;
-    if (px+bx+BOXSIZE+BORDER >= scr_x+scr_w) px = scr_x+scr_w-bx-BOXSIZE-BORDER;
-    if (py < scr_y) py = scr_y;
-    if (py+by+BOXSIZE+BORDER >= scr_y+scr_h) py = scr_y+scr_h-by-BOXSIZE-BORDER;
-    if (px+bx < BORDER) px = BORDER-bx;
-    if (py+by < BORDER) py = BORDER-by;
-    position(px,py);
-  }
-  return 1;
-}
-
-extern char fl_override_redirect; // hack for menus
-
-#ifdef _MSC_VER
-#pragma optimize("a",off) // needed to get the done check to work
-#endif
-Fl_Color ColorMenu::run() {
-  if (which < 0 || which > 255) {
-    position(Fl::event_x_root()-w()/2, Fl::event_y_root()-y()/2);
-  } else {
-    position(Fl::event_x_root()-(initial%8)*BOXSIZE-BOXSIZE/2-BORDER,
-	     Fl::event_y_root()-(initial/8)*BOXSIZE-BOXSIZE/2-BORDER);
-  }
-  show();
-  Fl::grab(*this);
-  done = 0;
-  while (!done) Fl::wait();
-  Fl::grab(0);
-  return which;
-}
-
-Fl_Color fl_show_colormap(Fl_Color oldcol) {
-  ColorMenu m(oldcol);
-  return m.run();
-}
-
-//
-// End of "$Id: fl_show_colormap.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_symbols.cxx b/common/fltk/src/fl_symbols.cxx
deleted file mode 100644
index a68f39a..0000000
--- a/common/fltk/src/fl_symbols.cxx
+++ /dev/null
@@ -1,714 +0,0 @@
-//
-// "$Id: fl_symbols.cxx 7903 2010-11-28 21:06:39Z matt $"
-//
-// Symbol drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// These are small graphics drawn by the normal label-drawing
-// code when the string starts with an '@' sign.
-
-// Adapted from original code written by:
-
-// Written by Mark Overmars
-// Version 2.1 a
-// Date: Oct  2, 1992
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/math.h>
-#include "flstring.h"
-
-typedef struct {
-  const char *name;
-  void (*drawit)(Fl_Color);
-  char scalable;
-  char notempty;
-} SYMBOL;
-
-#define MAXSYMBOL       211
-   /* Maximal number of symbols in table. Only half of them are
-      used. Should be prime. */
-
-static SYMBOL symbols[MAXSYMBOL];      /* The symbols */
-static int symbnumb = -1;              /* Their number */
-
-static int find(const char *name) {
-// returns hash entry if it exists, or first empty slot:
-  int pos = name[0] ? (
-    name[1] ? (
-      name[2] ? 71*name[0]+31*name[1]+name[2] : 31*name[0]+name[1]
-    ) :
-      name[0]
-  ) : 0;
-  pos %= MAXSYMBOL;
-  int hh2 = name[0] ? (
-    (name[1]) ? 51*name[0]+3*name[1] : 3*name[0]
-    ) : 1;
-  hh2 %= MAXSYMBOL; if (!hh2) hh2 = 1;
-  for (;;) {
-    if (!symbols[pos].notempty) return pos;
-    if (!strcmp(symbols[pos].name,name)) return pos;
-    pos = (pos + hh2) % MAXSYMBOL;
-  }
-}
-
-static void fl_init_symbols(void);
-
-/**************** The routines seen by the user *************************/
-
-/**
-  Adds a symbol to the system.
-  \param[in] name     name of symbol (without the "@")
-  \param[in] drawit   function to draw symbol
-  \param[in] scalable set to 1 if \p drawit uses scalable vector drawing
-  \returns 1 on success, 0 on failure
-  */
-int fl_add_symbol(const char *name, void (*drawit)(Fl_Color), int scalable)
-{
-  fl_init_symbols();
-  int pos;
-  if (symbnumb > MAXSYMBOL / 2) return 0;	// table is full
-  pos = find(name);
-  symbols[pos].name = name;
-  symbols[pos].drawit = drawit;
-  symbols[pos].notempty = 1;
-  symbols[pos].scalable = scalable;
-  symbnumb++;
-  return 1;
-}
-
-int fl_return_arrow(int x,int y,int w,int h);
-
-/**
-  Draw the named symbol in the given rectangle using the given color
-  \param[in] label name of symbol
-  \param[in] x,y   position of symbol
-  \param[in] w,h   size of symbol
-  \param[in] col   color of symbox
-  \returns 1 on success, 0 on failure
-  */
-// provided for back compatibility:
-int fl_draw_symbol(const char *label,int x,int y,int w,int h,Fl_Color col) {  
-  const char *p = label;
-  if (*p++ != '@') return 0;
-  fl_init_symbols();
-  int equalscale = 0;
-  if (*p == '#') {equalscale = 1; p++;}
-  if (*p == '-' && p[1]>='1' && p[1]<='9') {
-    int n = p[1]-'0';
-    x += n; y += n; w -= 2*n; h -= 2*n;
-    p += 2;
-  } else if (*p == '+' && p[1]>='1' && p[1]<='9') {
-    int n = p[1]-'0';
-    x -= n; y -= n; w += 2*n; h += 2*n;
-    p += 2;
-  }
-  if (w < 10) {x -= (10-w)/2; w = 10;}
-  if (h < 10) {y -= (10-h)/2; h = 10;}
-  w = (w-1)|1; h = (h-1)|1;
-  char flip_x = 0, flip_y = 0;
-  if (*p=='$') {
-    flip_x = 1;
-    p++;
-  }
-  if (*p=='%') {
-    flip_y = 1;
-    p++;
-  }
-  int rotangle;
-  switch (*p++) {
-  case '0':
-    rotangle = 1000*(p[1]-'0') + 100*(p[2]-'0') + 10*(p[3]-'0');
-    p += 4;
-    break;
-  case '1': rotangle = 2250; break;
-  case '2': rotangle = 2700; break;
-  case '3': rotangle = 3150; break;
-  case '4': rotangle = 1800; break;
-  case '5':
-  case '6': rotangle = 0; break;
-  case '7': rotangle = 1350; break;
-  case '8': rotangle =  900; break;
-  case '9': rotangle =  450; break;
-  default: rotangle = 0; p--; break;
-  }
-  int pos = find(p);
-  if (!symbols[pos].notempty) return 0;
-  if (symbols[pos].scalable == 3) { // kludge to detect return arrow
-    fl_return_arrow(x,y,w,h);
-    return 1;
-  }
-  fl_push_matrix();
-  fl_translate(x+w/2,y+h/2);
-  if (symbols[pos].scalable) {
-    if (equalscale) {if (w<h) h = w; else w = h;}
-    fl_scale(0.5*w, 0.5*h);
-    fl_rotate(rotangle/10.0);
-    if (flip_x) fl_scale(-1.0, 1.0);
-    if (flip_y) fl_scale(1.0, -1.0);
-  }
-  (symbols[pos].drawit)(col);
-  fl_pop_matrix();
-  return 1;
-}
-
-/******************** THE DEFAULT SYMBOLS ****************************/
-
-/* Some help stuff */
-
-#define BP fl_begin_polygon()
-#define EP fl_end_polygon()
-#define BCP fl_begin_complex_polygon()
-#define ECP fl_end_complex_polygon()
-#define BL fl_begin_line()
-#define EL fl_end_line()
-#define BC fl_begin_loop()
-#define EC fl_end_loop()
-#define vv(x,y) fl_vertex(x,y)
-
-//for the outline color
-static void set_outline_color(Fl_Color c) {
-  fl_color(fl_darker(c));
-}
-
-static void rectangle(double x,double y,double x2,double y2,Fl_Color col) {
-  fl_color(col);
-  BP; vv(x,y); vv(x2,y); vv(x2,y2); vv(x,y2); EP;
-  set_outline_color(col);
-  BC; vv(x,y); vv(x2,y); vv(x2,y2); vv(x,y2); EC;
-}
-
-/* The drawing routines */
-
-static void draw_fltk(Fl_Color col) 
-{
-  fl_color(col);
-  // F fill
-  BCP; vv(-2.0, -0.5); vv(-1.0, -0.5); vv(-1.0, -0.3); vv(-1.8, -0.3);
-  vv(-1.8, -0.1); vv(-1.2, -0.1); vv(-1.2, 0.1); vv(-1.8, 0.1);
-  vv(-1.8, 0.5); vv(-2.0, 0.5); ECP;
-  // L fill
-  BCP; vv(-1.0, -0.5); vv(-0.8, -0.5); vv(-0.8, 0.3); vv(0.0, 0.3);
-  vv(0.0, 0.5); vv(-1.0, 0.5); ECP;
-  // T outline
-  BCP; vv(-0.1, -0.5); vv(1.1, -0.5); vv(1.1, -0.3); vv(0.6, -0.3);
-  vv(0.6, 0.5); vv(0.4, 0.5); vv(0.4, -0.3); vv(-0.1, -0.3); ECP;
-  // K outline
-  BCP; vv(1.1, -0.5); vv(1.3, -0.5); vv(1.3, -0.15); vv(1.70, -0.5);
-  vv(2.0, -0.5); vv(1.43, 0.0); vv(2.0, 0.5); vv(1.70, 0.5);
-  vv(1.3, 0.15); vv(1.3, 0.5); vv(1.1, 0.5); ECP;
-  set_outline_color(col);
-  // F outline
-  BC; vv(-2.0, -0.5); vv(-1.0, -0.5); vv(-1.0, -0.3); vv(-1.8, -0.3);
-  vv(-1.8, -0.1); vv(-1.2, -0.1); vv(-1.2, 0.1); vv(-1.8, 0.1);
-  vv(-1.8, 0.5); vv(-2.0, 0.5); EC;
-  // L outline
-  BC; vv(-1.0, -0.5); vv(-0.8, -0.5); vv(-0.8, 0.3); vv(0.0, 0.3);
-  vv(0.0, 0.5); vv(-1.0, 0.5); EC;
-  // T outline
-  BC; vv(-0.1, -0.5); vv(1.1, -0.5); vv(1.1, -0.3); vv(0.6, -0.3);
-  vv(0.6, 0.5); vv(0.4, 0.5); vv(0.4, -0.3); vv(-0.1, -0.3); EC;
-  // K outline
-  BC; vv(1.1, -0.5); vv(1.3, -0.5); vv(1.3, -0.15); vv(1.70, -0.5);
-  vv(2.0, -0.5); vv(1.43, 0.0); vv(2.0, 0.5); vv(1.70, 0.5);
-  vv(1.3, 0.15); vv(1.3, 0.5); vv(1.1, 0.5); EC;
-}
-
-static void draw_search(Fl_Color col) 
-{
-  fl_color(col);
-  BP; vv(-.4, .13); vv(-1.0, .73); vv(-.73, 1.0); vv(-.13, .4); EP;
-  set_outline_color(col);
-  fl_line_style(FL_SOLID, 3, 0);
-  BC; fl_circle(.2, -.2, .6); EC;
-  fl_line_style(FL_SOLID, 1, 0);
-  BC; vv(-.4, .13); vv(-1.0, .73); vv(-.73, 1.0); vv(-.13, .4); EC;
-}
-
-static void draw_arrow1(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(-0.8,-0.4); vv(-0.8,0.4); vv(0.0,0.4); vv(0.0,-0.4); EP;
-  BP; vv(0.0,0.8); vv(0.8,0.0); vv(0.0,-0.8); vv(0.0,-0.4); vv(0.0,0.4); EP;
-  set_outline_color(col);
-  BC; vv(-0.8,-0.4); vv(-0.8,0.4); vv(0.0,0.4); vv(0.0,0.8); vv(0.8,0.0);
-      vv(0.0,-0.8); vv(0.0,-0.4); EC;
-}
-
-static void draw_arrow1bar(Fl_Color col)
-{
-  draw_arrow1(col);
-  rectangle(.6,-.8,.9,.8,col);
-}
-
-static void draw_arrow2(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(-0.3,0.8); vv(0.50,0.0); vv(-0.3,-0.8); EP;
-  set_outline_color(col);
-  BC; vv(-0.3,0.8); vv(0.50,0.0); vv(-0.3,-0.8); EC;
-}
-
-static void draw_arrow3(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EP;
-  BP; vv(-0.7,0.8); vv(0.1,0.0); vv(-0.7,-0.8); EP;
-  set_outline_color(col);
-  BC; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EC;
-  BC; vv(-0.7,0.8); vv(0.1,0.0); vv(-0.7,-0.8); EC;
-}
-
-static void draw_arrowbar(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EP;
-  BP; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EP;
-  set_outline_color(col);
-  BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
-  BC; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EC;
-}
-
-static void draw_arrowbox(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EP;
-  BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
-  set_outline_color(col);
-  BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
-  BC; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EC;
-}
-
-static void draw_bararrow(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EP;
-  BP; vv(-0.5,0.8); vv(-0.1,0.8); vv(-0.1,-0.8); vv(-0.5,-0.8); EP;
-  set_outline_color(col);
-  BC; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EC;
-  BC; vv(-0.5,0.8); vv(-0.1,0.8); vv(-0.1,-0.8); vv(-0.5,-0.8); EC;
-}
-
-static void draw_doublebar(Fl_Color col) { 
-  rectangle(-0.6,-0.8,-.1,.8,col);
-  rectangle(.1,-0.8,.6,.8,col); 
-}
-
-static void draw_arrow01(Fl_Color col)
-  { fl_rotate(180); draw_arrow1(col); }
-
-static void draw_arrow02(Fl_Color col)
-  { fl_rotate(180); draw_arrow2(col); }
-
-static void draw_arrow03(Fl_Color col)
-  { fl_rotate(180); draw_arrow3(col); }
-
-static void draw_0arrowbar(Fl_Color col)
-  { fl_rotate(180); draw_arrowbar(col); }
-
-static void draw_0arrowbox(Fl_Color col)
-  { fl_rotate(180); draw_arrowbox(col); }
-
-static void draw_0bararrow(Fl_Color col)
-  { fl_rotate(180); draw_bararrow(col); }
-
-static void draw_doublearrow(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(-0.35,-0.4); vv(-0.35,0.4); vv(0.35,0.4); vv(0.35,-0.4); EP;
-  BP; vv(0.15,0.8); vv(0.95,0.0); vv(0.15,-0.8); EP;
-  BP; vv(-0.15,0.8); vv(-0.95,0.0); vv(-0.15,-0.8); EP;
-  set_outline_color(col);
-  BC; vv(-0.15,0.4); vv(0.15,0.4); vv(0.15,0.8); vv(0.95,0.0);
-      vv(0.15,-0.8); vv(0.15,-0.4); vv(-0.15,-0.4); vv(-0.15,-0.8);
-      vv(-0.95,0.0); vv(-0.15,0.8); EC;
-}
-
-static void draw_arrow(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(0.65,0.1); vv(1.0,0.0); vv(0.65,-0.1); EP;
-  BL; vv(-1.0,0.0); vv(0.65,0.0); EL;
-  set_outline_color(col);
-  BL; vv(-1.0,0.0); vv(0.65,0.0); EL;
-  BC; vv(0.65,0.1); vv(1.0,0.0); vv(0.65,-0.1); EC;
-}
-
-static void draw_square(Fl_Color col)
-  { rectangle(-1,-1,1,1,col); }
-
-static void draw_circle(Fl_Color col) {
-  fl_color(col); BP; fl_circle(0,0,1); EP;
-  set_outline_color(col);
-  BC; fl_circle(0,0,1); EC;
-}
-
-static void draw_line(Fl_Color col)
-  { fl_color(col); BL; vv(-1.0,0.0); vv(1.0,0.0); EL; }
-
-static void draw_plus(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(-0.9,-0.15); vv(-0.9,0.15); vv(0.9,0.15); vv(0.9,-0.15); EP;
-  BP; vv(-0.15,-0.9); vv(-0.15,0.9); vv(0.15,0.9); vv(0.15,-0.9); EP;
-  set_outline_color(col);
-  BC;
-  vv(-0.9,-0.15); vv(-0.9,0.15); vv(-0.15,0.15); vv(-0.15,0.9);
-  vv(0.15,0.9); vv(0.15,0.15); vv(0.9,0.15); vv(0.9,-0.15);
-  vv(0.15,-0.15); vv(0.15,-0.9); vv(-0.15,-0.9); vv(-0.15,-0.15);
-  EC;
-}
-
-static void draw_uparrow(Fl_Color) {
-  fl_color(FL_LIGHT3);
-  BL; vv(-.8,.8); vv(-.8,-.8); vv(.8,0); EL;
-  fl_color(FL_DARK3);
-  BL; vv(-.8,.8); vv(.8, 0); EL;
-}
-
-static void draw_downarrow(Fl_Color) {
-  fl_color(FL_DARK3);
-  BL; vv(-.8,.8); vv(-.8,-.8); vv(.8,0); EL;
-  fl_color(FL_LIGHT3);
-  BL; vv(-.8,.8); vv(.8, 0); EL;
-}
-
-static void draw_menu(Fl_Color col)
-{
-  rectangle(-0.65, 0.85, 0.65, -0.25, col);
-  rectangle(-0.65, -0.6, 0.65, -1.0, col);
-}
-
-// Standard UI icons...
-static void draw_filenew(Fl_Color c) {
-  fl_color(c);
-  BCP;
-    vv(-0.7, -1.0);
-    vv(0.1, -1.0);
-    vv(0.1, -0.4);
-    vv(0.7, -0.4);
-    vv(0.7, 1.0);
-    vv(-0.7, 1.0);
-  ECP;
-
-  fl_color(fl_lighter(c));
-  BP;
-    vv(0.1, -1.0);
-    vv(0.1, -0.4);
-    vv(0.7, -0.4);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(-0.7, -1.0);
-    vv(0.1, -1.0);
-    vv(0.1, -0.4);
-    vv(0.7, -0.4);
-    vv(0.7, 1.0);
-    vv(-0.7, 1.0);
-  EC;
-
-  BL;
-    vv(0.1, -1.0);
-    vv(0.7, -0.4);
-  EL;
-}
-
-static void draw_fileopen(Fl_Color c) {
-  fl_color(c);
-  BP;
-    vv(-1.0, -0.7);
-    vv(-0.9, -0.8);
-    vv(-0.4, -0.8);
-    vv(-0.3, -0.7);
-    vv(0.6, -0.7);
-    vv(0.6, 0.7);
-    vv(-1.0, 0.7);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(-1.0, -0.7);
-    vv(-0.9, -0.8);
-    vv(-0.4, -0.8);
-    vv(-0.3, -0.7);
-    vv(0.6, -0.7);
-    vv(0.6, 0.7);
-    vv(-1.0, 0.7);
-  EC;
-
-  fl_color(fl_lighter(c));
-  BP;
-    vv(-1.0, 0.7);
-    vv(-0.6, -0.3);
-    vv(1.0, -0.3);
-    vv(0.6, 0.7);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(-1.0, 0.7);
-    vv(-0.6, -0.3);
-    vv(1.0, -0.3);
-    vv(0.6, 0.7);
-  EC;
-}
-
-static void draw_filesave(Fl_Color c) {
-  fl_color(c);
-  BP;
-    vv(-0.9, -1.0);
-    vv(0.9, -1.0);
-    vv(1.0, -0.9);
-    vv(1.0, 0.9);
-    vv(0.9, 1.0);
-    vv(-0.9, 1.0);
-    vv(-1.0, 0.9);
-    vv(-1.0, -0.9);
-  EP;
-
-  fl_color(fl_lighter(c));
-  BP;
-    vv(-0.7, -1.0);
-    vv(0.7, -1.0);
-    vv(0.7, -0.4);
-    vv(-0.7, -0.4);
-  EP;
-
-  BP;
-    vv(-0.7, 0.0);
-    vv(0.7, 0.0);
-    vv(0.7, 1.0);
-    vv(-0.7, 1.0);
-  EP;
-
-  fl_color(c);
-  BP;
-    vv(-0.5, -0.9);
-    vv(-0.3, -0.9);
-    vv(-0.3, -0.5);
-    vv(-0.5, -0.5);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(-0.9, -1.0);
-    vv(0.9, -1.0);
-    vv(1.0, -0.9);
-    vv(1.0, 0.9);
-    vv(0.9, 1.0);
-    vv(-0.9, 1.0);
-    vv(-1.0, 0.9);
-    vv(-1.0, -0.9);
-  EC;
-}
-
-static void draw_filesaveas(Fl_Color c) {
-  draw_filesave(c);
-
-  fl_color(fl_color_average(c, FL_WHITE, 0.25f));
-  BP;
-    vv(0.6, -0.8);
-    vv(1.0, -0.4);
-    vv(0.0, 0.6);
-    vv(-0.4, 0.6);
-    vv(-0.4, 0.2);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(0.6, -0.8);
-    vv(1.0, -0.4);
-    vv(0.0, 0.6);
-    vv(-0.4, 0.6);
-    vv(-0.4, 0.2);
-  EC;
-
-  BP;
-    vv(-0.1, 0.6);
-    vv(-0.4, 0.6);
-    vv(-0.4, 0.3);
-  EP;
-}
-
-static void draw_fileprint(Fl_Color c) {
-  fl_color(c);
-  BP;
-    vv(-0.8, 0.0);
-    vv(0.8, 0.0);
-    vv(1.0, 0.2);
-    vv(1.0, 1.0);
-    vv(-1.0, 1.0);
-    vv(-1.0, 0.2);
-  EP;
-
-  fl_color(fl_color_average(c, FL_WHITE, 0.25f));
-  BP;
-    vv(-0.6, 0.0);
-    vv(-0.6, -1.0);
-    vv(0.6, -1.0);
-    vv(0.6, 0.0);
-  EP;
-
-  fl_color(fl_lighter(c));
-  BP;
-    vv(-0.6, 0.6);
-    vv(0.6, 0.6);
-    vv(0.6, 1.0);
-    vv(-0.6, 1.0);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(-0.8, 0.0);
-    vv(-0.6, 0.0);
-    vv(-0.6, -1.0);
-    vv(0.6, -1.0);
-    vv(0.6, 0.0);
-    vv(0.8, 0.0);
-    vv(1.0, 0.2);
-    vv(1.0, 1.0);
-    vv(-1.0, 1.0);
-    vv(-1.0, 0.2);
-  EC;
-
-  BC;
-    vv(-0.6, 0.6);
-    vv(0.6, 0.6);
-    vv(0.6, 1.0);
-    vv(-0.6, 1.0);
-  EC;
-}
-
-static void draw_round_arrow(Fl_Color c, float da=5.0) {
-  double a, r, dr1=0.005, dr2=0.015;
-  int i, j;
-  for (j=0; j<2; j++) {
-    if (j&1) {
-      fl_color(c);
-      set_outline_color(c);
-      BC;
-    } else {
-      fl_color(c);
-      BCP;
-    }
-    vv(-0.1, 0.0);
-    vv(-1.0, 0.0);
-    vv(-1.0, 0.9);
-    for (i=27, a=140.0, r=1.0; i>0; i--, a-=da, r-=dr1) {
-      double ar = a/180.0 * M_PI;
-      vv(cos(ar)*r, sin(ar)*r);
-    }
-    for (i=27; i>=0; a+=da, i--, r-=dr2) {
-      double ar = a/180.0 * M_PI;
-      vv(cos(ar)*r, sin(ar)*r);
-    }
-    if (j&1) {
-      EC;
-    } else {
-      ECP;
-    }
-  }
-}
-
-static void draw_refresh(Fl_Color c) {
-  draw_round_arrow(c);
-  fl_rotate(180.0);
-  draw_round_arrow(c);
-  fl_rotate(-180.0);
-}
-
-static void draw_reload(Fl_Color c) {
-  fl_rotate(-135.0);
-  draw_round_arrow(c, 10);
-  fl_rotate(135.0);
-}
-
-static void draw_undo(Fl_Color c) {
-  fl_translate(0.0, 0.2);
-  fl_scale(1.0, -1.0);
-  draw_round_arrow(c, 6);
-  fl_scale(1.0, -1.0);
-  fl_translate(0.0, -0.2);
-}
-
-static void draw_redo(Fl_Color c) {
-  fl_scale(-1.0, 1.0);
-  draw_undo(c);
-  fl_scale(-1.0, 1.0);
-}
-
-static void fl_init_symbols(void) {
-  static char beenhere;
-  if (beenhere) return;
-  beenhere = 1;
-  symbnumb = 0;
-
-  fl_add_symbol("",		draw_arrow1,		1);
-  fl_add_symbol("->",		draw_arrow1,		1);
-  fl_add_symbol(">",		draw_arrow2,		1);
-  fl_add_symbol(">>",		draw_arrow3,		1);
-  fl_add_symbol(">|",		draw_arrowbar,		1);
-  fl_add_symbol(">[]",		draw_arrowbox,		1);
-  fl_add_symbol("|>",		draw_bararrow,		1);
-  fl_add_symbol("<-",		draw_arrow01,		1);
-  fl_add_symbol("<",		draw_arrow02,		1);
-  fl_add_symbol("<<",		draw_arrow03,		1);
-  fl_add_symbol("|<",		draw_0arrowbar,		1);
-  fl_add_symbol("[]<",		draw_0arrowbox,		1);
-  fl_add_symbol("<|",		draw_0bararrow,		1);
-  fl_add_symbol("<->",		draw_doublearrow,	1);
-  fl_add_symbol("-->",		draw_arrow,		1);
-  fl_add_symbol("+",		draw_plus,		1);
-  fl_add_symbol("->|",		draw_arrow1bar,		1);
-  fl_add_symbol("arrow",	draw_arrow,		1);
-  fl_add_symbol("returnarrow",	0,			3);
-  fl_add_symbol("square",	draw_square,		1);
-  fl_add_symbol("circle",	draw_circle,		1);
-  fl_add_symbol("line",		draw_line,		1);
-  fl_add_symbol("plus",		draw_plus,		1);
-  fl_add_symbol("menu",		draw_menu,		1);
-  fl_add_symbol("UpArrow",	draw_uparrow,		1);
-  fl_add_symbol("DnArrow",	draw_downarrow,		1);
-  fl_add_symbol("||",		draw_doublebar,		1);
-  fl_add_symbol("search",       draw_search,            1);
-  fl_add_symbol("FLTK",         draw_fltk,              1);
-
-  fl_add_symbol("filenew",      draw_filenew,           1);
-  fl_add_symbol("fileopen",     draw_fileopen,          1);
-  fl_add_symbol("filesave",     draw_filesave,          1);
-  fl_add_symbol("filesaveas",   draw_filesaveas,        1);
-  fl_add_symbol("fileprint",    draw_fileprint,         1);
-
-  fl_add_symbol("refresh",      draw_refresh,           1);
-  fl_add_symbol("reload",       draw_reload,            1);
-  fl_add_symbol("undo",         draw_undo,              1);
-  fl_add_symbol("redo",         draw_redo,              1);
-
-//  fl_add_symbol("file",      draw_file,           1);
-}
-
-//
-// End of "$Id: fl_symbols.cxx 7903 2010-11-28 21:06:39Z matt $".
-//
diff --git a/common/fltk/src/fl_utf.c b/common/fltk/src/fl_utf.c
deleted file mode 100644
index dbdcd50..0000000
--- a/common/fltk/src/fl_utf.c
+++ /dev/null
@@ -1,995 +0,0 @@
-/*
- * "$Id: fl_utf.c 8585 2011-04-13 15:43:22Z ianmacarthur $"
- *
- * This is the utf.c file from fltk2 adapted for use in my fltk1.1 port
- */
-/* Copyright 2006-2011 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/* Modified to obey rfc3629, which limits unicode to 0-0x10ffff */
-
-#include <FL/fl_utf8.h>
-#include <string.h>
-#include <stdlib.h>
-
-/** \addtogroup fl_unicode
-    @{
-*/
-
-
-#if 0
-  /**
-   \defgroup fl_unichar Unicode Character Functions
-   Global Functions Handling Single Unicode Characters
-   @{ */
-
-  /**
-   Converts a Unicode character into a utf-8 sequence.
-   \param[in] uc Unicode character
-   \param[out] text utf-8 sequence will be written here; if this pointer is
-   \c NULL, only the length of the utf-8 sequence is calculated
-   \return length of the sequence in bytes
-   */
-  /* FL_EXPORT int fl_unichar_to_utf8(unsigned int uc, char *text); */
-
-  /** @} */
-
-  /**
-   \defgroup fl_utf8 Unicode String Functions
-   Global Functions Handling Unicode Text
-   @{ */
-
-  /**
-   Calculate the size of a utf-8 sequence for a Unicode character.
-   \param[in] uc Unicode character
-   \return length of the sequence in bytes
-   */
-  /* FL_EXPORT int fl_utf8_size(unsigned int uc); */
-
-  /** @} */
-#endif /* 0 */
-
-/*!Set to 1 to turn bad UTF8 bytes into ISO-8859-1. If this is to zero
-   they are instead turned into the Unicode REPLACEMENT CHARACTER, of
-   value 0xfffd.
-   If this is on fl_utf8decode() will correctly map most (perhaps all)
-   human-readable text that is in ISO-8859-1. This may allow you
-   to completely ignore character sets in your code because virtually
-   everything is either ISO-8859-1 or UTF-8.
-*/
-#define ERRORS_TO_ISO8859_1 1
-
-/*!Set to 1 to turn bad UTF8 bytes in the 0x80-0x9f range into the
-   Unicode index for Microsoft's CP1252 character set. You should
-   also set ERRORS_TO_ISO8859_1. With this a huge amount of more
-   available text (such as all web pages) are correctly converted
-   to Unicode.
-*/
-#define ERRORS_TO_CP1252 1
-
-/*!A number of Unicode code points are in fact illegal and should not
-   be produced by a UTF-8 converter. Turn this on will replace the
-   bytes in those encodings with errors. If you do this then converting
-   arbitrary 16-bit data to UTF-8 and then back is not an identity,
-   which will probably break a lot of software.
-*/
-#define STRICT_RFC3629 0
-
-#if ERRORS_TO_CP1252
-/* Codes 0x80..0x9f from the Microsoft CP1252 character set, translated
- * to Unicode:
- */
-static unsigned short cp1252[32] = {
-  0x20ac, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x017d, 0x008f,
-  0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x017e, 0x0178
-};
-#endif
-
-/*! Decode a single UTF-8 encoded character starting at \e p. The
-    resulting Unicode value (in the range 0-0x10ffff) is returned,
-    and \e len is set to the number of bytes in the UTF-8 encoding
-    (adding \e len to \e p will point at the next character).
-
-    If \p p points at an illegal UTF-8 encoding, including one that
-    would go past \e end, or where a code is uses more bytes than
-    necessary, then *(unsigned char*)p is translated as though it is
-    in the Microsoft CP1252 character set and \e len is set to 1.
-    Treating errors this way allows this to decode almost any
-    ISO-8859-1 or CP1252 text that has been mistakenly placed where
-    UTF-8 is expected, and has proven very useful.
-
-    If you want errors to be converted to error characters (as the
-    standards recommend), adding a test to see if the length is
-    unexpectedly 1 will work:
-
-    \code
-    if (*p & 0x80) {              // what should be a multibyte encoding
-      code = fl_utf8decode(p,end,&len);
-      if (len<2) code = 0xFFFD;   // Turn errors into REPLACEMENT CHARACTER
-    } else {                      // handle the 1-byte utf8 encoding:
-      code = *p;
-      len = 1;
-    }
-    \endcode
-
-    Direct testing for the 1-byte case (as shown above) will also
-    speed up the scanning of strings where the majority of characters
-    are ASCII.
-*/
-unsigned fl_utf8decode(const char* p, const char* end, int* len)
-{
-  unsigned char c = *(unsigned char*)p;
-  if (c < 0x80) {
-    if (len) *len = 1;
-    return c;
-#if ERRORS_TO_CP1252
-  } else if (c < 0xa0) {
-    if (len) *len = 1;
-    return cp1252[c-0x80];
-#endif
-  } else if (c < 0xc2) {
-    goto FAIL;
-  }
-  if ( (end && p+1 >= end) || (p[1]&0xc0) != 0x80) goto FAIL;
-  if (c < 0xe0) {
-    if (len) *len = 2;
-    return
-      ((p[0] & 0x1f) << 6) +
-      ((p[1] & 0x3f));
-  } else if (c == 0xe0) {
-    if (((unsigned char*)p)[1] < 0xa0) goto FAIL;
-    goto UTF8_3;
-#if STRICT_RFC3629
-  } else if (c == 0xed) {
-    /* RFC 3629 says surrogate chars are illegal. */
-    if (((unsigned char*)p)[1] >= 0xa0) goto FAIL;
-    goto UTF8_3;
-  } else if (c == 0xef) {
-    /* 0xfffe and 0xffff are also illegal characters */
-    if (((unsigned char*)p)[1]==0xbf &&
-	((unsigned char*)p)[2]>=0xbe) goto FAIL;
-    goto UTF8_3;
-#endif
-  } else if (c < 0xf0) {
-  UTF8_3:
-    if ( (end && p+2 >= end) || (p[2]&0xc0) != 0x80) goto FAIL;
-    if (len) *len = 3;
-    return
-      ((p[0] & 0x0f) << 12) +
-      ((p[1] & 0x3f) << 6) +
-      ((p[2] & 0x3f));
-  } else if (c == 0xf0) {
-    if (((unsigned char*)p)[1] < 0x90) goto FAIL;
-    goto UTF8_4;
-  } else if (c < 0xf4) {
-  UTF8_4:
-    if ( (end && p+3 >= end) || (p[2]&0xc0) != 0x80 || (p[3]&0xc0) != 0x80) goto FAIL;
-    if (len) *len = 4;
-#if STRICT_RFC3629
-    /* RFC 3629 says all codes ending in fffe or ffff are illegal: */
-    if ((p[1]&0xf)==0xf &&
-	((unsigned char*)p)[2] == 0xbf &&
-	((unsigned char*)p)[3] >= 0xbe) goto FAIL;
-#endif
-    return
-      ((p[0] & 0x07) << 18) +
-      ((p[1] & 0x3f) << 12) +
-      ((p[2] & 0x3f) << 6) +
-      ((p[3] & 0x3f));
-  } else if (c == 0xf4) {
-    if (((unsigned char*)p)[1] > 0x8f) goto FAIL; /* after 0x10ffff */
-    goto UTF8_4;
-  } else {
-  FAIL:
-    if (len) *len = 1;
-#if ERRORS_TO_ISO8859_1
-    return c;
-#else
-    return 0xfffd; /* Unicode REPLACEMENT CHARACTER */
-#endif
-  }
-}
-
-/*! Move \p p forward until it points to the start of a UTF-8
-  character. If it already points at the start of one then it
-  is returned unchanged. Any UTF-8 errors are treated as though each
-  byte of the error is an individual character.
-
-  \e start is the start of the string and is used to limit the
-  backwards search for the start of a utf8 character.
-
-  \e end is the end of the string and is assumed to be a break
-  between characters. It is assumed to be greater than p.
-
-  This function is for moving a pointer that was jumped to the
-  middle of a string, such as when doing a binary search for
-  a position. You should use either this or fl_utf8back() depending
-  on which direction your algorithim can handle the pointer
-  moving. Do not use this to scan strings, use fl_utf8decode()
-  instead.
-*/
-const char* fl_utf8fwd(const char* p, const char* start, const char* end)
-{
-  const char* a;
-  int len;
-  /* if we are not pointing at a continuation character, we are done: */
-  if ((*p&0xc0) != 0x80) return p;
-  /* search backwards for a 0xc0 starting the character: */
-  for (a = p-1; ; --a) {
-    if (a < start) return p;
-    if (!(a[0]&0x80)) return p;
-    if ((a[0]&0x40)) break;
-  }
-  fl_utf8decode(a,end,&len);
-  a += len;
-  if (a > p) return a;
-  return p;
-}
-
-/*! Move \p p backward until it points to the start of a UTF-8
-  character. If it already points at the start of one then it
-  is returned unchanged. Any UTF-8 errors are treated as though each
-  byte of the error is an individual character.
-
-  \e start is the start of the string and is used to limit the
-  backwards search for the start of a UTF-8 character.
-
-  \e end is the end of the string and is assumed to be a break
-  between characters. It is assumed to be greater than p.
-
-  If you wish to decrement a UTF-8 pointer, pass p-1 to this.
-*/
-const char* fl_utf8back(const char* p, const char* start, const char* end)
-{
-  const char* a;
-  int len;
-  /* if we are not pointing at a continuation character, we are done: */
-  if ((*p&0xc0) != 0x80) return p;
-  /* search backwards for a 0xc0 starting the character: */
-  for (a = p-1; ; --a) {
-    if (a < start) return p;
-    if (!(a[0]&0x80)) return p;
-    if ((a[0]&0x40)) break;
-  }
-  fl_utf8decode(a,end,&len);
-  if (a+len > p) return a;
-  return p;
-}
-
-/*! Returns number of bytes that utf8encode() will use to encode the
-  character \p ucs. */
-int fl_utf8bytes(unsigned ucs) {
-  if (ucs < 0x000080U) {
-    return 1;
-  } else if (ucs < 0x000800U) {
-    return 2;
-  } else if (ucs < 0x010000U) {
-    return 3;
-  } else if (ucs <= 0x10ffffU) {
-    return 4;
-  } else {
-    return 3; /* length of the illegal character encoding */
-  }
-}
-
-/*! Write the UTF-8 encoding of \e ucs into \e buf and return the
-    number of bytes written. Up to 4 bytes may be written. If you know
-    that \p ucs is less than 0x10000 then at most 3 bytes will be written.
-    If you wish to speed this up, remember that anything less than 0x80
-    is written as a single byte.
-
-    If ucs is greater than 0x10ffff this is an illegal character
-    according to RFC 3629. These are converted as though they are
-    0xFFFD (REPLACEMENT CHARACTER).
-
-    RFC 3629 also says many other values for \p ucs are illegal (in
-    the range 0xd800 to 0xdfff, or ending with 0xfffe or
-    0xffff). However I encode these as though they are legal, so that
-    utf8encode/fl_utf8decode will be the identity for all codes between 0
-    and 0x10ffff.
-*/
-int fl_utf8encode(unsigned ucs, char* buf) {
-  if (ucs < 0x000080U) {
-    buf[0] = ucs;
-    return 1;
-  } else if (ucs < 0x000800U) {
-    buf[0] = 0xc0 | (ucs >> 6);
-    buf[1] = 0x80 | (ucs & 0x3F);
-    return 2;
-  } else if (ucs < 0x010000U) {
-    buf[0] = 0xe0 | (ucs >> 12);
-    buf[1] = 0x80 | ((ucs >> 6) & 0x3F);
-    buf[2] = 0x80 | (ucs & 0x3F);
-    return 3;
-  } else if (ucs <= 0x0010ffffU) {
-    buf[0] = 0xf0 | (ucs >> 18);
-    buf[1] = 0x80 | ((ucs >> 12) & 0x3F);
-    buf[2] = 0x80 | ((ucs >> 6) & 0x3F);
-    buf[3] = 0x80 | (ucs & 0x3F);
-    return 4;
-  } else {
-    /* encode 0xfffd: */
-    buf[0] = 0xefU;
-    buf[1] = 0xbfU;
-    buf[2] = 0xbdU;
-    return 3;
-  }
-}
-
-/*! Convert a single 32-bit Unicode codepoint into an array of 16-bit
-    characters. These are used by some system calls, especially on Windows.
-
-    \p ucs is the value to convert.
-
-    \p dst points at an array to write, and \p dstlen is the number of
-    locations in this array. At most \p dstlen words will be
-    written, and a 0 terminating word will be added if \p dstlen is
-    large enough. Thus this function will never overwrite the buffer
-    and will attempt return a zero-terminated string if space permits.
-    If \p dstlen is zero then \p dst can be set to NULL and no data
-    is written, but the length is returned.
-
-    The return value is the number of 16-bit words that \e would be written
-    to \p dst if it is large enough, not counting any terminating
-    zero.
-
-    If the return value is greater than \p dstlen it indicates truncation,
-    you should then allocate a new array of size return+1 and call this again.
-
-    Unicode characters in the range 0x10000 to 0x10ffff are converted to
-    "surrogate pairs" which take two words each (in UTF-16 encoding).
-    Typically, setting \p dstlen to 2 will ensure that any valid Unicode
-    value can be converted, and setting \p dstlen to 3 or more will allow
-    a NULL terminated sequence to be returned.
-*/
-unsigned fl_ucs_to_Utf16(const unsigned ucs, unsigned short *dst, const unsigned dstlen)
-{
-  /* The rule for direct conversion from UCS to UTF16 is:
-   * - if UCS >  0x0010FFFF then UCS is invalid
-   * - if UCS >= 0xD800 && UCS <= 0xDFFF UCS is invalid
-   * - if UCS <= 0x0000FFFF then U16 = UCS, len = 1
-   * - else
-   * -- U16[0] = ((UCS - 0x00010000) >> 10) & 0x3FF + 0xD800
-   * -- U16[1] = (UCS & 0x3FF) + 0xDC00
-   * -- len = 2;
-   */
-  unsigned count;        /* Count of converted UTF16 cells */
-  unsigned short u16[4]; /* Alternate buffer if dst is not set */
-  unsigned short *out;   /* points to the active buffer */
-  /* Ensure we have a valid buffer to write to */
-  if((!dstlen) || (!dst)) {
-    out = u16;
-  } else {
-    out = dst;
-  }
-  /* Convert from UCS to UTF16 */
-  if((ucs > 0x0010FFFF) || /* UCS is too large */
-  ((ucs > 0xD7FF) && (ucs < 0xE000))) { /* UCS in invalid range */
-    out[0] = 0xFFFD; /* REPLACEMENT CHARACTER */
-    count = 1;
-  } else if(ucs < 0x00010000) {
-    out[0] = (unsigned short)ucs;
-    count = 1;
-  } else if(dstlen < 2) { /* dst is too small for the result */
-    out[0] = 0xFFFD; /* REPLACEMENT CHARACTER */
-    count = 2;
-  } else {
-    out[0] = (((ucs - 0x00010000) >> 10) & 0x3FF) + 0xD800;
-    out[1] = (ucs & 0x3FF) + 0xDC00;
-    count = 2;
-  }
-  /* NULL terminate the output, if there is space */
-  if(count < dstlen) { out[count] = 0; }
-  return count;
-} /* fl_ucs_to_Utf16 */
-
-/*! Convert a UTF-8 sequence into an array of 16-bit characters. These
-    are used by some system calls, especially on Windows.
-
-    \p src points at the UTF-8, and \p srclen is the number of bytes to
-    convert.
-
-    \p dst points at an array to write, and \p dstlen is the number of
-    locations in this array. At most \p dstlen-1 words will be
-    written there, plus a 0 terminating word. Thus this function
-    will never overwrite the buffer and will always return a
-    zero-terminated string. If \p dstlen is zero then \p dst can be
-    null and no data is written, but the length is returned.
-
-    The return value is the number of 16-bit words that \e would be written
-    to \p dst if it were long enough, not counting the terminating
-    zero. If the return value is greater or equal to \p dstlen it
-    indicates truncation, you can then allocate a new array of size
-    return+1 and call this again.
-
-    Errors in the UTF-8 are converted as though each byte in the
-    erroneous string is in the Microsoft CP1252 encoding. This allows
-    ISO-8859-1 text mistakenly identified as UTF-8 to be printed
-    correctly.
-
-    Unicode characters in the range 0x10000 to 0x10ffff are converted to
-    "surrogate pairs" which take two words each (this is called UTF-16
-    encoding).
-*/
-unsigned fl_utf8toUtf16(const char* src, unsigned srclen,
-		  unsigned short* dst, unsigned dstlen)
-{
-  const char* p = src;
-  const char* e = src+srclen;
-  unsigned count = 0;
-  if (dstlen) for (;;) {
-    if (p >= e) {dst[count] = 0; return count;}
-    if (!(*p & 0x80)) { /* ascii */
-      dst[count] = *p++;
-    } else {
-      int len; unsigned ucs = fl_utf8decode(p,e,&len);
-      p += len;
-      if (ucs < 0x10000) {
-	dst[count] = ucs;
-      } else {
-	/* make a surrogate pair: */
-	if (count+2 >= dstlen) {dst[count] = 0; count += 2; break;}
-	dst[count] = (((ucs-0x10000u)>>10)&0x3ff) | 0xd800;
-	dst[++count] = (ucs&0x3ff) | 0xdc00;
-      }
-    }
-    if (++count == dstlen) {dst[count-1] = 0; break;}
-  }
-  /* we filled dst, measure the rest: */
-  while (p < e) {
-    if (!(*p & 0x80)) p++;
-    else {
-      int len; unsigned ucs = fl_utf8decode(p,e,&len);
-      p += len;
-      if (ucs >= 0x10000) ++count;
-    }
-    ++count;
-  }
-  return count;
-}
-
-
-/**
-  Converts a UTF-8 string into a wide character string.
-
-  This function generates 32-bit wchar_t (e.g. "ucs4" as it were) except
-  on Windows where it is equivalent to fl_utf8toUtf16 and returns
-  UTF-16.
-
-  \p src points at the UTF-8, and \p srclen is the number of bytes to
-  convert.
-
-  \p dst points at an array to write, and \p dstlen is the number of
-  locations in this array. At most \p dstlen-1 wchar_t will be
-  written there, plus a 0 terminating wchar_t.
-
-  The return value is the number of wchar_t that \e would be written
-  to \p dst if it were long enough, not counting the terminating
-  zero. If the return value is greater or equal to \p dstlen it
-  indicates truncation, you can then allocate a new array of size
-  return+1 and call this again.
-
-  Notice that sizeof(wchar_t) is 2 on Windows and is 4 on Linux
-  and most other systems. Where wchar_t is 16 bits, Unicode
-  characters in the range 0x10000 to 0x10ffff are converted to
-  "surrogate pairs" which take two words each (this is called UTF-16
-  encoding). If wchar_t is 32 bits this rather nasty problem is
-  avoided.
-
-  Note that Windows includes Cygwin, i.e. compiled with Cygwin's POSIX
-  layer (cygwin1.dll, --enable-cygwin), either native (GDI) or X11.
-  */
-unsigned fl_utf8towc(const char* src, unsigned srclen,
-		  wchar_t* dst, unsigned dstlen)
-{
-#if defined(WIN32) || defined(__CYGWIN__)
-  return fl_utf8toUtf16(src, srclen, (unsigned short*)dst, dstlen);
-#else
-  const char* p = src;
-  const char* e = src+srclen;
-  unsigned count = 0;
-  if (dstlen) for (;;) {
-    if (p >= e) {
-      dst[count] = 0;
-      return count;
-    }
-    if (!(*p & 0x80)) { /* ascii */
-      dst[count] = *p++;
-    } else {
-      int len; unsigned ucs = fl_utf8decode(p,e,&len);
-      p += len;
-      dst[count] = (wchar_t)ucs;
-    }
-    if (++count == dstlen) {dst[count-1] = 0; break;}
-  }
-  /* we filled dst, measure the rest: */
-  while (p < e) {
-    if (!(*p & 0x80)) p++;
-    else {
-      int len; fl_utf8decode(p,e,&len);
-      p += len;
-    }
-    ++count;
-  }
-  return count;
-#endif
-}
-
-/*! Convert a UTF-8 sequence into an array of 1-byte characters.
-
-    If the UTF-8 decodes to a character greater than 0xff then it is
-    replaced with '?'.
-
-    Errors in the UTF-8 are converted as individual bytes, same as
-    fl_utf8decode() does. This allows ISO-8859-1 text mistakenly identified
-    as UTF-8 to be printed correctly (and possibly CP1512 on Windows).
-
-    \p src points at the UTF-8, and \p srclen is the number of bytes to
-    convert.
-
-    Up to \p dstlen bytes are written to \p dst, including a null
-    terminator. The return value is the number of bytes that would be
-    written, not counting the null terminator. If greater or equal to
-    \p dstlen then if you malloc a new array of size n+1 you will have
-    the space needed for the entire string. If \p dstlen is zero then
-    nothing is written and this call just measures the storage space
-    needed.
-*/
-unsigned fl_utf8toa(const char* src, unsigned srclen,
-		 char* dst, unsigned dstlen)
-{
-  const char* p = src;
-  const char* e = src+srclen;
-  unsigned count = 0;
-  if (dstlen) for (;;) {
-    unsigned char c;
-    if (p >= e) {dst[count] = 0; return count;}
-    c = *(unsigned char*)p;
-    if (c < 0xC2) { /* ascii or bad code */
-      dst[count] = c;
-      p++;
-    } else {
-      int len; unsigned ucs = fl_utf8decode(p,e,&len);
-      p += len;
-      if (ucs < 0x100) dst[count] = ucs;
-      else dst[count] = '?';
-    }
-    if (++count >= dstlen) {dst[count-1] = 0; break;}
-  }
-  /* we filled dst, measure the rest: */
-  while (p < e) {
-    if (!(*p & 0x80)) p++;
-    else {
-      int len;
-      fl_utf8decode(p,e,&len);
-      p += len;
-    }
-    ++count;
-  }
-  return count;
-}
-
-/*! Turn "wide characters" as returned by some system calls
-    (especially on Windows) into UTF-8.
-
-    Up to \p dstlen bytes are written to \p dst, including a null
-    terminator. The return value is the number of bytes that would be
-    written, not counting the null terminator. If greater or equal to
-    \p dstlen then if you malloc a new array of size n+1 you will have
-    the space needed for the entire string. If \p dstlen is zero then
-    nothing is written and this call just measures the storage space
-    needed.
-
-    \p srclen is the number of words in \p src to convert. On Windows
-    this is not necessarily the number of characters, due to there
-    possibly being "surrogate pairs" in the UTF-16 encoding used.
-    On Unix wchar_t is 32 bits and each location is a character.
-
-    On Unix if a \p src word is greater than 0x10ffff then this is an
-    illegal character according to RFC 3629. These are converted as
-    though they are 0xFFFD (REPLACEMENT CHARACTER). Characters in the
-    range 0xd800 to 0xdfff, or ending with 0xfffe or 0xffff are also
-    illegal according to RFC 3629. However I encode these as though
-    they are legal, so that fl_utf8towc will return the original data.
-
-    On Windows "surrogate pairs" are converted to a single character
-    and UTF-8 encoded (as 4 bytes). Mismatched halves of surrogate
-    pairs are converted as though they are individual characters.
-*/
-unsigned fl_utf8fromwc(char* dst, unsigned dstlen,
-		    const wchar_t* src, unsigned srclen) {
-  unsigned i = 0;
-  unsigned count = 0;
-  if (dstlen) for (;;) {
-    unsigned ucs;
-    if (i >= srclen) {dst[count] = 0; return count;}
-    ucs = src[i++];
-    if (ucs < 0x80U) {
-      dst[count++] = ucs;
-      if (count >= dstlen) {dst[count-1] = 0; break;}
-    } else if (ucs < 0x800U) { /* 2 bytes */
-      if (count+2 >= dstlen) {dst[count] = 0; count += 2; break;}
-      dst[count++] = 0xc0 | (ucs >> 6);
-      dst[count++] = 0x80 | (ucs & 0x3F);
-#if defined(WIN32) || defined(__CYGWIN__)
-    } else if (ucs >= 0xd800 && ucs <= 0xdbff && i < srclen &&
-	       src[i] >= 0xdc00 && src[i] <= 0xdfff) {
-      /* surrogate pair */
-      unsigned ucs2 = src[i++];
-      ucs = 0x10000U + ((ucs&0x3ff)<<10) + (ucs2&0x3ff);
-      /* all surrogate pairs turn into 4-byte utf8 */
-#else
-    } else if (ucs >= 0x10000) {
-      if (ucs > 0x10ffff) {
-	ucs = 0xfffd;
-	goto J1;
-      }
-#endif
-      if (count+4 >= dstlen) {dst[count] = 0; count += 4; break;}
-      dst[count++] = 0xf0 | (ucs >> 18);
-      dst[count++] = 0x80 | ((ucs >> 12) & 0x3F);
-      dst[count++] = 0x80 | ((ucs >> 6) & 0x3F);
-      dst[count++] = 0x80 | (ucs & 0x3F);
-    } else {
-#if !(defined(WIN32) || defined(__CYGWIN__))
-    J1:
-#endif
-      /* all others are 3 bytes: */
-      if (count+3 >= dstlen) {dst[count] = 0; count += 3; break;}
-      dst[count++] = 0xe0 | (ucs >> 12);
-      dst[count++] = 0x80 | ((ucs >> 6) & 0x3F);
-      dst[count++] = 0x80 | (ucs & 0x3F);
-    }
-  }
-  /* we filled dst, measure the rest: */
-  while (i < srclen) {
-    unsigned ucs = src[i++];
-    if (ucs < 0x80U) {
-      count++;
-    } else if (ucs < 0x800U) { /* 2 bytes */
-      count += 2;
-#if defined(WIN32) || defined(__CYGWIN__)
-    } else if (ucs >= 0xd800 && ucs <= 0xdbff && i < srclen-1 &&
-	       src[i+1] >= 0xdc00 && src[i+1] <= 0xdfff) {
-      /* surrogate pair */
-      ++i;
-#else
-    } else if (ucs >= 0x10000 && ucs <= 0x10ffff) {
-#endif
-      count += 4;
-    } else {
-      count += 3;
-    }
-  }
-  return count;
-}
-
-/*! Convert an ISO-8859-1 (ie normal c-string) byte stream to UTF-8.
-
-    It is possible this should convert Microsoft's CP1252 to UTF-8
-    instead. This would translate the codes in the range 0x80-0x9f
-    to different characters. Currently it does not do this.
-
-    Up to \p dstlen bytes are written to \p dst, including a null
-    terminator. The return value is the number of bytes that would be
-    written, not counting the null terminator. If greater or equal to
-    \p dstlen then if you malloc a new array of size n+1 you will have
-    the space needed for the entire string. If \p dstlen is zero then
-    nothing is written and this call just measures the storage space
-    needed.
-
-    \p srclen is the number of bytes in \p src to convert.
-
-    If the return value equals \p srclen then this indicates that
-    no conversion is necessary, as only ASCII characters are in the
-    string.
-*/
-unsigned fl_utf8froma(char* dst, unsigned dstlen,
-		   const char* src, unsigned srclen) {
-  const char* p = src;
-  const char* e = src+srclen;
-  unsigned count = 0;
-  if (dstlen) for (;;) {
-    unsigned char ucs;
-    if (p >= e) {dst[count] = 0; return count;}
-    ucs = *(unsigned char*)p++;
-    if (ucs < 0x80U) {
-      dst[count++] = ucs;
-      if (count >= dstlen) {dst[count-1] = 0; break;}
-    } else { /* 2 bytes (note that CP1252 translate could make 3 bytes!) */
-      if (count+2 >= dstlen) {dst[count] = 0; count += 2; break;}
-      dst[count++] = 0xc0 | (ucs >> 6);
-      dst[count++] = 0x80 | (ucs & 0x3F);
-    }
-  }
-  /* we filled dst, measure the rest: */
-  while (p < e) {
-    unsigned char ucs = *(unsigned char*)p++;
-    if (ucs < 0x80U) {
-      count++;
-    } else {
-      count += 2;
-    }
-  }
-  return count;
-}
-
-#ifdef WIN32
-# include <windows.h>
-#endif
-
-/*! Return true if the "locale" seems to indicate that UTF-8 encoding
-    is used. If true the fl_utf8to_mb and fl_utf8from_mb don't do anything
-    useful.
-
-    <i>It is highly recommended that you change your system so this
-    does return true.</i> On Windows this is done by setting the
-    "codepage" to CP_UTF8.  On Unix this is done by setting $LC_CTYPE
-    to a string containing the letters "utf" or "UTF" in it, or by
-    deleting all $LC* and $LANG environment variables. In the future
-    it is likely that all non-Asian Unix systems will return true,
-    due to the compatibility of UTF-8 with ISO-8859-1.
-*/
-int fl_utf8locale(void) {
-  static int ret = 2;
-  if (ret == 2) {
-#ifdef WIN32
-    ret = GetACP() == CP_UTF8;
-#else
-    char* s;
-    ret = 1; /* assume UTF-8 if no locale */
-    if (((s = getenv("LC_CTYPE")) && *s) ||
-	((s = getenv("LC_ALL"))   && *s) ||
-	((s = getenv("LANG"))     && *s)) {
-      ret = (strstr(s,"utf") || strstr(s,"UTF"));
-    }
-#endif
-  }
-  return ret;
-}
-
-/*! Convert the UTF-8 used by FLTK to the locale-specific encoding
-    used for filenames (and sometimes used for data in files).
-    Unfortunately due to stupid design you will have to do this as
-    needed for filenames. This is a bug on both Unix and Windows.
-
-    Up to \p dstlen bytes are written to \p dst, including a null
-    terminator. The return value is the number of bytes that would be
-    written, not counting the null terminator. If greater or equal to
-    \p dstlen then if you malloc a new array of size n+1 you will have
-    the space needed for the entire string. If \p dstlen is zero then
-    nothing is written and this call just measures the storage space
-    needed.
-
-    If fl_utf8locale() returns true then this does not change the data.
-*/
-unsigned fl_utf8to_mb(const char* src, unsigned srclen,
-		  char* dst, unsigned dstlen)
-{
-  if (!fl_utf8locale()) {
-#ifdef WIN32
-    wchar_t lbuf[1024];
-    wchar_t* buf = lbuf;
-    unsigned length = fl_utf8towc(src, srclen, buf, 1024);
-    unsigned ret;
-    if (length >= 1024) {
-      buf = (wchar_t*)(malloc((length+1)*sizeof(wchar_t)));
-      fl_utf8towc(src, srclen, buf, length+1);
-    }
-    if (dstlen) {
-      /* apparently this does not null-terminate, even though msdn
-       * documentation claims it does:
-       */
-      ret =
-        WideCharToMultiByte(GetACP(), 0, buf, length, dst, dstlen, 0, 0);
-      dst[ret] = 0;
-    }
-    /* if it overflows or measuring length, get the actual length: */
-    if (dstlen==0 || ret >= dstlen-1)
-      ret =
-	WideCharToMultiByte(GetACP(), 0, buf, length, 0, 0, 0, 0);
-    if (buf != lbuf) free((void*)buf);
-    return ret;
-#else
-    wchar_t lbuf[1024];
-    wchar_t* buf = lbuf;
-    unsigned length = fl_utf8towc(src, srclen, buf, 1024);
-    int ret;
-    if (length >= 1024) {
-      buf = (wchar_t*)(malloc((length+1)*sizeof(wchar_t)));
-      fl_utf8towc(src, srclen, buf, length+1);
-    }
-    if (dstlen) {
-      ret = wcstombs(dst, buf, dstlen);
-      if (ret >= dstlen-1) ret = wcstombs(0,buf,0);
-    } else {
-      ret = wcstombs(0,buf,0);
-    }
-    if (buf != lbuf) free((void*)buf);
-    if (ret >= 0) return (unsigned)ret;
-    /* on any errors we return the UTF-8 as raw text...*/
-#endif
-  }
-  /* identity transform: */
-  if (srclen < dstlen) {
-    memcpy(dst, src, srclen);
-    dst[srclen] = 0;
-  } else {
-    /* Buffer insufficent or buffer query */
-  }
-  return srclen;
-}
-
-/*! Convert a filename from the locale-specific multibyte encoding
-    used by Windows to UTF-8 as used by FLTK.
-
-    Up to \p dstlen bytes are written to \p dst, including a null
-    terminator. The return value is the number of bytes that would be
-    written, not counting the null terminator. If greater or equal to
-    \p dstlen then if you malloc a new array of size n+1 you will have
-    the space needed for the entire string. If \p dstlen is zero then
-    nothing is written and this call just measures the storage space
-    needed.
-
-    On Unix or on Windows when a UTF-8 locale is in effect, this
-    does not change the data.
-    You may also want to check if fl_utf8test() returns non-zero, so that
-    the filesystem can store filenames in UTF-8 encoding regardless of
-    the locale.
-*/
-unsigned fl_utf8from_mb(char* dst, unsigned dstlen,
-		    const char* src, unsigned srclen)
-{
-  if (!fl_utf8locale()) {
-#ifdef WIN32
-    wchar_t lbuf[1024];
-    wchar_t* buf = lbuf;
-    unsigned length;
-    unsigned ret;
-    length = MultiByteToWideChar(GetACP(), 0, src, srclen, buf, 1024);
-    if ((length == 0)&&(GetLastError()==ERROR_INSUFFICIENT_BUFFER)) {
-      length = MultiByteToWideChar(GetACP(), 0, src, srclen, 0, 0);
-      buf = (wchar_t*)(malloc(length*sizeof(wchar_t)));
-      MultiByteToWideChar(GetACP(), 0, src, srclen, buf, length);
-    }
-    ret = fl_utf8fromwc(dst, dstlen, buf, length);
-    if (buf != lbuf) free((void*)buf);
-    return ret;
-#else
-    wchar_t lbuf[1024];
-    wchar_t* buf = lbuf;
-    int length;
-    unsigned ret;
-    length = mbstowcs(buf, src, 1024);
-    if (length >= 1024) {
-      length = mbstowcs(0, src, 0)+1;
-      buf = (wchar_t*)(malloc(length*sizeof(wchar_t)));
-      mbstowcs(buf, src, length);
-    }
-    if (length >= 0) {
-      ret = fl_utf8fromwc(dst, dstlen, buf, length);
-      if (buf != lbuf) free((void*)buf);
-      return ret;
-    }
-    /* errors in conversion return the UTF-8 unchanged */
-#endif
-  }
-  /* identity transform: */
-  if (srclen < dstlen) {
-    memcpy(dst, src, srclen);
-    dst[srclen] = 0;
-  } else {
-    /* Buffer insufficent or buffer query */
-  }
-  return srclen;
-}
-
-/*! Examines the first \p srclen bytes in \p src and returns a verdict
-    on whether it is UTF-8 or not.
-    - Returns 0 if there is any illegal UTF-8 sequences, using the
-      same rules as fl_utf8decode(). Note that some UCS values considered
-      illegal by RFC 3629, such as 0xffff, are considered legal by this.
-    - Returns 1 if there are only single-byte characters (ie no bytes
-      have the high bit set). This is legal UTF-8, but also indicates
-      plain ASCII. It also returns 1 if \p srclen is zero.
-    - Returns 2 if there are only characters less than 0x800.
-    - Returns 3 if there are only characters less than 0x10000.
-    - Returns 4 if there are characters in the 0x10000 to 0x10ffff range.
-
-    Because there are many illegal sequences in UTF-8, it is almost
-    impossible for a string in another encoding to be confused with
-    UTF-8. This is very useful for transitioning Unix to UTF-8
-    filenames, you can simply test each filename with this to decide
-    if it is UTF-8 or in the locale encoding. My hope is that if
-    this is done we will be able to cleanly transition to a locale-less
-    encoding.
-*/
-int fl_utf8test(const char* src, unsigned srclen) {
-  int ret = 1;
-  const char* p = src;
-  const char* e = src+srclen;
-  while (p < e) {
-    if (*p & 0x80) {
-      int len; fl_utf8decode(p,e,&len);
-      if (len < 2) return 0;
-      if (len > ret) ret = len;
-      p += len;
-    } else {
-      p++;
-    }
-  }
-  return ret;
-}
-
-/* forward declare mk_wcwidth() as static so the name is not visible.
- */
- static int mk_wcwidth(unsigned int ucs);
-
- /* include the c source directly so it's contents are only visible here
-  */
-#include "xutf8/mk_wcwidth.c"
-
-/** wrapper to adapt Markus Kuhn's implementation of wcwidth() for FLTK
-    \param [in] ucs Unicode character value
-    \returns width of character in columns
-
-    See http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c for Markus Kuhn's
-    original implementation of wcwidth() and wcswidth()
-    (defined in IEEE Std 1002.1-2001) for Unicode.
-
-    \b WARNING: this function returns widths for "raw" Unicode characters.
-    It does not even try to map C1 control characters (0x80 to 0x9F) to
-    CP1252, and C0/C1 control characters and DEL will return -1.
-    You are advised to use fl_width(const char* src) instead.
- */
-int fl_wcwidth_(unsigned int ucs) {
-  return mk_wcwidth(ucs);
-}
-
-/** extended wrapper around  fl_wcwidth_(unsigned int ucs) function.
-    \param[in] src pointer to start of UTF-8 byte sequence
-    \returns width of character in columns
-
-    Depending on build options, this function may map C1 control
-    characters (0x80 to 0x9f) to CP1252, and return the width of
-    that character instead. This is not the same behaviour as
-    fl_wcwidth_(unsigned int ucs) .
-
-    Note that other control characters and DEL will still return -1,
-    so if you want different behaviour, you need to test for those
-    characters before calling fl_wcwidth(), and handle them separately.
- */
-int fl_wcwidth(const char* src) {
-  int len = fl_utf8len(*src);
-  int ret = 0;
-  unsigned int ucs = fl_utf8decode(src, src+len, &ret);
-  int width = fl_wcwidth_(ucs);
-  return width;
-}
-
-/** @} */
-
-/*
- * End of "$Id: fl_utf.c 8585 2011-04-13 15:43:22Z ianmacarthur $".
- */
diff --git a/common/fltk/src/fl_utf8.cxx b/common/fltk/src/fl_utf8.cxx
deleted file mode 100644
index 5533532..0000000
--- a/common/fltk/src/fl_utf8.cxx
+++ /dev/null
@@ -1,850 +0,0 @@
-//
-// "$Id: fl_utf8.cxx 7975 2010-12-08 12:15:48Z AlbrechtS $"
-//
-// Unicode to UTF-8 conversion functions.
-//
-// Author: Jean-Marc Lienher ( http://oksid.ch )
-// Copyright 2000-2010 by O'ksi'D.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-
-
-#include <config.h>
-#include <FL/filename.H>
-#include <stdarg.h>
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-# include <ctype.h>
-# include <io.h>
-# include <windows.h>
-# include <winbase.h>
-# include <process.h>
-#ifdef __CYGWIN__
-#include  <wchar.h>
-#else
-#include  <direct.h>
-#endif
-extern "C" {
-  int XUtf8Tolower(int ucs);
-  unsigned short XUtf8IsNonSpacing(unsigned int ucs);
-};
-
-#elif defined(__APPLE__)
-# include <stdio.h>
-# include <time.h>
-//# include <unix.h>
-# include <fcntl.h>
-# include <unistd.h>
-# include <wchar.h>
-# include <stdlib.h>
-#   include <sys/types.h>
-# include <sys/stat.h>
-
-extern "C" {
-  int XUtf8Tolower(int ucs);
-  unsigned short XUtf8IsNonSpacing(unsigned int ucs);
-}
-
-#else // X-windows platform
-
-# include <FL/Xutf8.h>
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-# include <unistd.h>
-#endif // WIN32
-
-#include <FL/fl_utf8.h>
-#include <string.h>
-#include <stdlib.h>
-
-#undef fl_open
-
-/** \addtogroup fl_unicode
-    @{
-*/
-
-/*** NOTE : all functions are LIMITED to 24 bits Unicode values !!! ***/
-/***        but only 16 bits are really used under Linux and win32  ***/
-
-
-#define NBC 0xFFFF + 1
-
-static int
-Toupper(
-	int ucs)
-{
-	long i;
-	static unsigned short *table = NULL;
-
-	if (!table) {
-		table = (unsigned short*) malloc(
-			sizeof(unsigned short) * (NBC));
-		for (i = 0; i < NBC; i++) {
-			table[i] = (unsigned short) i;
-		}
-		for (i = 0; i < NBC; i++) {
-			int l;
-			l = XUtf8Tolower(i);
-			if (l != i) table[l] = (unsigned short) i;
-		}
-
-	}
-	if (ucs >= NBC || ucs < 0) return ucs;
-	return table[ucs];
-}
-
-/**
- return the byte length of the UTF-8 sequence with first byte \p c,
- or -1 if \p c is not valid.
- This function is helpful for finding faulty UTF8 sequences.
- \see fl_utf8len1
- */
-int fl_utf8len(char c)
-{
-  if (!(c & 0x80)) return 1;
-  if (c & 0x40) {
-    if (c & 0x20) {
-      if (c & 0x10) {
-        if (c & 0x08) {
-          if (c & 0x04) {
-            return 6;
-          }
-          return 5;
-        }
-        return 4;
-      }
-      return 3;
-    }
-    return 2;
-  }
-  return -1;
-} // fl_utf8len
-
-
-/**
- Return the byte length of the UTF-8 sequence with first byte \p c,
- or 1 if \p c is not valid. 
- This function can be used to scan faulty UTF8 sequence, albeit ignoring invalid
- codes.
- \see fl_utf8len
- */
-int fl_utf8len1(char c)
-{
-  if (!(c & 0x80)) return 1;
-  if (c & 0x40) {
-    if (c & 0x20) {
-      if (c & 0x10) {
-        if (c & 0x08) {
-          if (c & 0x04) {
-            return 6;
-          }
-          return 5;
-        }
-        return 4;
-      }
-      return 3;
-    }
-    return 2;
-  }
-  return 1;
-} // fl_utf8len1
-
-
-/**
-  returns the number of Unicode chars in the UTF-8 string
-  */
-int
-fl_utf_nb_char(
-	const unsigned char 	*buf,
-	int 			len)
-{
-	int i = 0;
-	int nbc = 0;
-	while (i < len) {
-		int cl = fl_utf8len((buf+i)[0]);//fl_utflen(buf + i, len - i);
-		if (cl < 1) cl = 1;
-		nbc++;
-		i += cl;
-	}
-	return nbc;
-}
-
-/*
- * compare only the first n bytes
- * return 0 if the strings are equal;
- * return 1 if s1 is greater than s2
- * return -1 if s1 is less than s2
- */
-/**
-  UTF-8 aware strncasecmp - converts to lower case Unicode and tests.
-
-  \todo Correct the incorrect logic where length of strings tested
-  \todo Clarify whether n means number of bytes, or characters.
-  */
-int fl_utf_strncasecmp(const char *s1, const char *s2, int n)
-{
-        int i;
-        int s1_l;
-        int s2_l;
-        char *e1, *e2; // string end pointers
-
-        s1_l = 0;
-        while (s1_l < n && s1[s1_l]) s1_l++;
-        s2_l = 0;
-        while (s2_l < n && s2[s2_l]) s2_l++;
-
-        if (s1_l < s2_l) {
-                return -1;
-        } else if (s1_l > s2_l) {
-                return 1;
-        }
-		e1 = (char *)&s1[s1_l]; // last char to test
-		e2 = (char *)&s2[s2_l];
-        for (i = 0; i < n;) {
-                int l1, l2;
-                unsigned int u1, u2;
-                int res;
-
-//              l1 = fl_utf2ucs((unsigned char*)s1 + i, n - i, &u1);
-                u1 = fl_utf8decode(s1 + i, e1, &l1);
-//              l2 = fl_utf2ucs((unsigned char*)s2 + i, n - i, &u2);
-                u2 = fl_utf8decode(s2 + i, e2, &l2);
-                if (l1 - l2 != 0) return l1 - l2;
-                res = XUtf8Tolower(u1) - XUtf8Tolower(u2);
-                if (res != 0) return res;
-                if (l1 < 1) {
-                        i += 1;
-                } else {
-                        i += l1;
-                }
-        }
-        return 0;
-}
-
-/*
- * return 0 if the strings are equal;
- * return 1 if s1 is greater than s2
- * return -1 if s1 is less than s2
- */
-/**
-  UTF-8 aware strcasecmp - converts to Unicode and tests.
-
-  \todo Correct the incorrect logic where length of strings tested
-  */
-int fl_utf_strcasecmp(const char *s1, const char *s2)
-{
-	int s1_l = strlen(s1);
-	int s2_l = strlen(s2);
-
-        if (s1_l < s2_l) {
-                return -1;
-        } else if (s1_l > s2_l) {
-                return 1;
-	}
-	return fl_utf_strncasecmp(s1, s2, s1_l);
-}
-
-/**
-  return the Unicode lower case value of \p ucs
-  */
-int fl_tolower(unsigned int ucs)
-{
-	return XUtf8Tolower(ucs);
-}
-
-/**
-  return the Unicode upper case value of \p ucs
-  */
-int fl_toupper(unsigned int ucs)
-{
-	return Toupper(ucs);
-}
-
-/**
-  converts the str string to the lower case equivalent into buf.
-  Warning: to be safe buf length must be at least 3 * len [for 16-bit Unicode]
-  */
-int fl_utf_tolower(const unsigned char *str, int len, char *buf)
-{
-	int i;
-	int l = 0;
-	char *end = (char *)&str[len];
-        for (i = 0; i < len;) {
-                int l1, l2;
-                unsigned int u1;
-
-//              l1 = fl_utf2ucs((unsigned char*)str + i, len - i, &u1);
-                u1 = fl_utf8decode((const char*)(str + i), end, &l1);
-                l2 = fl_utf8encode((unsigned int) XUtf8Tolower(u1), buf + l);
-                if (l1 < 1) {
-                        i += 1;
-                } else {
-                        i += l1;
-		}
-                if (l2 < 1) {
-                        l += 1;
-                } else {
-                        l += l2;
-		}
-
-	}
-	return l;
-}
-
-/**
-  converts the str string to the upper case equivalent into buf.
-  Warning: to be safe buf length must be at least 3 * len [for 16-bit Unicode]
-  */
-int fl_utf_toupper(const unsigned char *str, int len, char *buf)
-{
-	int i;
-	int l = 0;
-	char *end = (char *)&str[len];
-        for (i = 0; i < len;) {
-                int l1, l2;
-                unsigned int u1;
-
-//              l1 = fl_utf2ucs((unsigned char*)str + i, len - i, &u1);
-                u1 = fl_utf8decode((const char*)(str + i), end, &l1);
-                l2 = fl_utf8encode((unsigned int) Toupper(u1), buf + l);
-                if (l1 < 1) {
-                        i += 1;
-                } else {
-                        i += l1;
-		}
-                if (l2 < 1) {
-                        l += 1;
-                } else {
-                        l += l2;
-		}
-	}
-	return l;
-}
-
-#if 0 // deprecated in favour of FLTK2's fl_utf8toa
-/*
- * convert UTF-8 str to latin1
- * Warning: buf must be at least len long
- */
-int fl_utf2latin1(const unsigned char *str, int len, char *buf)
-{
-	int i;
-	int l = 0;
-	char *end = (char *)&str[len];
-        for (i = 0; i < len;) {
-                unsigned int u1;
-		int l1;
-
-//              l1 = fl_utf2ucs((unsigned char*)str + i, len - i, &u1);
-                u1 = fl_utf8decode((const char*)(str + i), end, &l1);
-		if (u1 > 0xFF) u1 = '?';
-		buf[l] = (char) u1;
-                if (l1 < 1) {
-                        i += 1;
-                } else {
-                        i += l1;
-		}
-		l++;
-
-	}
-	return l;
-}
-#endif
-
-#if 0 // deprecated in favour of FLTK2's fl_utf8froma
-/*
- * convert latin1 str to UTF-8
- * Warning: buf must be at least 2 * len long
- */
-int fl_latin12utf(const unsigned char *str, int len, char *buf)
-{
-	int i;
-	int l = 0;
-	int l1 = 0;
-        for (i = 0; i < len; i++) {
-		unsigned int n = (unsigned int) str[i];
-		l1 = fl_utf8encode(n, buf + l);
-                if (l1 < 1) {
-                        l = l + 1;
-                } else {
-                        l = l + l1;
-		}
-
-	}
-	return l;
-}
-#endif
-
-/**
-  returns true if the character is non-spacing.
-  \todo explain what non-spacing means.
-  */
-unsigned int fl_nonspacing(unsigned int ucs)
-{
-#ifdef __APPLE__
-  return (ucs==0x20); // FIXME: what does this really do?
-#else
-  return (unsigned int) XUtf8IsNonSpacing(ucs);
-#endif
-}
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-static xchar *mbwbuf = NULL;
-#endif
-
-#ifdef WIN32
-unsigned int fl_codepage = 0;
-#endif
-
-#if defined (WIN32) && !defined(__CYGWIN__)
-
-static char *buf = NULL;
-static int buf_len = 0;
-static unsigned short *wbufa = NULL;
-
-// FIXME: This should *maybe* return 'const char *' instead of 'char *'
-char *fl_utf8_to_locale(const char *s, int len, UINT codepage)
-{
-	if (!s) return (char *)"";
-	int l = 0;
-//	if (buf_len < len * 2 + 1) {
-//		buf_len = len * 2 + 1;
-//		buf = (char*) realloc(buf, buf_len);
-//		wbufa = (unsigned short*) realloc(wbufa, buf_len * sizeof(short));
-//	}
-	unsigned wn = fl_utf8toUtf16(s, len, NULL, 0); // Query length
-	wn = wn * 2 + 1;
-	if (wn >= (unsigned)buf_len) {
-		buf_len = wn;
-		buf = (char*) realloc(buf, buf_len);
-		wbufa = (unsigned short*) realloc(wbufa, buf_len * sizeof(short));
-	}
-	if (codepage < 1) codepage = fl_codepage;
-//	l = fl_utf2unicode((const unsigned char *)s, len, (xchar*) wbufa);
-	l = fl_utf8toUtf16(s, len, wbufa, wn); // Convert string
-	wbufa[l] = 0;
-	buf[l] = 0;
-	l = WideCharToMultiByte(codepage, 0, (WCHAR*)wbufa, l, buf, buf_len, NULL, NULL);
-	if (l < 0) l = 0;
-	buf[l] = 0;
-	return buf;
-}
-
-// FIXME: This should maybe return 'const char *' instead of 'char *'
-char *fl_locale_to_utf8(const char *s, int len, UINT codepage)
-{
-	if (!s) return (char *)"";
-	int l = 0;
-	if (buf_len < len * 5 + 1) {
-		buf_len = len * 5 + 1;
-		buf = (char*) realloc(buf, buf_len);
-		wbufa = (unsigned short*) realloc(wbufa, buf_len * sizeof(short));
-	}
-	if (codepage < 1) codepage = fl_codepage;
-	buf[l] = 0;
-
-	l = MultiByteToWideChar(codepage, 0, s, len, (WCHAR*)wbufa, buf_len);
-	if (l < 0) l = 0;
-	wbufa[l] = 0;
-//	l = fl_unicode2utf((xchar*)wbufa, l, buf);
-	l = fl_utf8fromwc(buf, buf_len, (xchar*)wbufa, l);
-	buf[l] = 0;
-	return buf;
-}
-#endif
-
-/**
-  converts UTF8 to a local multi-byte character string.
-  */
-char * fl_utf2mbcs(const char *s)
-{
-	if (!s) return NULL;
-#if defined(WIN32) && !defined(__CYGWIN__)
-	int l = strlen(s);
-	static char *buf = NULL;
-
-//	mbwbuf = (xchar*)realloc(mbwbuf, (l+6) * sizeof(xchar));
-//	l = fl_utf2unicode((unsigned char*)s, l, mbwbuf);
-//	mbwbuf[l] = 0;
-	unsigned wn = fl_utf8toUtf16(s, l, NULL, 0) + 7; // Query length
-	mbwbuf = (xchar*)realloc(mbwbuf, sizeof(xchar)*wn);
-	l = fl_utf8toUtf16(s, l, (unsigned short *)mbwbuf, wn); // Convert string
-	mbwbuf[l] = 0;
-
-	buf = (char*)realloc(buf, l * 6 + 1);
-	l = wcstombs(buf, mbwbuf, l * 6);
-	buf[l] = 0;
-	return buf;
-#else
-	return (char*) s;
-#endif
-}
-
-
-#if 0 // deprecated in favour of FLTK2's fl_utf8from_mb
-char * fl_mbcs2utf(const char *s)
-{
-	if (!s) return NULL;
-#if defined(WIN32)
-	int l = strlen(s);
-	unsigned dstlen;
-	static char *buf = NULL;
-
-	mbwbuf = (xchar*)realloc(mbwbuf,(l * 6 + 6) * sizeof(xchar));
-	l = mbstowcs(mbwbuf, s, l);
-	dstlen = l * 6 + 1;
-	buf = (char*)realloc(buf, dstlen);
-//	l = fl_unicode2utf(mbwbuf, l, buf);
-	l = fl_utf8fromwc(buf, dstlen, mbwbuf, l);
-	buf[l] = 0;
-	return buf;
-#else
-	return (char*) s;
-#endif
-} // fl_mbcs2utf
-#endif
-
-#if defined(WIN32)  && !defined(__CYGWIN__)
-static xchar *wbuf = NULL;
-static xchar *wbuf1 = NULL;
-#endif
-
-
-char *fl_getenv(const char* v)
-{
-#if defined (WIN32) && !defined(__CYGWIN__)
-	int l = strlen(v);
-//	static xchar* wbuf = NULL;
-//	wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//	wbuf[fl_utf2unicode((const unsigned char*)v, l, wbuf)] = 0;
-	unsigned wn = fl_utf8toUtf16(v, l, NULL, 0) + 1; // Query length
-	wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-	wn = fl_utf8toUtf16(v, l, (unsigned short *)wbuf, wn); // Convert string
-	wbuf[wn] = 0;
-	xchar *ret = _wgetenv(wbuf);
-	static char *buf = NULL;
-	if (ret) {
-		l = wcslen(ret);
-		wn = fl_utf8fromwc(NULL, 0, ret, l) + 1; // query length
-		buf = (char*) realloc(buf, wn);
-//		buf[fl_unicode2utf(ret, l, buf)] = 0;
-		wn = fl_utf8fromwc(buf, wn, ret, l); // convert string
-		buf[wn] = 0;
-		return buf;
-	} else {
-		return NULL;
-	}
-#else
-	return getenv(v);
-#endif
-}
-
-int fl_open(const char* f, int oflags, ...)
-{
-	int pmode;
-	va_list ap;
-	va_start(ap, oflags);
-	pmode = va_arg (ap, int);
-	va_end(ap);
-#if defined (WIN32) && !defined(__CYGWIN__)
-		int l = strlen(f);
-//		wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//		wbuf[fl_utf2unicode((const unsigned char*)f, l, wbuf)] = 0;
-		unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-		if (pmode == -1) return _wopen(wbuf, oflags);
-		else return _wopen(wbuf, oflags, pmode);
-#else
-	if (pmode == -1) return open(f, oflags);
-	else return open(f, oflags, pmode);
-#endif
-}
-
-FILE *fl_fopen(const char* f, const char *mode)
-{
-#if  defined (WIN32) && !defined(__CYGWIN__)
-		int l = strlen(f);
-//		wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//		wbuf[fl_utf2unicode((const unsigned char*)f, l, wbuf)] = 0;
-		unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-		l = strlen(mode);
-//		wbuf1 = (xchar*)realloc(wbuf1, sizeof(xchar) * (l+1));
-//		wbuf1[fl_utf2unicode((const unsigned char*)mode, l, wbuf1)] = 0;
-		wn = fl_utf8toUtf16(mode, l, NULL, 0) + 1; // Query length
-		wbuf1 = (xchar*)realloc(wbuf1, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(mode, l, (unsigned short *)wbuf1, wn); // Convert string
-		wbuf1[wn] = 0;
-		return _wfopen(wbuf, wbuf1);
-#else
-	return fopen(f, mode);
-#endif
-}
-
-int fl_system(const char* f)
-{
-#if  defined (WIN32) && !defined(__CYGWIN__)
-#  ifdef __MINGW32__
-	return system(fl_utf2mbcs(f));
-#  else
-		int l = strlen(f);
-//		wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//		wbuf[fl_utf2unicode((const unsigned char*)f, l, wbuf)] = 0;
-		unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-		return _wsystem(wbuf);
-#  endif
-#else
-	return system(f);
-#endif
-}
-
-int fl_execvp(const char *file, char *const *argv)
-{
-#if  defined (WIN32) && !defined(__CYGWIN__)
-#ifdef __MINGW32__
-	return _execvp(fl_utf2mbcs(file), argv);
-#else
-		int l = strlen(file);
-		int i, n, ret;
-		xchar **ar;
-//		wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//		wbuf[fl_utf2unicode((const unsigned char*)file, l, wbuf)] = 0;
-		unsigned wn = fl_utf8toUtf16(file, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(file, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-
-		i = 0; n = 0;
-		while (argv[i]) {i++; n++;}
-		ar = (xchar**) malloc(sizeof(xchar*) * (n + 1));
-		i = 0;
-		while (i <= n) {
-			unsigned wn;
-			l = strlen(argv[i]);
-//			ar[i] = (xchar *)malloc(sizeof(xchar) * (l+1));
-//			ar[i][fl_utf2unicode((const unsigned char*)argv[i], l, ar[i])] = 0;
-			wn = fl_utf8toUtf16(argv[i], l, NULL, 0) + 1; // Query length
-			ar[i] = (xchar *)malloc(sizeof(xchar)*wn);
-			wn = fl_utf8toUtf16(argv[i], l, (unsigned short *)ar[i], wn); // Convert string
-			ar[i][wn] = 0;
-			i++;
-		}
-		ar[n] = NULL;
-		ret = _wexecvp(wbuf, ar);
-		i = 0;
-		while (i <= n) {
-			free(ar[i]);
-			i++;
-		}
-		free(ar);
-		return ret;
-#endif
-#else
-	return execvp(file, argv);
-#endif
-}
-
-
-
-int fl_chmod(const char* f, int mode)
-{
-#if  defined (WIN32) && !defined(__CYGWIN__)
-		int l = strlen(f);
-//		wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//		wbuf[fl_utf2unicode((const unsigned char*)f, l, wbuf)] = 0;
-		unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-		return _wchmod(wbuf, mode);
-#else
-	return chmod(f, mode);
-#endif
-}
-
-int fl_access(const char* f, int mode)
-{
-#if defined (WIN32) && !defined(__CYGWIN__)
-		int l = strlen(f);
-//		wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//		wbuf[fl_utf2unicode((const unsigned char*)f, l, wbuf)] = 0;
-		unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-		return _waccess(wbuf, mode);
-#else
-	return access(f, mode);
-#endif
-}
-
-
-int fl_stat(const char* f, struct stat *b)
-{
-#if defined(WIN32) && !defined(__CYGWIN__)
-		int l = strlen(f);
-//		wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//		wbuf[fl_utf2unicode((const unsigned char*)f, l, wbuf)] = 0;
-		unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-		return _wstat(wbuf, (struct _stat*)b);
-#else
-	return stat(f, b);
-#endif
-}
-
-char *fl_getcwd(char* b, int l)
-{
-	if (b == NULL) {
-		b = (char*) malloc(l+1);
-	}
-#if defined(WIN32) && !defined(__CYGWIN__)
-		static xchar *wbuf = NULL;
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//		xchar *ret = _wgetcwd(wbuf, l / 5);
-		xchar *ret = _wgetcwd(wbuf, l);
-		if (ret) {
-			unsigned dstlen = l;
-			l = wcslen(wbuf);
-//			b[fl_unicode2utf(wbuf, l, b)] = 0;
-			dstlen = fl_utf8fromwc(b, dstlen, wbuf, l);
-			b[dstlen] = 0;
-			return b;
-		} else {
-			return NULL;
-		}
-#else
-	return getcwd(b, l);
-#endif
-}
-
-
-int fl_unlink(const char* f)
-{
-#if defined(WIN32) && !defined(__CYGWIN__)
-		int l = strlen(f);
-//		wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//		wbuf[fl_utf2unicode((const unsigned char*)f, l, wbuf)] = 0;
-		unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-		return _wunlink(wbuf);
-#else
-	return unlink(f);
-#endif
-}
-
-int fl_mkdir(const char* f, int mode)
-{
-#if defined(WIN32) && !defined(__CYGWIN__)
-		int l = strlen(f);
-//		wbuf = (xchar*)realloc(wbuf, sizeof(short) * (l+1));
-//		wbuf[fl_utf2unicode((const unsigned char*)f, l, wbuf)] = 0;
-		unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-		return _wmkdir(wbuf);
-#else
-	return mkdir(f, mode);
-#endif
-}
-
-
-int fl_rmdir(const char* f)
-{
-#if defined (WIN32) && !defined(__CYGWIN__)
-		int l = strlen(f);
-//		wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-//		wbuf[fl_utf2unicode((const unsigned char*)f, l, wbuf)] = 0;
-		unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-		return _wrmdir(wbuf);
-#else
-	return rmdir(f);
-#endif
-}
-
-int fl_rename(const char* f, const char *n)
-{
-#if defined (WIN32) && !defined(__CYGWIN__)
-		int l = strlen(f);
-		unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-		wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-		wbuf[wn] = 0;
-		l = strlen(n);
-		wn = fl_utf8toUtf16(n, l, NULL, 0) + 1; // Query length
-		wbuf1 = (xchar*)realloc(wbuf1, sizeof(xchar)*wn);
-		wn = fl_utf8toUtf16(n, l, (unsigned short *)wbuf1, wn); // Convert string
-		wbuf1[wn] = 0;
-		return _wrename(wbuf, wbuf1);
-#else
-	return rename(f, n);
-#endif
-}
-
-// recursively create a path in the file system
-char fl_make_path( const char *path ) {
-  if (fl_access(path, 0)) {
-    const char *s = strrchr( path, '/' );
-    if ( !s ) return 0;
-    int len = s-path;
-    char *p = (char*)malloc( len+1 );
-    memcpy( p, path, len );
-    p[len] = 0;
-    fl_make_path( p );
-    free( p );
-    fl_mkdir(path, 0700);
-  }
-  return 1;
-}
-
-// strip the filename and create a path
-void fl_make_path_for_file( const char *path )
-{
-  const char *s = strrchr( path, '/' );
-  if ( !s ) return;
-  int len = s-path;
-  char *p = (char*)malloc( len+1 );
-  memcpy( p, path, len );
-  p[len] = 0;
-  fl_make_path( p );
-  free( p );
-}
-
-/** @} */
-
-//
-// End of "$Id: fl_utf8.cxx 7975 2010-12-08 12:15:48Z AlbrechtS $".
-//
diff --git a/common/fltk/src/fl_vertex.cxx b/common/fltk/src/fl_vertex.cxx
deleted file mode 100644
index 756436d..0000000
--- a/common/fltk/src/fl_vertex.cxx
+++ /dev/null
@@ -1,286 +0,0 @@
-//
-// "$Id: fl_vertex.cxx 8621 2011-04-23 15:46:30Z AlbrechtS $"
-//
-// Portable drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_vertex.cxx
-  \brief  Portable drawing code for drawing arbitrary shapes with
-          simple 2D transformations.
-*/
-
-// Portable drawing code for drawing arbitrary shapes with
-// simple 2D transformations.  See also fl_arc.cxx
-
-// matt: the Quartz implementation purposely doesn't use the Quartz matrix
-//       operations for reasons of compatibility and maintainability
-
-#include <config.h>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl.H>
-#include <FL/math.h>
-#include <stdlib.h>
-
-void Fl_Graphics_Driver::push_matrix() {
-  if (sptr==matrix_stack_size)
-    Fl::error("fl_push_matrix(): matrix stack overflow.");
-  else
-    stack[sptr++] = m;
-}
-
-void Fl_Graphics_Driver::pop_matrix() {
-  if (sptr==0)
-    Fl::error("fl_pop_matrix(): matrix stack underflow.");
-  else 
-    m = stack[--sptr];
-}
-
-void Fl_Graphics_Driver::mult_matrix(double a, double b, double c, double d, double x, double y) {
-  matrix o;
-  o.a = a*m.a + b*m.c;
-  o.b = a*m.b + b*m.d;
-  o.c = c*m.a + d*m.c;
-  o.d = c*m.b + d*m.d;
-  o.x = x*m.a + y*m.c + m.x;
-  o.y = x*m.b + y*m.d + m.y;
-  m = o;
-}
-
-void Fl_Graphics_Driver::rotate(double d) {
-  if (d) {
-    double s, c;
-    if (d == 0) {s = 0; c = 1;}
-    else if (d == 90) {s = 1; c = 0;}
-    else if (d == 180) {s = 0; c = -1;}
-    else if (d == 270 || d == -90) {s = -1; c = 0;}
-    else {s = sin(d*M_PI/180); c = cos(d*M_PI/180);}
-    mult_matrix(c,-s,s,c,0,0);
-  }
-}
-
-void Fl_Graphics_Driver::begin_points() {n = 0; what = POINT_;}
-
-void Fl_Graphics_Driver::begin_line() {n = 0; what = LINE;}
-
-void Fl_Graphics_Driver::begin_loop() {n = 0; what = LOOP;}
-
-void Fl_Graphics_Driver::begin_polygon() {n = 0; what = POLYGON;}
-
-double Fl_Graphics_Driver::transform_x(double x, double y) {return x*m.a + y*m.c + m.x;}
-
-double Fl_Graphics_Driver::transform_y(double x, double y) {return x*m.b + y*m.d + m.y;}
-
-double Fl_Graphics_Driver::transform_dx(double x, double y) {return x*m.a + y*m.c;}
-
-double Fl_Graphics_Driver::transform_dy(double x, double y) {return x*m.b + y*m.d;}
-
-void Fl_Graphics_Driver::transformed_vertex0(COORD_T x, COORD_T y) {
-  if (!n || x != p[n-1].x || y != p[n-1].y) {
-    if (n >= p_size) {
-      p_size = p ? 2*p_size : 16;
-      p = (XPOINT*)realloc((void*)p, p_size*sizeof(*p));
-    }
-    p[n].x = x;
-    p[n].y = y;
-    n++;
-  }
-}
-
-void Fl_Graphics_Driver::transformed_vertex(double xf, double yf) {
-#ifdef __APPLE_QUARTZ__
-  transformed_vertex0(COORD_T(xf), COORD_T(yf));
-#else
-  transformed_vertex0(COORD_T(rint(xf)), COORD_T(rint(yf)));
-#endif
-}
-
-void Fl_Graphics_Driver::vertex(double x,double y) {
-  transformed_vertex0(COORD_T(x*m.a + y*m.c + m.x), COORD_T(x*m.b + y*m.d + m.y));
-}
-
-void Fl_Graphics_Driver::end_points() {
-#if defined(USE_X11)
-  if (n>1) XDrawPoints(fl_display, fl_window, fl_gc, p, n, 0);
-#elif defined(WIN32)
-  for (int i=0; i<n; i++) SetPixel(fl_gc, p[i].x, p[i].y, fl_RGB());
-#elif defined(__APPLE_QUARTZ__)
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  for (int i=0; i<n; i++) { 
-    CGContextMoveToPoint(fl_gc, p[i].x, p[i].y);
-    CGContextAddLineToPoint(fl_gc, p[i].x, p[i].y);
-    CGContextStrokePath(fl_gc);
-  }
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::end_line() {
-  if (n < 2) {
-    fl_end_points();
-    return;
-  }
-#if defined(USE_X11)
-  if (n>1) XDrawLines(fl_display, fl_window, fl_gc, p, n, 0);
-#elif defined(WIN32)
-  if (n>1) Polyline(fl_gc, p, n);
-#elif defined(__APPLE_QUARTZ__)
-  if (n<=1) return;
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, p[0].x, p[0].y);
-  for (int i=1; i<n; i++)
-    CGContextAddLineToPoint(fl_gc, p[i].x, p[i].y);
-  CGContextStrokePath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::fixloop() {  // remove equal points from closed path
-  while (n>2 && p[n-1].x == p[0].x && p[n-1].y == p[0].y) n--;
-}
-
-void Fl_Graphics_Driver::end_loop() {
-  fixloop();
-  if (n>2) fl_transformed_vertex((COORD_T)p[0].x, (COORD_T)p[0].y);
-  fl_end_line();
-}
-
-void Fl_Graphics_Driver::end_polygon() {
-  fixloop();
-  if (n < 3) {
-    fl_end_line();
-    return;
-  }
-#if defined(USE_X11)
-  if (n>2) XFillPolygon(fl_display, fl_window, fl_gc, p, n, Convex, 0);
-#elif defined(WIN32)
-  if (n>2) {
-    SelectObject(fl_gc, fl_brush());
-    Polygon(fl_gc, p, n);
-  }
-#elif defined(__APPLE_QUARTZ__)
-  if (n<=1) return;
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, p[0].x, p[0].y);
-  for (int i=1; i<n; i++) 
-    CGContextAddLineToPoint(fl_gc, p[i].x, p[i].y);
-  CGContextClosePath(fl_gc);
-  CGContextFillPath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::begin_complex_polygon() {
-  fl_begin_polygon();
-  gap_ = 0;
-#if defined(WIN32)
-  numcount = 0;
-#endif
-}
-
-void Fl_Graphics_Driver::gap() {
-  while (n>gap_+2 && p[n-1].x == p[gap_].x && p[n-1].y == p[gap_].y) n--;
-  if (n > gap_+2) {
-    fl_transformed_vertex((COORD_T)p[gap_].x, (COORD_T)p[gap_].y);
-#if defined(WIN32)
-    counts[numcount++] = n-gap_;
-#endif
-    gap_ = n;
-  } else {
-    n = gap_;
-  }
-}
-
-void Fl_Graphics_Driver::end_complex_polygon() {
-  fl_gap();
-  if (n < 3) {
-    fl_end_line();
-    return;
-  }
-#if defined(USE_X11)
-  if (n>2) XFillPolygon(fl_display, fl_window, fl_gc, p, n, 0, 0);
-#elif defined(WIN32)
-  if (n>2) {
-    SelectObject(fl_gc, fl_brush());
-    PolyPolygon(fl_gc, p, counts, numcount);
-  }
-#elif defined(__APPLE_QUARTZ__)
-  if (n<=1) return;
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, p[0].x, p[0].y);
-  for (int i=1; i<n; i++)
-    CGContextAddLineToPoint(fl_gc, p[i].x, p[i].y);
-  CGContextClosePath(fl_gc);
-  CGContextFillPath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-// shortcut the closed circles so they use XDrawArc:
-// warning: these do not draw rotated ellipses correctly!
-// See fl_arc.c for portable version.
-
-void Fl_Graphics_Driver::circle(double x, double y,double r) {
-  double xt = fl_transform_x(x,y);
-  double yt = fl_transform_y(x,y);
-  double rx = r * (m.c ? sqrt(m.a*m.a+m.c*m.c) : fabs(m.a));
-  double ry = r * (m.b ? sqrt(m.b*m.b+m.d*m.d) : fabs(m.d));
-  int llx = (int)rint(xt-rx);
-  int w = (int)rint(xt+rx)-llx;
-  int lly = (int)rint(yt-ry);
-  int h = (int)rint(yt+ry)-lly;
-
-#if defined(USE_X11)
-  (what == POLYGON ? XFillArc : XDrawArc)
-    (fl_display, fl_window, fl_gc, llx, lly, w, h, 0, 360*64);
-#elif defined(WIN32)
-  if (what==POLYGON) {
-    SelectObject(fl_gc, fl_brush());
-    Pie(fl_gc, llx, lly, llx+w, lly+h, 0,0, 0,0); 
-  } else
-    Arc(fl_gc, llx, lly, llx+w, lly+h, 0,0, 0,0); 
-#elif defined(__APPLE_QUARTZ__)
-  // Quartz warning: circle won't scale to current matrix!
-  // Last argument must be 0 (counter-clockwise) or it draws nothing under __LP64__ !!!!
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextAddArc(fl_gc, xt, yt, (w+h)*0.25f, 0, 2.0f*M_PI, 0);
-  (what == POLYGON ? CGContextFillPath : CGContextStrokePath)(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-//
-// End of "$Id: fl_vertex.cxx 8621 2011-04-23 15:46:30Z AlbrechtS $".
-//
diff --git a/common/fltk/src/flstring.c b/common/fltk/src/flstring.c
deleted file mode 100644
index 1be88f2..0000000
--- a/common/fltk/src/flstring.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * "$Id: flstring.c 7903 2010-11-28 21:06:39Z matt $"
- *
- * BSD string functions for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#include "flstring.h"
-
-
-/*
- * 'fl_strlcat()' - Safely concatenate two strings.
- */
-
-size_t				/* O - Length of string */
-fl_strlcat(char       *dst,	/* O - Destination string */
-           const char *src,	/* I - Source string */
-	   size_t     size) {	/* I - Size of destination string buffer */
-  size_t	srclen;		/* Length of source string */
-  size_t	dstlen;		/* Length of destination string */
-
-
- /*
-  * Figure out how much room is left...
-  */
-
-  dstlen = strlen(dst);
-  size   -= dstlen + 1;
-
-  if (!size) return (dstlen);	/* No room, return immediately... */
-
- /*
-  * Figure out how much room is needed...
-  */
-
-  srclen = strlen(src);
-
- /*
-  * Copy the appropriate amount...
-  */
-
-  if (srclen > size) srclen = size;
-
-  memcpy(dst + dstlen, src, srclen);
-  dst[dstlen + srclen] = '\0';
-
-  return (dstlen + srclen);
-}
-
-
-/*
- * 'fl_strlcpy()' - Safely copy two strings.
- */
-
-size_t				/* O - Length of string */
-fl_strlcpy(char       *dst,	/* O - Destination string */
-           const char *src,	/* I - Source string */
-	   size_t      size) {	/* I - Size of destination string buffer */
-  size_t	srclen;		/* Length of source string */
-
-
- /*
-  * Figure out how much room is needed...
-  */
-
-  size --;
-
-  srclen = strlen(src);
-
- /*
-  * Copy the appropriate amount...
-  */
-
-  if (srclen > size) srclen = size;
-
-  memcpy(dst, src, srclen);
-  dst[srclen] = '\0';
-
-  return (srclen);
-}
-
-
-/*
- * End of "$Id: flstring.c 7903 2010-11-28 21:06:39Z matt $".
- */
diff --git a/common/fltk/src/flstring.h b/common/fltk/src/flstring.h
deleted file mode 100644
index 679e490..0000000
--- a/common/fltk/src/flstring.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * "$Id: flstring.h 7913 2010-11-29 18:18:27Z greg.ercolano $"
- *
- * Common string header file for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#ifndef flstring_h
-#  define flstring_h
-
-#  include <FL/Fl_Export.H>
-#  include <config.h>
-#  include <stdio.h>
-#  include <stdarg.h>
-#  include <string.h>
-#  ifdef HAVE_STRINGS_H
-#    include <strings.h>
-#  endif /* HAVE_STRINGS_H */
-#  include <ctype.h>
-
-/*
- * Apparently Unixware defines "index" to strchr (!) rather than
- * providing a proper entry point or not providing the (obsolete)
- * BSD function.  Make sure index is not defined...
- */
-
-#  ifdef index
-#    undef index
-#  endif /* index */
-
-#  if defined(WIN32) && !defined(__CYGWIN__)
-#    define strcasecmp(s,t)	_stricmp((s), (t))
-#    define strncasecmp(s,t,n)	_strnicmp((s), (t), (n))
-/* Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
- * on Windows, which is supposed to be POSIX compliant...  Some of these
- * functions are also defined in ISO C99...
- */
-#    ifndef __WATCOMC__
-#      define strdup _strdup
-#      define unlink _unlink
-#    endif /* !__WATCOMC__ */
-#  elif defined(__EMX__)
-#    define strcasecmp(s,t)	stricmp((s), (t))
-#    define strncasecmp(s,t,n)	strnicmp((s), (t), (n))
-#  endif /* WIN32 */
-
-#  ifdef __cplusplus
-extern "C" {
-#  endif /* __cplusplus */
-
-FL_EXPORT extern int fl_snprintf(char *, size_t, const char *, ...);
-#  if !HAVE_SNPRINTF
-#    define snprintf fl_snprintf
-#  endif /* !HAVE_SNPRINTF */
-
-FL_EXPORT extern int fl_vsnprintf(char *, size_t, const char *, va_list ap);
-#  if !HAVE_VSNPRINTF
-#    define vsnprintf fl_vsnprintf
-#  endif /* !HAVE_VSNPRINTF */
-
-/*
- * strlcpy() and strlcat() are some really useful BSD string functions
- * that work the way strncpy() and strncat() *should* have worked.
- */
-
-FL_EXPORT extern size_t fl_strlcat(char *, const char *, size_t);
-#  if !HAVE_STRLCAT
-#    define strlcat fl_strlcat
-#  endif /* !HAVE_STRLCAT */
-
-FL_EXPORT extern size_t fl_strlcpy(char *, const char *, size_t);
-#  if !HAVE_STRLCPY
-#    define strlcpy fl_strlcpy
-#  endif /* !HAVE_STRLCPY */
-
-#  ifdef __cplusplus
-}
-#  endif /* __cplusplus */
-#endif /* !flstring_h */
-
-
-/*
- * End of "$Id: flstring.h 7913 2010-11-29 18:18:27Z greg.ercolano $".
- */
diff --git a/common/fltk/src/mediumarrow.h b/common/fltk/src/mediumarrow.h
deleted file mode 100644
index 8a1fe8c..0000000
--- a/common/fltk/src/mediumarrow.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#define mediumarrow_width 16
-#define mediumarrow_height 16
-static unsigned char mediumarrow_bits[] = {
-   0x40, 0x00, 0x60, 0x00, 0x70, 0x00, 0x78, 0x00, 0xfc, 0x3f, 0x78, 0x00,
-   0x70, 0x00, 0x60, 0x02, 0x40, 0x06, 0x00, 0x0e, 0x00, 0x1e, 0xfc, 0x3f,
-   0x00, 0x1e, 0x00, 0x0e, 0x00, 0x06, 0x00, 0x02};
diff --git a/common/fltk/src/new.xbm b/common/fltk/src/new.xbm
deleted file mode 100644
index 25a56c5..0000000
--- a/common/fltk/src/new.xbm
+++ /dev/null
@@ -1,6 +0,0 @@
-#define new_width 16
-#define new_height 16
-static unsigned char new_bits[] = {
-   0x00, 0x00, 0x78, 0x00, 0x84, 0x00, 0x02, 0x01, 0x01, 0xfe, 0x01, 0x80,
-   0x31, 0x80, 0x31, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0x31, 0x80, 0x31, 0x80,
-   0x01, 0x80, 0x01, 0x80, 0xff, 0xff, 0x00, 0x00};
diff --git a/common/fltk/src/ns.xbm b/common/fltk/src/ns.xbm
deleted file mode 100644
index f1ea18e..0000000
--- a/common/fltk/src/ns.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define ns_width 16
-#define ns_height 16
-#define ns_x_hot 8
-#define ns_y_hot 8
-static unsigned char ns_bits[] = {
-   0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0x80, 0x01, 0x80, 0x01,
-   0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
-   0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00};
diff --git a/common/fltk/src/ns_mask.xbm b/common/fltk/src/ns_mask.xbm
deleted file mode 100644
index a69f261..0000000
--- a/common/fltk/src/ns_mask.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define ns_mask_width 16
-#define ns_mask_height 16
-#define ns_mask_x_hot 8
-#define ns_mask_y_hot 8
-static unsigned char ns_mask_bits[] = {
-   0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0xf0, 0x0f, 0xc0, 0x03,
-   0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xf0, 0x0f,
-   0xf0, 0x0f, 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01};
diff --git a/common/fltk/src/numericsort.c b/common/fltk/src/numericsort.c
deleted file mode 100644
index e780b89..0000000
--- a/common/fltk/src/numericsort.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * "$Id: numericsort.c 8074 2010-12-20 13:45:26Z ianmacarthur $"
- *
- * Numeric sorting routine for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/* My own scandir sorting function, useful for the film industry where
-   we have many files with numbers in their names: */
-
-#include <config.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-#if !defined(WIN32) || defined(__CYGWIN__)
-#  ifdef HAVE_DIRENT_H
-#    include <dirent.h>
-#  else
-#    define dirent direct
-#    if HAVE_SYS_NDIR_H
-#      include <sys/ndir.h>
-#    endif /* HAVE_SYS_NDIR_H */
-#    if HAVE_SYS_DIR_H
-#      include <sys/dir.h>
-#    endif /* HAVE_SYS_DIR_H */
-#    if HAVE_NDIR_H
-#      include <ndir.h>
-#    endif /* HAVE_NDIR_H */
-#  endif /* HAVE_DIRENT_H */
-#else /* For WIN32 variants */
-#  include <FL/filename.H>
-#endif /* !WIN32 || __CYGWIN__ */
-
-/*
- * 'numericsort()' - Compare two directory entries, possibly with
- *                   a case-insensitive comparison...
- */
-
-static int numericsort(struct dirent **A, struct dirent **B, int cs) {
-  const char* a = (*A)->d_name;
-  const char* b = (*B)->d_name;
-  int ret = 0;
-  for (;;) {
-    if (isdigit(*a & 255) && isdigit(*b & 255)) {
-      int diff,magdiff;
-      while (*a == '0') a++;
-      while (*b == '0') b++;
-      while (isdigit(*a & 255) && *a == *b) {a++; b++;}
-      diff = (isdigit(*a & 255) && isdigit(*b & 255)) ? *a - *b : 0;
-      magdiff = 0;
-      while (isdigit(*a & 255)) {magdiff++; a++;}
-      while (isdigit(*b & 255)) {magdiff--; b++;}
-      if (magdiff) {ret = magdiff; break;} /* compare # of significant digits*/
-      if (diff) {ret = diff; break;}	/* compare first non-zero digit */
-    } else {
-      if (cs) {
-      	/* compare case-sensitive */
-	if ((ret = *a-*b)) break;
-      } else {
-	/* compare case-insensitve */
-	if ((ret = tolower(*a & 255)-tolower(*b & 255))) break;
-      }
-
-      if (!*a) break;
-      a++; b++;
-    }
-  }
-  if (!ret) return 0;
-  else return (ret < 0) ? -1 : 1;
-}
-
-/*
- * 'fl_casenumericsort()' - Compare directory entries with case-sensitivity.
- */
-
-int fl_casenumericsort(struct dirent **A, struct dirent **B) {
-  return numericsort(A, B, 0);
-}
-
-/*
- * 'fl_numericsort()' - Compare directory entries with case-sensitivity.
- */
-
-int fl_numericsort(struct dirent **A, struct dirent **B) {
-  return numericsort(A, B, 1);
-}
-
-/*
- * End of "$Id: numericsort.c 8074 2010-12-20 13:45:26Z ianmacarthur $".
- */
diff --git a/common/fltk/src/print_panel.cxx b/common/fltk/src/print_panel.cxx
deleted file mode 100644
index ad6a590..0000000
--- a/common/fltk/src/print_panel.cxx
+++ /dev/null
@@ -1,597 +0,0 @@
-//
-// "$Id: print_panel.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $"
-//
-// Print panel for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// This file is "work in progress".  The main parts have been copied
-// from fluid's print_panel{.fl|.h|.cxx} and hand-edited to produce
-// a working version w/o global variables.  The intention is to move
-// all static variables into an own class, and to name this class
-// Fl_Printer_Chooser or similar...
-//
-// Todo:
-//
-//   -	Currently preferences can't be saved, and there are options that
-//	are not yet used for printing.
-//   -	This file can only be used as an include file in Fl_PS_Printer.cxx
-//   -	The use of static variables should be avoided.
-//   -	Probably much more ...
-//
-
-#include "print_panel.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "../src/flstring.h"
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Int_Input.H>
-
-static Fl_Preferences print_prefs(Fl_Preferences::USER, "fltk.org", "printers");
-static Fl_Double_Window *print_panel=(Fl_Double_Window *)0;
-static Fl_Group *print_panel_controls=(Fl_Group *)0;
-static Fl_Choice *print_choice=(Fl_Choice *)0;
-static Fl_Button *print_properties=(Fl_Button *)0;
-static Fl_Box *print_status=(Fl_Box *)0;
-static Fl_Round_Button *print_all=(Fl_Round_Button *)0;
-static Fl_Round_Button *print_pages=(Fl_Round_Button *)0;
-static Fl_Round_Button *print_selection=(Fl_Round_Button *)0;
-static Fl_Check_Button *print_collate_button=(Fl_Check_Button *)0;
-static Fl_Group *print_collate_group[2]={(Fl_Group *)0};
-static Fl_Progress *print_progress=(Fl_Progress *)0;
-static Fl_Double_Window *print_properties_panel=(Fl_Double_Window *)0;
-static Fl_Choice *print_page_size=(Fl_Choice *)0;
-static Fl_Int_Input *print_from=(Fl_Int_Input *)0;
-static Fl_Int_Input *print_to=(Fl_Int_Input *)0;
-static Fl_Spinner *print_copies=(Fl_Spinner *)0;
-
-static int print_start = 0;	// 1 if print_okay has been clicked
-
-static void cb_print_choice(Fl_Choice*, void*) {
-  print_update_status();
-}
-
-static void cb_print_properties(Fl_Button*, void*) {
-  print_properties_panel->show();
-}
-
-static void cb_print_all(Fl_Round_Button*, void*) {
-  print_from->deactivate();
-  print_to->deactivate();
-}
-
-static void cb_print_pages(Fl_Round_Button*, void*) {
-  print_from->activate();
-  print_to->activate();
-}
-
-static void cb_print_selection(Fl_Round_Button*, void*) {
-  print_from->deactivate();
-  print_to->deactivate();
-}
-
-static void cb_print_copies(Fl_Spinner*, void*) {
-  if (print_copies->value() == 1) {
-    print_collate_button->deactivate();
-    print_collate_group[0]->deactivate();
-    print_collate_group[1]->deactivate();
-  } else {
-/*    print_collate_button->activate(); // TODO: manage collate options
-    print_collate_group[0]->activate();
-    print_collate_group[1]->activate(); */
-  };
-}
-
-static void cb_print_collate_button(Fl_Check_Button*, void*) {
-  int i = print_collate_button->value() != 0;
-  print_collate_group[i]->show();
-  print_collate_group[1 - i]->hide();
-}
-
-static void cb_Cancel(Fl_Button*, void*) {
-  print_start = 0;
-  print_panel->hide();
-}
-
-static void cb_print_properties_panel(Fl_Double_Window*, void*) {
-  print_properties_panel->hide();
-  print_update_status();
-}
-
-static Fl_Menu_Item menu_print_page_size[] = {
- {"Letter", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {"A4", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-#include <FL/Fl_Pixmap.H>
-static const char *idata_print_color[] = {
-"24 24 17 1",
-" \tc None",
-".\tc #FFFF00",
-"+\tc #C8FF00",
-"@\tc #00FF00",
-"#\tc #FFC800",
-"$\tc #FF0000",
-"%\tc #00FFFF",
-"&\tc #000000",
-"*\tc #FF00FF",
-"=\tc #00FFC8",
-"-\tc #FF00C8",
-";\tc #00C800",
-">\tc #C80000",
-",\tc #0000C8",
-"\'\tc #0000FF",
-")\tc #00C8FF",
-"!\tc #C800FF",
-"         ......         ",
-"       ..........       ",
-"      ............      ",
-"     ..............     ",
-"     ..............     ",
-"    ................    ",
-"    ................    ",
-"    ................    ",
-"    +@@@@@@+#$$$$$$#    ",
-"   %@@@@@@@&&$$$$$$$*   ",
-"  %%@@@@@@&&&&$$$$$$**  ",
-" %%%=@@@@&&&&&&$$$$-*** ",
-" %%%%@@@;&&&&&&>$$$**** ",
-"%%%%%%@@&&&&&&&&$$******",
-"%%%%%%%@&&&&&&&&$*******",
-"%%%%%%%%,&&&&&&,********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-" %%%%%%%)\'\'\'\'\'\'!******* ",
-" %%%%%%%%\'\'\'\'\'\'******** ",
-"  %%%%%%%%\'\'\'\'********  ",
-"   %%%%%%%%\'\'********   ",
-"     %%%%%%  ******     "
-};
-static Fl_Pixmap image_print_color(idata_print_color);
-
-static const char *idata_print_gray[] = {
-"24 24 17 1",
-" \tc None",
-".\tc #E3E3E3",
-"+\tc #D2D2D2",
-"@\tc #969696",
-"#\tc #C2C2C2",
-"$\tc #4C4C4C",
-"%\tc #B2B2B2",
-"&\tc #000000",
-"*\tc #696969",
-"=\tc #ACACAC",
-"-\tc #626262",
-";\tc #767676",
-">\tc #3C3C3C",
-",\tc #161616",
-"\'\tc #1C1C1C",
-")\tc #929292",
-"!\tc #585858",
-"         ......         ",
-"       ..........       ",
-"      ............      ",
-"     ..............     ",
-"     ..............     ",
-"    ................    ",
-"    ................    ",
-"    ................    ",
-"    +@@@@@@+#$$$$$$#    ",
-"   %@@@@@@@&&$$$$$$$*   ",
-"  %%@@@@@@&&&&$$$$$$**  ",
-" %%%=@@@@&&&&&&$$$$-*** ",
-" %%%%@@@;&&&&&&>$$$**** ",
-"%%%%%%@@&&&&&&&&$$******",
-"%%%%%%%@&&&&&&&&$*******",
-"%%%%%%%%,&&&&&&,********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-" %%%%%%%)\'\'\'\'\'\'!******* ",
-" %%%%%%%%\'\'\'\'\'\'******** ",
-"  %%%%%%%%\'\'\'\'********  ",
-"   %%%%%%%%\'\'********   ",
-"     %%%%%%  ******     "
-};
-static Fl_Pixmap image_print_gray(idata_print_gray);
-
-static Fl_Button *print_output_mode[4]={(Fl_Button *)0};
-
-static void cb_Save(Fl_Return_Button*, void*) {
-  print_properties_panel->hide();
-
-  char name[1024];
-  int val;
-  const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
-
-  snprintf(name, sizeof(name), "%s/page_size", printer);
-  print_prefs.set(name, print_page_size->value());
-
-  snprintf(name, sizeof(name), "%s/output_mode", printer);
-  for (val = 0; val < 4; val ++) {
-    if (print_output_mode[val]->value()) break;
-  }
-  print_prefs.set(name, val);
-}
-
-static void cb_Cancel1(Fl_Button*, void*) {
-  print_properties_panel->hide();
-  print_update_status();
-}
-
-static void cb_Use(Fl_Button*, void*) {
-  print_properties_panel->hide();
-}
-
-Fl_Double_Window* make_print_panel() {
-  { print_panel = new Fl_Double_Window(465, 235, Fl_Printer::dialog_title);
-    { print_panel_controls = new Fl_Group(10, 10, 447, 216);
-      { print_choice = new Fl_Choice(133, 10, 181, 25, Fl_Printer::dialog_printer);
-        print_choice->down_box(FL_BORDER_BOX);
-        print_choice->labelfont(1);
-        print_choice->callback((Fl_Callback*)cb_print_choice);
-        print_choice->when(FL_WHEN_CHANGED);
-      } // Fl_Choice* print_choice
-      { print_properties = new Fl_Button(314, 10, 115, 25, Fl_Printer::dialog_properties);
-        print_properties->callback((Fl_Callback*)cb_print_properties);
-      } // Fl_Button* print_properties
-      { print_status = new Fl_Box(0, 41, print_panel_controls->w(), 17, "printer/job status");
-        print_status->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE|FL_ALIGN_LEFT));
-      } // Fl_Box* print_status
-      { Fl_Group* o = new Fl_Group(10, 86, 227, 105, Fl_Printer::dialog_range);
-        o->box(FL_THIN_DOWN_BOX);
-        o->labelfont(1);
-        o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-        { print_all = new Fl_Round_Button(20, 96, 38, 25, Fl_Printer::dialog_all);
-          print_all->type(102);
-          print_all->down_box(FL_ROUND_DOWN_BOX);
-          print_all->value(1);
-          print_all->callback((Fl_Callback*)cb_print_all);
-        } // Fl_Round_Button* print_all
-        { print_pages = new Fl_Round_Button(20, 126, 64, 25, Fl_Printer::dialog_pages);
-          print_pages->type(102);
-          print_pages->down_box(FL_ROUND_DOWN_BOX);
-          print_pages->callback((Fl_Callback*)cb_print_pages);
-        } // Fl_Round_Button* print_pages
-        { print_selection = new Fl_Round_Button(20, 156, 82, 25, "Selection");
-          print_selection->type(102);
-          print_selection->down_box(FL_ROUND_DOWN_BOX);
-          print_selection->callback((Fl_Callback*)cb_print_selection);
-        } // Fl_Round_Button* print_selection
-        { print_from = new Fl_Int_Input(136, 126, 28, 25, Fl_Printer::dialog_from);
-          print_from->type(2);
-          print_from->textfont(4);
-          print_from->deactivate();
-        } // Fl_Int_Input* print_from
-        { print_to = new Fl_Int_Input(199, 126, 28, 25, Fl_Printer::dialog_to);
-          print_to->type(2);
-          print_to->textfont(4);
-          print_to->deactivate();
-        } // Fl_Int_Input* print_to
-        o->end();
-      } // Fl_Group* o
-      { Fl_Group* o = new Fl_Group(247, 86, 210, 105, Fl_Printer::dialog_copies);
-        o->box(FL_THIN_DOWN_BOX);
-        o->labelfont(1);
-        o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-        { print_copies = new Fl_Spinner(321, 96, 45, 25, Fl_Printer::dialog_copyNo);
-          print_copies->callback((Fl_Callback*)cb_print_copies);
-          print_copies->when(FL_WHEN_CHANGED);
-        } // Fl_Spinner* print_copies
-        { print_collate_button = new Fl_Check_Button(376, 96, 64, 25, "Collate");
-          print_collate_button->down_box(FL_DOWN_BOX);
-          print_collate_button->callback((Fl_Callback*)cb_print_collate_button);
-          print_collate_button->when(FL_WHEN_CHANGED);
-          print_collate_button->deactivate();
-        } // Fl_Check_Button* print_collate_button
-        { print_collate_group[0] = new Fl_Group(257, 131, 191, 50);
-          print_collate_group[0]->deactivate();
-          { Fl_Box* o = new Fl_Box(287, 141, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(272, 136, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(257, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(352, 141, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(337, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(322, 131, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(417, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(402, 136, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(387, 131, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          print_collate_group[0]->end();
-        } // Fl_Group* print_collate_group[0]
-        { print_collate_group[1] = new Fl_Group(257, 131, 191, 50);
-          print_collate_group[1]->hide();
-          print_collate_group[1]->deactivate();
-          { Fl_Box* o = new Fl_Box(287, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(272, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(257, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(352, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(337, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(322, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(417, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(402, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(387, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          print_collate_group[1]->end();
-        } // Fl_Group* print_collate_group[1]
-        o->end();
-      } // Fl_Group* o
-      { Fl_Return_Button* o = new Fl_Return_Button(279, 201, 100, 25, Fl_Printer::dialog_print_button);
-        o->callback((Fl_Callback*)print_cb);
-      } // Fl_Return_Button* o
-      { Fl_Button* o = new Fl_Button(389, 201, 68, 25, Fl_Printer::dialog_cancel_button);
-        o->callback((Fl_Callback*)cb_Cancel);
-      } // Fl_Button* o
-      print_panel_controls->end();
-    } // Fl_Group* print_panel_controls
-    { print_progress = new Fl_Progress(10, 203, 289, 21);
-      print_progress->selection_color((Fl_Color)4);
-      print_progress->hide();
-    } // Fl_Progress* print_progress
-    print_panel->set_modal();
-    print_panel->end();
-  } // Fl_Double_Window* print_panel
-  { print_properties_panel = new Fl_Double_Window(290, 130, Fl_Printer::property_title);
-    print_properties_panel->callback((Fl_Callback*)cb_print_properties_panel);
-    { print_page_size = new Fl_Choice(150, 10, 80, 25, Fl_Printer::property_pagesize);
-      print_page_size->down_box(FL_BORDER_BOX);
-      print_page_size->labelfont(FL_HELVETICA);
-      print_page_size->menu(menu_print_page_size);
-    } // Fl_Choice* print_page_size
-    { Fl_Group* o = new Fl_Group(110, 45, 170, 40, Fl_Printer::property_mode);
-      o->labelfont(FL_HELVETICA);
-      o->align(Fl_Align(FL_ALIGN_LEFT));
-      { print_output_mode[0] = new Fl_Button(110, 45, 30, 40);
-        print_output_mode[0]->type(102);
-        print_output_mode[0]->box(FL_BORDER_BOX);
-        print_output_mode[0]->down_box(FL_BORDER_BOX);
-        print_output_mode[0]->value(1);
-        print_output_mode[0]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[0]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[0]->image(image_print_color);
-      } // Fl_Button* print_output_mode[0]
-      { print_output_mode[1] = new Fl_Button(150, 50, 40, 30);
-        print_output_mode[1]->type(102);
-        print_output_mode[1]->box(FL_BORDER_BOX);
-        print_output_mode[1]->down_box(FL_BORDER_BOX);
-        print_output_mode[1]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[1]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[1]->image(image_print_color);
-      } // Fl_Button* print_output_mode[1]
-      { print_output_mode[2] = new Fl_Button(200, 45, 30, 40);
-        print_output_mode[2]->type(102);
-        print_output_mode[2]->box(FL_BORDER_BOX);
-        print_output_mode[2]->down_box(FL_BORDER_BOX);
-        print_output_mode[2]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[2]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[2]->image(image_print_gray);
-      } // Fl_Button* print_output_mode[2]
-      { print_output_mode[3] = new Fl_Button(240, 50, 40, 30);
-        print_output_mode[3]->type(102);
-        print_output_mode[3]->box(FL_BORDER_BOX);
-        print_output_mode[3]->down_box(FL_BORDER_BOX);
-        print_output_mode[3]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[3]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[3]->image(image_print_gray);
-      } // Fl_Button* print_output_mode[3]
-      o->end();
-    } // Fl_Group* o
-    { Fl_Return_Button* o = new Fl_Return_Button(93, 95, 99, 25, Fl_Printer::property_save);
-      o->callback((Fl_Callback*)cb_Save);
-    } // Fl_Return_Button* o
-    { Fl_Button* o = new Fl_Button(202, 95, 78, 25, Fl_Printer::property_cancel);
-      o->callback((Fl_Callback*)cb_Cancel1);
-    } // Fl_Button* o
-    { Fl_Button* o = new Fl_Button(10, 95, 73, 25, Fl_Printer::property_use);
-      o->callback((Fl_Callback*)cb_Use);
-    } // Fl_Button* o
-    print_properties_panel->set_modal();
-    print_properties_panel->end();
-  } // Fl_Double_Window* print_properties_panel
-  return print_properties_panel;
-}
-
-void print_cb(Fl_Return_Button *, void *) {
-  print_start = 1;
-  print_panel->hide();
-}
-
-void print_load() {
-  FILE *lpstat;
-  char line[1024], name[1024], *nptr, qname[2048], *qptr, defname[1024];
-  int i;
-
-  if (print_choice->size() > 1) {
-    for (i = 1; print_choice->text(i); i ++) {
-      free(print_choice->menu()[i].user_data());
-    }
-  }
-
-  print_choice->clear();
-  print_choice->add(Fl_Printer::dialog_print_to_file, 0, 0, 0, FL_MENU_DIVIDER);
-  print_choice->value(0);
-  
-  print_start = 0;
-
-  defname[0] = '\0';
-
-  if ((lpstat = popen("LC_MESSAGES=C LANG=C lpstat -p -d", "r")) != NULL) {
-    while (fgets(line, sizeof(line), lpstat)) {
-      if (!strncmp(line, "printer ", 8) &&
-          sscanf(line + 8, "%s", name) == 1) {
-        for (nptr = name, qptr = qname; *nptr; *qptr++ = *nptr++) {
-          if (*nptr == '/') *qptr++ = '\\';
-        }
-        *qptr = '\0';
-
-        print_choice->add(qname, 0, 0, (void *)strdup(name), 0);
-      } else if (!strncmp(line, "system default destination: ", 28)) {
-        if (sscanf(line + 28, "%s", defname) != 1) defname[0] = '\0';
-      }
-    }
-    pclose(lpstat);
-  }
-
-  if (defname[0]) {
-    for (i = 1; print_choice->text(i); i ++) {
-      if (!strcmp((char *)print_choice->menu()[i].user_data(), defname)) {
-        print_choice->value(i);
-        break;
-      }
-    }
-  } else if (print_choice->size() > 2) print_choice->value(1);
-
-  print_update_status();
-
-} // print_load()
-
-void print_update_status() {
-  FILE *lpstat;
-  char command[1024];
-  static char status[1024];
-  const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
-
-  if (print_choice->value()) {
-    snprintf(command, sizeof(command), "lpstat -p '%s'", printer);
-    if ((lpstat = popen(command, "r")) != NULL) {
-      if (fgets(status, sizeof(status), lpstat)==0) { /* ignore */ }
-      pclose(lpstat);
-    } else strcpy(status, "printer status unavailable");
-  } else status[0] = '\0';
-
-  print_status->label(status);
-
-  char name[1024];
-  int val;
-
-  snprintf(name, sizeof(name), "%s/page_size", printer);
-  print_prefs.get(name, val, 1);
-  print_page_size->value(val);
-
-  snprintf(name, sizeof(name), "%s/output_mode", printer);
-  print_prefs.get(name, val, 0);
-  print_output_mode[val]->setonly();
-}
-
-//
-// End of "$Id: print_panel.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $".
-//
diff --git a/common/fltk/src/print_panel.h b/common/fltk/src/print_panel.h
deleted file mode 100644
index 6c96e47..0000000
--- a/common/fltk/src/print_panel.h
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// "$Id: print_panel.h 7913 2010-11-29 18:18:27Z greg.ercolano $"
-//
-// Print panel for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// This is a temporary file.  It is only for development and will
-// probably be removed later.
-//
-
-#ifndef print_panel_h
-#define print_panel_h
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Round_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Spinner.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Progress.H>
-static Fl_Double_Window* make_print_panel();
-static void print_cb(Fl_Return_Button *, void *); 
-static void print_load();
-static void print_update_status();
-#endif
-
-//
-// End of "$Id: print_panel.h 7913 2010-11-29 18:18:27Z greg.ercolano $".
-//
diff --git a/common/fltk/src/ps_image.cxx b/common/fltk/src/ps_image.cxx
deleted file mode 100644
index 6e1cbfc..0000000
--- a/common/fltk/src/ps_image.cxx
+++ /dev/null
@@ -1,553 +0,0 @@
-//
-// "$Id: image.cxx 4324 2005-05-09 21:47:22Z rokan $"
-//
-// Postscript image drawing implementation for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef FL_DOXYGEN
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-
-#include <FL/Fl_PostScript.H>
-#include <FL/Fl.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Bitmap.H>
- 
-int Fl_PostScript_Graphics_Driver::alpha_mask(const uchar * data, int w, int h, int D, int LD){
-
-  mask = 0;
-  if ((D/2)*2 != D){ //no mask info
-    return 0;
-  }
-  int xx;
-  int i,j, k, l;
-  LD += w*D;
-  int V255=0;
-  int V0 =0;
-  int V_=0;
-  for (j=0;j<h;j++){
-    for (i=0;i<w;i++)
-      switch(data[j*LD+D*i+D-1]){
-        case 255: V255 = 1; break;
-        case 0: V0 = 1; break;
-        default: V_= 1;
-      }
-    if (V_) break;
-  };
-  if (!V_){
-    if (V0)
-      if (V255){// not true alpha, only masking
-        xx = (w+7)/8;
-        mask = new uchar[h * xx];
-        for (i=0;i<h * xx;i++) mask[i]=0;
-        for (j=0;j<h;j++)
-          for (i=0;i<w;i++)
-            if (data[j*LD+D*i+D-1])
-              mask[j*xx+i/8] |= 1 << (i % 8);
-        mx = w;
-        my = h; //mask imensions
-        return 0;
-      } else {
-        mask=0;
-        return 1; //everything masked
-      }
-    else
-      return 0;
-  }
-
-
-
-  /////   Alpha dither, generating (4*w) * 4 mask area       /////
-  /////         with Floyd-Steinberg error diffusion         /////
-
-  mask = new uchar[((w+1)/2) * h * 4];
-
-  for (i = 0; i<((w+1)/2) * h * 4; i++) mask[i] = 0; //cleaning
-
-
-
-  mx= w*4;
-  my=h*4; // mask dimensions
-
-  xx = (w+1)/2;                //  mask line width in bytes
-
-  short * errors1 = new short [w*4+2]; //  two rows of dither errors
-  short * errors2 = new short [w*4+2]; //  two rows of dither errors
-
-  for (i=0; i<w*4+2; i++) errors2[i] = 0; // cleaning,after first swap will become current
-  for (i=0; i<w*4+2; i++) errors1[i] = 0; // cleaning,after first swap will become current
-
-  short * current = errors1;
-  short * next = errors2;
-  short * swap;
-
-  for (j=0; j<h; j++){
-    for (l=0; l<4; ){           // generating 4 rows of mask lines for 1 RGB line
-      int jj = j*4+l;
-
-      /// mask row index
-      swap = next;
-      next = current;
-      current = swap;
-      *(next+1) = 0;          // must clean the first cell, next are overriden by *1
-      for (i=0; i<w; i++){
-        for (k=0; k<4; k++){   // generating 4 x-pixels for 1 RGB
-          short error, o1, o2, o3;
-          int ii = i*4+k;   // mask cell index
-          short val = data[j*LD+D*i+D-1] + current[1+ii];
-          if (val>127){
-            mask[jj*xx+ii/8]  |= 1 << (ii % 8); //set mask bit
-            error =  val-255;
-          }else
-            error = val;
-
-          ////// error spreading /////
-          if (error >0){
-            next[ii] +=  o1 = (error * 3 + 8)/16;
-            current[ii+2] += o2 = (error * 7 + 8)/16;
-            next[ii+2] = o3 =(error + 8)/16;  // *1 - ok replacing (cleaning)
-          } else {
-            next[ii] += o1 = (error * 3 - 8)/16;
-            current[ii+2] += o2 = (error * 7 - 8)/16;
-            next[ii+2] = o3 = (error - 8)/16;
-          }
-          next[1+ii] += error - o1 - o2 - o3;
-        }
-      }
-      l++;
-
-      ////// backward
-
-      jj = j*4+l;
-      swap = next;
-      next = current;
-      current = swap;
-      *(next+1) = 0;          // must clean the first cell, next are overriden by *1
-
-      for (i = w-1; i >= 0; i--){
-
-        for (k=3; k>=0; k--){   // generating 4 x-pixels for 1 RGB
-          short error, o1, o2, o3;
-
-          int ii = i*4+k;   // mask cell index
-          short val = data[j*LD+D*i+D-1] + current[1+ii];
-          if (val>127){
-
-            mask[jj*xx+ii/8]  |= 1 << (ii % 8); //set mask bit
-            error =  val-255;
-          } else
-            error = val;
-
-          ////// error spreading /////
-          if (error >0){
-            next[ii+2] +=  o1 = (error * 3 + 8)/16;
-            current[ii] += o2 = (error * 7 + 8)/16;
-            next[ii] = o3 =(error + 8)/16;  // *1 - ok replacing (cleaning)
-          } else {
-            next[ii+2] += o1 = (error * 3 - 8)/16;
-
-            current[ii] += o2 = (error * 7 - 8)/16;
-            next[ii] = o3 = (error - 8)/16;
-          }
-          next[1+ii] += error - o1 - o2 - o3;
-        }
-      }
-      l++;
-    }
-  }
-  delete[] errors1;
-  delete[] errors2;
-  return 0;
-}
-
-// bitwise inversion of all 4-bit quantities
-static const unsigned char swapped[16] = {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15};
-
-// bitwise inversion of a byte
-static inline uchar swap_byte(const uchar b) {
-  return (swapped[b & 0xF] << 4) | swapped[b >> 4];
-}
-
-
-extern uchar **fl_mask_bitmap;
-
-
-void Fl_PostScript_Graphics_Driver::draw_image(const uchar *data, int ix, int iy, int iw, int ih, int D, int LD) {
-  double x = ix, y = iy, w = iw, h = ih;
-
-  if (D<3){ //mono
-    draw_image_mono(data, ix, iy, iw, ih, D, LD);
-    return;
-  }
-
-
-  int i,j, k;
-
-  fprintf(output,"save\n");
-
-  const char * interpol;
-  if (lang_level_>1){
-    if (interpolate_)
-      interpol="true";
-    else
-      interpol="false";
-    if (mask && lang_level_>2)
-      fprintf(output, "%g %g %g %g %i %i %i %i %s CIM\n", x , y+h , w , -h , iw , ih, mx, my, interpol);
-    else
-      fprintf(output, "%g %g %g %g %i %i %s CII\n", x , y+h , w , -h , iw , ih, interpol);
-  } else
-    fprintf(output , "%g %g %g %g %i %i CI", x , y+h , w , -h , iw , ih);
-
-
-  if (!LD) LD = iw*D;
-  uchar *curmask=mask;
-
-  for (j=0; j<ih;j++){
-    if (mask){
-
-      for (k=0;k<my/ih;k++){
-        for (i=0; i<((mx+7)/8);i++){
-          if (!(i%80)) fprintf(output, "\n");
-          fprintf(output, "%.2x",swap_byte(*curmask));
-          curmask++;
-        }
-        fprintf(output,"\n");
-      }
-    }
-    const uchar *curdata=data+j*LD;
-    for (i=0 ; i<iw ; i++) {
-      uchar r = curdata[0];
-      uchar g =  curdata[1];
-      uchar b =  curdata[2];
-      if (lang_level_<3 && D>3) { //can do  mixing using bg_* colors)
-        unsigned int a2 = curdata[3]; //must be int
-        unsigned int a = 255-a2;
-        r = (a2 * r + bg_r * a)/255;
-        g = (a2 * g + bg_g * a)/255;
-        b = (a2 * b + bg_b * a)/255;
-      }
-      if (!(i%40)) fprintf(output, "\n");
-      fprintf(output, "%.2x%.2x%.2x", r, g, b);
-      curdata +=D;
-    }
-    fprintf(output,"\n");
-
-  }
-
-  fprintf(output," >\nrestore\n" );
-
-
-}
-
-void Fl_PostScript_Graphics_Driver::draw_image(Fl_Draw_Image_Cb call, void *data, int ix, int iy, int iw, int ih, int D) {
-  double x = ix, y = iy, w = iw, h = ih;
-
-  int level2_mask = 0;
-  fprintf(output,"save\n");
-  int i,j,k;
-  const char * interpol;
-  if (lang_level_ > 1) {
-    if (interpolate_) interpol="true";
-    else interpol="false";
-    if (mask && lang_level_ > 2) {
-      fprintf(output, "%g %g %g %g %i %i %i %i %s CIM\n", x , y+h , w , -h , iw , ih, mx, my, interpol);
-      }
-    else if (mask && lang_level_ == 2) {
-      level2_mask = 1; // use method for drawing masked color image with PostScript level 2
-      fprintf(output, " %g %g %g %g %d %d pixmap_plot\n", x, y, w, h, iw, ih);
-    }
-    else {
-      fprintf(output, "%g %g %g %g %i %i %s CII\n", x , y+h , w , -h , iw , ih, interpol);
-      }
-  } else {
-    fprintf(output , "%g %g %g %g %i %i CI", x , y+h , w , -h , iw , ih);
-    }
-
-  int LD=iw*D;
-  uchar *rgbdata=new uchar[LD];
-  uchar *curmask=mask;
-
-  if (level2_mask) {
-    for (j = ih - 1; j >= 0; j--) { // output full image data
-      call(data, 0, j, iw, rgbdata);
-      uchar *curdata = rgbdata;
-      for (i=0 ; i<iw ; i++) {
-	if (!(i%20)) fputs("\n", output);
-	fprintf(output, "%.2x%.2x%.2x", curdata[0], curdata[1], curdata[2]);
-	curdata += D;
-	}
-      fputs("\n", output);
-      }
-    fputs(">\n", output);
-    for (j = ih - 1; j >= 0; j--) { // output mask data
-      curmask = mask + j * (my/ih) * ((mx+7)/8);
-      for (k=0; k < my/ih; k++) {
-	for (i=0; i < ((mx+7)/8); i++) {
-	  if (!(i%40)) fputs("\n", output);
-	  fprintf(output, "%.2x",swap_byte(*curmask));
-	  curmask++;
-	}
-	fputs("\n", output);
-      }
-    }
-    fputs(">\n", output);
-  }
-  else {
-    for (j=0; j<ih;j++) {
-      if (mask && lang_level_ > 2) {  // InterleaveType 2 mask data
-	for (k=0; k<my/ih;k++) { //for alpha pseudo-masking
-	  for (i=0; i<((mx+7)/8);i++) {
-	    if (!(i%40)) fputs("\n", output);
-	    fprintf(output, "%.2x",swap_byte(*curmask));
-	    curmask++;
-	  }
-	  fprintf(output,"\n");
-	}
-      }
-      call(data,0,j,iw,rgbdata);
-      uchar *curdata=rgbdata;
-      for (i=0 ; i<iw ; i++) {
-	uchar r = curdata[0];
-	uchar g =  curdata[1];
-	uchar b =  curdata[2];
-
-	if (!(i%40)) 	fputs("\n", output);
-	fprintf(output, "%.2x%.2x%.2x", r, g, b);
-
-	curdata +=D;
-      }
-      fputs("\n", output);
-
-    }
-    fputs(">\n", output);
-    }
-
-  fprintf(output,"restore\n");
-  delete[] rgbdata;
-}
-
-void Fl_PostScript_Graphics_Driver::draw_image_mono(const uchar *data, int ix, int iy, int iw, int ih, int D, int LD) {
-  double x = ix, y = iy, w = iw, h = ih;
-
-  fprintf(output,"save\n");
-
-  int i,j, k;
-
-  const char * interpol;
-  if (lang_level_>1){
-    if (interpolate_)
-      interpol="true";
-    else
-      interpol="false";
-    if (mask && lang_level_>2)
-      fprintf(output, "%g %g %g %g %i %i %i %i %s GIM\n", x , y+h , w , -h , iw , ih, mx, my, interpol);
-    else
-      fprintf(output, "%g %g %g %g %i %i %s GII\n", x , y+h , w , -h , iw , ih, interpol);
-  }else
-    fprintf(output , "%g %g %g %g %i %i GI", x , y+h , w , -h , iw , ih);
-
-
-  if (!LD) LD = iw*D;
-
-
-  int bg = (bg_r + bg_g + bg_b)/3;
-
-  uchar *curmask=mask;
-  for (j=0; j<ih;j++){
-    if (mask){
-      for (k=0;k<my/ih;k++){
-        for (i=0; i<((mx+7)/8);i++){
-          if (!(i%80)) fprintf(output, "\n");
-          fprintf(output, "%.2x",swap_byte(*curmask));
-          curmask++;
-        }
-        fprintf(output,"\n");
-      }
-    }
-    const uchar *curdata=data+j*LD;
-    for (i=0 ; i<iw ; i++) {
-      if (!(i%80)) fprintf(output, "\n");
-      uchar r = curdata[0];
-      if (lang_level_<3 && D>1) { //can do  mixing
-
-        unsigned int a2 = curdata[1]; //must be int
-        unsigned int a = 255-a2;
-        r = (a2 * r + bg * a)/255;
-      }
-      if (!(i%120)) fprintf(output, "\n");
-      fprintf(output, "%.2x", r);
-      curdata +=D;
-    }
-    fprintf(output,"\n");
-
-  }
-
-  fprintf(output," >\nrestore\n" );
-
-}
-
-
-
-void Fl_PostScript_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb call, void *data, int ix, int iy, int iw, int ih, int D) {
-  double x = ix, y = iy, w = iw, h = ih;
-
-  fprintf(output,"save\n");
-  int i,j,k;
-  const char * interpol;
-  if (lang_level_>1){
-    if (interpolate_) interpol="true";
-    else interpol="false";
-    if (mask && lang_level_>2)
-      fprintf(output, "%g %g %g %g %i %i %i %i %s GIM\n", x , y+h , w , -h , iw , ih, mx, my, interpol);
-    else
-      fprintf(output, "%g %g %g %g %i %i %s GII\n", x , y+h , w , -h , iw , ih, interpol);
-  } else
-    fprintf(output , "%g %g %g %g %i %i GI", x , y+h , w , -h , iw , ih);
-
-  int LD=iw*D;
-  uchar *rgbdata=new uchar[LD];
-  uchar *curmask=mask;
-  for (j=0; j<ih;j++){
-
-    if (mask && lang_level_>2){  // InterleaveType 2 mask data
-      for (k=0; k<my/ih;k++){ //for alpha pseudo-masking
-        for (i=0; i<((mx+7)/8);i++){
-          if (!(i%40)) fprintf(output, "\n");
-          fprintf(output, "%.2x",swap_byte(*curmask));
-          curmask++;
-        }
-        fprintf(output,"\n");
-      }
-    }
-    call(data,0,j,iw,rgbdata);
-    uchar *curdata=rgbdata;
-    for (i=0 ; i<iw ; i++) {
-      uchar r = curdata[0];
-      if (!(i%120)) fprintf(output, "\n");
-      fprintf(output, "%.2x", r);
-      curdata +=D;
-    }
-    fprintf(output,"\n");
-  }
-  fprintf(output,">\n");
-  fprintf(output,"restore\n");
-  delete[] rgbdata;
-}
-
-
-////////////////////////////// Image classes //////////////////////
-
-
-void Fl_PostScript_Graphics_Driver::draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy){
-  const char * const * di =pxm->data();
-  int w,h;
-  if (!fl_measure_pixmap(di, w, h)) return;
-  mask=0;
-  fl_mask_bitmap=&mask;
-  mx = WP;
-  my = HP;
-  push_clip(XP, YP, WP, HP);
-  fl_draw_pixmap(di,XP -cx, YP -cy, FL_BLACK );
-  pop_clip();
-  delete[] mask;
-  mask=0;
-  fl_mask_bitmap=0;
-}
-
-void Fl_PostScript_Graphics_Driver::draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy){
-  const uchar  * di = rgb->array;
-  int w = rgb->w();
-  int h = rgb->h();
-  mask=0;
-  if (lang_level_>2) //when not true, not making alphamask, mixing colors instead...
-  if (alpha_mask(di, w, h, rgb->d(),rgb->ld())) return; //everthing masked, no need for painting!
-  push_clip(XP, YP, WP, HP);
-  draw_image(di, XP + cx, YP + cy, w, h, rgb->d(), rgb->ld());
-  pop_clip();
-  delete[]mask;
-  mask=0;
-}
-
-void Fl_PostScript_Graphics_Driver::draw(Fl_Bitmap * bitmap,int XP, int YP, int WP, int HP, int cx, int cy){
-  const uchar  * di = bitmap->array;
-  int w,h;
-  int LD=(bitmap->w()+7)/8;
-  int xx;
-
-  if (WP> bitmap->w() - cx){// to assure that it does not go out of bounds;
-     w = bitmap->w() - cx;
-     xx = (bitmap->w()+7)/8 - cx/8; //length of mask in bytes
-  }else{
-    w =WP;
-    xx = (w+7)/8 - cx/8;
-  }
-  if ( HP > bitmap->h()-cy)
-    h = bitmap->h() - cy;
-  else
-    h = HP;
-
-  di += cy*LD + cx/8;
-  int si = cx % 8; // small shift to be clipped, it is simpler than shifting whole mask
-
-  int i,j;
-  push_clip(XP, YP, WP, HP);
-  fprintf(output , "%i %i %i %i %i %i MI", XP - si, YP + HP , WP , -HP , w , h);
-
-  for (j=0; j<HP; j++){
-    for (i=0; i<xx; i++){
-      if (!(i%80)) fprintf(output, "\n"); // not have lines longer than 255 chars
-      fprintf(output, "%.2x", swap_byte(*di) );
-      di++;
-    }
-    fprintf(output,"\n");
-  }
-  fprintf(output,">\n");
-  pop_clip();
-}
-
-#endif // FL_DOXYGEN
-
-//
-// End of "$Id: image.cxx 4324 2005-05-09 21:47:22Z rokan $"
-//
-
-
-
-
-
-
-
-
-
-
-  
-
-
-
-
-
-
-
diff --git a/common/fltk/src/scandir.c b/common/fltk/src/scandir.c
deleted file mode 100644
index ffe5803..0000000
--- a/common/fltk/src/scandir.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA.  */
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include "scandir_win32.c"
-#else
-
-#  include "flstring.h"
-
-#  if !HAVE_SCANDIR
-#    include <stdlib.h>
-#    include <sys/types.h>
-#    include <errno.h>
-
-#    if HAVE_DIRENT_H
-#      include <dirent.h>
-#      define NAMLEN(dirent) strlen((dirent)->d_name)
-#    else
-#      define dirent direct
-#      define NAMLEN(dirent) (dirent)->d_namlen
-#      if HAVE_SYS_NDIR_H
-#        include <sys/ndir.h>
-#      endif
-#      if HAVE_SYS_DIR_H
-#        include <sys/dir.h>
-#      endif
-#      if HAVE_NDIR_H
-#        include <ndir.h>
-#      endif
-#    endif
-
-int
-fl_scandir(const char *dir, struct dirent ***namelist,
-	   int (*select)(struct dirent *),
-	   int (*compar)(struct dirent **, struct dirent **))
-{
-  DIR *dp = opendir (dir);
-  struct dirent **v = NULL;
-  size_t vsize = 0, i;
-  struct dirent *d;
-  int save;
-
-  if (dp == NULL)
-    return -1;
-
-  save = errno;
-  errno = 0;
-
-  i = 0;
-  while ((d = readdir (dp)) != NULL)
-    if (select == NULL || (*select) (d))
-      {
-      size_t dsize;
-
-      if (i == vsize)
-        {
-          struct dirent **newv;
-          if (vsize == 0)
-            vsize = 10;
-          else
-            vsize *= 2;
-          newv = (struct dirent **) realloc (v, vsize * sizeof (*v));
-          if (newv == NULL)
-            {
-            lose:
-              errno = ENOMEM;
-              break;
-            }
-          v = newv;
-        }
-
-#    define _D_EXACT_NAMLEN(d) (strlen ((d)->d_name))
-#    define _D_ALLOC_NAMLEN(d) (sizeof (d)->d_name > 1 ? sizeof (d)->d_name : \
-                              _D_EXACT_NAMLEN (d) + 1)
-
-      dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d;
-      v[i] = (struct dirent *) malloc (dsize);
-      if (v[i] == NULL)
-        goto lose;
-
-      memcpy (v[i++], d, dsize);
-      }
-
-  if (errno != 0)
-    {
-      save = errno;
-      (void) closedir (dp);
-      while (i > 0)
-      free (v[--i]);
-      free (v);
-      errno = save;
-      return -1;
-    }
-
-  (void) closedir (dp);
-  errno = save;
-
-  /* Sort the list if we have a comparison function to sort with.  */
-  if (compar) qsort (v, i, sizeof (*v), (int (*)(const void *, const void *))compar);
-  *namelist = v;
-  return i;
-}
-
-#  endif
-#endif
-
-/*
- * End of "$Id: scandir.c 8192 2011-01-05 16:50:10Z manolo $".
- */
diff --git a/common/fltk/src/scandir_win32.c b/common/fltk/src/scandir_win32.c
deleted file mode 100644
index dcefdf6..0000000
--- a/common/fltk/src/scandir_win32.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * "$Id: scandir_win32.c 8347 2011-02-01 01:06:27Z greg.ercolano $"
- *
- * WIN32 scandir function for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#ifndef __CYGWIN__
-/* Emulation of posix scandir() call */
-#include <FL/fl_utf8.h>
-#include <FL/filename.H>
-#include "flstring.h"
-#include <windows.h>
-#include <stdlib.h>
-
-int fl_scandir(const char *dirname, struct dirent ***namelist,
-	       int (*select)(struct dirent *),
-	       int (*compar)(struct dirent **, struct dirent **)) {
-  int len;
-  char *findIn, *d, is_dir = 0;
-  WIN32_FIND_DATAW findw;
-  HANDLE h;
-  int nDir = 0, NDir = 0;
-  struct dirent **dir = 0, *selectDir;
-  unsigned long ret;
-
-  len    = strlen(dirname);
-  findIn = (char *)malloc((size_t)(len+10));
-  if (!findIn) return -1;
-  strcpy(findIn, dirname);
-
-  /* #if defined(__GNUC__) */
-  /* #warning FIXME This probably needs to be MORE UTF8 aware now */
-  /* #endif */
-  for (d = findIn; *d; d++) if (*d=='/') *d='\\';
-  if ((len==0)) { strcpy(findIn, ".\\*"); }
-  if ((len==2)&&findIn[1]==':'&&isalpha(findIn[0])) { *d++ = '\\'; *d = 0; }
-  if ((len==1)&& (d[-1]=='.')) { strcpy(findIn, ".\\*"); is_dir = 1; }
-  if ((len>0) && (d[-1]=='\\')) { *d++ = '*'; *d = 0; is_dir = 1; }
-  if ((len>1) && (d[-1]=='.') && (d[-2]=='\\')) { d[-1] = '*'; is_dir = 1; }
-  if (!is_dir) { /* this file may still be a directory that we need to list */
-    DWORD attr = GetFileAttributes(findIn);
-    if (attr&FILE_ATTRIBUTE_DIRECTORY)
-      strcpy(d, "\\*");
-  }
-  { /* Create a block to limit the scope while we find the initial "wide" filename */
-     /* unsigned short * wbuf = (unsigned short*)malloc(sizeof(short) *(len + 10)); */
-     /* wbuf[fl_utf2unicode(findIn, strlen(findIn), wbuf)] = 0; */
-	unsigned short *wbuf = NULL;
-	unsigned wlen = fl_utf8toUtf16(findIn, strlen(findIn), NULL, 0); /* Pass NULL to query length */
-	wlen++; /* add a little extra for termination etc. */
-	wbuf = (unsigned short*)malloc(sizeof(unsigned short)*wlen);
-	wlen = fl_utf8toUtf16(findIn, strlen(findIn), wbuf, wlen); /* actually convert the filename */
-	wbuf[wlen] = 0; /* NULL terminate the resultant string */
-	h = FindFirstFileW(wbuf, &findw); /* get a handle to the first filename in the search */
-	free(wbuf); /* release the "wide" buffer before the pointer goes out of scope */
-  }
-  if (h==INVALID_HANDLE_VALUE) {
-    free(findIn);
-    ret = GetLastError();
-    if (ret != ERROR_NO_MORE_FILES) {
-      nDir = -1;
-    }
-    *namelist = dir;
-    return nDir;
-  }
-  do {
-	int l = wcslen(findw.cFileName);
-	int dstlen = l * 5 + 1;
-	selectDir=(struct dirent*)malloc(sizeof(struct dirent)+dstlen);
-
-     /* l = fl_unicode2utf(findw.cFileName, l, selectDir->d_name); */
-	l = fl_utf8fromwc(selectDir->d_name, dstlen, findw.cFileName, l);
-
-	selectDir->d_name[l] = 0;
-	if (findw.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
-		/* Append a trailing slash to directory names... */
-		strcat(selectDir->d_name, "/");
-	}
-	if (!select || (*select)(selectDir)) {
-		if (nDir==NDir) {
-	struct dirent **tempDir = (struct dirent **)calloc(sizeof(struct dirent*), (size_t)(NDir+33));
-	if (NDir) memcpy(tempDir, dir, sizeof(struct dirent*)*NDir);
-	if (dir) free(dir);
-	dir = tempDir;
-	NDir += 32;
-		}
-		dir[nDir] = selectDir;
-		nDir++;
-		dir[nDir] = 0;
-	} else {
-		free(selectDir);
-	}
-   } while (FindNextFileW(h, &findw));
-  ret = GetLastError();
-  if (ret != ERROR_NO_MORE_FILES) {
-    /* don't return an error code, because the dir list may still be valid
-       up to this point */
-  }
-  FindClose(h);
-
-  free (findIn);
-
-  if (compar) qsort(dir, (size_t)nDir, sizeof(*dir),
-		    (int(*)(const void*, const void*))compar);
-
-  *namelist = dir;
-  return nDir;
-}
-
-#endif
-
-/*
- * End of "$Id: scandir_win32.c 8347 2011-02-01 01:06:27Z greg.ercolano $".
- */
diff --git a/common/fltk/src/screen_xywh.cxx b/common/fltk/src/screen_xywh.cxx
deleted file mode 100644
index 9873634..0000000
--- a/common/fltk/src/screen_xywh.cxx
+++ /dev/null
@@ -1,355 +0,0 @@
-//
-// "$Id: screen_xywh.cxx 8783 2011-06-06 09:37:21Z AlbrechtS $"
-//
-// Screen/monitor bounding box API for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <config.h>
-
-#define MAX_SCREENS 16
-
-// Number of screens returned by multi monitor aware API; -1 before init
-static int num_screens = -1;
-
-#ifdef WIN32
-#  if !defined(HMONITOR_DECLARED) && (_WIN32_WINNT < 0x0500)
-#    define COMPILE_MULTIMON_STUBS
-#    include <multimon.h>
-#  endif // !HMONITOR_DECLARED && _WIN32_WINNT < 0x0500
-
-// We go the much more difficult route of individually picking some multi-screen
-// functions from the USER32.DLL . If these functions are not available, we
-// will gracefully fall back to single monitor support.
-//
-// If we were to insist on the existence of "EnumDisplayMonitors" and 
-// "GetMonitorInfoA", it would be impossible to use FLTK on Windows 2000
-// before SP2 or earlier.
-
-// BOOL EnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM)
-typedef BOOL (WINAPI* fl_edm_func)(HDC, LPCRECT, MONITORENUMPROC, LPARAM);
-// BOOL GetMonitorInfo(HMONITOR, LPMONITORINFO)
-typedef BOOL (WINAPI* fl_gmi_func)(HMONITOR, LPMONITORINFO);
-
-static fl_gmi_func fl_gmi = NULL; // used to get a proc pointer for GetMonitorInfoA
-
-static RECT screens[16];
-static float dpi[16][2];
-
-static BOOL CALLBACK screen_cb(HMONITOR mon, HDC, LPRECT r, LPARAM) {
-  if (num_screens >= 16) return TRUE;
-
-  MONITORINFOEX mi;
-  mi.cbSize = sizeof(mi);
-
-//  GetMonitorInfo(mon, &mi);
-//  (but we use our self-aquired function pointer instead)
-  if (fl_gmi(mon, &mi)) {
-    screens[num_screens] = mi.rcMonitor;
-    
-    // find the pixel size
-    if (mi.cbSize == sizeof(mi)) {
-      HDC screen = CreateDC(mi.szDevice, NULL, NULL, NULL);
-      if (screen) {
-        dpi[num_screens][0] = (float)GetDeviceCaps(screen, LOGPIXELSX);
-        dpi[num_screens][1] = (float)GetDeviceCaps(screen, LOGPIXELSY);
-      }
-      ReleaseDC(0L, screen);
-    }
-    
-    num_screens ++;
-  }
-  return TRUE;
-}
-
-static void screen_init() {
-  num_screens = 0;
-  // Since not all versions of Windows include multiple monitor support,
-  // we do a run-time check for the required functions...
-  HMODULE hMod = GetModuleHandle("USER32.DLL");
-
-  if (hMod) {
-    // check that EnumDisplayMonitors is available
-    fl_edm_func fl_edm = (fl_edm_func)GetProcAddress(hMod, "EnumDisplayMonitors");
-
-    if (fl_edm) {
-      // We do have EnumDisplayMonitors, so lets find out how many monitors...
-      //num_screens = GetSystemMetrics(SM_CMONITORS);
-
-//      if (num_screens > 1) {
-        // If there is more than 1 monitor, enumerate them...
-        fl_gmi = (fl_gmi_func)GetProcAddress(hMod, "GetMonitorInfoA");
-
-        if (fl_gmi) {
-          // We have GetMonitorInfoA, enumerate all the screens...
-//        EnumDisplayMonitors(0,0,screen_cb,0);
-//        (but we use our self-aquired function pointer instead)
-          fl_edm(0, 0, screen_cb, 0);
-          return;
-        }
-//      }
-    }
-  }
-
-  // If we get here, assume we have 1 monitor...
-  num_screens = 1;
-  screens[0].top      = 0;
-  screens[0].left      = 0;
-  screens[0].right  = GetSystemMetrics(SM_CXSCREEN);
-  screens[0].bottom = GetSystemMetrics(SM_CYSCREEN);
-}
-#elif defined(__APPLE__)
-static XRectangle screens[16];
-static float dpi_h[16];
-static float dpi_v[16];
-
-static void screen_init() {
-  CGDirectDisplayID displays[16];
-  CGDisplayCount count, i;
-  CGRect r;
-  CGGetActiveDisplayList(16, displays, &count);
-  for( i = 0; i < count; i++) {
-    r = CGDisplayBounds(displays[i]);
-    screens[i].x      = int(r.origin.x);
-    screens[i].y      = int(r.origin.y);
-    screens[i].width  = int(r.size.width);
-    screens[i].height = int(r.size.height);
-    CGSize s = CGDisplayScreenSize(displays[i]);
-    dpi_h[i] = screens[i].width / (s.width/25.4);
-    dpi_v[i] = screens[i].height / (s.height/25.4);
-  }
-  num_screens = count;
-}
-#else
-
-#if HAVE_XINERAMA
-#  include <X11/extensions/Xinerama.h>
-#endif
-typedef struct {
-   short x_org;
-   short y_org;
-   short width;
-   short height;
-} FLScreenInfo;
-static FLScreenInfo screens[MAX_SCREENS];
-static float dpi[MAX_SCREENS][2];
-
-static void screen_init() {
-  if (!fl_display) fl_open_display();
-
-  // FIXME: Rewrite using randr instead
-#if HAVE_XINERAMA
-  if (XineramaIsActive(fl_display)) {
-    static XineramaScreenInfo *xsi = XineramaQueryScreens(fl_display, &num_screens);
-    if (num_screens > MAX_SCREENS) num_screens = MAX_SCREENS;
-
-    /* There's no way to use different DPI for different Xinerama
-       screens. */
-    for (int i=0; i<num_screens; i++) {
-      screens[i].x_org = xsi[i].x_org;
-      screens[i].y_org = xsi[i].y_org;
-      screens[i].width = xsi[i].width;
-      screens[i].height = xsi[i].height;
-
-      int mm = DisplayWidthMM(fl_display, fl_screen);
-      dpi[i][0] = mm ? screens[i].width*25.4f/mm : 0.0f;
-      mm = DisplayHeightMM(fl_display, fl_screen);
-      dpi[i][1] = mm ? screens[i].height*25.4f/mm : 0.0f;
-    }
-  } else 
-#endif
-  { // ! XineramaIsActive()
-    num_screens = ScreenCount(fl_display);
-    if (num_screens > MAX_SCREENS) num_screens = MAX_SCREENS;
-    
-    for (int i=0; i<num_screens; i++) {
-      screens[i].x_org = 0;
-      screens[i].y_org = 0;
-      screens[i].width = DisplayWidth(fl_display, i);
-      screens[i].height = DisplayHeight(fl_display, i);
-
-      int mm = DisplayWidthMM(fl_display, i);
-      dpi[i][0] = mm ? DisplayWidth(fl_display, i)*25.4f/mm : 0.0f;
-      mm = DisplayHeightMM(fl_display, i);
-      dpi[i][1] = mm ? DisplayHeight(fl_display, i)*25.4f/mm : 0.0f;
-    }
-  }
-}
-
-#endif // WIN32
-
-
-/**
-  Gets the number of available screens.
-*/
-int Fl::screen_count() {
-  if (num_screens < 0) screen_init();
-
-  return num_screens ? num_screens : 1;
-}
-
-/**
-  Gets the bounding box of a screen 
-  that contains the specified screen position \p mx, \p my
-  \param[out]  X,Y,W,H the corresponding screen bounding box
-  \param[in] mx, my the absolute screen position
-*/
-void Fl::screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my) {
-  int screen = 0;
-  int i;
-
-  if (num_screens < 0) screen_init();
-
-  for (i = 0; i < num_screens; i ++) {
-    int sx, sy, sw, sh;
-    Fl::screen_xywh(sx, sy, sw, sh, i);
-    if ((mx >= sx) && (mx < (sx+sw)) && (my >= sy) && (my < (sy+sh))) {
-      screen = i;
-      break;
-    }
-  }
-
-  screen_xywh(X, Y, W, H, screen);
-}
-
-/**
-  Gets the screen bounding rect for the given screen. 
-  \param[out]  X,Y,W,H the corresponding screen bounding box
-  \param[in] n the screen number (0 to Fl::screen_count() - 1)
-  \see void screen_xywh(int &x, int &y, int &w, int &h, int mx, int my) 
-*/
-void Fl::screen_xywh(int &X, int &Y, int &W, int &H, int n) {
-  if (num_screens < 0) screen_init();
-
-  if ((n < 0) || (n >= num_screens))
-    n = 0;
-
-#ifdef WIN32
-  if (num_screens > 0) {
-    X = screens[n].left;
-    Y = screens[n].top;
-    W = screens[n].right - screens[n].left;
-    H = screens[n].bottom - screens[n].top;
-  } else {
-    /* Fallback if something is broken... */
-    X = 0;
-    Y = 0;
-    W = GetSystemMetrics(SM_CXSCREEN);
-    H = GetSystemMetrics(SM_CYSCREEN);
-  }
-#elif defined(__APPLE__)
-  if (num_screens > 0) {
-    X = screens[n].x;
-    Y = screens[n].y;
-    W = screens[n].width;
-    H = screens[n].height;
-  } else {
-    /* Fallback if something is broken... */
-    X = Fl::x();
-    Y = Fl::y();
-    W = Fl::w();
-    H = Fl::h();
-  }
-#else
-  if (num_screens > 0) {
-    X = screens[n].x_org;
-    Y = screens[n].y_org;
-    W = screens[n].width;
-    H = screens[n].height;
-  }
-#endif // WIN32
-}
-
-static inline float fl_intersection(int x1, int y1, int w1, int h1,
-                        int x2, int y2, int w2, int h2) {
-  if(x1+w1 < x2 || x2+w2 < x1 || y1+h1 < y2 || y2+h2 < y1)
-    return 0.;
-  int int_left = x1 > x2 ? x1 : x2;
-  int int_right = x1+w1 > x2+w2 ? x2+w2 : x1+w1;
-  int int_top = y1 > y2 ? y1 : y2;
-  int int_bottom = y1+h1 > y2+h2 ? y2+h2 : y1+h1;
-  return (float)(int_right - int_left) * (int_bottom - int_top);
-}
-
-/**
-  Gets the screen bounding rect for the screen
-  which intersects the most with the rectangle
-  defined by \p mx, \p my, \p mw, \p mh.
-  \param[out]  X,Y,W,H the corresponding screen bounding box
-  \param[in] mx, my, mw, mh the rectangle to search for intersection with
-  \see void screen_xywh(int &X, int &Y, int &W, int &H, int n)
-  */
-void Fl::screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh) {
-  int best_screen = 0;
-  float best_intersection = 0.;
-  for(int i = 0; i < Fl::screen_count(); i++) {
-    int sx, sy, sw, sh;
-    Fl::screen_xywh(sx, sy, sw, sh, i);
-    float sintersection = fl_intersection(mx, my, mw, mh, sx, sy, sw, sh);
-    if(sintersection > best_intersection) {
-      best_screen = i;
-      best_intersection = sintersection;
-    }
-  }
-  screen_xywh(X, Y, W, H, best_screen);
-}
-  
-
-
-/**
- Gets the screen resolution in dots-per-inch for the given screen. 
- \param[out]  h, v  horizontal and vertical resolution
- \param[in]   n     the screen number (0 to Fl::screen_count() - 1)
- \see void screen_xywh(int &x, int &y, int &w, int &h, int mx, int my) 
- */
-void Fl::screen_dpi(float &h, float &v, int n)
-{
-  if (num_screens < 0) screen_init();
-  h = v = 0.0f;
-  
-#ifdef WIN32
-  if (n >= 0 && n < num_screens) {
-    h = float(dpi[n][0]);
-    v = float(dpi[n][1]);
-  }
-#elif defined(__APPLE__)
-  if (n >= 0 && n < num_screens) {
-    h = dpi_h[n];
-    v = dpi_v[n];
-  }
-#else
-  if (n >= 0 && n < num_screens) {
-    h = dpi[n][0];
-    v = dpi[n][1];
-  }
-#endif // WIN32
-}
-
-
-
-//
-// End of "$Id: screen_xywh.cxx 8783 2011-06-06 09:37:21Z AlbrechtS $".
-//
diff --git a/common/fltk/src/slowarrow.h b/common/fltk/src/slowarrow.h
deleted file mode 100644
index 46a572c..0000000
--- a/common/fltk/src/slowarrow.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#define slowarrow_width 16
-#define slowarrow_height 16
-static unsigned char slowarrow_bits[] = {
-   0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x60, 0x00, 0xf0, 0x0f, 0x60, 0x00,
-   0x60, 0x00, 0x40, 0x02, 0x40, 0x02, 0x00, 0x06, 0x00, 0x06, 0xf0, 0x0f,
-   0x00, 0x06, 0x00, 0x06, 0x00, 0x02, 0x00, 0x02};
diff --git a/common/fltk/src/tile.xpm b/common/fltk/src/tile.xpm
deleted file mode 100644
index 872e0f7..0000000
--- a/common/fltk/src/tile.xpm
+++ /dev/null
@@ -1,91 +0,0 @@
-/* XPM */
-static char	tile_cmap[3][32] = {
-"O c #FFFFFF",
-"o c #EFEFEF",
-". c #E8E8E8"
-};
-static const char * tile_xpm[] = {
-"64 64 3 1",
-tile_cmap[0],
-tile_cmap[1],
-tile_cmap[2],
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"};
diff --git a/common/fltk/src/up.xbm b/common/fltk/src/up.xbm
deleted file mode 100644
index 1a4f4b7..0000000
--- a/common/fltk/src/up.xbm
+++ /dev/null
@@ -1,6 +0,0 @@
-#define up_width 16
-#define up_height 16
-static unsigned char up_bits[] = {
-   0x00, 0x00, 0x78, 0x00, 0x84, 0x00, 0x02, 0x01, 0x31, 0xfe, 0x79, 0x80,
-   0xfd, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80,
-   0x01, 0x80, 0x01, 0x80, 0xff, 0xff, 0x00, 0x00};
diff --git a/common/fltk/src/vsnprintf.c b/common/fltk/src/vsnprintf.c
deleted file mode 100644
index d479f8a..0000000
--- a/common/fltk/src/vsnprintf.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * "$Id: vsnprintf.c 7903 2010-11-28 21:06:39Z matt $"
- *
- * snprintf() and vsnprintf() functions for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#include <stdio.h>
-#include "flstring.h"
-
-#ifdef HAVE_SYS_STDTYPES_H
-#  include <sys/stdtypes.h>
-#endif /* HAVE_SYS_STDTYPES_H */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int fl_vsnprintf(char* buffer, size_t bufsize, const char* format, va_list ap) {
-  char		*bufptr,		/* Pointer to position in buffer */
-		*bufend,		/* Pointer to end of buffer */
-		sign,			/* Sign of format width */
-		size,			/* Size character (h, l, L) */
-		type;			/* Format type character */
-  int		width,			/* Width of field */
-		prec;			/* Number of characters of precision */
-  char		tformat[100],		/* Temporary format string for sprintf() */
-		*tptr,			/* Pointer into temporary format */
-		temp[1024];		/* Buffer for formatted numbers */
-  char		*s;			/* Pointer to string */
-  int		slen;			/* Length of string */
-  int		bytes;			/* Total number of bytes needed */
-
-
- /*
-  * Loop through the format string, formatting as needed...
-  */
-
-  bufptr = buffer;
-  bufend = buffer + bufsize - 1;
-  bytes  = 0;
-
-  while (*format) {
-    if (*format == '%') {
-      tptr = tformat;
-      *tptr++ = *format++;
-
-      if (*format == '%') {
-        if (bufptr && bufptr < bufend) *bufptr++ = *format;
-        bytes ++;
-        format ++;
-	continue;
-      } else if (strchr(" -+#\'", *format)) {
-        *tptr++ = *format;
-        sign = *format++;
-      } else sign = 0;
-
-      if (*format == '*') {
-        /* Get width from argument... */
-	format ++;
-	width = va_arg(ap, int);
-	snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", width);
-	tptr += strlen(tptr);
-      } else {
-	width = 0;
-	while (isdigit(*format & 255)) {
-	  if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format;
-	  width = width * 10 + *format++ - '0';
-	}
-      }
-
-      if (*format == '.') {
-	if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format;
-        format ++;
-
-        if (*format == '*') {
-          /* Get precision from argument... */
-	  format ++;
-	  prec = va_arg(ap, int);
-	  snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", prec);
-	  tptr += strlen(tptr);
-	} else {
-	  prec = 0;
-	  while (isdigit(*format & 255)) {
-	    if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format;
-	    prec = prec * 10 + *format++ - '0';
-	  }
-	}
-      } else prec = -1;
-
-      size = '\0';
-
-      if (*format == 'l' && format[1] == 'l') {
-        size = 'L';
-	if (tptr < (tformat + sizeof(tformat) - 2)) {
-	  *tptr++ = 'l';
-	  *tptr++ = 'l';
-	}
-	format += 2;
-      } else if (*format == 'h' || *format == 'l' || *format == 'L') {
-	if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format;
-        size = *format++;
-      }
-
-      if (!*format) break;
-
-      if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format;
-      type  = *format++;
-      *tptr = '\0';
-
-      switch (type) {
-	case 'E' : /* Floating point formats */
-	case 'G' :
-	case 'e' :
-	case 'f' :
-	case 'g' :
-	  if ((width + 2) > sizeof(temp)) break;
-
-	  sprintf(temp, tformat, va_arg(ap, double));
-
-          bytes += strlen(temp);
-
-          if (bufptr) {
-	    if ((bufptr + strlen(temp)) > bufend) {
-	      strncpy(bufptr, temp, (size_t)(bufend - bufptr));
-	      bufptr = bufend;
-	    } else {
-	      strcpy(bufptr, temp);
-	      bufptr += strlen(temp);
-	    }
-	  }
-	  break;
-
-        case 'B' : /* Integer formats */
-	case 'X' :
-	case 'b' :
-        case 'd' :
-	case 'i' :
-	case 'o' :
-	case 'u' :
-	case 'x' :
-	  if ((width + 2) > sizeof(temp)) break;
-
-#ifdef HAVE_LONG_LONG
-	  if (size == 'L')
-	    sprintf(temp, tformat, va_arg(ap, long long));
-	  else
-#endif /* HAVE_LONG_LONG */
-	  if (size == 'l')
-	    sprintf(temp, tformat, va_arg(ap, long));
-	  else
-	    sprintf(temp, tformat, va_arg(ap, int));
-
-          bytes += strlen(temp);
-
-	  if (bufptr) {
-	    if ((bufptr + strlen(temp)) > bufend) {
-	      strncpy(bufptr, temp, (size_t)(bufend - bufptr));
-	      bufptr = bufend;
-	    } else {
-	      strcpy(bufptr, temp);
-	      bufptr += strlen(temp);
-	    }
-	  }
-	  break;
-	    
-	case 'p' : /* Pointer value */
-	  if ((width + 2) > sizeof(temp)) break;
-
-	  sprintf(temp, tformat, va_arg(ap, void *));
-
-          bytes += strlen(temp);
-
-	  if (bufptr) {
-	    if ((bufptr + strlen(temp)) > bufend) {
-	      strncpy(bufptr, temp, (size_t)(bufend - bufptr));
-	      bufptr = bufend;
-	    } else {
-	      strcpy(bufptr, temp);
-	      bufptr += strlen(temp);
-	    }
-	  }
-	  break;
-
-        case 'c' : /* Character or character array */
-	  bytes += width;
-
-	  if (bufptr) {
-	    if (width <= 1) *bufptr++ = va_arg(ap, int);
-	    else {
-	      if ((bufptr + width) > bufend) width = bufend - bufptr;
-
-	      memcpy(bufptr, va_arg(ap, char *), (size_t)width);
-	      bufptr += width;
-	    }
-	  }
-	  break;
-
-	case 's' : /* String */
-	  if ((s = va_arg(ap, char *)) == NULL) s = "(null)";
-
-	  slen = strlen(s);
-	  if (slen > width && prec != width) width = slen;
-
-          bytes += width;
-
-	  if (bufptr) {
-	    if ((bufptr + width) > bufend) width = bufend - bufptr;
-
-            if (slen > width) slen = width;
-
-	    if (sign == '-') {
-	      strncpy(bufptr, s, (size_t)slen);
-	      memset(bufptr + slen, ' ', (size_t)(width - slen));
-	    } else {
-	      memset(bufptr, ' ', (size_t)(width - slen));
-	      strncpy(bufptr + width - slen, s, (size_t)slen);
-	    }
-
-	    bufptr += width;
-	  }
-	  break;
-
-	case 'n' : /* Output number of chars so far */
-	  *(va_arg(ap, int *)) = bytes;
-	  break;
-      }
-    } else {
-      bytes ++;
-
-      if (bufptr && bufptr < bufend) *bufptr++ = *format;
-      format ++;
-    }
-  }
-
- /*
-  * Nul-terminate the string and return the number of characters needed.
-  */
-
-  if (bufptr) *bufptr = '\0';
-
-  return (bytes);
-}
-
-int fl_snprintf(char* str, size_t size, const char* fmt, ...) {
-  int ret;
-  va_list ap;
-  va_start(ap, fmt);
-  ret = vsnprintf(str, size, fmt, ap);
-  va_end(ap);
-  return ret;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-/*
- * End of "$Id: vsnprintf.c 7903 2010-11-28 21:06:39Z matt $".
- */
-
diff --git a/common/fltk/src/xutf8/COPYING b/common/fltk/src/xutf8/COPYING
deleted file mode 100644
index 04d4a38..0000000
--- a/common/fltk/src/xutf8/COPYING
+++ /dev/null
@@ -1,50 +0,0 @@
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
-
-
-		lcUniConv directory: 
-
-Copyright (c) 1999-2000  Free Software Foundation, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of the Free Software Foundation
-shall not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization from the
-Free Software Foundation.
-
-
diff --git a/common/fltk/src/xutf8/README b/common/fltk/src/xutf8/README
deleted file mode 100644
index cc9c51d..0000000
--- a/common/fltk/src/xutf8/README
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-supported encodings :
----------------------
-iso10646-1
-iso8859-1 
-iso8859-2 
-iso8859-3 
-iso8859-4 
-iso8859-5 
-iso8859-6 
-iso8859-7 
-iso8859-8  
-iso8859-9 
-iso8859-10
-iso8859-11
-iso8859-13 
-iso8859-14 
-iso8859-15 
-koi8-r 
-koi8-u 
-big5-0 
-gbk
-gb2312.1980-0 
-jisx0201.1976-0 
-jisx0208.1983-0 
-jisx0212.1990-0 
-ksc5601.1987-0
-symbol 
-dingbats
-
-
-TIPS:
-=====
-
-You must add "-lXutf8" to the library list in your Makefile. 
-
-When using "GNU autoconf" add these lines to your "configure.in" :
-
-dnl Test to see if libXutf8 is on this machine:
-XUTFLIB=
-AC_CHECK_LIB(Xutf8, XUtf8IsNonSpacing, \
-        AC_DEFINE(HAVE_XUTF8) XUTFLIB=" -lXutf8", ,\
-        -lX11 $X_EXTRA_LIBS)
-AC_SUBST(XUTFLIB)
-
-
-ORIGINAL FILES :
-================
-
-The directory lcUniConv is copied from the xfree project cvs system.
-(
-export CVS_RSH=ssh
-export CVSROOT=anoncvs@anoncvs.xfree86.org:/cvs
-cvs checkout xc/lib/X11/lcUniConv
-password: anoncvs
-)
-
-The file imKStoUCS.c is copied from the xfree project cvs system.
-(
-export CVS_RSH=ssh
-export CVSROOT=anoncvs@anoncvs.xfree86.org:/cvs
-cvs checkout xc/lib/X11
-password: anoncvs
-)
-
diff --git a/common/fltk/src/xutf8/Ximint.h b/common/fltk/src/xutf8/Ximint.h
deleted file mode 100644
index e69de29..0000000
--- a/common/fltk/src/xutf8/Ximint.h
+++ /dev/null
diff --git a/common/fltk/src/xutf8/Xlibint.h b/common/fltk/src/xutf8/Xlibint.h
deleted file mode 100644
index e69de29..0000000
--- a/common/fltk/src/xutf8/Xlibint.h
+++ /dev/null
diff --git a/common/fltk/src/xutf8/case.c b/common/fltk/src/xutf8/case.c
deleted file mode 100644
index 6e9ac67..0000000
--- a/common/fltk/src/xutf8/case.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2010 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * This file is required on all platforms for utf8 support
- */
-
-#include "headers/case.h"
-#include <stdlib.h>
-
-int 
-XUtf8Tolower(int ucs) {
-  int ret;
-  if (ucs <= 0x02B6) {
-    if (ucs >= 0x0041) {
-      ret = ucs_table_0041[ucs - 0x0041];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x0556) {
-    if (ucs >= 0x0386) {
-      ret = ucs_table_0386[ucs - 0x0386];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x10C5) {
-    if (ucs >= 0x10A0) {
-      ret = ucs_table_10A0[ucs - 0x10A0];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x1FFC) {
-    if (ucs >= 0x1E00) {
-      ret = ucs_table_1E00[ucs - 0x1E00];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x2133) {
-    if (ucs >= 0x2102) {
-      ret = ucs_table_2102[ucs - 0x2102];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x24CF) {
-    if (ucs >= 0x24B6) {
-      ret = ucs_table_24B6[ucs - 0x24B6];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x33CE) {
-    if (ucs >= 0x33CE) {
-      ret = ucs_table_33CE[ucs - 0x33CE];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0xFF3A) {
-    if (ucs >= 0xFF21) {
-      ret = ucs_table_FF21[ucs - 0xFF21];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  return ucs;
-}
-
-int 
-XUtf8Toupper(int ucs) {
-  int i;
-  static unsigned short *table = NULL;
-
-  if (!table) {
-    table = (unsigned short*) malloc(sizeof(unsigned short) * 0x10000);
-    for (i = 0; i < 0x10000; i++) {
-      table[i] = (unsigned short) i;
-    }
-    for (i = 0; i < 0x10000; i++) {
-      int l;
-      l = XUtf8Tolower(i);
-      if (l != i) table[l] = (unsigned short) i;
-    }
-  }
-  if (ucs >= 0x10000 || ucs < 0) return ucs;
-  return table[ucs];
-}
-
-/*
-* End of "$Id$".
-*/
diff --git a/common/fltk/src/xutf8/headers/case.h b/common/fltk/src/xutf8/headers/case.h
deleted file mode 100644
index 30ea901..0000000
--- a/common/fltk/src/xutf8/headers/case.h
+++ /dev/null
@@ -1,1770 +0,0 @@
-/* spacing */
-
-static const unsigned short ucs_table_0041[] = {
-/* U+0041 */ 0x0061,
-/* U+0042 */ 0x0062,
-/* U+0043 */ 0x0063,
-/* U+0044 */ 0x0064,
-/* U+0045 */ 0x0065,
-/* U+0046 */ 0x0066,
-/* U+0047 */ 0x0067,
-/* U+0048 */ 0x0068,
-/* U+0049 */ 0x0069,
-/* U+004A */ 0x006A,
-/* U+004B */ 0x006B,
-/* U+004C */ 0x006C,
-/* U+004D */ 0x006D,
-/* U+004E */ 0x006E,
-/* U+004F */ 0x006F,
-/* U+0050 */ 0x0070,
-/* U+0051 */ 0x0071,
-/* U+0052 */ 0x0072,
-/* U+0053 */ 0x0073,
-/* U+0054 */ 0x0074,
-/* U+0055 */ 0x0075,
-/* U+0056 */ 0x0076,
-/* U+0057 */ 0x0077,
-/* U+0058 */ 0x0078,
-/* U+0059 */ 0x0079,
-/* U+005A */ 0x007A,
-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,
-0x00,
-0x00,
-/* U+00C0 */ 0x00E0,
-/* U+00C1 */ 0x00E1,
-/* U+00C2 */ 0x00E2,
-/* U+00C3 */ 0x00E3,
-/* U+00C4 */ 0x00E4,
-/* U+00C5 */ 0x00E5,
-/* U+00C6 */ 0x00E6,
-/* U+00C7 */ 0x00E7,
-/* U+00C8 */ 0x00E8,
-/* U+00C9 */ 0x00E9,
-/* U+00CA */ 0x00EA,
-/* U+00CB */ 0x00EB,
-/* U+00CC */ 0x00EC,
-/* U+00CD */ 0x00ED,
-/* U+00CE */ 0x00EE,
-/* U+00CF */ 0x00EF,
-/* U+00D0 */ 0x00F0,
-/* U+00D1 */ 0x00F1,
-/* U+00D2 */ 0x00F2,
-/* U+00D3 */ 0x00F3,
-/* U+00D4 */ 0x00F4,
-/* U+00D5 */ 0x00F5,
-/* U+00D6 */ 0x00F6,
-0x00,
-/* U+00D8 */ 0x00F8,
-/* U+00D9 */ 0x00F9,
-/* U+00DA */ 0x00FA,
-/* U+00DB */ 0x00FB,
-/* U+00DC */ 0x00FC,
-/* U+00DD */ 0x00FD,
-/* U+00DE */ 0x00FE,
-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,
-/* U+0100 */ 0x0101,
-0x00,
-/* U+0102 */ 0x0103,
-0x00,
-/* U+0104 */ 0x0105,
-0x00,
-/* U+0106 */ 0x0107,
-0x00,
-/* U+0108 */ 0x0109,
-0x00,
-/* U+010A */ 0x010B,
-0x00,
-/* U+010C */ 0x010D,
-0x00,
-/* U+010E */ 0x010F,
-0x00,
-/* U+0110 */ 0x0111,
-0x00,
-/* U+0112 */ 0x0113,
-0x00,
-/* U+0114 */ 0x0115,
-0x00,
-/* U+0116 */ 0x0117,
-0x00,
-/* U+0118 */ 0x0119,
-0x00,
-/* U+011A */ 0x011B,
-0x00,
-/* U+011C */ 0x011D,
-0x00,
-/* U+011E */ 0x011F,
-0x00,
-/* U+0120 */ 0x0121,
-0x00,
-/* U+0122 */ 0x0123,
-0x00,
-/* U+0124 */ 0x0125,
-0x00,
-/* U+0126 */ 0x0127,
-0x00,
-/* U+0128 */ 0x0129,
-0x00,
-/* U+012A */ 0x012B,
-0x00,
-/* U+012C */ 0x012D,
-0x00,
-/* U+012E */ 0x012F,
-0x00,
-/* U+0130 */ 0x0,
-0x00,
-/* U+0132 */ 0x0133,
-0x00,
-/* U+0134 */ 0x0135,
-0x00,
-/* U+0136 */ 0x0137,
-0x00,
-0x00,
-/* U+0139 */ 0x013A,
-0x00,
-/* U+013B */ 0x013C,
-0x00,
-/* U+013D */ 0x013E,
-0x00,
-/* U+013F */ 0x0140,
-0x00,
-/* U+0141 */ 0x0142,
-0x00,
-/* U+0143 */ 0x0144,
-0x00,
-/* U+0145 */ 0x0146,
-0x00,
-/* U+0147 */ 0x0148,
-0x00,
-0x00,
-/* U+014A */ 0x014B,
-0x00,
-/* U+014C */ 0x014D,
-0x00,
-/* U+014E */ 0x014F,
-0x00,
-/* U+0150 */ 0x0151,
-0x00,
-/* U+0152 */ 0x0153,
-0x00,
-/* U+0154 */ 0x0155,
-0x00,
-/* U+0156 */ 0x0157,
-0x00,
-/* U+0158 */ 0x0159,
-0x00,
-/* U+015A */ 0x015B,
-0x00,
-/* U+015C */ 0x015D,
-0x00,
-/* U+015E */ 0x015F,
-0x00,
-/* U+0160 */ 0x0161,
-0x00,
-/* U+0162 */ 0x0163,
-0x00,
-/* U+0164 */ 0x0165,
-0x00,
-/* U+0166 */ 0x0167,
-0x00,
-/* U+0168 */ 0x0169,
-0x00,
-/* U+016A */ 0x016B,
-0x00,
-/* U+016C */ 0x016D,
-0x00,
-/* U+016E */ 0x016F,
-0x00,
-/* U+0170 */ 0x0171,
-0x00,
-/* U+0172 */ 0x0173,
-0x00,
-/* U+0174 */ 0x0175,
-0x00,
-/* U+0176 */ 0x0177,
-0x00,
-/* U+0178 */ 0x00FF,
-/* U+0179 */ 0x017A,
-0x00,
-/* U+017B */ 0x017C,
-0x00,
-/* U+017D */ 0x017E,
-0x00,
-0x00,
-0x00,
-/* U+0181 */ 0x0253,
-/* U+0182 */ 0x0183,
-0x00,
-/* U+0184 */ 0x0185,
-0x00,
-/* U+0186 */ 0x0254,
-/* U+0187 */ 0x0188,
-0x00,
-/* U+0189 */ 0x0,
-/* U+018A */ 0x0257,
-/* U+018B */ 0x018C,
-0x00,
-0x00,
-/* U+018E */ 0x0258,
-/* U+018F */ 0x0259,
-/* U+0190 */ 0x025B,
-/* U+0191 */ 0x0192,
-0x00,
-/* U+0193 */ 0x0260,
-/* U+0194 */ 0x0263,
-0x00,
-/* U+0196 */ 0x0269,
-/* U+0197 */ 0x0268,
-/* U+0198 */ 0x0199,
-0x00,
-0x00,
-0x00,
-/* U+019C */ 0x026F,
-/* U+019D */ 0x0272,
-0x00,
-/* U+019F */ 0x0,
-/* U+01A0 */ 0x01A1,
-0x00,
-/* U+01A2 */ 0x01A3,
-0x00,
-/* U+01A4 */ 0x01A5,
-0x00,
-0x00,
-/* U+01A7 */ 0x01A8,
-0x00,
-/* U+01A9 */ 0x0283,
-0x00,
-0x00,
-/* U+01AC */ 0x01AD,
-0x00,
-/* U+01AE */ 0x0288,
-/* U+01AF */ 0x01B0,
-0x00,
-/* U+01B1 */ 0x028A,
-/* U+01B2 */ 0x028B,
-/* U+01B3 */ 0x01B4,
-0x00,
-/* U+01B5 */ 0x01B6,
-0x00,
-/* U+01B7 */ 0x0292,
-/* U+01B8 */ 0x01B9,
-0x00,
-0x00,
-0x00,
-/* U+01BC */ 0x01BD,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+01C4 */ 0x01C6,
-/* U+01C5 */ 0x0,
-0x00,
-/* U+01C7 */ 0x01C9,
-/* U+01C8 */ 0x0,
-0x00,
-/* U+01CA */ 0x01CC,
-/* U+01CB */ 0x0,
-0x00,
-/* U+01CD */ 0x01CE,
-0x00,
-/* U+01CF */ 0x01D0,
-0x00,
-/* U+01D1 */ 0x01D2,
-0x00,
-/* U+01D3 */ 0x01D4,
-0x00,
-/* U+01D5 */ 0x01D6,
-0x00,
-/* U+01D7 */ 0x01D8,
-0x00,
-/* U+01D9 */ 0x01DA,
-0x00,
-/* U+01DB */ 0x01DC,
-0x00,
-0x00,
-/* U+01DE */ 0x01DF,
-0x00,
-/* U+01E0 */ 0x01E1,
-0x00,
-/* U+01E2 */ 0x01E3,
-0x00,
-/* U+01E4 */ 0x01E5,
-0x00,
-/* U+01E6 */ 0x01E7,
-0x00,
-/* U+01E8 */ 0x01E9,
-0x00,
-/* U+01EA */ 0x01EB,
-0x00,
-/* U+01EC */ 0x01ED,
-0x00,
-/* U+01EE */ 0x01EF,
-0x00,
-0x00,
-/* U+01F1 */ 0x01F3,
-/* U+01F2 */ 0x0,
-0x00,
-/* U+01F4 */ 0x01F5,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+01FA */ 0x01FB,
-0x00,
-/* U+01FC */ 0x01FD,
-0x00,
-/* U+01FE */ 0x01FF,
-0x00,
-/* U+0200 */ 0x0201,
-0x00,
-/* U+0202 */ 0x0203,
-0x00,
-/* U+0204 */ 0x0205,
-0x00,
-/* U+0206 */ 0x0207,
-0x00,
-/* U+0208 */ 0x0209,
-0x00,
-/* U+020A */ 0x020B,
-0x00,
-/* U+020C */ 0x020D,
-0x00,
-/* U+020E */ 0x020F,
-0x00,
-/* U+0210 */ 0x0211,
-0x00,
-/* U+0212 */ 0x0213,
-0x00,
-/* U+0214 */ 0x0215,
-0x00,
-/* U+0216 */ 0x0217,
-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,
-/* U+0262 */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+026A */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0274 */ 0x0,
-0x00,
-/* U+0276 */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0280 */ 0x0,
-/* U+0281 */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+028F */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0299 */ 0x0,
-0x00,
-/* U+029B */ 0x0,
-/* U+029C */ 0x0,
-0x00,
-0x00,
-/* U+029F */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+02B6 */ 0x0,
-};
-
-static const unsigned short ucs_table_0386[] = {
-/* U+0386 */ 0x03AC,
-0x00,
-/* U+0388 */ 0x03AD,
-/* U+0389 */ 0x03AE,
-/* U+038A */ 0x03AF,
-0x00,
-/* U+038C */ 0x03CC,
-0x00,
-/* U+038E */ 0x03CD,
-/* U+038F */ 0x03CE,
-0x00,
-/* U+0391 */ 0x03B1,
-/* U+0392 */ 0x03B2,
-/* U+0393 */ 0x03B3,
-/* U+0394 */ 0x03B4,
-/* U+0395 */ 0x03B5,
-/* U+0396 */ 0x03B6,
-/* U+0397 */ 0x03B7,
-/* U+0398 */ 0x03B8,
-/* U+0399 */ 0x03B9,
-/* U+039A */ 0x03BA,
-/* U+039B */ 0x03BB,
-/* U+039C */ 0x03BC,
-/* U+039D */ 0x03BD,
-/* U+039E */ 0x03BE,
-/* U+039F */ 0x03BF,
-/* U+03A0 */ 0x03C0,
-/* U+03A1 */ 0x03C1,
-0x00,
-/* U+03A3 */ 0x03C3,
-/* U+03A4 */ 0x03C4,
-/* U+03A5 */ 0x03C5,
-/* U+03A6 */ 0x03C6,
-/* U+03A7 */ 0x03C7,
-/* U+03A8 */ 0x03C8,
-/* U+03A9 */ 0x03C9,
-/* U+03AA */ 0x03CA,
-/* U+03AB */ 0x03CB,
-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,
-/* U+03D2 */ 0x03D2,
-/* U+03D3 */ 0x03D3,
-/* U+03D4 */ 0x03D4,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+03DA */ 0x03DA,
-0x00,
-/* U+03DC */ 0x03DC,
-0x00,
-/* U+03DE */ 0x03DE,
-0x00,
-/* U+03E0 */ 0x03E0,
-0x00,
-/* U+03E2 */ 0x03E3,
-0x00,
-/* U+03E4 */ 0x03E5,
-0x00,
-/* U+03E6 */ 0x03E7,
-0x00,
-/* U+03E8 */ 0x03E9,
-0x00,
-/* U+03EA */ 0x03EB,
-0x00,
-/* U+03EC */ 0x03ED,
-0x00,
-/* U+03EE */ 0x03EF,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0401 */ 0x0451,
-/* U+0402 */ 0x0452,
-/* U+0403 */ 0x0453,
-/* U+0404 */ 0x0454,
-/* U+0405 */ 0x0455,
-/* U+0406 */ 0x0456,
-/* U+0407 */ 0x0457,
-/* U+0408 */ 0x0458,
-/* U+0409 */ 0x0459,
-/* U+040A */ 0x045A,
-/* U+040B */ 0x045B,
-/* U+040C */ 0x045C,
-0x00,
-/* U+040E */ 0x045E,
-/* U+040F */ 0x045F,
-/* U+0410 */ 0x0430,
-/* U+0411 */ 0x0431,
-/* U+0412 */ 0x0432,
-/* U+0413 */ 0x0433,
-/* U+0414 */ 0x0434,
-/* U+0415 */ 0x0435,
-/* U+0416 */ 0x0436,
-/* U+0417 */ 0x0437,
-/* U+0418 */ 0x0438,
-/* U+0419 */ 0x0439,
-/* U+041A */ 0x043A,
-/* U+041B */ 0x043B,
-/* U+041C */ 0x043C,
-/* U+041D */ 0x043D,
-/* U+041E */ 0x043E,
-/* U+041F */ 0x043F,
-/* U+0420 */ 0x0440,
-/* U+0421 */ 0x0441,
-/* U+0422 */ 0x0442,
-/* U+0423 */ 0x0443,
-/* U+0424 */ 0x0444,
-/* U+0425 */ 0x0445,
-/* U+0426 */ 0x0446,
-/* U+0427 */ 0x0447,
-/* U+0428 */ 0x0448,
-/* U+0429 */ 0x0449,
-/* U+042A */ 0x044A,
-/* U+042B */ 0x044B,
-/* U+042C */ 0x044C,
-/* U+042D */ 0x044D,
-/* U+042E */ 0x044E,
-/* U+042F */ 0x044F,
-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,
-/* U+0460 */ 0x0461,
-0x00,
-/* U+0462 */ 0x0463,
-0x00,
-/* U+0464 */ 0x0465,
-0x00,
-/* U+0466 */ 0x0467,
-0x00,
-/* U+0468 */ 0x0469,
-0x00,
-/* U+046A */ 0x046B,
-0x00,
-/* U+046C */ 0x046D,
-0x00,
-/* U+046E */ 0x046F,
-0x00,
-/* U+0470 */ 0x0471,
-0x00,
-/* U+0472 */ 0x0473,
-0x00,
-/* U+0474 */ 0x0475,
-0x00,
-/* U+0476 */ 0x0477,
-0x00,
-/* U+0478 */ 0x0479,
-0x00,
-/* U+047A */ 0x047B,
-0x00,
-/* U+047C */ 0x047D,
-0x00,
-/* U+047E */ 0x047F,
-0x00,
-/* U+0480 */ 0x0481,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0490 */ 0x0491,
-0x00,
-/* U+0492 */ 0x0493,
-0x00,
-/* U+0494 */ 0x0495,
-0x00,
-/* U+0496 */ 0x0497,
-0x00,
-/* U+0498 */ 0x0499,
-0x00,
-/* U+049A */ 0x049B,
-0x00,
-/* U+049C */ 0x049D,
-0x00,
-/* U+049E */ 0x049F,
-0x00,
-/* U+04A0 */ 0x04A1,
-0x00,
-/* U+04A2 */ 0x04A3,
-0x00,
-/* U+04A4 */ 0x04A5,
-0x00,
-/* U+04A6 */ 0x04A7,
-0x00,
-/* U+04A8 */ 0x04A9,
-0x00,
-/* U+04AA */ 0x04AB,
-0x00,
-/* U+04AC */ 0x04AD,
-0x00,
-/* U+04AE */ 0x04AF,
-0x00,
-/* U+04B0 */ 0x04B1,
-0x00,
-/* U+04B2 */ 0x04B3,
-0x00,
-/* U+04B4 */ 0x04B5,
-0x00,
-/* U+04B6 */ 0x04B7,
-0x00,
-/* U+04B8 */ 0x04B9,
-0x00,
-/* U+04BA */ 0x04BB,
-0x00,
-/* U+04BC */ 0x04BD,
-0x00,
-/* U+04BE */ 0x04BF,
-0x00,
-0x00,
-/* U+04C1 */ 0x04C2,
-0x00,
-/* U+04C3 */ 0x04C4,
-0x00,
-0x00,
-0x00,
-/* U+04C7 */ 0x04C8,
-0x00,
-0x00,
-0x00,
-/* U+04CB */ 0x04CC,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+04D0 */ 0x04D1,
-0x00,
-/* U+04D2 */ 0x04D3,
-0x00,
-/* U+04D4 */ 0x04D5,
-0x00,
-/* U+04D6 */ 0x04D7,
-0x00,
-/* U+04D8 */ 0x04D9,
-0x00,
-/* U+04DA */ 0x04DB,
-0x00,
-/* U+04DC */ 0x04DD,
-0x00,
-/* U+04DE */ 0x04DF,
-0x00,
-/* U+04E0 */ 0x04E1,
-0x00,
-/* U+04E2 */ 0x04E3,
-0x00,
-/* U+04E4 */ 0x04E5,
-0x00,
-/* U+04E6 */ 0x04E7,
-0x00,
-/* U+04E8 */ 0x04E9,
-0x00,
-/* U+04EA */ 0x04EB,
-0x00,
-0x00,
-0x00,
-/* U+04EE */ 0x04EF,
-0x00,
-/* U+04F0 */ 0x04F1,
-0x00,
-/* U+04F2 */ 0x04F3,
-0x00,
-/* U+04F4 */ 0x04F5,
-0x00,
-0x00,
-0x00,
-/* U+04F8 */ 0x04F9,
-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,
-/* U+0531 */ 0x0561,
-/* U+0532 */ 0x0562,
-/* U+0533 */ 0x0563,
-/* U+0534 */ 0x0564,
-/* U+0535 */ 0x0565,
-/* U+0536 */ 0x0566,
-/* U+0537 */ 0x0567,
-/* U+0538 */ 0x0568,
-/* U+0539 */ 0x0569,
-/* U+053A */ 0x056A,
-/* U+053B */ 0x056B,
-/* U+053C */ 0x056C,
-/* U+053D */ 0x056D,
-/* U+053E */ 0x056E,
-/* U+053F */ 0x056F,
-/* U+0540 */ 0x0570,
-/* U+0541 */ 0x0571,
-/* U+0542 */ 0x0572,
-/* U+0543 */ 0x0573,
-/* U+0544 */ 0x0574,
-/* U+0545 */ 0x0575,
-/* U+0546 */ 0x0576,
-/* U+0547 */ 0x0577,
-/* U+0548 */ 0x0578,
-/* U+0549 */ 0x0579,
-/* U+054A */ 0x057A,
-/* U+054B */ 0x057B,
-/* U+054C */ 0x057C,
-/* U+054D */ 0x057D,
-/* U+054E */ 0x057E,
-/* U+054F */ 0x057F,
-/* U+0550 */ 0x0580,
-/* U+0551 */ 0x0581,
-/* U+0552 */ 0x0582,
-/* U+0553 */ 0x0583,
-/* U+0554 */ 0x0584,
-/* U+0555 */ 0x0585,
-/* U+0556 */ 0x0586,
-};
-
-static const unsigned short ucs_table_10A0[] = {
-/* U+10A0 */ 0x10D0,
-/* U+10A1 */ 0x10D1,
-/* U+10A2 */ 0x10D2,
-/* U+10A3 */ 0x10D3,
-/* U+10A4 */ 0x10D4,
-/* U+10A5 */ 0x10D5,
-/* U+10A6 */ 0x10D6,
-/* U+10A7 */ 0x10D7,
-/* U+10A8 */ 0x10D8,
-/* U+10A9 */ 0x10D9,
-/* U+10AA */ 0x10DA,
-/* U+10AB */ 0x10DB,
-/* U+10AC */ 0x10DC,
-/* U+10AD */ 0x10DD,
-/* U+10AE */ 0x10DE,
-/* U+10AF */ 0x10DF,
-/* U+10B0 */ 0x10E0,
-/* U+10B1 */ 0x10E1,
-/* U+10B2 */ 0x10E2,
-/* U+10B3 */ 0x10E3,
-/* U+10B4 */ 0x10E4,
-/* U+10B5 */ 0x10E5,
-/* U+10B6 */ 0x10E6,
-/* U+10B7 */ 0x10E7,
-/* U+10B8 */ 0x10E8,
-/* U+10B9 */ 0x10E9,
-/* U+10BA */ 0x10EA,
-/* U+10BB */ 0x10EB,
-/* U+10BC */ 0x10EC,
-/* U+10BD */ 0x10ED,
-/* U+10BE */ 0x10EE,
-/* U+10BF */ 0x10EF,
-/* U+10C0 */ 0x10F0,
-/* U+10C1 */ 0x10F1,
-/* U+10C2 */ 0x10F2,
-/* U+10C3 */ 0x10F3,
-/* U+10C4 */ 0x10F4,
-/* U+10C5 */ 0x10F5,
-};
-
-static const unsigned short ucs_table_1E00[] = {
-/* U+1E00 */ 0x1E01,
-0x00,
-/* U+1E02 */ 0x1E03,
-0x00,
-/* U+1E04 */ 0x1E05,
-0x00,
-/* U+1E06 */ 0x1E07,
-0x00,
-/* U+1E08 */ 0x1E09,
-0x00,
-/* U+1E0A */ 0x1E0B,
-0x00,
-/* U+1E0C */ 0x1E0D,
-0x00,
-/* U+1E0E */ 0x1E0F,
-0x00,
-/* U+1E10 */ 0x1E11,
-0x00,
-/* U+1E12 */ 0x1E13,
-0x00,
-/* U+1E14 */ 0x1E15,
-0x00,
-/* U+1E16 */ 0x1E17,
-0x00,
-/* U+1E18 */ 0x1E19,
-0x00,
-/* U+1E1A */ 0x1E1B,
-0x00,
-/* U+1E1C */ 0x1E1D,
-0x00,
-/* U+1E1E */ 0x1E1F,
-0x00,
-/* U+1E20 */ 0x1E21,
-0x00,
-/* U+1E22 */ 0x1E23,
-0x00,
-/* U+1E24 */ 0x1E25,
-0x00,
-/* U+1E26 */ 0x1E27,
-0x00,
-/* U+1E28 */ 0x1E29,
-0x00,
-/* U+1E2A */ 0x1E2B,
-0x00,
-/* U+1E2C */ 0x1E2D,
-0x00,
-/* U+1E2E */ 0x1E2F,
-0x00,
-/* U+1E30 */ 0x1E31,
-0x00,
-/* U+1E32 */ 0x1E33,
-0x00,
-/* U+1E34 */ 0x1E35,
-0x00,
-/* U+1E36 */ 0x1E37,
-0x00,
-/* U+1E38 */ 0x1E39,
-0x00,
-/* U+1E3A */ 0x1E3B,
-0x00,
-/* U+1E3C */ 0x1E3D,
-0x00,
-/* U+1E3E */ 0x1E3F,
-0x00,
-/* U+1E40 */ 0x1E41,
-0x00,
-/* U+1E42 */ 0x1E43,
-0x00,
-/* U+1E44 */ 0x1E45,
-0x00,
-/* U+1E46 */ 0x1E47,
-0x00,
-/* U+1E48 */ 0x1E49,
-0x00,
-/* U+1E4A */ 0x1E4B,
-0x00,
-/* U+1E4C */ 0x1E4D,
-0x00,
-/* U+1E4E */ 0x1E4F,
-0x00,
-/* U+1E50 */ 0x1E51,
-0x00,
-/* U+1E52 */ 0x1E53,
-0x00,
-/* U+1E54 */ 0x1E55,
-0x00,
-/* U+1E56 */ 0x1E57,
-0x00,
-/* U+1E58 */ 0x1E59,
-0x00,
-/* U+1E5A */ 0x1E5B,
-0x00,
-/* U+1E5C */ 0x1E5D,
-0x00,
-/* U+1E5E */ 0x1E5F,
-0x00,
-/* U+1E60 */ 0x1E61,
-0x00,
-/* U+1E62 */ 0x1E63,
-0x00,
-/* U+1E64 */ 0x1E65,
-0x00,
-/* U+1E66 */ 0x1E67,
-0x00,
-/* U+1E68 */ 0x1E69,
-0x00,
-/* U+1E6A */ 0x1E6B,
-0x00,
-/* U+1E6C */ 0x1E6D,
-0x00,
-/* U+1E6E */ 0x1E6F,
-0x00,
-/* U+1E70 */ 0x1E71,
-0x00,
-/* U+1E72 */ 0x1E73,
-0x00,
-/* U+1E74 */ 0x1E75,
-0x00,
-/* U+1E76 */ 0x1E77,
-0x00,
-/* U+1E78 */ 0x1E79,
-0x00,
-/* U+1E7A */ 0x1E7B,
-0x00,
-/* U+1E7C */ 0x1E7D,
-0x00,
-/* U+1E7E */ 0x1E7F,
-0x00,
-/* U+1E80 */ 0x1E81,
-0x00,
-/* U+1E82 */ 0x1E83,
-0x00,
-/* U+1E84 */ 0x1E85,
-0x00,
-/* U+1E86 */ 0x1E87,
-0x00,
-/* U+1E88 */ 0x1E89,
-0x00,
-/* U+1E8A */ 0x1E8B,
-0x00,
-/* U+1E8C */ 0x1E8D,
-0x00,
-/* U+1E8E */ 0x1E8F,
-0x00,
-/* U+1E90 */ 0x1E91,
-0x00,
-/* U+1E92 */ 0x1E93,
-0x00,
-/* U+1E94 */ 0x1E95,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1EA0 */ 0x1EA1,
-0x00,
-/* U+1EA2 */ 0x1EA3,
-0x00,
-/* U+1EA4 */ 0x1EA5,
-0x00,
-/* U+1EA6 */ 0x1EA7,
-0x00,
-/* U+1EA8 */ 0x1EA9,
-0x00,
-/* U+1EAA */ 0x1EAB,
-0x00,
-/* U+1EAC */ 0x1EAD,
-0x00,
-/* U+1EAE */ 0x1EAF,
-0x00,
-/* U+1EB0 */ 0x1EB1,
-0x00,
-/* U+1EB2 */ 0x1EB3,
-0x00,
-/* U+1EB4 */ 0x1EB5,
-0x00,
-/* U+1EB6 */ 0x1EB7,
-0x00,
-/* U+1EB8 */ 0x1EB9,
-0x00,
-/* U+1EBA */ 0x1EBB,
-0x00,
-/* U+1EBC */ 0x1EBD,
-0x00,
-/* U+1EBE */ 0x1EBF,
-0x00,
-/* U+1EC0 */ 0x1EC1,
-0x00,
-/* U+1EC2 */ 0x1EC3,
-0x00,
-/* U+1EC4 */ 0x1EC5,
-0x00,
-/* U+1EC6 */ 0x1EC7,
-0x00,
-/* U+1EC8 */ 0x1EC9,
-0x00,
-/* U+1ECA */ 0x1ECB,
-0x00,
-/* U+1ECC */ 0x1ECD,
-0x00,
-/* U+1ECE */ 0x1ECF,
-0x00,
-/* U+1ED0 */ 0x1ED1,
-0x00,
-/* U+1ED2 */ 0x1ED3,
-0x00,
-/* U+1ED4 */ 0x1ED5,
-0x00,
-/* U+1ED6 */ 0x1ED7,
-0x00,
-/* U+1ED8 */ 0x1ED9,
-0x00,
-/* U+1EDA */ 0x1EDB,
-0x00,
-/* U+1EDC */ 0x1EDD,
-0x00,
-/* U+1EDE */ 0x1EDF,
-0x00,
-/* U+1EE0 */ 0x1EE1,
-0x00,
-/* U+1EE2 */ 0x1EE3,
-0x00,
-/* U+1EE4 */ 0x1EE5,
-0x00,
-/* U+1EE6 */ 0x1EE7,
-0x00,
-/* U+1EE8 */ 0x1EE9,
-0x00,
-/* U+1EEA */ 0x1EEB,
-0x00,
-/* U+1EEC */ 0x1EED,
-0x00,
-/* U+1EEE */ 0x1EEF,
-0x00,
-/* U+1EF0 */ 0x1EF1,
-0x00,
-/* U+1EF2 */ 0x1EF3,
-0x00,
-/* U+1EF4 */ 0x1EF5,
-0x00,
-/* U+1EF6 */ 0x1EF7,
-0x00,
-/* U+1EF8 */ 0x1EF9,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F08 */ 0x1F00,
-/* U+1F09 */ 0x1F01,
-/* U+1F0A */ 0x1F02,
-/* U+1F0B */ 0x1F03,
-/* U+1F0C */ 0x1F04,
-/* U+1F0D */ 0x1F05,
-/* U+1F0E */ 0x1F06,
-/* U+1F0F */ 0x1F07,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F18 */ 0x1F10,
-/* U+1F19 */ 0x1F11,
-/* U+1F1A */ 0x1F12,
-/* U+1F1B */ 0x1F13,
-/* U+1F1C */ 0x1F14,
-/* U+1F1D */ 0x1F15,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F28 */ 0x1F20,
-/* U+1F29 */ 0x1F21,
-/* U+1F2A */ 0x1F22,
-/* U+1F2B */ 0x1F23,
-/* U+1F2C */ 0x1F24,
-/* U+1F2D */ 0x1F25,
-/* U+1F2E */ 0x1F26,
-/* U+1F2F */ 0x1F27,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F38 */ 0x1F30,
-/* U+1F39 */ 0x1F31,
-/* U+1F3A */ 0x1F32,
-/* U+1F3B */ 0x1F33,
-/* U+1F3C */ 0x1F34,
-/* U+1F3D */ 0x1F35,
-/* U+1F3E */ 0x1F36,
-/* U+1F3F */ 0x1F37,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F48 */ 0x1F40,
-/* U+1F49 */ 0x1F41,
-/* U+1F4A */ 0x1F42,
-/* U+1F4B */ 0x1F43,
-/* U+1F4C */ 0x1F44,
-/* U+1F4D */ 0x1F45,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F59 */ 0x1F51,
-0x00,
-/* U+1F5B */ 0x1F53,
-0x00,
-/* U+1F5D */ 0x1F55,
-0x00,
-/* U+1F5F */ 0x1F57,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F68 */ 0x1F60,
-/* U+1F69 */ 0x1F61,
-/* U+1F6A */ 0x1F62,
-/* U+1F6B */ 0x1F63,
-/* U+1F6C */ 0x1F64,
-/* U+1F6D */ 0x1F65,
-/* U+1F6E */ 0x1F66,
-/* U+1F6F */ 0x1F67,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F88 */ 0x0,
-/* U+1F89 */ 0x0,
-/* U+1F8A */ 0x0,
-/* U+1F8B */ 0x0,
-/* U+1F8C */ 0x0,
-/* U+1F8D */ 0x0,
-/* U+1F8E */ 0x0,
-/* U+1F8F */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F98 */ 0x0,
-/* U+1F99 */ 0x0,
-/* U+1F9A */ 0x0,
-/* U+1F9B */ 0x0,
-/* U+1F9C */ 0x0,
-/* U+1F9D */ 0x0,
-/* U+1F9E */ 0x0,
-/* U+1F9F */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FA8 */ 0x0,
-/* U+1FA9 */ 0x0,
-/* U+1FAA */ 0x0,
-/* U+1FAB */ 0x0,
-/* U+1FAC */ 0x0,
-/* U+1FAD */ 0x0,
-/* U+1FAE */ 0x0,
-/* U+1FAF */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FB8 */ 0x1FB0,
-/* U+1FB9 */ 0x1FB1,
-/* U+1FBA */ 0x1F70,
-/* U+1FBB */ 0x1F71,
-/* U+1FBC */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FC8 */ 0x1F72,
-/* U+1FC9 */ 0x1F73,
-/* U+1FCA */ 0x1F74,
-/* U+1FCB */ 0x1F75,
-/* U+1FCC */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FD8 */ 0x1FD0,
-/* U+1FD9 */ 0x1FD1,
-/* U+1FDA */ 0x1F76,
-/* U+1FDB */ 0x1F77,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FE8 */ 0x1FE0,
-/* U+1FE9 */ 0x1FE1,
-/* U+1FEA */ 0x1F7A,
-/* U+1FEB */ 0x1F7B,
-/* U+1FEC */ 0x1FE5,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FF8 */ 0x1F78,
-/* U+1FF9 */ 0x1F79,
-/* U+1FFA */ 0x1F7C,
-/* U+1FFB */ 0x1F7D,
-/* U+1FFC */ 0x0,
-};
-
-static const unsigned short ucs_table_2102[] = {
-/* U+2102 */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+210B */ 0x0,
-/* U+210C */ 0x0,
-/* U+210D */ 0x0,
-0x00,
-0x00,
-/* U+2110 */ 0x0,
-/* U+2111 */ 0x0,
-/* U+2112 */ 0x2113,
-0x00,
-0x00,
-/* U+2115 */ 0x0,
-0x00,
-0x00,
-/* U+2118 */ 0x0,
-/* U+2119 */ 0x0,
-/* U+211A */ 0x0,
-/* U+211B */ 0x0,
-/* U+211C */ 0x0,
-/* U+211D */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2124 */ 0x0,
-0x00,
-0x00,
-0x00,
-/* U+2128 */ 0x0,
-0x00,
-0x00,
-0x00,
-/* U+212C */ 0x0,
-/* U+212D */ 0x0,
-0x00,
-0x00,
-/* U+2130 */ 0x212F,
-/* U+2131 */ 0x0,
-/* U+2132 */ 0x0,
-/* U+2133 */ 0x0,
-};
-
-static const unsigned short ucs_table_24B6[] = {
-/* U+24B6 */ 0x24D0,
-/* U+24B7 */ 0x24D1,
-/* U+24B8 */ 0x24D2,
-/* U+24B9 */ 0x24D3,
-/* U+24BA */ 0x24D4,
-/* U+24BB */ 0x24D5,
-/* U+24BC */ 0x24D6,
-/* U+24BD */ 0x24D7,
-/* U+24BE */ 0x24D8,
-/* U+24BF */ 0x24D9,
-/* U+24C0 */ 0x24DA,
-/* U+24C1 */ 0x24DB,
-/* U+24C2 */ 0x24DC,
-/* U+24C3 */ 0x24DD,
-/* U+24C4 */ 0x24DE,
-/* U+24C5 */ 0x24DF,
-/* U+24C6 */ 0x24E0,
-/* U+24C7 */ 0x24E1,
-/* U+24C8 */ 0x24E2,
-/* U+24C9 */ 0x24E3,
-/* U+24CA */ 0x24E4,
-/* U+24CB */ 0x24E5,
-/* U+24CC */ 0x24E6,
-/* U+24CD */ 0x24E7,
-/* U+24CE */ 0x24E8,
-/* U+24CF */ 0x24E9,
-};
-
-static const unsigned short ucs_table_33CE[] = {
-/* U+33CE */ 0x0,
-};
-
-static const unsigned short ucs_table_FF21[] = {
-/* U+FF21 */ 0xFF41,
-/* U+FF22 */ 0xFF42,
-/* U+FF23 */ 0xFF43,
-/* U+FF24 */ 0xFF44,
-/* U+FF25 */ 0xFF45,
-/* U+FF26 */ 0xFF46,
-/* U+FF27 */ 0xFF47,
-/* U+FF28 */ 0xFF48,
-/* U+FF29 */ 0xFF49,
-/* U+FF2A */ 0xFF4A,
-/* U+FF2B */ 0xFF4B,
-/* U+FF2C */ 0xFF4C,
-/* U+FF2D */ 0xFF4D,
-/* U+FF2E */ 0xFF4E,
-/* U+FF2F */ 0xFF4F,
-/* U+FF30 */ 0xFF50,
-/* U+FF31 */ 0xFF51,
-/* U+FF32 */ 0xFF52,
-/* U+FF33 */ 0xFF53,
-/* U+FF34 */ 0xFF54,
-/* U+FF35 */ 0xFF55,
-/* U+FF36 */ 0xFF56,
-/* U+FF37 */ 0xFF57,
-/* U+FF38 */ 0xFF58,
-/* U+FF39 */ 0xFF59,
-/* U+FF3A */ 0xFF5A,
-};
diff --git a/common/fltk/src/xutf8/headers/case_tbl.txt b/common/fltk/src/xutf8/headers/case_tbl.txt
deleted file mode 100644
index 2ed45fc..0000000
--- a/common/fltk/src/xutf8/headers/case_tbl.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-ucs_table_0041[]; 	/* end: U+02B6 */
-ucs_table_0386[]; 	/* end: U+0556 */
-ucs_table_10A0[]; 	/* end: U+10C5 */
-ucs_table_1E00[]; 	/* end: U+1FFC */
-ucs_table_2102[]; 	/* end: U+2133 */
-ucs_table_24B6[]; 	/* end: U+24CF */
-ucs_table_33CE[]; 	/* end: U+33CE */
-ucs_table_FF21[]; 	/* end: U+FF3A */
diff --git a/common/fltk/src/xutf8/headers/dingbats_.h b/common/fltk/src/xutf8/headers/dingbats_.h
deleted file mode 100644
index 9f1f225..0000000
--- a/common/fltk/src/xutf8/headers/dingbats_.h
+++ /dev/null
@@ -1,565 +0,0 @@
-/* dingbats */
-
-static const char unicode_to_dingbats_1b_0020[] = {
-/* U+0020 */ 0x20,
-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,
-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,
-/* U+00A0 */ 0x20,
-};
-
-static const char unicode_to_dingbats_1b_2192[] = {
-/* U+2192 */ 0xD5,
-0x00,
-/* U+2194 */ 0xD6,
-/* U+2195 */ 0xD7,
-};
-
-static const char unicode_to_dingbats_1b_2460[] = {
-/* U+2460 */ 0xAC,
-/* U+2461 */ 0xAD,
-/* U+2462 */ 0xAE,
-/* U+2463 */ 0xAF,
-/* U+2464 */ 0xB0,
-/* U+2465 */ 0xB1,
-/* U+2466 */ 0xB2,
-/* U+2467 */ 0xB3,
-/* U+2468 */ 0xB4,
-/* U+2469 */ 0xB5,
-};
-
-static const char unicode_to_dingbats_1b_25A0[] = {
-/* U+25A0 */ 0x6E,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+25B2 */ 0x73,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+25BC */ 0x74,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+25C6 */ 0x75,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+25CF */ 0x6C,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+25D7 */ 0x77,
-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,
-/* U+2605 */ 0x48,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+260E */ 0x25,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+261B */ 0x2A,
-0x00,
-0x00,
-/* U+261E */ 0x2B,
-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,
-/* U+2660 */ 0xAB,
-0x00,
-0x00,
-/* U+2663 */ 0xA8,
-0x00,
-/* U+2665 */ 0xAA,
-/* U+2666 */ 0xA9,
-};
-
-static const char unicode_to_dingbats_1b_2701[] = {
-/* U+2701 */ 0x21,
-/* U+2702 */ 0x22,
-/* U+2703 */ 0x23,
-/* U+2704 */ 0x24,
-0x00,
-/* U+2706 */ 0x26,
-/* U+2707 */ 0x27,
-/* U+2708 */ 0x28,
-/* U+2709 */ 0x29,
-0x00,
-0x00,
-/* U+270C */ 0x2C,
-/* U+270D */ 0x2D,
-/* U+270E */ 0x2E,
-/* U+270F */ 0x2F,
-/* U+2710 */ 0x30,
-/* U+2711 */ 0x31,
-/* U+2712 */ 0x32,
-/* U+2713 */ 0x33,
-/* U+2714 */ 0x34,
-/* U+2715 */ 0x35,
-/* U+2716 */ 0x36,
-/* U+2717 */ 0x37,
-/* U+2718 */ 0x38,
-/* U+2719 */ 0x39,
-/* U+271A */ 0x3A,
-/* U+271B */ 0x3B,
-/* U+271C */ 0x3C,
-/* U+271D */ 0x3D,
-/* U+271E */ 0x3E,
-/* U+271F */ 0x3F,
-/* U+2720 */ 0x40,
-/* U+2721 */ 0x41,
-/* U+2722 */ 0x42,
-/* U+2723 */ 0x43,
-/* U+2724 */ 0x44,
-/* U+2725 */ 0x45,
-/* U+2726 */ 0x46,
-/* U+2727 */ 0x47,
-0x00,
-/* U+2729 */ 0x49,
-/* U+272A */ 0x4A,
-/* U+272B */ 0x4B,
-/* U+272C */ 0x4C,
-/* U+272D */ 0x4D,
-/* U+272E */ 0x4E,
-/* U+272F */ 0x4F,
-/* U+2730 */ 0x50,
-/* U+2731 */ 0x51,
-/* U+2732 */ 0x52,
-/* U+2733 */ 0x53,
-/* U+2734 */ 0x54,
-/* U+2735 */ 0x55,
-/* U+2736 */ 0x56,
-/* U+2737 */ 0x57,
-/* U+2738 */ 0x58,
-/* U+2739 */ 0x59,
-/* U+273A */ 0x5A,
-/* U+273B */ 0x5B,
-/* U+273C */ 0x5C,
-/* U+273D */ 0x5D,
-/* U+273E */ 0x5E,
-/* U+273F */ 0x5F,
-/* U+2740 */ 0x60,
-/* U+2741 */ 0x61,
-/* U+2742 */ 0x62,
-/* U+2743 */ 0x63,
-/* U+2744 */ 0x64,
-/* U+2745 */ 0x65,
-/* U+2746 */ 0x66,
-/* U+2747 */ 0x67,
-/* U+2748 */ 0x68,
-/* U+2749 */ 0x69,
-/* U+274A */ 0x6A,
-/* U+274B */ 0x6B,
-0x00,
-/* U+274D */ 0x6D,
-0x00,
-/* U+274F */ 0x6F,
-/* U+2750 */ 0x70,
-/* U+2751 */ 0x71,
-/* U+2752 */ 0x72,
-0x00,
-0x00,
-0x00,
-/* U+2756 */ 0x76,
-0x00,
-/* U+2758 */ 0x78,
-/* U+2759 */ 0x79,
-/* U+275A */ 0x7A,
-/* U+275B */ 0x7B,
-/* U+275C */ 0x7C,
-/* U+275D */ 0x7D,
-/* U+275E */ 0x7E,
-0x00,
-0x00,
-/* U+2761 */ 0xA1,
-/* U+2762 */ 0xA2,
-/* U+2763 */ 0xA3,
-/* U+2764 */ 0xA4,
-/* U+2765 */ 0xA5,
-/* U+2766 */ 0xA6,
-/* U+2767 */ 0xA7,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2776 */ 0xB6,
-/* U+2777 */ 0xB7,
-/* U+2778 */ 0xB8,
-/* U+2779 */ 0xB9,
-/* U+277A */ 0xBA,
-/* U+277B */ 0xBB,
-/* U+277C */ 0xBC,
-/* U+277D */ 0xBD,
-/* U+277E */ 0xBE,
-/* U+277F */ 0xBF,
-/* U+2780 */ 0xC0,
-/* U+2781 */ 0xC1,
-/* U+2782 */ 0xC2,
-/* U+2783 */ 0xC3,
-/* U+2784 */ 0xC4,
-/* U+2785 */ 0xC5,
-/* U+2786 */ 0xC6,
-/* U+2787 */ 0xC7,
-/* U+2788 */ 0xC8,
-/* U+2789 */ 0xC9,
-/* U+278A */ 0xCA,
-/* U+278B */ 0xCB,
-/* U+278C */ 0xCC,
-/* U+278D */ 0xCD,
-/* U+278E */ 0xCE,
-/* U+278F */ 0xCF,
-/* U+2790 */ 0xD0,
-/* U+2791 */ 0xD1,
-/* U+2792 */ 0xD2,
-/* U+2793 */ 0xD3,
-/* U+2794 */ 0xD4,
-0x00,
-0x00,
-0x00,
-/* U+2798 */ 0xD8,
-/* U+2799 */ 0xD9,
-/* U+279A */ 0xDA,
-/* U+279B */ 0xDB,
-/* U+279C */ 0xDC,
-/* U+279D */ 0xDD,
-/* U+279E */ 0xDE,
-/* U+279F */ 0xDF,
-/* U+27A0 */ 0xE0,
-/* U+27A1 */ 0xE1,
-/* U+27A2 */ 0xE2,
-/* U+27A3 */ 0xE3,
-/* U+27A4 */ 0xE4,
-/* U+27A5 */ 0xE5,
-/* U+27A6 */ 0xE6,
-/* U+27A7 */ 0xE7,
-/* U+27A8 */ 0xE8,
-/* U+27A9 */ 0xE9,
-/* U+27AA */ 0xEA,
-/* U+27AB */ 0xEB,
-/* U+27AC */ 0xEC,
-/* U+27AD */ 0xED,
-/* U+27AE */ 0xEE,
-/* U+27AF */ 0xEF,
-0x00,
-/* U+27B1 */ 0xF1,
-/* U+27B2 */ 0xF2,
-/* U+27B3 */ 0xF3,
-/* U+27B4 */ 0xF4,
-/* U+27B5 */ 0xF5,
-/* U+27B6 */ 0xF6,
-/* U+27B7 */ 0xF7,
-/* U+27B8 */ 0xF8,
-/* U+27B9 */ 0xF9,
-/* U+27BA */ 0xFA,
-/* U+27BB */ 0xFB,
-/* U+27BC */ 0xFC,
-/* U+27BD */ 0xFD,
-/* U+27BE */ 0xFE,
-};
-
-static const char unicode_to_dingbats_1b_F8D7[] = {
-/* U+F8D7 */ 0x80,
-/* U+F8D8 */ 0x81,
-/* U+F8D9 */ 0x82,
-/* U+F8DA */ 0x83,
-/* U+F8DB */ 0x84,
-/* U+F8DC */ 0x85,
-/* U+F8DD */ 0x86,
-/* U+F8DE */ 0x87,
-/* U+F8DF */ 0x88,
-/* U+F8E0 */ 0x89,
-/* U+F8E1 */ 0x8A,
-/* U+F8E2 */ 0x8B,
-/* U+F8E3 */ 0x8C,
-/* U+F8E4 */ 0x8D,
-};
diff --git a/common/fltk/src/xutf8/headers/spacing.h b/common/fltk/src/xutf8/headers/spacing.h
deleted file mode 100644
index e27f886..0000000
--- a/common/fltk/src/xutf8/headers/spacing.h
+++ /dev/null
@@ -1,1978 +0,0 @@
-/* spacing */
-
-static const unsigned short ucs_table_0300[] = {
-/* U+0300 */ 0x0060,
-/* U+0301 */ 0x00B4,
-/* U+0302 */ 0x005E,
-/* U+0303 */ 0x02DC,
-/* U+0304 */ 0x00AF,
-/* U+0305 */ 0x203E,
-/* U+0306 */ 0x02D8,
-/* U+0307 */ 0x02D9,
-/* U+0308 */ 0x00A8,
-/* U+0309 */ 0x0309,
-/* U+030A */ 0x02DA,
-/* U+030B */ 0x02DD,
-/* U+030C */ 0x030C,
-/* U+030D */ 0x030D,
-/* U+030E */ 0x030E,
-/* U+030F */ 0x030F,
-/* U+0310 */ 0x0310,
-/* U+0311 */ 0x0311,
-/* U+0312 */ 0x0312,
-/* U+0313 */ 0x1FBD,
-/* U+0314 */ 0x1FFE,
-/* U+0315 */ 0x0315,
-/* U+0316 */ 0x0316,
-/* U+0317 */ 0x0317,
-/* U+0318 */ 0x0318,
-/* U+0319 */ 0x0319,
-/* U+031A */ 0x031A,
-/* U+031B */ 0x031B,
-/* U+031C */ 0x031C,
-/* U+031D */ 0x031D,
-/* U+031E */ 0x031E,
-/* U+031F */ 0x031F,
-/* U+0320 */ 0x0320,
-/* U+0321 */ 0x0321,
-/* U+0322 */ 0x0322,
-/* U+0323 */ 0x0323,
-/* U+0324 */ 0x0324,
-/* U+0325 */ 0x0325,
-/* U+0326 */ 0x0326,
-/* U+0327 */ 0x00B8,
-/* U+0328 */ 0x02DB,
-/* U+0329 */ 0x0329,
-/* U+032A */ 0x032A,
-/* U+032B */ 0x032B,
-/* U+032C */ 0x032C,
-/* U+032D */ 0x032D,
-/* U+032E */ 0x032E,
-/* U+032F */ 0x032F,
-/* U+0330 */ 0x0330,
-/* U+0331 */ 0x0331,
-/* U+0332 */ 0x005F,
-/* U+0333 */ 0x2017,
-/* U+0334 */ 0x0334,
-/* U+0335 */ 0x0335,
-/* U+0336 */ 0x0336,
-/* U+0337 */ 0x0337,
-/* U+0338 */ 0x0338,
-/* U+0339 */ 0x0339,
-/* U+033A */ 0x033A,
-/* U+033B */ 0x033B,
-/* U+033C */ 0x033C,
-/* U+033D */ 0x033D,
-/* U+033E */ 0x033E,
-/* U+033F */ 0x033F,
-/* U+0340 */ 0x0340,
-/* U+0341 */ 0x0341,
-/* U+0342 */ 0x1FC0,
-/* U+0343 */ 0x0343,
-/* U+0344 */ 0x0344,
-/* U+0345 */ 0x037A,
-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,
-/* U+0360 */ 0x0360,
-/* U+0361 */ 0x0361,
-};
-
-static const unsigned short ucs_table_0483[] = {
-/* U+0483 */ 0x0483,
-/* U+0484 */ 0x0484,
-/* U+0485 */ 0x0485,
-/* U+0486 */ 0x0486,
-};
-
-static const unsigned short ucs_table_0591[] = {
-/* U+0591 */ 0x0591,
-/* U+0592 */ 0x0592,
-/* U+0593 */ 0x0593,
-/* U+0594 */ 0x0594,
-/* U+0595 */ 0x0595,
-/* U+0596 */ 0x0596,
-/* U+0597 */ 0x0597,
-/* U+0598 */ 0x0598,
-/* U+0599 */ 0x0599,
-/* U+059A */ 0x059A,
-/* U+059B */ 0x059B,
-/* U+059C */ 0x059C,
-/* U+059D */ 0x059D,
-/* U+059E */ 0x059E,
-/* U+059F */ 0x059F,
-/* U+05A0 */ 0x05A0,
-/* U+05A1 */ 0x05A1,
-0x00,
-/* U+05A3 */ 0x05A3,
-/* U+05A4 */ 0x05A4,
-/* U+05A5 */ 0x05A5,
-/* U+05A6 */ 0x05A6,
-/* U+05A7 */ 0x05A7,
-/* U+05A8 */ 0x05A8,
-/* U+05A9 */ 0x05A9,
-/* U+05AA */ 0x05AA,
-/* U+05AB */ 0x05AB,
-/* U+05AC */ 0x05AC,
-/* U+05AD */ 0x05AD,
-/* U+05AE */ 0x05AE,
-/* U+05AF */ 0x05AF,
-/* U+05B0 */ 0x05B0,
-/* U+05B1 */ 0x05B1,
-/* U+05B2 */ 0x05B2,
-/* U+05B3 */ 0x05B3,
-/* U+05B4 */ 0x05B4,
-/* U+05B5 */ 0x05B5,
-/* U+05B6 */ 0x05B6,
-/* U+05B7 */ 0x05B7,
-/* U+05B8 */ 0x05B8,
-/* U+05B9 */ 0x05B9,
-0x00,
-/* U+05BB */ 0x05BB,
-/* U+05BC */ 0x05BC,
-/* U+05BD */ 0x05BD,
-0x00,
-/* U+05BF */ 0x05BF,
-0x00,
-/* U+05C1 */ 0x05C1,
-/* U+05C2 */ 0x05C2,
-0x00,
-/* U+05C4 */ 0x05C4,
-};
-
-static const unsigned short ucs_table_064B[] = {
-/* U+064B */ 0xFE70,
-/* U+064C */ 0xFE72,
-/* U+064D */ 0xFE74,
-/* U+064E */ 0xFE76,
-/* U+064F */ 0xFE78,
-/* U+0650 */ 0xFE7A,
-/* U+0651 */ 0xFE7C,
-/* U+0652 */ 0xFE7E,
-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,
-/* U+0670 */ 0x0670,
-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,
-0x00,
-0x00,
-/* U+06D6 */ 0x06D6,
-/* U+06D7 */ 0x06D7,
-/* U+06D8 */ 0x06D8,
-/* U+06D9 */ 0x06D9,
-/* U+06DA */ 0x06DA,
-/* U+06DB */ 0x06DB,
-/* U+06DC */ 0x06DC,
-0x00,
-0x00,
-/* U+06DF */ 0x06DF,
-/* U+06E0 */ 0x06E0,
-/* U+06E1 */ 0x06E1,
-/* U+06E2 */ 0x06E2,
-/* U+06E3 */ 0x06E3,
-/* U+06E4 */ 0x06E4,
-0x00,
-0x00,
-/* U+06E7 */ 0x06E7,
-/* U+06E8 */ 0x06E8,
-0x00,
-/* U+06EA */ 0x06EA,
-/* U+06EB */ 0x06EB,
-/* U+06EC */ 0x06EC,
-/* U+06ED */ 0x06ED,
-};
-
-static const unsigned short ucs_table_0901[] = {
-/* U+0901 */ 0x0901,
-/* U+0902 */ 0x0902,
-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,
-/* U+093C */ 0x093C,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0941 */ 0x0941,
-/* U+0942 */ 0x0942,
-/* U+0943 */ 0x0943,
-/* U+0944 */ 0x0944,
-/* U+0945 */ 0x0945,
-/* U+0946 */ 0x0946,
-/* U+0947 */ 0x0947,
-/* U+0948 */ 0x0948,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+094D */ 0x094D,
-0x00,
-0x00,
-0x00,
-/* U+0951 */ 0x0951,
-/* U+0952 */ 0x0952,
-/* U+0953 */ 0x0953,
-/* U+0954 */ 0x0954,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0962 */ 0x0962,
-/* U+0963 */ 0x0963,
-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,
-/* U+0981 */ 0x0981,
-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,
-/* U+09BC */ 0x09BC,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+09C1 */ 0x09C1,
-/* U+09C2 */ 0x09C2,
-/* U+09C3 */ 0x09C3,
-/* U+09C4 */ 0x09C4,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+09CD */ 0x09CD,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+09E2 */ 0x09E2,
-/* U+09E3 */ 0x09E3,
-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,
-/* U+0A02 */ 0x0A02,
-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,
-/* U+0A3C */ 0x0A3C,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0A41 */ 0x0A41,
-/* U+0A42 */ 0x0A42,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0A47 */ 0x0A47,
-/* U+0A48 */ 0x0A48,
-0x00,
-0x00,
-/* U+0A4B */ 0x0A4B,
-/* U+0A4C */ 0x0A4C,
-/* U+0A4D */ 0x0A4D,
-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,
-/* U+0A70 */ 0x0A70,
-/* U+0A71 */ 0x0A71,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0A81 */ 0x0A81,
-/* U+0A82 */ 0x0A82,
-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,
-/* U+0ABC */ 0x0ABC,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0AC1 */ 0x0AC1,
-/* U+0AC2 */ 0x0AC2,
-/* U+0AC3 */ 0x0AC3,
-/* U+0AC4 */ 0x0AC4,
-/* U+0AC5 */ 0x0AC5,
-0x00,
-/* U+0AC7 */ 0x0AC7,
-/* U+0AC8 */ 0x0AC8,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0ACD */ 0x0ACD,
-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,
-/* U+0B01 */ 0x0B01,
-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,
-/* U+0B3C */ 0x0B3C,
-0x00,
-0x00,
-/* U+0B3F */ 0x0B3F,
-0x00,
-/* U+0B41 */ 0x0B41,
-/* U+0B42 */ 0x0B42,
-/* U+0B43 */ 0x0B43,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0B4D */ 0x0B4D,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0B56 */ 0x0B56,
-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,
-/* U+0B82 */ 0x0B82,
-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,
-/* U+0BC0 */ 0x0BC0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0BCD */ 0x0BCD,
-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,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0C3E */ 0x0C3E,
-/* U+0C3F */ 0x0C3F,
-/* U+0C40 */ 0x0C40,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0C46 */ 0x0C46,
-/* U+0C47 */ 0x0C47,
-/* U+0C48 */ 0x0C48,
-0x00,
-/* U+0C4A */ 0x0C4A,
-/* U+0C4B */ 0x0C4B,
-/* U+0C4C */ 0x0C4C,
-/* U+0C4D */ 0x0C4D,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0C55 */ 0x0C55,
-/* U+0C56 */ 0x0C56,
-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,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0CBF */ 0x0CBF,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0CC6 */ 0x0CC6,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0CCC */ 0x0CCC,
-/* U+0CCD */ 0x0CCD,
-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,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0D41 */ 0x0D41,
-/* U+0D42 */ 0x0D42,
-/* U+0D43 */ 0x0D43,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0D4D */ 0x0D4D,
-};
-
-static const unsigned short ucs_table_0E31[] = {
-/* U+0E31 */ 0x0E31,
-0x00,
-0x00,
-/* U+0E34 */ 0x0E34,
-/* U+0E35 */ 0x0E35,
-/* U+0E36 */ 0x0E36,
-/* U+0E37 */ 0x0E37,
-/* U+0E38 */ 0x0E38,
-/* U+0E39 */ 0x0E39,
-/* U+0E3A */ 0x0E3A,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0E47 */ 0x0E47,
-/* U+0E48 */ 0x0E48,
-/* U+0E49 */ 0x0E49,
-/* U+0E4A */ 0x0E4A,
-/* U+0E4B */ 0x0E4B,
-/* U+0E4C */ 0x0E4C,
-/* U+0E4D */ 0x0E4D,
-/* U+0E4E */ 0x0E4E,
-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,
-/* U+0EB1 */ 0x0EB1,
-0x00,
-0x00,
-/* U+0EB4 */ 0x0EB4,
-/* U+0EB5 */ 0x0EB5,
-/* U+0EB6 */ 0x0EB6,
-/* U+0EB7 */ 0x0EB7,
-/* U+0EB8 */ 0x0EB8,
-/* U+0EB9 */ 0x0EB9,
-0x00,
-/* U+0EBB */ 0x0EBB,
-/* U+0EBC */ 0x0EBC,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0EC8 */ 0x0EC8,
-/* U+0EC9 */ 0x0EC9,
-/* U+0ECA */ 0x0ECA,
-/* U+0ECB */ 0x0ECB,
-/* U+0ECC */ 0x0ECC,
-/* U+0ECD */ 0x0ECD,
-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,
-/* U+0F18 */ 0x0F18,
-/* U+0F19 */ 0x0F19,
-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,
-/* U+0F35 */ 0x0F35,
-0x00,
-/* U+0F37 */ 0x0F37,
-0x00,
-/* U+0F39 */ 0x0F39,
-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,
-/* U+0F71 */ 0x0F71,
-/* U+0F72 */ 0x0F72,
-/* U+0F73 */ 0x0F73,
-/* U+0F74 */ 0x0F74,
-/* U+0F75 */ 0x0F75,
-/* U+0F76 */ 0x0F76,
-/* U+0F77 */ 0x0F77,
-/* U+0F78 */ 0x0F78,
-/* U+0F79 */ 0x0F79,
-/* U+0F7A */ 0x0F7A,
-/* U+0F7B */ 0x0F7B,
-/* U+0F7C */ 0x0F7C,
-/* U+0F7D */ 0x0F7D,
-/* U+0F7E */ 0x0F7E,
-0x00,
-/* U+0F80 */ 0x0F80,
-/* U+0F81 */ 0x0F81,
-/* U+0F82 */ 0x0F82,
-/* U+0F83 */ 0x0F83,
-/* U+0F84 */ 0x0F84,
-0x00,
-/* U+0F86 */ 0x0F86,
-/* U+0F87 */ 0x0F87,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0F90 */ 0x0F90,
-/* U+0F91 */ 0x0F91,
-/* U+0F92 */ 0x0F92,
-/* U+0F93 */ 0x0F93,
-/* U+0F94 */ 0x0F94,
-/* U+0F95 */ 0x0F95,
-0x00,
-/* U+0F97 */ 0x0F97,
-0x00,
-/* U+0F99 */ 0x0F99,
-/* U+0F9A */ 0x0F9A,
-/* U+0F9B */ 0x0F9B,
-/* U+0F9C */ 0x0F9C,
-/* U+0F9D */ 0x0F9D,
-/* U+0F9E */ 0x0F9E,
-/* U+0F9F */ 0x0F9F,
-/* U+0FA0 */ 0x0FA0,
-/* U+0FA1 */ 0x0FA1,
-/* U+0FA2 */ 0x0FA2,
-/* U+0FA3 */ 0x0FA3,
-/* U+0FA4 */ 0x0FA4,
-/* U+0FA5 */ 0x0FA5,
-/* U+0FA6 */ 0x0FA6,
-/* U+0FA7 */ 0x0FA7,
-/* U+0FA8 */ 0x0FA8,
-/* U+0FA9 */ 0x0FA9,
-/* U+0FAA */ 0x0FAA,
-/* U+0FAB */ 0x0FAB,
-/* U+0FAC */ 0x0FAC,
-/* U+0FAD */ 0x0FAD,
-0x00,
-0x00,
-0x00,
-/* U+0FB1 */ 0x0FB1,
-/* U+0FB2 */ 0x0FB2,
-/* U+0FB3 */ 0x0FB3,
-/* U+0FB4 */ 0x0FB4,
-/* U+0FB5 */ 0x0FB5,
-/* U+0FB6 */ 0x0FB6,
-/* U+0FB7 */ 0x0FB7,
-0x00,
-/* U+0FB9 */ 0x0FB9,
-};
-
-static const unsigned short ucs_table_20D0[] = {
-/* U+20D0 */ 0x20D0,
-/* U+20D1 */ 0x20D1,
-/* U+20D2 */ 0x20D2,
-/* U+20D3 */ 0x20D3,
-/* U+20D4 */ 0x20D4,
-/* U+20D5 */ 0x20D5,
-/* U+20D6 */ 0x20D6,
-/* U+20D7 */ 0x20D7,
-/* U+20D8 */ 0x20D8,
-/* U+20D9 */ 0x20D9,
-/* U+20DA */ 0x20DA,
-/* U+20DB */ 0x20DB,
-/* U+20DC */ 0x20DC,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+20E1 */ 0x20E1,
-};
-
-static const unsigned short ucs_table_302A[] = {
-/* U+302A */ 0x302A,
-/* U+302B */ 0x302B,
-/* U+302C */ 0x302C,
-/* U+302D */ 0x302D,
-/* U+302E */ 0x302E,
-/* U+302F */ 0x302F,
-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,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+3099 */ 0x309B,
-/* U+309A */ 0x309C,
-};
-
-static const unsigned short ucs_table_FB1E[] = {
-/* U+FB1E */ 0xFB1E,
-};
-
-static const unsigned short ucs_table_FE20[] = {
-/* U+FE20 */ 0xFE20,
-/* U+FE21 */ 0xFE21,
-/* U+FE22 */ 0xFE22,
-/* U+FE23 */ 0xFE23,
-};
diff --git a/common/fltk/src/xutf8/headers/spacing_tbl.txt b/common/fltk/src/xutf8/headers/spacing_tbl.txt
deleted file mode 100644
index 2e3d90c..0000000
--- a/common/fltk/src/xutf8/headers/spacing_tbl.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-ucs_table_0300[]; 	/* end: U+0361 */
-ucs_table_0483[]; 	/* end: U+0486 */
-ucs_table_0591[]; 	/* end: U+05C4 */
-ucs_table_064B[]; 	/* end: U+06ED */
-ucs_table_0901[]; 	/* end: U+0D4D */
-ucs_table_0E31[]; 	/* end: U+0FB9 */
-ucs_table_20D0[]; 	/* end: U+20E1 */
-ucs_table_302A[]; 	/* end: U+309A */
-ucs_table_FB1E[]; 	/* end: U+FB1E */
-ucs_table_FE20[]; 	/* end: U+FE23 */
diff --git a/common/fltk/src/xutf8/headers/symbol_.h b/common/fltk/src/xutf8/headers/symbol_.h
deleted file mode 100644
index a9d8fd3..0000000
--- a/common/fltk/src/xutf8/headers/symbol_.h
+++ /dev/null
@@ -1,1126 +0,0 @@
-/* symbol */
-
-static const char unicode_to_symbol_1b_0020[] = {
-/* U+0020 */ 0x20,
-/* U+0021 */ 0x21,
-0x00,
-/* U+0023 */ 0x23,
-0x00,
-/* U+0025 */ 0x25,
-/* U+0026 */ 0x26,
-0x00,
-/* U+0028 */ 0x28,
-/* U+0029 */ 0x29,
-0x00,
-/* U+002B */ 0x2B,
-/* U+002C */ 0x2C,
-0x00,
-/* U+002E */ 0x2E,
-/* U+002F */ 0x2F,
-/* U+0030 */ 0x30,
-/* U+0031 */ 0x31,
-/* U+0032 */ 0x32,
-/* U+0033 */ 0x33,
-/* U+0034 */ 0x34,
-/* U+0035 */ 0x35,
-/* U+0036 */ 0x36,
-/* U+0037 */ 0x37,
-/* U+0038 */ 0x38,
-/* U+0039 */ 0x39,
-/* U+003A */ 0x3A,
-/* U+003B */ 0x3B,
-/* U+003C */ 0x3C,
-/* U+003D */ 0x3D,
-/* U+003E */ 0x3E,
-/* U+003F */ 0x3F,
-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,
-/* U+005B */ 0x5B,
-0x00,
-/* U+005D */ 0x5D,
-0x00,
-/* U+005F */ 0x5F,
-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,
-/* U+007B */ 0x7B,
-/* U+007C */ 0x7C,
-/* U+007D */ 0x7D,
-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,
-/* U+00A0 */ 0x20,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+00AC */ 0xD8,
-0x00,
-0x00,
-0x00,
-/* U+00B0 */ 0xB0,
-/* U+00B1 */ 0xB1,
-0x00,
-0x00,
-0x00,
-/* U+00B5 */ 0x6D,
-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,
-/* U+00D7 */ 0xB4,
-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,
-/* U+00F7 */ 0xB8,
-};
-
-static const char unicode_to_symbol_1b_0192[] = {
-/* U+0192 */ 0xA6,
-};
-
-static const char unicode_to_symbol_1b_0391[] = {
-/* U+0391 */ 0x41,
-/* U+0392 */ 0x42,
-/* U+0393 */ 0x47,
-/* U+0394 */ 0x44,
-/* U+0395 */ 0x45,
-/* U+0396 */ 0x5A,
-/* U+0397 */ 0x48,
-/* U+0398 */ 0x51,
-/* U+0399 */ 0x49,
-/* U+039A */ 0x4B,
-/* U+039B */ 0x4C,
-/* U+039C */ 0x4D,
-/* U+039D */ 0x4E,
-/* U+039E */ 0x58,
-/* U+039F */ 0x4F,
-/* U+03A0 */ 0x50,
-/* U+03A1 */ 0x52,
-0x00,
-/* U+03A3 */ 0x53,
-/* U+03A4 */ 0x54,
-/* U+03A5 */ 0x55,
-/* U+03A6 */ 0x46,
-/* U+03A7 */ 0x43,
-/* U+03A8 */ 0x59,
-/* U+03A9 */ 0x57,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+03B1 */ 0x61,
-/* U+03B2 */ 0x62,
-/* U+03B3 */ 0x67,
-/* U+03B4 */ 0x64,
-/* U+03B5 */ 0x65,
-/* U+03B6 */ 0x7A,
-/* U+03B7 */ 0x68,
-/* U+03B8 */ 0x71,
-/* U+03B9 */ 0x69,
-/* U+03BA */ 0x6B,
-/* U+03BB */ 0x6C,
-/* U+03BC */ 0x6D,
-/* U+03BD */ 0x6E,
-/* U+03BE */ 0x78,
-/* U+03BF */ 0x6F,
-/* U+03C0 */ 0x70,
-/* U+03C1 */ 0x72,
-/* U+03C2 */ 0x56,
-/* U+03C3 */ 0x73,
-/* U+03C4 */ 0x74,
-/* U+03C5 */ 0x75,
-/* U+03C6 */ 0x66,
-/* U+03C7 */ 0x63,
-/* U+03C8 */ 0x79,
-/* U+03C9 */ 0x77,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+03D1 */ 0x4A,
-/* U+03D2 */ 0xA1,
-0x00,
-0x00,
-/* U+03D5 */ 0x6A,
-/* U+03D6 */ 0x76,
-};
-
-static const char unicode_to_symbol_1b_2022[] = {
-/* U+2022 */ 0xB7,
-0x00,
-0x00,
-0x00,
-/* U+2026 */ 0xBC,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2032 */ 0xA2,
-/* U+2033 */ 0xB2,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2044 */ 0xA4,
-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,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+20AC */ 0xA0,
-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,
-0x00,
-/* U+2111 */ 0xC1,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2118 */ 0xC3,
-0x00,
-0x00,
-0x00,
-/* U+211C */ 0xC2,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2126 */ 0x57,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2135 */ 0xC0,
-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,
-/* U+2190 */ 0xAC,
-/* U+2191 */ 0xAD,
-/* U+2192 */ 0xAE,
-/* U+2193 */ 0xAF,
-/* U+2194 */ 0xAB,
-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,
-/* U+21B5 */ 0xBF,
-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,
-/* U+21D0 */ 0xDC,
-/* U+21D1 */ 0xDD,
-/* U+21D2 */ 0xDE,
-/* U+21D3 */ 0xDF,
-/* U+21D4 */ 0xDB,
-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,
-/* U+2200 */ 0x22,
-0x00,
-/* U+2202 */ 0xB6,
-/* U+2203 */ 0x24,
-0x00,
-/* U+2205 */ 0xC6,
-/* U+2206 */ 0x44,
-/* U+2207 */ 0xD1,
-/* U+2208 */ 0xCE,
-/* U+2209 */ 0xCF,
-0x00,
-/* U+220B */ 0x27,
-0x00,
-0x00,
-0x00,
-/* U+220F */ 0xD5,
-0x00,
-/* U+2211 */ 0xE5,
-/* U+2212 */ 0x2D,
-0x00,
-0x00,
-/* U+2215 */ 0xA4,
-0x00,
-/* U+2217 */ 0x2A,
-0x00,
-0x00,
-/* U+221A */ 0xD6,
-0x00,
-0x00,
-/* U+221D */ 0xB5,
-/* U+221E */ 0xA5,
-0x00,
-/* U+2220 */ 0xD0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2227 */ 0xD9,
-/* U+2228 */ 0xDA,
-/* U+2229 */ 0xC7,
-/* U+222A */ 0xC8,
-/* U+222B */ 0xF2,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2234 */ 0x5C,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+223C */ 0x7E,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2245 */ 0x40,
-0x00,
-0x00,
-/* U+2248 */ 0xBB,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2260 */ 0xB9,
-/* U+2261 */ 0xBA,
-0x00,
-0x00,
-/* U+2264 */ 0xA3,
-/* U+2265 */ 0xB3,
-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,
-/* U+2282 */ 0xCC,
-/* U+2283 */ 0xC9,
-/* U+2284 */ 0xCB,
-0x00,
-/* U+2286 */ 0xCD,
-/* U+2287 */ 0xCA,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2295 */ 0xC5,
-0x00,
-/* U+2297 */ 0xC4,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+22A5 */ 0x5E,
-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,
-/* U+22C5 */ 0xD7,
-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,
-/* U+2320 */ 0xF3,
-/* U+2321 */ 0xF5,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2329 */ 0xE1,
-/* U+232A */ 0xF1,
-};
-
-static const char unicode_to_symbol_1b_25CA[] = {
-/* U+25CA */ 0xE0,
-};
-
-static const char unicode_to_symbol_1b_2660[] = {
-/* U+2660 */ 0xAA,
-0x00,
-0x00,
-/* U+2663 */ 0xA7,
-0x00,
-/* U+2665 */ 0xA9,
-/* U+2666 */ 0xA8,
-};
-
-static const char unicode_to_symbol_1b_F6D9[] = {
-/* U+F6D9 */ 0xD3,
-/* U+F6DA */ 0xD2,
-/* U+F6DB */ 0xD4,
-};
-
-static const char unicode_to_symbol_1b_F8E5[] = {
-/* U+F8E5 */ 0x60,
-/* U+F8E6 */ 0xBD,
-/* U+F8E7 */ 0xBE,
-/* U+F8E8 */ 0xE2,
-/* U+F8E9 */ 0xE3,
-/* U+F8EA */ 0xE4,
-/* U+F8EB */ 0xE6,
-/* U+F8EC */ 0xE7,
-/* U+F8ED */ 0xE8,
-/* U+F8EE */ 0xE9,
-/* U+F8EF */ 0xEA,
-/* U+F8F0 */ 0xEB,
-/* U+F8F1 */ 0xEC,
-/* U+F8F2 */ 0xED,
-/* U+F8F3 */ 0xEE,
-/* U+F8F4 */ 0xEF,
-/* U+F8F5 */ 0xF4,
-/* U+F8F6 */ 0xF6,
-/* U+F8F7 */ 0xF7,
-/* U+F8F8 */ 0xF8,
-/* U+F8F9 */ 0xF9,
-/* U+F8FA */ 0xFA,
-/* U+F8FB */ 0xFB,
-/* U+F8FC */ 0xFC,
-/* U+F8FD */ 0xFD,
-/* U+F8FE */ 0xFE,
-};
diff --git a/common/fltk/src/xutf8/headers/tbl.txt b/common/fltk/src/xutf8/headers/tbl.txt
deleted file mode 100644
index ddb2c45..0000000
--- a/common/fltk/src/xutf8/headers/tbl.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-unicode_to_iso8859_1_1b_0001[]; 	/* end: U+00FF */
-unicode_to_iso8859_2_1b_0001[]; 	/* end: U+017E */
-unicode_to_iso8859_2_1b_02C7[]; 	/* end: U+02DD */
-unicode_to_iso8859_3_1b_0001[]; 	/* end: U+017C */
-unicode_to_iso8859_3_1b_02D8[]; 	/* end: U+02D9 */
-unicode_to_iso8859_4_1b_0001[]; 	/* end: U+017E */
-unicode_to_iso8859_4_1b_02C7[]; 	/* end: U+02DB */
-unicode_to_iso8859_5_1b_0001[]; 	/* end: U+00AD */
-unicode_to_iso8859_5_1b_0401[]; 	/* end: U+045F */
-unicode_to_iso8859_5_1b_2116[]; 	/* end: U+2116 */
-unicode_to_iso8859_6_1b_0001[]; 	/* end: U+00AD */
-unicode_to_iso8859_6_1b_060C[]; 	/* end: U+0652 */
-unicode_to_iso8859_7_1b_0001[]; 	/* end: U+00BD */
-unicode_to_iso8859_7_1b_0384[]; 	/* end: U+03CE */
-unicode_to_iso8859_7_1b_2015[]; 	/* end: U+2019 */
-unicode_to_iso8859_8_1b_0001[]; 	/* end: U+00F7 */
-unicode_to_iso8859_8_1b_05D0[]; 	/* end: U+05EA */
-unicode_to_iso8859_8_1b_200E[]; 	/* end: U+2017 */
-unicode_to_iso8859_9_1b_0001[]; 	/* end: U+015F */
-unicode_to_iso8859_10_1b_0001[]; 	/* end: U+017E */
-unicode_to_iso8859_10_1b_2015[]; 	/* end: U+2015 */
-unicode_to_iso8859_13_1b_0001[]; 	/* end: U+017E */
-unicode_to_iso8859_13_1b_2019[]; 	/* end: U+201E */
-unicode_to_iso8859_14_1b_0001[]; 	/* end: U+0178 */
-unicode_to_iso8859_14_1b_1E02[]; 	/* end: U+1EF3 */
-unicode_to_iso8859_15_1b_0001[]; 	/* end: U+017E */
-unicode_to_iso8859_15_1b_20AC[]; 	/* end: U+20AC */
-unicode_to_koi8_1_1b_0001[]; 	/* end: U+00F7 */
-unicode_to_koi8_1_1b_0401[]; 	/* end: U+0451 */
-unicode_to_koi8_1_1b_2219[]; 	/* end: U+2265 */
-unicode_to_koi8_1_1b_2320[]; 	/* end: U+2321 */
-unicode_to_koi8_1_1b_2500[]; 	/* end: U+25A0 */
-unicode_to_big5_0_2b_00A2[]; 	/* end: U+00F7 */
-unicode_to_big5_0_2b_02C7[]; 	/* end: U+02D9 */
-unicode_to_big5_0_2b_0391[]; 	/* end: U+0451 */
-unicode_to_big5_0_2b_2013[]; 	/* end: U+203E */
-unicode_to_big5_0_2b_2103[]; 	/* end: U+2199 */
-unicode_to_big5_0_2b_221A[]; 	/* end: U+22BF */
-unicode_to_big5_0_2b_2460[]; 	/* end: U+247D */
-unicode_to_big5_0_2b_2500[]; 	/* end: U+2642 */
-unicode_to_big5_0_2b_3000[]; 	/* end: U+3129 */
-unicode_to_big5_0_2b_32A3[]; 	/* end: U+32A3 */
-unicode_to_big5_0_2b_338E[]; 	/* end: U+33D5 */
-unicode_to_big5_0_2b_4E00[]; 	/* end: U+7E9C */
-unicode_to_big5_0_2b_7F36[]; 	/* end: U+8B9F */
-unicode_to_big5_0_2b_8C37[]; 	/* end: U+9483 */
-unicode_to_big5_0_2b_9577[]; 	/* end: U+9FA4 */
-unicode_to_big5_0_2b_FA0C[]; 	/* end: U+FA0D */
-unicode_to_big5_0_2b_FE30[]; 	/* end: U+FE6B */
-unicode_to_big5_0_2b_FF01[]; 	/* end: U+FF64 */
-unicode_to_big5_0_2b_FFFD[]; 	/* end: U+FFFD */
-unicode_to_ksc5601_1987_0_2b_00A1[]; 	/* end: U+0167 */
-unicode_to_ksc5601_1987_0_2b_02C7[]; 	/* end: U+02DD */
-unicode_to_ksc5601_1987_0_2b_0391[]; 	/* end: U+0451 */
-unicode_to_ksc5601_1987_0_2b_2015[]; 	/* end: U+2312 */
-unicode_to_ksc5601_1987_0_2b_2460[]; 	/* end: U+266D */
-unicode_to_ksc5601_1987_0_2b_3000[]; 	/* end: U+327F */
-unicode_to_ksc5601_1987_0_2b_3380[]; 	/* end: U+33DD */
-unicode_to_ksc5601_1987_0_2b_4E00[]; 	/* end: U+7E9C */
-unicode_to_ksc5601_1987_0_2b_7F36[]; 	/* end: U+8B9A */
-unicode_to_ksc5601_1987_0_2b_8C37[]; 	/* end: U+947F */
-unicode_to_ksc5601_1987_0_2b_9577[]; 	/* end: U+9C57 */
-unicode_to_ksc5601_1987_0_2b_9CE5[]; 	/* end: U+9F9C */
-unicode_to_ksc5601_1987_0_2b_AC00[]; 	/* end: U+D79D */
-unicode_to_ksc5601_1987_0_2b_F900[]; 	/* end: U+FA0B */
-unicode_to_ksc5601_1987_0_2b_FF01[]; 	/* end: U+FF5E */
-unicode_to_ksc5601_1987_0_2b_FFE0[]; 	/* end: U+FFE6 */
-unicode_to_gb2312_1980_0_2b_00A4[]; 	/* end: U+01DC */
-unicode_to_gb2312_1980_0_2b_02C7[]; 	/* end: U+02C9 */
-unicode_to_gb2312_1980_0_2b_0391[]; 	/* end: U+0451 */
-unicode_to_gb2312_1980_0_2b_2015[]; 	/* end: U+203B */
-unicode_to_gb2312_1980_0_2b_2103[]; 	/* end: U+2312 */
-unicode_to_gb2312_1980_0_2b_2460[]; 	/* end: U+2642 */
-unicode_to_gb2312_1980_0_2b_3000[]; 	/* end: U+3129 */
-unicode_to_gb2312_1980_0_2b_3220[]; 	/* end: U+3229 */
-unicode_to_gb2312_1980_0_2b_4E00[]; 	/* end: U+7DAE */
-unicode_to_gb2312_1980_0_2b_7E3B[]; 	/* end: U+8C98 */
-unicode_to_gb2312_1980_0_2b_8D1D[]; 	/* end: U+8ECE */
-unicode_to_gb2312_1980_0_2b_8F66[]; 	/* end: U+91DC */
-unicode_to_gb2312_1980_0_2b_9274[]; 	/* end: U+99A8 */
-unicode_to_gb2312_1980_0_2b_9A6C[]; 	/* end: U+9B54 */
-unicode_to_gb2312_1980_0_2b_9C7C[]; 	/* end: U+9CE2 */
-unicode_to_gb2312_1980_0_2b_9E1F[]; 	/* end: U+9FA0 */
-unicode_to_gb2312_1980_0_2b_FF01[]; 	/* end: U+FF5E */
-unicode_to_gb2312_1980_0_2b_FFE0[]; 	/* end: U+FFE5 */
-unicode_to_jisx0201_1976_0_1b_0020[]; 	/* end: U+00A5 */
-unicode_to_jisx0201_1976_0_1b_203E[]; 	/* end: U+203E */
-unicode_to_jisx0201_1976_0_1b_FF61[]; 	/* end: U+FF9F */
-unicode_to_jisx0208_1983_0_2b_005C[]; 	/* end: U+00F7 */
-unicode_to_jisx0208_1983_0_2b_0391[]; 	/* end: U+0451 */
-unicode_to_jisx0208_1983_0_2b_2010[]; 	/* end: U+203B */
-unicode_to_jisx0208_1983_0_2b_2103[]; 	/* end: U+2312 */
-unicode_to_jisx0208_1983_0_2b_2500[]; 	/* end: U+266F */
-unicode_to_jisx0208_1983_0_2b_3000[]; 	/* end: U+30FE */
-unicode_to_jisx0208_1983_0_2b_4E00[]; 	/* end: U+7E9C */
-unicode_to_jisx0208_1983_0_2b_7F36[]; 	/* end: U+8B9A */
-unicode_to_jisx0208_1983_0_2b_8C37[]; 	/* end: U+9481 */
-unicode_to_jisx0208_1983_0_2b_9577[]; 	/* end: U+9FA0 */
-unicode_to_jisx0208_1983_0_2b_FF01[]; 	/* end: U+FF5D */
-unicode_to_jisx0208_1983_0_2b_FFE3[]; 	/* end: U+FFE5 */
-unicode_to_jisx0212_1990_0_2b_007E[]; 	/* end: U+01F5 */
-unicode_to_jisx0212_1990_0_2b_02C7[]; 	/* end: U+02DD */
-unicode_to_jisx0212_1990_0_2b_0384[]; 	/* end: U+045F */
-unicode_to_jisx0212_1990_0_2b_2116[]; 	/* end: U+2122 */
-unicode_to_jisx0212_1990_0_2b_4E02[]; 	/* end: U+7E9E */
-unicode_to_jisx0212_1990_0_2b_7F3B[]; 	/* end: U+8B9F */
-unicode_to_jisx0212_1990_0_2b_8C38[]; 	/* end: U+9484 */
-unicode_to_jisx0212_1990_0_2b_9578[]; 	/* end: U+9FA5 */
-unicode_to_symbol_1b_0020[]; 	/* end: U+00F7 */
-unicode_to_symbol_1b_0192[]; 	/* end: U+0192 */
-unicode_to_symbol_1b_0391[]; 	/* end: U+03D6 */
-unicode_to_symbol_1b_2022[]; 	/* end: U+232A */
-unicode_to_symbol_1b_25CA[]; 	/* end: U+25CA */
-unicode_to_symbol_1b_2660[]; 	/* end: U+2666 */
-unicode_to_symbol_1b_F6D9[]; 	/* end: U+F6DB */
-unicode_to_symbol_1b_F8E5[]; 	/* end: U+F8FE */
-unicode_to_dingbats_1b_0020[]; 	/* end: U+00A0 */
-unicode_to_dingbats_1b_2192[]; 	/* end: U+2195 */
-unicode_to_dingbats_1b_2460[]; 	/* end: U+2469 */
-unicode_to_dingbats_1b_25A0[]; 	/* end: U+2666 */
-unicode_to_dingbats_1b_2701[]; 	/* end: U+27BE */
-unicode_to_dingbats_1b_F8D7[]; 	/* end: U+F8E4 */
diff --git a/common/fltk/src/xutf8/imKStoUCS.c b/common/fltk/src/xutf8/imKStoUCS.c
deleted file mode 100644
index 802b005..0000000
--- a/common/fltk/src/xutf8/imKStoUCS.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/* $XFree86: xc/lib/X11/imKStoUCS.c,v 1.5 2003/11/17 22:20:11 dawes Exp $ */
-
-#include "Xlibint.h"
-#include "Ximint.h"
-
-static unsigned short const keysym_to_unicode_1a1_1ff[] = {
-            0x0104, 0x02d8, 0x0141, 0x0000, 0x013d, 0x015a, 0x0000, /* 0x01a0-0x01a7 */
-    0x0000, 0x0160, 0x015e, 0x0164, 0x0179, 0x0000, 0x017d, 0x017b, /* 0x01a8-0x01af */
-    0x0000, 0x0105, 0x02db, 0x0142, 0x0000, 0x013e, 0x015b, 0x02c7, /* 0x01b0-0x01b7 */
-    0x0000, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, /* 0x01b8-0x01bf */
-    0x0154, 0x0000, 0x0000, 0x0102, 0x0000, 0x0139, 0x0106, 0x0000, /* 0x01c0-0x01c7 */
-    0x010c, 0x0000, 0x0118, 0x0000, 0x011a, 0x0000, 0x0000, 0x010e, /* 0x01c8-0x01cf */
-    0x0110, 0x0143, 0x0147, 0x0000, 0x0000, 0x0150, 0x0000, 0x0000, /* 0x01d0-0x01d7 */
-    0x0158, 0x016e, 0x0000, 0x0170, 0x0000, 0x0000, 0x0162, 0x0000, /* 0x01d8-0x01df */
-    0x0155, 0x0000, 0x0000, 0x0103, 0x0000, 0x013a, 0x0107, 0x0000, /* 0x01e0-0x01e7 */
-    0x010d, 0x0000, 0x0119, 0x0000, 0x011b, 0x0000, 0x0000, 0x010f, /* 0x01e8-0x01ef */
-    0x0111, 0x0144, 0x0148, 0x0000, 0x0000, 0x0151, 0x0000, 0x0000, /* 0x01f0-0x01f7 */
-    0x0159, 0x016f, 0x0000, 0x0171, 0x0000, 0x0000, 0x0163, 0x02d9  /* 0x01f8-0x01ff */
-};
-
-static unsigned short const keysym_to_unicode_2a1_2fe[] = {
-            0x0126, 0x0000, 0x0000, 0x0000, 0x0000, 0x0124, 0x0000, /* 0x02a0-0x02a7 */
-    0x0000, 0x0130, 0x0000, 0x011e, 0x0134, 0x0000, 0x0000, 0x0000, /* 0x02a8-0x02af */
-    0x0000, 0x0127, 0x0000, 0x0000, 0x0000, 0x0000, 0x0125, 0x0000, /* 0x02b0-0x02b7 */
-    0x0000, 0x0131, 0x0000, 0x011f, 0x0135, 0x0000, 0x0000, 0x0000, /* 0x02b8-0x02bf */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x010a, 0x0108, 0x0000, /* 0x02c0-0x02c7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x02c8-0x02cf */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0120, 0x0000, 0x0000, /* 0x02d0-0x02d7 */
-    0x011c, 0x0000, 0x0000, 0x0000, 0x0000, 0x016c, 0x015c, 0x0000, /* 0x02d8-0x02df */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x010b, 0x0109, 0x0000, /* 0x02e0-0x02e7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x02e8-0x02ef */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0121, 0x0000, 0x0000, /* 0x02f0-0x02f7 */
-    0x011d, 0x0000, 0x0000, 0x0000, 0x0000, 0x016d, 0x015d          /* 0x02f8-0x02ff */
-};
-
-static unsigned short const keysym_to_unicode_3a2_3fe[] = {
-                    0x0138, 0x0156, 0x0000, 0x0128, 0x013b, 0x0000, /* 0x03a0-0x03a7 */
-    0x0000, 0x0000, 0x0112, 0x0122, 0x0166, 0x0000, 0x0000, 0x0000, /* 0x03a8-0x03af */
-    0x0000, 0x0000, 0x0000, 0x0157, 0x0000, 0x0129, 0x013c, 0x0000, /* 0x03b0-0x03b7 */
-    0x0000, 0x0000, 0x0113, 0x0123, 0x0167, 0x014a, 0x0000, 0x014b, /* 0x03b8-0x03bf */
-    0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012e, /* 0x03c0-0x03c7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0116, 0x0000, 0x0000, 0x012a, /* 0x03c8-0x03cf */
-    0x0000, 0x0145, 0x014c, 0x0136, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x03d0-0x03d7 */
-    0x0000, 0x0172, 0x0000, 0x0000, 0x0000, 0x0168, 0x016a, 0x0000, /* 0x03d8-0x03df */
-    0x0101, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012f, /* 0x03e0-0x03e7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0117, 0x0000, 0x0000, 0x012b, /* 0x03e8-0x03ef */
-    0x0000, 0x0146, 0x014d, 0x0137, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x03f0-0x03f7 */
-    0x0000, 0x0173, 0x0000, 0x0000, 0x0000, 0x0169, 0x016b          /* 0x03f8-0x03ff */
-};
-
-static unsigned short const keysym_to_unicode_4a1_4df[] = {
-            0x3002, 0x3008, 0x3009, 0x3001, 0x30fb, 0x30f2, 0x30a1, /* 0x04a0-0x04a7 */
-    0x30a3, 0x30a5, 0x30a7, 0x30a9, 0x30e3, 0x30e5, 0x30e7, 0x30c3, /* 0x04a8-0x04af */
-    0x30fc, 0x30a2, 0x30a4, 0x30a6, 0x30a8, 0x30aa, 0x30ab, 0x30ad, /* 0x04b0-0x04b7 */
-    0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7, 0x30b9, 0x30bb, 0x30bd, /* 0x04b8-0x04bf */
-    0x30bf, 0x30c1, 0x30c4, 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, /* 0x04c0-0x04c7 */
-    0x30cd, 0x30ce, 0x30cf, 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, /* 0x04c8-0x04cf */
-    0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30e9, /* 0x04d0-0x04d7 */
-    0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f3, 0x309b, 0x309c  /* 0x04d8-0x04df */
-};
-
-static unsigned short const keysym_to_unicode_590_5fe[] = {
-    0x06f0, 0x06f1, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06f6, 0x06f7, /* 0x0590-0x0597 */
-    0x06f8, 0x06f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0598-0x059f */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x066a, 0x0670, 0x0679, /* 0x05a0-0x05a7 */
-	
-    0x067e, 0x0686, 0x0688, 0x0691, 0x060c, 0x0000, 0x06d4, 0x0000, /* 0x05ac-0x05af */
-    0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, /* 0x05b0-0x05b7 */
-    0x0668, 0x0669, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f, /* 0x05b8-0x05bf */
-    0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, /* 0x05c0-0x05c7 */
-    0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, /* 0x05c8-0x05cf */
-    0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, /* 0x05d0-0x05d7 */
-    0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x05d8-0x05df */
-    0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, /* 0x05e0-0x05e7 */
-    0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, /* 0x05e8-0x05ef */
-    0x0650, 0x0651, 0x0652, 0x0653, 0x0654, 0x0655, 0x0698, 0x06a4, /* 0x05f0-0x05f7 */
-    0x06a9, 0x06af, 0x06ba, 0x06be, 0x06cc, 0x06d2, 0x06c1          /* 0x05f8-0x05fe */
-};
-
-static unsigned short keysym_to_unicode_680_6ff[] = {
-    0x0492, 0x0496, 0x049a, 0x049c, 0x04a2, 0x04ae, 0x04b0, 0x04b2, /* 0x0680-0x0687 */
-    0x04b6, 0x04b8, 0x04ba, 0x0000, 0x04d8, 0x04e2, 0x04e8, 0x04ee, /* 0x0688-0x068f */
-    0x0493, 0x0497, 0x049b, 0x049d, 0x04a3, 0x04af, 0x04b1, 0x04b3, /* 0x0690-0x0697 */
-    0x04b7, 0x04b9, 0x04bb, 0x0000, 0x04d9, 0x04e3, 0x04e9, 0x04ef, /* 0x0698-0x069f */
-    0x0000, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457, /* 0x06a0-0x06a7 */
-    0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0491, 0x045e, 0x045f, /* 0x06a8-0x06af */
-    0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, /* 0x06b0-0x06b7 */
-    0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x0490, 0x040e, 0x040f, /* 0x06b8-0x06bf */
-    0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, /* 0x06c0-0x06c7 */
-    0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, /* 0x06c8-0x06cf */
-    0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, /* 0x06d0-0x06d7 */
-    0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, /* 0x06d8-0x06df */
-    0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, /* 0x06e0-0x06e7 */
-    0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, /* 0x06e8-0x06ef */
-    0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, /* 0x06f0-0x06f7 */
-    0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a  /* 0x06f8-0x06ff */
-};
-
-static unsigned short const keysym_to_unicode_7a1_7f9[] = {
-            0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c, /* 0x07a0-0x07a7 */
-    0x038e, 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015, /* 0x07a8-0x07af */
-    0x0000, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, /* 0x07b0-0x07b7 */
-    0x03cd, 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x07b8-0x07bf */
-    0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0x07c0-0x07c7 */
-    0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, /* 0x07c8-0x07cf */
-    0x03a0, 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7, /* 0x07d0-0x07d7 */
-    0x03a8, 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x07d8-0x07df */
-    0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, /* 0x07e0-0x07e7 */
-    0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, /* 0x07e8-0x07ef */
-    0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, /* 0x07f0-0x07f7 */
-    0x03c8, 0x03c9                                                  /* 0x07f8-0x07ff */
-};
-
-static unsigned short const keysym_to_unicode_8a4_8fe[] = {
-                                    0x2320, 0x2321, 0x0000, 0x231c, /* 0x08a0-0x08a7 */
-    0x231d, 0x231e, 0x231f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08a8-0x08af */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08b0-0x08b7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222b, /* 0x08b8-0x08bf */
-    0x2234, 0x0000, 0x221e, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000, /* 0x08c0-0x08c7 */
-    0x2245, 0x2246, 0x0000, 0x0000, 0x0000, 0x0000, 0x22a2, 0x0000, /* 0x08c8-0x08cf */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221a, 0x0000, /* 0x08d0-0x08d7 */
-    0x0000, 0x0000, 0x2282, 0x2283, 0x2229, 0x222a, 0x2227, 0x2228, /* 0x08d8-0x08df */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08e0-0x08e7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08e8-0x08ef */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000, /* 0x08f0-0x08f7 */
-    0x0000, 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193          /* 0x08f8-0x08ff */
-};
-
-static unsigned short const keysym_to_unicode_9df_9f8[] = {
-                                                            0x2422, /* 0x09d8-0x09df */
-    0x2666, 0x25a6, 0x2409, 0x240c, 0x240d, 0x240a, 0x0000, 0x0000, /* 0x09e0-0x09e7 */
-    0x240a, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x2500, /* 0x09e8-0x09ef */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x251c, 0x2524, 0x2534, 0x252c, /* 0x09f0-0x09f7 */
-    0x2502                                                          /* 0x09f8-0x09ff */
-};
-
-static unsigned short const keysym_to_unicode_aa1_afe[] = {
-            0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, /* 0x0aa0-0x0aa7 */
-    0x200a, 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025, /* 0x0aa8-0x0aaf */
-    0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, /* 0x0ab0-0x0ab7 */
-    0x2105, 0x0000, 0x0000, 0x2012, 0x2039, 0x2024, 0x203a, 0x0000, /* 0x0ab8-0x0abf */
-    0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000, /* 0x0ac0-0x0ac7 */
-    0x0000, 0x2122, 0x2120, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25ad, /* 0x0ac8-0x0acf */
-    0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033, /* 0x0ad0-0x0ad7 */
-    0x0000, 0x271d, 0x0000, 0x220e, 0x25c2, 0x2023, 0x25cf, 0x25ac, /* 0x0ad8-0x0adf */
-    0x25e6, 0x25ab, 0x25ae, 0x25b5, 0x25bf, 0x2606, 0x2022, 0x25aa, /* 0x0ae0-0x0ae7 */
-    0x25b4, 0x25be, 0x261a, 0x261b, 0x2663, 0x2666, 0x2665, 0x0000, /* 0x0ae8-0x0aef */
-    0x2720, 0x2020, 0x2021, 0x2713, 0x2612, 0x266f, 0x266d, 0x2642, /* 0x0af0-0x0af7 */
-    0x2640, 0x2121, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e          /* 0x0af8-0x0aff */
-};
-
-/* none of the APL keysyms match the Unicode characters */
-
-static unsigned short const keysym_to_unicode_cdf_cfa[] = {
-                                                            0x2017, /* 0x0cd8-0x0cdf */
-    0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, /* 0x0ce0-0x0ce7 */
-    0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, /* 0x0ce8-0x0cef */
-    0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, /* 0x0cf0-0x0cf7 */
-    0x05e8, 0x05e9, 0x05ea                                          /* 0x0cf8-0x0cff */
-};
-
-static unsigned short const keysym_to_unicode_da1_df9[] = {
-            0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, /* 0x0da0-0x0da7 */
-    0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, /* 0x0da8-0x0daf */
-    0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, /* 0x0db0-0x0db7 */
-    0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, /* 0x0db8-0x0dbf */
-    0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, /* 0x0dc0-0x0dc7 */
-    0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, /* 0x0dc8-0x0dcf */
-    0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, /* 0x0dd0-0x0dd7 */
-    0x0e38, 0x0e39, 0x0e3a, 0x0000, 0x0000, 0x0000, 0x0e3e, 0x0e3f, /* 0x0dd8-0x0ddf */
-    0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, /* 0x0de0-0x0de7 */
-    0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0000, 0x0000, /* 0x0de8-0x0def */
-    0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, /* 0x0df0-0x0df7 */
-    0x0e58, 0x0e59                                                  /* 0x0df8-0x0dff */
-};
-
-static unsigned short const keysym_to_unicode_ea0_eff[] = {
-    0x0000, 0x1101, 0x1101, 0x11aa, 0x1102, 0x11ac, 0x11ad, 0x1103, /* 0x0ea0-0x0ea7 */
-    0x1104, 0x1105, 0x11b0, 0x11b1, 0x11b2, 0x11b3, 0x11b4, 0x11b5, /* 0x0ea8-0x0eaf */
-    0x11b6, 0x1106, 0x1107, 0x1108, 0x11b9, 0x1109, 0x110a, 0x110b, /* 0x0eb0-0x0eb7 */
-    0x110c, 0x110d, 0x110e, 0x110f, 0x1110, 0x1111, 0x1112, 0x1161, /* 0x0eb8-0x0ebf */
-    0x1162, 0x1163, 0x1164, 0x1165, 0x1166, 0x1167, 0x1168, 0x1169, /* 0x0ec0-0x0ec7 */
-    0x116a, 0x116b, 0x116c, 0x116d, 0x116e, 0x116f, 0x1170, 0x1171, /* 0x0ec8-0x0ecf */
-    0x1172, 0x1173, 0x1174, 0x1175, 0x11a8, 0x11a9, 0x11aa, 0x11ab, /* 0x0ed0-0x0ed7 */
-    0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3, /* 0x0ed8-0x0edf */
-    0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb, /* 0x0ee0-0x0ee7 */
-    0x11bc, 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x0000, /* 0x0ee8-0x0eef */
-    0x0000, 0x0000, 0x1140, 0x0000, 0x0000, 0x1159, 0x119e, 0x0000, /* 0x0ef0-0x0ef7 */
-    0x11eb, 0x0000, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9, /* 0x0ef8-0x0eff */
-};
-
-static unsigned short keysym_to_unicode_12a1_12fe[] = {
-            0x1e02, 0x1e03, 0x0000, 0x0000, 0x0000, 0x1e0a, 0x0000, /* 0x12a0-0x12a7 */
-    0x1e80, 0x0000, 0x1e82, 0x1e0b, 0x1ef2, 0x0000, 0x0000, 0x0000, /* 0x12a8-0x12af */
-    0x1e1e, 0x1e1f, 0x0000, 0x0000, 0x1e40, 0x1e41, 0x0000, 0x1e56, /* 0x12b0-0x12b7 */
-    0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, /* 0x12b8-0x12bf */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12c0-0x12c7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12c8-0x12cf */
-    0x0174, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1e6a, /* 0x12d0-0x12d7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0176, 0x0000, /* 0x12d8-0x12df */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12e0-0x12e7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12e8-0x12ef */
-    0x0175, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1e6b, /* 0x12f0-0x12f7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0177          /* 0x12f0-0x12ff */
-};
-		
-static unsigned short const keysym_to_unicode_13bc_13be[] = {
-                                    0x0152, 0x0153, 0x0178          /* 0x13b8-0x13bf */
-};
-
-static unsigned short keysym_to_unicode_14a1_14ff[] = {
-            0x2741, 0x00a7, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab, /* 0x14a0-0x14a7 */
-    0x2014, 0x002e, 0x055d, 0x002c, 0x2013, 0x058a, 0x2026, 0x055c, /* 0x14a8-0x14af */
-    0x055b, 0x055e, 0x0531, 0x0561, 0x0532, 0x0562, 0x0533, 0x0563, /* 0x14b0-0x14b7 */
-    0x0534, 0x0564, 0x0535, 0x0565, 0x0536, 0x0566, 0x0537, 0x0567, /* 0x14b8-0x14bf */
-    0x0538, 0x0568, 0x0539, 0x0569, 0x053a, 0x056a, 0x053b, 0x056b, /* 0x14c0-0x14c7 */
-    0x053c, 0x056c, 0x053d, 0x056d, 0x053e, 0x056e, 0x053f, 0x056f, /* 0x14c8-0x14cf */
-    0x0540, 0x0570, 0x0541, 0x0571, 0x0542, 0x0572, 0x0543, 0x0573, /* 0x14d0-0x14d7 */
-    0x0544, 0x0574, 0x0545, 0x0575, 0x0546, 0x0576, 0x0547, 0x0577, /* 0x14d8-0x14df */
-    0x0548, 0x0578, 0x0549, 0x0579, 0x054a, 0x057a, 0x054b, 0x057b, /* 0x14e0-0x14e7 */
-    0x054c, 0x057c, 0x054d, 0x057d, 0x054e, 0x057e, 0x054f, 0x057f, /* 0x14e8-0x14ef */
-    0x0550, 0x0580, 0x0551, 0x0581, 0x0552, 0x0582, 0x0553, 0x0583, /* 0x14f0-0x14f7 */
-    0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x2019, 0x0027, /* 0x14f8-0x14ff */
-};
-
-static unsigned short keysym_to_unicode_15d0_15f6[] = {
-    0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7, /* 0x15d0-0x15d7 */
-    0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df, /* 0x15d8-0x15df */
-    0x10e0, 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, /* 0x15e0-0x15e7 */
-    0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef, /* 0x15e8-0x15ef */
-    0x10f0, 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0x10f6          /* 0x15f0-0x15f7 */
-};
-
-static unsigned short keysym_to_unicode_16a0_16f6[] = {
-    0x0000, 0x0000, 0xf0a2, 0x1e8a, 0x0000, 0xf0a5, 0x012c, 0xf0a7, /* 0x16a0-0x16a7 */
-    0xf0a8, 0x01b5, 0x01e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x019f, /* 0x16a8-0x16af */
-    0x0000, 0x0000, 0xf0b2, 0x1e8b, 0x01d1, 0xf0b5, 0x012d, 0xf0b7, /* 0x16b0-0x16b7 */
-    0xf0b8, 0x01b6, 0x01e7, 0x0000, 0x0000, 0x01d2, 0x0000, 0x0275, /* 0x16b8-0x16bf */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x018f, 0x0000, /* 0x16c0-0x16c7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16c8-0x16cf */
-    0x0000, 0x1e36, 0xf0d2, 0xf0d3, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16d0-0x16d7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16d8-0x16df */
-    0x0000, 0x1e37, 0xf0e2, 0xf0e3, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16e0-0x16e7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16e8-0x16ef */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0259          /* 0x16f0-0x16f6 */
-};
-
-static unsigned short const keysym_to_unicode_1e9f_1eff[] = {
-                                                            0x0303,
-    0x1ea0, 0x1ea1, 0x1ea2, 0x1ea3, 0x1ea4, 0x1ea5, 0x1ea6, 0x1ea7, /* 0x1ea0-0x1ea7 */
-    0x1ea8, 0x1ea9, 0x1eaa, 0x1eab, 0x1eac, 0x1ead, 0x1eae, 0x1eaf, /* 0x1ea8-0x1eaf */
-    0x1eb0, 0x1eb1, 0x1eb2, 0x1eb3, 0x1eb4, 0x1eb5, 0x1eb6, 0x1eb7, /* 0x1eb0-0x1eb7 */
-    0x1eb8, 0x1eb9, 0x1eba, 0x1ebb, 0x1ebc, 0x1ebd, 0x1ebe, 0x1ebf, /* 0x1eb8-0x1ebf */
-    0x1ec0, 0x1ec1, 0x1ec2, 0x1ec3, 0x1ec4, 0x1ec5, 0x1ec6, 0x1ec7, /* 0x1ec0-0x1ec7 */
-    0x1ec8, 0x1ec9, 0x1eca, 0x1ecb, 0x1ecc, 0x1ecd, 0x1ece, 0x1ecf, /* 0x1ec8-0x1ecf */
-    0x1ed0, 0x1ed1, 0x1ed2, 0x1ed3, 0x1ed4, 0x1ed5, 0x1ed6, 0x1ed7, /* 0x1ed0-0x1ed7 */
-    0x1ed8, 0x1ed9, 0x1eda, 0x1edb, 0x1edc, 0x1edd, 0x1ede, 0x1edf, /* 0x1ed8-0x1edf */
-    0x1ee0, 0x1ee1, 0x1ee2, 0x1ee3, 0x1ee4, 0x1ee5, 0x1ee6, 0x1ee7, /* 0x1ee0-0x1ee7 */
-    0x1ee8, 0x1ee9, 0x1eea, 0x1eeb, 0x1eec, 0x1eed, 0x1eee, 0x1eef, /* 0x1ee8-0x1eef */
-    0x1ef0, 0x1ef1, 0x0300, 0x0301, 0x1ef4, 0x1ef5, 0x1ef6, 0x1ef7, /* 0x1ef0-0x1ef7 */
-    0x1ef8, 0x1ef9, 0x01a0, 0x01a1, 0x01af, 0x01b0, 0x0309, 0x0323  /* 0x1ef8-0x1eff */
-};
-
-static unsigned short const keysym_to_unicode_20a0_20ac[] = {
-    0x20a0, 0x20a1, 0x20a2, 0x20a3, 0x20a4, 0x20a5, 0x20a6, 0x20a7, /* 0x20a0-0x20a7 */
-    0x20a8, 0x20a9, 0x20aa, 0x20ab, 0x20ac                          /* 0x20a8-0x20af */
-};
-
-static unsigned short const keysym_to_unicode_fe50_fe60[] = {
-    0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0306, 0x0307, 0x0308, /* 0xfe50-0xfe57 */
-    0x030a, 0x030b, 0x030c, 0x0327, 0x0328, 0x1da5, 0x3099, 0x309a, /* 0xfe58-0xfe5f */
-    0x0323                                                          /* 0xfe60-0xfe67 */
-};
-
-unsigned int
-KeySymToUcs4(KeySym keysym)
-{
-    /* 'Unicode keysym' */
-    if ((keysym & 0xff000000) == 0x01000000)
-        return (keysym & 0x00ffffff);
-
-    if (keysym > 0 && keysym < 0x100)
-	return keysym;
-    else if (keysym > 0x1a0 && keysym < 0x200)
-	return keysym_to_unicode_1a1_1ff[keysym - 0x1a1];
-    else if (keysym > 0x2a0 && keysym < 0x2ff)
-	return keysym_to_unicode_2a1_2fe[keysym - 0x2a1];
-    else if (keysym > 0x3a1 && keysym < 0x3ff)
-	return keysym_to_unicode_3a2_3fe[keysym - 0x3a2];
-    else if (keysym > 0x4a0 && keysym < 0x4e0)
-	return keysym_to_unicode_4a1_4df[keysym - 0x4a1];
-    else if (keysym > 0x589 && keysym < 0x5ff)
-	return keysym_to_unicode_590_5fe[keysym - 0x590];
-    else if (keysym > 0x67f && keysym < 0x700)
-	return keysym_to_unicode_680_6ff[keysym - 0x680];
-    else if (keysym > 0x7a0 && keysym < 0x7fa)
-	return keysym_to_unicode_7a1_7f9[keysym - 0x7a1];
-    else if (keysym > 0x8a3 && keysym < 0x8ff)
-	return keysym_to_unicode_8a4_8fe[keysym - 0x8a4];
-    else if (keysym > 0x9de && keysym < 0x9f9)
-	return keysym_to_unicode_9df_9f8[keysym - 0x9df];
-    else if (keysym > 0xaa0 && keysym < 0xaff)
-	return keysym_to_unicode_aa1_afe[keysym - 0xaa1];
-    else if (keysym > 0xcde && keysym < 0xcfb)
-	return keysym_to_unicode_cdf_cfa[keysym - 0xcdf];
-    else if (keysym > 0xda0 && keysym < 0xdfa)
-	return keysym_to_unicode_da1_df9[keysym - 0xda1];
-    else if (keysym > 0xe9f && keysym < 0xf00)
-	return keysym_to_unicode_ea0_eff[keysym - 0xea0];
-    else if (keysym > 0x12a0 && keysym < 0x12ff)
-	return keysym_to_unicode_12a1_12fe[keysym - 0x12a1];
-    else if (keysym > 0x13bb && keysym < 0x13bf)
-	return keysym_to_unicode_13bc_13be[keysym - 0x13bc];
-    else if (keysym > 0x14a0 && keysym < 0x1500)
-        return keysym_to_unicode_14a1_14ff[keysym - 0x14a1];
-    else if (keysym > 0x15cf && keysym < 0x15f7)
-	return keysym_to_unicode_15d0_15f6[keysym - 0x15d0];
-    else if (keysym > 0x169f && keysym < 0x16f7)
-	return keysym_to_unicode_16a0_16f6[keysym - 0x16a0];
-    else if (keysym > 0x1e9e && keysym < 0x1f00)
-	return keysym_to_unicode_1e9f_1eff[keysym - 0x1e9f];
-    else if (keysym > 0x209f && keysym < 0x20ad)
-	return keysym_to_unicode_20a0_20ac[keysym - 0x20a0];
-    else if (keysym > 0xfe4f && keysym < 0xfe61)
-	return keysym_to_unicode_fe50_fe60[keysym - 0xfe50];
-    else 
-	return 0;
-}
-
-/*
- * End of "$Id$".
- */
diff --git a/common/fltk/src/xutf8/is_right2left.c b/common/fltk/src/xutf8/is_right2left.c
deleted file mode 100644
index d823452..0000000
--- a/common/fltk/src/xutf8/is_right2left.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2010 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * This file is required on all platforms for utf8 support
- */
-
-unsigned short 
-XUtf8IsRightToLeft(unsigned int ucs) {
-
-#if 0
-  /* for debug only */
-  if (ucs <= 0x005A) {
-    if (ucs >= 0x0041) return 1;
-    return 0;
-  }
-#endif
-
-  /* HEBREW */
-  if (ucs <= 0x05F4) {
-    if (ucs >= 0x0591) return 1;
-    return 0;
-  }
-  
-  /* ARABIC */
-  if (ucs <= 0x06ED) {
-    if (ucs >= 0x060C)  return 1;
-    return 0;
-  }
-
-  if (ucs <= 0x06F9) {
-    if (ucs >= 0x06F0) return 1;
-    return 0;
-  }
-
-  if (ucs == 0x200F) return 1;
-
-  if (ucs == 0x202B) return 1;
-
-  if (ucs == 0x202E) return 1;
-
-  if (ucs <= 0xFB4F) {
-    if (ucs >= 0xFB1E) return 1;
-    return 0;
-  }
-  
-  if (ucs <= 0xFDFB) {
-    if (ucs >= 0xFB50) return 1;
-    return 0;
-  }
-
-  if (ucs <= 0xFEFC) {
-    if (ucs >= 0xFE70) return 1;
-    return 0;
-  }
-
-  return 0;
-}
-
-/*
- * End of "$Id$".
- */
diff --git a/common/fltk/src/xutf8/is_spacing.c b/common/fltk/src/xutf8/is_spacing.c
deleted file mode 100644
index 2035ff7..0000000
--- a/common/fltk/src/xutf8/is_spacing.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2010 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * This file is required on all platforms for utf8 support
- */
-
-#include "headers/spacing.h"
-
-unsigned short 
-XUtf8IsNonSpacing(unsigned int ucs) {
-
-  if (ucs <= 0x0361) {
-    if (ucs >= 0x0300) return ucs_table_0300[ucs - 0x0300];
-    return 0;
-  }
-
-  if (ucs <= 0x0486) {
-    if (ucs >= 0x0483) return ucs_table_0483[ucs - 0x0483];
-    return 0;
-  }
-
-  if (ucs <= 0x05C4) {
-    if (ucs >= 0x0591) return ucs_table_0591[ucs - 0x0591];
-    return 0;
-  }
-
-  if (ucs <= 0x06ED) {
-    if (ucs >= 0x064B) return ucs_table_064B[ucs - 0x064B];
-    return 0;
-  }
-
-  if (ucs <= 0x0D4D) {
-    if (ucs >= 0x0901) return ucs_table_0901[ucs - 0x0901];
-    return 0;
-  }
-
-  if (ucs <= 0x0FB9) {
-    if (ucs >= 0x0E31) return ucs_table_0E31[ucs - 0x0E31];
-    return 0;
-  }
-
-  if (ucs <= 0x20E1) {
-    if (ucs >= 0x20D0) return ucs_table_20D0[ucs - 0x20D0];
-    return 0;
-  }
-
-  if (ucs <= 0x309A) {
-    if (ucs >= 0x302A) return ucs_table_302A[ucs - 0x302A];
-    return 0;
-  }
-
-  if (ucs <= 0xFB1E) {
-    if (ucs >= 0xFB1E) return ucs_table_FB1E[ucs - 0xFB1E];
-    return 0;
-  }
-
-  if (ucs <= 0xFE23) {
-    if (ucs >= 0xFE20) return ucs_table_FE20[ucs - 0xFE20];
-    return 0;
-  }
-
-  return 0;
-}
-
-/*
- * End of "$Id$".
- */
diff --git a/common/fltk/src/xutf8/keysym2Ucs.c b/common/fltk/src/xutf8/keysym2Ucs.c
deleted file mode 100644
index 5bf23d1..0000000
--- a/common/fltk/src/xutf8/keysym2Ucs.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#define KEYSYM2UCS_INCLUDED
-
-#if !defined(WIN32) && !defined(__APPLE__)
-
-#include "../../FL/Xutf8.h"
-#include "imKStoUCS.c"
-
-long XKeysymToUcs(KeySym keysym) {
-  return (long) KeySymToUcs4(keysym);
-}
-
-#endif /* X11 only */
-
-/*
- * End of "$Id$".
- */
diff --git a/common/fltk/src/xutf8/lcUniConv/8bit_tab_to_h.c b/common/fltk/src/xutf8/lcUniConv/8bit_tab_to_h.c
deleted file mode 100644
index 1d79484..0000000
--- a/common/fltk/src/xutf8/lcUniConv/8bit_tab_to_h.c
+++ /dev/null
@@ -1,536 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/8bit_tab_to_h.c,v 1.3 2001/02/09 00:02:54 dawes Exp $ */
-
-/*
- * Generates an 8-bit character set table from a .TXT table as found on
- * ftp.unicode.org or from a table containing the 256 Unicode values as
- * hexadecimal integers.
- * Examples:
- *
- *   ./8bit_tab_to_h ISO-8859-1 iso8859_1 < tab8859_1
- *   ./8bit_tab_to_h ISO-8859-2 iso8859_2 < tab8859_2
- *   ./8bit_tab_to_h ISO-8859-3 iso8859_3 < tab8859_3
- *   ./8bit_tab_to_h ISO-8859-4 iso8859_4 < tab8859_4
- *   ./8bit_tab_to_h ISO-8859-5 iso8859_5 < tab8859_5
- *   ./8bit_tab_to_h ISO-8859-6 iso8859_6 < tab8859_6
- *   ./8bit_tab_to_h ISO-8859-7 iso8859_7 < tab8859_7
- *   ./8bit_tab_to_h ISO-8859-8 iso8859_8 < tab8859_8
- *   ./8bit_tab_to_h ISO-8859-9 iso8859_9 < tab8859_9
- *   ./8bit_tab_to_h ISO-8859-10 iso8859_10 < tab8859_10
- *   ./8bit_tab_to_h ISO-8859-14 iso8859_14 < tab8859_14
- *   ./8bit_tab_to_h ISO-8859-15 iso8859_15 < tab8859_15
- *   ./8bit_tab_to_h JISX0201.1976-0 jisx0201 < jis0201
- *   ./8bit_tab_to_h TIS620-0 tis620 < tabtis620
- *   ./8bit_tab_to_h KOI8-R koi8_r < tabkoi8_r
- *   ./8bit_tab_to_h KOI8-U koi8_u < tabkoi8_u
- *   ./8bit_tab_to_h ARMSCII-8 armscii_8 < tabarmscii_8
- *   ./8bit_tab_to_h CP1133 cp1133 < tabibm_cp1133
- *   ./8bit_tab_to_h MULELAO-1 mulelao < tabmulelao_1
- *   ./8bit_tab_to_h VISCII1.1-1 viscii1 < tabviscii
- *   ./8bit_tab_to_h TCVN-5712 tcvn < tabtcvn
- *   ./8bit_tab_to_h GEORGIAN-ACADEMY georgian_ac < tabgeorgian_academy
- *   ./8bit_tab_to_h GEORGIAN-PS georgian_ps < tabgeorgian_ps
- *
- *   ./8bit_tab_to_h ISO-8859-1 iso8859_1 < 8859-1.TXT
- *   ./8bit_tab_to_h ISO-8859-2 iso8859_2 < 8859-2.TXT
- *   ./8bit_tab_to_h ISO-8859-3 iso8859_3 < 8859-3.TXT
- *   ./8bit_tab_to_h ISO-8859-4 iso8859_4 < 8859-4.TXT
- *   ./8bit_tab_to_h ISO-8859-5 iso8859_5 < 8859-5.TXT
- *   ./8bit_tab_to_h ISO-8859-6 iso8859_6 < 8859-6.TXT
- *   ./8bit_tab_to_h ISO-8859-7 iso8859_7 < 8859-7.TXT
- *   ./8bit_tab_to_h ISO-8859-8 iso8859_8 < 8859-8.TXT
- *   ./8bit_tab_to_h ISO-8859-9 iso8859_9 < 8859-9.TXT
- *   ./8bit_tab_to_h ISO-8859-10 iso8859_10 < 8859-10.TXT
- *   ./8bit_tab_to_h ISO-8859-14 iso8859_14 < 8859-14.TXT
- *   ./8bit_tab_to_h ISO-8859-15 iso8859_15 < 8859-15.TXT
- *   ./8bit_tab_to_h JISX0201.1976-0 jisx0201 < JIS0201.TXT
- *   ./8bit_tab_to_h KOI8-R koi8_r < KOI8-R.TXT
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-
-int main (int argc, char *argv[])
-{
-  const char* charsetname;
-  const char* c_charsetname;
-  const char* filename;
-  const char* directory;
-  int charset2uni[0x100];
-
-  if (argc != 3 && argc != 4 && argc != 5)
-    exit(1);
-  charsetname = argv[1];
-  c_charsetname = argv[2];
-  if (argc > 3) {
-    filename = argv[3];
-  } else {
-    char* s = (char*) malloc(strlen(c_charsetname)+strlen(".h")+1);
-    strcpy(s,c_charsetname); strcat(s,".h");
-    filename = s;
-  }
-  directory = (argc > 4 ? argv[4] : "");
-
-  fprintf(stderr, "Creating %s%s\n", directory, filename);
-
-  {
-    int i, c;
-    c = getc(stdin);
-    ungetc(c,stdin);
-    if (c == '#') {
-      /* Read a unicode.org style .TXT file. */
-      for (i = 0; i < 0x100; i++)
-        charset2uni[i] = 0xfffd;
-      for (;;) {
-        c = getc(stdin);
-        if (c == EOF)
-          break;
-        if (c == '\n' || c == ' ' || c == '\t')
-          continue;
-        if (c == '#') {
-          do { c = getc(stdin); } while (!(c == EOF || c == '\n'));
-          continue;
-        }
-        ungetc(c,stdin);
-        if (scanf("0x%x", &i) != 1 || !(i >= 0 && i < 0x100))
-          exit(1);
-        do { c = getc(stdin); } while (c == ' ' || c == '\t');
-        if (c != EOF)
-          ungetc(c,stdin);
-        if (c == '\n' || c == '#')
-          continue;
-        if (scanf("0x%x", &charset2uni[i]) != 1)
-          exit(1);
-      }
-    } else {
-      /* Read a table of hexadecimal Unicode values. */
-      for (i = 0; i < 0x100; i++) {
-        if (scanf("%x", &charset2uni[i]) != 1)
-          exit(1);
-        if (charset2uni[i] < 0 || charset2uni[i] == 0xffff)
-          charset2uni[i] = 0xfffd;
-      }
-      if (scanf("%x", &i) != EOF)
-        exit(1);
-    }
-  }
-
-  /* Write the output file. */
-  {
-    FILE* f;
-
-    {
-      char* fname = malloc(strlen(directory)+strlen(filename)+1);
-      strcpy(fname,directory); strcat(fname,filename);
-      f = fopen(fname,"w");
-      if (f == NULL)
-        exit(1);
-    }
-
-    fprintf(f, "\n");
-    fprintf(f, "/*\n");
-    fprintf(f, " * %s\n", charsetname);
-    fprintf(f, " */\n");
-    fprintf(f, "\n");
-
-    {
-      int i, i1, i2, i3;
-      int line[16];
-      int tableno;
-      struct { int minline; int maxline; } tables[16];
-      bool some_invalid;
-      bool final_ret_reached;
-
-      for (i1 = 0; i1 < 16; i1++) {
-        bool all_invalid = true;
-        bool all_identity = true;
-        for (i2 = 0; i2 < 16; i2++) {
-          i = 16*i1+i2;
-          if (charset2uni[i] != 0xfffd)
-            all_invalid = false;
-          if (charset2uni[i] != i)
-            all_identity = false;
-        }
-        if (all_invalid)
-          line[i1] = -2;
-        else if (all_identity)
-          line[i1] = -1;
-        else
-          line[i1] = 0;
-      }
-      tableno = 0;
-      for (i1 = 0; i1 < 16; i1++) {
-        if (line[i1] >= 0) {
-          if (i1 > 0 && tableno > 0 && line[i1-1] == tableno-1) {
-            line[i1] = tableno-1;
-            tables[tableno-1].maxline = i1;
-          } else {
-            tableno++;
-            line[i1] = tableno-1;
-            tables[tableno-1].minline = tables[tableno-1].maxline = i1;
-          }
-        }
-      }
-      some_invalid = false;
-      for (i = 0; i < 0x100; i++)
-        if (charset2uni[i] == 0xfffd)
-          some_invalid = true;
-      if (tableno > 0) {
-        int t;
-        for (t = 0; t < tableno; t++) {
-          fprintf(f, "static const unsigned short %s_2uni", c_charsetname);
-          if (tableno > 1)
-            fprintf(f, "_%d", t+1);
-          fprintf(f, "[%d] = {\n", 16*(tables[t].maxline-tables[t].minline+1));
-          for (i1 = tables[t].minline; i1 <= tables[t].maxline; i1++) {
-            fprintf(f, "  /* 0x%02x */\n", 16*i1);
-            for (i2 = 0; i2 < 2; i2++) {
-              fprintf(f, " ");
-              for (i3 = 0; i3 < 8; i3++) {
-                i = 16*i1+8*i2+i3;
-                fprintf(f, " 0x%04x,", charset2uni[i]);
-              }
-              fprintf(f, "\n");
-            }
-          }
-          fprintf(f, "};\n");
-        }
-        fprintf(f, "\n");
-      }
-      final_ret_reached = false;
-      fprintf(f, "static int\n%s_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)\n", c_charsetname);
-      fprintf(f, "{\n");
-      fprintf(f, "  unsigned char c = *s;\n");
-      if (some_invalid) {
-        for (i1 = 0; i1 < 16;) {
-          int t = line[i1];
-          const char* indent;
-          for (i2 = i1; i2 < 16 && line[i2] == t; i2++);
-          indent = (i1 == 0 && i2 == 16 ? "  " : "    ");
-          if (i1 == 0) {
-            if (i2 == 16) {
-            } else {
-              fprintf(f, "  if (c < 0x%02x) {\n", 16*i2);
-            }
-          } else {
-            if (i2 == 16) {
-              fprintf(f, "  else {\n");
-            } else {
-              fprintf(f, "  else if (c < 0x%02x) {\n", 16*i2);
-            }
-          }
-          if (t == -2) {
-            final_ret_reached = true;
-          } else if (t == -1) {
-            fprintf(f, "%s*pwc = (ucs4_t) c;\n", indent);
-            fprintf(f, "%sreturn 1;\n", indent);
-          } else {
-            fprintf(f, "%s", indent);
-            some_invalid = false;
-            for (i = 16*i1; i < 16*i2; i++)
-              if (charset2uni[i] == 0xfffd)
-                some_invalid = true;
-            if (some_invalid)
-              fprintf(f, "unsigned short wc = ");
-            else
-              fprintf(f, "*pwc = (ucs4_t) ");
-            fprintf(f, "%s_2uni", c_charsetname);
-            if (tableno > 1)
-              fprintf(f, "_%d", t+1);
-            fprintf(f, "[c");
-            if (tables[t].minline > 0)
-              fprintf(f, "-0x%02x", 16*tables[t].minline);
-            fprintf(f, "];\n");
-            if (some_invalid) {
-              fprintf(f, "%sif (wc != 0xfffd) {\n", indent);
-              fprintf(f, "%s  *pwc = (ucs4_t) wc;\n", indent);
-              fprintf(f, "%s  return 1;\n", indent);
-              fprintf(f, "%s}\n", indent);
-              final_ret_reached = true;
-            } else {
-              fprintf(f, "%sreturn 1;\n", indent);
-            }
-          }
-          if (!(i1 == 0 && i2 == 16))
-            fprintf(f, "  }\n");
-          i1 = i2;
-        }
-        if (final_ret_reached)
-          fprintf(f, "  return RET_ILSEQ;\n");
-      } else {
-        for (i1 = 0; i1 < 16;) {
-          int t = line[i1];
-          for (i2 = i1; i2 < 16 && line[i2] == t; i2++);
-          if (i1 == 0) {
-            if (i2 == 16) {
-              fprintf(f, "  ");
-            } else {
-              fprintf(f, "  if (c < 0x%02x)\n    ", 16*i2);
-            }
-          } else {
-            if (i2 == 16) {
-              fprintf(f, "  else\n    ");
-            } else {
-              fprintf(f, "  else if (c < 0x%02x)\n    ", 16*i2);
-            }
-          }
-          if (t == -1)
-            fprintf(f, "*pwc = (ucs4_t) c;\n");
-          else {
-            fprintf(f, "*pwc = (ucs4_t) %s_2uni", c_charsetname);
-            if (tableno > 1)
-              fprintf(f, "_%d", t+1);
-            fprintf(f, "[c");
-            if (tables[t].minline > 0)
-              fprintf(f, "-0x%02x", 16*tables[t].minline);
-            fprintf(f, "];\n");
-          }
-          i1 = i2;
-        }
-        fprintf(f, "  return 1;\n");
-      }
-      fprintf(f, "}\n");
-
-    }
-
-    fprintf(f, "\n");
-
-    {
-      int uni2charset[0x10000];
-      bool pages[0x100];
-      int line[0x2000];
-      int tableno;
-      struct { int minline; int maxline; int usecount; const char* suffix; } tables[0x2000];
-      bool need_c;
-      bool fix_0000;
-      int i, j, p, j1, j2, t;
-
-      for (j = 0; j < 0x10000; j++)
-        uni2charset[j] = 0;
-      for (p = 0; p < 0x100; p++)
-        pages[p] = false;
-      for (i = 0; i < 0x100; i++) {
-        j = charset2uni[i];
-        if (j != 0xfffd) {
-          uni2charset[j] = i;
-          pages[j>>8] = true;
-        }
-      }
-      for (j1 = 0; j1 < 0x2000; j1++) {
-        bool all_invalid = true;
-        bool all_identity = true;
-        for (j2 = 0; j2 < 8; j2++) {
-          j = 8*j1+j2;
-          if (uni2charset[j] != 0)
-            all_invalid = false;
-          if (uni2charset[j] != j)
-            all_identity = false;
-        }
-        if (all_invalid)
-          line[j1] = -2;
-        else if (all_identity)
-          line[j1] = -1;
-        else
-          line[j1] = 0;
-      }
-      tableno = 0;
-      for (j1 = 0; j1 < 0x2000; j1++) {
-        if (line[j1] >= 0) {
-          if (tableno > 0
-              && ((j1 > 0 && line[j1-1] == tableno-1)
-                  || ((tables[tableno-1].maxline >> 5) == (j1 >> 5)
-                      && j1 - tables[tableno-1].maxline <= 8))) {
-            line[j1] = tableno-1;
-            tables[tableno-1].maxline = j1;
-          } else {
-            tableno++;
-            line[j1] = tableno-1;
-            tables[tableno-1].minline = tables[tableno-1].maxline = j1;
-          }
-        }
-      }
-      for (t = 0; t < tableno; t++) {
-        tables[t].usecount = 0;
-        j1 = 8*tables[t].minline;
-        j2 = 8*(tables[t].maxline+1);
-        for (j = j1; j < j2; j++)
-          if (uni2charset[j] != 0)
-            tables[t].usecount++;
-      }
-      for (t = 0, p = -1, i = 0; t < tableno; t++) {
-        if (tables[t].usecount > 1) {
-          char* s;
-          if (p == tables[t].minline >> 5) {
-            s = (char*) malloc(5+1);
-            sprintf(s, "%02x_%d", p, ++i);
-          } else {
-            p = tables[t].minline >> 5;
-            s = (char*) malloc(2+1);
-            sprintf(s, "%02x", p);
-          }
-          tables[t].suffix = s;
-        } else
-          tables[t].suffix = NULL;
-      }
-      {
-        p = -1;
-        for (t = 0; t < tableno; t++)
-          if (tables[t].usecount > 1) {
-            p = 0;
-            fprintf(f, "static const unsigned char %s_page%s[%d] = {\n", c_charsetname, tables[t].suffix, 8*(tables[t].maxline-tables[t].minline+1));
-            for (j1 = tables[t].minline; j1 <= tables[t].maxline; j1++) {
-              if ((j1 % 0x20) == 0 && j1 > tables[t].minline)
-                fprintf(f, "  /* 0x%04x */\n", 8*j1);
-              fprintf(f, " ");
-              for (j2 = 0; j2 < 8; j2++) {
-                j = 8*j1+j2;
-                fprintf(f, " 0x%02x,", uni2charset[j]);
-              }
-              fprintf(f, " /* 0x%02x-0x%02x */\n", 8*(j1 % 0x20), 8*(j1 % 0x20)+7);
-            }
-            fprintf(f, "};\n");
-          }
-        if (p >= 0)
-          fprintf(f, "\n");
-      }
-      need_c = false;
-      for (j1 = 0; j1 < 0x2000;) {
-        t = line[j1];
-        for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++);
-        if (t >= 0)
-          j2 = tables[t].maxline+1;
-        if (!(t == -2 || (t == -1 && j1 == 0)))
-          need_c = true;
-        j1 = j2;
-      }
-      fix_0000 = false;
-      fprintf(f, "static int\n%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", c_charsetname);
-      fprintf(f, "{\n");
-      if (need_c)
-        fprintf(f, "  unsigned char c = 0;\n");
-      for (j1 = 0; j1 < 0x2000;) {
-        t = line[j1];
-        for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++);
-        if (t >= 0) {
-          if (j1 != tables[t].minline) abort();
-          if (j2 > tables[t].maxline+1) abort();
-          j2 = tables[t].maxline+1;
-        }
-        if (t == -2) {
-        } else {
-          if (j1 == 0)
-            fprintf(f, "  ");
-          else
-            fprintf(f, "  else ");
-          if (t >= 0 && tables[t].usecount == 0) abort();
-          if (t >= 0 && tables[t].usecount == 1) {
-            if (j2 != j1+1) abort();
-            for (j = 8*j1; j < 8*j2; j++)
-              if (uni2charset[j] != 0) {
-                fprintf(f, "if (wc == 0x%04x)\n    c = 0x%02x;\n", j, uni2charset[j]);
-                break;
-              }
-          } else {
-            if (j1 == 0) {
-              fprintf(f, "if (wc < 0x%04x)", 8*j2);
-            } else {
-              fprintf(f, "if (wc >= 0x%04x && wc < 0x%04x)", 8*j1, 8*j2);
-            }
-            if (t == -1) {
-              if (j1 == 0)
-                /* If wc == 0, the function must return 1, not -1. */
-                fprintf(f, " {\n    *r = wc;\n    return 1;\n  }\n");
-              else
-                fprintf(f, "\n    c = wc;\n");
-            } else {
-              fprintf(f, "\n    c = %s_page%s[wc", c_charsetname, tables[t].suffix);
-              if (tables[t].minline > 0)
-                fprintf(f, "-0x%04x", 8*j1);
-              fprintf(f, "];\n");
-              if (j1 == 0 && uni2charset[0] == 0)
-                /* If wc == 0, the function must return 1, not -1. */
-                fix_0000 = true;
-            }
-          }
-        }
-        j1 = j2;
-      }
-      if (need_c) {
-        if (fix_0000)
-          fprintf(f, "  if (c != 0 || wc == 0) {\n");
-        else
-          fprintf(f, "  if (c != 0) {\n");
-        fprintf(f, "    *r = c;\n");
-        fprintf(f, "    return 1;\n");
-        fprintf(f, "  }\n");
-      }
-      fprintf(f, "  return RET_ILSEQ;\n");
-      fprintf(f, "}\n");
-
-    }
-
-    if (ferror(f) || fclose(f))
-      exit(1);
-  }
-
-#if 0
-
-    int i1, i2, i3, i1_min, i1_max, j1, j2;
-
-  i1_min = 16;
-  i1_max = -1;
-  for (i1 = 0; i1 < 16; i1++)
-    for (i2 = 0; i2 < 16; i2++)
-      if (charset2uni[16*i1+i2] != 0xfffd) {
-        if (i1_min > i1) i1_min = i1;
-        if (i1_max < i1) i1_max = i1;
-      }
-  printf("static const unsigned short %s_2uni[%d] = {\n",
-         name, 16*(i1_max-i1_min+1));
-  for (i1 = i1_min; i1 <= i1_max; i1++) {
-    printf("  /""* 0x%02x *""/\n", 16*i1);
-    for (i2 = 0; i2 < 2; i2++) {
-      printf("  ");
-      for (i3 = 0; i3 < 8; i3++) {
-        if (i3 > 0) printf(" ");
-        printf("0x%04x,", charset2uni[16*i1+8*i2+i3]);
-      }
-      printf("\n");
-    }
-  }
-  printf("};\n");
-  printf("\n");
-
-  for (p = 0; p < 0x100; p++)
-    pages[p] = 0;
-  for (i = 0; i < 0x100; i++)
-    if (charset2uni[i] != 0xfffd)
-      pages[charset2uni[i]>>8] = 1;
-  for (p = 0; p < 0x100; p++)
-    if (pages[p]) {
-      int j1_min = 32;
-      int j1_max = -1;
-      for (j1 = 0; j1 < 32; j1++)
-        for (j2 = 0; j2 < 8; j2++)
-          if (uni2charset[256*p+8*j1+j2] != 0) {
-            if (j1_min > j1) j1_min = j1;
-            if (j1_max < j1) j1_max = j1;
-          }
-      printf("static const unsigned char %s_page%02x[%d] = {\n",
-             name, p, 8*(j1_max-j1_min+1));
-      for (j1 = j1_min; j1 <= j1_max; j1++) {
-        printf("  ");
-        for (j2 = 0; j2 < 8; j2++)
-          printf("0x%02x, ", uni2charset[256*p+8*j1+j2]);
-        printf("/""* 0x%02x-0x%02x *""/\n", 8*j1, 8*j1+7);
-      }
-      printf("};\n");
-    }
-  printf("\n");
-
-}
-#endif
-
-  exit(0);
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/COPYRIGHT b/common/fltk/src/xutf8/lcUniConv/COPYRIGHT
deleted file mode 100644
index ccc1626..0000000
--- a/common/fltk/src/xutf8/lcUniConv/COPYRIGHT
+++ /dev/null
@@ -1,39 +0,0 @@
-This notice applies to the files in this directory. They are taken from
-the libiconv-1.1 package, which is covered by the LGPL license. The files
-in this directory have been placed under the following copyright, with
-permission from the Free Software Foundation.
-
-
-Copyright (c) 1999-2000  Free Software Foundation, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of the Free Software Foundation
-shall not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization from the
-Free Software Foundation.
-
-
-Notes:
-
-1. This copyright applies only to the files in this directory, and not to
-the remaining files in libiconv.
-
-2. The Free Software Foundation does not encourage the use of the above
-license for newly written software.
-
diff --git a/common/fltk/src/xutf8/lcUniConv/README b/common/fltk/src/xutf8/lcUniConv/README
deleted file mode 100644
index 6c0ca93..0000000
--- a/common/fltk/src/xutf8/lcUniConv/README
+++ /dev/null
@@ -1,12 +0,0 @@
-$XFree86: xc/lib/X11/lcUniConv/README,v 1.3 2003/10/24 15:34:01 tsi Exp $
-
-The files in this directory are taken from the libiconv-1.1 package.
-
-The *.h files were generated from tables (mostly from ftp.unicode.org) using
-the programs '8bit_tab_to_h.c', 'cjk_tab_to_h.c' and 'gbk_tab_to_h.c'. On some of them, further
-optimizations were applied by hand.
-
-If you find a bug in these files, instead of modifying them in XFree86
-and let it diverge from libiconv, please notify the libiconv maintainer
-(currently <bruno@clisp.org>) so he can fix both in synch.
-
diff --git a/common/fltk/src/xutf8/lcUniConv/armscii_8.h b/common/fltk/src/xutf8/lcUniConv/armscii_8.h
deleted file mode 100644
index 6f8c10c..0000000
--- a/common/fltk/src/xutf8/lcUniConv/armscii_8.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/armscii_8.h,v 1.4 2003/07/15 17:33:45 pascal Exp $ */
-
-/*
- * ARMSCII-8
- */
-
-static const unsigned short armscii_8_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0xfffd, 0x0587, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab,
-  0x2014, 0x002e, 0x055d, 0x002c, 0x002d, 0x058a, 0x2026, 0x055c,
-  /* 0xb0 */
-  0x055b, 0x055e, 0x0531, 0x0561, 0x0532, 0x0562, 0x0533, 0x0563,
-  0x0534, 0x0564, 0x0535, 0x0565, 0x0536, 0x0566, 0x0537, 0x0567,
-  /* 0xc0 */
-  0x0538, 0x0568, 0x0539, 0x0569, 0x053a, 0x056a, 0x053b, 0x056b,
-  0x053c, 0x056c, 0x053d, 0x056d, 0x053e, 0x056e, 0x053f, 0x056f,
-  /* 0xd0 */
-  0x0540, 0x0570, 0x0541, 0x0571, 0x0542, 0x0572, 0x0543, 0x0573,
-  0x0544, 0x0574, 0x0545, 0x0575, 0x0546, 0x0576, 0x0547, 0x0577,
-  /* 0xe0 */
-  0x0548, 0x0578, 0x0549, 0x0579, 0x054a, 0x057a, 0x054b, 0x057b,
-  0x054c, 0x057c, 0x054d, 0x057d, 0x054e, 0x057e, 0x054f, 0x057f,
-  /* 0xf0 */
-  0x0550, 0x0580, 0x0551, 0x0581, 0x0552, 0x0582, 0x0553, 0x0583,
-  0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x055a, 0xfffd,
-};
-
-static int
-armscii_8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = armscii_8_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-
-static const unsigned char armscii_8_page00[8] = {
-  0xa5, 0xa4, 0x2a, 0x2b, 0xab, 0xac, 0xa9, 0x2f, /* 0x28-0x2f */
-};
-static const unsigned char armscii_8_page00_1[32] = {
-  0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-};
-static const unsigned char armscii_8_page05[96] = {
-  0x00, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, /* 0x30-0x37 */
-  0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, /* 0x38-0x3f */
-  0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, /* 0x40-0x47 */
-  0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, /* 0x48-0x4f */
-  0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0xfe, 0xb0, 0xaf, 0xaa, 0xb1, 0x00, /* 0x58-0x5f */
-  0x00, 0xb3, 0xb5, 0xb7, 0xb9, 0xbb, 0xbd, 0xbf, /* 0x60-0x67 */
-  0xc1, 0xc3, 0xc5, 0xc7, 0xc9, 0xcb, 0xcd, 0xcf, /* 0x68-0x6f */
-  0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, /* 0x70-0x77 */
-  0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, /* 0x78-0x7f */
-  0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0xa2, /* 0x80-0x87 */
-  0x00, 0xa3, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-};
-static const unsigned char armscii_8_page20[24] = {
-  0x00, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x00, /* 0x20-0x27 */
-};
-
-static int
-armscii_8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0028) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x0028 && wc < 0x0030)
-    c = armscii_8_page00[wc-0x0028];
-  else if (wc >= 0x0030 && wc < 0x00a0)
-    c = wc;
-  else if (wc >= 0x00a0 && wc < 0x00c0)
-    c = armscii_8_page00_1[wc-0x00a0];
-  else if (wc >= 0x0530 && wc < 0x0590)
-    c = armscii_8_page05[wc-0x0530];
-  else if (wc >= 0x2010 && wc < 0x2028)
-    c = armscii_8_page20[wc-0x2010];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/ascii.h b/common/fltk/src/xutf8/lcUniConv/ascii.h
deleted file mode 100644
index 183de0b..0000000
--- a/common/fltk/src/xutf8/lcUniConv/ascii.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/ascii.h,v 1.3 2000/11/29 17:40:28 dawes Exp $ */
-
-/*
- * ASCII
- */
-
-static int
-ascii_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-
-static int
-ascii_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/big5.h b/common/fltk/src/xutf8/lcUniConv/big5.h
deleted file mode 100644
index 3b39c80..0000000
--- a/common/fltk/src/xutf8/lcUniConv/big5.h
+++ /dev/null
@@ -1,4145 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/big5.h,v 1.2 2003/05/27 22:26:28 tsi Exp $ */
-
-/*
- * BIG5
- */
-#ifdef NEED_TOWC
-static const unsigned short big5_2uni_pagea1[6121] = {
-  /* 0xa1 */
-  0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2022, 0xff1b, 0xff1a,
-  0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xff64, 0xfe52,
-  0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2013, 0xfe31,
-  0x2014, 0xfe33, 0xfffd, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35,
-  0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39,
-  0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d,
-  0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41,
-  0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0xfe5b,
-  0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, 0x201d, 0x301d,
-  0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a, 0x203b, 0x00a7,
-  0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, 0x2606, 0x2605,
-  0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc, 0x32a3, 0x2105,
-  0x203e, 0xfffd, 0xff3f, 0xfffd, 0xfe49, 0xfe4a, 0xfe4d, 0xfe4e,
-  0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b, 0xff0d, 0x00d7,
-  0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d, 0x2266, 0x2267,
-  0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, 0xfe64, 0xfe65,
-  0xfe66, 0x223c, 0x2229, 0x222a, 0x22a5, 0x2220, 0x221f, 0x22bf,
-  0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, 0x2640, 0x2642,
-  0x2641, 0x2609, 0x2191, 0x2193, 0x2190, 0x2192, 0x2196, 0x2197,
-  0x2199, 0x2198, 0x2225, 0x2223, 0xfffd,
-  /* 0xa2 */
-  0xfffd, 0xff0f, 0xff3c, 0xff04, 0x00a5, 0x3012, 0x00a2, 0x00a3,
-  0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5,
-  0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4,
-  0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7,
-  0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586,
-  0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a,
-  0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500,
-  0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 0x256e,
-  0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561, 0x25e2, 0x25e3,
-  0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10, 0xff11, 0xff12,
-  0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0x2160,
-  0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168,
-  0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027,
-  0x3028, 0x3029, 0xfffd, 0x5344, 0xfffd, 0xff21, 0xff22, 0xff23,
-  0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b,
-  0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33,
-  0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff41,
-  0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49,
-  0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51,
-  0xff52, 0xff53, 0xff54, 0xff55, 0xff56,
-  /* 0xa3 */
-  0xff57, 0xff58, 0xff59, 0xff5a, 0x0391, 0x0392, 0x0393, 0x0394,
-  0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c,
-  0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5,
-  0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, 0x03b3, 0x03b4,
-  0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc,
-  0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5,
-  0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x3105, 0x3106, 0x3107, 0x3108,
-  0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110,
-  0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118,
-  0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120,
-  0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128,
-  0x3129, 0x02d9, 0x02c9, 0x02ca, 0x02c7, 0x02cb, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa4 */
-  0x4e00, 0x4e59, 0x4e01, 0x4e03, 0x4e43, 0x4e5d, 0x4e86, 0x4e8c,
-  0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, 0x5200, 0x5201, 0x529b,
-  0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, 0x4e08, 0x4e0a,
-  0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, 0x4e8e,
-  0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f,
-  0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8,
-  0x5c0f, 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2,
-  0x5df3, 0x5dfe, 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 0x4e11,
-  0x4e10, 0x4e0d, 0x4e2d, 0x4e30, 0x4e39, 0x4e4b, 0x5c39, 0x4e88,
-  0x4e91, 0x4e95, 0x4e92, 0x4e94, 0x4ea2, 0x4ec1, 0x4ec0, 0x4ec3,
-  0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, 0x4ec4, 0x5143, 0x5141,
-  0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6, 0x5206, 0x5207,
-  0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339, 0x5348, 0x5347,
-  0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd, 0x58ec, 0x5929,
-  0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24, 0x5c3a, 0x5c6f,
-  0x5df4, 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3, 0x6208, 0x6236,
-  0x624b, 0x624e, 0x652f, 0x6587, 0x6597, 0x65a4, 0x65b9, 0x65e5,
-  0x66f0, 0x6708, 0x6728, 0x6b20, 0x6b62, 0x6b79, 0x6bcb, 0x6bd4,
-  0x6bdb, 0x6c0f, 0x6c34, 0x706b, 0x722a, 0x7236, 0x723b, 0x7247,
-  0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19,
-  /* 0xa5 */
-  0x4e16, 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e,
-  0x4ee5, 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4,
-  0x4ed9, 0x4ede, 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9,
-  0x51fa, 0x51f8, 0x520a, 0x52a0, 0x529f, 0x5305, 0x5306, 0x5317,
-  0x531d, 0x4edf, 0x534a, 0x5349, 0x5361, 0x5360, 0x536f, 0x536e,
-  0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, 0x53ee, 0x53e9, 0x53e8,
-  0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, 0x53f2, 0x53f1,
-  0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, 0x592e,
-  0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c, 0x5de8, 0x5de7,
-  0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01, 0x5f18, 0x5f17,
-  0x5fc5, 0x620a, 0x6253, 0x6254, 0x6252, 0x6251, 0x65a5, 0x65e6,
-  0x672e, 0x672c, 0x672a, 0x672b, 0x672d, 0x6b63, 0x6bcd, 0x6c11,
-  0x6c10, 0x6c38, 0x6c41, 0x6c40, 0x6c3e, 0x72af, 0x7384, 0x7389,
-  0x74dc, 0x74e6, 0x7518, 0x751f, 0x7528, 0x7529, 0x7530, 0x7531,
-  0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, 0x76bf, 0x76ee, 0x77db,
-  0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, 0x7acb, 0x4e1e, 0x4e1f,
-  0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, 0x4ea6, 0x4ea5, 0x4eff,
-  0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, 0x4f10, 0x4f11, 0x4f0f,
-  0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, 0x4efd, 0x4f01, 0x4f0b,
-  0x5149, 0x5147, 0x5146, 0x5148, 0x5168,
-  /* 0xa6 */
-  0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, 0x5212, 0x520e, 0x5216,
-  0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540f,
-  0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, 0x540d,
-  0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd,
-  0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919,
-  0x591a, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979,
-  0x5982, 0x5981, 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89,
-  0x5bfa, 0x5c16, 0x5c79, 0x5dde, 0x5e06, 0x5e76, 0x5e74, 0x5f0f,
-  0x5f1b, 0x5fd9, 0x5fd6, 0x620e, 0x620c, 0x620d, 0x6210, 0x6263,
-  0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, 0x65ec, 0x65ed, 0x66f2,
-  0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735, 0x6b21, 0x6b64,
-  0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f, 0x6c60, 0x6c50,
-  0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070, 0x725f, 0x725d,
-  0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a, 0x7fbd, 0x8001,
-  0x8003, 0x800c, 0x8012, 0x8033, 0x807f, 0x8089, 0x808b, 0x808c,
-  0x81e3, 0x81ea, 0x81f3, 0x81fc, 0x820c, 0x821b, 0x821f, 0x826e,
-  0x8272, 0x827e, 0x866b, 0x8840, 0x884c, 0x8863, 0x897f, 0x9621,
-  0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, 0x4f47, 0x4f57, 0x4f5e, 0x4f34,
-  0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, 0x4f3d, 0x4f3a, 0x4f38,
-  0x4f43, 0x4f54, 0x4f3c, 0x4f46, 0x4f63,
-  /* 0xa7 */
-  0x4f5c, 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, 0x4f48,
-  0x4f5a, 0x514c, 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, 0x5225,
-  0x5224, 0x5229, 0x522a, 0x5228, 0x52ab, 0x52a9, 0x52aa, 0x52ac,
-  0x5323, 0x5373, 0x5375, 0x541d, 0x542d, 0x541e, 0x543e, 0x5426,
-  0x544e, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541b,
-  0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, 0x5435, 0x5436,
-  0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, 0x56ea,
-  0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, 0x5747,
-  0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef, 0x593e, 0x599d,
-  0x5992, 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996, 0x598d, 0x59a4,
-  0x5993, 0x598a, 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a, 0x5b5b, 0x5b8c,
-  0x5b8b, 0x5b8f, 0x5c2c, 0x5c40, 0x5c41, 0x5c3f, 0x5c3e, 0x5c90,
-  0x5c91, 0x5c94, 0x5c8c, 0x5deb, 0x5e0c, 0x5e8f, 0x5e87, 0x5e8a,
-  0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, 0x5f77, 0x5f79, 0x5fd8,
-  0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, 0x5ff8, 0x5fea, 0x6212,
-  0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, 0x6289, 0x626d,
-  0x628a, 0x627c, 0x627e, 0x6279, 0x6273, 0x6292, 0x626f, 0x6298,
-  0x626e, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, 0x653b, 0x6538,
-  0x65f1, 0x66f4, 0x675f, 0x674e, 0x674f, 0x6750, 0x6751, 0x675c,
-  0x6756, 0x675e, 0x6749, 0x6746, 0x6760,
-  /* 0xa8 */
-  0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, 0x6c99, 0x6c81,
-  0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, 0x6c70,
-  0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e,
-  0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, 0x6c82, 0x7076,
-  0x707c, 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, 0x72c4, 0x72c2,
-  0x7396, 0x752c, 0x752b, 0x7537, 0x7538, 0x7682, 0x76ef, 0x77e3,
-  0x79c1, 0x79c0, 0x79bf, 0x7a76, 0x7cfb, 0x7f55, 0x8096, 0x8093,
-  0x809d, 0x8098, 0x809b, 0x809a, 0x80b2, 0x826f, 0x8292, 0x828b,
-  0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, 0x8c46, 0x8c55, 0x8c9d,
-  0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b, 0x8fb0, 0x8fc2,
-  0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2, 0x90aa, 0x90a6,
-  0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e, 0x9631, 0x962a,
-  0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b, 0x4e9e, 0x4eab,
-  0x4eac, 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f, 0x4f6c, 0x4f9b,
-  0x4f8b, 0x4f86, 0x4f83, 0x4f70, 0x4f75, 0x4f88, 0x4f69, 0x4f7b,
-  0x4f96, 0x4f7e, 0x4f8f, 0x4f91, 0x4f7a, 0x5154, 0x5152, 0x5155,
-  0x5169, 0x5177, 0x5176, 0x5178, 0x51bd, 0x51fd, 0x523b, 0x5238,
-  0x5237, 0x523a, 0x5230, 0x522e, 0x5236, 0x5241, 0x52be, 0x52bb,
-  0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, 0x5378, 0x5379,
-  0x53d6, 0x53d4, 0x53d7, 0x5473, 0x5475,
-  /* 0xa9 */
-  0x5496, 0x5478, 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, 0x5492,
-  0x5486, 0x547c, 0x5490, 0x5471, 0x5476, 0x548c, 0x549a, 0x5462,
-  0x5468, 0x548b, 0x547d, 0x548e, 0x56fa, 0x5783, 0x5777, 0x576a,
-  0x5769, 0x5761, 0x5766, 0x5764, 0x577c, 0x591c, 0x5949, 0x5947,
-  0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, 0x59b9, 0x59ae,
-  0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, 0x59af,
-  0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, 0x5b9a,
-  0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, 0x5c48, 0x5c45, 0x5c46,
-  0x5cb7, 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, 0x5cb1, 0x5cb3, 0x5e18,
-  0x5e1a, 0x5e16, 0x5e15, 0x5e1b, 0x5e11, 0x5e78, 0x5e9a, 0x5e97,
-  0x5e9c, 0x5e95, 0x5e96, 0x5ef6, 0x5f26, 0x5f27, 0x5f29, 0x5f80,
-  0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, 0x5fe0, 0x5ffd, 0x5ff5, 0x5fff,
-  0x600f, 0x6014, 0x602f, 0x6035, 0x6016, 0x602a, 0x6015, 0x6021,
-  0x6027, 0x6029, 0x602b, 0x601b, 0x6216, 0x6215, 0x623f, 0x623e,
-  0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, 0x62bf, 0x62c2, 0x62b9,
-  0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, 0x62cb, 0x62c8, 0x62a8,
-  0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, 0x62cd, 0x62b5, 0x62da,
-  0x62b1, 0x62d8, 0x62d6, 0x62d7, 0x62c6, 0x62ac, 0x62ce, 0x653e,
-  0x65a7, 0x65bc, 0x65fa, 0x6614, 0x6613, 0x660c, 0x6606, 0x6602,
-  0x660e, 0x6600, 0x660f, 0x6615, 0x660a,
-  /* 0xaa */
-  0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, 0x6771, 0x679c,
-  0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, 0x6770, 0x677f,
-  0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, 0x677c, 0x676a,
-  0x6772, 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, 0x6c1b, 0x6ce3,
-  0x6ce8, 0x6cf3, 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, 0x6cbd, 0x6cbe,
-  0x6cbc, 0x6ce2, 0x6cab, 0x6cd5, 0x6cd3, 0x6cb8, 0x6cc4, 0x6cb9,
-  0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, 0x6cf1, 0x6cbf, 0x6cbb, 0x6ce1,
-  0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, 0x6cd6, 0x6ce0, 0x7095,
-  0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d, 0x7238, 0x7248,
-  0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7, 0x72d0, 0x73a9,
-  0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d, 0x7599, 0x759a,
-  0x7684, 0x76c2, 0x76f2, 0x76f4, 0x77e5, 0x77fd, 0x793e, 0x7940,
-  0x7941, 0x79c9, 0x79c8, 0x7a7a, 0x7a79, 0x7afa, 0x7cfe, 0x7f54,
-  0x7f8c, 0x7f8b, 0x8005, 0x80ba, 0x80a5, 0x80a2, 0x80b1, 0x80a1,
-  0x80ab, 0x80a9, 0x80b4, 0x80aa, 0x80af, 0x81e5, 0x81fe, 0x820d,
-  0x82b3, 0x829d, 0x8299, 0x82ad, 0x82bd, 0x829f, 0x82b9, 0x82b1,
-  0x82ac, 0x82a5, 0x82af, 0x82b8, 0x82a3, 0x82b0, 0x82be, 0x82b7,
-  0x864e, 0x8671, 0x521d, 0x8868, 0x8ecb, 0x8fce, 0x8fd4, 0x8fd1,
-  0x90b5, 0x90b8, 0x90b1, 0x90b6, 0x91c7, 0x91d1, 0x9577, 0x9580,
-  0x961c, 0x9640, 0x963f, 0x963b, 0x9644,
-  /* 0xab */
-  0x9642, 0x96b9, 0x96e8, 0x9752, 0x975e, 0x4e9f, 0x4ead, 0x4eae,
-  0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, 0x4fe0, 0x4fd1, 0x4fcf, 0x4fdd,
-  0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, 0x4fd7, 0x4fae, 0x4fd0,
-  0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, 0x4fb7, 0x5157, 0x5192,
-  0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, 0x524d, 0x524c, 0x524b,
-  0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, 0x530d, 0x5357, 0x537b,
-  0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, 0x54ce, 0x54c9, 0x54b8,
-  0x54a6, 0x54b3, 0x54c7, 0x54c2, 0x54bd, 0x54aa, 0x54c1, 0x54c4,
-  0x54c8, 0x54af, 0x54ab, 0x54b1, 0x54bb, 0x54a9, 0x54a7, 0x54bf,
-  0x56ff, 0x5782, 0x578b, 0x57a0, 0x57a3, 0x57a2, 0x57ce, 0x57ae,
-  0x5793, 0x5955, 0x5951, 0x594f, 0x594e, 0x5950, 0x59dc, 0x59d8,
-  0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, 0x59ea, 0x59da, 0x59e6,
-  0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, 0x5ba4, 0x5ba2, 0x5ba5,
-  0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, 0x5cd9, 0x5cd2, 0x5df7,
-  0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, 0x5ea6, 0x5efa, 0x5f08,
-  0x5f2d, 0x5f65, 0x5f88, 0x5f85, 0x5f8a, 0x5f8b, 0x5f87, 0x5f8c,
-  0x5f89, 0x6012, 0x601d, 0x6020, 0x6025, 0x600e, 0x6028, 0x604d,
-  0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606c, 0x606b, 0x606a,
-  0x6064, 0x6241, 0x62dc, 0x6316, 0x6309, 0x62fc, 0x62ed, 0x6301,
-  0x62ee, 0x62fd, 0x6307, 0x62f1, 0x62f7,
-  /* 0xac */
-  0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, 0x653f, 0x6545,
-  0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, 0x6627, 0x662f,
-  0x661f, 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, 0x67d3, 0x67f1,
-  0x67d4, 0x67d0, 0x67ec, 0x67b6, 0x67af, 0x67f5, 0x67e9, 0x67ef,
-  0x67c4, 0x67d1, 0x67b4, 0x67da, 0x67e5, 0x67b8, 0x67cf, 0x67de,
-  0x67f3, 0x67b0, 0x67d9, 0x67e2, 0x67dd, 0x67d2, 0x6b6a, 0x6b83,
-  0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, 0x6cc9, 0x6d0b, 0x6d32,
-  0x6d2a, 0x6d41, 0x6d25, 0x6d0c, 0x6d31, 0x6d1e, 0x6d17, 0x6d3b,
-  0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, 0x6cf5, 0x6d39, 0x6d27, 0x6d38,
-  0x6d29, 0x6d2e, 0x6d35, 0x6d0e, 0x6d2b, 0x70ab, 0x70ba, 0x70b3,
-  0x70ac, 0x70af, 0x70ad, 0x70b8, 0x70ae, 0x70a4, 0x7230, 0x7272,
-  0x726f, 0x7274, 0x72e9, 0x72e0, 0x72e1, 0x73b7, 0x73ca, 0x73bb,
-  0x73b2, 0x73cd, 0x73c0, 0x73b3, 0x751a, 0x752d, 0x754f, 0x754c,
-  0x754e, 0x754b, 0x75ab, 0x75a4, 0x75a5, 0x75a2, 0x75a3, 0x7678,
-  0x7686, 0x7687, 0x7688, 0x76c8, 0x76c6, 0x76c3, 0x76c5, 0x7701,
-  0x76f9, 0x76f8, 0x7709, 0x770b, 0x76fe, 0x76fc, 0x7707, 0x77dc,
-  0x7802, 0x7814, 0x780c, 0x780d, 0x7946, 0x7949, 0x7948, 0x7947,
-  0x79b9, 0x79ba, 0x79d1, 0x79d2, 0x79cb, 0x7a7f, 0x7a81, 0x7aff,
-  0x7afd, 0x7c7d, 0x7d02, 0x7d05, 0x7d00, 0x7d09, 0x7d07, 0x7d04,
-  0x7d06, 0x7f38, 0x7f8e, 0x7fbf, 0x8004,
-  /* 0xad */
-  0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, 0x80e5, 0x80da, 0x80c3,
-  0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, 0x80e4, 0x80dd,
-  0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, 0x82db, 0x82e6,
-  0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, 0x82f1, 0x8301,
-  0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, 0x82ef, 0x8306,
-  0x8650, 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, 0x8981, 0x89d4,
-  0x8a08, 0x8a02, 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, 0x8d73, 0x8db4,
-  0x8ecd, 0x8ecc, 0x8ff0, 0x8fe6, 0x8fe2, 0x8fea, 0x8fe5, 0x8fed,
-  0x8feb, 0x8fe4, 0x8fe8, 0x90ca, 0x90ce, 0x90c1, 0x90c3, 0x914b,
-  0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, 0x964c, 0x964d, 0x9762,
-  0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8, 0x98db, 0x98df,
-  0x9996, 0x9999, 0x4e58, 0x4eb3, 0x500c, 0x500d, 0x5023, 0x4fef,
-  0x5026, 0x5025, 0x4ff8, 0x5029, 0x5016, 0x5006, 0x503c, 0x501f,
-  0x501a, 0x5012, 0x5011, 0x4ffa, 0x5000, 0x5014, 0x5028, 0x4ff1,
-  0x5021, 0x500b, 0x5019, 0x5018, 0x4ff3, 0x4fee, 0x502d, 0x502a,
-  0x4ffe, 0x502b, 0x5009, 0x517c, 0x51a4, 0x51a5, 0x51a2, 0x51cd,
-  0x51cc, 0x51c6, 0x51cb, 0x5256, 0x525c, 0x5254, 0x525b, 0x525d,
-  0x532a, 0x537f, 0x539f, 0x539d, 0x53df, 0x54e8, 0x5510, 0x5501,
-  0x5537, 0x54fc, 0x54e5, 0x54f2, 0x5506, 0x54fa, 0x5514, 0x54e9,
-  0x54ed, 0x54e1, 0x5509, 0x54ee, 0x54ea,
-  /* 0xae */
-  0x54e6, 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, 0x57c2,
-  0x57d4, 0x57cb, 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, 0x595a,
-  0x5a11, 0x5a18, 0x5a1c, 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, 0x5a20,
-  0x5a23, 0x5a29, 0x5a25, 0x5a0c, 0x5a09, 0x5b6b, 0x5c58, 0x5bb0,
-  0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, 0x5bb9, 0x5bb8, 0x5c04,
-  0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, 0x5cfb, 0x5cea, 0x5ce8,
-  0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, 0x5e2d, 0x5e2b, 0x5eab,
-  0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, 0x5f90, 0x6059, 0x6063,
-  0x6065, 0x6050, 0x6055, 0x606d, 0x6069, 0x606f, 0x6084, 0x609f,
-  0x609a, 0x608d, 0x6094, 0x608c, 0x6085, 0x6096, 0x6247, 0x62f3,
-  0x6308, 0x62ff, 0x634e, 0x633e, 0x632f, 0x6355, 0x6342, 0x6346,
-  0x634f, 0x6349, 0x633a, 0x6350, 0x633d, 0x632a, 0x632b, 0x6328,
-  0x634d, 0x634c, 0x6548, 0x6549, 0x6599, 0x65c1, 0x65c5, 0x6642,
-  0x6649, 0x664f, 0x6643, 0x6652, 0x664c, 0x6645, 0x6641, 0x66f8,
-  0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, 0x6846, 0x6853,
-  0x6839, 0x6842, 0x6854, 0x6829, 0x68b3, 0x6817, 0x684c, 0x6851,
-  0x683d, 0x67f4, 0x6850, 0x6840, 0x683c, 0x6843, 0x682a, 0x6845,
-  0x6813, 0x6818, 0x6841, 0x6b8a, 0x6b89, 0x6bb7, 0x6c23, 0x6c27,
-  0x6c28, 0x6c26, 0x6c24, 0x6cf0, 0x6d6a, 0x6d95, 0x6d88, 0x6d87,
-  0x6d66, 0x6d78, 0x6d77, 0x6d59, 0x6d93,
-  /* 0xaf */
-  0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, 0x6d8c, 0x6d8a,
-  0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, 0x70e4, 0x70d9,
-  0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, 0x72fd, 0x72f8,
-  0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, 0x73ea, 0x73de,
-  0x7554, 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, 0x75c5, 0x75c7,
-  0x75b2, 0x75b3, 0x75bd, 0x75bc, 0x75b9, 0x75c2, 0x75b8, 0x768b,
-  0x76b0, 0x76ca, 0x76cd, 0x76ce, 0x7729, 0x771f, 0x7720, 0x7728,
-  0x77e9, 0x7830, 0x7827, 0x7838, 0x781d, 0x7834, 0x7837, 0x7825,
-  0x782d, 0x7820, 0x781f, 0x7832, 0x7955, 0x7950, 0x7960, 0x795f,
-  0x7956, 0x795e, 0x795d, 0x7957, 0x795a, 0x79e4, 0x79e3, 0x79e7,
-  0x79df, 0x79e6, 0x79e9, 0x79d8, 0x7a84, 0x7a88, 0x7ad9, 0x7b06,
-  0x7b11, 0x7c89, 0x7d21, 0x7d17, 0x7d0b, 0x7d0a, 0x7d20, 0x7d22,
-  0x7d14, 0x7d10, 0x7d15, 0x7d1a, 0x7d1c, 0x7d0d, 0x7d19, 0x7d1b,
-  0x7f3a, 0x7f5f, 0x7f94, 0x7fc5, 0x7fc1, 0x8006, 0x8018, 0x8015,
-  0x8019, 0x8017, 0x803d, 0x803f, 0x80f1, 0x8102, 0x80f0, 0x8105,
-  0x80ed, 0x80f4, 0x8106, 0x80f8, 0x80f3, 0x8108, 0x80fd, 0x810a,
-  0x80fc, 0x80ef, 0x81ed, 0x81ec, 0x8200, 0x8210, 0x822a, 0x822b,
-  0x8228, 0x822c, 0x82bb, 0x832b, 0x8352, 0x8354, 0x834a, 0x8338,
-  0x8350, 0x8349, 0x8335, 0x8334, 0x834f, 0x8332, 0x8339, 0x8336,
-  0x8317, 0x8340, 0x8331, 0x8328, 0x8343,
-  /* 0xb0 */
-  0x8654, 0x868a, 0x86aa, 0x8693, 0x86a4, 0x86a9, 0x868c, 0x86a3,
-  0x869c, 0x8870, 0x8877, 0x8881, 0x8882, 0x887d, 0x8879, 0x8a18,
-  0x8a10, 0x8a0e, 0x8a0c, 0x8a15, 0x8a0a, 0x8a17, 0x8a13, 0x8a16,
-  0x8a0f, 0x8a11, 0x8c48, 0x8c7a, 0x8c79, 0x8ca1, 0x8ca2, 0x8d77,
-  0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, 0x8fb1, 0x9001, 0x9006, 0x8ff7,
-  0x9000, 0x8ffa, 0x8ff4, 0x9003, 0x8ffd, 0x9005, 0x8ff8, 0x9095,
-  0x90e1, 0x90dd, 0x90e2, 0x9152, 0x914d, 0x914c, 0x91d8, 0x91dd,
-  0x91d7, 0x91dc, 0x91d9, 0x9583, 0x9662, 0x9663, 0x9661, 0x965b,
-  0x965d, 0x9664, 0x9658, 0x965e, 0x96bb, 0x98e2, 0x99ac, 0x9aa8,
-  0x9ad8, 0x9b25, 0x9b32, 0x9b3c, 0x4e7e, 0x507a, 0x507d, 0x505c,
-  0x5047, 0x5043, 0x504c, 0x505a, 0x5049, 0x5065, 0x5076, 0x504e,
-  0x5055, 0x5075, 0x5074, 0x5077, 0x504f, 0x500f, 0x506f, 0x506d,
-  0x515c, 0x5195, 0x51f0, 0x526a, 0x526f, 0x52d2, 0x52d9, 0x52d8,
-  0x52d5, 0x5310, 0x530f, 0x5319, 0x533f, 0x5340, 0x533e, 0x53c3,
-  0x66fc, 0x5546, 0x556a, 0x5566, 0x5544, 0x555e, 0x5561, 0x5543,
-  0x554a, 0x5531, 0x5556, 0x554f, 0x5555, 0x552f, 0x5564, 0x5538,
-  0x552e, 0x555c, 0x552c, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708,
-  0x570b, 0x5709, 0x57df, 0x5805, 0x580a, 0x5806, 0x57e0, 0x57e4,
-  0x57fa, 0x5802, 0x5835, 0x57f7, 0x57f9, 0x5920, 0x5962, 0x5a36,
-  0x5a41, 0x5a49, 0x5a66, 0x5a6a, 0x5a40,
-  /* 0xb1 */
-  0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, 0x5b70, 0x5bc7, 0x5bc5,
-  0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, 0x5c08, 0x5c07, 0x5c60,
-  0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, 0x5d1b, 0x5d16, 0x5d22,
-  0x5d11, 0x5d29, 0x5d14, 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2,
-  0x5e38, 0x5e36, 0x5e33, 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5,
-  0x5ebe, 0x5f35, 0x5f37, 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97,
-  0x5f99, 0x5f9e, 0x5f98, 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3,
-  0x6089, 0x60a0, 0x60a8, 0x60cb, 0x60b4, 0x60e6, 0x60bd, 0x60c5,
-  0x60bb, 0x60b5, 0x60dc, 0x60bc, 0x60d8, 0x60d5, 0x60c6, 0x60df,
-  0x60b8, 0x60da, 0x60c7, 0x621a, 0x621b, 0x6248, 0x63a0, 0x63a7,
-  0x6372, 0x6396, 0x63a2, 0x63a5, 0x6377, 0x6367, 0x6398, 0x63aa,
-  0x6371, 0x63a9, 0x6389, 0x6383, 0x639b, 0x636b, 0x63a8, 0x6384,
-  0x6388, 0x6399, 0x63a1, 0x63ac, 0x6392, 0x638f, 0x6380, 0x637b,
-  0x6369, 0x6368, 0x637a, 0x655d, 0x6556, 0x6551, 0x6559, 0x6557,
-  0x555f, 0x654f, 0x6558, 0x6555, 0x6554, 0x659c, 0x659b, 0x65ac,
-  0x65cf, 0x65cb, 0x65cc, 0x65ce, 0x665d, 0x665a, 0x6664, 0x6668,
-  0x6666, 0x665e, 0x66f9, 0x52d7, 0x671b, 0x6881, 0x68af, 0x68a2,
-  0x6893, 0x68b5, 0x687f, 0x6876, 0x68b1, 0x68a7, 0x6897, 0x68b0,
-  0x6883, 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894, 0x689d, 0x68a8,
-  0x689f, 0x68a1, 0x6882, 0x6b32, 0x6bba,
-  /* 0xb2 */
-  0x6beb, 0x6bec, 0x6c2b, 0x6d8e, 0x6dbc, 0x6df3, 0x6dd9, 0x6db2,
-  0x6de1, 0x6dcc, 0x6de4, 0x6dfb, 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb,
-  0x6daf, 0x6dd1, 0x6dae, 0x6dde, 0x6df9, 0x6db8, 0x6df7, 0x6df5,
-  0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, 0x6dda, 0x6deb, 0x6dd8, 0x6dea,
-  0x6df1, 0x6dee, 0x6de8, 0x6dc6, 0x6dc4, 0x6daa, 0x6dec, 0x6dbf,
-  0x6de6, 0x70f9, 0x7109, 0x710a, 0x70fd, 0x70ef, 0x723d, 0x727d,
-  0x7281, 0x731c, 0x731b, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405,
-  0x740a, 0x7403, 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 0x74f7,
-  0x751c, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, 0x758f, 0x75d4,
-  0x75d5, 0x75b5, 0x75ca, 0x75cd, 0x768e, 0x76d4, 0x76d2, 0x76db,
-  0x7737, 0x773e, 0x773c, 0x7736, 0x7738, 0x773a, 0x786b, 0x7843,
-  0x784e, 0x7965, 0x7968, 0x796d, 0x79fb, 0x7a92, 0x7a95, 0x7b20,
-  0x7b28, 0x7b1b, 0x7b2c, 0x7b26, 0x7b19, 0x7b1e, 0x7b2e, 0x7c92,
-  0x7c97, 0x7c95, 0x7d46, 0x7d43, 0x7d71, 0x7d2e, 0x7d39, 0x7d3c,
-  0x7d40, 0x7d30, 0x7d33, 0x7d44, 0x7d2f, 0x7d42, 0x7d32, 0x7d31,
-  0x7f3d, 0x7f9e, 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2, 0x801c, 0x804a,
-  0x8046, 0x812f, 0x8116, 0x8123, 0x812b, 0x8129, 0x8130, 0x8124,
-  0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838e, 0x839e, 0x8398,
-  0x8378, 0x83a2, 0x8396, 0x83bd, 0x83ab, 0x8392, 0x838a, 0x8393,
-  0x8389, 0x83a0, 0x8377, 0x837b, 0x837c,
-  /* 0xb3 */
-  0x8386, 0x83a7, 0x8655, 0x5f6a, 0x86c7, 0x86c0, 0x86b6, 0x86c4,
-  0x86b5, 0x86c6, 0x86cb, 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e,
-  0x8888, 0x88ab, 0x8892, 0x8896, 0x888d, 0x888b, 0x8993, 0x898f,
-  0x8a2a, 0x8a1d, 0x8a23, 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b,
-  0x8a22, 0x8c49, 0x8c5a, 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa,
-  0x8ca7, 0x8d67, 0x8d66, 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019,
-  0x900d, 0x901a, 0x9017, 0x9023, 0x901f, 0x901d, 0x9010, 0x9015,
-  0x901e, 0x9020, 0x900f, 0x9022, 0x9016, 0x901b, 0x9014, 0x90e8,
-  0x90ed, 0x90fd, 0x9157, 0x91ce, 0x91f5, 0x91e6, 0x91e3, 0x91e7,
-  0x91ed, 0x91e9, 0x9589, 0x966a, 0x9675, 0x9673, 0x9678, 0x9670,
-  0x9674, 0x9676, 0x9677, 0x966c, 0x96c0, 0x96ea, 0x96e9, 0x7ae0,
-  0x7adf, 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75, 0x9e7f, 0x9ea5,
-  0x9ebb, 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091, 0x5080, 0x5096,
-  0x5098, 0x509a, 0x6700, 0x51f1, 0x5272, 0x5274, 0x5275, 0x5269,
-  0x52de, 0x52dd, 0x52db, 0x535a, 0x53a5, 0x557b, 0x5580, 0x55a7,
-  0x557c, 0x558a, 0x559d, 0x5598, 0x5582, 0x559c, 0x55aa, 0x5594,
-  0x5587, 0x558b, 0x5583, 0x55b3, 0x55ae, 0x559f, 0x553e, 0x55b2,
-  0x559a, 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589, 0x55ab, 0x5599,
-  0x570d, 0x582f, 0x582a, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821,
-  0x581d, 0x5820, 0x58f9, 0x58fa, 0x5960,
-  /* 0xb4 */
-  0x5a77, 0x5a9a, 0x5a7f, 0x5a92, 0x5a9b, 0x5aa7, 0x5b73, 0x5b71,
-  0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c,
-  0x5d50, 0x5d34, 0x5d47, 0x5dfd, 0x5e45, 0x5e3d, 0x5e40, 0x5e43,
-  0x5e7e, 0x5eca, 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, 0x5f6d, 0x5fa9,
-  0x5faa, 0x5fa8, 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, 0x611c,
-  0x6123, 0x60fa, 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1,
-  0x610e, 0x60f6, 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3,
-  0x638c, 0x63cf, 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 0x63d2,
-  0x63e3, 0x63d0, 0x63e1, 0x63d6, 0x63ed, 0x63ee, 0x6376, 0x63f4,
-  0x63ea, 0x63db, 0x6452, 0x63da, 0x63f9, 0x655e, 0x6566, 0x6562,
-  0x6563, 0x6591, 0x6590, 0x65af, 0x666e, 0x6670, 0x6674, 0x6676,
-  0x666f, 0x6691, 0x667a, 0x667e, 0x6677, 0x66fe, 0x66ff, 0x671f,
-  0x671d, 0x68fa, 0x68d5, 0x68e0, 0x68d8, 0x68d7, 0x6905, 0x68df,
-  0x68f5, 0x68ee, 0x68e7, 0x68f9, 0x68d2, 0x68f2, 0x68e3, 0x68cb,
-  0x68cd, 0x690d, 0x6912, 0x690e, 0x68c9, 0x68da, 0x696e, 0x68fb,
-  0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc, 0x6bef, 0x6c2e,
-  0x6c2f, 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21, 0x6e32, 0x6e67,
-  0x6e4a, 0x6e20, 0x6e25, 0x6e23, 0x6e1b, 0x6e5b, 0x6e58, 0x6e24,
-  0x6e56, 0x6e6e, 0x6e2d, 0x6e26, 0x6e6f, 0x6e34, 0x6e4d, 0x6e3a,
-  0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, 0x6ecb,
-  /* 0xb5 */
-  0x6e89, 0x6e19, 0x6e4e, 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f,
-  0x7119, 0x711a, 0x7126, 0x7130, 0x7121, 0x7136, 0x716e, 0x711c,
-  0x724c, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743a,
-  0x742a, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742f,
-  0x741b, 0x7426, 0x7428, 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2,
-  0x75db, 0x75e3, 0x75d9, 0x75d8, 0x75de, 0x75e0, 0x767b, 0x767c,
-  0x7696, 0x7693, 0x76b4, 0x76dc, 0x774f, 0x77ed, 0x785d, 0x786c,
-  0x786f, 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, 0x7a98, 0x7a97,
-  0x7a96, 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46, 0x7b50, 0x7b52,
-  0x7b54, 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f, 0x7ca5, 0x7d5e,
-  0x7d50, 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72, 0x7d61, 0x7d66,
-  0x7d62, 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5, 0x800b, 0x8052,
-  0x8085, 0x8155, 0x8154, 0x814b, 0x8151, 0x814e, 0x8139, 0x8146,
-  0x813e, 0x814c, 0x8153, 0x8174, 0x8212, 0x821c, 0x83e9, 0x8403,
-  0x83f8, 0x840d, 0x83e0, 0x83c5, 0x840b, 0x83c1, 0x83ef, 0x83f1,
-  0x83f4, 0x8457, 0x840a, 0x83f0, 0x840c, 0x83cc, 0x83fd, 0x83f2,
-  0x83ca, 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407, 0x83d4, 0x83df,
-  0x865b, 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db, 0x86e4, 0x86d0,
-  0x86de, 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983, 0x8996, 0x8a3b,
-  0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41,
-  /* 0xb6 */
-  0x8a54, 0x8a5b, 0x8a50, 0x8a46, 0x8a34, 0x8a3a, 0x8a36, 0x8a56,
-  0x8c61, 0x8c82, 0x8caf, 0x8cbc, 0x8cb3, 0x8cbd, 0x8cc1, 0x8cbb,
-  0x8cc0, 0x8cb4, 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, 0x8d8a, 0x8d85,
-  0x8d81, 0x8dce, 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, 0x8ddb,
-  0x8dc6, 0x8efb, 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031,
-  0x9038, 0x9032, 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163,
-  0x9165, 0x91cf, 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d,
-  0x9210, 0x9207, 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 0x9593,
-  0x9592, 0x958e, 0x968a, 0x968e, 0x968b, 0x967d, 0x9685, 0x9686,
-  0x968d, 0x9672, 0x9684, 0x96c1, 0x96c5, 0x96c4, 0x96c6, 0x96c7,
-  0x96ef, 0x96f2, 0x97cc, 0x9805, 0x9806, 0x9808, 0x98e7, 0x98ea,
-  0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad, 0x9ec3, 0x9ecd,
-  0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3, 0x50c5, 0x50be,
-  0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f, 0x5277, 0x527d,
-  0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f, 0x55df, 0x55e8,
-  0x55d3, 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1, 0x55e3, 0x55e4,
-  0x55ef, 0x55da, 0x55e1, 0x55c5, 0x55c6, 0x55e5, 0x55c9, 0x5712,
-  0x5713, 0x585e, 0x5851, 0x5858, 0x5857, 0x585a, 0x5854, 0x586b,
-  0x584c, 0x586d, 0x584a, 0x5862, 0x5852, 0x584b, 0x5967, 0x5ac1,
-  0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc,
-  /* 0xb7 */
-  0x5ab3, 0x5ac2, 0x5ab2, 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9,
-  0x5ec8, 0x5f12, 0x5f59, 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148,
-  0x611f, 0x60f3, 0x611b, 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c,
-  0x6144, 0x614d, 0x613e, 0x6134, 0x6127, 0x610d, 0x6106, 0x6137,
-  0x6221, 0x6222, 0x6413, 0x643e, 0x641e, 0x642a, 0x642d, 0x643d,
-  0x642c, 0x640f, 0x641c, 0x6414, 0x640d, 0x6436, 0x6416, 0x6417,
-  0x6406, 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, 0x6687, 0x6688,
-  0x6696, 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, 0x695a,
-  0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, 0x694a, 0x6968,
-  0x696b, 0x695e, 0x6953, 0x6979, 0x6986, 0x695d, 0x6963, 0x695b,
-  0x6b47, 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd, 0x6ea2, 0x6eaf,
-  0x6ed3, 0x6eb6, 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7, 0x6ec5, 0x6ea5,
-  0x6e98, 0x6ebc, 0x6eba, 0x6eab, 0x6ed1, 0x6e96, 0x6e9c, 0x6ec4,
-  0x6ed4, 0x6eaa, 0x6ea7, 0x6eb4, 0x714e, 0x7159, 0x7169, 0x7164,
-  0x7149, 0x7167, 0x715c, 0x716c, 0x7166, 0x714c, 0x7165, 0x715e,
-  0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337, 0x7345, 0x733f,
-  0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e, 0x7441, 0x743f,
-  0x7459, 0x745b, 0x745c, 0x7576, 0x7578, 0x7600, 0x75f0, 0x7601,
-  0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3, 0x76de, 0x76df,
-  0x775b, 0x776b, 0x7766, 0x775e, 0x7763,
-  /* 0xb8 */
-  0x7779, 0x776a, 0x776c, 0x775c, 0x7765, 0x7768, 0x7762, 0x77ee,
-  0x788e, 0x78b0, 0x7897, 0x7898, 0x788c, 0x7889, 0x787c, 0x7891,
-  0x7893, 0x787f, 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, 0x7a1c,
-  0x7a1a, 0x7a20, 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77,
-  0x7bc0, 0x7b60, 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93,
-  0x7d79, 0x7d91, 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a,
-  0x7f72, 0x7fa9, 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084,
-  0x8171, 0x8170, 0x8178, 0x8165, 0x816e, 0x8173, 0x816b, 0x8179,
-  0x817a, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843d, 0x8431,
-  0x8475, 0x8466, 0x846b, 0x8449, 0x846c, 0x845b, 0x843c, 0x8435,
-  0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e, 0x865c, 0x865f,
-  0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe, 0x86fb, 0x8702,
-  0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4, 0x88d9, 0x88dc,
-  0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2, 0x899c, 0x89e3,
-  0x8a6b, 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70, 0x8a87, 0x8a7c,
-  0x8a63, 0x8aa0, 0x8a71, 0x8a85, 0x8a6d, 0x8a62, 0x8a6e, 0x8a6c,
-  0x8a79, 0x8a7b, 0x8a3e, 0x8a68, 0x8c62, 0x8c8a, 0x8c89, 0x8cca,
-  0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, 0x8cc3, 0x8cc2, 0x8cc5, 0x8de1,
-  0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, 0x8dea, 0x8de4, 0x8de6,
-  0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a,
-  /* 0xb9 */
-  0x8f9f, 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c,
-  0x9055, 0x9050, 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e,
-  0x9041, 0x9112, 0x9117, 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237,
-  0x9257, 0x9238, 0x923d, 0x9240, 0x923e, 0x925b, 0x924b, 0x9264,
-  0x9251, 0x9234, 0x9249, 0x924d, 0x9245, 0x9239, 0x923f, 0x925a,
-  0x9598, 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, 0x96c9, 0x96ca,
-  0x96f7, 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, 0x9810,
-  0x9811, 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 0x98fd,
-  0x98fe, 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9, 0x9e82, 0x9f0e,
-  0x9f13, 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6, 0x50ed, 0x50da,
-  0x50d5, 0x50cf, 0x50d1, 0x50f1, 0x50ce, 0x50e9, 0x5162, 0x51f3,
-  0x5283, 0x5282, 0x5331, 0x53ad, 0x55fe, 0x5600, 0x561b, 0x5617,
-  0x55fd, 0x5614, 0x5606, 0x5609, 0x560d, 0x560e, 0x55f7, 0x5616,
-  0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, 0x5716, 0x5875, 0x587e,
-  0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d, 0x58fd, 0x5925,
-  0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6, 0x5ae9, 0x5ad7,
-  0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7, 0x5be1, 0x5be5,
-  0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d, 0x5c62, 0x5d84,
-  0x5d87, 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54, 0x5ed3, 0x5ed6,
-  0x5f0a, 0x5f46, 0x5f70, 0x5fb9, 0x6147,
-  /* 0xba */
-  0x613f, 0x614b, 0x6177, 0x6162, 0x6163, 0x615f, 0x615a, 0x6158,
-  0x6175, 0x622a, 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, 0x645f,
-  0x647a, 0x6451, 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1,
-  0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995,
-  0x69c1, 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab,
-  0x69b4, 0x69d0, 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3,
-  0x6b49, 0x6b4c, 0x6c33, 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4,
-  0x6f29, 0x6f3e, 0x6f20, 0x6f2c, 0x6f0f, 0x6f02, 0x6f22, 0x6eff,
-  0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, 0x6f23, 0x6f15, 0x6f2b,
-  0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2, 0x6ecc, 0x6ef7,
-  0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192, 0x723e, 0x7292,
-  0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a, 0x7470, 0x746d,
-  0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609, 0x7613, 0x76e1,
-  0x76e3, 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1, 0x789f, 0x78a7,
-  0x78b3, 0x78a9, 0x78a3, 0x798e, 0x798f, 0x798d, 0x7a2e, 0x7a31,
-  0x7aaa, 0x7aa9, 0x7aed, 0x7aef, 0x7ba1, 0x7b95, 0x7b8b, 0x7b75,
-  0x7b97, 0x7b9d, 0x7b94, 0x7b8f, 0x7bb8, 0x7b87, 0x7b84, 0x7cb9,
-  0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, 0x7dbd, 0x7dbe, 0x7da0,
-  0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2, 0x7dbf, 0x7db5,
-  0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac,
-  /* 0xbb */
-  0x7f70, 0x7fe0, 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150,
-  0x8180, 0x818f, 0x8188, 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa,
-  0x8207, 0x8214, 0x821e, 0x824b, 0x84c9, 0x84bf, 0x84c6, 0x84c4,
-  0x8499, 0x849e, 0x84b2, 0x849c, 0x84cb, 0x84b8, 0x84c0, 0x84d3,
-  0x8490, 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, 0x873b, 0x8722,
-  0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, 0x8902,
-  0x88f4, 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, 0x8aa6,
-  0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, 0x8aaa,
-  0x8aa5, 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7, 0x8c6a, 0x8c8d,
-  0x8c8c, 0x8cd3, 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99, 0x8d95, 0x8dfc,
-  0x8f14, 0x8f12, 0x8f15, 0x8f13, 0x8fa3, 0x9060, 0x9058, 0x905c,
-  0x9063, 0x9059, 0x905e, 0x9062, 0x905d, 0x905b, 0x9119, 0x9118,
-  0x911e, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, 0x9280, 0x9285,
-  0x9298, 0x9296, 0x927b, 0x9293, 0x929c, 0x92a8, 0x927c, 0x9291,
-  0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4, 0x9699, 0x969c,
-  0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785, 0x97f6, 0x9817,
-  0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c, 0x9909, 0x99c1,
-  0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4, 0x9cf6, 0x9cf3,
-  0x9ebc, 0x9f3b, 0x9f4a, 0x5104, 0x5100, 0x50fb, 0x50f5, 0x50f9,
-  0x5102, 0x5108, 0x5109, 0x5105, 0x51dc,
-  /* 0xbc */
-  0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, 0x53b2, 0x562e,
-  0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, 0x564e,
-  0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, 0x589e,
-  0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, 0x5afb,
-  0x5b0b, 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, 0x5beb,
-  0x5c64, 0x5c65, 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, 0x5ee2,
-  0x5eda, 0x5edf, 0x5edd, 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, 0x5fb7,
-  0x5fb5, 0x6176, 0x6167, 0x616e, 0x615d, 0x6155, 0x6182, 0x617c,
-  0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, 0x61ab, 0x618e, 0x61ac,
-  0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469, 0x646f, 0x6479,
-  0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, 0x64a5, 0x6493, 0x6495,
-  0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, 0x649a, 0x64ac, 0x6499,
-  0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, 0x66ae, 0x66ab, 0x66b4,
-  0x66b1, 0x6a23, 0x6a1f, 0x69e8, 0x6a01, 0x6a1e, 0x6a19, 0x69fd,
-  0x6a21, 0x6a13, 0x6a0a, 0x69f3, 0x6a02, 0x6a05, 0x69ed, 0x6a11,
-  0x6b50, 0x6b4e, 0x6ba4, 0x6bc5, 0x6bc6, 0x6f3f, 0x6f7c, 0x6f84,
-  0x6f51, 0x6f66, 0x6f54, 0x6f86, 0x6f6d, 0x6f5b, 0x6f78, 0x6f6e,
-  0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, 0x6f58, 0x6ed5, 0x6f6f,
-  0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, 0x71a8, 0x7256, 0x729b,
-  0x734e, 0x7357, 0x7469, 0x748b, 0x7483,
-  /* 0xbd */
-  0x747e, 0x7480, 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626,
-  0x7621, 0x7622, 0x769a, 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c,
-  0x7791, 0x778b, 0x78cb, 0x78c5, 0x78ba, 0x78ca, 0x78be, 0x78d5,
-  0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, 0x7a3d, 0x7a37, 0x7a3b,
-  0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, 0x7bc6, 0x7bc7,
-  0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, 0x7def, 0x7dfb,
-  0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, 0x7dde, 0x7de9,
-  0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, 0x7faf, 0x7fe9,
-  0x8026, 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a, 0x8198, 0x8517,
-  0x853d, 0x851a, 0x84ee, 0x852c, 0x852d, 0x8513, 0x8511, 0x8523,
-  0x8521, 0x8514, 0x84ec, 0x8525, 0x84ff, 0x8506, 0x8782, 0x8774,
-  0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, 0x8757, 0x874c,
-  0x8753, 0x885b, 0x885d, 0x8910, 0x8907, 0x8912, 0x8913, 0x8915,
-  0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95, 0x8acb, 0x8af8,
-  0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, 0x8ab0, 0x8ad6, 0x8acd, 0x8ab6,
-  0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, 0x8c6c, 0x8ce0, 0x8cde, 0x8ce6,
-  0x8ce4, 0x8cec, 0x8ced, 0x8ce2, 0x8ce3, 0x8cdc, 0x8cea, 0x8ce1,
-  0x8d6d, 0x8d9f, 0x8da3, 0x8e2b, 0x8e10, 0x8e1d, 0x8e22, 0x8e0f,
-  0x8e29, 0x8e1f, 0x8e21, 0x8e1e, 0x8eba, 0x8f1d, 0x8f1b, 0x8f1f,
-  0x8f29, 0x8f26, 0x8f2a, 0x8f1c, 0x8f1e,
-  /* 0xbe */
-  0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, 0x912d,
-  0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, 0x92bb,
-  0x92b7, 0x92ea, 0x92ac, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2,
-  0x92c7, 0x92f0, 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707,
-  0x9709, 0x9760, 0x978d, 0x978b, 0x978f, 0x9821, 0x982b, 0x981c,
-  0x98b3, 0x990a, 0x9913, 0x9912, 0x9918, 0x99dd, 0x99d0, 0x99df,
-  0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, 0x9ab7, 0x9aee, 0x9aef,
-  0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, 0x9d09, 0x9d03,
-  0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112, 0x5118, 0x5114,
-  0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291, 0x5293, 0x52f3,
-  0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678, 0x566a, 0x5668,
-  0x5665, 0x5671, 0x566f, 0x566c, 0x5662, 0x5676, 0x58c1, 0x58be,
-  0x58c7, 0x58c5, 0x596e, 0x5b1d, 0x5b34, 0x5b78, 0x5bf0, 0x5c0e,
-  0x5f4a, 0x61b2, 0x6191, 0x61a9, 0x618a, 0x61cd, 0x61b6, 0x61be,
-  0x61ca, 0x61c8, 0x6230, 0x64c5, 0x64c1, 0x64cb, 0x64bb, 0x64bc,
-  0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, 0x64bf, 0x64d2, 0x64d4,
-  0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4, 0x66c7, 0x66b8,
-  0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58, 0x6a39, 0x6a44,
-  0x6a62, 0x6a61, 0x6a4b, 0x6a47, 0x6a35, 0x6a5f, 0x6a48, 0x6b59,
-  0x6b77, 0x6c05, 0x6fc2, 0x6fb1, 0x6fa1,
-  /* 0xbf */
-  0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, 0x6fb3, 0x6fc0, 0x6fb9, 0x6fb6,
-  0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, 0x71d0, 0x71d2, 0x71c8,
-  0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, 0x71c4, 0x7368,
-  0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, 0x750d,
-  0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, 0x779f,
-  0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, 0x7a4e,
-  0x7a46, 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, 0x7be4,
-  0x7bdb, 0x7be1, 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, 0x7e11,
-  0x7e08, 0x7e1b, 0x7e23, 0x7e1e, 0x7e1d, 0x7e09, 0x7e10, 0x7f79,
-  0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, 0x8028, 0x81b3, 0x81a9, 0x81a8,
-  0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, 0x8559, 0x8548, 0x8568,
-  0x8569, 0x8543, 0x8549, 0x856d, 0x856a, 0x855e, 0x8783, 0x879f,
-  0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, 0x8932, 0x8925, 0x892b,
-  0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, 0x8aeb, 0x8af1, 0x8b00,
-  0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, 0x8b02, 0x8af7, 0x8aed,
-  0x8af3, 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, 0x8c93, 0x8cf4, 0x8e44,
-  0x8e31, 0x8e34, 0x8e42, 0x8e39, 0x8e35, 0x8f3b, 0x8f2f, 0x8f38,
-  0x8f33, 0x8fa8, 0x8fa6, 0x9075, 0x9074, 0x9078, 0x9072, 0x907c,
-  0x907a, 0x9134, 0x9192, 0x9320, 0x9336, 0x92f8, 0x9333, 0x932f,
-  0x9322, 0x92fc, 0x932b, 0x9304, 0x931a,
-  /* 0xc0 */
-  0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7,
-  0x96a8, 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713,
-  0x970f, 0x975b, 0x975c, 0x9766, 0x9798, 0x9830, 0x9838, 0x983b,
-  0x9837, 0x982d, 0x9839, 0x9824, 0x9910, 0x9928, 0x991e, 0x991b,
-  0x9921, 0x991a, 0x99ed, 0x99e2, 0x99f1, 0x9ab8, 0x9abc, 0x9afb,
-  0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, 0x9d26, 0x9d28, 0x9d12,
-  0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, 0x511f, 0x5121,
-  0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, 0x5687, 0x568f,
-  0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a, 0x5b24, 0x5b7a,
-  0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8, 0x5e6b, 0x5f4c,
-  0x5fbd, 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb, 0x6232, 0x6234,
-  0x64ce, 0x64ca, 0x64d8, 0x64e0, 0x64f0, 0x64e6, 0x64ec, 0x64f1,
-  0x64e2, 0x64ed, 0x6582, 0x6583, 0x66d9, 0x66d6, 0x6a80, 0x6a94,
-  0x6a84, 0x6aa2, 0x6a9c, 0x6adb, 0x6aa3, 0x6a7e, 0x6a97, 0x6a90,
-  0x6aa0, 0x6b5c, 0x6bae, 0x6bda, 0x6c08, 0x6fd8, 0x6ff1, 0x6fdf,
-  0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, 0x6fef, 0x6f80, 0x6fec, 0x6fe1,
-  0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, 0x71e7, 0x71df, 0x71ee, 0x71e6,
-  0x71e5, 0x71ed, 0x71ec, 0x71f4, 0x71e0, 0x7235, 0x7246, 0x7370,
-  0x7372, 0x74a9, 0x74b0, 0x74a6, 0x74a8, 0x7646, 0x7642, 0x764c,
-  0x76ea, 0x77b3, 0x77aa, 0x77b0, 0x77ac,
-  /* 0xc1 */
-  0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, 0x78f4, 0x78ef, 0x7901,
-  0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, 0x7bfe, 0x7bf7,
-  0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, 0x7cd9,
-  0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, 0x7e2b,
-  0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, 0x7e35,
-  0x7e3f, 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, 0x8070,
-  0x806f, 0x8073, 0x81c6, 0x81c3, 0x81ba, 0x81c2, 0x81c0, 0x81bf,
-  0x81bd, 0x81c9, 0x81be, 0x81e8, 0x8209, 0x8271, 0x85aa, 0x8584,
-  0x857e, 0x859c, 0x8591, 0x8594, 0x85af, 0x859b, 0x8587, 0x85a8,
-  0x858a, 0x8667, 0x87c0, 0x87d1, 0x87b3, 0x87d2, 0x87c6, 0x87ab,
-  0x87bb, 0x87ba, 0x87c8, 0x87cb, 0x893b, 0x8936, 0x8944, 0x8938,
-  0x893d, 0x89ac, 0x8b0e, 0x8b17, 0x8b19, 0x8b1b, 0x8b0a, 0x8b20,
-  0x8b1d, 0x8b04, 0x8b10, 0x8c41, 0x8c3f, 0x8c73, 0x8cfa, 0x8cfd,
-  0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, 0x8e49, 0x8e4b, 0x8e48, 0x8e4a,
-  0x8f44, 0x8f3e, 0x8f42, 0x8f45, 0x8f3f, 0x907f, 0x907d, 0x9084,
-  0x9081, 0x9082, 0x9080, 0x9139, 0x91a3, 0x919e, 0x919c, 0x934d,
-  0x9382, 0x9328, 0x9375, 0x934a, 0x9365, 0x934b, 0x9318, 0x937e,
-  0x936c, 0x935b, 0x9370, 0x935a, 0x9354, 0x95ca, 0x95cb, 0x95cc,
-  0x95c8, 0x95c6, 0x96b1, 0x96b8, 0x96d6, 0x971c, 0x971e, 0x97a0,
-  0x97d3, 0x9846, 0x98b6, 0x9935, 0x9a01,
-  /* 0xc2 */
-  0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, 0x9d3b, 0x9d3f, 0x9e8b,
-  0x9ecf, 0x9ede, 0x9edc, 0x9edd, 0x9edb, 0x9f3e, 0x9f4b, 0x53e2,
-  0x5695, 0x56ae, 0x58d9, 0x58d8, 0x5b38, 0x5f5d, 0x61e3, 0x6233,
-  0x64f4, 0x64f2, 0x64fe, 0x6506, 0x64fa, 0x64fb, 0x64f7, 0x65b7,
-  0x66dc, 0x6726, 0x6ab3, 0x6aac, 0x6ac3, 0x6abb, 0x6ab8, 0x6ac2,
-  0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, 0x7009, 0x700b, 0x6ffe,
-  0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, 0x71fc, 0x71fe, 0x71f8,
-  0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, 0x7656, 0x7658, 0x7652,
-  0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, 0x79ae, 0x7a61, 0x7a62,
-  0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, 0x7c2a, 0x7c1e, 0x7c23,
-  0x7c21, 0x7ce7, 0x7e54, 0x7e55, 0x7e5e, 0x7e5a, 0x7e61, 0x7e52,
-  0x7e59, 0x7f48, 0x7ff9, 0x7ffb, 0x8077, 0x8076, 0x81cd, 0x81cf,
-  0x820a, 0x85cf, 0x85a9, 0x85cd, 0x85d0, 0x85c9, 0x85b0, 0x85ba,
-  0x85b9, 0x85a6, 0x87ef, 0x87ec, 0x87f2, 0x87e0, 0x8986, 0x89b2,
-  0x89f4, 0x8b28, 0x8b39, 0x8b2c, 0x8b2b, 0x8c50, 0x8d05, 0x8e59,
-  0x8e63, 0x8e66, 0x8e64, 0x8e5f, 0x8e55, 0x8ec0, 0x8f49, 0x8f4d,
-  0x9087, 0x9083, 0x9088, 0x91ab, 0x91ac, 0x91d0, 0x9394, 0x938a,
-  0x9396, 0x93a2, 0x93b3, 0x93ae, 0x93ac, 0x93b0, 0x9398, 0x939a,
-  0x9397, 0x95d4, 0x95d6, 0x95d0, 0x95d5, 0x96e2, 0x96dc, 0x96d9,
-  0x96db, 0x96de, 0x9724, 0x97a3, 0x97a6,
-  /* 0xc3 */
-  0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, 0x9853, 0x98ba,
-  0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, 0x9b03,
-  0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, 0x9bc9, 0x9bfd, 0x9bc8,
-  0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, 0x9f15, 0x9f2c, 0x5133,
-  0x56a5, 0x58de, 0x58df, 0x58e2, 0x5bf5, 0x9f90, 0x5eec, 0x61f2,
-  0x61f7, 0x61f6, 0x61f5, 0x6500, 0x650f, 0x66e0, 0x66dd, 0x6ae5,
-  0x6add, 0x6ada, 0x6ad3, 0x701b, 0x701f, 0x7028, 0x701a, 0x701d,
-  0x7015, 0x7018, 0x7206, 0x720d, 0x7258, 0x72a2, 0x7378, 0x737a,
-  0x74bd, 0x74ca, 0x74e3, 0x7587, 0x7586, 0x765f, 0x7661, 0x77c7,
-  0x7919, 0x79b1, 0x7a6b, 0x7a69, 0x7c3e, 0x7c3f, 0x7c38, 0x7c3d,
-  0x7c37, 0x7c40, 0x7e6b, 0x7e6d, 0x7e79, 0x7e69, 0x7e6a, 0x7f85,
-  0x7e73, 0x7fb6, 0x7fb9, 0x7fb8, 0x81d8, 0x85e9, 0x85dd, 0x85ea,
-  0x85d5, 0x85e4, 0x85e5, 0x85f7, 0x87fb, 0x8805, 0x880d, 0x87f9,
-  0x87fe, 0x8960, 0x895f, 0x8956, 0x895e, 0x8b41, 0x8b5c, 0x8b58,
-  0x8b49, 0x8b5a, 0x8b4e, 0x8b4f, 0x8b46, 0x8b59, 0x8d08, 0x8d0a,
-  0x8e7c, 0x8e72, 0x8e87, 0x8e76, 0x8e6c, 0x8e7a, 0x8e74, 0x8f54,
-  0x8f4e, 0x8fad, 0x908a, 0x908b, 0x91b1, 0x91ae, 0x93e1, 0x93d1,
-  0x93df, 0x93c3, 0x93c8, 0x93dc, 0x93dd, 0x93d6, 0x93e2, 0x93cd,
-  0x93d8, 0x93e4, 0x93d7, 0x93e8, 0x95dc, 0x96b4, 0x96e3, 0x972a,
-  0x9727, 0x9761, 0x97dc, 0x97fb, 0x985e,
-  /* 0xc4 */
-  0x9858, 0x985b, 0x98bc, 0x9945, 0x9949, 0x9a16, 0x9a19, 0x9b0d,
-  0x9be8, 0x9be7, 0x9bd6, 0x9bdb, 0x9d89, 0x9d61, 0x9d72, 0x9d6a,
-  0x9d6c, 0x9e92, 0x9e97, 0x9e93, 0x9eb4, 0x52f8, 0x56a8, 0x56b7,
-  0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, 0x5b43, 0x5b7d, 0x5bf6,
-  0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, 0x66e6, 0x6727,
-  0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, 0x74cf, 0x7662,
-  0x7665, 0x7926, 0x792a, 0x792c, 0x792b, 0x7ac7, 0x7af6, 0x7c4c,
-  0x7c43, 0x7c4d, 0x7cef, 0x7cf0, 0x8fae, 0x7e7d, 0x7e7c, 0x7e82,
-  0x7f4c, 0x8000, 0x81da, 0x8266, 0x85fb, 0x85f9, 0x8611, 0x85fa,
-  0x8606, 0x860b, 0x8607, 0x860a, 0x8814, 0x8815, 0x8964, 0x89ba,
-  0x89f8, 0x8b70, 0x8b6c, 0x8b66, 0x8b6f, 0x8b5f, 0x8b6b, 0x8d0f,
-  0x8d0d, 0x8e89, 0x8e81, 0x8e85, 0x8e82, 0x91b4, 0x91cb, 0x9418,
-  0x9403, 0x93fd, 0x95e1, 0x9730, 0x98c4, 0x9952, 0x9951, 0x99a8,
-  0x9a2b, 0x9a30, 0x9a37, 0x9a35, 0x9c13, 0x9c0d, 0x9e79, 0x9eb5,
-  0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, 0x9f61, 0x5137, 0x5138, 0x56c1,
-  0x56c0, 0x56c2, 0x5914, 0x5c6c, 0x5dcd, 0x61fc, 0x61fe, 0x651d,
-  0x651c, 0x6595, 0x66e9, 0x6afb, 0x6b04, 0x6afa, 0x6bb2, 0x704c,
-  0x721b, 0x72a7, 0x74d6, 0x74d4, 0x7669, 0x77d3, 0x7c50, 0x7e8f,
-  0x7e8c, 0x7fbc, 0x8617, 0x862d, 0x861a, 0x8823, 0x8822, 0x8821,
-  0x881f, 0x896a, 0x896c, 0x89bd, 0x8b74,
-  /* 0xc5 */
-  0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, 0x8e8b, 0x8f5f, 0x8faf,
-  0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, 0x9438, 0x9432, 0x942b,
-  0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, 0x9867, 0x9865, 0x9957,
-  0x9a45, 0x9a43, 0x9a40, 0x9a3e, 0x9acf, 0x9b54, 0x9b51, 0x9c2d,
-  0x9c25, 0x9daf, 0x9db4, 0x9dc2, 0x9db8, 0x9e9d, 0x9eef, 0x9f19,
-  0x9f5c, 0x9f66, 0x9f67, 0x513c, 0x513b, 0x56c8, 0x56ca, 0x56c9,
-  0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, 0x61ff, 0x6524, 0x6b0a, 0x6b61,
-  0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, 0x766e, 0x766c, 0x79b3,
-  0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, 0x8972, 0x896f, 0x89fc,
-  0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, 0x8f61, 0x9148, 0x9444,
-  0x9451, 0x9452, 0x973d, 0x973e, 0x97c3, 0x97c1, 0x986b, 0x9955,
-  0x9a55, 0x9a4d, 0x9ad2, 0x9b1a, 0x9c49, 0x9c31, 0x9c3e, 0x9c3b,
-  0x9dd3, 0x9dd7, 0x9f34, 0x9f6c, 0x9f6a, 0x9f94, 0x56cc, 0x5dd6,
-  0x6200, 0x6523, 0x652b, 0x652a, 0x66ec, 0x6b10, 0x74da, 0x7aca,
-  0x7c64, 0x7c63, 0x7c65, 0x7e93, 0x7e96, 0x7e94, 0x81e2, 0x8638,
-  0x863f, 0x8831, 0x8b8a, 0x9090, 0x908f, 0x9463, 0x9460, 0x9464,
-  0x9768, 0x986f, 0x995c, 0x9a5a, 0x9a5b, 0x9a57, 0x9ad3, 0x9ad4,
-  0x9ad1, 0x9c54, 0x9c57, 0x9c56, 0x9de5, 0x9e9f, 0x9ef4, 0x56d1,
-  0x58e9, 0x652c, 0x705e, 0x7671, 0x7672, 0x77d7, 0x7f50, 0x7f88,
-  0x8836, 0x8839, 0x8862, 0x8b93, 0x8b92,
-  /* 0xc6 */
-  0x8b96, 0x8277, 0x8d1b, 0x91c0, 0x946a, 0x9742, 0x9748, 0x9744,
-  0x97c6, 0x9870, 0x9a5f, 0x9b22, 0x9b58, 0x9c5f, 0x9df9, 0x9dfa,
-  0x9e7c, 0x9e7d, 0x9f07, 0x9f77, 0x9f72, 0x5ef3, 0x6b16, 0x7063,
-  0x7c6c, 0x7c6e, 0x883b, 0x89c0, 0x8ea1, 0x91c1, 0x9472, 0x9470,
-  0x9871, 0x995e, 0x9ad6, 0x9b23, 0x9ecc, 0x7064, 0x77da, 0x8b9a,
-  0x9477, 0x97c9, 0x9a62, 0x9a65, 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5,
-  0x947d, 0x947e, 0x947c, 0x9c77, 0x9c78, 0x9ef7, 0x8c54, 0x947f,
-  0x9e1a, 0x7228, 0x9a6a, 0x9b31, 0x9e1b, 0x9e1e, 0x7c72, 0x30fe,
-  0x309d, 0x309e, 0x3005, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045,
-  0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d,
-  0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055,
-  0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d,
-  0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065,
-  0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d,
-  0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075,
-  0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d,
-  0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085,
-  0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d,
-  0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0x30a1, 0x30a2,
-  0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7,
-  /* 0xc7 */
-  0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af,
-  0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7,
-  0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf,
-  0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7,
-  0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf,
-  0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7,
-  0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df,
-  0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7,
-  0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef,
-  0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x0414,
-  0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b,
-  0x041c, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429,
-  0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0430, 0x0431,
-  0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438,
-  0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440,
-  0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448,
-  0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x2460,
-  0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468,
-  0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a,
-  0x247b, 0x247c, 0x247d,
-};
-static const unsigned short big5_2uni_pagec9[7652] = {
-  /* 0xc9 */
-  0x4e42, 0x4e5c, 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47,
-  0x4e8d, 0x56d7, 0xfa0c, 0x5c6e, 0x5f73, 0x4e0f, 0x5187, 0x4e0e,
-  0x4e2e, 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, 0x5198, 0x52fc, 0x536c,
-  0x53b9, 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, 0x65e1, 0x6bb3,
-  0x6bcc, 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, 0x4ee9,
-  0x4ee1, 0x4edd, 0x4eda, 0x520c, 0x531c, 0x534c, 0x5722, 0x5723,
-  0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73,
-  0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 0x6c36,
-  0x6c43, 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a, 0x79b8, 0x808a,
-  0x961e, 0x4f0e, 0x4f18, 0x4f2c, 0x4ef5, 0x4f14, 0x4ef1, 0x4f00,
-  0x4ef7, 0x4f08, 0x4f1d, 0x4f02, 0x4f05, 0x4f22, 0x4f13, 0x4f04,
-  0x4ef4, 0x4f12, 0x51b1, 0x5213, 0x5209, 0x5210, 0x52a6, 0x5322,
-  0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df, 0x572e, 0x572a,
-  0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b, 0x597e, 0x5977,
-  0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a, 0x5c7b, 0x5c7e,
-  0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74, 0x5fd5, 0x5fd4,
-  0x5fcf, 0x625c, 0x625e, 0x6264, 0x6261, 0x6266, 0x6262, 0x6259,
-  0x6260, 0x625a, 0x6265, 0x65ef, 0x65ee, 0x673e, 0x6739, 0x6738,
-  0x673b, 0x673a, 0x673f, 0x673c, 0x6733, 0x6c18, 0x6c46, 0x6c52,
-  0x6c5c, 0x6c4f, 0x6c4a, 0x6c54, 0x6c4b,
-  /* 0xca */
-  0x6c4c, 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, 0x767f,
-  0x7a75, 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d,
-  0x897e, 0x9099, 0x9097, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624,
-  0x9620, 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, 0x4f64,
-  0x4f3e, 0x4f67, 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, 0x4f33,
-  0x4f3f, 0x4f61, 0x518f, 0x51b9, 0x521c, 0x521e, 0x5221, 0x52ad,
-  0x52ae, 0x5309, 0x5363, 0x5372, 0x538e, 0x538f, 0x5430, 0x5437,
-  0x542a, 0x5454, 0x5445, 0x5419, 0x541c, 0x5425, 0x5418, 0x543d,
-  0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee, 0x56e7, 0x56e5,
-  0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752, 0x5906, 0x5940,
-  0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2, 0x5990, 0x598f,
-  0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a, 0x5c8d, 0x5c8f,
-  0x5c88, 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86, 0x5c93, 0x5c95,
-  0x5de0, 0x5e0a, 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c, 0x5e88, 0x5e8d,
-  0x5f05, 0x5f1d, 0x5f78, 0x5f76, 0x5fd2, 0x5fd1, 0x5fd0, 0x5fed,
-  0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, 0x5fe4, 0x5fe3, 0x5ffa, 0x5fef,
-  0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, 0x6283, 0x628c, 0x628e,
-  0x628f, 0x6294, 0x6287, 0x6271, 0x627b, 0x627a, 0x6270, 0x6281,
-  0x6288, 0x6277, 0x627d, 0x6272, 0x6274, 0x6537, 0x65f0, 0x65f4,
-  0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747,
-  /* 0xcb */
-  0x6759, 0x6755, 0x674c, 0x6748, 0x675d, 0x674d, 0x675a, 0x674b,
-  0x6bd0, 0x6c19, 0x6c1a, 0x6c78, 0x6c67, 0x6c6b, 0x6c84, 0x6c8b,
-  0x6c8f, 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, 0x6c87, 0x6c95,
-  0x6c9c, 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, 0x707a,
-  0x7263, 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5,
-  0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594,
-  0x7595, 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092,
-  0x809c, 0x8290, 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, 0x828a,
-  0x8283, 0x8284, 0x8c78, 0x8fc9, 0x8fbf, 0x909f, 0x90a1, 0x90a5,
-  0x909e, 0x90a7, 0x90a0, 0x9630, 0x9628, 0x962f, 0x962d, 0x4e33,
-  0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, 0x4f87, 0x4f76, 0x4f74,
-  0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a, 0x4f9a, 0x4f79,
-  0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e, 0x4f92, 0x4f82,
-  0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be, 0x5235, 0x5232,
-  0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b, 0x533c, 0x5392,
-  0x5394, 0x5487, 0x547f, 0x5481, 0x5491, 0x5482, 0x5488, 0x546b,
-  0x547a, 0x547e, 0x5465, 0x546c, 0x5474, 0x5466, 0x548d, 0x546f,
-  0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, 0x56f7, 0x56f9,
-  0x576f, 0x5772, 0x576d, 0x576b, 0x5771, 0x5770, 0x5776, 0x5780,
-  0x5775, 0x577b, 0x5773, 0x5774, 0x5762,
-  /* 0xcc */
-  0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce,
-  0x59b2, 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1,
-  0x59bd, 0x59c0, 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93,
-  0x5b95, 0x5c44, 0x5c47, 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf,
-  0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, 0x5cad, 0x5ca2, 0x5caa, 0x5ca7,
-  0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, 0x5e17, 0x5e14, 0x5e19,
-  0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, 0x5f7e, 0x5f7d,
-  0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, 0x6034,
-  0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c, 0x6022, 0x600d,
-  0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009, 0x601c, 0x6214,
-  0x623d, 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa, 0x62b6, 0x62ca,
-  0x62ae, 0x62b3, 0x62af, 0x62bb, 0x62a9, 0x62b0, 0x62b8, 0x653d,
-  0x65a8, 0x65bb, 0x6609, 0x65fc, 0x6604, 0x6612, 0x6608, 0x65fb,
-  0x6603, 0x660b, 0x660d, 0x6605, 0x65fd, 0x6611, 0x6610, 0x66f6,
-  0x670a, 0x6785, 0x676c, 0x678e, 0x6792, 0x6776, 0x677b, 0x6798,
-  0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a, 0x679f, 0x6791,
-  0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779, 0x6794, 0x6b25,
-  0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec, 0x6ceb, 0x6cee,
-  0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7, 0x6cd0, 0x6cc2,
-  0x6cba, 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2,
-  /* 0xcd */
-  0x6cd2, 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, 0x6c80, 0x6cde, 0x6cc0,
-  0x6d30, 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, 0x6ce9, 0x6cd1,
-  0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096,
-  0x7082, 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, 0x72c9,
-  0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, 0x73a1,
-  0x73ad, 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, 0x74e8,
-  0x753f, 0x7540, 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, 0x76f1,
-  0x76f0, 0x76f5, 0x77f8, 0x77fc, 0x77f9, 0x77fb, 0x77fa, 0x77f7,
-  0x7942, 0x793f, 0x79c5, 0x7a78, 0x7a7b, 0x7afb, 0x7c75, 0x7cfd,
-  0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, 0x80b5, 0x80ad, 0x8220,
-  0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b, 0x82b5, 0x82a7,
-  0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8, 0x82a1, 0x82a9,
-  0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670, 0x866f, 0x866d,
-  0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd, 0x8fd6, 0x8fd5,
-  0x8fd7, 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0, 0x9639, 0x963d,
-  0x963c, 0x963a, 0x9643, 0x4fcd, 0x4fc5, 0x4fd3, 0x4fb2, 0x4fc9,
-  0x4fcb, 0x4fc1, 0x4fd4, 0x4fdc, 0x4fd9, 0x4fbb, 0x4fb3, 0x4fdb,
-  0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, 0x4fb9, 0x4fec, 0x5244, 0x5249,
-  0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, 0x5396, 0x5399, 0x5398,
-  0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf,
-  /* 0xce */
-  0x54c3, 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6,
-  0x54a0, 0x5470, 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0,
-  0x57b5, 0x579e, 0x579f, 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b,
-  0x5794, 0x5798, 0x578f, 0x5799, 0x57a5, 0x579a, 0x5795, 0x58f4,
-  0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, 0x5a00, 0x59f1, 0x59dd,
-  0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, 0x59f7, 0x59db,
-  0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, 0x5ba8,
-  0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, 0x5cdb, 0x5cde,
-  0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3, 0x5cd4, 0x5ccf,
-  0x5cc8, 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9, 0x5e21, 0x5e22,
-  0x5e23, 0x5e20, 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2, 0x5e9b, 0x5ea3,
-  0x5ea5, 0x5f07, 0x5f2e, 0x5f56, 0x5f86, 0x6037, 0x6039, 0x6054,
-  0x6072, 0x605e, 0x6045, 0x6053, 0x6047, 0x6049, 0x605b, 0x604c,
-  0x6040, 0x6042, 0x605f, 0x6024, 0x6044, 0x6058, 0x6066, 0x606e,
-  0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5, 0x630e, 0x6303,
-  0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6, 0x6300, 0x6313,
-  0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541, 0x6543, 0x65aa,
-  0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c, 0x6626, 0x6622,
-  0x6633, 0x662b, 0x663a, 0x661d, 0x6634, 0x6639, 0x662e, 0x670f,
-  0x6710, 0x67c1, 0x67f2, 0x67c8, 0x67ba,
-  /* 0xcf */
-  0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, 0x67c5, 0x67eb,
-  0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, 0x67ee,
-  0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, 0x67fc,
-  0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, 0x67c9,
-  0x67ca, 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, 0x6bb6,
-  0x6bd6, 0x6bd8, 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, 0x6d2d,
-  0x6d1f, 0x6d3c, 0x6d3f, 0x6d12, 0x6d0a, 0x6cda, 0x6d33, 0x6d04,
-  0x6d19, 0x6d3a, 0x6d1a, 0x6d11, 0x6d00, 0x6d1d, 0x6d42, 0x6d01,
-  0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, 0x6d07, 0x6d20, 0x6d2c,
-  0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f, 0x70be, 0x70b1,
-  0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241, 0x7249, 0x724a,
-  0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, 0x72e4, 0x72e8, 0x72eb,
-  0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, 0x73cc, 0x73c2, 0x73c8,
-  0x73c5, 0x73b9, 0x73b6, 0x73b5, 0x73b4, 0x73eb, 0x73bf, 0x73c7,
-  0x73be, 0x73c3, 0x73c6, 0x73b8, 0x73cb, 0x74ec, 0x74ee, 0x752e,
-  0x7547, 0x7548, 0x75a7, 0x75aa, 0x7679, 0x76c4, 0x7708, 0x7703,
-  0x7704, 0x7705, 0x770a, 0x76f7, 0x76fb, 0x76fa, 0x77e7, 0x77e8,
-  0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780f, 0x780e, 0x7809,
-  0x7803, 0x7813, 0x794a, 0x794c, 0x794b, 0x7945, 0x7944, 0x79d5,
-  0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80,
-  /* 0xd0 */
-  0x7a7e, 0x7ad1, 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f,
-  0x7c80, 0x7c81, 0x7d03, 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d,
-  0x7fbe, 0x8007, 0x800e, 0x800f, 0x8014, 0x8037, 0x80d8, 0x80c7,
-  0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, 0x80c5, 0x80e3, 0x80d9,
-  0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, 0x80e6, 0x80cd,
-  0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, 0x8307, 0x82e8,
-  0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, 0x82ec, 0x82e1,
-  0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, 0x82ea, 0x82e4,
-  0x82e0, 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674, 0x867c, 0x8673,
-  0x8841, 0x884e, 0x8867, 0x886a, 0x8869, 0x89d3, 0x8a04, 0x8a07,
-  0x8d72, 0x8fe3, 0x8fe1, 0x8fee, 0x8fe0, 0x90f1, 0x90bd, 0x90bf,
-  0x90d5, 0x90c5, 0x90be, 0x90c7, 0x90cb, 0x90c8, 0x91d4, 0x91d3,
-  0x9654, 0x964f, 0x9651, 0x9653, 0x964a, 0x964e, 0x501e, 0x5005,
-  0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5, 0x4ff4, 0x5033,
-  0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c, 0x5020, 0x5027,
-  0x5035, 0x502f, 0x5031, 0x500e, 0x515a, 0x5194, 0x5193, 0x51ca,
-  0x51c4, 0x51c5, 0x51c8, 0x51ce, 0x5261, 0x525a, 0x5252, 0x525e,
-  0x525f, 0x5255, 0x5262, 0x52cd, 0x530e, 0x539e, 0x5526, 0x54e2,
-  0x5517, 0x5512, 0x54e7, 0x54f3, 0x54e4, 0x551a, 0x54ff, 0x5504,
-  0x5508, 0x54eb, 0x5511, 0x5505, 0x54f1,
-  /* 0xd1 */
-  0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, 0x550b,
-  0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, 0x57c6,
-  0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, 0x57b9,
-  0x57c1, 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, 0x5a15,
-  0x5a0f, 0x5a17, 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, 0x5bad,
-  0x5bac, 0x5c03, 0x5c56, 0x5c54, 0x5cec, 0x5cff, 0x5cee, 0x5cf1,
-  0x5cf7, 0x5d00, 0x5cf9, 0x5e29, 0x5e28, 0x5ea8, 0x5eae, 0x5eaa,
-  0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, 0x605a, 0x6067, 0x6041,
-  0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609d, 0x6083, 0x6095,
-  0x609b, 0x6097, 0x6087, 0x609c, 0x608e, 0x6219, 0x6246, 0x62f2,
-  0x6310, 0x6356, 0x632c, 0x6344, 0x6345, 0x6336, 0x6343, 0x63e4,
-  0x6339, 0x634b, 0x634a, 0x633c, 0x6329, 0x6341, 0x6334, 0x6358,
-  0x6354, 0x6359, 0x632d, 0x6347, 0x6333, 0x635a, 0x6351, 0x6338,
-  0x6357, 0x6340, 0x6348, 0x654a, 0x6546, 0x65c6, 0x65c3, 0x65c4,
-  0x65c2, 0x664a, 0x665f, 0x6647, 0x6651, 0x6712, 0x6713, 0x681f,
-  0x681a, 0x6849, 0x6832, 0x6833, 0x683b, 0x684b, 0x684f, 0x6816,
-  0x6831, 0x681c, 0x6835, 0x682b, 0x682d, 0x682f, 0x684e, 0x6844,
-  0x6834, 0x681d, 0x6812, 0x6814, 0x6826, 0x6828, 0x682e, 0x684d,
-  0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, 0x6b2d, 0x6b31, 0x6b34,
-  0x6b6d, 0x8082, 0x6b88, 0x6be6, 0x6be4,
-  /* 0xd2 */
-  0x6be8, 0x6be3, 0x6be2, 0x6be7, 0x6c25, 0x6d7a, 0x6d63, 0x6d64,
-  0x6d76, 0x6d0d, 0x6d61, 0x6d92, 0x6d58, 0x6d62, 0x6d6d, 0x6d6f,
-  0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, 0x6d5e, 0x6d67, 0x6d60,
-  0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, 0x6d2f, 0x6d68,
-  0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, 0x6d7b, 0x6d7d,
-  0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, 0x70cb, 0x7f39,
-  0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, 0x70cd, 0x70c5,
-  0x70c6, 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, 0x7278, 0x7277,
-  0x7276, 0x7300, 0x72fa, 0x72f4, 0x72fe, 0x72f6, 0x72f3, 0x72fb,
-  0x7301, 0x73d3, 0x73d9, 0x73e5, 0x73d6, 0x73bc, 0x73e7, 0x73e3,
-  0x73e9, 0x73dc, 0x73d2, 0x73db, 0x73d4, 0x73dd, 0x73da, 0x73d7,
-  0x73d8, 0x73e8, 0x74de, 0x74df, 0x74f4, 0x74f5, 0x7521, 0x755b,
-  0x755f, 0x75b0, 0x75c1, 0x75bb, 0x75c4, 0x75c0, 0x75bf, 0x75b6,
-  0x75ba, 0x768a, 0x76c9, 0x771d, 0x771b, 0x7710, 0x7713, 0x7712,
-  0x7723, 0x7711, 0x7715, 0x7719, 0x771a, 0x7722, 0x7727, 0x7823,
-  0x782c, 0x7822, 0x7835, 0x782f, 0x7828, 0x782e, 0x782b, 0x7821,
-  0x7829, 0x7833, 0x782a, 0x7831, 0x7954, 0x795b, 0x794f, 0x795c,
-  0x7953, 0x7952, 0x7951, 0x79eb, 0x79ec, 0x79e0, 0x79ee, 0x79ed,
-  0x79ea, 0x79dc, 0x79de, 0x79dd, 0x7a86, 0x7a89, 0x7a85, 0x7a8b,
-  0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, 0x7b10,
-  /* 0xd3 */
-  0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, 0x7b09,
-  0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, 0x7c85,
-  0x7d1e, 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, 0x7d1f,
-  0x7d12, 0x7d0f, 0x7d0c, 0x7f5c, 0x7f61, 0x7f5e, 0x7f60, 0x7f5d,
-  0x7f5b, 0x7f96, 0x7f92, 0x7fc3, 0x7fc2, 0x7fc0, 0x8016, 0x803e,
-  0x8039, 0x80fa, 0x80f2, 0x80f9, 0x80f5, 0x8101, 0x80fb, 0x8100,
-  0x8201, 0x822f, 0x8225, 0x8333, 0x832d, 0x8344, 0x8319, 0x8351,
-  0x8325, 0x8356, 0x833f, 0x8341, 0x8326, 0x831c, 0x8322, 0x8342,
-  0x834e, 0x831b, 0x832a, 0x8308, 0x833c, 0x834d, 0x8316, 0x8324,
-  0x8320, 0x8337, 0x832f, 0x8329, 0x8347, 0x8345, 0x834c, 0x8353,
-  0x831e, 0x832c, 0x834b, 0x8327, 0x8348, 0x8653, 0x8652, 0x86a2,
-  0x86a8, 0x8696, 0x868d, 0x8691, 0x869e, 0x8687, 0x8697, 0x8686,
-  0x868b, 0x869a, 0x8685, 0x86a5, 0x8699, 0x86a1, 0x86a7, 0x8695,
-  0x8698, 0x868e, 0x869d, 0x8690, 0x8694, 0x8843, 0x8844, 0x886d,
-  0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887f, 0x886f, 0x8883,
-  0x887e, 0x8874, 0x887c, 0x8a12, 0x8c47, 0x8c57, 0x8c7b, 0x8ca4,
-  0x8ca3, 0x8d76, 0x8d78, 0x8db5, 0x8db7, 0x8db6, 0x8ed1, 0x8ed3,
-  0x8ffe, 0x8ff5, 0x9002, 0x8fff, 0x8ffb, 0x9004, 0x8ffc, 0x8ff6,
-  0x90d6, 0x90e0, 0x90d9, 0x90da, 0x90e3, 0x90df, 0x90e5, 0x90d8,
-  0x90db, 0x90d7, 0x90dc, 0x90e4, 0x9150,
-  /* 0xd4 */
-  0x914e, 0x914f, 0x91d5, 0x91e2, 0x91da, 0x965c, 0x965f, 0x96bc,
-  0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, 0x506a, 0x5061, 0x505e,
-  0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, 0x504d, 0x5041,
-  0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, 0x5069, 0x506b,
-  0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, 0x5057, 0x5051,
-  0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, 0x52d3, 0x532d,
-  0x539c, 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, 0x5534, 0x552a,
-  0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0x550c,
-  0x5532, 0x5565, 0x554e, 0x5539, 0x5548, 0x552d, 0x553b, 0x5540,
-  0x554b, 0x570a, 0x5707, 0x57fb, 0x5814, 0x57e2, 0x57f6, 0x57dc,
-  0x57f4, 0x5800, 0x57ed, 0x57fd, 0x5808, 0x57f8, 0x580b, 0x57f3,
-  0x57cf, 0x5807, 0x57ee, 0x57e3, 0x57f2, 0x57e5, 0x57ec, 0x57e1,
-  0x580e, 0x57fc, 0x5810, 0x57e7, 0x5801, 0x580c, 0x57f1, 0x57e9,
-  0x57f0, 0x580d, 0x5804, 0x595c, 0x5a60, 0x5a58, 0x5a55, 0x5a67,
-  0x5a5e, 0x5a38, 0x5a35, 0x5a6d, 0x5a50, 0x5a5f, 0x5a65, 0x5a6c,
-  0x5a53, 0x5a64, 0x5a57, 0x5a43, 0x5a5d, 0x5a52, 0x5a44, 0x5a5b,
-  0x5a48, 0x5a8e, 0x5a3e, 0x5a4d, 0x5a39, 0x5a4c, 0x5a70, 0x5a69,
-  0x5a47, 0x5a51, 0x5a56, 0x5a42, 0x5a5c, 0x5b72, 0x5b6e, 0x5bc1,
-  0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, 0x5d1d, 0x5d1a, 0x5d20, 0x5d0c,
-  0x5d28, 0x5d0d, 0x5d26, 0x5d25, 0x5d0f,
-  /* 0xd5 */
-  0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, 0x5e3e, 0x5e34, 0x5eb1,
-  0x5eb4, 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, 0x5f38, 0x5f9b, 0x5f96,
-  0x5f9f, 0x608a, 0x6090, 0x6086, 0x60be, 0x60b0, 0x60ba, 0x60d3,
-  0x60d4, 0x60cf, 0x60e4, 0x60d9, 0x60dd, 0x60c8, 0x60b1, 0x60db,
-  0x60b7, 0x60ca, 0x60bf, 0x60c3, 0x60cd, 0x60c0, 0x6332, 0x6365,
-  0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, 0x63ad, 0x639d, 0x6397,
-  0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, 0x636e, 0x63af, 0x6375,
-  0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, 0x633b, 0x639f, 0x6378,
-  0x6385, 0x6381, 0x6391, 0x638d, 0x6370, 0x6553, 0x65cd, 0x6665,
-  0x6661, 0x665b, 0x6659, 0x665c, 0x6662, 0x6718, 0x6879, 0x6887,
-  0x6890, 0x689c, 0x686d, 0x686e, 0x68ae, 0x68ab, 0x6956, 0x686f,
-  0x68a3, 0x68ac, 0x68a9, 0x6875, 0x6874, 0x68b2, 0x688f, 0x6877,
-  0x6892, 0x687c, 0x686b, 0x6872, 0x68aa, 0x6880, 0x6871, 0x687e,
-  0x689b, 0x6896, 0x688b, 0x68a0, 0x6889, 0x68a4, 0x6878, 0x687b,
-  0x6891, 0x688c, 0x688a, 0x687d, 0x6b36, 0x6b33, 0x6b37, 0x6b38,
-  0x6b91, 0x6b8f, 0x6b8d, 0x6b8e, 0x6b8c, 0x6c2a, 0x6dc0, 0x6dab,
-  0x6db4, 0x6db3, 0x6e74, 0x6dac, 0x6de9, 0x6de2, 0x6db7, 0x6df6,
-  0x6dd4, 0x6e00, 0x6dc8, 0x6de0, 0x6ddf, 0x6dd6, 0x6dbe, 0x6de5,
-  0x6ddc, 0x6ddd, 0x6ddb, 0x6df4, 0x6dca, 0x6dbd, 0x6ded, 0x6df0,
-  0x6dba, 0x6dd5, 0x6dc2, 0x6dcf, 0x6dc9,
-  /* 0xd6 */
-  0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, 0x6dcd, 0x6de3, 0x6dbb,
-  0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, 0x70f0, 0x7104,
-  0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, 0x7100, 0x70f8,
-  0x70f6, 0x710b, 0x7102, 0x710e, 0x727e, 0x727b, 0x727c, 0x727f,
-  0x731d, 0x7317, 0x7307, 0x7311, 0x7318, 0x730a, 0x7308, 0x72ff,
-  0x730f, 0x731e, 0x7388, 0x73f6, 0x73f8, 0x73f5, 0x7404, 0x7401,
-  0x73fd, 0x7407, 0x7400, 0x73fa, 0x73fc, 0x73ff, 0x740c, 0x740b,
-  0x73f4, 0x7408, 0x7564, 0x7563, 0x75ce, 0x75d2, 0x75cf, 0x75cb,
-  0x75cc, 0x75d1, 0x75d0, 0x768f, 0x7689, 0x76d3, 0x7739, 0x772f,
-  0x772d, 0x7731, 0x7732, 0x7734, 0x7733, 0x773d, 0x7725, 0x773b,
-  0x7735, 0x7848, 0x7852, 0x7849, 0x784d, 0x784a, 0x784c, 0x7826,
-  0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796a, 0x7963, 0x796b,
-  0x7961, 0x79bb, 0x79fa, 0x79f8, 0x79f6, 0x79f7, 0x7a8f, 0x7a94,
-  0x7a90, 0x7b35, 0x7b47, 0x7b34, 0x7b25, 0x7b30, 0x7b22, 0x7b24,
-  0x7b33, 0x7b18, 0x7b2a, 0x7b1d, 0x7b31, 0x7b2b, 0x7b2d, 0x7b2f,
-  0x7b32, 0x7b38, 0x7b1a, 0x7b23, 0x7c94, 0x7c98, 0x7c96, 0x7ca3,
-  0x7d35, 0x7d3d, 0x7d38, 0x7d36, 0x7d3a, 0x7d45, 0x7d2c, 0x7d29,
-  0x7d41, 0x7d47, 0x7d3e, 0x7d3f, 0x7d4a, 0x7d3b, 0x7d28, 0x7f63,
-  0x7f95, 0x7f9c, 0x7f9d, 0x7f9b, 0x7fca, 0x7fcb, 0x7fcd, 0x7fd0,
-  0x7fd1, 0x7fc7, 0x7fcf, 0x7fc9, 0x801f,
-  /* 0xd7 */
-  0x801e, 0x801b, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119,
-  0x811b, 0x812d, 0x811f, 0x812c, 0x811e, 0x8121, 0x8115, 0x8127,
-  0x811d, 0x8122, 0x8211, 0x8238, 0x8233, 0x823a, 0x8234, 0x8232,
-  0x8274, 0x8390, 0x83a3, 0x83a8, 0x838d, 0x837a, 0x8373, 0x83a4,
-  0x8374, 0x838f, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83a9,
-  0x837d, 0x8383, 0x838c, 0x839d, 0x839b, 0x83aa, 0x838b, 0x837e,
-  0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, 0x837f, 0x83a6, 0x8387,
-  0x83ae, 0x8376, 0x839a, 0x8659, 0x8656, 0x86bf, 0x86b7, 0x86c2,
-  0x86c1, 0x86c5, 0x86ba, 0x86b0, 0x86c8, 0x86b9, 0x86b3, 0x86b8,
-  0x86cc, 0x86b4, 0x86bb, 0x86bc, 0x86c3, 0x86bd, 0x86be, 0x8852,
-  0x8889, 0x8895, 0x88a8, 0x88a2, 0x88aa, 0x889a, 0x8891, 0x88a1,
-  0x889f, 0x8898, 0x88a7, 0x8899, 0x889b, 0x8897, 0x88a4, 0x88ac,
-  0x888c, 0x8893, 0x888e, 0x8982, 0x89d6, 0x89d9, 0x89d5, 0x8a30,
-  0x8a27, 0x8a2c, 0x8a1e, 0x8c39, 0x8c3b, 0x8c5c, 0x8c5d, 0x8c7d,
-  0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, 0x8dbc, 0x8dc2, 0x8db9, 0x8dbf,
-  0x8dc1, 0x8ed8, 0x8ede, 0x8edd, 0x8edc, 0x8ed7, 0x8ee0, 0x8ee1,
-  0x9024, 0x900b, 0x9011, 0x901c, 0x900c, 0x9021, 0x90ef, 0x90ea,
-  0x90f0, 0x90f4, 0x90f2, 0x90f3, 0x90d4, 0x90eb, 0x90ec, 0x90e9,
-  0x9156, 0x9158, 0x915a, 0x9153, 0x9155, 0x91ec, 0x91f4, 0x91f1,
-  0x91f3, 0x91f8, 0x91e4, 0x91f9, 0x91ea,
-  /* 0xd8 */
-  0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, 0x9586, 0x9588, 0x967c,
-  0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, 0x976a, 0x9804, 0x98e5,
-  0x9997, 0x509b, 0x5095, 0x5094, 0x509e, 0x508b, 0x50a3, 0x5083,
-  0x508c, 0x508e, 0x509d, 0x5068, 0x509c, 0x5092, 0x5082, 0x5087,
-  0x515f, 0x51d4, 0x5312, 0x5311, 0x53a4, 0x53a7, 0x5591, 0x55a8,
-  0x55a5, 0x55ad, 0x5577, 0x5645, 0x55a2, 0x5593, 0x5588, 0x558f,
-  0x55b5, 0x5581, 0x55a3, 0x5592, 0x55a4, 0x557d, 0x558c, 0x55a6,
-  0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, 0x5829, 0x5837, 0x5819,
-  0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, 0x5848, 0x5825, 0x581c,
-  0x581b, 0x5833, 0x583f, 0x5836, 0x582e, 0x5839, 0x5838, 0x582d,
-  0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, 0x5a9f, 0x5a7a, 0x5aa2,
-  0x5a9e, 0x5a78, 0x5aa6, 0x5a7c, 0x5aa5, 0x5aac, 0x5a95, 0x5aae,
-  0x5a37, 0x5a84, 0x5a8a, 0x5a97, 0x5a83, 0x5a8b, 0x5aa9, 0x5a7b,
-  0x5a7d, 0x5a8c, 0x5a9c, 0x5a8f, 0x5a93, 0x5a9d, 0x5bea, 0x5bcd,
-  0x5bcb, 0x5bd4, 0x5bd1, 0x5bca, 0x5bce, 0x5c0c, 0x5c30, 0x5d37,
-  0x5d43, 0x5d6b, 0x5d41, 0x5d4b, 0x5d3f, 0x5d35, 0x5d51, 0x5d4e,
-  0x5d55, 0x5d33, 0x5d3a, 0x5d52, 0x5d3d, 0x5d31, 0x5d59, 0x5d42,
-  0x5d39, 0x5d49, 0x5d38, 0x5d3c, 0x5d32, 0x5d36, 0x5d40, 0x5d45,
-  0x5e44, 0x5e41, 0x5f58, 0x5fa6, 0x5fa5, 0x5fab, 0x60c9, 0x60b9,
-  0x60cc, 0x60e2, 0x60ce, 0x60c4, 0x6114,
-  /* 0xd9 */
-  0x60f2, 0x610a, 0x6116, 0x6105, 0x60f5, 0x6113, 0x60f8, 0x60fc,
-  0x60fe, 0x60c1, 0x6103, 0x6118, 0x611d, 0x6110, 0x60ff, 0x6104,
-  0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, 0x63ce, 0x63e5, 0x63e8,
-  0x63ef, 0x63c3, 0x649d, 0x63f3, 0x63ca, 0x63e0, 0x63f6, 0x63d5,
-  0x63f2, 0x63f5, 0x6461, 0x63df, 0x63be, 0x63dd, 0x63dc, 0x63c4,
-  0x63d8, 0x63d3, 0x63c2, 0x63c7, 0x63cc, 0x63cb, 0x63c8, 0x63f0,
-  0x63d7, 0x63d9, 0x6532, 0x6567, 0x656a, 0x6564, 0x655c, 0x6568,
-  0x6565, 0x658c, 0x659d, 0x659e, 0x65ae, 0x65d0, 0x65d2, 0x667c,
-  0x666c, 0x667b, 0x6680, 0x6671, 0x6679, 0x666a, 0x6672, 0x6701,
-  0x690c, 0x68d3, 0x6904, 0x68dc, 0x692a, 0x68ec, 0x68ea, 0x68f1,
-  0x690f, 0x68d6, 0x68f7, 0x68eb, 0x68e4, 0x68f6, 0x6913, 0x6910,
-  0x68f3, 0x68e1, 0x6907, 0x68cc, 0x6908, 0x6970, 0x68b4, 0x6911,
-  0x68ef, 0x68c6, 0x6914, 0x68f8, 0x68d0, 0x68fd, 0x68fc, 0x68e8,
-  0x690b, 0x690a, 0x6917, 0x68ce, 0x68c8, 0x68dd, 0x68de, 0x68e6,
-  0x68f4, 0x68d1, 0x6906, 0x68d4, 0x68e9, 0x6915, 0x6925, 0x68c7,
-  0x6b39, 0x6b3b, 0x6b3f, 0x6b3c, 0x6b94, 0x6b97, 0x6b99, 0x6b95,
-  0x6bbd, 0x6bf0, 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc, 0x6e46, 0x6e47,
-  0x6e1f, 0x6e49, 0x6e88, 0x6e3c, 0x6e3d, 0x6e45, 0x6e62, 0x6e2b,
-  0x6e3f, 0x6e41, 0x6e5d, 0x6e73, 0x6e1c, 0x6e33, 0x6e4b, 0x6e40,
-  0x6e51, 0x6e3b, 0x6e03, 0x6e2e, 0x6e5e,
-  /* 0xda */
-  0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, 0x6e60, 0x6e71, 0x6e6b,
-  0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, 0x6e27, 0x6e78, 0x6e64,
-  0x6e77, 0x6e55, 0x6e79, 0x6e52, 0x6e66, 0x6e35, 0x6e36, 0x6e5a,
-  0x7120, 0x711e, 0x712f, 0x70fb, 0x712e, 0x7131, 0x7123, 0x7125,
-  0x7122, 0x7132, 0x711f, 0x7128, 0x713a, 0x711b, 0x724b, 0x725a,
-  0x7288, 0x7289, 0x7286, 0x7285, 0x728b, 0x7312, 0x730b, 0x7330,
-  0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732d, 0x7326, 0x7323,
-  0x7335, 0x730c, 0x742e, 0x742c, 0x7430, 0x742b, 0x7416, 0x741a,
-  0x7421, 0x742d, 0x7431, 0x7424, 0x7423, 0x741d, 0x7429, 0x7420,
-  0x7432, 0x74fb, 0x752f, 0x756f, 0x756c, 0x75e7, 0x75da, 0x75e1,
-  0x75e6, 0x75dd, 0x75df, 0x75e4, 0x75d7, 0x7695, 0x7692, 0x76da,
-  0x7746, 0x7747, 0x7744, 0x774d, 0x7745, 0x774a, 0x774e, 0x774b,
-  0x774c, 0x77de, 0x77ec, 0x7860, 0x7864, 0x7865, 0x785c, 0x786d,
-  0x7871, 0x786a, 0x786e, 0x7870, 0x7869, 0x7868, 0x785e, 0x7862,
-  0x7974, 0x7973, 0x7972, 0x7970, 0x7a02, 0x7a0a, 0x7a03, 0x7a0c,
-  0x7a04, 0x7a99, 0x7ae6, 0x7ae4, 0x7b4a, 0x7b3b, 0x7b44, 0x7b48,
-  0x7b4c, 0x7b4e, 0x7b40, 0x7b58, 0x7b45, 0x7ca2, 0x7c9e, 0x7ca8,
-  0x7ca1, 0x7d58, 0x7d6f, 0x7d63, 0x7d53, 0x7d56, 0x7d67, 0x7d6a,
-  0x7d4f, 0x7d6d, 0x7d5c, 0x7d6b, 0x7d52, 0x7d54, 0x7d69, 0x7d51,
-  0x7d5f, 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65,
-  /* 0xdb */
-  0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, 0x7fd7, 0x8051, 0x804f, 0x8050,
-  0x80fe, 0x80d4, 0x8143, 0x814a, 0x8152, 0x814f, 0x8147, 0x813d,
-  0x814d, 0x813a, 0x81e6, 0x81ee, 0x81f7, 0x81f8, 0x81f9, 0x8204,
-  0x823c, 0x823d, 0x823f, 0x8275, 0x833b, 0x83cf, 0x83f9, 0x8423,
-  0x83c0, 0x83e8, 0x8412, 0x83e7, 0x83e4, 0x83fc, 0x83f6, 0x8410,
-  0x83c6, 0x83c8, 0x83eb, 0x83e3, 0x83bf, 0x8401, 0x83dd, 0x83e5,
-  0x83d8, 0x83ff, 0x83e1, 0x83cb, 0x83ce, 0x83d6, 0x83f5, 0x83c9,
-  0x8409, 0x840f, 0x83de, 0x8411, 0x8406, 0x83c2, 0x83f3, 0x83d5,
-  0x83fa, 0x83c7, 0x83d1, 0x83ea, 0x8413, 0x83c3, 0x83ec, 0x83ee,
-  0x83c4, 0x83fb, 0x83d7, 0x83e2, 0x841b, 0x83db, 0x83fe, 0x86d8,
-  0x86e2, 0x86e6, 0x86d3, 0x86e3, 0x86da, 0x86ea, 0x86dd, 0x86eb,
-  0x86dc, 0x86ec, 0x86e9, 0x86d7, 0x86e8, 0x86d1, 0x8848, 0x8856,
-  0x8855, 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0, 0x88be, 0x88b6,
-  0x88bc, 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9, 0x8995, 0x8998,
-  0x8997, 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d, 0x8a39, 0x8a59,
-  0x8a40, 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52, 0x8a48, 0x8a51,
-  0x8a4a, 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80, 0x8cba, 0x8cbe,
-  0x8cb0, 0x8cb9, 0x8cb5, 0x8d84, 0x8d80, 0x8d89, 0x8dd8, 0x8dd3,
-  0x8dcd, 0x8dc7, 0x8dd6, 0x8ddc, 0x8dcf, 0x8dd5, 0x8dd9, 0x8dc8,
-  0x8dd7, 0x8dc5, 0x8eef, 0x8ef7, 0x8efa,
-  /* 0xdc */
-  0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6,
-  0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, 0x8ee9, 0x902d, 0x9034, 0x902f,
-  0x9106, 0x912c, 0x9104, 0x90ff, 0x90fc, 0x9108, 0x90f9, 0x90fb,
-  0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f,
-  0x9162, 0x9160, 0x9201, 0x920a, 0x9225, 0x9203, 0x921a, 0x9226,
-  0x920f, 0x920c, 0x9200, 0x9212, 0x91ff, 0x91fd, 0x9206, 0x9204,
-  0x9227, 0x9202, 0x921c, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216,
-  0x957b, 0x958d, 0x958c, 0x9590, 0x9687, 0x967e, 0x9688, 0x9689,
-  0x9683, 0x9680, 0x96c2, 0x96c8, 0x96c3, 0x96f1, 0x96f0, 0x976c,
-  0x9770, 0x976e, 0x9807, 0x98a9, 0x98eb, 0x9ce6, 0x9ef9, 0x4e83,
-  0x4e84, 0x4eb6, 0x50bd, 0x50bf, 0x50c6, 0x50ae, 0x50c4, 0x50ca,
-  0x50b4, 0x50c8, 0x50c2, 0x50b0, 0x50c1, 0x50ba, 0x50b1, 0x50cb,
-  0x50c9, 0x50b6, 0x50b8, 0x51d7, 0x527a, 0x5278, 0x527b, 0x527c,
-  0x55c3, 0x55db, 0x55cc, 0x55d0, 0x55cb, 0x55ca, 0x55dd, 0x55c0,
-  0x55d4, 0x55c4, 0x55e9, 0x55bf, 0x55d2, 0x558d, 0x55cf, 0x55d5,
-  0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, 0x55d9, 0x55c2, 0x5714,
-  0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849, 0x586f, 0x5855,
-  0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d, 0x5863, 0x5871,
-  0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8, 0x5ab1, 0x5ab5,
-  0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6,
-  /* 0xdd */
-  0x5ab7, 0x5ac0, 0x5aca, 0x5ab4, 0x5ab6, 0x5acd, 0x5ab9, 0x5a90,
-  0x5bd6, 0x5bd8, 0x5bd9, 0x5c1f, 0x5c33, 0x5d71, 0x5d63, 0x5d4a,
-  0x5d65, 0x5d72, 0x5d6c, 0x5d5e, 0x5d68, 0x5d67, 0x5d62, 0x5df0,
-  0x5e4f, 0x5e4e, 0x5e4a, 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, 0x5ec6,
-  0x5ecb, 0x5ec7, 0x5f40, 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a,
-  0x612b, 0x6145, 0x6136, 0x6132, 0x612e, 0x6146, 0x612f, 0x614f,
-  0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5,
-  0x63f1, 0x63eb, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x6433,
-  0x6443, 0x641f, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423,
-  0x640c, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, 0x642f, 0x640a,
-  0x641a, 0x6440, 0x6425, 0x6427, 0x640b, 0x63e7, 0x641b, 0x642e,
-  0x6421, 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686, 0x668c, 0x6695,
-  0x6690, 0x668b, 0x668a, 0x6699, 0x6694, 0x6678, 0x6720, 0x6966,
-  0x695f, 0x6938, 0x694e, 0x6962, 0x6971, 0x693f, 0x6945, 0x696a,
-  0x6939, 0x6942, 0x6957, 0x6959, 0x697a, 0x6948, 0x6949, 0x6935,
-  0x696c, 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978, 0x6934, 0x6969,
-  0x6940, 0x696f, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694c,
-  0x693b, 0x694b, 0x6937, 0x695c, 0x694f, 0x6951, 0x6932, 0x6952,
-  0x692f, 0x697b, 0x693c, 0x6b46, 0x6b45, 0x6b43, 0x6b42, 0x6b48,
-  0x6b41, 0x6b9b, 0xfa0d, 0x6bfb, 0x6bfc,
-  /* 0xde */
-  0x6bf9, 0x6bf7, 0x6bf8, 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0,
-  0x6e9f, 0x6e93, 0x6e94, 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2,
-  0x6ebd, 0x6ec1, 0x6e9e, 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6,
-  0x6ecf, 0x6eb2, 0x6ebe, 0x6ec3, 0x6edc, 0x6ed8, 0x6e99, 0x6e92,
-  0x6e8e, 0x6e8d, 0x6ea4, 0x6ea1, 0x6ebf, 0x6eb3, 0x6ed0, 0x6eca,
-  0x6e97, 0x6eae, 0x6ea3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160,
-  0x7141, 0x715d, 0x7162, 0x7172, 0x7178, 0x716a, 0x7161, 0x7142,
-  0x7158, 0x7143, 0x714b, 0x7170, 0x715f, 0x7150, 0x7153, 0x7144,
-  0x714d, 0x715a, 0x724f, 0x728d, 0x728c, 0x7291, 0x7290, 0x728e,
-  0x733c, 0x7342, 0x733b, 0x733a, 0x7340, 0x734a, 0x7349, 0x7444,
-  0x744a, 0x744b, 0x7452, 0x7451, 0x7457, 0x7440, 0x744f, 0x7450,
-  0x744e, 0x7442, 0x7446, 0x744d, 0x7454, 0x74e1, 0x74ff, 0x74fe,
-  0x74fd, 0x751d, 0x7579, 0x7577, 0x6983, 0x75ef, 0x760f, 0x7603,
-  0x75f7, 0x75fe, 0x75fc, 0x75f9, 0x75f8, 0x7610, 0x75fb, 0x75f6,
-  0x75ed, 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd, 0x7755, 0x775f,
-  0x7760, 0x7752, 0x7756, 0x775a, 0x7769, 0x7767, 0x7754, 0x7759,
-  0x776d, 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f, 0x7884, 0x7895,
-  0x7885, 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899, 0x7880, 0x7896,
-  0x787b, 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11, 0x7a18, 0x7a19,
-  0x7a12, 0x7a17, 0x7a15, 0x7a22, 0x7a13,
-  /* 0xdf */
-  0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, 0x7a9e, 0x7aeb, 0x7b66, 0x7b64,
-  0x7b6d, 0x7b74, 0x7b69, 0x7b72, 0x7b65, 0x7b73, 0x7b71, 0x7b70,
-  0x7b61, 0x7b78, 0x7b76, 0x7b63, 0x7cb2, 0x7cb4, 0x7caf, 0x7d88,
-  0x7d86, 0x7d80, 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b,
-  0x7d83, 0x7d7c, 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d,
-  0x7f6b, 0x7f67, 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb,
-  0x7fdc, 0x8021, 0x8164, 0x8160, 0x8177, 0x815c, 0x8169, 0x815b,
-  0x8162, 0x8172, 0x6721, 0x815e, 0x8176, 0x8167, 0x816f, 0x8144,
-  0x8161, 0x821d, 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84f1,
-  0x843f, 0x8456, 0x8476, 0x8479, 0x848f, 0x848d, 0x8465, 0x8451,
-  0x8440, 0x8486, 0x8467, 0x8430, 0x844d, 0x847d, 0x845a, 0x8459,
-  0x8474, 0x8473, 0x845d, 0x8507, 0x845e, 0x8437, 0x843a, 0x8434,
-  0x847a, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, 0x83d9, 0x844b,
-  0x842f, 0x8442, 0x842d, 0x845f, 0x8470, 0x8439, 0x844e, 0x844c,
-  0x8452, 0x846f, 0x84c5, 0x848e, 0x843b, 0x8447, 0x8436, 0x8433,
-  0x8468, 0x847e, 0x8444, 0x842b, 0x8460, 0x8454, 0x846e, 0x8450,
-  0x870b, 0x8704, 0x86f7, 0x870c, 0x86fa, 0x86d6, 0x86f5, 0x874d,
-  0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, 0x870d, 0x8705, 0x88d6,
-  0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da, 0x88cc, 0x88d0,
-  0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4,
-  /* 0xe0 */
-  0x89e1, 0x89e0, 0x89e2, 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f,
-  0x8a61, 0x8a3f, 0x8a77, 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81,
-  0x8a74, 0x8a7a, 0x8c3c, 0x8c4b, 0x8c4a, 0x8c65, 0x8c64, 0x8c66,
-  0x8c86, 0x8c84, 0x8c85, 0x8ccc, 0x8d68, 0x8d69, 0x8d91, 0x8d8c,
-  0x8d8e, 0x8d8f, 0x8d8d, 0x8d93, 0x8d94, 0x8d90, 0x8d92, 0x8df0,
-  0x8de0, 0x8dec, 0x8df1, 0x8dee, 0x8dd0, 0x8de9, 0x8de3, 0x8de2,
-  0x8de7, 0x8df2, 0x8deb, 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00,
-  0x8f05, 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 0x9044,
-  0x9049, 0x903d, 0x9110, 0x910d, 0x910f, 0x9111, 0x9116, 0x9114,
-  0x910b, 0x910e, 0x916e, 0x916f, 0x9248, 0x9252, 0x9230, 0x923a,
-  0x9266, 0x9233, 0x9265, 0x925e, 0x9283, 0x922e, 0x924a, 0x9246,
-  0x926d, 0x926c, 0x924f, 0x9260, 0x9267, 0x926f, 0x9236, 0x9261,
-  0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, 0x924e, 0x9253,
-  0x924c, 0x9256, 0x9232, 0x959f, 0x959c, 0x959e, 0x959b, 0x9692,
-  0x9693, 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd, 0x96f8, 0x96f5,
-  0x9773, 0x9777, 0x9778, 0x9772, 0x980f, 0x980d, 0x980e, 0x98ac,
-  0x98f6, 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5, 0x9aad, 0x9aab,
-  0x9b5b, 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd, 0x50e6, 0x50d4,
-  0x50d7, 0x50e8, 0x50f3, 0x50db, 0x50ea, 0x50dd, 0x50e4, 0x50d3,
-  0x50ec, 0x50f0, 0x50ef, 0x50e3, 0x50e0,
-  /* 0xe1 */
-  0x51d8, 0x5280, 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, 0x5627,
-  0x5615, 0x560c, 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613,
-  0x5602, 0x55fa, 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c,
-  0x5890, 0x5898, 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a,
-  0x5887, 0x5891, 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894,
-  0x588f, 0x58fe, 0x596b, 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea,
-  0x5ada, 0x5aed, 0x5aeb, 0x5af3, 0x5ae2, 0x5ae0, 0x5adb, 0x5aec,
-  0x5ade, 0x5add, 0x5ad9, 0x5ae8, 0x5adf, 0x5b77, 0x5be0, 0x5be3,
-  0x5c63, 0x5d82, 0x5d80, 0x5d7d, 0x5d86, 0x5d7a, 0x5d81, 0x5d77,
-  0x5d8a, 0x5d89, 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d, 0x5d79, 0x5d7f,
-  0x5e58, 0x5e59, 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7, 0x5ece, 0x5edc,
-  0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43, 0x5f6f, 0x5fb6,
-  0x612c, 0x6128, 0x6141, 0x615e, 0x6171, 0x6173, 0x6152, 0x6153,
-  0x6172, 0x616c, 0x6180, 0x6174, 0x6154, 0x617a, 0x615b, 0x6165,
-  0x613b, 0x616a, 0x6161, 0x6156, 0x6229, 0x6227, 0x622b, 0x642b,
-  0x644d, 0x645b, 0x645d, 0x6474, 0x6476, 0x6472, 0x6473, 0x647d,
-  0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, 0x645e, 0x645c, 0x644b,
-  0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c, 0x646b, 0x6459,
-  0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0, 0x669f, 0x6705,
-  0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9,
-  /* 0xe2 */
-  0x69a0, 0x69ce, 0x6996, 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999,
-  0x698e, 0x69a7, 0x698d, 0x69a9, 0x69be, 0x69af, 0x69bf, 0x69c4,
-  0x69bd, 0x69a4, 0x69d4, 0x69b9, 0x69ca, 0x699a, 0x69cf, 0x69b3,
-  0x6993, 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, 0x6990, 0x69c2,
-  0x69b5, 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, 0x6b9f,
-  0x6ba0, 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03,
-  0x6f25, 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19,
-  0x6f1a, 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 0x6f36,
-  0x6f73, 0x6ef9, 0x6eee, 0x6f2d, 0x6f40, 0x6f30, 0x6f3c, 0x6f35,
-  0x6eeb, 0x6f07, 0x6f0e, 0x6f43, 0x6f05, 0x6efd, 0x6ef6, 0x6f39,
-  0x6f1c, 0x6efc, 0x6f3a, 0x6f1f, 0x6f0d, 0x6f1e, 0x6f08, 0x6f21,
-  0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, 0x718f, 0x717b,
-  0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, 0x7295, 0x7293,
-  0x7343, 0x734d, 0x7351, 0x734c, 0x7462, 0x7473, 0x7471, 0x7475,
-  0x7472, 0x7467, 0x746e, 0x7500, 0x7502, 0x7503, 0x757d, 0x7590,
-  0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a, 0x7614, 0x76b8,
-  0x7781, 0x777c, 0x7785, 0x7782, 0x776e, 0x7780, 0x776f, 0x777e,
-  0x7783, 0x78b2, 0x78aa, 0x78b4, 0x78ad, 0x78a8, 0x787e, 0x78ab,
-  0x789e, 0x78a5, 0x78a0, 0x78ac, 0x78a2, 0x78a4, 0x7998, 0x798a,
-  0x798b, 0x7996, 0x7995, 0x7994, 0x7993,
-  /* 0xe3 */
-  0x7997, 0x7988, 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f,
-  0x7a28, 0x7a26, 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c,
-  0x7b8a, 0x7b91, 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e,
-  0x7b85, 0x7b98, 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf,
-  0x7cbc, 0x7cba, 0x7da7, 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1,
-  0x7dc0, 0x7dc5, 0x7d9d, 0x7dce, 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc,
-  0x7daf, 0x7db9, 0x7d96, 0x7dbc, 0x7d9f, 0x7da6, 0x7dae, 0x7da9,
-  0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, 0x7fde, 0x8024,
-  0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187, 0x818d, 0x818c,
-  0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f, 0x84ba, 0x84ce,
-  0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4, 0x84c1, 0x84cd,
-  0x84aa, 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7, 0x84bb, 0x84a2,
-  0x8494, 0x84c7, 0x84cc, 0x849b, 0x84a9, 0x84af, 0x84a8, 0x84d6,
-  0x8498, 0x84b6, 0x84cf, 0x84a0, 0x84d7, 0x84d4, 0x84d2, 0x84db,
-  0x84b0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, 0x876b, 0x8740,
-  0x872e, 0x871e, 0x8721, 0x8719, 0x871b, 0x8743, 0x872c, 0x8741,
-  0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d, 0x873c, 0x8712,
-  0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, 0x8738, 0x8724,
-  0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1, 0x88f2, 0x88fa,
-  0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb,
-  /* 0xe4 */
-  0x88f0, 0x88ec, 0x88eb, 0x899d, 0x89a1, 0x899f, 0x899e, 0x89e9,
-  0x89eb, 0x89e8, 0x8aab, 0x8a99, 0x8a8b, 0x8a92, 0x8a8f, 0x8a96,
-  0x8c3d, 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, 0x8d96, 0x8e09,
-  0x8e02, 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, 0x8e06,
-  0x8e05, 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d,
-  0x9123, 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124,
-  0x9121, 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4,
-  0x9276, 0x929b, 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 0x92a6,
-  0x929a, 0x92ab, 0x9279, 0x9297, 0x927f, 0x92a3, 0x92ee, 0x928e,
-  0x9282, 0x9295, 0x92a2, 0x927d, 0x9288, 0x92a1, 0x928a, 0x9286,
-  0x928c, 0x9299, 0x92a7, 0x927e, 0x9287, 0x92a9, 0x929d, 0x928b,
-  0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d, 0x977a, 0x977e,
-  0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781, 0x977f, 0x97ce,
-  0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900, 0x9907, 0x999d,
-  0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2, 0x99bd, 0x99c7,
-  0x9ab1, 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60, 0x9b61, 0x9b5f,
-  0x9cf1, 0x9cf2, 0x9cf5, 0x9ea7, 0x50ff, 0x5103, 0x5130, 0x50f8,
-  0x5106, 0x5107, 0x50f6, 0x50fe, 0x510b, 0x510c, 0x50fd, 0x510a,
-  0x528b, 0x528c, 0x52f1, 0x52ef, 0x5648, 0x5642, 0x564c, 0x5635,
-  0x5641, 0x564a, 0x5649, 0x5646, 0x5658,
-  /* 0xe5 */
-  0x565a, 0x5640, 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a,
-  0x563a, 0x571a, 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af,
-  0x58ac, 0x58a5, 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7,
-  0x5af6, 0x5b03, 0x5af8, 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05,
-  0x5b0f, 0x5c67, 0x5d99, 0x5d97, 0x5d9f, 0x5d92, 0x5da2, 0x5d93,
-  0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, 0x5d9e, 0x5e69, 0x5e5d,
-  0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, 0x5f49, 0x5fb2,
-  0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, 0x619b,
-  0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa, 0x61a1, 0x618d,
-  0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496, 0x64a0, 0x6485,
-  0x6497, 0x649c, 0x648f, 0x648b, 0x648a, 0x648c, 0x64a3, 0x649f,
-  0x6468, 0x64b1, 0x6498, 0x6576, 0x657a, 0x6579, 0x657b, 0x65b2,
-  0x65b3, 0x66b5, 0x66b0, 0x66a9, 0x66b2, 0x66b7, 0x66aa, 0x66af,
-  0x6a00, 0x6a06, 0x6a17, 0x69e5, 0x69f8, 0x6a15, 0x69f1, 0x69e4,
-  0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, 0x6a1d, 0x69fe, 0x6a27,
-  0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40, 0x6a08, 0x69e6,
-  0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04, 0x6a18, 0x6a25,
-  0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16, 0x6b51, 0x6ba5,
-  0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff, 0x6c02, 0x6f41,
-  0x6f26, 0x6f7e, 0x6f87, 0x6fc6, 0x6f92,
-  /* 0xe6 */
-  0x6f8d, 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, 0x6f85, 0x6f5a, 0x6f96,
-  0x6f76, 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, 0x6f50, 0x6f57,
-  0x6f94, 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, 0x6f67,
-  0x6f90, 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77,
-  0x6f6a, 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a,
-  0x71a9, 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa,
-  0x719c, 0x71a7, 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, 0x735e,
-  0x735f, 0x7360, 0x735d, 0x735b, 0x7361, 0x735a, 0x7359, 0x7362,
-  0x7487, 0x7489, 0x748a, 0x7486, 0x7481, 0x747d, 0x7485, 0x7488,
-  0x747c, 0x7479, 0x7508, 0x7507, 0x757e, 0x7625, 0x761e, 0x7619,
-  0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b, 0x769c, 0x769d,
-  0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788, 0x78cd, 0x78bb,
-  0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8, 0x78c3, 0x78c4,
-  0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2, 0x799b, 0x6b76,
-  0x7a39, 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb, 0x7bbe, 0x7bac,
-  0x7bce, 0x7baf, 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5, 0x7cc8, 0x7ccc,
-  0x7ccb, 0x7df7, 0x7ddb, 0x7dea, 0x7de7, 0x7dd7, 0x7de1, 0x7e03,
-  0x7dfa, 0x7de6, 0x7df6, 0x7df1, 0x7df0, 0x7dee, 0x7ddf, 0x7f76,
-  0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, 0x7fea, 0x7fec, 0x7fe6,
-  0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f,
-  /* 0xe7 */
-  0x819e, 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253,
-  0x8252, 0x8250, 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500,
-  0x8529, 0x850e, 0x8509, 0x850d, 0x851f, 0x850a, 0x8527, 0x851c,
-  0x84fb, 0x852b, 0x84fa, 0x8508, 0x850c, 0x84f4, 0x852a, 0x84f2,
-  0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, 0x8512, 0x84ea, 0x84e9,
-  0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, 0x84fd, 0x851e,
-  0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, 0x84f9,
-  0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 0x8756,
-  0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758, 0x8754, 0x875b,
-  0x8752, 0x8761, 0x875a, 0x8751, 0x875e, 0x876d, 0x876a, 0x8750,
-  0x874e, 0x875f, 0x875d, 0x876f, 0x876c, 0x877a, 0x876e, 0x875c,
-  0x8765, 0x874f, 0x877b, 0x8775, 0x8762, 0x8767, 0x8769, 0x885a,
-  0x8905, 0x890c, 0x8914, 0x890b, 0x8917, 0x8918, 0x8919, 0x8906,
-  0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, 0x89a4, 0x89a3, 0x89ed,
-  0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3, 0x8ad1, 0x8ad4,
-  0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5, 0x8ad8, 0x8ac3,
-  0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f, 0x8ce5, 0x8cdf,
-  0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0, 0x8d9c, 0x8da1,
-  0x8d9b, 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e, 0x8e15, 0x8e1b,
-  0x8e16, 0x8e11, 0x8e19, 0x8e26, 0x8e27,
-  /* 0xe8 */
-  0x8e14, 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, 0x8e1a, 0x8f2c,
-  0x8f24, 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, 0x9073,
-  0x9070, 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, 0x912a,
-  0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, 0x9182,
-  0x9184, 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, 0x92b6,
-  0x92cf, 0x92f1, 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, 0x92cc,
-  0x92ef, 0x92c2, 0x92e8, 0x92ca, 0x92c8, 0x92ce, 0x92e6, 0x92cd,
-  0x92d5, 0x92c9, 0x92e0, 0x92de, 0x92e7, 0x92d1, 0x92d3, 0x92b5,
-  0x92e1, 0x92c6, 0x92b4, 0x957c, 0x95ac, 0x95ab, 0x95ae, 0x95b0,
-  0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, 0x9702, 0x975a, 0x978a,
-  0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d, 0x9826, 0x9829,
-  0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908, 0x98fa, 0x9911,
-  0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd, 0x99cf, 0x99d3,
-  0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb, 0x99d7, 0x99cc,
-  0x9ab3, 0x9aec, 0x9aeb, 0x9af3, 0x9af2, 0x9af1, 0x9b46, 0x9b43,
-  0x9b67, 0x9b74, 0x9b71, 0x9b66, 0x9b76, 0x9b75, 0x9b70, 0x9b68,
-  0x9b64, 0x9b6c, 0x9cfc, 0x9cfa, 0x9cfd, 0x9cff, 0x9cf7, 0x9d07,
-  0x9d00, 0x9cf9, 0x9cfb, 0x9d08, 0x9d05, 0x9d04, 0x9e83, 0x9ed3,
-  0x9f0f, 0x9f10, 0x511c, 0x5113, 0x5117, 0x511a, 0x5111, 0x51de,
-  0x5334, 0x53e1, 0x5670, 0x5660, 0x566e,
-  /* 0xe9 */
-  0x5673, 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, 0x571c,
-  0x571b, 0x58c8, 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, 0x58bc,
-  0x58c6, 0x5b17, 0x5b19, 0x5b1b, 0x5b21, 0x5b14, 0x5b13, 0x5b10,
-  0x5b16, 0x5b28, 0x5b1a, 0x5b20, 0x5b1e, 0x5bef, 0x5dac, 0x5db1,
-  0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, 0x5daa, 0x5da8, 0x5db2,
-  0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, 0x5e6f, 0x5ee9,
-  0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, 0x5fbc, 0x619d, 0x61a8,
-  0x6196, 0x61c5, 0x61b4, 0x61c6, 0x61c1, 0x61cc, 0x61ba, 0x61bf,
-  0x61b8, 0x618c, 0x64d7, 0x64d6, 0x64d0, 0x64cf, 0x64c9, 0x64bd,
-  0x6489, 0x64c3, 0x64db, 0x64f3, 0x64d9, 0x6533, 0x657f, 0x657c,
-  0x65a2, 0x66c8, 0x66be, 0x66c0, 0x66ca, 0x66cb, 0x66cf, 0x66bd,
-  0x66bb, 0x66ba, 0x66cc, 0x6723, 0x6a34, 0x6a66, 0x6a49, 0x6a67,
-  0x6a32, 0x6a68, 0x6a3e, 0x6a5d, 0x6a6d, 0x6a76, 0x6a5b, 0x6a51,
-  0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, 0x6a41, 0x6a6a, 0x6a64, 0x6a50,
-  0x6a4f, 0x6a54, 0x6a6f, 0x6a69, 0x6a60, 0x6a3c, 0x6a5e, 0x6a56,
-  0x6a55, 0x6a4d, 0x6a4e, 0x6a46, 0x6b55, 0x6b54, 0x6b56, 0x6ba7,
-  0x6baa, 0x6bab, 0x6bc8, 0x6bc7, 0x6c04, 0x6c03, 0x6c06, 0x6fad,
-  0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, 0x6fce, 0x6fc8, 0x6f5e, 0x6fc4,
-  0x6fbd, 0x6f9e, 0x6fca, 0x6fa8, 0x7004, 0x6fa5, 0x6fae, 0x6fba,
-  0x6fac, 0x6faa, 0x6fcf, 0x6fbf, 0x6fb8,
-  /* 0xea */
-  0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, 0x6fb2, 0x6fb0, 0x71c5,
-  0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, 0x71c1, 0x71cb, 0x71d4,
-  0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, 0x71bc, 0x71c6, 0x71da,
-  0x71db, 0x729d, 0x729e, 0x7369, 0x7366, 0x7367, 0x736c, 0x7365,
-  0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, 0x7494, 0x7492, 0x7495,
-  0x74a1, 0x750b, 0x7580, 0x762f, 0x762d, 0x7631, 0x763d, 0x7633,
-  0x763c, 0x7635, 0x7632, 0x7630, 0x76bb, 0x76e6, 0x779a, 0x779d,
-  0x77a1, 0x779c, 0x779b, 0x77a2, 0x77a3, 0x7795, 0x7799, 0x7797,
-  0x78dd, 0x78e9, 0x78e5, 0x78ea, 0x78de, 0x78e3, 0x78db, 0x78e1,
-  0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, 0x7a44, 0x7a48, 0x7a47,
-  0x7ab6, 0x7ab8, 0x7ab5, 0x7ab1, 0x7ab7, 0x7bde, 0x7be3, 0x7be7,
-  0x7bdd, 0x7bd5, 0x7be5, 0x7bda, 0x7be8, 0x7bf9, 0x7bd4, 0x7bea,
-  0x7be2, 0x7bdc, 0x7beb, 0x7bd8, 0x7bdf, 0x7cd2, 0x7cd4, 0x7cd7,
-  0x7cd0, 0x7cd1, 0x7e12, 0x7e21, 0x7e17, 0x7e0c, 0x7e1f, 0x7e20,
-  0x7e13, 0x7e0e, 0x7e1c, 0x7e15, 0x7e1a, 0x7e22, 0x7e0b, 0x7e0f,
-  0x7e16, 0x7e0d, 0x7e14, 0x7e25, 0x7e24, 0x7f43, 0x7f7b, 0x7f7c,
-  0x7f7a, 0x7fb1, 0x7fef, 0x802a, 0x8029, 0x806c, 0x81b1, 0x81a6,
-  0x81ae, 0x81b9, 0x81b5, 0x81ab, 0x81b0, 0x81ac, 0x81b4, 0x81b2,
-  0x81b7, 0x81a7, 0x81f2, 0x8255, 0x8256, 0x8257, 0x8556, 0x8545,
-  0x856b, 0x854d, 0x8553, 0x8561, 0x8558,
-  /* 0xeb */
-  0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547,
-  0x8563, 0x853e, 0x855b, 0x8571, 0x854e, 0x856e, 0x8575, 0x8555,
-  0x8567, 0x8560, 0x858c, 0x8566, 0x855d, 0x8554, 0x8565, 0x856c,
-  0x8663, 0x8665, 0x8664, 0x879b, 0x878f, 0x8797, 0x8793, 0x8792,
-  0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87a3, 0x8785,
-  0x8790, 0x8791, 0x879d, 0x8784, 0x8794, 0x879c, 0x879a, 0x8789,
-  0x891e, 0x8926, 0x8930, 0x892d, 0x892e, 0x8927, 0x8931, 0x8922,
-  0x8929, 0x8923, 0x892f, 0x892c, 0x891f, 0x89f1, 0x8ae0, 0x8ae2,
-  0x8af2, 0x8af4, 0x8af5, 0x8add, 0x8b14, 0x8ae4, 0x8adf, 0x8af0,
-  0x8ac8, 0x8ade, 0x8ae1, 0x8ae8, 0x8aff, 0x8aef, 0x8afb, 0x8c91,
-  0x8c92, 0x8c90, 0x8cf5, 0x8cee, 0x8cf1, 0x8cf0, 0x8cf3, 0x8d6c,
-  0x8d6e, 0x8da5, 0x8da7, 0x8e33, 0x8e3e, 0x8e38, 0x8e40, 0x8e45,
-  0x8e36, 0x8e3c, 0x8e3d, 0x8e41, 0x8e30, 0x8e3f, 0x8ebd, 0x8f36,
-  0x8f2e, 0x8f35, 0x8f32, 0x8f39, 0x8f37, 0x8f34, 0x9076, 0x9079,
-  0x907b, 0x9086, 0x90fa, 0x9133, 0x9135, 0x9136, 0x9193, 0x9190,
-  0x9191, 0x918d, 0x918f, 0x9327, 0x931e, 0x9308, 0x931f, 0x9306,
-  0x930f, 0x937a, 0x9338, 0x933c, 0x931b, 0x9323, 0x9312, 0x9301,
-  0x9346, 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d, 0x92fa, 0x9325,
-  0x9313, 0x92f9, 0x92f7, 0x9334, 0x9302, 0x9324, 0x92ff, 0x9329,
-  0x9339, 0x9335, 0x932a, 0x9314, 0x930c,
-  /* 0xec */
-  0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, 0x9316, 0x95bc, 0x95cd,
-  0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, 0x95b5, 0x95bd, 0x96a9,
-  0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97f0,
-  0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, 0x991f, 0x9927, 0x9929,
-  0x999e, 0x99ee, 0x99ec, 0x99e5, 0x99e4, 0x99f0, 0x99e3, 0x99ea,
-  0x99e9, 0x99e7, 0x9ab9, 0x9abf, 0x9ab4, 0x9abb, 0x9af6, 0x9afa,
-  0x9af9, 0x9af7, 0x9b33, 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e,
-  0x9b7b, 0x9b82, 0x9b93, 0x9b92, 0x9b90, 0x9b7a, 0x9b95, 0x9b7d,
-  0x9b88, 0x9d25, 0x9d17, 0x9d20, 0x9d1e, 0x9d14, 0x9d29, 0x9d1d,
-  0x9d18, 0x9d22, 0x9d10, 0x9d19, 0x9d1f, 0x9e88, 0x9e86, 0x9e87,
-  0x9eae, 0x9ead, 0x9ed5, 0x9ed6, 0x9efa, 0x9f12, 0x9f3d, 0x5126,
-  0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52f4, 0x5693, 0x568c,
-  0x568d, 0x5686, 0x5684, 0x5683, 0x567e, 0x5682, 0x567f, 0x5681,
-  0x58d6, 0x58d4, 0x58cf, 0x58d2, 0x5b2d, 0x5b25, 0x5b32, 0x5b23,
-  0x5b2c, 0x5b27, 0x5b26, 0x5b2f, 0x5b2e, 0x5b7b, 0x5bf1, 0x5bf2,
-  0x5db7, 0x5e6c, 0x5e6a, 0x5fbe, 0x5fbb, 0x61c3, 0x61b5, 0x61bc,
-  0x61e7, 0x61e0, 0x61e5, 0x61e4, 0x61e8, 0x61de, 0x64ef, 0x64e9,
-  0x64e3, 0x64eb, 0x64e4, 0x64e8, 0x6581, 0x6580, 0x65b6, 0x65da,
-  0x66d2, 0x6a8d, 0x6a96, 0x6a81, 0x6aa5, 0x6a89, 0x6a9f, 0x6a9b,
-  0x6aa1, 0x6a9e, 0x6a87, 0x6a93, 0x6a8e,
-  /* 0xed */
-  0x6a95, 0x6a83, 0x6aa8, 0x6aa4, 0x6a91, 0x6a7f, 0x6aa6, 0x6a9a,
-  0x6a85, 0x6a8c, 0x6a92, 0x6b5b, 0x6bad, 0x6c09, 0x6fcc, 0x6fa9,
-  0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, 0x6fe7, 0x6fe6, 0x6fde,
-  0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, 0x71f1, 0x71e8, 0x71f2,
-  0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, 0x736f, 0x7497, 0x74b2,
-  0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, 0x74a5, 0x74af, 0x7510,
-  0x7511, 0x7512, 0x750f, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647,
-  0x76a4, 0x76e9, 0x77b5, 0x77ab, 0x77b2, 0x77b7, 0x77b6, 0x77b4,
-  0x77b1, 0x77a8, 0x77f0, 0x78f3, 0x78fd, 0x7902, 0x78fb, 0x78fc,
-  0x78f2, 0x7905, 0x78f9, 0x78fe, 0x7904, 0x79ab, 0x79a8, 0x7a5c,
-  0x7a5b, 0x7a56, 0x7a58, 0x7a54, 0x7a5a, 0x7abe, 0x7ac0, 0x7ac1,
-  0x7c05, 0x7c0f, 0x7bf2, 0x7c00, 0x7bff, 0x7bfb, 0x7c0e, 0x7bf4,
-  0x7c0b, 0x7bf3, 0x7c02, 0x7c09, 0x7c03, 0x7c01, 0x7bf8, 0x7bfd,
-  0x7c06, 0x7bf0, 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8, 0x7e2d, 0x7e3c,
-  0x7e42, 0x7e33, 0x9848, 0x7e38, 0x7e2a, 0x7e49, 0x7e40, 0x7e47,
-  0x7e29, 0x7e4c, 0x7e30, 0x7e3b, 0x7e36, 0x7e44, 0x7e3a, 0x7f45,
-  0x7f7f, 0x7f7e, 0x7f7d, 0x7ff4, 0x7ff2, 0x802c, 0x81bb, 0x81c4,
-  0x81cc, 0x81ca, 0x81c5, 0x81c7, 0x81bc, 0x81e9, 0x825b, 0x825a,
-  0x825c, 0x8583, 0x8580, 0x858f, 0x85a7, 0x8595, 0x85a0, 0x858b,
-  0x85a3, 0x857b, 0x85a4, 0x859a, 0x859e,
-  /* 0xee */
-  0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, 0x8578, 0x8557, 0x858e,
-  0x8596, 0x8586, 0x858d, 0x8599, 0x859d, 0x8581, 0x85a2, 0x8582,
-  0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859f, 0x8668,
-  0x87be, 0x87aa, 0x87ad, 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5,
-  0x87bc, 0x87ae, 0x87c9, 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af,
-  0x87c4, 0x87ca, 0x87b4, 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de,
-  0x87b2, 0x8935, 0x8933, 0x893c, 0x893e, 0x8941, 0x8952, 0x8937,
-  0x8942, 0x89ad, 0x89af, 0x89ae, 0x89f2, 0x89f3, 0x8b1e, 0x8b18,
-  0x8b16, 0x8b11, 0x8b05, 0x8b0b, 0x8b22, 0x8b0f, 0x8b12, 0x8b15,
-  0x8b07, 0x8b0d, 0x8b08, 0x8b06, 0x8b1c, 0x8b13, 0x8b1a, 0x8c4f,
-  0x8c70, 0x8c72, 0x8c71, 0x8c6f, 0x8c95, 0x8c94, 0x8cf9, 0x8d6f,
-  0x8e4e, 0x8e4d, 0x8e53, 0x8e50, 0x8e4c, 0x8e47, 0x8f43, 0x8f40,
-  0x9085, 0x907e, 0x9138, 0x919a, 0x91a2, 0x919b, 0x9199, 0x919f,
-  0x91a1, 0x919d, 0x91a0, 0x93a1, 0x9383, 0x93af, 0x9364, 0x9356,
-  0x9347, 0x937c, 0x9358, 0x935c, 0x9376, 0x9349, 0x9350, 0x9351,
-  0x9360, 0x936d, 0x938f, 0x934c, 0x936a, 0x9379, 0x9357, 0x9355,
-  0x9352, 0x934f, 0x9371, 0x9377, 0x937b, 0x9361, 0x935e, 0x9363,
-  0x9367, 0x9380, 0x934e, 0x9359, 0x95c7, 0x95c0, 0x95c9, 0x95c3,
-  0x95c5, 0x95b7, 0x96ae, 0x96b0, 0x96ac, 0x9720, 0x971f, 0x9718,
-  0x971d, 0x9719, 0x979a, 0x97a1, 0x979c,
-  /* 0xef */
-  0x979e, 0x979d, 0x97d5, 0x97d4, 0x97f1, 0x9841, 0x9844, 0x984a,
-  0x9849, 0x9845, 0x9843, 0x9925, 0x992b, 0x992c, 0x992a, 0x9933,
-  0x9932, 0x992f, 0x992d, 0x9931, 0x9930, 0x9998, 0x99a3, 0x99a1,
-  0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, 0x99f8, 0x99f6, 0x99fb,
-  0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, 0x9afe, 0x9afd, 0x9b01,
-  0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, 0x9b9b, 0x9ba6, 0x9ba1,
-  0x9ba5, 0x9ba4, 0x9b86, 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41,
-  0x9d67, 0x9d36, 0x9d2e, 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 0x9d45,
-  0x9d42, 0x9d43, 0x9d3e, 0x9d37, 0x9d40, 0x9d3d, 0x7ff5, 0x9d2d,
-  0x9e8a, 0x9e89, 0x9e8d, 0x9eb0, 0x9ec8, 0x9eda, 0x9efb, 0x9eff,
-  0x9f24, 0x9f23, 0x9f22, 0x9f54, 0x9fa0, 0x5131, 0x512d, 0x512e,
-  0x5698, 0x569c, 0x5697, 0x569a, 0x569d, 0x5699, 0x5970, 0x5b3c,
-  0x5c69, 0x5c6a, 0x5dc0, 0x5e6d, 0x5e6e, 0x61d8, 0x61df, 0x61ed,
-  0x61ee, 0x61f1, 0x61ea, 0x61f0, 0x61eb, 0x61d6, 0x61e9, 0x64ff,
-  0x6504, 0x64fd, 0x64f8, 0x6501, 0x6503, 0x64fc, 0x6594, 0x65db,
-  0x66da, 0x66db, 0x66d8, 0x6ac5, 0x6ab9, 0x6abd, 0x6ae1, 0x6ac6,
-  0x6aba, 0x6ab6, 0x6ab7, 0x6ac7, 0x6ab4, 0x6aad, 0x6b5e, 0x6bc9,
-  0x6c0b, 0x7007, 0x700c, 0x700d, 0x7001, 0x7005, 0x7014, 0x700e,
-  0x6fff, 0x7000, 0x6ffb, 0x7026, 0x6ffc, 0x6ff7, 0x700a, 0x7201,
-  0x71ff, 0x71f9, 0x7203, 0x71fd, 0x7376,
-  /* 0xf0 */
-  0x74b8, 0x74c0, 0x74b5, 0x74c1, 0x74be, 0x74b6, 0x74bb, 0x74c2,
-  0x7514, 0x7513, 0x765c, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657,
-  0x765a, 0x76a6, 0x76bd, 0x76ec, 0x77c2, 0x77ba, 0x78ff, 0x790c,
-  0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79ad, 0x79ac,
-  0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, 0x7c1f, 0x7c2d, 0x7c1d,
-  0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, 0x7e5c, 0x7e50, 0x7e56,
-  0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, 0x7e60, 0x7e57, 0x7e53,
-  0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, 0x81d1, 0x81d2, 0x81d0,
-  0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, 0x85c3, 0x85c2, 0x85b3,
-  0x85b5, 0x85bd, 0x85c7, 0x85c4, 0x85bf, 0x85cb, 0x85ce, 0x85c8,
-  0x85c5, 0x85b1, 0x85b6, 0x85d2, 0x8624, 0x85b8, 0x85b7, 0x85be,
-  0x8669, 0x87e7, 0x87e6, 0x87e2, 0x87db, 0x87eb, 0x87ea, 0x87e5,
-  0x87df, 0x87f3, 0x87e4, 0x87d4, 0x87dc, 0x87d3, 0x87ed, 0x87d8,
-  0x87e3, 0x87a4, 0x87d7, 0x87d9, 0x8801, 0x87f4, 0x87e8, 0x87dd,
-  0x8953, 0x894b, 0x894f, 0x894c, 0x8946, 0x8950, 0x8951, 0x8949,
-  0x8b2a, 0x8b27, 0x8b23, 0x8b33, 0x8b30, 0x8b35, 0x8b47, 0x8b2f,
-  0x8b3c, 0x8b3e, 0x8b31, 0x8b25, 0x8b37, 0x8b26, 0x8b36, 0x8b2e,
-  0x8b24, 0x8b3b, 0x8b3d, 0x8b3a, 0x8c42, 0x8c75, 0x8c99, 0x8c98,
-  0x8c97, 0x8cfe, 0x8d04, 0x8d02, 0x8d00, 0x8e5c, 0x8e62, 0x8e60,
-  0x8e57, 0x8e56, 0x8e5e, 0x8e65, 0x8e67,
-  /* 0xf1 */
-  0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, 0x8f47,
-  0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, 0x91a5,
-  0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, 0x9392, 0x93b7, 0x939b,
-  0x939d, 0x9389, 0x93a7, 0x938e, 0x93aa, 0x939e, 0x93a6, 0x9395,
-  0x9388, 0x9399, 0x939f, 0x938d, 0x93b1, 0x9391, 0x93b2, 0x93a4,
-  0x93a8, 0x93b4, 0x93a3, 0x93a5, 0x95d2, 0x95d3, 0x95d1, 0x96b3,
-  0x96d7, 0x96da, 0x5dc2, 0x96df, 0x96d8, 0x96dd, 0x9723, 0x9722,
-  0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, 0x97a4, 0x97aa, 0x97a2,
-  0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, 0x97fa, 0x9850, 0x9851,
-  0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, 0x9a0f, 0x9a0b, 0x9a09,
-  0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, 0x9a07, 0x9a06, 0x9ac0,
-  0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, 0x9b35, 0x9b4a, 0x9b4c,
-  0x9b4b, 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, 0x9bc1, 0x9bb5, 0x9bb8,
-  0x9bd3, 0x9bb6, 0x9bc4, 0x9bb9, 0x9bbd, 0x9d5c, 0x9d53, 0x9d4f,
-  0x9d4a, 0x9d5b, 0x9d4b, 0x9d59, 0x9d56, 0x9d4c, 0x9d57, 0x9d52,
-  0x9d54, 0x9d5f, 0x9d58, 0x9d5a, 0x9e8e, 0x9e8c, 0x9edf, 0x9f01,
-  0x9f00, 0x9f16, 0x9f25, 0x9f2b, 0x9f2a, 0x9f29, 0x9f28, 0x9f4c,
-  0x9f55, 0x5134, 0x5135, 0x5296, 0x52f7, 0x53b4, 0x56ab, 0x56ad,
-  0x56a6, 0x56a7, 0x56aa, 0x56ac, 0x58da, 0x58dd, 0x58db, 0x5912,
-  0x5b3d, 0x5b3e, 0x5b3f, 0x5dc3, 0x5e70,
-  /* 0xf2 */
-  0x5fbf, 0x61fb, 0x6507, 0x6510, 0x650d, 0x6509, 0x650c, 0x650e,
-  0x6584, 0x65de, 0x65dd, 0x66de, 0x6ae7, 0x6ae0, 0x6acc, 0x6ad1,
-  0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, 0x6aeb, 0x6acf, 0x6acd,
-  0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, 0x7020, 0x7016,
-  0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701c,
-  0x702a, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, 0x72a6,
-  0x72a4, 0x72a3, 0x72a1, 0x74cb, 0x74c5, 0x74b7, 0x74c3, 0x7516,
-  0x7660, 0x77c9, 0x77ca, 0x77c4, 0x77f1, 0x791d, 0x791b, 0x7921,
-  0x791c, 0x7917, 0x791e, 0x79b0, 0x7a67, 0x7a68, 0x7c33, 0x7c3c,
-  0x7c39, 0x7c2c, 0x7c3b, 0x7cec, 0x7cea, 0x7e76, 0x7e75, 0x7e78,
-  0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, 0x7e74, 0x7e68, 0x7f4b,
-  0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, 0x7ffe, 0x8078, 0x81d7,
-  0x81d5, 0x8264, 0x8261, 0x8263, 0x85eb, 0x85f1, 0x85ed, 0x85d9,
-  0x85e1, 0x85e8, 0x85da, 0x85d7, 0x85ec, 0x85f2, 0x85f8, 0x85d8,
-  0x85df, 0x85e3, 0x85dc, 0x85d1, 0x85f0, 0x85e6, 0x85ef, 0x85de,
-  0x85e2, 0x8800, 0x87fa, 0x8803, 0x87f6, 0x87f7, 0x8809, 0x880c,
-  0x880b, 0x8806, 0x87fc, 0x8808, 0x87ff, 0x880a, 0x8802, 0x8962,
-  0x895a, 0x895b, 0x8957, 0x8961, 0x895c, 0x8958, 0x895d, 0x8959,
-  0x8988, 0x89b7, 0x89b6, 0x89f6, 0x8b50, 0x8b48, 0x8b4a, 0x8b40,
-  0x8b53, 0x8b56, 0x8b54, 0x8b4b, 0x8b55,
-  /* 0xf3 */
-  0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, 0x8c77, 0x8c76, 0x8c9a,
-  0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, 0x8dad, 0x8dab, 0x8e6d,
-  0x8e78, 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, 0x8ec2, 0x8f52, 0x8f51,
-  0x8f4f, 0x8f50, 0x8f53, 0x8fb4, 0x9140, 0x913f, 0x91b0, 0x91ad,
-  0x93de, 0x93c7, 0x93cf, 0x93c2, 0x93da, 0x93d0, 0x93f9, 0x93ec,
-  0x93cc, 0x93d9, 0x93a9, 0x93e6, 0x93ca, 0x93d4, 0x93ee, 0x93e3,
-  0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, 0x93e7, 0x957d, 0x95da,
-  0x95db, 0x96e1, 0x9729, 0x972b, 0x972c, 0x9728, 0x9726, 0x97b3,
-  0x97b7, 0x97b6, 0x97dd, 0x97de, 0x97df, 0x985c, 0x9859, 0x985d,
-  0x9857, 0x98bf, 0x98bd, 0x98bb, 0x98be, 0x9948, 0x9947, 0x9943,
-  0x99a6, 0x99a7, 0x9a1a, 0x9a15, 0x9a25, 0x9a1d, 0x9a24, 0x9a1b,
-  0x9a22, 0x9a20, 0x9a27, 0x9a23, 0x9a1e, 0x9a1c, 0x9a14, 0x9ac2,
-  0x9b0b, 0x9b0a, 0x9b0e, 0x9b0c, 0x9b37, 0x9bea, 0x9beb, 0x9be0,
-  0x9bde, 0x9be4, 0x9be6, 0x9be2, 0x9bf0, 0x9bd4, 0x9bd7, 0x9bec,
-  0x9bdc, 0x9bd9, 0x9be5, 0x9bd5, 0x9be1, 0x9bda, 0x9d77, 0x9d81,
-  0x9d8a, 0x9d84, 0x9d88, 0x9d71, 0x9d80, 0x9d78, 0x9d86, 0x9d8b,
-  0x9d8c, 0x9d7d, 0x9d6b, 0x9d74, 0x9d75, 0x9d70, 0x9d69, 0x9d85,
-  0x9d73, 0x9d7b, 0x9d82, 0x9d6f, 0x9d79, 0x9d7f, 0x9d87, 0x9d68,
-  0x9e94, 0x9e91, 0x9ec0, 0x9efc, 0x9f2d, 0x9f40, 0x9f41, 0x9f4d,
-  0x9f56, 0x9f57, 0x9f58, 0x5337, 0x56b2,
-  /* 0xf4 */
-  0x56b5, 0x56b3, 0x58e3, 0x5b45, 0x5dc6, 0x5dc7, 0x5eee, 0x5eef,
-  0x5fc0, 0x5fc1, 0x61f9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65df,
-  0x66e8, 0x66e3, 0x66e4, 0x6af3, 0x6af0, 0x6aea, 0x6ae8, 0x6af9,
-  0x6af1, 0x6aee, 0x6aef, 0x703c, 0x7035, 0x702f, 0x7037, 0x7034,
-  0x7031, 0x7042, 0x7038, 0x703f, 0x703a, 0x7039, 0x7040, 0x703b,
-  0x7033, 0x7041, 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, 0x74ba,
-  0x76ab, 0x76aa, 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd,
-  0x77f2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0x79b2,
-  0x7a6e, 0x7a6c, 0x7a6d, 0x7af7, 0x7c49, 0x7c48, 0x7c4a, 0x7c47,
-  0x7c45, 0x7cee, 0x7e7b, 0x7e7e, 0x7e81, 0x7e80, 0x7fba, 0x7fff,
-  0x8079, 0x81db, 0x81d9, 0x820b, 0x8268, 0x8269, 0x8622, 0x85ff,
-  0x8601, 0x85fe, 0x861b, 0x8600, 0x85f6, 0x8604, 0x8609, 0x8605,
-  0x860c, 0x85fd, 0x8819, 0x8810, 0x8811, 0x8817, 0x8813, 0x8816,
-  0x8963, 0x8966, 0x89b9, 0x89f7, 0x8b60, 0x8b6a, 0x8b5d, 0x8b68,
-  0x8b63, 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86, 0x8e88, 0x8e84,
-  0x8f59, 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a, 0x908d, 0x9143,
-  0x9141, 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b, 0x9413, 0x93fb,
-  0x9420, 0x940f, 0x9414, 0x93fe, 0x9415, 0x9410, 0x9428, 0x9419,
-  0x940d, 0x93f5, 0x9400, 0x93f7, 0x9407, 0x940e, 0x9416, 0x9412,
-  0x93fa, 0x9409, 0x93f8, 0x940a, 0x93ff,
-  /* 0xf5 */
-  0x93fc, 0x940c, 0x93f6, 0x9411, 0x9406, 0x95de, 0x95e0, 0x95df,
-  0x972e, 0x972f, 0x97b9, 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862,
-  0x9863, 0x985f, 0x98c1, 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c,
-  0x994b, 0x9953, 0x9a32, 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36,
-  0x9a29, 0x9a2e, 0x9a38, 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10,
-  0x9b12, 0x9b11, 0x9c0b, 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8,
-  0x9c40, 0x9c07, 0x9c0e, 0x9c06, 0x9c17, 0x9c14, 0x9c09, 0x9d9f,
-  0x9d99, 0x9da4, 0x9d9d, 0x9d92, 0x9d98, 0x9d90, 0x9d9b, 0x9da0,
-  0x9d94, 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a, 0x9da2, 0x9da8,
-  0x9d9e, 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6, 0x9da7, 0x9e99,
-  0x9e9b, 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6, 0x9f30, 0x9f2e,
-  0x9f5b, 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91, 0x513a, 0x5139,
-  0x5298, 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48, 0x5b47, 0x5dcb,
-  0x5dcf, 0x5ef1, 0x61fd, 0x651b, 0x6b02, 0x6afc, 0x6b03, 0x6af8,
-  0x6b00, 0x7043, 0x7044, 0x704a, 0x7048, 0x7049, 0x7045, 0x7046,
-  0x721d, 0x721a, 0x7219, 0x737e, 0x7517, 0x766a, 0x77d0, 0x792d,
-  0x7931, 0x792f, 0x7c54, 0x7c53, 0x7cf2, 0x7e8a, 0x7e87, 0x7e88,
-  0x7e8b, 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030, 0x81dd, 0x8618,
-  0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619, 0x8627, 0x862e,
-  0x8621, 0x8620, 0x8629, 0x861e, 0x8625,
-  /* 0xf6 */
-  0x8829, 0x881d, 0x881b, 0x8820, 0x8824, 0x881c, 0x882b, 0x884a,
-  0x896d, 0x8969, 0x896e, 0x896b, 0x89fa, 0x8b79, 0x8b78, 0x8b45,
-  0x8b7a, 0x8b7b, 0x8d10, 0x8d14, 0x8daf, 0x8e8e, 0x8e8c, 0x8f5e,
-  0x8f5b, 0x8f5d, 0x9146, 0x9144, 0x9145, 0x91b9, 0x943f, 0x943b,
-  0x9436, 0x9429, 0x943d, 0x943c, 0x9430, 0x9439, 0x942a, 0x9437,
-  0x942c, 0x9440, 0x9431, 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a,
-  0x97bf, 0x97e1, 0x9864, 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956,
-  0x9a39, 0x9a3d, 0x9a46, 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 0x9a3f,
-  0x9acd, 0x9b15, 0x9b17, 0x9b18, 0x9b16, 0x9b3a, 0x9b52, 0x9c2b,
-  0x9c1d, 0x9c1c, 0x9c2c, 0x9c23, 0x9c28, 0x9c29, 0x9c24, 0x9c21,
-  0x9db7, 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, 0x9dca, 0x9dcf, 0x9dbe,
-  0x9dc5, 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9, 0x9dba, 0x9dac,
-  0x9dc8, 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd, 0x9db2, 0x9e7a,
-  0x9e9c, 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18, 0x9f1a, 0x9f31,
-  0x9f4e, 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6, 0x56c5, 0x56cb,
-  0x5971, 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2, 0x6521, 0x6520,
-  0x6526, 0x6522, 0x6b0b, 0x6b08, 0x6b09, 0x6c0d, 0x7055, 0x7056,
-  0x7057, 0x7052, 0x721e, 0x721f, 0x72a9, 0x737f, 0x74d8, 0x74d5,
-  0x74d9, 0x74d7, 0x766d, 0x76ad, 0x7935, 0x79b4, 0x7a70, 0x7a71,
-  0x7c57, 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a,
-  /* 0xf7 */
-  0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, 0x7f87, 0x81de, 0x826b, 0x8634,
-  0x8635, 0x8633, 0x862c, 0x8632, 0x8636, 0x882c, 0x8828, 0x8826,
-  0x882a, 0x8825, 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84,
-  0x8b82, 0x8b86, 0x8b85, 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a,
-  0x8e92, 0x8e90, 0x8e96, 0x8e97, 0x8f60, 0x8f62, 0x9147, 0x944c,
-  0x9450, 0x944a, 0x944b, 0x944f, 0x9447, 0x9445, 0x9448, 0x9449,
-  0x9446, 0x973f, 0x97e3, 0x986a, 0x9869, 0x98cb, 0x9954, 0x995b,
-  0x9a4e, 0x9a53, 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, 0x9a49,
-  0x9a52, 0x9a50, 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b, 0x9b56, 0x9b55,
-  0x9c46, 0x9c48, 0x9c3f, 0x9c44, 0x9c39, 0x9c33, 0x9c41, 0x9c3c,
-  0x9c37, 0x9c34, 0x9c32, 0x9c3d, 0x9c36, 0x9ddb, 0x9dd2, 0x9dde,
-  0x9dda, 0x9dcb, 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf, 0x9de9, 0x9dd9,
-  0x9dd8, 0x9dd6, 0x9df5, 0x9dd5, 0x9ddd, 0x9eb6, 0x9ef0, 0x9f35,
-  0x9f33, 0x9f32, 0x9f42, 0x9f6b, 0x9f95, 0x9fa2, 0x513d, 0x5299,
-  0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, 0x882f, 0x5f4f, 0x6201,
-  0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb, 0x6b11, 0x6b12,
-  0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382, 0x7381, 0x7383,
-  0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c, 0x863a, 0x8640,
-  0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830, 0x8832, 0x882e,
-  0x8833, 0x8976, 0x8974, 0x8973, 0x89fe,
-  /* 0xf8 */
-  0x8b8c, 0x8b8e, 0x8b8b, 0x8b88, 0x8c45, 0x8d19, 0x8e98, 0x8f64,
-  0x8f63, 0x91bc, 0x9462, 0x9455, 0x945d, 0x9457, 0x945e, 0x97c4,
-  0x97c5, 0x9800, 0x9a56, 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, 0x9c52,
-  0x9c58, 0x9c50, 0x9c4a, 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c,
-  0x9c4e, 0x9dfb, 0x9df7, 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4,
-  0x9df6, 0x9de1, 0x9dee, 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec,
-  0x9df4, 0x9df3, 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3,
-  0x9f06, 0x9f1c, 0x9f38, 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 0x9f71,
-  0x9f70, 0x9f6e, 0x9f6f, 0x56d3, 0x56cd, 0x5b4e, 0x5c6d, 0x652d,
-  0x66ed, 0x66ee, 0x6b13, 0x705f, 0x7061, 0x705d, 0x7060, 0x7223,
-  0x74db, 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6, 0x7c6a, 0x7e97,
-  0x7f89, 0x826d, 0x8643, 0x8838, 0x8837, 0x8835, 0x884b, 0x8b94,
-  0x8b95, 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be, 0x91bd, 0x91c2,
-  0x946b, 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743, 0x9747, 0x97c7,
-  0x97e5, 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67, 0x9c66, 0x9c62,
-  0x9c5e, 0x9c60, 0x9e02, 0x9dfe, 0x9e07, 0x9e03, 0x9e06, 0x9e05,
-  0x9e00, 0x9e01, 0x9e09, 0x9dff, 0x9dfd, 0x9e04, 0x9ea0, 0x9f1e,
-  0x9f46, 0x9f74, 0x9f75, 0x9f76, 0x56d4, 0x652e, 0x65b8, 0x6b18,
-  0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, 0x72aa, 0x77d8, 0x77d9,
-  0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a,
-  /* 0xf9 */
-  0x7e98, 0x7e9b, 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648,
-  0x8979, 0x897a, 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5,
-  0x8ea4, 0x8ea3, 0x946e, 0x946d, 0x946f, 0x9471, 0x9473, 0x9749,
-  0x9872, 0x995f, 0x9c68, 0x9c6e, 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10,
-  0x9e0f, 0x9e12, 0x9e11, 0x9ea1, 0x9ef5, 0x9f09, 0x9f47, 0x9f78,
-  0x9f7b, 0x9f7a, 0x9f79, 0x571e, 0x7066, 0x7c6f, 0x883c, 0x8db2,
-  0x8ea6, 0x91c3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, 0x9c74,
-  0x9c73, 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, 0x9fa4,
-  0x7068, 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d, 0x883f, 0x8b9e,
-  0x8c9c, 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874, 0x98cc, 0x9961,
-  0x99ab, 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15, 0x9e17, 0x9f48,
-  0x6207, 0x6b1e, 0x7227, 0x864c, 0x8ea8, 0x9482, 0x9480, 0x9481,
-  0x9a69, 0x9a68, 0x9b2e, 0x9e19, 0x7229, 0x864b, 0x8b9f, 0x9483,
-  0x9c79, 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d, 0x7069, 0x706a,
-  0x9ea4, 0x9f7e, 0x9f49, 0x9f98,
-};
-
-static int
-big5_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = s[0];
-  if ((c1 >= 0xa1 && c1 <= 0xc7) || (c1 >= 0xc9 && c1 <= 0xf9)) {
-    if (n >= 2) {
-      unsigned char c2 = s[1];
-      if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) {
-        unsigned int i = 157 * (c1 - 0xa1) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40));
-        unsigned short wc = 0xfffd;
-        if (i < 6280) {
-          if (i < 6121)
-            wc = big5_2uni_pagea1[i];
-        } else {
-          if (i < 13932)
-            wc = big5_2uni_pagec9[i-6280];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned short big5_2charset[13703] = {
-  0xa246, 0xa247, 0xa244, 0xa1b1, 0xa258, 0xa1d3, 0xa150, 0xa1d1,
-  0xa1d2, 0xa3be, 0xa3bc, 0xa3bd, 0xa3bf, 0xa3bb, 0xa344, 0xa345,
-  0xa346, 0xa347, 0xa348, 0xa349, 0xa34a, 0xa34b, 0xa34c, 0xa34d,
-  0xa34e, 0xa34f, 0xa350, 0xa351, 0xa352, 0xa353, 0xa354, 0xa355,
-  0xa356, 0xa357, 0xa358, 0xa359, 0xa35a, 0xa35b, 0xa35c, 0xa35d,
-  0xa35e, 0xa35f, 0xa360, 0xa361, 0xa362, 0xa363, 0xa364, 0xa365,
-  0xa366, 0xa367, 0xa368, 0xa369, 0xa36a, 0xa36b, 0xa36c, 0xa36d,
-  0xa36e, 0xa36f, 0xa370, 0xa371, 0xa372, 0xa373, 0xc7b3, 0xc7b1,
-  0xc7b2, 0xc7b4, 0xc7b5, 0xc7b6, 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba,
-  0xc7bb, 0xc7bc, 0xc7bd, 0xc7be, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c2,
-  0xc7c3, 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, 0xc7c8, 0xc7c9, 0xc7ca,
-  0xc7cb, 0xc7cc, 0xc7cd, 0xc7cf, 0xc7d0, 0xc7d1, 0xc7d2, 0xc7d3,
-  0xc7d4, 0xc7d5, 0xc7d6, 0xc7d7, 0xc7d8, 0xc7d9, 0xc7da, 0xc7db,
-  0xc7dc, 0xc7dd, 0xc7de, 0xc7df, 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3,
-  0xc7e4, 0xc7e5, 0xc7e6, 0xc7e7, 0xc7e8, 0xc7ce, 0xa156, 0xa158,
-  0xa1a5, 0xa1a6, 0xa1a7, 0xa1a8, 0xa145, 0xa14c, 0xa14b, 0xa1ac,
-  0xa1ab, 0xa1b0, 0xa1c2, 0xa24a, 0xa1c1, 0xa24b, 0xa2b9, 0xa2ba,
-  0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, 0xa2c1, 0xa2c2,
-  0xa1f6, 0xa1f4, 0xa1f7, 0xa1f5, 0xa1f8, 0xa1f9, 0xa1fb, 0xa1fa,
-  0xa1d4, 0xa1db, 0xa1e8, 0xa1e7, 0xa1fd, 0xa1fc, 0xa1e4, 0xa1e5,
-  0xa1ec, 0xa1ed, 0xa1ef, 0xa1ee, 0xa1e3, 0xa1dc, 0xa1da, 0xa1dd,
-  0xa1d8, 0xa1d9, 0xa1e6, 0xa1e9, 0xc7e9, 0xc7ea, 0xc7eb, 0xc7ec,
-  0xc7ed, 0xc7ee, 0xc7ef, 0xc7f0, 0xc7f1, 0xc7f2, 0xc7f3, 0xc7f4,
-  0xc7f5, 0xc7f6, 0xc7f7, 0xc7f8, 0xc7f9, 0xc7fa, 0xc7fb, 0xc7fc,
-  0xa277, 0xa278, 0xa27a, 0xa27b, 0xa27c, 0xa27d, 0xa275, 0xa274,
-  0xa273, 0xa272, 0xa271, 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa27e,
-  0xa2a1, 0xa2a3, 0xa2a2, 0xa2ac, 0xa2ad, 0xa2ae, 0xa262, 0xa263,
-  0xa264, 0xa265, 0xa266, 0xa267, 0xa268, 0xa269, 0xa270, 0xa26f,
-  0xa26e, 0xa26d, 0xa26c, 0xa26b, 0xa26a, 0xa276, 0xa279, 0xa1bd,
-  0xa1bc, 0xa1b6, 0xa1b5, 0xa1bf, 0xa1be, 0xa1bb, 0xa1ba, 0xa1b3,
-  0xa1b7, 0xa1b4, 0xa2a8, 0xa2a9, 0xa2ab, 0xa2aa, 0xa1b9, 0xa1b8,
-  0xa1f3, 0xa1f0, 0xa1f2, 0xa1f1, 0xa140, 0xa142, 0xa143, 0xa1b2,
-  0xc6a4, 0xa171, 0xa172, 0xa16d, 0xa16e, 0xa175, 0xa176, 0xa179,
-  0xa17a, 0xa169, 0xa16a, 0xa245, 0xa165, 0xa166, 0xa1a9, 0xa1aa,
-  0xa2c3, 0xa2c4, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, 0xa2c9, 0xa2ca,
-  0xa2cb, 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9, 0xc6aa, 0xc6ab,
-  0xc6ac, 0xc6ad, 0xc6ae, 0xc6af, 0xc6b0, 0xc6b1, 0xc6b2, 0xc6b3,
-  0xc6b4, 0xc6b5, 0xc6b6, 0xc6b7, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb,
-  0xc6bc, 0xc6bd, 0xc6be, 0xc6bf, 0xc6c0, 0xc6c1, 0xc6c2, 0xc6c3,
-  0xc6c4, 0xc6c5, 0xc6c6, 0xc6c7, 0xc6c8, 0xc6c9, 0xc6ca, 0xc6cb,
-  0xc6cc, 0xc6cd, 0xc6ce, 0xc6cf, 0xc6d0, 0xc6d1, 0xc6d2, 0xc6d3,
-  0xc6d4, 0xc6d5, 0xc6d6, 0xc6d7, 0xc6d8, 0xc6d9, 0xc6da, 0xc6db,
-  0xc6dc, 0xc6dd, 0xc6de, 0xc6df, 0xc6e0, 0xc6e1, 0xc6e2, 0xc6e3,
-  0xc6e4, 0xc6e5, 0xc6e6, 0xc6e7, 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb,
-  0xc6ec, 0xc6ed, 0xc6ee, 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f2, 0xc6f3,
-  0xc6f4, 0xc6f5, 0xc6f6, 0xc6f7, 0xc6a2, 0xc6a3, 0xc6f8, 0xc6f9,
-  0xc6fa, 0xc6fb, 0xc6fc, 0xc6fd, 0xc6fe, 0xc740, 0xc741, 0xc742,
-  0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, 0xc74a,
-  0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751, 0xc752,
-  0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a,
-  0xc75b, 0xc75c, 0xc75d, 0xc75e, 0xc75f, 0xc760, 0xc761, 0xc762,
-  0xc763, 0xc764, 0xc765, 0xc766, 0xc767, 0xc768, 0xc769, 0xc76a,
-  0xc76b, 0xc76c, 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc772,
-  0xc773, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a,
-  0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc7a1, 0xc7a2, 0xc7a3, 0xc7a4,
-  0xc7a5, 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0xc7ac,
-  0xc7ad, 0xc7ae, 0xc7af, 0xc7b0, 0xc6a1, 0xa374, 0xa375, 0xa376,
-  0xa377, 0xa378, 0xa379, 0xa37a, 0xa37b, 0xa37c, 0xa37d, 0xa37e,
-  0xa3a1, 0xa3a2, 0xa3a3, 0xa3a4, 0xa3a5, 0xa3a6, 0xa3a7, 0xa3a8,
-  0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, 0xa3b0,
-  0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, 0xa3b8,
-  0xa3b9, 0xa3ba, 0xa1c0, 0xa255, 0xa256, 0xa250, 0xa251, 0xa252,
-  0xa254, 0xa257, 0xa253, 0xa1eb, 0xa1ea, 0xa24f, 0xa440, 0xa442,
-  0xa443, 0xc945, 0xa456, 0xa454, 0xa457, 0xa455, 0xc946, 0xa4a3,
-  0xc94f, 0xc94d, 0xa4a2, 0xa4a1, 0xa542, 0xa541, 0xa540, 0xa543,
-  0xa4fe, 0xa5e0, 0xa5e1, 0xa8c3, 0xa458, 0xa4a4, 0xc950, 0xa4a5,
-  0xc963, 0xa6ea, 0xcbb1, 0xa459, 0xa4a6, 0xa544, 0xc964, 0xc940,
-  0xa444, 0xa45b, 0xc947, 0xa45c, 0xa4a7, 0xa545, 0xa547, 0xa546,
-  0xa5e2, 0xa5e3, 0xa8c4, 0xadbc, 0xa441, 0xc941, 0xa445, 0xa45e,
-  0xa45d, 0xa5e4, 0xa8c5, 0xb0ae, 0xd44b, 0xb6c3, 0xdcb1, 0xdcb2,
-  0xa446, 0xa4a9, 0xa8c6, 0xa447, 0xc948, 0xa45f, 0xa4aa, 0xa4ac,
-  0xc951, 0xa4ad, 0xa4ab, 0xa5e5, 0xa8c7, 0xa8c8, 0xab45, 0xa460,
-  0xa4ae, 0xa5e6, 0xa5e8, 0xa5e7, 0xa6eb, 0xa8c9, 0xa8ca, 0xab46,
-  0xab47, 0xadbd, 0xdcb3, 0xf6d6, 0xa448, 0xa4b0, 0xa4af, 0xc952,
-  0xa4b1, 0xa4b7, 0xa4b2, 0xa4b3, 0xc954, 0xc953, 0xa4b5, 0xa4b6,
-  0xa4b4, 0xa54a, 0xa54b, 0xa54c, 0xa54d, 0xa549, 0xa550, 0xc96a,
-  0xc966, 0xc969, 0xa551, 0xa561, 0xc968, 0xa54e, 0xa54f, 0xa548,
-  0xc965, 0xc967, 0xa5f5, 0xc9b0, 0xa5f2, 0xa5f6, 0xc9ba, 0xc9ae,
-  0xa5f3, 0xc9b2, 0xa5f4, 0xa5f7, 0xa5e9, 0xc9b1, 0xa5f8, 0xc9b5,
-  0xc9b9, 0xc9b6, 0xc9b3, 0xa5ea, 0xa5ec, 0xa5f9, 0xa5ee, 0xc9ab,
-  0xa5f1, 0xa5ef, 0xa5f0, 0xc9bb, 0xc9b8, 0xc9af, 0xa5ed, 0xc9ac,
-  0xa5eb, 0xc9b4, 0xc9b7, 0xc9ad, 0xca66, 0xa742, 0xa6f4, 0xca67,
-  0xa6f1, 0xa744, 0xa6f9, 0xa6f8, 0xca5b, 0xa6fc, 0xa6f7, 0xca60,
-  0xca68, 0xca64, 0xa6fa, 0xa6fd, 0xa6ee, 0xa747, 0xca5d, 0xcbbd,
-  0xa6ec, 0xa743, 0xa6ed, 0xa6f5, 0xa6f6, 0xca62, 0xca5e, 0xa6fb,
-  0xa6f3, 0xca5a, 0xa6ef, 0xca65, 0xa745, 0xa748, 0xa6f2, 0xa740,
-  0xa746, 0xa6f0, 0xca63, 0xa741, 0xca69, 0xca5c, 0xa6fe, 0xca5f,
-  0xca61, 0xa8d8, 0xcbbf, 0xcbcb, 0xa8d0, 0xcbcc, 0xa8cb, 0xa8d5,
-  0xa8ce, 0xcbb9, 0xa8d6, 0xcbb8, 0xcbbc, 0xcbc3, 0xcbc1, 0xa8de,
-  0xa8d9, 0xcbb3, 0xcbb5, 0xa8db, 0xa8cf, 0xcbb6, 0xcbc2, 0xcbc9,
-  0xa8d4, 0xcbbb, 0xcbb4, 0xa8d3, 0xcbb7, 0xa8d7, 0xcbba, 0xa8d2,
-  0xa8cd, 0xa8dc, 0xcbc4, 0xa8dd, 0xcbc8, 0xcbc6, 0xcbca, 0xa8da,
-  0xcbbe, 0xcbb2, 0xcbc0, 0xa8d1, 0xcbc5, 0xa8cc, 0xcbc7, 0xab56,
-  0xab4a, 0xcde0, 0xcde8, 0xab49, 0xab51, 0xab5d, 0xcdee, 0xcdec,
-  0xcde7, 0xab4b, 0xcded, 0xcde3, 0xab59, 0xab50, 0xab58, 0xcdde,
-  0xcdea, 0xcde1, 0xab54, 0xcde2, 0xcddd, 0xab5b, 0xab4e, 0xab57,
-  0xab4d, 0xcddf, 0xcde4, 0xcdeb, 0xab55, 0xab52, 0xcde6, 0xab5a,
-  0xcde9, 0xcde5, 0xab4f, 0xab5c, 0xab53, 0xab4c, 0xab48, 0xcdef,
-  0xadd7, 0xadc1, 0xadd1, 0xadd6, 0xd0d0, 0xd0cf, 0xd0d4, 0xd0d5,
-  0xadc4, 0xadcd, 0xadda, 0xadce, 0xd0c9, 0xadc7, 0xd0ca, 0xaddc,
-  0xadd3, 0xadbe, 0xadbf, 0xd0dd, 0xb0bf, 0xadcc, 0xadcb, 0xd0cb,
-  0xadcf, 0xd45b, 0xadc6, 0xd0d6, 0xadd5, 0xadd4, 0xadca, 0xd0ce,
-  0xd0d7, 0xd0c8, 0xadc9, 0xd0d8, 0xadd2, 0xd0cc, 0xadc0, 0xadc3,
-  0xadc2, 0xd0d9, 0xadd0, 0xadc5, 0xadd9, 0xaddb, 0xd0d3, 0xadd8,
-  0xd0db, 0xd0cd, 0xd0dc, 0xd0d1, 0xd0da, 0xd0d2, 0xadc8, 0xd463,
-  0xd457, 0xb0b3, 0xd45c, 0xd462, 0xb0b2, 0xd455, 0xb0b6, 0xd459,
-  0xd452, 0xb0b4, 0xd456, 0xb0b9, 0xb0be, 0xd467, 0xd451, 0xb0ba,
-  0xd466, 0xb0b5, 0xd458, 0xb0b1, 0xd453, 0xd44f, 0xd45d, 0xd450,
-  0xd44e, 0xd45a, 0xd460, 0xd461, 0xb0b7, 0xd85b, 0xd45e, 0xd44d,
-  0xd45f, 0xb0c1, 0xd464, 0xb0c0, 0xd44c, 0xd454, 0xd465, 0xb0bc,
-  0xb0bb, 0xb0b8, 0xb0bd, 0xb0af, 0xb0b0, 0xb3c8, 0xd85e, 0xd857,
-  0xb3c5, 0xd85f, 0xd855, 0xd858, 0xb3c4, 0xd859, 0xb3c7, 0xd85d,
-  0xd853, 0xd852, 0xb3c9, 0xb3ca, 0xb3c6, 0xb3cb, 0xd851, 0xd85c,
-  0xd85a, 0xd854, 0xb3c3, 0xd856, 0xb6ca, 0xb6c4, 0xdcb7, 0xb6cd,
-  0xdcbd, 0xdcc0, 0xb6c6, 0xb6c7, 0xdcba, 0xb6c5, 0xdcc3, 0xb6cb,
-  0xdcc4, 0xdcbf, 0xb6cc, 0xdcb4, 0xb6c9, 0xdcb5, 0xdcbe, 0xdcbc,
-  0xdcb8, 0xb6c8, 0xdcb6, 0xb6ce, 0xdcbb, 0xdcc2, 0xdcb9, 0xdcc1,
-  0xb9b6, 0xb9b3, 0xb9b4, 0xe0f9, 0xe0f1, 0xb9b2, 0xb9af, 0xe0f2,
-  0xb9b1, 0xe0f5, 0xe0f7, 0xe0fe, 0xe0fd, 0xe0f8, 0xb9ae, 0xe0f0,
-  0xb9ac, 0xe0f3, 0xb9b7, 0xe0f6, 0xe0fa, 0xb9b0, 0xb9ad, 0xe0fc,
-  0xe0fb, 0xb9b5, 0xe0f4, 0xbbf8, 0xe4ec, 0xe4e9, 0xbbf9, 0xbbf7,
-  0xe4f0, 0xe4ed, 0xe4e6, 0xbbf6, 0xbbfa, 0xe4e7, 0xbbf5, 0xbbfd,
-  0xe4ea, 0xe4eb, 0xbbfb, 0xbbfc, 0xe4f1, 0xe4ee, 0xe4ef, 0xbeaa,
-  0xe8f8, 0xbea7, 0xe8f5, 0xbea9, 0xbeab, 0xe8f6, 0xbea8, 0xe8f7,
-  0xe8f4, 0xc076, 0xecbd, 0xc077, 0xecbb, 0xecbc, 0xecba, 0xecb9,
-  0xecbe, 0xc075, 0xefb8, 0xefb9, 0xe4e8, 0xefb7, 0xc078, 0xc35f,
-  0xf1eb, 0xf1ec, 0xc4d7, 0xc4d8, 0xf5c1, 0xf5c0, 0xc56c, 0xc56b,
-  0xf7d0, 0xa449, 0xa461, 0xa4b9, 0xa4b8, 0xa553, 0xa552, 0xa5fc,
-  0xa5fb, 0xa5fd, 0xa5fa, 0xa74a, 0xa749, 0xa74b, 0xa8e0, 0xa8df,
-  0xa8e1, 0xab5e, 0xa259, 0xd0de, 0xa25a, 0xb0c2, 0xa25c, 0xa25b,
-  0xd860, 0xa25d, 0xb9b8, 0xa25e, 0xa44a, 0xa4ba, 0xa5fe, 0xa8e2,
-  0xa44b, 0xa4bd, 0xa4bb, 0xa4bc, 0xa640, 0xa74c, 0xa8e4, 0xa8e3,
-  0xa8e5, 0xaddd, 0xbeac, 0xc94e, 0xa554, 0xa555, 0xa641, 0xca6a,
-  0xab60, 0xab5f, 0xd0e0, 0xd0df, 0xb0c3, 0xa4be, 0xc955, 0xcbcd,
-  0xab61, 0xade0, 0xadde, 0xaddf, 0xbead, 0xa556, 0xa642, 0xc9bc,
-  0xa74d, 0xa74e, 0xca6b, 0xcbce, 0xa8e6, 0xcbcf, 0xd0e2, 0xd0e3,
-  0xade3, 0xd0e4, 0xd0e1, 0xade4, 0xade2, 0xade1, 0xd0e5, 0xd468,
-  0xd861, 0xdcc5, 0xe140, 0xbbfe, 0xbeae, 0xe8f9, 0xa44c, 0xa45a,
-  0xb0c4, 0xb3cd, 0xb9b9, 0xc942, 0xa4bf, 0xa559, 0xa557, 0xa558,
-  0xa8e7, 0xa44d, 0xa44e, 0xa462, 0xa4c0, 0xa4c1, 0xa4c2, 0xc9be,
-  0xa55a, 0xc96b, 0xa646, 0xc9bf, 0xa644, 0xa645, 0xc9bd, 0xa647,
-  0xa643, 0xca6c, 0xaaec, 0xca6d, 0xca6e, 0xa750, 0xa74f, 0xa753,
-  0xa751, 0xa752, 0xa8ed, 0xa8ec, 0xcbd4, 0xcbd1, 0xcbd2, 0xcbd0,
-  0xa8ee, 0xa8ea, 0xa8e9, 0xa8eb, 0xa8e8, 0xa8ef, 0xab63, 0xcdf0,
-  0xcbd3, 0xab68, 0xcdf1, 0xab64, 0xab67, 0xab66, 0xab65, 0xab62,
-  0xd0e8, 0xade7, 0xd0eb, 0xade5, 0xd0e7, 0xade8, 0xade6, 0xade9,
-  0xd0e9, 0xd0ea, 0xd0e6, 0xd0ec, 0xb3d1, 0xb0c5, 0xd469, 0xd46b,
-  0xd46a, 0xd46c, 0xb0c6, 0xb3ce, 0xb3cf, 0xb3d0, 0xb6d0, 0xdcc7,
-  0xdcc6, 0xdcc8, 0xdcc9, 0xb6d1, 0xb6cf, 0xe141, 0xe142, 0xb9bb,
-  0xb9ba, 0xe35a, 0xbc40, 0xbc41, 0xbc42, 0xbc44, 0xe4f2, 0xe4f3,
-  0xbc43, 0xbeaf, 0xbeb0, 0xf1ed, 0xf5c3, 0xf5c2, 0xf7d1, 0xa44f,
-  0xa55c, 0xa55b, 0xa648, 0xc9c0, 0xa755, 0xa756, 0xa754, 0xa757,
-  0xca6f, 0xca70, 0xa8f1, 0xcbd5, 0xa8f0, 0xcdf2, 0xab6c, 0xcdf3,
-  0xab6b, 0xab69, 0xab6a, 0xd0ed, 0xb0c7, 0xd46e, 0xb0ca, 0xd46d,
-  0xb1e5, 0xb0c9, 0xb0c8, 0xb3d4, 0xb3d3, 0xb3d2, 0xb6d2, 0xb6d5,
-  0xb6d6, 0xb6d4, 0xb6d3, 0xe143, 0xe144, 0xe4f5, 0xbc45, 0xe4f4,
-  0xbeb1, 0xecbf, 0xc079, 0xf1ee, 0xc455, 0xa463, 0xa4c3, 0xc956,
-  0xa4c4, 0xa4c5, 0xa55d, 0xa55e, 0xa649, 0xca71, 0xcbd6, 0xcbd7,
-  0xab6d, 0xd0ee, 0xb0cc, 0xb0cb, 0xd863, 0xd862, 0xa450, 0xa4c6,
-  0xa55f, 0xb0cd, 0xc943, 0xc96c, 0xa560, 0xc9c2, 0xa64b, 0xa64a,
-  0xc9c1, 0xa758, 0xadea, 0xd46f, 0xb6d7, 0xe145, 0xb9bc, 0xe8fa,
-  0xf3fd, 0xa4c7, 0xcbd8, 0xcdf4, 0xb0d0, 0xb0ce, 0xb0cf, 0xa451,
-  0xa464, 0xa2cd, 0xa4ca, 0xa4c9, 0xa4c8, 0xa563, 0xa562, 0xc96d,
-  0xc9c3, 0xa8f5, 0xa8f2, 0xa8f4, 0xa8f3, 0xab6e, 0xb3d5, 0xa452,
-  0xa4cb, 0xa565, 0xa564, 0xca72, 0xa8f6, 0xc957, 0xa567, 0xa566,
-  0xa64c, 0xa64d, 0xca73, 0xa759, 0xa75a, 0xa8f7, 0xa8f8, 0xa8f9,
-  0xab6f, 0xcdf5, 0xadeb, 0xc944, 0xa4cc, 0xc9c4, 0xca74, 0xca75,
-  0xcbd9, 0xcbda, 0xcdf7, 0xcdf6, 0xcdf9, 0xcdf8, 0xab70, 0xd470,
-  0xaded, 0xd0ef, 0xadec, 0xd864, 0xb3d6, 0xd865, 0xe146, 0xb9bd,
-  0xbc46, 0xf1ef, 0xc958, 0xa568, 0xb0d1, 0xa453, 0xa465, 0xa4ce,
-  0xa4cd, 0xa4cf, 0xa8fb, 0xa8fa, 0xa8fc, 0xab71, 0xadee, 0xe8fb,
-  0xc24f, 0xa466, 0xa56a, 0xa579, 0xa574, 0xa56f, 0xa56e, 0xa575,
-  0xa573, 0xa56c, 0xa57a, 0xa56d, 0xa569, 0xa578, 0xa577, 0xa576,
-  0xa56b, 0xa572, 0xa571, 0xa57b, 0xa570, 0xa653, 0xa659, 0xa655,
-  0xa65b, 0xc9c5, 0xa658, 0xa64e, 0xa651, 0xa654, 0xa650, 0xa657,
-  0xa65a, 0xa64f, 0xa652, 0xa656, 0xa65c, 0xca7e, 0xca7b, 0xa767,
-  0xca7c, 0xa75b, 0xa75d, 0xa775, 0xa770, 0xcaa5, 0xca7d, 0xa75f,
-  0xa761, 0xcaa4, 0xa768, 0xca78, 0xa774, 0xa776, 0xa75c, 0xa76d,
-  0xca76, 0xa773, 0xa764, 0xa76e, 0xa76f, 0xca77, 0xa76c, 0xa76a,
-  0xa76b, 0xa771, 0xcaa1, 0xa75e, 0xa772, 0xcaa3, 0xa766, 0xa763,
-  0xca7a, 0xa762, 0xcaa6, 0xa765, 0xa769, 0xa760, 0xcaa2, 0xca79,
-  0xcbeb, 0xcbea, 0xa94f, 0xcbed, 0xcbef, 0xcbe4, 0xcbe7, 0xcbee,
-  0xa950, 0xcbe1, 0xcbe5, 0xcbe9, 0xce49, 0xa94b, 0xce4d, 0xa8fd,
-  0xcbe6, 0xa8fe, 0xa94c, 0xa945, 0xa941, 0xcbe2, 0xa944, 0xa949,
-  0xa952, 0xcbe3, 0xcbdc, 0xa943, 0xcbdd, 0xcbdf, 0xa946, 0xa948,
-  0xcbdb, 0xcbe0, 0xa951, 0xa94d, 0xcbe8, 0xa953, 0xa94a, 0xcbde,
-  0xa947, 0xa942, 0xa940, 0xcbec, 0xa94e, 0xce48, 0xcdfb, 0xce4b,
-  0xcdfd, 0xab78, 0xaba8, 0xab74, 0xaba7, 0xab7d, 0xaba4, 0xab72,
-  0xcdfc, 0xce43, 0xaba3, 0xce4f, 0xaba5, 0xab79, 0xce45, 0xce42,
-  0xab77, 0xcdfa, 0xaba6, 0xce4a, 0xab7c, 0xce4c, 0xaba9, 0xab73,
-  0xab7e, 0xab7b, 0xce40, 0xaba1, 0xce46, 0xce47, 0xab7a, 0xaba2,
-  0xab76, 0xab75, 0xcdfe, 0xce44, 0xce4e, 0xd144, 0xadfb, 0xd0f1,
-  0xd0f6, 0xadf4, 0xae40, 0xd0f4, 0xadef, 0xadf9, 0xadfe, 0xd0fb,
-  0xadfa, 0xadfd, 0xd0fe, 0xadf5, 0xd0f5, 0xd142, 0xd143, 0xadf7,
-  0xd141, 0xadf3, 0xae43, 0xd0f8, 0xadf1, 0xd146, 0xd0f9, 0xd0fd,
-  0xadf6, 0xae42, 0xd0fa, 0xadfc, 0xd140, 0xd147, 0xd4a1, 0xd145,
-  0xae44, 0xadf0, 0xd0fc, 0xd0f3, 0xadf8, 0xd0f2, 0xd0f7, 0xd0f0,
-  0xae41, 0xd477, 0xb0e4, 0xd4a7, 0xb0e2, 0xb0df, 0xd47c, 0xb0db,
-  0xd4a2, 0xb0e6, 0xd476, 0xd47b, 0xd47a, 0xadf2, 0xb0e1, 0xd4a5,
-  0xd4a8, 0xd473, 0xb3e8, 0xd4a9, 0xb0e7, 0xb0d9, 0xb0d6, 0xd47e,
-  0xb0d3, 0xd4a6, 0xb0da, 0xd4aa, 0xd474, 0xd4a4, 0xb0dd, 0xd475,
-  0xd478, 0xd47d, 0xb0de, 0xb0dc, 0xb0e8, 0xb0e3, 0xb0d7, 0xb1d2,
-  0xb0d8, 0xd479, 0xb0e5, 0xb0e0, 0xd4a3, 0xb0d5, 0xb0d4, 0xd471,
-  0xd472, 0xd86a, 0xb3d7, 0xb3da, 0xd875, 0xb3ee, 0xd878, 0xb3d8,
-  0xd871, 0xb3de, 0xb3e4, 0xb5bd, 0xb3e2, 0xd86e, 0xb3ef, 0xb3db,
-  0xb3e3, 0xd876, 0xdcd7, 0xd87b, 0xd86f, 0xd866, 0xd873, 0xd86d,
-  0xb3e1, 0xd879, 0xb3dd, 0xb3f1, 0xb3ea, 0xb3df, 0xb3dc, 0xb3e7,
-  0xd87a, 0xd86c, 0xd872, 0xd874, 0xd868, 0xd877, 0xb3d9, 0xd867,
-  0xb3e0, 0xb3f0, 0xb3ec, 0xd869, 0xb3e6, 0xb3ed, 0xb3e9, 0xb3e5,
-  0xd870, 0xb3eb, 0xdcd5, 0xdcd1, 0xdce0, 0xdcca, 0xdcd3, 0xb6e5,
-  0xb6e6, 0xb6de, 0xdcdc, 0xb6e8, 0xdccf, 0xdcce, 0xdccc, 0xdcde,
-  0xb6dc, 0xdcd8, 0xdccd, 0xb6df, 0xdcd6, 0xb6da, 0xdcd2, 0xdcd9,
-  0xdcdb, 0xdcdf, 0xb6e3, 0xdccb, 0xb6dd, 0xdcd0, 0xb6d8, 0xb6e4,
-  0xdcda, 0xb6e0, 0xb6e1, 0xb6e7, 0xb6db, 0xa25f, 0xb6d9, 0xdcd4,
-  0xb6e2, 0xdcdd, 0xb9cd, 0xb9c8, 0xe155, 0xe151, 0xe14b, 0xb9c2,
-  0xb9be, 0xe154, 0xb9bf, 0xe14e, 0xe150, 0xe153, 0xb9c4, 0xb9cb,
-  0xb9c5, 0xe149, 0xb9c6, 0xb9c7, 0xe14c, 0xb9cc, 0xe14a, 0xe14f,
-  0xb9c3, 0xe148, 0xb9c9, 0xb9c1, 0xb9c0, 0xe14d, 0xe152, 0xb9ca,
-  0xe147, 0xbc4d, 0xe547, 0xe544, 0xbc47, 0xbc53, 0xbc54, 0xbc4a,
-  0xe542, 0xbc4c, 0xe4f9, 0xbc52, 0xe546, 0xbc49, 0xe548, 0xbc48,
-  0xe543, 0xe545, 0xbc4b, 0xe541, 0xe4fa, 0xe4f7, 0xd86b, 0xe4fd,
-  0xe4f6, 0xe4fc, 0xe4fb, 0xe4f8, 0xbc4f, 0xbc4e, 0xbc50, 0xe4fe,
-  0xbeb2, 0xe540, 0xe945, 0xe8fd, 0xbebe, 0xe942, 0xbeb6, 0xbeba,
-  0xe941, 0xbeb9, 0xbeb5, 0xbeb8, 0xbeb3, 0xbebd, 0xe943, 0xe8fe,
-  0xbebc, 0xe8fc, 0xbebb, 0xe944, 0xe940, 0xbc51, 0xbebf, 0xe946,
-  0xbeb7, 0xbeb4, 0xecc6, 0xecc8, 0xc07b, 0xecc9, 0xecc7, 0xecc5,
-  0xecc4, 0xc07d, 0xecc3, 0xc07e, 0xecc1, 0xecc2, 0xc07a, 0xc0a1,
-  0xc07c, 0xecc0, 0xc250, 0xefbc, 0xefba, 0xefbf, 0xefbd, 0xefbb,
-  0xefbe, 0xc360, 0xf1f2, 0xf1f3, 0xc456, 0xf1f4, 0xf1f0, 0xf1f5,
-  0xf1f1, 0xc251, 0xf3fe, 0xf441, 0xc459, 0xf440, 0xc458, 0xc457,
-  0xc45a, 0xf5c5, 0xf5c6, 0xc4da, 0xc4d9, 0xc4db, 0xf5c4, 0xf6d8,
-  0xf6d7, 0xc56d, 0xc56f, 0xc56e, 0xf6d9, 0xc5c8, 0xf8a6, 0xc5f1,
-  0xf8a5, 0xf8ee, 0xc949, 0xa57d, 0xa57c, 0xa65f, 0xa65e, 0xc9c7,
-  0xa65d, 0xc9c6, 0xa779, 0xcaa9, 0xcaa8, 0xa777, 0xa77a, 0xcaa7,
-  0xa778, 0xcbf0, 0xcbf1, 0xa954, 0xabaa, 0xd148, 0xd149, 0xae45,
-  0xae46, 0xd4ac, 0xb0e9, 0xb0eb, 0xd4ab, 0xb0ea, 0xd87c, 0xb3f2,
-  0xb6e9, 0xb6ea, 0xdce1, 0xb9cf, 0xb9ce, 0xe549, 0xe948, 0xe947,
-  0xf96b, 0xa467, 0xc959, 0xc96e, 0xc96f, 0xa662, 0xa666, 0xc9c9,
-  0xa664, 0xa663, 0xc9c8, 0xa665, 0xa661, 0xa660, 0xc9ca, 0xa7a6,
-  0xa7a3, 0xa77d, 0xcaaa, 0xcaab, 0xa7a1, 0xcaad, 0xa77b, 0xcaae,
-  0xcaac, 0xa77e, 0xa7a2, 0xa7a5, 0xa7a4, 0xa77c, 0xcaaf, 0xa959,
-  0xcbfe, 0xa95b, 0xa95a, 0xcc40, 0xa958, 0xa957, 0xcbf5, 0xcbf4,
-  0xcbf2, 0xcbf7, 0xcbf6, 0xcbf3, 0xcbfc, 0xcbfd, 0xcbfa, 0xcbf8,
-  0xa956, 0xcbfb, 0xa95c, 0xcc41, 0xcbf9, 0xabab, 0xa955, 0xabac,
-  0xce54, 0xce5a, 0xabb2, 0xce58, 0xce5e, 0xce55, 0xce59, 0xce5b,
-  0xce5d, 0xce57, 0xce56, 0xce51, 0xce52, 0xabad, 0xabaf, 0xabae,
-  0xce53, 0xce5c, 0xabb1, 0xce50, 0xd153, 0xd152, 0xd157, 0xd14e,
-  0xd151, 0xd150, 0xd154, 0xd158, 0xae47, 0xae4a, 0xd14f, 0xd155,
-  0xae49, 0xd14a, 0xabb0, 0xd4ba, 0xd156, 0xd14d, 0xae48, 0xd14c,
-  0xd4b1, 0xb0ec, 0xb0f0, 0xd4c1, 0xd4af, 0xd4bd, 0xb0f1, 0xd4bf,
-  0xd4c5, 0xd4c9, 0xd4c0, 0xd4b4, 0xd4bc, 0xd4ca, 0xd4c8, 0xd4be,
-  0xd4b9, 0xd4b2, 0xd8a6, 0xd4b0, 0xb0f5, 0xd4b7, 0xb0f6, 0xb0f2,
-  0xd4ad, 0xd4c3, 0xd4b5, 0xd4b3, 0xd4c6, 0xb0f3, 0xd4cc, 0xb0ed,
-  0xb0ef, 0xd4bb, 0xd4b6, 0xae4b, 0xb0ee, 0xd4b8, 0xd4c7, 0xd4cb,
-  0xd4c2, 0xd4c4, 0xd4ae, 0xd8a1, 0xd8aa, 0xd8a9, 0xb3fa, 0xd8a2,
-  0xb3fb, 0xb3f9, 0xd8a4, 0xb3f6, 0xd8a8, 0xd8a3, 0xd8a5, 0xd87d,
-  0xb3f4, 0xd8b2, 0xd8b1, 0xd8ae, 0xb3f3, 0xb3f7, 0xb3f8, 0xd14b,
-  0xd8ab, 0xb3f5, 0xb0f4, 0xd8ad, 0xd87e, 0xd8b0, 0xd8af, 0xd8b3,
-  0xdcef, 0xd8ac, 0xd8a7, 0xdce7, 0xb6f4, 0xb6f7, 0xb6f2, 0xdce6,
-  0xdcea, 0xdce5, 0xb6ec, 0xb6f6, 0xdce2, 0xb6f0, 0xdce9, 0xb6ee,
-  0xb6ed, 0xdcec, 0xb6ef, 0xdcee, 0xdceb, 0xb6eb, 0xb6f5, 0xdcf0,
-  0xdce4, 0xdced, 0xdce3, 0xb6f1, 0xb6f3, 0xdce8, 0xdcf1, 0xe15d,
-  0xb9d0, 0xe163, 0xb9d5, 0xe15f, 0xe166, 0xe157, 0xb9d7, 0xb9d1,
-  0xe15c, 0xbc55, 0xe15b, 0xe164, 0xb9d2, 0xb9d6, 0xe15a, 0xe160,
-  0xe165, 0xe156, 0xb9d4, 0xe15e, 0xe162, 0xe168, 0xe158, 0xe161,
-  0xb9d3, 0xe167, 0xe159, 0xbc59, 0xe54b, 0xbc57, 0xbc56, 0xe54d,
-  0xe552, 0xe54e, 0xe551, 0xbc5c, 0xbea5, 0xbc5b, 0xe54a, 0xe550,
-  0xbc5a, 0xe54f, 0xe54c, 0xbc58, 0xe94d, 0xe94f, 0xe94a, 0xbec1,
-  0xe94c, 0xbec0, 0xe94e, 0xbec3, 0xe950, 0xbec2, 0xe949, 0xe94b,
-  0xc0a5, 0xeccc, 0xc0a4, 0xeccd, 0xc0a3, 0xeccb, 0xc0a2, 0xecca,
-  0xc253, 0xc252, 0xf1f6, 0xf1f8, 0xf1f7, 0xc361, 0xc362, 0xc363,
-  0xf442, 0xc45b, 0xf7d3, 0xf7d2, 0xc5f2, 0xa468, 0xa4d0, 0xa7a7,
-  0xce5f, 0xb3fc, 0xb3fd, 0xdcf2, 0xb9d8, 0xe169, 0xe553, 0xc95a,
-  0xcab0, 0xcc42, 0xce60, 0xd159, 0xae4c, 0xf1f9, 0xc4dc, 0xa469,
-  0xa57e, 0xc970, 0xa667, 0xa668, 0xa95d, 0xb0f7, 0xb9da, 0xb9db,
-  0xb9d9, 0xa46a, 0xa4d1, 0xa4d3, 0xa4d2, 0xc95b, 0xa4d4, 0xa5a1,
-  0xc971, 0xa5a2, 0xa669, 0xa66a, 0xc9cb, 0xa7a8, 0xcab1, 0xa961,
-  0xcc43, 0xa95f, 0xa960, 0xa95e, 0xd15a, 0xabb6, 0xabb5, 0xabb7,
-  0xabb4, 0xce61, 0xa962, 0xabb3, 0xae4d, 0xae4e, 0xae4f, 0xd4cd,
-  0xb3fe, 0xd8b4, 0xb0f8, 0xb6f8, 0xb9dd, 0xb9dc, 0xe16a, 0xbc5d,
-  0xbec4, 0xefc0, 0xf6da, 0xf7d4, 0xa46b, 0xa5a3, 0xa5a4, 0xc9d1,
-  0xa66c, 0xa66f, 0xc9cf, 0xc9cd, 0xa66e, 0xc9d0, 0xc9d2, 0xc9cc,
-  0xa671, 0xa670, 0xa66d, 0xa66b, 0xc9ce, 0xa7b3, 0xa7b0, 0xcab6,
-  0xcab9, 0xcab8, 0xa7aa, 0xa7b2, 0xa7af, 0xcab5, 0xcab3, 0xa7ae,
-  0xa7a9, 0xa7ac, 0xcab4, 0xcabb, 0xcab7, 0xa7ad, 0xa7b1, 0xa7b4,
-  0xcab2, 0xcaba, 0xa7ab, 0xa967, 0xa96f, 0xcc4f, 0xcc48, 0xa970,
-  0xcc53, 0xcc44, 0xcc4b, 0xa966, 0xcc45, 0xa964, 0xcc4c, 0xcc50,
-  0xa963, 0xcc51, 0xcc4a, 0xcc4d, 0xa972, 0xa969, 0xcc54, 0xcc52,
-  0xa96e, 0xa96c, 0xcc49, 0xa96b, 0xcc47, 0xcc46, 0xa96a, 0xa968,
-  0xa971, 0xa96d, 0xa965, 0xcc4e, 0xabb9, 0xabc0, 0xce6f, 0xabb8,
-  0xce67, 0xce63, 0xce73, 0xce62, 0xabbb, 0xce6c, 0xabbe, 0xabc1,
-  0xabbc, 0xce70, 0xabbf, 0xae56, 0xce76, 0xce64, 0xce66, 0xce6d,
-  0xce71, 0xce75, 0xce72, 0xce6b, 0xce6e, 0xce68, 0xabc3, 0xce6a,
-  0xce69, 0xce74, 0xabba, 0xce65, 0xabc2, 0xabbd, 0xae5c, 0xd162,
-  0xae5b, 0xd160, 0xae50, 0xae55, 0xd15f, 0xd15c, 0xd161, 0xae51,
-  0xd15b, 0xae54, 0xae52, 0xd163, 0xae53, 0xae57, 0xae58, 0xae5a,
-  0xae59, 0xd15d, 0xd15e, 0xd164, 0xd4d4, 0xb0f9, 0xd8c2, 0xd4d3,
-  0xd4e6, 0xb140, 0xd4e4, 0xb0fe, 0xb0fa, 0xd4ed, 0xd4dd, 0xd4e0,
-  0xb143, 0xd4ea, 0xd4e2, 0xb0fb, 0xb144, 0xd4e7, 0xd4e5, 0xd4d6,
-  0xd4eb, 0xd4df, 0xd4da, 0xd4d0, 0xd4ec, 0xd4dc, 0xd4cf, 0xb142,
-  0xd4e1, 0xd4ee, 0xd4de, 0xd4d2, 0xd4d7, 0xd4ce, 0xb141, 0xd4db,
-  0xd4d8, 0xb0fc, 0xd4d1, 0xd4e9, 0xb0fd, 0xd4d9, 0xd4d5, 0xd4e8,
-  0xb440, 0xd8bb, 0xd8b8, 0xd8c9, 0xd8bd, 0xd8ca, 0xb442, 0xd8c6,
-  0xd8c3, 0xd8c4, 0xd8c7, 0xd8cb, 0xd4e3, 0xd8cd, 0xdd47, 0xb443,
-  0xd8ce, 0xd8b6, 0xd8c0, 0xd8c5, 0xb441, 0xb444, 0xd8cc, 0xd8cf,
-  0xd8ba, 0xd8b7, 0xd8b9, 0xd8be, 0xd8bc, 0xb445, 0xd8c8, 0xd8bf,
-  0xd8c1, 0xd8b5, 0xdcfa, 0xdcf8, 0xb742, 0xb740, 0xdd43, 0xdcf9,
-  0xdd44, 0xdd40, 0xdcf7, 0xdd46, 0xdcf6, 0xdcfd, 0xb6fe, 0xb6fd,
-  0xb6fc, 0xdcfb, 0xdd41, 0xb6f9, 0xb741, 0xdcf4, 0xdcfe, 0xdcf3,
-  0xdcfc, 0xb6fa, 0xdd42, 0xdcf5, 0xb6fb, 0xdd45, 0xe16e, 0xb9e2,
-  0xb9e1, 0xb9e3, 0xe17a, 0xe170, 0xe176, 0xe16b, 0xe179, 0xe178,
-  0xe17c, 0xe175, 0xb9de, 0xe174, 0xb9e4, 0xe16d, 0xb9df, 0xe17b,
-  0xb9e0, 0xe16f, 0xe172, 0xe177, 0xe171, 0xe16c, 0xe173, 0xe555,
-  0xbc61, 0xe558, 0xe557, 0xe55a, 0xe55c, 0xbc5f, 0xe556, 0xe554,
-  0xe55d, 0xe55b, 0xe559, 0xe55f, 0xe55e, 0xbc63, 0xbc5e, 0xbc60,
-  0xbc62, 0xe560, 0xe957, 0xe956, 0xe955, 0xe958, 0xe951, 0xe952,
-  0xe95a, 0xe953, 0xbec5, 0xe95c, 0xe95b, 0xe954, 0xecd1, 0xc0a8,
-  0xeccf, 0xecd4, 0xecd3, 0xe959, 0xc0a7, 0xecd2, 0xecce, 0xecd6,
-  0xecd5, 0xc0a6, 0xecd0, 0xbec6, 0xc254, 0xefc1, 0xf1fa, 0xf1fb,
-  0xf1fc, 0xc45c, 0xc45d, 0xf443, 0xf5c8, 0xf5c7, 0xf6db, 0xf6dc,
-  0xf7d5, 0xf8a7, 0xa46c, 0xa46d, 0xa46e, 0xa4d5, 0xa5a5, 0xc9d3,
-  0xa672, 0xa673, 0xa7b7, 0xa7b8, 0xa7b6, 0xa7b5, 0xa973, 0xcc55,
-  0xa975, 0xa974, 0xcc56, 0xabc4, 0xae5d, 0xd165, 0xd4f0, 0xb145,
-  0xb447, 0xd4ef, 0xb446, 0xb9e5, 0xe17d, 0xbec7, 0xc0a9, 0xecd7,
-  0xc45e, 0xc570, 0xc972, 0xa5a6, 0xc973, 0xa676, 0xa674, 0xa675,
-  0xa677, 0xa7ba, 0xa7b9, 0xcabc, 0xa7bb, 0xcabd, 0xcc57, 0xcc58,
-  0xa976, 0xa978, 0xa97a, 0xa977, 0xa97b, 0xa979, 0xabc8, 0xabc5,
-  0xabc7, 0xabc9, 0xabc6, 0xd166, 0xce77, 0xd168, 0xd167, 0xae63,
-  0xae5f, 0xae60, 0xae62, 0xae64, 0xae61, 0xae66, 0xae65, 0xb14a,
-  0xd4f2, 0xd4f1, 0xb149, 0xb148, 0xb147, 0xb14b, 0xb146, 0xd8d5,
-  0xd8d2, 0xb449, 0xd8d1, 0xd8d6, 0xb44b, 0xd8d4, 0xb448, 0xb44a,
-  0xd8d3, 0xdd48, 0xdd49, 0xdd4a, 0xb9e6, 0xb9ee, 0xe17e, 0xb9e8,
-  0xb9ec, 0xe1a1, 0xb9ed, 0xb9e9, 0xb9ea, 0xb9e7, 0xb9eb, 0xbc66,
-  0xd8d0, 0xbc67, 0xbc65, 0xbc64, 0xe95d, 0xbec8, 0xecd8, 0xecd9,
-  0xc364, 0xc45f, 0xa46f, 0xa678, 0xabca, 0xd169, 0xae67, 0xb14e,
-  0xb14d, 0xb14c, 0xb44c, 0xb44d, 0xd8d7, 0xb9ef, 0xbec9, 0xa470,
-  0xc95c, 0xa4d6, 0xc974, 0xc9d4, 0xa679, 0xa97c, 0xdd4b, 0xa471,
-  0xa4d7, 0xc9d5, 0xcabe, 0xcabf, 0xa7bc, 0xd8d8, 0xb44e, 0xdd4c,
-  0xc0aa, 0xa472, 0xa4a8, 0xa4d8, 0xc975, 0xa5a7, 0xa7c0, 0xa7bf,
-  0xa7bd, 0xa7be, 0xcc59, 0xa97e, 0xa9a1, 0xcc5a, 0xa97d, 0xabce,
-  0xce78, 0xabcd, 0xabcb, 0xabcc, 0xae6a, 0xae68, 0xd16b, 0xae69,
-  0xd16a, 0xae5e, 0xd4f3, 0xb150, 0xb151, 0xb14f, 0xb9f0, 0xe1a2,
-  0xbc68, 0xbc69, 0xe561, 0xc0ab, 0xefc2, 0xefc3, 0xc4dd, 0xf8a8,
-  0xc94b, 0xa4d9, 0xa473, 0xc977, 0xc976, 0xa67a, 0xc9d7, 0xc9d8,
-  0xc9d6, 0xc9d9, 0xcac7, 0xcac2, 0xcac4, 0xcac6, 0xcac3, 0xa7c4,
-  0xcac0, 0xcac1, 0xa7c1, 0xa7c2, 0xcac5, 0xcac8, 0xa7c3, 0xcac9,
-  0xcc68, 0xcc62, 0xcc5d, 0xa9a3, 0xcc65, 0xcc63, 0xcc5c, 0xcc69,
-  0xcc6c, 0xcc67, 0xcc60, 0xa9a5, 0xcc66, 0xa9a6, 0xcc61, 0xcc64,
-  0xcc5b, 0xcc5f, 0xcc6b, 0xa9a7, 0xa9a8, 0xcc5e, 0xcc6a, 0xa9a2,
-  0xa9a4, 0xceab, 0xcea4, 0xceaa, 0xcea3, 0xcea5, 0xce7d, 0xce7b,
-  0xceac, 0xcea9, 0xce79, 0xabd0, 0xcea7, 0xcea8, 0xcea6, 0xce7c,
-  0xce7a, 0xabcf, 0xcea2, 0xce7e, 0xcea1, 0xcead, 0xae6f, 0xae6e,
-  0xd16c, 0xae6b, 0xd16e, 0xae70, 0xd16f, 0xae73, 0xae71, 0xd170,
-  0xceae, 0xd172, 0xae6d, 0xae6c, 0xd16d, 0xd171, 0xae72, 0xb153,
-  0xb152, 0xd4f5, 0xd4f9, 0xd4fb, 0xb154, 0xd4fe, 0xb158, 0xd541,
-  0xb15a, 0xb156, 0xb15e, 0xb15b, 0xd4f7, 0xb155, 0xd4f6, 0xd4f4,
-  0xd543, 0xd4f8, 0xb157, 0xd542, 0xb15c, 0xd4fd, 0xd4fc, 0xb15d,
-  0xd4fa, 0xb159, 0xd544, 0xd540, 0xd8e7, 0xd8ee, 0xd8e3, 0xb451,
-  0xd8df, 0xd8ef, 0xd8d9, 0xd8ec, 0xd8ea, 0xd8e4, 0xd8ed, 0xd8e6,
-  0xd8de, 0xd8f0, 0xd8dc, 0xd8e9, 0xd8da, 0xd8f1, 0xb452, 0xd8eb,
-  0xdd4f, 0xd8dd, 0xb44f, 0xd8e1, 0xb450, 0xd8e0, 0xd8e5, 0xd8e2,
-  0xd8e8, 0xdd53, 0xdd56, 0xdd4e, 0xdd50, 0xdd55, 0xdd54, 0xb743,
-  0xd8db, 0xdd52, 0xb744, 0xdd4d, 0xdd51, 0xe1a9, 0xe1b0, 0xe1a7,
-  0xe1ae, 0xe1a5, 0xe1ad, 0xe1b1, 0xe1a4, 0xe1a8, 0xe1a3, 0xb9f1,
-  0xe1a6, 0xb9f2, 0xe1ac, 0xe1ab, 0xe1aa, 0xe1af, 0xe565, 0xe567,
-  0xbc6b, 0xe568, 0xe563, 0xe562, 0xe56c, 0xe56a, 0xbc6a, 0xe56d,
-  0xe564, 0xe569, 0xe56b, 0xe566, 0xe961, 0xe966, 0xe960, 0xe965,
-  0xe95e, 0xe968, 0xe964, 0xe969, 0xe963, 0xe95f, 0xe967, 0xe96a,
-  0xe962, 0xecda, 0xc0af, 0xc0ad, 0xc0ac, 0xc0ae, 0xefc4, 0xf172,
-  0xf1fd, 0xf444, 0xf445, 0xc460, 0xf5c9, 0xc4de, 0xf5ca, 0xf6de,
-  0xc572, 0xc571, 0xf6dd, 0xc5c9, 0xf7d6, 0xa474, 0xa67b, 0xc9da,
-  0xcaca, 0xa8b5, 0xb15f, 0xa475, 0xa5aa, 0xa5a9, 0xa5a8, 0xa7c5,
-  0xae74, 0xdd57, 0xa476, 0xa477, 0xa478, 0xa4da, 0xabd1, 0xceaf,
-  0xb453, 0xa479, 0xc95d, 0xa5ab, 0xa5ac, 0xc978, 0xa67c, 0xcacb,
-  0xa7c6, 0xcacc, 0xa9ae, 0xcc6e, 0xa9ac, 0xa9ab, 0xcc6d, 0xa9a9,
-  0xcc6f, 0xa9aa, 0xa9ad, 0xabd2, 0xabd4, 0xceb3, 0xceb0, 0xceb1,
-  0xceb2, 0xceb4, 0xabd3, 0xd174, 0xd173, 0xae76, 0xae75, 0xb162,
-  0xd546, 0xb161, 0xb163, 0xb160, 0xb455, 0xd545, 0xb456, 0xd8f3,
-  0xb457, 0xd8f2, 0xb454, 0xdd5a, 0xdd5c, 0xb745, 0xdd5b, 0xdd59,
-  0xdd58, 0xe1b4, 0xb9f7, 0xb9f5, 0xb9f6, 0xe1b2, 0xe1b3, 0xb9f3,
-  0xe571, 0xe56f, 0xbc6d, 0xe570, 0xbc6e, 0xbc6c, 0xb9f4, 0xe96d,
-  0xe96b, 0xe96c, 0xe56e, 0xecdc, 0xc0b0, 0xecdb, 0xefc5, 0xefc6,
-  0xe96e, 0xf1fe, 0xa47a, 0xa5ad, 0xa67e, 0xc9db, 0xa67d, 0xa9af,
-  0xb746, 0xa4db, 0xa5ae, 0xabd5, 0xb458, 0xc979, 0xc97a, 0xc9dc,
-  0xa7c8, 0xcad0, 0xcace, 0xa7c9, 0xcacd, 0xcacf, 0xcad1, 0xa7c7,
-  0xa9b3, 0xa9b4, 0xa9b1, 0xa9b0, 0xceb8, 0xa9b2, 0xabd6, 0xceb7,
-  0xceb9, 0xceb6, 0xceba, 0xabd7, 0xae79, 0xd175, 0xd177, 0xae77,
-  0xd178, 0xae78, 0xd176, 0xceb5, 0xd547, 0xd54a, 0xd54b, 0xd548,
-  0xb167, 0xb166, 0xb164, 0xb165, 0xd549, 0xb168, 0xb45a, 0xb45b,
-  0xb45c, 0xdd5d, 0xdd5f, 0xdd61, 0xb748, 0xb747, 0xb459, 0xdd60,
-  0xdd5e, 0xe1b8, 0xe1b6, 0xe1bc, 0xb9f8, 0xe1bd, 0xe1ba, 0xb9f9,
-  0xe1b7, 0xe1b5, 0xe1bb, 0xbc70, 0xe573, 0xe1b9, 0xbc72, 0xe574,
-  0xbc71, 0xbc74, 0xe575, 0xbc6f, 0xbc73, 0xe973, 0xe971, 0xe970,
-  0xe972, 0xe96f, 0xc366, 0xf446, 0xf447, 0xf5cb, 0xf6df, 0xc655,
-  0xa9b5, 0xa7ca, 0xabd8, 0xa47b, 0xa4dc, 0xa5af, 0xc9dd, 0xa7cb,
-  0xcad2, 0xcebb, 0xabd9, 0xb9fa, 0xa47c, 0xa6a1, 0xb749, 0xa47d,
-  0xa4dd, 0xa4de, 0xa5b1, 0xa5b0, 0xc9de, 0xa6a2, 0xcad3, 0xa7cc,
-  0xcc71, 0xcc72, 0xcc73, 0xa9b6, 0xa9b7, 0xcc70, 0xa9b8, 0xabda,
-  0xcebc, 0xd17a, 0xae7a, 0xd179, 0xb169, 0xd54c, 0xb16a, 0xd54d,
-  0xb45d, 0xdd62, 0xe1bf, 0xe1be, 0xb9fb, 0xbc75, 0xe576, 0xbeca,
-  0xe974, 0xc0b1, 0xc573, 0xf7d8, 0xcc74, 0xcebd, 0xb16b, 0xd8f4,
-  0xb74a, 0xc255, 0xa7ce, 0xa7cd, 0xabdb, 0xd17b, 0xb16d, 0xb343,
-  0xb16e, 0xb16c, 0xb45e, 0xe1c0, 0xb9fc, 0xbc76, 0xc94c, 0xc9df,
-  0xcad5, 0xa7cf, 0xcad4, 0xa7d0, 0xa9bc, 0xcc77, 0xcc76, 0xa9bb,
-  0xa9b9, 0xa9ba, 0xcc75, 0xabdd, 0xcebe, 0xabe0, 0xabdc, 0xabe2,
-  0xabde, 0xabdf, 0xabe1, 0xae7d, 0xae7c, 0xae7b, 0xd54f, 0xb16f,
-  0xb172, 0xb170, 0xd54e, 0xb175, 0xb171, 0xd550, 0xb174, 0xb173,
-  0xd8f6, 0xd8f5, 0xb461, 0xb45f, 0xb460, 0xd8f7, 0xb74b, 0xdd64,
-  0xb74c, 0xdd63, 0xe577, 0xbc78, 0xe1c1, 0xbc77, 0xb9fd, 0xecde,
-  0xe975, 0xc0b2, 0xecdd, 0xf240, 0xf448, 0xf449, 0xa4df, 0xa5b2,
-  0xc97b, 0xa7d2, 0xa7d4, 0xc9e2, 0xcad8, 0xcad7, 0xcad6, 0xc9e1,
-  0xc9e0, 0xa6a4, 0xa7d3, 0xa7d1, 0xa6a3, 0xa9bd, 0xcc78, 0xa9be,
-  0xcadd, 0xcadf, 0xcade, 0xcc79, 0xcada, 0xa7d8, 0xa7d6, 0xcad9,
-  0xcadb, 0xcae1, 0xa7d5, 0xcadc, 0xcae5, 0xa9c0, 0xcae2, 0xa7d7,
-  0xcae0, 0xcae3, 0xa9bf, 0xa9c1, 0xcae4, 0xccaf, 0xcca2, 0xcc7e,
-  0xccae, 0xcca9, 0xabe7, 0xa9c2, 0xccaa, 0xccad, 0xabe3, 0xccac,
-  0xa9c3, 0xa9c8, 0xa9c6, 0xcca3, 0xcc7c, 0xcca5, 0xa9cd, 0xccb0,
-  0xabe4, 0xcca6, 0xabe5, 0xa9c9, 0xcca8, 0xcecd, 0xabe6, 0xcc7b,
-  0xa9ca, 0xabe8, 0xa9cb, 0xa9c7, 0xa9cc, 0xcca7, 0xcc7a, 0xccab,
-  0xa9c4, 0xcc7d, 0xcca4, 0xcca1, 0xa9c5, 0xcebf, 0xcec0, 0xceca,
-  0xd1a1, 0xcecb, 0xabee, 0xcece, 0xcec4, 0xabed, 0xcec6, 0xcec7,
-  0xcec9, 0xabe9, 0xaea3, 0xcec5, 0xcec1, 0xaea4, 0xcecf, 0xae7e,
-  0xd17d, 0xcec8, 0xd17c, 0xcec3, 0xcecc, 0xabec, 0xaea1, 0xabf2,
-  0xaea2, 0xced0, 0xd17e, 0xabeb, 0xaea6, 0xabf1, 0xabf0, 0xabef,
-  0xaea5, 0xced1, 0xaea7, 0xabea, 0xcec2, 0xb176, 0xd1a4, 0xd1a6,
-  0xd1a8, 0xaea8, 0xaeae, 0xd553, 0xd1ac, 0xd1a3, 0xb178, 0xd551,
-  0xaead, 0xaeab, 0xd1ae, 0xd552, 0xd1a5, 0xaeac, 0xd1a9, 0xaeaf,
-  0xd1ab, 0xaeaa, 0xd1aa, 0xd1ad, 0xd1a7, 0xaea9, 0xb179, 0xd1a2,
-  0xb177, 0xb17a, 0xd555, 0xd55e, 0xb464, 0xb17c, 0xb1a3, 0xb465,
-  0xd560, 0xb1aa, 0xd8f9, 0xd556, 0xb1a2, 0xb1a5, 0xb17e, 0xd554,
-  0xd562, 0xd565, 0xd949, 0xd563, 0xd8fd, 0xb1a1, 0xb1a8, 0xb1ac,
-  0xd55d, 0xd8f8, 0xd561, 0xb17b, 0xd8fa, 0xd564, 0xd8fc, 0xd559,
-  0xb462, 0xd557, 0xd558, 0xb1a7, 0xb1a6, 0xd55b, 0xb1ab, 0xd55f,
-  0xb1a4, 0xd55c, 0xb1a9, 0xb466, 0xb463, 0xd8fb, 0xd55a, 0xb17d,
-  0xb46b, 0xb46f, 0xd940, 0xb751, 0xb46d, 0xd944, 0xb471, 0xdd65,
-  0xd946, 0xb753, 0xb469, 0xb46c, 0xd947, 0xd948, 0xd94e, 0xb473,
-  0xb754, 0xd94a, 0xd94f, 0xd943, 0xb75e, 0xb755, 0xb472, 0xd941,
-  0xd950, 0xb75d, 0xb470, 0xb74e, 0xd94d, 0xb474, 0xd945, 0xd8fe,
-  0xb46a, 0xd942, 0xd94b, 0xb74d, 0xb752, 0xb467, 0xd94c, 0xb750,
-  0xb468, 0xb75c, 0xe1c3, 0xdd70, 0xdd68, 0xe1c2, 0xdd6c, 0xdd6e,
-  0xdd6b, 0xb75b, 0xdd6a, 0xb75f, 0xe1d2, 0xb75a, 0xba40, 0xdd71,
-  0xe1c4, 0xb758, 0xdd69, 0xdd6d, 0xb9fe, 0xb74f, 0xdd66, 0xdd67,
-  0xba41, 0xb757, 0xb759, 0xb756, 0xdd6f, 0xe1c8, 0xe1c9, 0xe1ce,
-  0xbc7d, 0xe1d5, 0xba47, 0xba46, 0xe1d0, 0xbc7c, 0xe1c5, 0xba45,
-  0xe1d4, 0xba43, 0xba44, 0xe1d1, 0xe5aa, 0xbc7a, 0xb46e, 0xe1d3,
-  0xbca3, 0xe1cb, 0xbc7b, 0xbca2, 0xe1c6, 0xe1ca, 0xe1c7, 0xe1cd,
-  0xba48, 0xbc79, 0xba42, 0xe57a, 0xe1cf, 0xbca1, 0xbca4, 0xe1cc,
-  0xbc7e, 0xe579, 0xe57e, 0xbece, 0xe578, 0xe9a3, 0xe5a9, 0xbca8,
-  0xbca6, 0xbecc, 0xe5a6, 0xe5a2, 0xbcac, 0xe978, 0xbcaa, 0xe5a1,
-  0xe976, 0xe5a5, 0xe5a8, 0xe57d, 0xbcab, 0xbca5, 0xe977, 0xbecd,
-  0xe5a7, 0xbca7, 0xbca9, 0xe5a4, 0xbcad, 0xe5a3, 0xe57c, 0xe57b,
-  0xbecb, 0xe5ab, 0xe97a, 0xece0, 0xbed0, 0xe9a2, 0xe97e, 0xece1,
-  0xbed1, 0xe9a1, 0xe97c, 0xc0b4, 0xecdf, 0xe979, 0xe97b, 0xc0b5,
-  0xbed3, 0xc0b3, 0xbed2, 0xc0b7, 0xe97d, 0xbecf, 0xefcf, 0xefc7,
-  0xece7, 0xefc8, 0xece3, 0xc256, 0xece5, 0xece4, 0xc0b6, 0xece2,
-  0xece6, 0xefd0, 0xefcc, 0xefce, 0xefc9, 0xefca, 0xefcd, 0xefcb,
-  0xc367, 0xc36a, 0xc369, 0xc368, 0xc461, 0xf44a, 0xc462, 0xf241,
-  0xc4df, 0xf5cc, 0xc4e0, 0xc574, 0xc5ca, 0xf7d9, 0xf7da, 0xf7db,
-  0xf9ba, 0xa4e0, 0xc97c, 0xa5b3, 0xa6a6, 0xa6a7, 0xa6a5, 0xa6a8,
-  0xa7da, 0xa7d9, 0xccb1, 0xa9cf, 0xa9ce, 0xd1af, 0xb1ad, 0xb1ae,
-  0xb475, 0xdd72, 0xb760, 0xb761, 0xdd74, 0xdd76, 0xdd75, 0xe1d7,
-  0xe1d6, 0xba49, 0xe1d8, 0xe5ac, 0xbcae, 0xbed4, 0xc0b8, 0xc257,
-  0xc0b9, 0xa4e1, 0xcae6, 0xccb2, 0xa9d1, 0xa9d0, 0xa9d2, 0xabf3,
-  0xced2, 0xced3, 0xd1b0, 0xaeb0, 0xb1af, 0xb476, 0xd951, 0xa4e2,
-  0xa47e, 0xa4e3, 0xc97d, 0xa5b7, 0xa5b6, 0xa5b4, 0xa5b5, 0xa6ab,
-  0xc9e9, 0xc9eb, 0xa6aa, 0xc9e3, 0xc9e4, 0xc9ea, 0xc9e6, 0xc9e8,
-  0xa6a9, 0xc9e5, 0xc9ec, 0xc9e7, 0xa7e1, 0xa7ea, 0xa7e8, 0xcaf0,
-  0xcaed, 0xcaf5, 0xa7e6, 0xcaf6, 0xa7df, 0xcaf3, 0xa7e5, 0xcaef,
-  0xcaee, 0xa7e3, 0xcaf4, 0xa7e4, 0xa9d3, 0xa7de, 0xcaf1, 0xcae7,
-  0xa7db, 0xa7ee, 0xcaec, 0xcaf2, 0xa7e0, 0xa7e2, 0xcae8, 0xcae9,
-  0xcaea, 0xa7ed, 0xa7e7, 0xa7ec, 0xcaeb, 0xa7eb, 0xa7dd, 0xa7dc,
-  0xa7e9, 0xa9e1, 0xccbe, 0xccb7, 0xa9dc, 0xa9ef, 0xccb3, 0xccba,
-  0xccbc, 0xccbf, 0xa9ea, 0xccbb, 0xccb4, 0xa9e8, 0xccb8, 0xccc0,
-  0xa9d9, 0xccbd, 0xa9e3, 0xa9e2, 0xccb6, 0xa9d7, 0xa9d8, 0xa9d6,
-  0xa9ee, 0xa9e6, 0xa9e0, 0xa9d4, 0xccb9, 0xa9df, 0xa9d5, 0xa9e7,
-  0xa9f0, 0xced4, 0xa9e4, 0xccb5, 0xa9da, 0xa9dd, 0xa9de, 0xa9ec,
-  0xa9ed, 0xa9eb, 0xa9e5, 0xa9e9, 0xa9db, 0xabf4, 0xceda, 0xac41,
-  0xabf8, 0xabfa, 0xac40, 0xcee6, 0xabfd, 0xd1b1, 0xaeb1, 0xac43,
-  0xced7, 0xcedf, 0xabfe, 0xcede, 0xcedb, 0xcee3, 0xcee5, 0xabf7,
-  0xabfb, 0xac42, 0xaeb3, 0xcee0, 0xabf9, 0xac45, 0xced9, 0xabfc,
-  0xaeb2, 0xabf6, 0xced6, 0xcedd, 0xced5, 0xced8, 0xcedc, 0xd1b2,
-  0xac44, 0xcee1, 0xcee2, 0xcee4, 0xabf5, 0xaec1, 0xd1be, 0xaebf,
-  0xaec0, 0xd1b4, 0xd1c4, 0xaeb6, 0xd566, 0xd1c6, 0xd1c0, 0xd1b7,
-  0xd1c9, 0xd1ba, 0xaebc, 0xd57d, 0xd1bd, 0xaebe, 0xaeb5, 0xd1cb,
-  0xd1bf, 0xaeb8, 0xd1b8, 0xd1b5, 0xd1b6, 0xaeb9, 0xd1c5, 0xd1cc,
-  0xaebb, 0xd1bc, 0xd1bb, 0xaec3, 0xaec2, 0xaeb4, 0xaeba, 0xaebd,
-  0xd1c8, 0xd1c2, 0xaeb7, 0xd1b3, 0xd1ca, 0xd1c1, 0xd1c3, 0xd1c7,
-  0xd567, 0xb1b7, 0xb1cb, 0xb1ca, 0xb1bf, 0xd579, 0xd575, 0xd572,
-  0xd5a6, 0xb1ba, 0xb1b2, 0xd577, 0xb4a8, 0xb1b6, 0xd5a1, 0xb1cc,
-  0xb1c9, 0xd57b, 0xd56a, 0xb1c8, 0xd5a3, 0xd569, 0xb1bd, 0xb1c1,
-  0xd5a2, 0xd573, 0xb1c2, 0xb1bc, 0xd568, 0xb478, 0xd5a5, 0xd571,
-  0xb1c7, 0xd574, 0xd5a4, 0xb1c6, 0xd952, 0xb1b3, 0xd56f, 0xb1b8,
-  0xb1c3, 0xb1be, 0xd578, 0xd56e, 0xd56c, 0xd57e, 0xb1b0, 0xb1c4,
-  0xb1b4, 0xb477, 0xd57c, 0xb1b5, 0xb1b1, 0xb1c0, 0xb1bb, 0xb1b9,
-  0xd570, 0xb1c5, 0xd56d, 0xd57a, 0xd576, 0xd954, 0xd953, 0xd56b,
-  0xd964, 0xb47a, 0xd96a, 0xd959, 0xd967, 0xdd77, 0xb47d, 0xd96b,
-  0xd96e, 0xb47c, 0xd95c, 0xd96d, 0xd96c, 0xb47e, 0xd955, 0xb479,
-  0xb4a3, 0xb4a1, 0xd969, 0xd95f, 0xb4a5, 0xd970, 0xd968, 0xd971,
-  0xb4ad, 0xb4ab, 0xd966, 0xd965, 0xd963, 0xd95d, 0xb4a4, 0xb4a2,
-  0xd1b9, 0xd956, 0xddb7, 0xd957, 0xb47b, 0xb4aa, 0xdd79, 0xb4a6,
-  0xb4a7, 0xd958, 0xd96f, 0xdd78, 0xd960, 0xd95b, 0xb4a9, 0xd961,
-  0xd95e, 0xb4ae, 0xb770, 0xdd7c, 0xddb1, 0xddb6, 0xddaa, 0xb76c,
-  0xddbb, 0xb769, 0xdd7a, 0xdd7b, 0xb762, 0xb76b, 0xdda4, 0xb76e,
-  0xb76f, 0xdda5, 0xddb2, 0xddb8, 0xb76a, 0xb764, 0xdda3, 0xdd7d,
-  0xddba, 0xdda8, 0xdda9, 0xdd7e, 0xddb4, 0xddab, 0xddb5, 0xddad,
-  0xb765, 0xe1d9, 0xb768, 0xb766, 0xddb9, 0xddb0, 0xddac, 0xdda1,
-  0xba53, 0xddaf, 0xb76d, 0xdda7, 0xdda6, 0xb767, 0xb763, 0xe1ee,
-  0xddb3, 0xddae, 0xdda2, 0xe1e9, 0xe1da, 0xe1e5, 0xe1ec, 0xba51,
-  0xb4ac, 0xe1ea, 0xba4c, 0xba4b, 0xe1f1, 0xe1db, 0xe1e8, 0xe1dc,
-  0xe1e7, 0xba4f, 0xe1eb, 0xd962, 0xe1f2, 0xe1e3, 0xba52, 0xe5ba,
-  0xbcaf, 0xe1f0, 0xe1ef, 0xba54, 0xe5ad, 0xbcb0, 0xe5ae, 0xe1df,
-  0xe1e0, 0xe1dd, 0xe1e2, 0xe1de, 0xe1f3, 0xba4e, 0xbcb1, 0xba50,
-  0xba55, 0xe1e1, 0xe1ed, 0xe1e6, 0xe5b1, 0xba4a, 0xbcb4, 0xe9aa,
-  0xe5b6, 0xe5b5, 0xe5b7, 0xe5b4, 0xbcb5, 0xbcbb, 0xbcb8, 0xbcb9,
-  0xe5af, 0xe5b2, 0xe5bc, 0xbcc1, 0xbcbf, 0xe5b3, 0xd95a, 0xbcb2,
-  0xe5b9, 0xe5b0, 0xbcc2, 0xe5b8, 0xba4d, 0xbcb7, 0xe1e4, 0xbcba,
-  0xbcbe, 0xbcc0, 0xbcbd, 0xbcbc, 0xbcb6, 0xe5bb, 0xbcb3, 0xbcc3,
-  0xbed8, 0xbed9, 0xe9a9, 0xbee2, 0xbedf, 0xbed6, 0xbedd, 0xe9ab,
-  0xbedb, 0xbed5, 0xbedc, 0xe9a8, 0xc0bb, 0xbed7, 0xbede, 0xc0ba,
-  0xe9a7, 0xe9a6, 0xbee0, 0xbee1, 0xe9a5, 0xe9a4, 0xc0bc, 0xe9ae,
-  0xbeda, 0xe9ac, 0xc0bd, 0xc0c2, 0xecea, 0xecec, 0xc0bf, 0xeced,
-  0xece9, 0xeceb, 0xc0c0, 0xc0c3, 0xece8, 0xc0be, 0xc0c1, 0xc259,
-  0xe9ad, 0xc258, 0xc25e, 0xefd4, 0xc25c, 0xc25d, 0xefd7, 0xefd3,
-  0xc25a, 0xefd1, 0xc36b, 0xefd5, 0xefd6, 0xefd2, 0xc25b, 0xf242,
-  0xf245, 0xf246, 0xf244, 0xf247, 0xc36c, 0xf243, 0xf44e, 0xc464,
-  0xf44d, 0xf44c, 0xf44b, 0xc463, 0xc465, 0xf5cd, 0xc4e2, 0xc4e1,
-  0xf6e1, 0xf6e0, 0xf6e3, 0xc5cb, 0xc575, 0xf7dd, 0xf6e2, 0xf7dc,
-  0xc5cd, 0xc5cc, 0xc5f3, 0xf8a9, 0xf8ef, 0xa4e4, 0xd972, 0xe9af,
-  0xa6ac, 0xcaf7, 0xa7f1, 0xa7ef, 0xa7f0, 0xccc1, 0xa9f1, 0xac46,
-  0xcee7, 0xcee8, 0xac47, 0xd1ce, 0xaec4, 0xaec5, 0xd1cd, 0xb1d3,
-  0xb1cf, 0xd5a7, 0xb1d6, 0xb1d5, 0xb1ce, 0xb1d1, 0xb1d4, 0xb1d0,
-  0xd976, 0xb1cd, 0xb4af, 0xb4b1, 0xb4b2, 0xd975, 0xd978, 0xb4b0,
-  0xd973, 0xd977, 0xd974, 0xb771, 0xddbc, 0xba56, 0xe1f4, 0xbee3,
-  0xbcc4, 0xe5bd, 0xbcc5, 0xbcc6, 0xe5bf, 0xe5be, 0xe5c0, 0xe9b1,
-  0xe9b0, 0xecef, 0xecee, 0xc0c4, 0xc0c5, 0xf248, 0xa4e5, 0xd979,
-  0xb4b4, 0xb4b3, 0xddbd, 0xefd8, 0xc4e3, 0xf7de, 0xa4e6, 0xaec6,
-  0xb1d8, 0xb1d7, 0xd97a, 0xd97b, 0xb772, 0xe1f5, 0xba57, 0xe9b2,
-  0xa4e7, 0xa5b8, 0xa9f2, 0xccc2, 0xcee9, 0xac48, 0xb1d9, 0xd97c,
-  0xb4b5, 0xb773, 0xe5c1, 0xe5c2, 0xecf0, 0xc25f, 0xf8f0, 0xa4e8,
-  0xccc3, 0xa9f3, 0xac49, 0xceea, 0xaec7, 0xd1d2, 0xd1d0, 0xd1d1,
-  0xaec8, 0xd1cf, 0xb1db, 0xb1dc, 0xd5a8, 0xb1dd, 0xb1da, 0xd97d,
-  0xd97e, 0xddbe, 0xba59, 0xba58, 0xecf1, 0xefd9, 0xf24a, 0xf249,
-  0xf44f, 0xc95e, 0xac4a, 0xa4e9, 0xa5b9, 0xa6ae, 0xa6ad, 0xa6af,
-  0xa6b0, 0xc9ee, 0xc9ed, 0xcaf8, 0xa7f2, 0xcafb, 0xcafa, 0xcaf9,
-  0xcafc, 0xa9f4, 0xccc9, 0xccc5, 0xccce, 0xa9fb, 0xa9f9, 0xccca,
-  0xccc6, 0xcccd, 0xa9f8, 0xaa40, 0xccc8, 0xccc4, 0xa9fe, 0xcccb,
-  0xa9f7, 0xcccc, 0xa9fa, 0xa9fc, 0xccd0, 0xcccf, 0xccc7, 0xa9f6,
-  0xa9f5, 0xa9fd, 0xceef, 0xcef5, 0xac50, 0xac4d, 0xceec, 0xcef1,
-  0xac53, 0xac4b, 0xcef0, 0xac4e, 0xac51, 0xcef3, 0xac4c, 0xcef8,
-  0xac4f, 0xac52, 0xceed, 0xcef2, 0xcef6, 0xceee, 0xceeb, 0xcef7,
-  0xcef4, 0xaed0, 0xaec9, 0xaecc, 0xaecf, 0xd1d5, 0xaeca, 0xd1d3,
-  0xaece, 0xaecb, 0xd1d6, 0xaecd, 0xd5ac, 0xb1df, 0xd5ab, 0xd5ad,
-  0xb1de, 0xb1e3, 0xd1d4, 0xd5aa, 0xd5ae, 0xb1e0, 0xd5a9, 0xb1e2,
-  0xb1e1, 0xd9a7, 0xd9a2, 0xb4b6, 0xb4ba, 0xb4b7, 0xd9a5, 0xd9a8,
-  0xb4b8, 0xb4b9, 0xb4be, 0xddc7, 0xd9a6, 0xb4bc, 0xd9a3, 0xd9a1,
-  0xb4bd, 0xd9a4, 0xb779, 0xddbf, 0xb776, 0xb777, 0xb775, 0xddc4,
-  0xddc3, 0xddc0, 0xb77b, 0xddc2, 0xb4bb, 0xddc6, 0xddc1, 0xb778,
-  0xb774, 0xb77a, 0xddc5, 0xba5c, 0xe1f8, 0xe1f7, 0xe1f6, 0xba5a,
-  0xba5b, 0xe5c5, 0xe5c8, 0xbcc8, 0xbcc7, 0xe5c9, 0xe5c4, 0xbcca,
-  0xe5c6, 0xbcc9, 0xe5c3, 0xe5c7, 0xbee9, 0xbee6, 0xe9bb, 0xe9ba,
-  0xe9b9, 0xe9b4, 0xe9b5, 0xbee7, 0xbee4, 0xbee8, 0xe9b3, 0xbee5,
-  0xe9b6, 0xe9b7, 0xe9bc, 0xe9b8, 0xecf2, 0xc0c7, 0xefdc, 0xc0c6,
-  0xefda, 0xefdb, 0xc260, 0xc36e, 0xf24b, 0xc36d, 0xf451, 0xf452,
-  0xc466, 0xf450, 0xc4e4, 0xf7df, 0xc5ce, 0xf8aa, 0xf8ab, 0xa4ea,
-  0xa6b1, 0xa6b2, 0xa7f3, 0xccd1, 0xac54, 0xaed1, 0xb1e4, 0xb0d2,
-  0xb4bf, 0xb4c0, 0xb3cc, 0xd9a9, 0xb77c, 0xe1fa, 0xe1f9, 0xa4eb,
-  0xa6b3, 0xccd2, 0xaa42, 0xaa41, 0xcef9, 0xcefa, 0xd1d7, 0xd1d8,
-  0xaed2, 0xaed3, 0xaed4, 0xd5af, 0xb1e6, 0xb4c2, 0xb4c1, 0xddc8,
-  0xdf7a, 0xe1fb, 0xe9bd, 0xc261, 0xc467, 0xa4ec, 0xa5bc, 0xa5bd,
-  0xa5bb, 0xa5be, 0xa5ba, 0xa6b6, 0xc9f6, 0xa6b5, 0xa6b7, 0xc9f1,
-  0xc9f0, 0xc9f3, 0xc9f2, 0xc9f5, 0xa6b4, 0xc9ef, 0xc9f4, 0xcafd,
-  0xa7fd, 0xcafe, 0xcb43, 0xa7fc, 0xcb47, 0xcb42, 0xcb45, 0xa7f5,
-  0xa7f6, 0xa7f7, 0xa7f8, 0xa840, 0xcb41, 0xa7fa, 0xa841, 0xcb40,
-  0xcb46, 0xa7f9, 0xcb44, 0xa7fb, 0xa7f4, 0xa7fe, 0xaa57, 0xccd4,
-  0xaa43, 0xaa4d, 0xaa4e, 0xaa46, 0xaa58, 0xaa48, 0xccdc, 0xaa53,
-  0xccd7, 0xaa49, 0xcce6, 0xcce7, 0xccdf, 0xccd8, 0xaa56, 0xcce4,
-  0xaa51, 0xaa4f, 0xcce5, 0xcce3, 0xccdb, 0xccd3, 0xccda, 0xaa4a,
-  0xaa50, 0xaa44, 0xccde, 0xccdd, 0xccd5, 0xaa52, 0xcce1, 0xccd6,
-  0xaa55, 0xcce8, 0xaa45, 0xaa4c, 0xccd9, 0xcce2, 0xaa54, 0xaa47,
-  0xaa4b, 0xcce0, 0xcf5b, 0xac5c, 0xac69, 0xcf56, 0xcf4c, 0xac62,
-  0xcf4a, 0xac5b, 0xcf45, 0xac65, 0xcf52, 0xcefe, 0xcf41, 0xcf44,
-  0xcefb, 0xcf51, 0xcf61, 0xac60, 0xcf46, 0xcf58, 0xcefd, 0xcf5f,
-  0xcf60, 0xcf63, 0xcf5a, 0xcf4b, 0xcf53, 0xac66, 0xac59, 0xac61,
-  0xac6d, 0xac56, 0xac58, 0xcf43, 0xac6a, 0xac63, 0xcf5d, 0xcf40,
-  0xac6c, 0xac67, 0xcf49, 0xac6b, 0xcf50, 0xcf48, 0xac64, 0xcf5c,
-  0xcf54, 0xac5e, 0xcf62, 0xcf47, 0xac5a, 0xcf59, 0xcf4f, 0xac5f,
-  0xcf55, 0xac57, 0xcefc, 0xac68, 0xaee3, 0xac5d, 0xcf4e, 0xcf4d,
-  0xcf42, 0xcf5e, 0xcf57, 0xac55, 0xd1ec, 0xaeea, 0xd1ed, 0xd1e1,
-  0xaedf, 0xaeeb, 0xd1da, 0xd1e3, 0xd1eb, 0xd1d9, 0xd1f4, 0xaed5,
-  0xd1f3, 0xd1ee, 0xd1ef, 0xaedd, 0xaee8, 0xd1e5, 0xd1e6, 0xd1f0,
-  0xd1e7, 0xd1e2, 0xd1dc, 0xd1dd, 0xd1ea, 0xd1e4, 0xaed6, 0xaeda,
-  0xd1f2, 0xd1de, 0xaee6, 0xaee2, 0xaee5, 0xaeec, 0xaedb, 0xaee7,
-  0xd1e9, 0xaee9, 0xaed8, 0xaed7, 0xd1db, 0xd1df, 0xaee0, 0xd1f1,
-  0xd1e8, 0xd1e0, 0xaee4, 0xaee1, 0xaed9, 0xaedc, 0xd5c4, 0xd5b4,
-  0xd5b5, 0xd5b9, 0xd5c8, 0xd5c5, 0xd5be, 0xd5bd, 0xb1ed, 0xd5c1,
-  0xd5d0, 0xd5b0, 0xd5d1, 0xd5c3, 0xd5d5, 0xd5c9, 0xb1ec, 0xd5c7,
-  0xb1e7, 0xb1fc, 0xb1f2, 0xb1f6, 0xb1f5, 0xd5b1, 0xd5ce, 0xd5d4,
-  0xd5cc, 0xd5d3, 0xd5c0, 0xd5b2, 0xd5d2, 0xd5c2, 0xb1ea, 0xb1f7,
-  0xd5cb, 0xb1f0, 0xd5ca, 0xd5b3, 0xb1f8, 0xb1fa, 0xd5cd, 0xb1fb,
-  0xb1e9, 0xd5ba, 0xd5cf, 0xb1ef, 0xb1f9, 0xd5bc, 0xd5c6, 0xd5b7,
-  0xd5bb, 0xb1f4, 0xd5b6, 0xb1e8, 0xb1f1, 0xb1ee, 0xd5bf, 0xaede,
-  0xd9c0, 0xb1eb, 0xb1f3, 0xd9c3, 0xd9d9, 0xd9ce, 0xb4d6, 0xb4d1,
-  0xd9bd, 0xb4d2, 0xd9cd, 0xd9c6, 0xd9d3, 0xb4ce, 0xd9ab, 0xd9d5,
-  0xb4c4, 0xd9b3, 0xb4c7, 0xb4c6, 0xb4d7, 0xd9ad, 0xd9cf, 0xd9d0,
-  0xb4c9, 0xb4c5, 0xd9bb, 0xb4d0, 0xd9b6, 0xd9d1, 0xb4cc, 0xd9c9,
-  0xd9d6, 0xd9b0, 0xd9b5, 0xd9af, 0xb4cb, 0xd9c2, 0xddde, 0xd9b1,
-  0xb4cf, 0xd9ba, 0xd9d2, 0xb4ca, 0xd9b7, 0xd9b4, 0xd9c5, 0xb4cd,
-  0xb4c3, 0xb4d9, 0xd9c8, 0xd9c7, 0xd9ac, 0xb4c8, 0xd9d4, 0xd9bc,
-  0xd9be, 0xd9cb, 0xd9ca, 0xd9aa, 0xb4d3, 0xb4d5, 0xd9b2, 0xd9b9,
-  0xd9c1, 0xb4d4, 0xd9b8, 0xd9c4, 0xd9d7, 0xd9cc, 0xd9d8, 0xd9ae,
-  0xddf2, 0xb7a6, 0xddf0, 0xdddb, 0xdde0, 0xddd9, 0xddec, 0xddcb,
-  0xddd2, 0xddea, 0xddf4, 0xdddc, 0xddcf, 0xdde2, 0xdde7, 0xddd3,
-  0xdde4, 0xddd0, 0xddd7, 0xddd8, 0xb7a8, 0xddeb, 0xdde9, 0xddcc,
-  0xddee, 0xddef, 0xddf1, 0xb7ac, 0xb7a4, 0xd5b8, 0xddd4, 0xdde6,
-  0xddd5, 0xb7a1, 0xb7b1, 0xdded, 0xb7af, 0xb7ab, 0xddca, 0xb7a3,
-  0xddcd, 0xb7b0, 0xdddd, 0xddc9, 0xb7a9, 0xdde1, 0xddd1, 0xb7aa,
-  0xddda, 0xb77e, 0xb4d8, 0xdde3, 0xd9bf, 0xddce, 0xdde8, 0xb7a5,
-  0xdde5, 0xb7a2, 0xdddf, 0xb7ad, 0xddd6, 0xddf3, 0xb7a7, 0xdec6,
-  0xb7ae, 0xe24a, 0xe248, 0xe25e, 0xe246, 0xe258, 0xb77d, 0xba5f,
-  0xe242, 0xe25d, 0xe247, 0xe255, 0xba64, 0xba5d, 0xe25b, 0xe240,
-  0xe25a, 0xba6f, 0xe251, 0xe261, 0xba6d, 0xe249, 0xba5e, 0xe24b,
-  0xe259, 0xba67, 0xe244, 0xba6b, 0xba61, 0xe24d, 0xe243, 0xe1fc,
-  0xe257, 0xba68, 0xe260, 0xe1fd, 0xba65, 0xe253, 0xba66, 0xe245,
-  0xe250, 0xe24c, 0xe24e, 0xba60, 0xe25f, 0xba6e, 0xe24f, 0xe262,
-  0xe1fe, 0xe254, 0xba63, 0xba6c, 0xba6a, 0xe241, 0xe256, 0xba69,
-  0xba62, 0xe252, 0xe25c, 0xe5d5, 0xe5d1, 0xe5cd, 0xe5e1, 0xe5de,
-  0xbccd, 0xe5e5, 0xe5d4, 0xbcd8, 0xe5db, 0xe5d0, 0xe5da, 0xbcd5,
-  0xe5ee, 0xe5eb, 0xe5dd, 0xe5ce, 0xe5e2, 0xe5e4, 0xbcd1, 0xe5d8,
-  0xe5d3, 0xe5ca, 0xbcce, 0xbcd6, 0xe5e7, 0xbcd7, 0xe5cb, 0xe5ed,
-  0xe5e0, 0xe5e6, 0xbcd4, 0xe5e3, 0xe5ea, 0xbcd9, 0xbcd3, 0xe5dc,
-  0xe5cf, 0xe5ef, 0xe5cc, 0xe5e8, 0xbcd0, 0xe5d6, 0xe5d7, 0xbccf,
-  0xbccc, 0xe5d2, 0xbcd2, 0xbccb, 0xe5e9, 0xe5ec, 0xe5d9, 0xe9ca,
-  0xe9c2, 0xe9be, 0xbef6, 0xbeeb, 0xbef0, 0xbeec, 0xe9cc, 0xe9d7,
-  0xbeea, 0xe9c4, 0xe9cd, 0xe5df, 0xe9ce, 0xbef1, 0xe9dd, 0xbef5,
-  0xbef8, 0xe9c0, 0xbef4, 0xe9db, 0xe9dc, 0xe9d2, 0xe9d1, 0xe9c9,
-  0xe9d3, 0xe9da, 0xe9d9, 0xbeef, 0xbeed, 0xe9cb, 0xe9c8, 0xe9c5,
-  0xe9d8, 0xbef7, 0xe9d6, 0xbef3, 0xbef2, 0xe9d0, 0xe9bf, 0xe9c1,
-  0xe9c3, 0xe9d5, 0xe9cf, 0xbeee, 0xe9c6, 0xe9d4, 0xe9c7, 0xc0cf,
-  0xed45, 0xc0c8, 0xecf5, 0xed41, 0xc0ca, 0xed48, 0xecfc, 0xecf7,
-  0xed49, 0xecf3, 0xecfe, 0xc0d1, 0xed44, 0xed4a, 0xecfd, 0xc0c9,
-  0xed40, 0xecf4, 0xc0d0, 0xed47, 0xecf9, 0xc0cc, 0xecfb, 0xecf8,
-  0xc0d2, 0xecfa, 0xc0cb, 0xc0ce, 0xed43, 0xecf6, 0xed46, 0xed42,
-  0xc263, 0xefe7, 0xc268, 0xc269, 0xc262, 0xefe6, 0xefe3, 0xefe4,
-  0xc266, 0xefde, 0xefe2, 0xc265, 0xefdf, 0xc267, 0xc264, 0xefdd,
-  0xefe1, 0xefe5, 0xf251, 0xf24e, 0xf257, 0xf256, 0xf254, 0xf24f,
-  0xc372, 0xf250, 0xc371, 0xc0cd, 0xf253, 0xc370, 0xf258, 0xf252,
-  0xf24d, 0xefe0, 0xc36f, 0xf24c, 0xf456, 0xf455, 0xf255, 0xc468,
-  0xf459, 0xf45a, 0xf454, 0xf458, 0xf453, 0xf5d1, 0xf457, 0xc4e7,
-  0xc4e5, 0xf5cf, 0xf5d2, 0xf5ce, 0xf5d0, 0xc4e6, 0xf6e5, 0xf6e6,
-  0xc576, 0xf6e4, 0xf7e2, 0xc5cf, 0xf7e0, 0xf7e1, 0xf8ac, 0xc656,
-  0xf8f3, 0xf8f1, 0xf8f2, 0xf8f4, 0xf9bb, 0xa4ed, 0xa6b8, 0xaa59,
-  0xcce9, 0xcf64, 0xd1f5, 0xd1f7, 0xd1f6, 0xd1f8, 0xb1fd, 0xd5d7,
-  0xd1f9, 0xd5d6, 0xd5d8, 0xd5d9, 0xd9da, 0xb4db, 0xd9db, 0xd9dd,
-  0xb4dc, 0xb4da, 0xd9dc, 0xddfa, 0xddf8, 0xddf7, 0xddf6, 0xddf5,
-  0xb7b2, 0xddf9, 0xba70, 0xe263, 0xe265, 0xba71, 0xe264, 0xbcdb,
-  0xbcda, 0xe5f0, 0xe9df, 0xe9de, 0xe9e0, 0xbef9, 0xed4b, 0xc0d3,
-  0xefe8, 0xc26a, 0xf259, 0xc577, 0xa4ee, 0xa5bf, 0xa6b9, 0xa842,
-  0xaa5a, 0xaa5b, 0xac6e, 0xd1fa, 0xb7b3, 0xe6d1, 0xbefa, 0xc26b,
-  0xa4ef, 0xa6ba, 0xcceb, 0xaa5c, 0xccea, 0xcf65, 0xac6f, 0xcf66,
-  0xac70, 0xd1fc, 0xaeee, 0xaeed, 0xd5de, 0xd5dc, 0xd5dd, 0xd5db,
-  0xd5da, 0xd9de, 0xd9e1, 0xb4de, 0xd9df, 0xb4dd, 0xd9e0, 0xddfb,
-  0xe266, 0xe267, 0xe268, 0xe5f3, 0xe5f2, 0xbcdc, 0xe5f1, 0xe5f4,
-  0xe9e1, 0xe9e2, 0xe9e3, 0xed4c, 0xc0d4, 0xc26c, 0xf25a, 0xc4e8,
-  0xc95f, 0xac71, 0xcf67, 0xaeef, 0xb1fe, 0xb4df, 0xd9e2, 0xb7b5,
-  0xb7b4, 0xe269, 0xe26a, 0xbcdd, 0xbcde, 0xe9e5, 0xe9e4, 0xefe9,
-  0xf7e3, 0xa4f0, 0xc960, 0xa5c0, 0xa843, 0xcb48, 0xac72, 0xb7b6,
-  0xa4f1, 0xcf68, 0xac73, 0xcf69, 0xc0d5, 0xa4f2, 0xccec, 0xcf6a,
-  0xd242, 0xd241, 0xd1fe, 0xd1fd, 0xd243, 0xd240, 0xb240, 0xb241,
-  0xb4e0, 0xd9e3, 0xd9e4, 0xd9e5, 0xde41, 0xde42, 0xde40, 0xddfd,
-  0xddfe, 0xb7b7, 0xe26b, 0xe5f7, 0xe5f6, 0xe5f5, 0xe5f8, 0xe9e7,
-  0xe9e6, 0xbefb, 0xe9e8, 0xc0d6, 0xed4d, 0xefea, 0xf25b, 0xf6e7,
-  0xa4f3, 0xa5c2, 0xa5c1, 0xaa5d, 0xc961, 0xc97e, 0xa6bb, 0xc9f7,
-  0xcb49, 0xcb4a, 0xaa5e, 0xcced, 0xac74, 0xcf6b, 0xcf6c, 0xaef0,
-  0xaef4, 0xd244, 0xaef3, 0xaef1, 0xaef2, 0xd5df, 0xb242, 0xb4e3,
-  0xb4e1, 0xb4e2, 0xd9e6, 0xba72, 0xa4f4, 0xc9a1, 0xa5c3, 0xc9a4,
-  0xa5c6, 0xc9a3, 0xa5c5, 0xa5c4, 0xa844, 0xc9a2, 0xc9f8, 0xc9fc,
-  0xc9fe, 0xca40, 0xa6c5, 0xa6c6, 0xc9fb, 0xa6c1, 0xc9f9, 0xc9fd,
-  0xa6c2, 0xa6bd, 0xa6be, 0xa6c4, 0xc9fa, 0xa6bc, 0xa845, 0xa6bf,
-  0xa6c0, 0xa6c3, 0xcb5b, 0xcb59, 0xcb4c, 0xa851, 0xcb53, 0xa84c,
-  0xcb4d, 0xcb55, 0xcb52, 0xa84f, 0xcb51, 0xa856, 0xcb5a, 0xa858,
-  0xa85a, 0xcb4b, 0xa84d, 0xcb5c, 0xa854, 0xa857, 0xcd45, 0xa847,
-  0xa85e, 0xa855, 0xcb4e, 0xa84a, 0xa859, 0xcb56, 0xa848, 0xa849,
-  0xcd43, 0xcb4f, 0xa850, 0xa85b, 0xcb5d, 0xcb50, 0xa84e, 0xa853,
-  0xccee, 0xa85c, 0xcb57, 0xa852, 0xa85d, 0xa846, 0xcb54, 0xa84b,
-  0xcb58, 0xcd44, 0xaa6a, 0xaa7a, 0xccf5, 0xaa71, 0xcd4b, 0xaa62,
-  0xaa65, 0xcd42, 0xccf3, 0xccf7, 0xaa6d, 0xaa6f, 0xccfa, 0xaa76,
-  0xaa68, 0xaa66, 0xaa67, 0xaa75, 0xcd47, 0xaa70, 0xccf9, 0xccfb,
-  0xaa6e, 0xaa73, 0xccfc, 0xcd4a, 0xac75, 0xaa79, 0xaa63, 0xcd49,
-  0xcd4d, 0xccf8, 0xcd4f, 0xcd40, 0xaa6c, 0xccf4, 0xaa6b, 0xaa7d,
-  0xaa72, 0xccf2, 0xcf75, 0xaa78, 0xaa7c, 0xcd41, 0xcd46, 0xaa7e,
-  0xaa77, 0xaa69, 0xaa5f, 0xaa64, 0xccf6, 0xaa60, 0xcd4e, 0xccf0,
-  0xccef, 0xccfd, 0xccf1, 0xaa7b, 0xaef5, 0xaa74, 0xccfe, 0xaa61,
-  0xaca6, 0xcd4c, 0xcf7c, 0xcfa1, 0xcfa4, 0xcf77, 0xcfa7, 0xcfaa,
-  0xcfac, 0xcf74, 0xac76, 0xac7b, 0xd249, 0xacad, 0xcfa5, 0xcfad,
-  0xcf7b, 0xcf73, 0xd264, 0xac7e, 0xcfa2, 0xcf78, 0xcf7a, 0xaca5,
-  0xcf7d, 0xac7d, 0xcf70, 0xcfa8, 0xcfab, 0xac7a, 0xaca8, 0xcf6d,
-  0xacaa, 0xac78, 0xacae, 0xcfa9, 0xcf6f, 0xacab, 0xd25e, 0xcd48,
-  0xac7c, 0xac77, 0xcf76, 0xcf6e, 0xacac, 0xaca4, 0xcfa3, 0xaca9,
-  0xaca7, 0xcf79, 0xaca1, 0xcf71, 0xaca2, 0xaca3, 0xcf72, 0xcfa6,
-  0xac79, 0xcf7e, 0xd24c, 0xaefd, 0xaf43, 0xd255, 0xd25b, 0xd257,
-  0xd24a, 0xd24d, 0xd246, 0xd247, 0xaf4a, 0xaefa, 0xd256, 0xd25f,
-  0xaf45, 0xaef6, 0xaf40, 0xd24e, 0xaf42, 0xd24f, 0xd259, 0xaf44,
-  0xd268, 0xd248, 0xaefc, 0xaefb, 0xaf48, 0xd245, 0xd266, 0xd25a,
-  0xd267, 0xd261, 0xd253, 0xd262, 0xd25c, 0xd265, 0xd263, 0xaf49,
-  0xd254, 0xaef9, 0xaef8, 0xaf41, 0xaf47, 0xd260, 0xaf46, 0xd251,
-  0xb243, 0xd269, 0xd250, 0xd24b, 0xaefe, 0xaf4b, 0xaef7, 0xd258,
-  0xd25d, 0xb265, 0xd5e1, 0xd5e5, 0xb252, 0xb250, 0xb247, 0xd5e3,
-  0xd5e2, 0xb25b, 0xd5e8, 0xb255, 0xd5fa, 0xd647, 0xb244, 0xd5f7,
-  0xd5f0, 0xb267, 0xd5e0, 0xd5fc, 0xb264, 0xb258, 0xb263, 0xb24e,
-  0xd5ec, 0xd5fe, 0xd5f6, 0xb24f, 0xb249, 0xd645, 0xd5fd, 0xd640,
-  0xb251, 0xb259, 0xd642, 0xd5ea, 0xd5fb, 0xd5ef, 0xd644, 0xb25e,
-  0xb246, 0xb25c, 0xd5f4, 0xd5f2, 0xd5f3, 0xb253, 0xd5ee, 0xd5ed,
-  0xb248, 0xd5e7, 0xd646, 0xb24a, 0xd5f1, 0xb268, 0xb262, 0xd5e6,
-  0xb25f, 0xb25d, 0xb266, 0xd5f8, 0xb261, 0xd252, 0xd5f9, 0xb260,
-  0xd641, 0xb245, 0xd5f5, 0xb257, 0xd5e9, 0xb256, 0xb254, 0xb24c,
-  0xb24b, 0xd9e7, 0xd643, 0xd5eb, 0xd9fc, 0xb24d, 0xb541, 0xb25a,
-  0xb4ee, 0xd9f6, 0xb4fc, 0xd9ea, 0xb4eb, 0xb4e7, 0xda49, 0xb4ed,
-  0xb4f1, 0xb4ec, 0xb4f5, 0xda4d, 0xda44, 0xd9f1, 0xb4fa, 0xb4f4,
-  0xd9fd, 0xb4e4, 0xda4a, 0xda43, 0xb4e8, 0xd9f7, 0xb4f7, 0xda55,
-  0xda56, 0xb4e5, 0xda48, 0xb4f9, 0xd9fb, 0xd9ed, 0xd9ee, 0xb4fd,
-  0xd9f2, 0xd9f9, 0xd9f3, 0xb4fb, 0xb544, 0xd9ef, 0xd9e8, 0xd9e9,
-  0xd9eb, 0xb4ea, 0xd9f8, 0xb4f8, 0xb542, 0xd9fa, 0xda53, 0xda4b,
-  0xb4e6, 0xda51, 0xb4f2, 0xb4f0, 0xda57, 0xb4ef, 0xda41, 0xd9f4,
-  0xd9fe, 0xb547, 0xda45, 0xda42, 0xd9f0, 0xb543, 0xda4f, 0xda4c,
-  0xda54, 0xb4e9, 0xda40, 0xb546, 0xda47, 0xb4f3, 0xb4f6, 0xda46,
-  0xb545, 0xd9f5, 0xd5e4, 0xda50, 0xda4e, 0xda52, 0xd9ec, 0xb540,
-  0xde61, 0xde60, 0xde46, 0xb7bd, 0xde5f, 0xde49, 0xde4a, 0xb7c7,
-  0xde68, 0xb7c2, 0xde5e, 0xde43, 0xb7c8, 0xb7be, 0xde52, 0xde48,
-  0xde4b, 0xde63, 0xb7b8, 0xde6a, 0xde62, 0xb7c1, 0xde57, 0xb7cc,
-  0xb7cb, 0xb7c5, 0xde69, 0xb7b9, 0xde55, 0xde4c, 0xde59, 0xde65,
-  0xb7cd, 0xb7bb, 0xde54, 0xde4d, 0xb7c4, 0xb7c3, 0xde50, 0xde5a,
-  0xde64, 0xde47, 0xde51, 0xb7bc, 0xde5b, 0xb7c9, 0xb7c0, 0xde4e,
-  0xb7bf, 0xde45, 0xde53, 0xde67, 0xb4fe, 0xbab0, 0xde56, 0xe26c,
-  0xde58, 0xde66, 0xb7c6, 0xde4f, 0xb7ba, 0xb7ca, 0xbcf0, 0xde44,
-  0xde5d, 0xde5c, 0xe2aa, 0xbaad, 0xe27d, 0xe2a4, 0xbaa2, 0xe26e,
-  0xbaaf, 0xba77, 0xe26d, 0xe2b0, 0xbab1, 0xe271, 0xe2a3, 0xe273,
-  0xe2b3, 0xe2af, 0xba75, 0xbaa1, 0xe653, 0xbaae, 0xba7d, 0xe26f,
-  0xe2ae, 0xbaa3, 0xe2ab, 0xe2b8, 0xe275, 0xe27e, 0xe2b6, 0xe2ac,
-  0xba7c, 0xe27c, 0xba76, 0xba74, 0xbaa8, 0xe27a, 0xe277, 0xe278,
-  0xe2b2, 0xe2b7, 0xe2b5, 0xba7a, 0xe2b9, 0xba7e, 0xbaa7, 0xe270,
-  0xe5fa, 0xe279, 0xba78, 0xbaac, 0xbaa9, 0xba7b, 0xe2a5, 0xe274,
-  0xbaaa, 0xe2a7, 0xbaa4, 0xbaa6, 0xba73, 0xe2a9, 0xe2a1, 0xe272,
-  0xbaa5, 0xe2b1, 0xe2b4, 0xe27b, 0xe2a8, 0xba79, 0xbcdf, 0xe2a6,
-  0xe5f9, 0xe2ad, 0xe276, 0xe644, 0xe64e, 0xbce2, 0xe64d, 0xe659,
-  0xbce4, 0xe64b, 0xe64f, 0xbcef, 0xe646, 0xbce7, 0xe652, 0xe9f0,
-  0xbcf3, 0xbcf2, 0xe654, 0xe643, 0xe65e, 0xbced, 0xbce3, 0xe657,
-  0xe65b, 0xe660, 0xe655, 0xe649, 0xbce6, 0xbce9, 0xbcf1, 0xbcec,
-  0xe64c, 0xe2a2, 0xe648, 0xe65f, 0xbce8, 0xbceb, 0xe661, 0xbce0,
-  0xe656, 0xe5fb, 0xe65c, 0xc0df, 0xe64a, 0xbce1, 0xe645, 0xbce5,
-  0xe5fc, 0xbaab, 0xe641, 0xe65a, 0xe642, 0xe640, 0xbcea, 0xe658,
-  0xe5fe, 0xe651, 0xe650, 0xe65d, 0xe647, 0xbcee, 0xe9f3, 0xbf49,
-  0xbefe, 0xea40, 0xe9eb, 0xbf41, 0xe9f7, 0xbf48, 0xbf43, 0xe9f5,
-  0xed4f, 0xe9fb, 0xea42, 0xe9fa, 0xe9e9, 0xe9f8, 0xea44, 0xea46,
-  0xbefd, 0xea45, 0xbf44, 0xbf4a, 0xbf47, 0xe9fe, 0xbf46, 0xe9f9,
-  0xe9ed, 0xe9f2, 0xe9fd, 0xbf45, 0xbf42, 0xbefc, 0xbf40, 0xe9f1,
-  0xe5fd, 0xe9ec, 0xe9ef, 0xea41, 0xe9f4, 0xe9ea, 0xed4e, 0xea43,
-  0xe9ee, 0xe9fc, 0xed51, 0xc0e3, 0xc0d7, 0xc0db, 0xed53, 0xed59,
-  0xed57, 0xc0d9, 0xc0da, 0xc0e1, 0xed5a, 0xed52, 0xc0dc, 0xed56,
-  0xed55, 0xed5b, 0xc0e2, 0xc0dd, 0xc0e0, 0xed54, 0xc0e4, 0xc0de,
-  0xc0e5, 0xc0d8, 0xed58, 0xed50, 0xeff7, 0xc271, 0xeff4, 0xeff6,
-  0xc26f, 0xeff2, 0xeff3, 0xefee, 0xe9f6, 0xefef, 0xc270, 0xefeb,
-  0xc26d, 0xeff8, 0xc26e, 0xefec, 0xefed, 0xeff1, 0xc273, 0xc272,
-  0xeff0, 0xc378, 0xf25f, 0xf265, 0xc379, 0xf25c, 0xc376, 0xc373,
-  0xf267, 0xc377, 0xc374, 0xf25e, 0xf261, 0xf262, 0xf263, 0xf266,
-  0xeff5, 0xf25d, 0xc375, 0xf264, 0xf268, 0xf260, 0xf45d, 0xc46a,
-  0xf460, 0xc46b, 0xf468, 0xf45f, 0xf45c, 0xf45e, 0xf462, 0xf465,
-  0xf464, 0xf467, 0xf45b, 0xc469, 0xf463, 0xf466, 0xf469, 0xf461,
-  0xf5d3, 0xf5d4, 0xf5d8, 0xf5d9, 0xf5d6, 0xf5d7, 0xf5d5, 0xc4e9,
-  0xc578, 0xf6eb, 0xf6e8, 0xf6e9, 0xf6ea, 0xc579, 0xf7e5, 0xf7e4,
-  0xf8af, 0xc5f4, 0xf8ad, 0xf8b0, 0xf8ae, 0xf8f5, 0xc657, 0xc665,
-  0xf9a3, 0xf96c, 0xf9a2, 0xf9d0, 0xf9d1, 0xa4f5, 0xa6c7, 0xca41,
-  0xcb5e, 0xa85f, 0xa862, 0xcb5f, 0xa860, 0xa861, 0xcd58, 0xcd5a,
-  0xcd55, 0xcd52, 0xcd54, 0xaaa4, 0xaaa2, 0xcd56, 0xaaa3, 0xcd53,
-  0xcd50, 0xaaa1, 0xcd57, 0xcd51, 0xaaa5, 0xcd59, 0xcfaf, 0xcfb3,
-  0xacb7, 0xcfb6, 0xacaf, 0xacb2, 0xacb4, 0xacb6, 0xacb3, 0xcfb2,
-  0xcfb1, 0xacb1, 0xcfb4, 0xcfb5, 0xcfae, 0xacb5, 0xacb0, 0xcfb0,
-  0xd277, 0xd278, 0xd279, 0xaf50, 0xaf4c, 0xd26e, 0xd276, 0xd27b,
-  0xaf51, 0xd26c, 0xd272, 0xd26b, 0xd275, 0xd271, 0xaf4d, 0xaf4f,
-  0xd27a, 0xd26a, 0xd26d, 0xd273, 0xd274, 0xd27c, 0xd270, 0xaf4e,
-  0xb26d, 0xd64e, 0xd650, 0xd64c, 0xd658, 0xd64a, 0xd657, 0xb269,
-  0xd648, 0xda5b, 0xd652, 0xb26c, 0xd653, 0xd656, 0xd65a, 0xd64f,
-  0xd654, 0xb26a, 0xb26b, 0xd659, 0xd64d, 0xd649, 0xd65b, 0xd651,
-  0xd655, 0xd64b, 0xb548, 0xb549, 0xda65, 0xb54f, 0xda59, 0xda62,
-  0xda58, 0xb54c, 0xda60, 0xda5e, 0xda5f, 0xb54a, 0xda63, 0xda5c,
-  0xda5a, 0xb54b, 0xda5d, 0xda61, 0xb54d, 0xda64, 0xde70, 0xde77,
-  0xde79, 0xdea1, 0xb7da, 0xde6b, 0xb7d2, 0xde7a, 0xb7d7, 0xdea2,
-  0xb7ce, 0xde7d, 0xde6d, 0xde7e, 0xde6c, 0xb7dc, 0xde78, 0xb7cf,
-  0xdea3, 0xb7d4, 0xde71, 0xb7d9, 0xde7c, 0xde6f, 0xde76, 0xde72,
-  0xde6e, 0xb7d1, 0xb7d8, 0xb7d6, 0xb7d3, 0xb7db, 0xb7d0, 0xde75,
-  0xb7d5, 0xb54e, 0xde7b, 0xde73, 0xde74, 0xe2c1, 0xbab4, 0xe2bd,
-  0xe2c3, 0xe2bf, 0xbab6, 0xe2be, 0xe2c2, 0xe2ba, 0xe2bc, 0xbab5,
-  0xe2c0, 0xe2bb, 0xbab7, 0xbab2, 0xe2c4, 0xbab3, 0xe667, 0xe664,
-  0xe670, 0xe66a, 0xe66c, 0xbcf4, 0xe666, 0xe66e, 0xe66d, 0xe66b,
-  0xe671, 0xbcf7, 0xe668, 0xe66f, 0xbcf5, 0xe663, 0xe665, 0xbcf6,
-  0xe662, 0xe672, 0xe669, 0xea4a, 0xbf51, 0xea55, 0xea53, 0xbf4b,
-  0xea49, 0xea4c, 0xea4d, 0xea48, 0xbf55, 0xbf56, 0xea47, 0xea56,
-  0xea51, 0xbf4f, 0xbf4c, 0xea50, 0xea4e, 0xbf52, 0xea52, 0xbf4d,
-  0xbf4e, 0xea4f, 0xbf50, 0xea4b, 0xea54, 0xbf53, 0xea57, 0xea58,
-  0xbf54, 0xc0e7, 0xc0ee, 0xed5c, 0xed62, 0xed60, 0xc0ea, 0xc0e9,
-  0xc0e6, 0xed5e, 0xc0ec, 0xc0eb, 0xc0e8, 0xed61, 0xed5d, 0xed5f,
-  0xc0ed, 0xc277, 0xeffb, 0xc274, 0xc275, 0xeffd, 0xc276, 0xeffa,
-  0xeff9, 0xf26c, 0xeffc, 0xf26d, 0xc37a, 0xf26b, 0xf26a, 0xf269,
-  0xc37b, 0xc46c, 0xf46a, 0xf46b, 0xf5dc, 0xf5db, 0xc4ea, 0xf5da,
-  0xf6ec, 0xf6ed, 0xf7e6, 0xf8b1, 0xf8f6, 0xf9bc, 0xc679, 0xf9c6,
-  0xa4f6, 0xaaa6, 0xaaa7, 0xacb8, 0xc0ef, 0xa4f7, 0xaaa8, 0xaf52,
-  0xb7dd, 0xa4f8, 0xb26e, 0xbab8, 0xc962, 0xcfb7, 0xd27d, 0xe2c5,
-  0xc0f0, 0xa4f9, 0xaaa9, 0xcfb8, 0xcfb9, 0xda66, 0xb550, 0xdea4,
-  0xb7de, 0xe2c6, 0xbcf8, 0xc37c, 0xa4fa, 0xda67, 0xa4fb, 0xa6c9,
-  0xca42, 0xa6c8, 0xa865, 0xa864, 0xa863, 0xcb60, 0xaaaa, 0xaaab,
-  0xcd5b, 0xcfba, 0xcfbd, 0xacba, 0xcfbb, 0xacb9, 0xcfbc, 0xacbb,
-  0xd2a2, 0xd2a1, 0xd27e, 0xaf53, 0xd65d, 0xd65e, 0xb26f, 0xd65c,
-  0xd65f, 0xb552, 0xb270, 0xb551, 0xda6b, 0xda6a, 0xda68, 0xda69,
-  0xda6c, 0xdea6, 0xdea5, 0xdea9, 0xdea8, 0xdea7, 0xbab9, 0xe2c9,
-  0xe2c8, 0xbaba, 0xe2c7, 0xe673, 0xe674, 0xbcf9, 0xea59, 0xea5a,
-  0xf272, 0xc37d, 0xf271, 0xf270, 0xf26e, 0xf26f, 0xc4eb, 0xf46c,
-  0xf6ee, 0xf8f7, 0xa4fc, 0xc9a5, 0xa5c7, 0xc9a6, 0xca43, 0xca44,
-  0xcb66, 0xcb62, 0xcb61, 0xaaac, 0xcb65, 0xa867, 0xcb63, 0xa866,
-  0xcb67, 0xcb64, 0xcd5f, 0xcfbe, 0xcd5d, 0xcd64, 0xaaad, 0xaab0,
-  0xcd65, 0xcd61, 0xcd62, 0xcd5c, 0xaaaf, 0xcd5e, 0xaaae, 0xcd63,
-  0xcd60, 0xcfc2, 0xacbd, 0xacbe, 0xcfc5, 0xcfbf, 0xcfc4, 0xcfc0,
-  0xacbc, 0xcfc3, 0xcfc1, 0xd2a8, 0xd2a5, 0xd2a7, 0xaf58, 0xaf57,
-  0xaf55, 0xd2a4, 0xd2a9, 0xaf54, 0xaf56, 0xd2a6, 0xd667, 0xd2a3,
-  0xd2aa, 0xd662, 0xd666, 0xd665, 0xda6e, 0xda79, 0xd668, 0xd663,
-  0xda6d, 0xb274, 0xb273, 0xd661, 0xd664, 0xb275, 0xb272, 0xb271,
-  0xd660, 0xd669, 0xda70, 0xda77, 0xb554, 0xda76, 0xda73, 0xb556,
-  0xda75, 0xda6f, 0xda71, 0xda74, 0xda72, 0xb555, 0xda78, 0xb553,
-  0xb7df, 0xdead, 0xdeac, 0xdeaa, 0xb7e2, 0xb7e1, 0xdeae, 0xdeab,
-  0xe2ca, 0xbabb, 0xb7e0, 0xdeb0, 0xdeaf, 0xe2cd, 0xe2cb, 0xbcfa,
-  0xbabc, 0xe2cc, 0xe676, 0xbcfb, 0xe675, 0xe67e, 0xe67d, 0xe67b,
-  0xe67a, 0xe677, 0xe678, 0xe679, 0xe67c, 0xe6a1, 0xea5f, 0xea5c,
-  0xea5d, 0xbf57, 0xea5b, 0xea61, 0xea60, 0xea5e, 0xed64, 0xed65,
-  0xc0f1, 0xc0f2, 0xed63, 0xc279, 0xeffe, 0xc278, 0xc37e, 0xc3a1,
-  0xc46d, 0xf46e, 0xf46d, 0xf5dd, 0xf6ef, 0xc57a, 0xf7e8, 0xf7e7,
-  0xf7e9, 0xa5c8, 0xcfc6, 0xaf59, 0xb276, 0xd66a, 0xa5c9, 0xc9a7,
-  0xa4fd, 0xca45, 0xcb6c, 0xcb6a, 0xcb6b, 0xcb68, 0xa868, 0xcb69,
-  0xcd6d, 0xaab3, 0xcd6b, 0xcd67, 0xcd6a, 0xcd66, 0xaab5, 0xcd69,
-  0xaab2, 0xaab1, 0xaab4, 0xcd6c, 0xcd68, 0xacc2, 0xacc5, 0xcfce,
-  0xcfcd, 0xcfcc, 0xacbf, 0xcfd5, 0xcfcb, 0xacc1, 0xd2af, 0xcfd2,
-  0xcfd0, 0xacc4, 0xcfc8, 0xcfd3, 0xcfca, 0xcfd4, 0xcfd1, 0xcfc9,
-  0xacc0, 0xcfd6, 0xcfc7, 0xacc3, 0xd2b4, 0xd2ab, 0xd2b6, 0xd2ae,
-  0xd2b9, 0xd2ba, 0xd2ac, 0xd2b8, 0xd2b5, 0xd2b3, 0xd2b7, 0xaf5f,
-  0xaf5d, 0xd2b1, 0xd2ad, 0xd2b0, 0xd2bb, 0xd2b2, 0xaf5e, 0xcfcf,
-  0xaf5a, 0xaf5c, 0xd678, 0xd66d, 0xd66b, 0xd66c, 0xd673, 0xd674,
-  0xd670, 0xb27b, 0xd675, 0xd672, 0xd66f, 0xb279, 0xd66e, 0xb277,
-  0xb27a, 0xd671, 0xd679, 0xaf5b, 0xb278, 0xd677, 0xd676, 0xb27c,
-  0xda7e, 0xdaa1, 0xb560, 0xdaa7, 0xdaa9, 0xdaa2, 0xb55a, 0xdaa6,
-  0xdaa5, 0xb55b, 0xb561, 0xb562, 0xdaa8, 0xb558, 0xda7d, 0xda7b,
-  0xdaa3, 0xda7a, 0xb55f, 0xda7c, 0xdaa4, 0xdaaa, 0xb559, 0xb55e,
-  0xb55c, 0xb55d, 0xb557, 0xb7e9, 0xdeb7, 0xb7e8, 0xdebb, 0xdeb1,
-  0xdebc, 0xdeb2, 0xdeb3, 0xdebd, 0xdeba, 0xdeb8, 0xdeb9, 0xdeb5,
-  0xdeb4, 0xdebe, 0xb7e5, 0xdeb6, 0xb7ea, 0xb7e4, 0xb7eb, 0xb7ec,
-  0xb7e7, 0xb7e6, 0xe2ce, 0xbabe, 0xbabd, 0xe2d3, 0xbcfc, 0xbabf,
-  0xbac1, 0xe2d4, 0xb7e3, 0xbac0, 0xe2d0, 0xe2d2, 0xe2cf, 0xe2d1,
-  0xe6ab, 0xe6aa, 0xe6a7, 0xbd40, 0xea62, 0xbd41, 0xe6a6, 0xbcfe,
-  0xe6a8, 0xe6a5, 0xe6a2, 0xe6a9, 0xe6a3, 0xe6a4, 0xbcfd, 0xed69,
-  0xea66, 0xea65, 0xea67, 0xed66, 0xbf5a, 0xea63, 0xbf58, 0xbf5c,
-  0xbf5b, 0xea64, 0xea68, 0xbf59, 0xed6d, 0xc0f5, 0xc27a, 0xc0f6,
-  0xc0f3, 0xed6a, 0xed68, 0xed6b, 0xed6e, 0xc0f4, 0xed6c, 0xed67,
-  0xf042, 0xf045, 0xf275, 0xf040, 0xf46f, 0xf046, 0xc3a2, 0xf044,
-  0xc27b, 0xf041, 0xf043, 0xf047, 0xf276, 0xf274, 0xc3a3, 0xf273,
-  0xc46e, 0xc4ed, 0xf6f1, 0xc4ec, 0xf6f3, 0xf6f0, 0xf6f2, 0xc5d0,
-  0xf8b2, 0xa5ca, 0xcd6e, 0xd2bc, 0xd2bd, 0xb27d, 0xdebf, 0xbf5d,
-  0xc3a4, 0xc57b, 0xf8b3, 0xa5cb, 0xcd6f, 0xa260, 0xcfd7, 0xcfd8,
-  0xd2be, 0xd2bf, 0xb27e, 0xb2a1, 0xdaab, 0xdec2, 0xdec1, 0xdec0,
-  0xe2d5, 0xe2d6, 0xe2d7, 0xbac2, 0xe6ad, 0xe6ac, 0xea69, 0xbf5e,
-  0xbf5f, 0xed72, 0xed6f, 0xed70, 0xed71, 0xf049, 0xf048, 0xc27c,
-  0xf277, 0xf5de, 0xa5cc, 0xacc6, 0xb2a2, 0xdec3, 0xa5cd, 0xd2c0,
-  0xb2a3, 0xb563, 0xb564, 0xa5ce, 0xa5cf, 0xca46, 0xa86a, 0xa869,
-  0xacc7, 0xcfd9, 0xdaac, 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa86b,
-  0xa86c, 0xcb6e, 0xcb6d, 0xaab6, 0xcd72, 0xcd70, 0xcd71, 0xcfda,
-  0xcfdb, 0xaccb, 0xacc9, 0xacca, 0xacc8, 0xaf60, 0xaf64, 0xaf63,
-  0xd2c1, 0xaf62, 0xaf61, 0xd2c2, 0xb2a6, 0xd67b, 0xd67a, 0xb2a4,
-  0xb2a5, 0xb566, 0xb565, 0xdaae, 0xdaad, 0xb2a7, 0xb7ed, 0xdec5,
-  0xb7ee, 0xdec4, 0xe2d8, 0xe6ae, 0xbd42, 0xea6a, 0xed73, 0xc3a6,
-  0xc3a5, 0xc57c, 0xa5d4, 0xcd73, 0xb2a8, 0xe2d9, 0xbac3, 0xcb6f,
-  0xcb70, 0xcd74, 0xaab8, 0xaab9, 0xaab7, 0xaccf, 0xacd0, 0xaccd,
-  0xacce, 0xcfdc, 0xcfdd, 0xaccc, 0xd2c3, 0xaf68, 0xaf69, 0xb2ab,
-  0xd2c9, 0xaf6e, 0xaf6c, 0xd2ca, 0xd2c5, 0xaf6b, 0xaf6a, 0xaf65,
-  0xd2c8, 0xd2c7, 0xd2c4, 0xaf6d, 0xd2c6, 0xaf66, 0xaf67, 0xb2ac,
-  0xd6a1, 0xd6a2, 0xb2ad, 0xd67c, 0xd67e, 0xd6a4, 0xd6a3, 0xd67d,
-  0xb2a9, 0xb2aa, 0xdab6, 0xb56b, 0xb56a, 0xdab0, 0xb568, 0xdab3,
-  0xb56c, 0xdab4, 0xb56d, 0xdab1, 0xb567, 0xb569, 0xdab5, 0xdab2,
-  0xdaaf, 0xded2, 0xdec7, 0xb7f0, 0xb7f3, 0xb7f2, 0xb7f7, 0xb7f6,
-  0xded3, 0xded1, 0xdeca, 0xdece, 0xdecd, 0xb7f4, 0xded0, 0xdecc,
-  0xded4, 0xdecb, 0xb7f5, 0xb7ef, 0xb7f1, 0xdec9, 0xe2db, 0xbac7,
-  0xe2df, 0xbac6, 0xe2dc, 0xbac5, 0xdec8, 0xdecf, 0xe2de, 0xbac8,
-  0xe2e0, 0xe2dd, 0xe2da, 0xe6b1, 0xe6b5, 0xe6b7, 0xe6b3, 0xe6b2,
-  0xe6b0, 0xbd45, 0xbd43, 0xbd48, 0xbd49, 0xe6b4, 0xbd46, 0xe6af,
-  0xbd47, 0xbac4, 0xe6b6, 0xbd44, 0xea6c, 0xea6b, 0xea73, 0xea6d,
-  0xea72, 0xea6f, 0xbf60, 0xea71, 0xbf61, 0xbf62, 0xea70, 0xea6e,
-  0xc0f8, 0xed74, 0xc0f7, 0xed77, 0xed75, 0xed76, 0xc0f9, 0xf04d,
-  0xc2a1, 0xf04e, 0xc27d, 0xf04f, 0xc27e, 0xf04c, 0xf050, 0xf04a,
-  0xc3a7, 0xf278, 0xc3a8, 0xc46f, 0xf04b, 0xc470, 0xc4ee, 0xf5df,
-  0xc57e, 0xf6f4, 0xc57d, 0xf7ea, 0xc5f5, 0xc5f6, 0xf9cc, 0xacd1,
-  0xcfde, 0xb56e, 0xb56f, 0xa5d5, 0xa6ca, 0xca47, 0xcb71, 0xa86d,
-  0xaaba, 0xacd2, 0xacd3, 0xacd4, 0xd6a6, 0xd2cb, 0xaf6f, 0xb2ae,
-  0xd6a5, 0xdab8, 0xb571, 0xdab7, 0xb570, 0xded5, 0xbd4a, 0xe6bb,
-  0xe6b8, 0xe6b9, 0xe6ba, 0xed78, 0xf051, 0xf471, 0xf470, 0xf6f5,
-  0xa5d6, 0xcd75, 0xaf70, 0xb572, 0xded6, 0xe2e1, 0xbd4b, 0xea74,
-  0xf052, 0xf472, 0xa5d7, 0xaabb, 0xacd7, 0xcfdf, 0xacd8, 0xacd6,
-  0xacd5, 0xd2cc, 0xaf71, 0xaf72, 0xaf73, 0xb2b0, 0xd6a7, 0xb2af,
-  0xdab9, 0xb2b1, 0xb573, 0xded7, 0xb7f8, 0xb7f9, 0xbac9, 0xbaca,
-  0xbd4c, 0xbf64, 0xea75, 0xbf63, 0xed79, 0xc0fa, 0xf053, 0xf473,
-  0xa5d8, 0xa86e, 0xcd78, 0xcd77, 0xaabc, 0xcd76, 0xaabd, 0xcd79,
-  0xcfe5, 0xacdb, 0xacda, 0xcfe7, 0xcfe6, 0xacdf, 0xacde, 0xacd9,
-  0xcfe1, 0xcfe2, 0xcfe3, 0xace0, 0xcfe0, 0xacdc, 0xcfe4, 0xacdd,
-  0xd2cf, 0xd2d3, 0xd2d1, 0xd2d0, 0xd2d4, 0xd2d5, 0xd2d6, 0xd2ce,
-  0xd2cd, 0xaf75, 0xaf76, 0xd2d7, 0xd2d2, 0xd6b0, 0xd2d8, 0xaf77,
-  0xaf74, 0xd6aa, 0xd6a9, 0xd6ab, 0xd6ac, 0xd6ae, 0xd6ad, 0xd6b2,
-  0xb2b5, 0xb2b2, 0xb2b6, 0xd6a8, 0xb2b7, 0xd6b1, 0xb2b4, 0xd6af,
-  0xb2b3, 0xdabc, 0xdabe, 0xdaba, 0xdabb, 0xdabf, 0xdac1, 0xdac2,
-  0xdabd, 0xdac0, 0xb574, 0xdedb, 0xdee0, 0xded8, 0xdedc, 0xdee1,
-  0xdedd, 0xb7fa, 0xb843, 0xb7fd, 0xded9, 0xdeda, 0xbace, 0xb846,
-  0xb7fe, 0xb844, 0xb7fc, 0xdedf, 0xb845, 0xdede, 0xb841, 0xb7fb,
-  0xb842, 0xdee2, 0xe2e6, 0xe2e8, 0xb840, 0xe2e3, 0xbacc, 0xe2e9,
-  0xbacd, 0xe2e7, 0xe2e2, 0xe2e5, 0xe2ea, 0xbacb, 0xe2e4, 0xbd4e,
-  0xe6bf, 0xe6be, 0xbd51, 0xbd4f, 0xe6bc, 0xbd4d, 0xe6bd, 0xbd50,
-  0xea7d, 0xeaa1, 0xea7e, 0xea76, 0xea7a, 0xea79, 0xea77, 0xbf66,
-  0xbf67, 0xbf65, 0xea78, 0xea7b, 0xea7c, 0xbf68, 0xc140, 0xeda3,
-  0xc0fc, 0xed7b, 0xc0fe, 0xc141, 0xc0fd, 0xeda2, 0xed7c, 0xc0fb,
-  0xeda1, 0xed7a, 0xed7e, 0xed7d, 0xf055, 0xc2a4, 0xc2a5, 0xc2a2,
-  0xc2a3, 0xf054, 0xf27b, 0xc3a9, 0xf279, 0xf27a, 0xf474, 0xf477,
-  0xf475, 0xf476, 0xf5e0, 0xc4ef, 0xf7eb, 0xf8b4, 0xc5f7, 0xf8f8,
-  0xf8f9, 0xc666, 0xa5d9, 0xace1, 0xdac3, 0xdee3, 0xa5da, 0xa86f,
-  0xaabe, 0xcfe8, 0xcfe9, 0xaf78, 0xdac4, 0xb575, 0xb847, 0xc142,
-  0xeda4, 0xf27c, 0xf478, 0xa5db, 0xcda1, 0xcd7a, 0xcd7c, 0xcd7e,
-  0xcd7d, 0xcd7b, 0xaabf, 0xace2, 0xcff2, 0xcfed, 0xcfea, 0xcff1,
-  0xace4, 0xace5, 0xcff0, 0xcfef, 0xcfee, 0xcfeb, 0xcfec, 0xcff3,
-  0xace3, 0xaf7c, 0xafa4, 0xafa3, 0xd2e1, 0xd2db, 0xd2d9, 0xafa1,
-  0xd6b9, 0xaf7a, 0xd2de, 0xd2e2, 0xd2e4, 0xd2e0, 0xd2da, 0xafa2,
-  0xd2df, 0xd2dd, 0xaf79, 0xd2e5, 0xafa5, 0xd2e3, 0xaf7d, 0xd2dc,
-  0xaf7e, 0xaf7b, 0xb2b9, 0xd6ba, 0xd6b3, 0xd6b5, 0xd6b7, 0xd6b8,
-  0xd6b6, 0xb2ba, 0xd6bb, 0xd6b4, 0xdac8, 0xb576, 0xdad0, 0xdac5,
-  0xdad1, 0xdac6, 0xdac7, 0xdacf, 0xdace, 0xdacb, 0xb2b8, 0xb577,
-  0xdac9, 0xdacc, 0xb578, 0xdacd, 0xdaca, 0xdeee, 0xdef2, 0xb84e,
-  0xe2f0, 0xb851, 0xdef0, 0xdeed, 0xdee8, 0xdeea, 0xdeeb, 0xdee4,
-  0xb84d, 0xb84c, 0xb848, 0xdee7, 0xb84f, 0xb850, 0xdee6, 0xdee9,
-  0xdef1, 0xb84a, 0xb84b, 0xdeef, 0xdee5, 0xe2f2, 0xbad0, 0xe2f4,
-  0xdeec, 0xe2f6, 0xbad4, 0xe2f7, 0xe2f3, 0xbad1, 0xe2ef, 0xbad3,
-  0xe2ec, 0xe2f1, 0xe2f5, 0xe2ee, 0xb849, 0xe2eb, 0xbad2, 0xe2ed,
-  0xbd54, 0xe6c1, 0xbd58, 0xbd56, 0xbacf, 0xe6c8, 0xe6c9, 0xbd53,
-  0xe6c7, 0xe6ca, 0xbd55, 0xbd52, 0xe6c3, 0xe6c0, 0xe6c5, 0xe6c2,
-  0xbd59, 0xe6c4, 0xe6c6, 0xbd57, 0xbf6a, 0xeaa8, 0xeaa2, 0xeaa6,
-  0xeaac, 0xeaad, 0xeaa9, 0xeaaa, 0xeaa7, 0xeaa4, 0xbf6c, 0xbf69,
-  0xeaa3, 0xeaa5, 0xbf6b, 0xeaab, 0xc146, 0xedaa, 0xeda5, 0xc145,
-  0xc143, 0xedac, 0xc144, 0xeda8, 0xeda9, 0xeda6, 0xedad, 0xf056,
-  0xc147, 0xeda7, 0xedae, 0xedab, 0xf05a, 0xf057, 0xc2a6, 0xf05b,
-  0xf05d, 0xf05c, 0xf058, 0xf059, 0xf2a3, 0xc3aa, 0xf27e, 0xf2a2,
-  0xf27d, 0xf2a4, 0xf2a1, 0xf47a, 0xf47d, 0xf479, 0xc471, 0xf47b,
-  0xf47c, 0xf47e, 0xc472, 0xc474, 0xc473, 0xf5e1, 0xf5e3, 0xf5e2,
-  0xf6f6, 0xf8b5, 0xf8fa, 0xa5dc, 0xcb72, 0xaac0, 0xcda3, 0xaac1,
-  0xaac2, 0xcda2, 0xcff8, 0xcff7, 0xace6, 0xace9, 0xace8, 0xace7,
-  0xcff4, 0xcff6, 0xcff5, 0xd2e8, 0xafa7, 0xd2ec, 0xd2eb, 0xd2ea,
-  0xd2e6, 0xafa6, 0xafaa, 0xafad, 0xafae, 0xd2e7, 0xd2e9, 0xafac,
-  0xafab, 0xafa9, 0xafa8, 0xd6c2, 0xd6c0, 0xd6bc, 0xb2bb, 0xd6bd,
-  0xb2bc, 0xd6be, 0xd6bf, 0xd6c1, 0xb2bd, 0xdad5, 0xdad4, 0xdad3,
-  0xdad2, 0xdef6, 0xb852, 0xdef3, 0xdef5, 0xb853, 0xb854, 0xdef4,
-  0xe341, 0xe2f9, 0xe2fa, 0xbad7, 0xbad5, 0xbad6, 0xe343, 0xe342,
-  0xe2fe, 0xe2fd, 0xe2fc, 0xe2fb, 0xe340, 0xe2f8, 0xe6cb, 0xe6d0,
-  0xe6ce, 0xe6cd, 0xe6cc, 0xe6cf, 0xeaae, 0xbf6d, 0xc148, 0xedb0,
-  0xc149, 0xedaf, 0xf05f, 0xf05e, 0xc2a7, 0xf2a5, 0xc3ab, 0xf4a1,
-  0xc5a1, 0xf6f7, 0xf8b7, 0xf8b6, 0xc9a8, 0xacea, 0xaceb, 0xd6c3,
-  0xb856, 0xa5dd, 0xa872, 0xa871, 0xa870, 0xcda4, 0xaac4, 0xaac3,
-  0xacee, 0xcffa, 0xcffd, 0xcffb, 0xacec, 0xaced, 0xcff9, 0xcffc,
-  0xafb5, 0xd2f3, 0xd2f5, 0xd2f4, 0xafb2, 0xd2ef, 0xafb0, 0xafaf,
-  0xafb3, 0xafb1, 0xafb4, 0xd2f2, 0xd2ed, 0xd2ee, 0xd2f1, 0xd2f0,
-  0xd6c6, 0xd6c7, 0xd6c5, 0xd6c4, 0xb2be, 0xb57d, 0xdad6, 0xdad8,
-  0xdada, 0xb57c, 0xb57a, 0xdad7, 0xb57b, 0xdad9, 0xb579, 0xdf41,
-  0xdef7, 0xdefa, 0xdefe, 0xb85a, 0xdefc, 0xdefb, 0xdef8, 0xdef9,
-  0xb858, 0xdf40, 0xb857, 0xb85c, 0xb85b, 0xb859, 0xdefd, 0xe349,
-  0xe348, 0xe344, 0xbad8, 0xe347, 0xe346, 0xbad9, 0xbd5e, 0xe6d2,
-  0xbd5f, 0xbd5b, 0xbd5d, 0xbd5a, 0xbd5c, 0xeaaf, 0xbf70, 0xeab1,
-  0xeab0, 0xe345, 0xbf72, 0xbf71, 0xbf6e, 0xbf6f, 0xedb5, 0xedb3,
-  0xc14a, 0xedb4, 0xedb6, 0xedb2, 0xedb1, 0xf060, 0xc2aa, 0xc2a8,
-  0xc2a9, 0xf2a6, 0xf2a7, 0xc3ad, 0xc3ac, 0xf4a3, 0xf4a4, 0xf4a2,
-  0xf6f8, 0xf6f9, 0xa5de, 0xca48, 0xa873, 0xcda5, 0xaac6, 0xaac5,
-  0xcda6, 0xd040, 0xacef, 0xcffe, 0xacf0, 0xafb6, 0xd2f8, 0xd2f6,
-  0xd2fc, 0xafb7, 0xd2f7, 0xd2fb, 0xd2f9, 0xd2fa, 0xd6c8, 0xd6ca,
-  0xb2bf, 0xd6c9, 0xb2c0, 0xb5a2, 0xb5a1, 0xb57e, 0xdadb, 0xdf44,
-  0xb85d, 0xb85e, 0xdf43, 0xdf42, 0xe34a, 0xbadb, 0xbada, 0xe34b,
-  0xe34c, 0xbd61, 0xbd60, 0xeab5, 0xe6d3, 0xe6d5, 0xe6d4, 0xeab4,
-  0xeab2, 0xeab6, 0xeab3, 0xbf73, 0xedb7, 0xc14b, 0xedb8, 0xedb9,
-  0xc2ab, 0xc2ac, 0xc475, 0xc5d1, 0xa5df, 0xd041, 0xd2fd, 0xafb8,
-  0xb3ba, 0xb3b9, 0xb5a4, 0xdadd, 0xb5a3, 0xdadc, 0xdf45, 0xbadc,
-  0xe34d, 0xbadd, 0xc476, 0xf4a5, 0xa6cb, 0xaac7, 0xcda7, 0xacf2,
-  0xacf1, 0xd042, 0xd043, 0xd340, 0xd342, 0xafb9, 0xd344, 0xd347,
-  0xd345, 0xd346, 0xd343, 0xd2fe, 0xafba, 0xd348, 0xd341, 0xd6d3,
-  0xb2c6, 0xd6dc, 0xb2c3, 0xd6d5, 0xb2c7, 0xb2c1, 0xd6d0, 0xd6dd,
-  0xd6d1, 0xd6ce, 0xb2c5, 0xb2c2, 0xd6d4, 0xd6d7, 0xb2c4, 0xd6d8,
-  0xb2c8, 0xd6d9, 0xd6cf, 0xd6d6, 0xd6da, 0xd6d2, 0xd6cd, 0xd6cb,
-  0xd6db, 0xdadf, 0xdae4, 0xdae0, 0xdae6, 0xb5a7, 0xd6cc, 0xdae1,
-  0xb5a5, 0xdade, 0xb5ac, 0xdae2, 0xb5ab, 0xdae3, 0xb5ad, 0xb5a8,
-  0xb5ae, 0xb5a9, 0xb5aa, 0xb5a6, 0xdae5, 0xb861, 0xdf50, 0xdf53,
-  0xdf47, 0xdf4c, 0xdf46, 0xb863, 0xdf4a, 0xdf48, 0xb862, 0xdf4f,
-  0xdf4e, 0xdf4b, 0xdf4d, 0xdf49, 0xbae1, 0xdf52, 0xb85f, 0xdf51,
-  0xe35d, 0xbae8, 0xe358, 0xbae7, 0xe34e, 0xe350, 0xbae0, 0xe355,
-  0xe354, 0xe357, 0xbae5, 0xe352, 0xe351, 0xbae4, 0xbadf, 0xe353,
-  0xbae2, 0xe359, 0xe35b, 0xe356, 0xe34f, 0xbae3, 0xbd69, 0xbade,
-  0xe35c, 0xe6d9, 0xbd62, 0xe6db, 0xbd63, 0xbd65, 0xe6de, 0xe6d6,
-  0xbae6, 0xe6dc, 0xe6d8, 0xb860, 0xbd68, 0xbd64, 0xbd66, 0xbd67,
-  0xbf76, 0xe6dd, 0xe6d7, 0xbd6a, 0xe6da, 0xeac0, 0xeabb, 0xeac5,
-  0xbf74, 0xeabd, 0xbf78, 0xeac3, 0xeaba, 0xeab7, 0xeac6, 0xc151,
-  0xbf79, 0xeac2, 0xeab8, 0xbf77, 0xeabc, 0xbf7b, 0xeab9, 0xeabe,
-  0xbf7a, 0xeac1, 0xeac4, 0xedcb, 0xedcc, 0xedbc, 0xedc3, 0xedc1,
-  0xc14f, 0xedc8, 0xeabf, 0xedbf, 0xedc9, 0xc14e, 0xedbe, 0xedbd,
-  0xedc7, 0xedc4, 0xedc6, 0xedba, 0xedca, 0xc14c, 0xedc5, 0xedce,
-  0xedc2, 0xc150, 0xc14d, 0xedc0, 0xedbb, 0xedcd, 0xbf75, 0xf063,
-  0xf061, 0xf067, 0xc2b0, 0xf065, 0xf064, 0xc2b2, 0xf06a, 0xc2b1,
-  0xf06b, 0xf068, 0xc2ae, 0xf069, 0xf062, 0xc2af, 0xc2ad, 0xf2ab,
-  0xf066, 0xf06c, 0xf2a8, 0xc3b2, 0xc3b0, 0xf2aa, 0xf2ac, 0xf2a9,
-  0xc3b1, 0xc3ae, 0xc3af, 0xc3b3, 0xc478, 0xf4aa, 0xf4a9, 0xf4a7,
-  0xf4a6, 0xf4a8, 0xc477, 0xc479, 0xc4f0, 0xf5e5, 0xf5e4, 0xf6fa,
-  0xf6fc, 0xf6fe, 0xf6fd, 0xf6fb, 0xc5a3, 0xc5a2, 0xc5d3, 0xc5d2,
-  0xc5d4, 0xf7ed, 0xf7ec, 0xf8fb, 0xf8b8, 0xf8fc, 0xc658, 0xc659,
-  0xf96d, 0xc67e, 0xa6cc, 0xcda8, 0xd045, 0xd046, 0xd044, 0xacf3,
-  0xd047, 0xd048, 0xd049, 0xd349, 0xd34f, 0xd34d, 0xafbb, 0xd34b,
-  0xd34c, 0xd34e, 0xd34a, 0xb2c9, 0xd6de, 0xb2cb, 0xd6e0, 0xb2ca,
-  0xd6df, 0xdae8, 0xb5af, 0xdaea, 0xdae7, 0xd6e1, 0xb5b0, 0xdae9,
-  0xdf56, 0xb864, 0xdf54, 0xb865, 0xdf55, 0xb866, 0xbae9, 0xe361,
-  0xe35e, 0xe360, 0xbaea, 0xbaeb, 0xe35f, 0xe6df, 0xe6e0, 0xbd6b,
-  0xe6e2, 0xe6e1, 0xa261, 0xeaca, 0xeacb, 0xeac7, 0xeac8, 0xbf7c,
-  0xbf7d, 0xeac9, 0xc157, 0xc153, 0xc158, 0xc154, 0xc156, 0xc152,
-  0xc155, 0xc2b3, 0xedcf, 0xf2ae, 0xf2ad, 0xf4ab, 0xc47a, 0xc47b,
-  0xf741, 0xf5e6, 0xf740, 0xf8fd, 0xf9a4, 0xa6cd, 0xa874, 0xcda9,
-  0xaac8, 0xacf6, 0xd04c, 0xacf4, 0xd04a, 0xacf9, 0xacf5, 0xacfa,
-  0xacf8, 0xd04b, 0xacf7, 0xafbf, 0xafbe, 0xd35a, 0xafc7, 0xd353,
-  0xd359, 0xafc3, 0xd352, 0xd358, 0xd356, 0xafc2, 0xafc4, 0xd355,
-  0xafbd, 0xd354, 0xafc8, 0xafc5, 0xafc9, 0xafc6, 0xd351, 0xd350,
-  0xd357, 0xafc0, 0xafbc, 0xafc1, 0xd6f0, 0xd6e9, 0xb5b5, 0xd6e8,
-  0xb2cf, 0xb2d6, 0xb2d3, 0xb2d9, 0xb2d8, 0xb2d4, 0xd6e2, 0xd6e5,
-  0xd6e4, 0xb2d0, 0xd6e6, 0xd6ef, 0xb2d1, 0xd6e3, 0xd6ec, 0xd6ed,
-  0xb2d2, 0xd6ea, 0xb2d7, 0xb2cd, 0xb2d5, 0xd6e7, 0xb2cc, 0xd6eb,
-  0xd6ee, 0xdafb, 0xdaf2, 0xb5b2, 0xdaf9, 0xdaf6, 0xdaee, 0xdaf7,
-  0xb5b4, 0xdaef, 0xdaeb, 0xb86c, 0xdaf4, 0xb5b1, 0xdafa, 0xb5b8,
-  0xb5ba, 0xdaed, 0xb5b9, 0xdaf0, 0xb5b3, 0xdaf8, 0xdaf1, 0xdaf5,
-  0xdaf3, 0xb5b6, 0xdaec, 0xb5bb, 0xb2ce, 0xb5b7, 0xb5bc, 0xb868,
-  0xdf5d, 0xdf5f, 0xdf61, 0xdf65, 0xdf5b, 0xdf59, 0xb86a, 0xdf60,
-  0xdf64, 0xdf5c, 0xdf58, 0xdf57, 0xdf62, 0xdf5a, 0xdf5e, 0xb86b,
-  0xb869, 0xdf66, 0xb867, 0xdf63, 0xe372, 0xbaee, 0xe36a, 0xbd78,
-  0xe374, 0xbaf1, 0xe378, 0xbaf7, 0xe365, 0xe375, 0xe362, 0xe377,
-  0xe366, 0xbafe, 0xbafb, 0xe376, 0xe370, 0xbaed, 0xbaf5, 0xbaf4,
-  0xbaf3, 0xbaf9, 0xe363, 0xbafa, 0xe371, 0xbaf6, 0xbaec, 0xe373,
-  0xbaef, 0xbaf0, 0xbaf8, 0xe368, 0xe367, 0xe364, 0xe36c, 0xe369,
-  0xe36d, 0xbafd, 0xe379, 0xbaf2, 0xe36e, 0xe36f, 0xe36b, 0xbafc,
-  0xe6e7, 0xbd70, 0xbd79, 0xbd75, 0xe6e4, 0xbd72, 0xbd76, 0xe6f0,
-  0xbd6c, 0xe6e8, 0xbd74, 0xe6eb, 0xe6e6, 0xbd73, 0xbd77, 0xe6e5,
-  0xbd71, 0xe6ef, 0xbd6e, 0xe6ee, 0xe6ed, 0xbd7a, 0xe572, 0xbd6d,
-  0xe6ec, 0xe6e3, 0xbd7b, 0xe6ea, 0xbd6f, 0xe6e9, 0xbfa2, 0xbfa7,
-  0xbf7e, 0xead8, 0xeacf, 0xeadb, 0xead3, 0xead9, 0xbfa8, 0xbfa1,
-  0xeacc, 0xead2, 0xeadc, 0xead5, 0xeada, 0xeace, 0xead6, 0xbfa3,
-  0xead4, 0xbfa6, 0xbfa5, 0xead0, 0xead1, 0xeacd, 0xead7, 0xbfa4,
-  0xeade, 0xeadd, 0xedda, 0xedd6, 0xc15f, 0xedd0, 0xc159, 0xc169,
-  0xeddc, 0xc161, 0xc15d, 0xedd3, 0xc164, 0xc167, 0xedde, 0xc15c,
-  0xedd5, 0xc165, 0xede0, 0xeddd, 0xedd1, 0xc160, 0xc15a, 0xc168,
-  0xedd8, 0xc163, 0xedd2, 0xc15e, 0xeddf, 0xc162, 0xc15b, 0xedd9,
-  0xc166, 0xedd7, 0xeddb, 0xf06e, 0xf074, 0xc2b9, 0xf077, 0xc2b4,
-  0xc2b5, 0xf06f, 0xf076, 0xf071, 0xc2ba, 0xc2b7, 0xf06d, 0xc2b6,
-  0xf073, 0xf075, 0xc2b8, 0xf072, 0xf070, 0xf2b8, 0xc3b7, 0xc3b8,
-  0xc3b4, 0xc3b5, 0xf2b4, 0xf2b2, 0xf2b6, 0xc3ba, 0xf2b7, 0xf2b0,
-  0xf2af, 0xf2b3, 0xf2b1, 0xc3b6, 0xf2b5, 0xf4ac, 0xc47e, 0xc47d,
-  0xf4ad, 0xf4af, 0xf4ae, 0xc4a1, 0xf5eb, 0xf5e8, 0xf5e9, 0xf5e7,
-  0xf5ea, 0xc4f2, 0xf5ec, 0xc4f1, 0xf742, 0xc5d5, 0xc5d7, 0xf7ee,
-  0xc5d6, 0xf8b9, 0xf940, 0xf942, 0xf8fe, 0xf941, 0xc66c, 0xa6ce,
-  0xacfb, 0xd26f, 0xafca, 0xb2da, 0xdafc, 0xdafd, 0xeadf, 0xc16a,
-  0xede1, 0xc2bb, 0xf2ba, 0xf2b9, 0xc4a2, 0xf5ed, 0xf743, 0xc5f8,
-  0xca49, 0xaac9, 0xa875, 0xd04d, 0xd360, 0xd35b, 0xd35f, 0xd35d,
-  0xafcb, 0xd35e, 0xd35c, 0xd6f1, 0xdafe, 0xdb40, 0xdf69, 0xdf6a,
-  0xb86e, 0xb86f, 0xdf68, 0xdf6b, 0xdf67, 0xb86d, 0xbb40, 0xb870,
-  0xe37a, 0xbd7c, 0xe6f1, 0xbd7d, 0xbfa9, 0xeae2, 0xeae0, 0xeae1,
-  0xede4, 0xede3, 0xede2, 0xf2bb, 0xc3b9, 0xf2bc, 0xf744, 0xc5f9,
-  0xf8ba, 0xa6cf, 0xaacb, 0xaaca, 0xd04f, 0xacfc, 0xd04e, 0xd362,
-  0xafcc, 0xd6f2, 0xd361, 0xb2dc, 0xd6f5, 0xd6f3, 0xd6f4, 0xb2db,
-  0xdb42, 0xdb43, 0xdb41, 0xb873, 0xdf6d, 0xdf6c, 0xdf6e, 0xb872,
-  0xb871, 0xe6f2, 0xe6f4, 0xbd7e, 0xe6f3, 0xeae3, 0xbfaa, 0xf079,
-  0xf078, 0xc3bb, 0xf2bd, 0xc3bd, 0xc3bc, 0xf4b0, 0xf5ee, 0xc4f3,
-  0xa6d0, 0xd050, 0xacfd, 0xd365, 0xafce, 0xd364, 0xd363, 0xafcd,
-  0xd6fb, 0xd6fd, 0xd6f6, 0xd6f7, 0xb2dd, 0xd6f8, 0xb2de, 0xd6fc,
-  0xd6f9, 0xd6fa, 0xb2df, 0xb5be, 0xb5bf, 0xdb44, 0xdf6f, 0xdf70,
-  0xe37e, 0xbb43, 0xbb41, 0xbb42, 0xe37b, 0xe37c, 0xe37d, 0xe6f9,
-  0xe6fa, 0xbda1, 0xe6f7, 0xe6f6, 0xe6f8, 0xe6f5, 0xbfad, 0xeae4,
-  0xbfab, 0xbfac, 0xede6, 0xc16b, 0xede5, 0xefa8, 0xf07a, 0xf07b,
-  0xc2bc, 0xc2bd, 0xc16c, 0xf2be, 0xf2bf, 0xf4b1, 0xc4a3, 0xa6d1,
-  0xa6d2, 0xacfe, 0xaacc, 0xafcf, 0xd051, 0xb5c0, 0xa6d3, 0xad41,
-  0xd052, 0xd053, 0xad40, 0xad42, 0xa6d4, 0xd054, 0xafd1, 0xd366,
-  0xafd3, 0xafd0, 0xafd2, 0xd741, 0xb2e0, 0xd740, 0xd6fe, 0xdf71,
-  0xe3a1, 0xbda2, 0xbfae, 0xeae6, 0xeae5, 0xede7, 0xf5ef, 0xa6d5,
-  0xcb73, 0xcdaa, 0xad43, 0xd055, 0xd368, 0xafd4, 0xd367, 0xafd5,
-  0xd743, 0xb2e2, 0xd742, 0xd744, 0xb2e1, 0xdb46, 0xdb47, 0xdb45,
-  0xb5c1, 0xb874, 0xb875, 0xbb45, 0xe3a3, 0xe3a2, 0xbb44, 0xe6fb,
-  0xe6fc, 0xeae7, 0xc170, 0xc16f, 0xc16d, 0xc16e, 0xc171, 0xf07c,
-  0xc2bf, 0xc2be, 0xf2c0, 0xf4b2, 0xc5a5, 0xc5a4, 0xa6d6, 0xd1fb,
-  0xb877, 0xb5c2, 0xb876, 0xbb46, 0xa6d7, 0xc9a9, 0xa6d8, 0xa6d9,
-  0xcdab, 0xcb76, 0xcb77, 0xa877, 0xcb74, 0xa876, 0xa879, 0xcb75,
-  0xa87b, 0xa87a, 0xcb78, 0xa878, 0xaad1, 0xaacf, 0xcdad, 0xaace,
-  0xaad3, 0xaad5, 0xaad2, 0xcdb0, 0xcdac, 0xaad6, 0xaad0, 0xa87c,
-  0xaad4, 0xcdaf, 0xcdae, 0xaacd, 0xd05b, 0xad47, 0xad48, 0xd05d,
-  0xd057, 0xd05a, 0xd063, 0xd061, 0xad49, 0xd067, 0xad4c, 0xd064,
-  0xd05c, 0xd059, 0xdb49, 0xd062, 0xad44, 0xd065, 0xd056, 0xd05f,
-  0xad46, 0xad4b, 0xd060, 0xad4f, 0xad4d, 0xd058, 0xad4a, 0xd05e,
-  0xad4e, 0xad45, 0xd066, 0xafda, 0xafe3, 0xafd8, 0xafd6, 0xd36a,
-  0xafde, 0xafdb, 0xd36c, 0xafdd, 0xd36b, 0xd369, 0xd36e, 0xafe2,
-  0xafe0, 0xdb48, 0xd36f, 0xd36d, 0xafd7, 0xafd9, 0xafdc, 0xafdf,
-  0xafe1, 0xd74e, 0xb2e4, 0xd745, 0xd747, 0xd748, 0xd750, 0xd74c,
-  0xd74a, 0xd74d, 0xd751, 0xb2e5, 0xb2e9, 0xd746, 0xd74f, 0xb2e7,
-  0xb2e6, 0xd74b, 0xd749, 0xb2e3, 0xb2e8, 0xb5c8, 0xdb51, 0xdb4f,
-  0xb5ca, 0xdb4a, 0xdfa1, 0xb5c9, 0xdb4e, 0xdb4b, 0xb5c5, 0xb5cb,
-  0xdb50, 0xb5c7, 0xdb4d, 0xbb47, 0xb5c6, 0xdb4c, 0xb5cc, 0xb5c4,
-  0xb5c3, 0xdf77, 0xdf75, 0xdf7b, 0xdf73, 0xdfa2, 0xdf78, 0xdf72,
-  0xb87b, 0xb8a3, 0xdf7d, 0xdf76, 0xb87e, 0xb87c, 0xdf7e, 0xb879,
-  0xb878, 0xdf79, 0xb87d, 0xb5cd, 0xdf7c, 0xdf74, 0xb87a, 0xb8a1,
-  0xb8a2, 0xbb4c, 0xbb48, 0xbb4d, 0xe3a6, 0xe3a5, 0xe3a7, 0xbb4a,
-  0xe3a4, 0xbb4b, 0xe3aa, 0xe3a9, 0xe3a8, 0xbb49, 0xe741, 0xe744,
-  0xbda8, 0xe743, 0xbda7, 0xbda3, 0xbda4, 0xbda5, 0xe740, 0xe6fe,
-  0xbda6, 0xe742, 0xe6fd, 0xeae9, 0xeaf3, 0xbfb1, 0xbfb0, 0xeaed,
-  0xeaef, 0xeaea, 0xeaee, 0xeae8, 0xeaf1, 0xbfaf, 0xeaf0, 0xeaec,
-  0xeaf2, 0xeaeb, 0xc174, 0xede8, 0xedee, 0xc178, 0xc17a, 0xc177,
-  0xc176, 0xc175, 0xc173, 0xede9, 0xedec, 0xc172, 0xeded, 0xc179,
-  0xedeb, 0xedea, 0xc2c0, 0xc2c1, 0xf0a1, 0xf07d, 0xf07e, 0xf2c2,
-  0xf2c1, 0xc3be, 0xf4b4, 0xc4a4, 0xf4b3, 0xf5f0, 0xf745, 0xc5a6,
-  0xf943, 0xf944, 0xc5d8, 0xa6da, 0xaad7, 0xdb52, 0xbb4e, 0xc17b,
-  0xedef, 0xa6db, 0xafe5, 0xafe4, 0xdb53, 0xeaf4, 0xa6dc, 0xad50,
-  0xdb54, 0xdb55, 0xdb56, 0xbb4f, 0xbfb2, 0xa6dd, 0xaad8, 0xd068,
-  0xafe6, 0xd370, 0xb2ea, 0xdb57, 0xb8a4, 0xbb50, 0xbfb3, 0xc17c,
-  0xc2c2, 0xf4b5, 0xa6de, 0xaad9, 0xafe7, 0xd752, 0xb5ce, 0xbb51,
-  0xe3ab, 0xe745, 0xa6df, 0xb5cf, 0xdfa3, 0xbb52, 0xa6e0, 0xcdb1,
-  0xd069, 0xad51, 0xd372, 0xafea, 0xafe8, 0xafe9, 0xafeb, 0xd371,
-  0xd757, 0xd754, 0xd756, 0xb2eb, 0xb2ed, 0xb2ec, 0xd753, 0xb2ee,
-  0xd755, 0xdb58, 0xdb59, 0xdb5a, 0xdfa6, 0xdfa7, 0xdfa5, 0xdfa8,
-  0xb8a5, 0xdfa4, 0xbb53, 0xe74a, 0xe746, 0xe749, 0xe74b, 0xe748,
-  0xe747, 0xeaf5, 0xeaf6, 0xeaf7, 0xbfb4, 0xbfb5, 0xedf1, 0xedf0,
-  0xedf2, 0xf0a3, 0xf0a2, 0xf2c4, 0xf2c5, 0xf2c3, 0xc4a5, 0xf4b6,
-  0xf4b7, 0xf746, 0xf7ef, 0xf8bb, 0xa6e1, 0xa87d, 0xc17d, 0xa6e2,
-  0xd758, 0xdb5b, 0xc641, 0xca4a, 0xca4b, 0xca4d, 0xa6e3, 0xca4e,
-  0xca4c, 0xcba2, 0xcba3, 0xcb7b, 0xcba1, 0xa8a1, 0xa8a2, 0xcb7c,
-  0xcb7a, 0xcb79, 0xcb7d, 0xa87e, 0xcb7e, 0xd06a, 0xcdb6, 0xaadc,
-  0xcdb5, 0xcdb7, 0xaadb, 0xcdbc, 0xaadf, 0xcdb2, 0xcdc0, 0xcdc6,
-  0xaae6, 0xcdc3, 0xaae3, 0xcdb9, 0xcdbf, 0xcdc1, 0xcdb4, 0xaae2,
-  0xaadd, 0xcdba, 0xaae4, 0xaae7, 0xaae1, 0xaada, 0xcdbe, 0xcdb8,
-  0xcdc5, 0xaae9, 0xaae5, 0xaae0, 0xcdbd, 0xafec, 0xcdbb, 0xaade,
-  0xaae8, 0xcdb3, 0xcdc2, 0xcdc4, 0xad62, 0xad5c, 0xad64, 0xad61,
-  0xd071, 0xd074, 0xad5d, 0xd06b, 0xad56, 0xad60, 0xad63, 0xad65,
-  0xd0a2, 0xd077, 0xad55, 0xd0a1, 0xad59, 0xad57, 0xad52, 0xd06f,
-  0xd07e, 0xd073, 0xd076, 0xd0a5, 0xad66, 0xd07d, 0xad5e, 0xd078,
-  0xd0a4, 0xd075, 0xd079, 0xd07c, 0xd06d, 0xd0a3, 0xd07b, 0xd06c,
-  0xd070, 0xad5f, 0xad5a, 0xad53, 0xad58, 0xad54, 0xad67, 0xd06e,
-  0xd3a5, 0xad5b, 0xd07a, 0xce41, 0xd3a8, 0xaffa, 0xd376, 0xd3a3,
-  0xd37d, 0xd3b2, 0xd3aa, 0xd37e, 0xd3a9, 0xd378, 0xd37c, 0xd3b5,
-  0xaffd, 0xd3ad, 0xd3a4, 0xafed, 0xd3b3, 0xd374, 0xd3ac, 0xaffc,
-  0xaff7, 0xd373, 0xaff5, 0xaff4, 0xaff9, 0xd3ab, 0xaff1, 0xaff8,
-  0xd072, 0xdb5c, 0xd3a6, 0xd37a, 0xaffb, 0xd37b, 0xd3a1, 0xaffe,
-  0xd375, 0xd3af, 0xd3ae, 0xd3b6, 0xaff3, 0xaff0, 0xd3b4, 0xd3b0,
-  0xd3a7, 0xd3a2, 0xaff6, 0xaff2, 0xd377, 0xafee, 0xd3b1, 0xafef,
-  0xd379, 0xd75e, 0xd760, 0xd765, 0xd779, 0xb2fc, 0xb2f2, 0xd75d,
-  0xb2fd, 0xb2fe, 0xd768, 0xd76f, 0xd775, 0xd762, 0xd769, 0xb340,
-  0xd777, 0xd772, 0xb2fa, 0xb2f8, 0xd76e, 0xd76a, 0xd75c, 0xb2ef,
-  0xd761, 0xd759, 0xb2f7, 0xb2f9, 0xd766, 0xd763, 0xb2f4, 0xd773,
-  0xb2f1, 0xd764, 0xd77a, 0xd76c, 0xd76b, 0xb2f0, 0xb2fb, 0xb2f3,
-  0xd75a, 0xd75f, 0xd770, 0xd776, 0xb341, 0xd75b, 0xd767, 0xd76d,
-  0xb2f6, 0xd778, 0xd771, 0xd774, 0xb2f5, 0xdb6c, 0xdb60, 0xb5d7,
-  0xdb7d, 0xdba7, 0xdbaa, 0xb5d5, 0xdb68, 0xdba3, 0xdb69, 0xdb77,
-  0xb5e2, 0xdb73, 0xb5df, 0xdb74, 0xdb5d, 0xdba4, 0xb5e8, 0xdba1,
-  0xdb75, 0xdbac, 0xdb70, 0xdfc8, 0xdbaf, 0xb5e6, 0xdb6e, 0xdb7a,
-  0xb5e9, 0xb5d4, 0xdb72, 0xdbad, 0xdb6b, 0xdb64, 0xdb6f, 0xdb63,
-  0xdb61, 0xb5d0, 0xdba5, 0xdb6a, 0xdba8, 0xdba9, 0xb5d8, 0xb5dd,
-  0xb5d9, 0xb5e1, 0xdb7e, 0xb5da, 0xdb76, 0xdb66, 0xb5d2, 0xdb5e,
-  0xdba2, 0xdbab, 0xdb65, 0xb5e0, 0xdbb0, 0xdb71, 0xdb6d, 0xb5d1,
-  0xb5e5, 0xdb7c, 0xb5e7, 0xdb78, 0xb5dc, 0xb5d6, 0xb5de, 0xb5d3,
-  0xb5e4, 0xdb79, 0xdb67, 0xdb7b, 0xdb62, 0xdba6, 0xdbae, 0xdb5f,
-  0xdfc7, 0xdfdd, 0xb855, 0xdfcc, 0xdfca, 0xdfb5, 0xb8a9, 0xdfc5,
-  0xdfd9, 0xdfc1, 0xb8b1, 0xdfd8, 0xdfbf, 0xb5e3, 0xdfcf, 0xdfc0,
-  0xdfd6, 0xb8b0, 0xb8a8, 0xdfaa, 0xdfb2, 0xdfcb, 0xdfc3, 0xdfdc,
-  0xdfc6, 0xb8b6, 0xdfd7, 0xb8ad, 0xdfc9, 0xdfd1, 0xdfb6, 0xdfd0,
-  0xdfe1, 0xdfb1, 0xdfd2, 0xdfdf, 0xdfab, 0xb5db, 0xdfb9, 0xdfb8,
-  0xb8af, 0xdfbc, 0xdfbe, 0xdfcd, 0xdfde, 0xb8b2, 0xb8b3, 0xdfb0,
-  0xb8ab, 0xdfb4, 0xdfda, 0xb8b4, 0xb8ac, 0xb8ae, 0xb8b5, 0xdfe0,
-  0xdfd3, 0xdfce, 0xdfbb, 0xdfba, 0xb8aa, 0xdfac, 0xb8a7, 0xdfc4,
-  0xdfad, 0xdfc2, 0xdfb7, 0xdfdb, 0xb8a6, 0xdfb3, 0xdfaf, 0xdfd5,
-  0xdfae, 0xbb60, 0xe3d3, 0xe3c2, 0xe3ac, 0xe3ca, 0xbb58, 0xe3bb,
-  0xe3c5, 0xbb5b, 0xe3be, 0xbb59, 0xe3af, 0xe3cd, 0xe3ae, 0xe3c1,
-  0xe3ad, 0xe3bf, 0xe3c8, 0xe3c6, 0xe3ba, 0xe3b5, 0xe3b3, 0xe3b4,
-  0xe3c7, 0xe3d2, 0xe3bc, 0xbb5a, 0xe3b7, 0xe3cb, 0xbb5d, 0xe3b6,
-  0xe3b0, 0xe3c0, 0xbb61, 0xbb55, 0xbb5e, 0xe3b8, 0xe3b2, 0xbb57,
-  0xdfd4, 0xbb56, 0xe3c3, 0xbb54, 0xbb63, 0xbb5c, 0xe3c4, 0xe3b9,
-  0xe3b1, 0xe3cc, 0xe3bd, 0xbb62, 0xe3d0, 0xbb5f, 0xe3cf, 0xe3c9,
-  0xe3ce, 0xe3d1, 0xe773, 0xe774, 0xe767, 0xe766, 0xe762, 0xbdb4,
-  0xbdac, 0xe776, 0xe775, 0xdfa9, 0xe75f, 0xe763, 0xe75d, 0xe770,
-  0xe761, 0xe777, 0xe75a, 0xe758, 0xe764, 0xe76e, 0xe769, 0xbdb6,
-  0xe74f, 0xe76d, 0xbdb7, 0xdfbd, 0xe75b, 0xe752, 0xe755, 0xe77b,
-  0xe75c, 0xe753, 0xe751, 0xe74e, 0xbdb0, 0xe765, 0xbdaf, 0xbdb3,
-  0xe760, 0xe768, 0xbda9, 0xe778, 0xe77c, 0xbdab, 0xe757, 0xe76b,
-  0xe76f, 0xe754, 0xe779, 0xbdb2, 0xbdb1, 0xe74c, 0xbdb5, 0xe772,
-  0xe756, 0xe76a, 0xe750, 0xe75e, 0xe759, 0xbdad, 0xbdae, 0xe76c,
-  0xe77d, 0xe77a, 0xe771, 0xe74d, 0xbdaa, 0xeb49, 0xeb40, 0xeb43,
-  0xbfbb, 0xeb45, 0xeaf9, 0xeb41, 0xeb47, 0xbfb8, 0xbfbc, 0xbfb6,
-  0xeafb, 0xeb4c, 0xeb46, 0xeafc, 0xeb55, 0xeb4f, 0xeaf8, 0xee46,
-  0xeafe, 0xbfb7, 0xeb4a, 0xeb54, 0xbfbf, 0xeb51, 0xeafd, 0xeb44,
-  0xeb48, 0xeb42, 0xeb56, 0xeb53, 0xeb50, 0xbfb9, 0xbfba, 0xbfbe,
-  0xeafa, 0xeb57, 0xbfbd, 0xeb4d, 0xeb4b, 0xeb4e, 0xee53, 0xee40,
-  0xee45, 0xee52, 0xee44, 0xedfb, 0xee41, 0xc1a2, 0xedf4, 0xee4d,
-  0xee4f, 0xedf3, 0xc1a1, 0xee51, 0xee49, 0xc1a8, 0xee50, 0xee42,
-  0xc1aa, 0xedf9, 0xeb52, 0xee4a, 0xee47, 0xedf5, 0xee55, 0xc1a4,
-  0xc1a5, 0xedf7, 0xee48, 0xee54, 0xee4b, 0xedfd, 0xc1a7, 0xc1a3,
-  0xee4c, 0xedfe, 0xee56, 0xedf8, 0xee43, 0xee4e, 0xedfa, 0xedfc,
-  0xc2cb, 0xedf6, 0xc1a9, 0xc2c4, 0xc17e, 0xc1a6, 0xc2c8, 0xf0b3,
-  0xf0a9, 0xf0a4, 0xf0aa, 0xf0b4, 0xf0b8, 0xf0b7, 0xc2ca, 0xc2c9,
-  0xf0ab, 0xf0b9, 0xf0ae, 0xf0a6, 0xf0a8, 0xf0a7, 0xf0ad, 0xf0b2,
-  0xf0a5, 0xf0ac, 0xf0b1, 0xc2c7, 0xf0af, 0xc2c5, 0xf0b0, 0xc2c3,
-  0xc2c6, 0xf2d5, 0xf0b5, 0xc3c2, 0xf2cd, 0xf2d1, 0xf2c9, 0xf2cc,
-  0xf2d4, 0xc3c0, 0xf2d9, 0xf2d2, 0xf2ca, 0xf2da, 0xf2d3, 0xc3c3,
-  0xc3c4, 0xf2d7, 0xf2cb, 0xc3bf, 0xc3c1, 0xf2c6, 0xf2ce, 0xf2c8,
-  0xf2d8, 0xf2d6, 0xf2c7, 0xf2cf, 0xf4be, 0xc3c5, 0xf2d0, 0xc4a7,
-  0xc4a9, 0xc4a6, 0xf4c3, 0xf4bb, 0xf4b9, 0xf4bd, 0xf4ba, 0xf4bf,
-  0xf4c1, 0xc4aa, 0xc4ac, 0xf4c0, 0xc4ad, 0xc4ab, 0xf4c2, 0xc4a8,
-  0xc4f4, 0xf5f1, 0xf5f7, 0xc4f6, 0xf4bc, 0xf5f6, 0xf5fd, 0xf5f4,
-  0xf5fb, 0xf5fa, 0xf4b8, 0xf5f5, 0xf0b6, 0xf5fe, 0xf5f3, 0xf5f8,
-  0xf5fc, 0xf5f2, 0xf74a, 0xc4f5, 0xf5f9, 0xf7f4, 0xf74b, 0xf749,
-  0xf747, 0xf748, 0xf74c, 0xc5d9, 0xf7f2, 0xf7f0, 0xf7f5, 0xf7f3,
-  0xf7f6, 0xc5da, 0xf7f1, 0xf8bc, 0xf945, 0xf946, 0xf947, 0xf9c7,
-  0xf9bd, 0xca4f, 0xaaea, 0xad68, 0xd3b8, 0xd3b7, 0xb040, 0xb342,
-  0xd77c, 0xd77b, 0xb5ea, 0xb8b8, 0xb8b7, 0xb8b9, 0xe3d4, 0xe77e,
-  0xeb58, 0xeb5a, 0xeb59, 0xc1ab, 0xee57, 0xf0ba, 0xf9a5, 0xa6e4,
-  0xcdc9, 0xcdca, 0xcdc8, 0xcdc7, 0xaaeb, 0xd0a9, 0xd0a7, 0xd0a6,
-  0xad69, 0xad6b, 0xad6a, 0xd0a8, 0xd3c4, 0xd3c1, 0xd3bf, 0xb041,
-  0xd3c2, 0xb046, 0xd3bc, 0xd3cb, 0xd3cd, 0xd3bd, 0xb043, 0xd3ce,
-  0xd3c9, 0xd3bb, 0xd3c0, 0xd3ca, 0xd3c6, 0xd3c3, 0xb048, 0xd3cc,
-  0xd3be, 0xd3c7, 0xd3b9, 0xb047, 0xb044, 0xd3c5, 0xd3c8, 0xd3ba,
-  0xb045, 0xb042, 0xb34c, 0xd7a5, 0xb34b, 0xd7a8, 0xd7ab, 0xb348,
-  0xb346, 0xd77e, 0xd7a9, 0xd7a7, 0xd7a4, 0xd7ac, 0xd7ad, 0xd7af,
-  0xd7b0, 0xd77d, 0xb345, 0xd7a2, 0xd7a1, 0xd7ae, 0xb347, 0xd7a3,
-  0xb349, 0xb344, 0xd7a6, 0xb34d, 0xb34a, 0xd7aa, 0xb5f1, 0xdbbf,
-  0xdbb4, 0xb5ee, 0xdfe7, 0xdbbd, 0xdbb1, 0xb5ec, 0xdbb6, 0xb5ef,
-  0xdbba, 0xdbb8, 0xb5f2, 0xb5eb, 0xdbb2, 0xdbb5, 0xb5f0, 0xdbb3,
-  0xdbbe, 0xdbbc, 0xdbb7, 0xdbb9, 0xdbbb, 0xb5ed, 0xdfe8, 0xdfee,
-  0xdfe4, 0xdfea, 0xb8ba, 0xdfe6, 0xb8c0, 0xb8bf, 0xb8be, 0xdfed,
-  0xb8c1, 0xb8c2, 0xdfe3, 0xdff0, 0xb8c3, 0xb8bd, 0xb8bc, 0xdfec,
-  0xb8c4, 0xdfe2, 0xdfe5, 0xdfef, 0xdfeb, 0xe3f4, 0xe3e9, 0xb8bb,
-  0xbb6a, 0xe3dd, 0xe3f2, 0xe3de, 0xbb65, 0xe3db, 0xe3e4, 0xe3dc,
-  0xbb67, 0xe3d6, 0xe3f1, 0xbb68, 0xe3ee, 0xe3ef, 0xe3d7, 0xbb6d,
-  0xe3e6, 0xe3e0, 0xe3e7, 0xe3da, 0xe3f3, 0xe3eb, 0xe3e5, 0xe3d5,
-  0xbb69, 0xe3ec, 0xbb6c, 0xe3f0, 0xe3ea, 0xbb66, 0xe3e8, 0xe3e2,
-  0xbb64, 0xe3d9, 0xe3e1, 0xe3ed, 0xe3df, 0xe3e3, 0xbdc1, 0xdfe9,
-  0xe7b2, 0xe7bb, 0xe7b1, 0xe7ad, 0xe7aa, 0xbdc2, 0xe7a8, 0xbb6b,
-  0xe7a1, 0xbdc0, 0xe7a7, 0xbdbf, 0xe7ac, 0xe7a9, 0xe7b9, 0xe7b4,
-  0xe7ae, 0xe7b3, 0xbdbb, 0xe7ab, 0xe7be, 0xe7a2, 0xe7a3, 0xe7ba,
-  0xbdbc, 0xe7bf, 0xbdbe, 0xe7c0, 0xe7b0, 0xe3d8, 0xe7b6, 0xe7af,
-  0xe7b8, 0xe7b5, 0xe7a6, 0xbdb9, 0xe7bd, 0xbdba, 0xe7a4, 0xbdbd,
-  0xeb64, 0xe7b7, 0xe7bc, 0xeb61, 0xbdb8, 0xbfc0, 0xeb6b, 0xeb67,
-  0xeb65, 0xeb60, 0xeb6f, 0xbfc4, 0xeb5c, 0xeb68, 0xeb69, 0xeb5f,
-  0xeb5e, 0xeb6c, 0xeb62, 0xeb5d, 0xeb63, 0xeb6e, 0xeb5b, 0xeb6d,
-  0xeb6a, 0xbfc2, 0xbfc1, 0xbfc3, 0xeb66, 0xf0cb, 0xee59, 0xc1b1,
-  0xee5d, 0xee5a, 0xee61, 0xee67, 0xee5c, 0xee70, 0xc1ae, 0xee6a,
-  0xee5f, 0xee6b, 0xee66, 0xee6d, 0xee5e, 0xc1b3, 0xc1b2, 0xee60,
-  0xee6e, 0xee58, 0xee6c, 0xc1ac, 0xee64, 0xee63, 0xee68, 0xee5b,
-  0xc1b0, 0xc1b4, 0xee62, 0xee69, 0xc1b5, 0xee65, 0xc1ad, 0xc1af,
-  0xf0c7, 0xf0c5, 0xf0cc, 0xf0c9, 0xf0cd, 0xf0be, 0xf0c6, 0xf0d1,
-  0xee6f, 0xf0c2, 0xc2cf, 0xe7a5, 0xf0bd, 0xf0ca, 0xf0c4, 0xf0c1,
-  0xf0bc, 0xf0bb, 0xf0d0, 0xf0c0, 0xf0bf, 0xc2cd, 0xf0c8, 0xc2cc,
-  0xc2ce, 0xf0c3, 0xf0cf, 0xf2de, 0xf2df, 0xc3c9, 0xf2dc, 0xc3c6,
-  0xf2e4, 0xc3ca, 0xf2e6, 0xf2db, 0xf0ce, 0xf2e8, 0xf2dd, 0xc3c7,
-  0xf2e3, 0xf2e5, 0xf2e0, 0xf2e7, 0xf2e2, 0xf2e1, 0xc3c8, 0xf4c5,
-  0xf4c6, 0xf4c8, 0xc4ae, 0xc4af, 0xf4c9, 0xf4c7, 0xf4c4, 0xf642,
-  0xf645, 0xf641, 0xc4fa, 0xf643, 0xc4f9, 0xc4f8, 0xc4f7, 0xf644,
-  0xf751, 0xf74f, 0xf74e, 0xf640, 0xf750, 0xf646, 0xf74d, 0xf7f9,
-  0xf7d7, 0xf7f7, 0xc5db, 0xf7f8, 0xf7fa, 0xf8bf, 0xc5fa, 0xf8be,
-  0xf8bd, 0xc5fb, 0xc65a, 0xf96e, 0xf9a7, 0xf9a6, 0xf9a8, 0xa6e5,
-  0xd0aa, 0xd3cf, 0xd3d0, 0xdbc0, 0xf647, 0xf8c0, 0xa6e6, 0xad6c,
-  0xd0ab, 0xd7b1, 0xb34e, 0xdbc2, 0xdbc1, 0xb5f3, 0xb8c5, 0xe7c1,
-  0xbdc3, 0xbdc4, 0xbfc5, 0xc5fc, 0xa6e7, 0xd0ac, 0xaaed, 0xd0ae,
-  0xd0ad, 0xad6d, 0xd3d1, 0xd3d8, 0xb049, 0xd3d6, 0xd3d4, 0xd3db,
-  0xd3d2, 0xd3d3, 0xb04a, 0xb04e, 0xd3dc, 0xb04d, 0xd3da, 0xd3d7,
-  0xd3d5, 0xb04b, 0xb04c, 0xd3d9, 0xb350, 0xd7b2, 0xb355, 0xd7c2,
-  0xb354, 0xd7c4, 0xd7b8, 0xb352, 0xd7c3, 0xd7b3, 0xb353, 0xd7bf,
-  0xd7bb, 0xd7bd, 0xd7b7, 0xd7be, 0xb34f, 0xd7ba, 0xd7b9, 0xd7b5,
-  0xd7c0, 0xd7bc, 0xd7b4, 0xd7b6, 0xb351, 0xd7c1, 0xb5f6, 0xdbcd,
-  0xdbc9, 0xdbcb, 0xdbc6, 0xdbc5, 0xdbc3, 0xdbca, 0xdbcc, 0xdbc8,
-  0xdbc7, 0xb5f4, 0xb5f5, 0xdbcf, 0xb8cd, 0xdff2, 0xdff8, 0xdff3,
-  0xdff4, 0xdff9, 0xb8cf, 0xb8c7, 0xb8ce, 0xdff1, 0xdbc4, 0xb8ca,
-  0xb8c8, 0xdff7, 0xdff6, 0xb8c9, 0xb8cb, 0xdff5, 0xb8c6, 0xb8cc,
-  0xe3f6, 0xbb74, 0xe442, 0xe441, 0xe3fb, 0xbb76, 0xe440, 0xe3f7,
-  0xe3f8, 0xbb6e, 0xbb70, 0xe3fd, 0xe3f5, 0xbb72, 0xbb71, 0xe3f9,
-  0xe3fe, 0xe3fc, 0xbb73, 0xe3fa, 0xdbce, 0xbb6f, 0xe7c2, 0xe7c9,
-  0xbdc6, 0xe7cd, 0xbdca, 0xe7c5, 0xe7c3, 0xe7cc, 0xbdc5, 0xe7cb,
-  0xbdc7, 0xbdc8, 0xe7c4, 0xbdc9, 0xe7ca, 0xe7c6, 0xe7c7, 0xe7c8,
-  0xbb75, 0xeb70, 0xeb7c, 0xbfca, 0xeb77, 0xeb79, 0xbfc8, 0xeb71,
-  0xeb75, 0xeb78, 0xbfc6, 0xbfc9, 0xeb7b, 0xeb73, 0xeb74, 0xeb7a,
-  0xeb72, 0xeb76, 0xbfc7, 0xee72, 0xee71, 0xc1b7, 0xee77, 0xc1b9,
-  0xc1b6, 0xee73, 0xc1ba, 0xee74, 0xee75, 0xee78, 0xc1b8, 0xf0d6,
-  0xf0d9, 0xf0d3, 0xf0d5, 0xf0d4, 0xf0d7, 0xf0d8, 0xee76, 0xf0d2,
-  0xc3cd, 0xf2ec, 0xf2ef, 0xf2f1, 0xf2ea, 0xf2eb, 0xf2ee, 0xf2f0,
-  0xc3ce, 0xc3cc, 0xc3cb, 0xf2ed, 0xf2e9, 0xf4ca, 0xc4b0, 0xf4cb,
-  0xf649, 0xc4fb, 0xf64b, 0xc4fc, 0xf648, 0xf64a, 0xc5a8, 0xf752,
-  0xc5a7, 0xf7fd, 0xf7fc, 0xf7fb, 0xf948, 0xf949, 0xf94b, 0xf94a,
-  0xca50, 0xa6e8, 0xad6e, 0xd7c5, 0xb5f7, 0xdffa, 0xc2d0, 0xf2f2,
-  0xa8a3, 0xb357, 0xb356, 0xdbd0, 0xb5f8, 0xdbd2, 0xdbd1, 0xdffb,
-  0xb8d0, 0xe443, 0xe446, 0xe445, 0xe444, 0xe7ce, 0xe7d0, 0xe7cf,
-  0xbfcc, 0xbfcb, 0xc1bb, 0xee79, 0xee7b, 0xee7a, 0xc2d1, 0xf2f4,
-  0xf2f3, 0xf4cc, 0xc4b1, 0xc4fd, 0xf754, 0xf753, 0xc65b, 0xa8a4,
-  0xd0af, 0xad6f, 0xd7c8, 0xd7c6, 0xd7c7, 0xdbd4, 0xdbd5, 0xe043,
-  0xdbd3, 0xdffc, 0xe041, 0xe040, 0xe042, 0xb8d1, 0xdffe, 0xdffd,
-  0xe044, 0xe449, 0xe447, 0xe448, 0xe7d3, 0xe7d1, 0xe7d2, 0xeb7d,
-  0xee7c, 0xee7d, 0xc2d2, 0xf2f5, 0xf4cd, 0xc4b2, 0xf64c, 0xf755,
-  0xc5a9, 0xf7fe, 0xf94c, 0xa8a5, 0xad71, 0xad72, 0xd0b0, 0xd0b1,
-  0xad70, 0xb054, 0xb052, 0xb051, 0xb058, 0xb050, 0xb059, 0xd3dd,
-  0xb056, 0xb053, 0xb057, 0xb055, 0xb04f, 0xb35f, 0xb359, 0xd7cc,
-  0xb35e, 0xb360, 0xb35a, 0xb35b, 0xd7ca, 0xb358, 0xd7cb, 0xb35d,
-  0xd7c9, 0xb35c, 0xb644, 0xb646, 0xdbd8, 0xb645, 0xb5f9, 0xb5fd,
-  0xb8e4, 0xe049, 0xdbda, 0xb5fe, 0xdbdd, 0xdbde, 0xb643, 0xdbe0,
-  0xdbe2, 0xdbe3, 0xdbd7, 0xdbd6, 0xdbe4, 0xb642, 0xdbe1, 0xdbdf,
-  0xb640, 0xb5fb, 0xb647, 0xdbdb, 0xdbdc, 0xdbd9, 0xb641, 0xb5fc,
-  0xb5fa, 0xe048, 0xb8df, 0xb8da, 0xb8d5, 0xb8e5, 0xb8d6, 0xb8d2,
-  0xb8e1, 0xb8de, 0xb8e0, 0xb8d7, 0xb8dc, 0xb8d3, 0xb8d4, 0xe050,
-  0xe04d, 0xe045, 0xe04a, 0xb8e2, 0xe051, 0xb8e3, 0xb8d9, 0xe047,
-  0xe04f, 0xe04b, 0xe04e, 0xe04c, 0xb8dd, 0xe046, 0xb8d8, 0xe44c,
-  0xbb78, 0xbb7b, 0xe44e, 0xbba5, 0xe44d, 0xbb7d, 0xbdcf, 0xe44f,
-  0xbba4, 0xe44b, 0xbba6, 0xbb79, 0xb8db, 0xbb7c, 0xbb7a, 0xbb7e,
-  0xbba2, 0xbb77, 0xbba7, 0xbba3, 0xbba1, 0xe44a, 0xbdd6, 0xbdd2,
-  0xbdd9, 0xe7d6, 0xbdda, 0xe7e2, 0xe7db, 0xbdcb, 0xe7e3, 0xe7dd,
-  0xbdd5, 0xe7de, 0xbdd4, 0xe7e1, 0xbdce, 0xe7df, 0xe7d5, 0xbdcd,
-  0xebaa, 0xbdd3, 0xbdd0, 0xbdd8, 0xe7d4, 0xe7d8, 0xbdcc, 0xe7d7,
-  0xe7d9, 0xe7da, 0xbdd7, 0xe7dc, 0xe7e0, 0xe7e4, 0xbddb, 0xbfd2,
-  0xeba5, 0xebab, 0xeba8, 0xeb7e, 0xebac, 0xeba1, 0xeba7, 0xbfcd,
-  0xbfd3, 0xebad, 0xbfcf, 0xbfd9, 0xbfd4, 0xebaf, 0xeba9, 0xbfd0,
-  0xeba2, 0xbfda, 0xeba3, 0xeba4, 0xbfdb, 0xbfd8, 0xbdd1, 0xbfce,
-  0xebb0, 0xbfdc, 0xbfd5, 0xebae, 0xbfd1, 0xbfd6, 0xbfd7, 0xc1c3,
-  0xeea4, 0xeead, 0xeeaa, 0xeeac, 0xc1c0, 0xeea5, 0xeeab, 0xc1bc,
-  0xeea7, 0xc1c4, 0xeea3, 0xeea8, 0xeeaf, 0xeba6, 0xeea9, 0xeea2,
-  0xc1bd, 0xeea1, 0xc1be, 0xeeb0, 0xc1bf, 0xeeae, 0xc1c2, 0xee7e,
-  0xc1c1, 0xeea6, 0xf0dc, 0xf0ea, 0xf0e5, 0xf0e7, 0xf0db, 0xc2d3,
-  0xf0da, 0xc2d6, 0xc2d5, 0xf0e9, 0xf0e1, 0xf0de, 0xf0e4, 0xf0dd,
-  0xf0df, 0xf0e8, 0xf0e6, 0xc2d4, 0xf0ed, 0xf0eb, 0xf0e2, 0xf0ec,
-  0xf0e3, 0xf2f9, 0xc3cf, 0xf341, 0xf64f, 0xc3d6, 0xf0e0, 0xf2f7,
-  0xc3d2, 0xf2f8, 0xf2fd, 0xc3d4, 0xc3d5, 0xf2f6, 0xf340, 0xf342,
-  0xf2fa, 0xf2fc, 0xf2fe, 0xf2fb, 0xf343, 0xc3d1, 0xc3d7, 0xc3d3,
-  0xc3d0, 0xf4d0, 0xc4b7, 0xf4ce, 0xf4d2, 0xf4d3, 0xc4b5, 0xf4d4,
-  0xf4d1, 0xf4cf, 0xc4b8, 0xc4b4, 0xf4d5, 0xc4b6, 0xc4b3, 0xc4fe,
-  0xc540, 0xf64e, 0xf64d, 0xf650, 0xf651, 0xc541, 0xf756, 0xf75b,
-  0xc5aa, 0xf758, 0xf757, 0xf75a, 0xf759, 0xf843, 0xc5dc, 0xf842,
-  0xf840, 0xf841, 0xc5fe, 0xc5fd, 0xf8c1, 0xf8c2, 0xc640, 0xf94d,
-  0xf94e, 0xc667, 0xc66d, 0xf9a9, 0xf9c8, 0xa8a6, 0xd7cd, 0xd7ce,
-  0xe052, 0xe450, 0xe7e5, 0xc1c6, 0xc1c5, 0xf0ee, 0xf344, 0xf844,
-  0xa8a7, 0xd3de, 0xb05a, 0xb361, 0xe054, 0xe053, 0xbddc, 0xe7e6,
-  0xbddd, 0xeeb1, 0xc2d7, 0xc676, 0xa8a8, 0xcdcb, 0xd3df, 0xb362,
-  0xd7cf, 0xd7d0, 0xdbe5, 0xb648, 0xb8e6, 0xe056, 0xe055, 0xe057,
-  0xe451, 0xe452, 0xbba8, 0xbfdd, 0xbdde, 0xbfde, 0xeeb5, 0xeeb2,
-  0xeeb4, 0xeeb3, 0xc1c7, 0xf0ef, 0xf346, 0xf345, 0xcba4, 0xb05c,
-  0xb05b, 0xd3e0, 0xd7d1, 0xdbe7, 0xdbe6, 0xb649, 0xe059, 0xe05a,
-  0xe058, 0xb8e8, 0xb8e7, 0xbbaa, 0xbba9, 0xe7e7, 0xebb3, 0xebb1,
-  0xebb2, 0xbfdf, 0xeeb7, 0xeeb6, 0xf0f2, 0xf0f1, 0xf0f0, 0xf347,
-  0xf9aa, 0xa8a9, 0xad73, 0xad74, 0xb05d, 0xb05e, 0xd3e2, 0xd3e1,
-  0xd7d2, 0xb368, 0xb366, 0xb363, 0xb367, 0xb365, 0xb364, 0xb64a,
-  0xdbea, 0xb8ed, 0xb64c, 0xb651, 0xdbec, 0xb653, 0xb652, 0xb655,
-  0xdbeb, 0xdbe8, 0xb64f, 0xb64b, 0xb64d, 0xdbe9, 0xb654, 0xb650,
-  0xb64e, 0xb8ef, 0xb8ee, 0xb8ec, 0xb8f0, 0xb8ea, 0xb8eb, 0xb8e9,
-  0xe05b, 0xe454, 0xbbac, 0xbbad, 0xbbab, 0xe453, 0xe455, 0xe7ea,
-  0xe7ec, 0xbde7, 0xe7ed, 0xbde0, 0xe7e9, 0xbddf, 0xbde9, 0xbde5,
-  0xbde6, 0xbde2, 0xe7e8, 0xbde1, 0xe7ee, 0xe7eb, 0xbde8, 0xbde3,
-  0xbde4, 0xebb5, 0xebb7, 0xebb6, 0xebb8, 0xbfe0, 0xebb4, 0xc1cb,
-  0xeeb8, 0xc1c8, 0xc1cc, 0xc1ca, 0xc1c9, 0xf0f3, 0xf0f6, 0xf0f5,
-  0xf0f4, 0xc2d8, 0xf348, 0xf349, 0xc3d8, 0xf34a, 0xc3d9, 0xc4ba,
-  0xc4b9, 0xf652, 0xc542, 0xf653, 0xf75c, 0xc5ab, 0xc5ac, 0xf845,
-  0xc642, 0xa8aa, 0xb36a, 0xb369, 0xe05c, 0xe05d, 0xbbae, 0xebb9,
-  0xbdea, 0xebba, 0xeeb9, 0xa8ab, 0xd0b2, 0xad76, 0xad75, 0xd3e3,
-  0xb05f, 0xd3e4, 0xd7d5, 0xd7d4, 0xd7d3, 0xdbee, 0xb658, 0xdbed,
-  0xb657, 0xdbef, 0xb656, 0xe05f, 0xe062, 0xe060, 0xe061, 0xe065,
-  0xe05e, 0xe066, 0xe063, 0xe064, 0xbbb0, 0xe456, 0xbbaf, 0xe7f2,
-  0xe7f0, 0xbdeb, 0xe7ef, 0xe7f1, 0xbdec, 0xebbb, 0xebbc, 0xc1cd,
-  0xf34c, 0xf34e, 0xf34b, 0xf34d, 0xf4d6, 0xf654, 0xf96f, 0xa8ac,
-  0xad77, 0xd3e5, 0xd3e7, 0xd3e6, 0xd7d8, 0xb36c, 0xd7d6, 0xb36b,
-  0xd7d9, 0xd7da, 0xd7d7, 0xdbfb, 0xb660, 0xdbf3, 0xdbf9, 0xb65b,
-  0xb65e, 0xdbf2, 0xb659, 0xdbf6, 0xe06c, 0xb65d, 0xdbf1, 0xdbf7,
-  0xdbf4, 0xdbfa, 0xdbf0, 0xdbf8, 0xb65c, 0xb65f, 0xdbf5, 0xb65a,
-  0xb8f2, 0xe068, 0xb8f1, 0xe06f, 0xe06e, 0xb8f8, 0xb8f9, 0xe070,
-  0xb8f3, 0xe06d, 0xb8f7, 0xe072, 0xe069, 0xe06b, 0xb8f4, 0xe067,
-  0xe06a, 0xe071, 0xb8f5, 0xe073, 0xb8f6, 0xbbb1, 0xe45b, 0xe461,
-  0xe459, 0xe462, 0xe458, 0xe45d, 0xe463, 0xe460, 0xe45f, 0xe45e,
-  0xe457, 0xe45c, 0xe45a, 0xbdf1, 0xbdee, 0xe7fb, 0xe841, 0xe843,
-  0xe840, 0xe7f8, 0xe7fa, 0xe845, 0xe842, 0xe7fc, 0xe846, 0xe7f9,
-  0xe844, 0xbdef, 0xbdf5, 0xbdf3, 0xe7f3, 0xbdf4, 0xbdf0, 0xe7f4,
-  0xe7f6, 0xe7f5, 0xe7fd, 0xe7fe, 0xbdf2, 0xbded, 0xe7f7, 0xebc6,
-  0xbfe2, 0xebbd, 0xbfe3, 0xbfe6, 0xebc2, 0xebbf, 0xbfe5, 0xebc3,
-  0xebc4, 0xebbe, 0xebc7, 0xebc0, 0xebc5, 0xbfe4, 0xbfe1, 0xebc1,
-  0xeebf, 0xc1d0, 0xc1ce, 0xc1d1, 0xc1cf, 0xeebe, 0xeebb, 0xeeba,
-  0xeebd, 0xeebc, 0xf145, 0xc2de, 0xf0fb, 0xf0fa, 0xc2d9, 0xf141,
-  0xf140, 0xf0f7, 0xf143, 0xf0fc, 0xc2dd, 0xf0f9, 0xf142, 0xf0f8,
-  0xc2da, 0xc2dc, 0xf0fd, 0xc2db, 0xf0fe, 0xf144, 0xf352, 0xc3de,
-  0xf34f, 0xf353, 0xc3db, 0xf351, 0xc3e0, 0xc3dd, 0xf350, 0xc3df,
-  0xf354, 0xc3da, 0xc4bc, 0xc4be, 0xf4d9, 0xc4bd, 0xf4d7, 0xc3dc,
-  0xf4d8, 0xc4bb, 0xc543, 0xc545, 0xf656, 0xc544, 0xf655, 0xf761,
-  0xc5ad, 0xf760, 0xc5ae, 0xf75e, 0xf75d, 0xf762, 0xf763, 0xf846,
-  0xf75f, 0xf8c6, 0xf8c3, 0xf8c4, 0xf8c5, 0xc65c, 0xf951, 0xf950,
-  0xf94f, 0xf970, 0xf9be, 0xf9ab, 0xc66e, 0xa8ad, 0xb060, 0xb8fa,
-  0xbdf6, 0xebc8, 0xc2df, 0xf355, 0xf9ac, 0xa8ae, 0xaaee, 0xad79,
-  0xad78, 0xb063, 0xd3e8, 0xb061, 0xd3e9, 0xb062, 0xd7df, 0xd7db,
-  0xb36d, 0xd7de, 0xd7dd, 0xd7dc, 0xb36e, 0xd7e0, 0xd7e1, 0xdc43,
-  0xdc41, 0xdc45, 0xdc46, 0xdc4c, 0xdc48, 0xdc4a, 0xdc42, 0xdbfc,
-  0xdc49, 0xdc4b, 0xdc44, 0xdc47, 0xdbfd, 0xb662, 0xdc40, 0xdbfe,
-  0xb661, 0xb663, 0xb8fd, 0xe075, 0xe077, 0xe076, 0xe07b, 0xb8fb,
-  0xe078, 0xe074, 0xe079, 0xe07a, 0xb8fc, 0xb8fe, 0xe07c, 0xe467,
-  0xe466, 0xe464, 0xe465, 0xbbb3, 0xbbb5, 0xbbb2, 0xbbb4, 0xe84d,
-  0xe84e, 0xe849, 0xe84a, 0xbdf8, 0xbdfd, 0xbdf7, 0xbdfe, 0xbdf9,
-  0xe84b, 0xe84c, 0xe848, 0xbe40, 0xbdfb, 0xbdfa, 0xbdfc, 0xe847,
-  0xebca, 0xbfe8, 0xebcc, 0xbfea, 0xebcf, 0xebcb, 0xebc9, 0xebce,
-  0xbfe9, 0xebcd, 0xbfe7, 0xc1d3, 0xc1d6, 0xeec1, 0xc1d4, 0xeec0,
-  0xc1d2, 0xc1d5, 0xf146, 0xf147, 0xf148, 0xc2e0, 0xf149, 0xc2e1,
-  0xc3e2, 0xf358, 0xf359, 0xf357, 0xf356, 0xf35a, 0xc3e1, 0xf4dd,
-  0xf4db, 0xf4dc, 0xf4de, 0xf4da, 0xf4df, 0xf658, 0xf659, 0xf657,
-  0xc546, 0xf764, 0xc5af, 0xf765, 0xf848, 0xf847, 0xa8af, 0xb664,
-  0xb940, 0xbbb6, 0xbfec, 0xbfeb, 0xc3e3, 0xc47c, 0xc547, 0xa8b0,
-  0xb064, 0xb941, 0xf35b, 0xcba6, 0xa8b1, 0xa8b4, 0xa8b3, 0xa8b2,
-  0xcba5, 0xcdcd, 0xcdcf, 0xaaef, 0xaaf1, 0xcdcc, 0xcdce, 0xaaf0,
-  0xcdd1, 0xcdd0, 0xcdd2, 0xd0b6, 0xd0b4, 0xad7c, 0xd0b3, 0xada3,
-  0xad7e, 0xad7b, 0xada4, 0xad7d, 0xada2, 0xada1, 0xd0b5, 0xad7a,
-  0xb06a, 0xd3eb, 0xd3f1, 0xb067, 0xb06e, 0xb069, 0xd3ee, 0xd3f0,
-  0xb06c, 0xd3ea, 0xd3ed, 0xb068, 0xb065, 0xd3ec, 0xb06b, 0xd3ef,
-  0xb06d, 0xb066, 0xd7e3, 0xd7e6, 0xb370, 0xb37a, 0xb376, 0xd7e4,
-  0xb37e, 0xb377, 0xb37c, 0xb372, 0xb36f, 0xb371, 0xb37d, 0xd7e5,
-  0xb375, 0xb378, 0xb374, 0xb379, 0xd7e7, 0xb37b, 0xb373, 0xd7e2,
-  0xdc4d, 0xb665, 0xdc4f, 0xb667, 0xb669, 0xdc4e, 0xb666, 0xb66a,
-  0xb668, 0xb947, 0xe0a3, 0xb94f, 0xe07e, 0xb950, 0xb945, 0xe0a1,
-  0xb94a, 0xe0a2, 0xb943, 0xb942, 0xb94d, 0xb94c, 0xb94b, 0xb949,
-  0xb94e, 0xe07d, 0xb944, 0xb946, 0xb948, 0xbbb8, 0xbbbb, 0xbbbf,
-  0xbbb9, 0xbbbe, 0xbbbc, 0xbbb7, 0xbbbd, 0xbbba, 0xe852, 0xbe43,
-  0xbe41, 0xe853, 0xbe44, 0xbe42, 0xe851, 0xe850, 0xbff0, 0xe84f,
-  0xbfee, 0xbfed, 0xebd0, 0xbe45, 0xbfef, 0xebd1, 0xbff2, 0xebd2,
-  0xbff1, 0xc1d8, 0xeec3, 0xc1d7, 0xc1dc, 0xc1da, 0xc1db, 0xc2e3,
-  0xc1d9, 0xeec2, 0xebd3, 0xc2e2, 0xc2e4, 0xc3e4, 0xc3e5, 0xf4e0,
-  0xc5de, 0xc5dd, 0xa8b6, 0xca55, 0xb06f, 0xca52, 0xca53, 0xca51,
-  0xca54, 0xcbaa, 0xcba7, 0xcbac, 0xcba8, 0xa8b7, 0xa8ba, 0xcba9,
-  0xa8b9, 0xcbab, 0xa8b8, 0xcdd5, 0xcdd7, 0xaaf4, 0xcdd3, 0xcdd6,
-  0xcdd4, 0xaaf2, 0xaaf5, 0xaaf3, 0xd0b8, 0xd0bc, 0xd0b9, 0xada7,
-  0xada8, 0xd0bb, 0xd0bd, 0xd0bf, 0xada5, 0xd0be, 0xada6, 0xd7ee,
-  0xd0ba, 0xd3f2, 0xd3fb, 0xd3f9, 0xd3f4, 0xd3f5, 0xd3fa, 0xd3fc,
-  0xb071, 0xd3f7, 0xd3f3, 0xb070, 0xb072, 0xd3f6, 0xd3fd, 0xd3f8,
-  0xb3a1, 0xd7f1, 0xd7e9, 0xd7ef, 0xd7f0, 0xb3a2, 0xd7e8, 0xd7ea,
-  0xd0b7, 0xd7ec, 0xd7ed, 0xd7eb, 0xb66c, 0xdc56, 0xebd4, 0xdc57,
-  0xdc54, 0xb3a3, 0xb66e, 0xdc53, 0xdc59, 0xdc58, 0xb66b, 0xdc5c,
-  0xdc52, 0xdc5b, 0xdc50, 0xdc5a, 0xdc55, 0xb66d, 0xe0aa, 0xe0a5,
-  0xe0ab, 0xe0a6, 0xe0a4, 0xe0a7, 0xb951, 0xe0a9, 0xe0a8, 0xb952,
-  0xbbc1, 0xbbc0, 0xe46e, 0xe471, 0xe469, 0xe46d, 0xbbc2, 0xe46c,
-  0xe46a, 0xe470, 0xe46b, 0xe468, 0xe46f, 0xe859, 0xbe48, 0xf14a,
-  0xe856, 0xe857, 0xe855, 0xdc51, 0xbe47, 0xe85a, 0xe854, 0xbe46,
-  0xbe49, 0xe858, 0xebd5, 0xbff3, 0xebd6, 0xebd7, 0xeec4, 0xc1dd,
-  0xf14b, 0xf14c, 0xf14d, 0xf35d, 0xf35c, 0xf4e2, 0xf4e1, 0xf65b,
-  0xf65c, 0xf65a, 0xf766, 0xc5b0, 0xa8bb, 0xadaa, 0xada9, 0xb075,
-  0xb074, 0xd440, 0xd441, 0xd3fe, 0xb073, 0xd7f5, 0xd7f6, 0xd7f2,
-  0xb3a4, 0xd7f3, 0xd7f4, 0xdc5f, 0xdc61, 0xdc5d, 0xdc60, 0xb66f,
-  0xdc5e, 0xb670, 0xdd73, 0xb955, 0xb954, 0xb953, 0xe0ac, 0xe0ad,
-  0xe473, 0xe475, 0xbbc6, 0xbbc3, 0xbbc5, 0xbbc4, 0xe474, 0xe472,
-  0xe861, 0xe85e, 0xe85f, 0xbe4d, 0xe860, 0xe85b, 0xe85c, 0xbe4a,
-  0xbe4b, 0xe85d, 0xbe4c, 0xebdb, 0xebdc, 0xebd9, 0xebda, 0xbff4,
-  0xebd8, 0xeec8, 0xeec5, 0xeec7, 0xc1e0, 0xeecb, 0xc1df, 0xeec9,
-  0xeecc, 0xeeca, 0xeec6, 0xc1de, 0xf14f, 0xf150, 0xf14e, 0xf152,
-  0xc2e5, 0xc2e6, 0xf35f, 0xc3e7, 0xf151, 0xf35e, 0xc3e6, 0xf4e5,
-  0xf4e6, 0xc4bf, 0xf4e4, 0xf4e3, 0xf65d, 0xc548, 0xf849, 0xf8c8,
-  0xf8c7, 0xc643, 0xc65d, 0xf8c9, 0xf971, 0xc66f, 0xa8bc, 0xaaf6,
-  0xb956, 0xc4c0, 0xa8bd, 0xadab, 0xb3a5, 0xb671, 0xc2e7, 0xaaf7,
-  0xd0c1, 0xd0c0, 0xd442, 0xb078, 0xb076, 0xb07a, 0xd444, 0xb079,
-  0xb077, 0xd443, 0xb3a8, 0xd7fc, 0xb3a7, 0xb3a9, 0xd842, 0xb3ab,
-  0xd7fe, 0xd840, 0xd7f7, 0xb3aa, 0xd843, 0xd7f9, 0xd7fa, 0xd7f8,
-  0xb3a6, 0xd841, 0xd7fb, 0xd7fd, 0xdc6d, 0xdc6c, 0xdc6a, 0xdc62,
-  0xdc71, 0xdc65, 0xdc6f, 0xdc76, 0xdc6e, 0xb679, 0xb675, 0xdc63,
-  0xdc69, 0xb677, 0xdc68, 0xb678, 0xb67a, 0xdc6b, 0xb672, 0xb673,
-  0xdc77, 0xdc75, 0xdc74, 0xdc66, 0xdc72, 0xb676, 0xb674, 0xdc73,
-  0xdc64, 0xdc67, 0xdc70, 0xe4ba, 0xe0b7, 0xe0b0, 0xe0c3, 0xe0cc,
-  0xe0b3, 0xb961, 0xe0c0, 0xb957, 0xb959, 0xb965, 0xe0b1, 0xb95a,
-  0xb95c, 0xb966, 0xb95b, 0xb964, 0xe0b9, 0xe0ae, 0xb962, 0xe0b8,
-  0xb95e, 0xe0ca, 0xb963, 0xe0c8, 0xe0bc, 0xe0c6, 0xb960, 0xe0af,
-  0xe0c9, 0xe0c4, 0xe0cb, 0xb958, 0xb967, 0xb95d, 0xe0b5, 0xe0bd,
-  0xe0c1, 0xe0c5, 0xb95f, 0xe0b4, 0xe0b2, 0xe0be, 0xe0bb, 0xe0ba,
-  0xe0bf, 0xe0c2, 0xe0c7, 0xe478, 0xbbc7, 0xe4a4, 0xe47a, 0xbbcc,
-  0xbbd0, 0xe4ad, 0xe4b5, 0xe4a6, 0xbbc8, 0xe4aa, 0xe0b6, 0xbbc9,
-  0xe4b1, 0xe4b6, 0xe4ae, 0xe4b0, 0xe4b9, 0xe4b2, 0xe47e, 0xe4a9,
-  0xbbd1, 0xbbcd, 0xe47c, 0xe4ab, 0xbbcb, 0xe4a5, 0xbbca, 0xe4b3,
-  0xe4a2, 0xe479, 0xbbce, 0xe4b8, 0xe47b, 0xe4af, 0xe4ac, 0xe4a7,
-  0xe477, 0xe476, 0xe4a1, 0xe4b4, 0xbbcf, 0xe4b7, 0xe47d, 0xe4a3,
-  0xbe52, 0xbe5a, 0xbe55, 0xe8a4, 0xe8a1, 0xe867, 0xbe50, 0xbe4f,
-  0xbe56, 0xe865, 0xbe54, 0xe871, 0xe863, 0xe864, 0xbe4e, 0xe8a3,
-  0xbe58, 0xe874, 0xe879, 0xe873, 0xebee, 0xe86f, 0xe877, 0xe875,
-  0xe868, 0xe862, 0xe87d, 0xbe57, 0xe87e, 0xe878, 0xe86d, 0xe86b,
-  0xe866, 0xe86e, 0xe87b, 0xe86a, 0xe87a, 0xe8a2, 0xbe53, 0xe876,
-  0xe87c, 0xe872, 0xe86c, 0xbe51, 0xe4a8, 0xe870, 0xbe59, 0xe869,
-  0xebf4, 0xbff7, 0xebf3, 0xebf0, 0xec44, 0xbffb, 0xec41, 0xebf8,
-  0xec43, 0xebe9, 0xebf6, 0xbffd, 0xebe1, 0xebdf, 0xec42, 0xec40,
-  0xebfe, 0xebed, 0xebec, 0xebe2, 0xc040, 0xebe8, 0xebf2, 0xebfd,
-  0xc043, 0xec45, 0xc1e8, 0xc045, 0xbffe, 0xebe6, 0xebef, 0xebde,
-  0xebe0, 0xbff5, 0xc042, 0xbffa, 0xebe7, 0xebf7, 0xebf1, 0xc041,
-  0xebdd, 0xc1e3, 0xebf9, 0xebfc, 0xbffc, 0xebeb, 0xc044, 0xbff9,
-  0xbff8, 0xebf5, 0xebfb, 0xbff6, 0xebe4, 0xebfa, 0xebe5, 0xebea,
-  0xeed2, 0xeed7, 0xc1e5, 0xc1e7, 0xeedd, 0xc1e1, 0xeeec, 0xeee3,
-  0xeed8, 0xeed9, 0xeee2, 0xc1ee, 0xeee1, 0xeed1, 0xeee0, 0xeed4,
-  0xeeed, 0xc1ed, 0xc1eb, 0xeed5, 0xeee8, 0xeeda, 0xeee7, 0xeee9,
-  0xeed0, 0xc1e6, 0xeeea, 0xeede, 0xc1ea, 0xeedb, 0xc1ec, 0xeee4,
-  0xc1e4, 0xeed6, 0xeee5, 0xeedf, 0xebe3, 0xeee6, 0xeed3, 0xc1e9,
-  0xeeeb, 0xc1e2, 0xeece, 0xf160, 0xf159, 0xc2e9, 0xf154, 0xf163,
-  0xf15b, 0xeedc, 0xf165, 0xf155, 0xc2e8, 0xf15f, 0xc2ea, 0xc2f2,
-  0xc2f0, 0xf161, 0xc2f1, 0xf157, 0xf158, 0xf15d, 0xf162, 0xeecd,
-  0xc2eb, 0xf16a, 0xf167, 0xf16b, 0xf15e, 0xf15a, 0xf168, 0xf36a,
-  0xf15c, 0xc2ee, 0xc2ed, 0xeecf, 0xc2ef, 0xf164, 0xf166, 0xc2ec,
-  0xf169, 0xf153, 0xf156, 0xf373, 0xf363, 0xc3eb, 0xf371, 0xf361,
-  0xc3ec, 0xf36c, 0xf368, 0xc3f1, 0xf372, 0xf362, 0xf365, 0xc3e9,
-  0xf374, 0xf36d, 0xf370, 0xc3ef, 0xc3f4, 0xc3f2, 0xf369, 0xf364,
-  0xc3ed, 0xc3ee, 0xf360, 0xc3ea, 0xc3e8, 0xc3f0, 0xf36f, 0xc3f3,
-  0xf36b, 0xf375, 0xc3f5, 0xf367, 0xf36e, 0xf4f3, 0xf542, 0xf4f5,
-  0xf4fc, 0xf366, 0xf4fa, 0xf4e9, 0xf540, 0xc4c3, 0xf4ed, 0xf4fe,
-  0xf4f4, 0xc4c2, 0xf544, 0xf4f6, 0xf4fb, 0xf4fd, 0xf4e7, 0xf541,
-  0xf4f2, 0xf4f7, 0xf4eb, 0xf4ef, 0xf543, 0xf4f9, 0xf4e8, 0xf4ec,
-  0xf4ee, 0xf4f8, 0xc4c1, 0xf4f1, 0xf4ea, 0xf4f0, 0xf661, 0xf666,
-  0xc54f, 0xf668, 0xc549, 0xf664, 0xf66a, 0xc54e, 0xc54a, 0xc54b,
-  0xf660, 0xf667, 0xc54d, 0xf665, 0xc54c, 0xf65f, 0xf663, 0xf662,
-  0xf65e, 0xf669, 0xc5b1, 0xf76d, 0xf770, 0xf76c, 0xf76e, 0xf76f,
-  0xf769, 0xf76a, 0xf767, 0xf76b, 0xf768, 0xc5b2, 0xc5b3, 0xf84b,
-  0xf84d, 0xf84c, 0xf84e, 0xc5e0, 0xf84a, 0xc5df, 0xc5e1, 0xf8cb,
-  0xf8cc, 0xc644, 0xf8ca, 0xf953, 0xf952, 0xf954, 0xc65f, 0xf955,
-  0xc65e, 0xf956, 0xf972, 0xf975, 0xf974, 0xc668, 0xf973, 0xc672,
-  0xc670, 0xc671, 0xc677, 0xf9c0, 0xf9c1, 0xf9bf, 0xf9c9, 0xaaf8,
-  0xd844, 0xdc78, 0xe8a5, 0xf376, 0xaaf9, 0xadac, 0xb07b, 0xd845,
-  0xd846, 0xb3ac, 0xb67d, 0xdc7a, 0xdc79, 0xb6a3, 0xb67c, 0xdc7b,
-  0xb67e, 0xb6a2, 0xb6a1, 0xb67b, 0xb968, 0xe0d0, 0xe0ce, 0xe0cf,
-  0xe0cd, 0xbbd2, 0xbbd5, 0xbbd7, 0xbbd6, 0xbbd3, 0xbbd4, 0xe8a7,
-  0xe8a6, 0xbe5b, 0xe8a8, 0xe8a9, 0xbe5c, 0xec4d, 0xec4b, 0xeef3,
-  0xec49, 0xec4a, 0xc046, 0xec46, 0xec4e, 0xec48, 0xec4c, 0xeeef,
-  0xeef1, 0xeef2, 0xc1f3, 0xeeee, 0xc1f2, 0xeef0, 0xc1ef, 0xc1f0,
-  0xc1f1, 0xec47, 0xc2f5, 0xf16e, 0xf16c, 0xf16d, 0xc2f3, 0xc2f6,
-  0xc2f4, 0xf377, 0xf378, 0xc3f6, 0xf545, 0xf547, 0xf546, 0xc4c4,
-  0xc550, 0xf66d, 0xf66c, 0xf66b, 0xaafa, 0xc9aa, 0xca58, 0xa6e9,
-  0xca56, 0xca59, 0xca57, 0xcbae, 0xa8c1, 0xa8c2, 0xcbb0, 0xa8bf,
-  0xcbaf, 0xcbad, 0xa8c0, 0xa8be, 0xcdd8, 0xcddb, 0xaafd, 0xcdda,
-  0xcdd9, 0xaafc, 0xaafb, 0xab40, 0xcddc, 0xaafe, 0xd0c6, 0xadae,
-  0xadaf, 0xadb0, 0xd0c7, 0xd0c3, 0xadad, 0xd0c4, 0xd0c5, 0xd0c2,
-  0xb0a4, 0xb0a1, 0xd445, 0xb0a2, 0xb0a5, 0xd446, 0xb07e, 0xb07c,
-  0xb07d, 0xb0a3, 0xb3ad, 0xd849, 0xb3b5, 0xd848, 0xd84b, 0xb3b1,
-  0xd84a, 0xb6ab, 0xb3af, 0xb3b2, 0xb3ae, 0xb3b3, 0xb3b4, 0xb3b0,
-  0xd847, 0xb6a7, 0xdc7d, 0xdca3, 0xdca2, 0xb6ac, 0xb6a8, 0xb6a9,
-  0xdc7c, 0xdc7e, 0xdca1, 0xb6a4, 0xb6a6, 0xb6aa, 0xb6a5, 0xe0d3,
-  0xe0d1, 0xe0d2, 0xb96a, 0xb96b, 0xe0d4, 0xb969, 0xbbd8, 0xbbda,
-  0xbbd9, 0xe4bb, 0xe4bc, 0xe8ab, 0xe8aa, 0xc047, 0xc048, 0xec4f,
-  0xc049, 0xeef6, 0xeef4, 0xeef5, 0xc1f4, 0xf16f, 0xc3f7, 0xc1f5,
-  0xab41, 0xb0a6, 0xd447, 0xd84c, 0xb3b6, 0xb6ad, 0xdca4, 0xdca6,
-  0xb6af, 0xb6ae, 0xb6b0, 0xb6b1, 0xdca5, 0xb96e, 0xb96f, 0xb96d,
-  0xbbdb, 0xb96c, 0xe0d5, 0xbbdc, 0xe8ac, 0xec50, 0xc04a, 0xc1f6,
-  0xf170, 0xf174, 0xc2f9, 0xf171, 0xc2fa, 0xc2f8, 0xf175, 0xc2fb,
-  0xf173, 0xf379, 0xc2f7, 0xc3f8, 0xf8cd, 0xab42, 0xb3b8, 0xb3b7,
-  0xb6b2, 0xdca8, 0xdca7, 0xb6b3, 0xe0d9, 0xb973, 0xb970, 0xe0d8,
-  0xb972, 0xe0d6, 0xb971, 0xe0d7, 0xe4bd, 0xbbdd, 0xe8af, 0xbe5d,
-  0xe8ad, 0xbe5e, 0xbe5f, 0xe8ae, 0xbe60, 0xec51, 0xc04e, 0xc04b,
-  0xc050, 0xec53, 0xc04c, 0xec52, 0xc04f, 0xc04d, 0xeef9, 0xeefb,
-  0xc1f7, 0xeefa, 0xc1f8, 0xeef8, 0xeef7, 0xf177, 0xf176, 0xc2fc,
-  0xf178, 0xf37e, 0xc3fa, 0xf37d, 0xf37a, 0xc3f9, 0xf37b, 0xf37c,
-  0xf548, 0xf549, 0xc4c5, 0xc553, 0xf66e, 0xc551, 0xc552, 0xf66f,
-  0xc5b4, 0xc5b5, 0xf771, 0xc645, 0xf8cf, 0xc647, 0xf8ce, 0xf8d0,
-  0xc646, 0xf957, 0xf9ad, 0xab43, 0xb974, 0xe4be, 0xe8b0, 0xc051,
-  0xc052, 0xab44, 0xbe61, 0xc3fb, 0xadb1, 0xc053, 0xc5e2, 0xadb2,
-  0xd84d, 0xdca9, 0xdcab, 0xdcaa, 0xe0dd, 0xe0da, 0xb975, 0xb976,
-  0xe0db, 0xe0dc, 0xe4c0, 0xe4c5, 0xbbde, 0xe4bf, 0xe4c1, 0xe4c8,
-  0xe4c3, 0xe4c7, 0xe4c4, 0xe4c2, 0xe4c6, 0xbbdf, 0xe8b3, 0xe8b1,
-  0xbe63, 0xbe62, 0xe8b2, 0xbe64, 0xec56, 0xec55, 0xc054, 0xec54,
-  0xeefc, 0xeefe, 0xef41, 0xef40, 0xc1f9, 0xeefd, 0xf1a1, 0xc2fd,
-  0xf17d, 0xf1a2, 0xc2fe, 0xf17b, 0xf17e, 0xf17c, 0xf179, 0xc340,
-  0xf17a, 0xf3a1, 0xf3a3, 0xf3a2, 0xf54a, 0xf54b, 0xf670, 0xc5b7,
-  0xc5b6, 0xf84f, 0xf850, 0xc648, 0xf8d1, 0xc669, 0xadb3, 0xb6b4,
-  0xe4ca, 0xe4c9, 0xe8b5, 0xe8b4, 0xc1fa, 0xef43, 0xef42, 0xf1a5,
-  0xf1a3, 0xf1a6, 0xf1a4, 0xc3fc, 0xf3a4, 0xf3a5, 0xf3a6, 0xf671,
-  0xf772, 0xf8d2, 0xadb4, 0xec57, 0xef44, 0xadb5, 0xbbe0, 0xec58,
-  0xc341, 0xf1a7, 0xc3fd, 0xf54c, 0xf54d, 0xc554, 0xf851, 0xadb6,
-  0xb3bb, 0xb3bc, 0xd84e, 0xb6b5, 0xb6b6, 0xdcac, 0xb6b7, 0xb97a,
-  0xb97c, 0xe0df, 0xe0e0, 0xe0de, 0xb977, 0xb978, 0xb97b, 0xb979,
-  0xe4cb, 0xbbe1, 0xbbe2, 0xe8bc, 0xbe67, 0xe8b7, 0xe8b6, 0xe8bb,
-  0xbe65, 0xc05b, 0xe8b8, 0xe8bd, 0xe8ba, 0xe8b9, 0xbe66, 0xc059,
-  0xec5a, 0xc055, 0xec5b, 0xec59, 0xc058, 0xc056, 0xc05a, 0xc057,
-  0xef45, 0xef4a, 0xef46, 0xef49, 0xc1fb, 0xedd4, 0xef48, 0xef47,
-  0xc344, 0xc342, 0xc345, 0xc343, 0xf1a8, 0xf1a9, 0xf1aa, 0xc346,
-  0xf3aa, 0xc440, 0xf3a8, 0xc441, 0xf3a7, 0xf3a9, 0xc3fe, 0xf551,
-  0xf54e, 0xf54f, 0xf550, 0xf672, 0xc556, 0xc555, 0xf774, 0xf773,
-  0xc5b8, 0xc5e3, 0xc649, 0xc660, 0xf958, 0xf9ae, 0xf9af, 0xadb7,
-  0xdcad, 0xe0e1, 0xe4cc, 0xe4cd, 0xbbe3, 0xbbe4, 0xe8be, 0xbe68,
-  0xc1fc, 0xf1ab, 0xc347, 0xf3ad, 0xc442, 0xf3ac, 0xf3ae, 0xf3ab,
-  0xf675, 0xf552, 0xf553, 0xc4c6, 0xf674, 0xf673, 0xf775, 0xf9b0,
-  0xadb8, 0xadb9, 0xb0a7, 0xd448, 0xd84f, 0xb6b8, 0xb6bb, 0xb6b9,
-  0xdcae, 0xb6bd, 0xb6ba, 0xb6bc, 0xb97e, 0xe0e2, 0xe0e3, 0xe8c0,
-  0xb97d, 0xb9a1, 0xb9a2, 0xe4cf, 0xe4ce, 0xbbe5, 0xbbe6, 0xe4d0,
-  0xe8bf, 0xbbe8, 0xbe69, 0xbbe7, 0xc05c, 0xe8c1, 0xbe6b, 0xbe6a,
-  0xe8c2, 0xe8c5, 0xe8c3, 0xe8c4, 0xbe6c, 0xc061, 0xc05f, 0xc05e,
-  0xec5d, 0xc060, 0xec5c, 0xef4b, 0xec5e, 0xc05d, 0xec5f, 0xef4e,
-  0xef4c, 0xef4d, 0xef52, 0xc34b, 0xef51, 0xef54, 0xef53, 0xef50,
-  0xef4f, 0xc1fd, 0xf1ae, 0xf1ad, 0xc34a, 0xc348, 0xc349, 0xf1ac,
-  0xf3b1, 0xc443, 0xf3b0, 0xf3af, 0xc444, 0xf558, 0xf557, 0xf555,
-  0xf554, 0xc4c8, 0xc4c7, 0xf559, 0xf776, 0xc5b9, 0xf677, 0xc557,
-  0xf676, 0xf556, 0xf777, 0xc5e4, 0xc661, 0xf959, 0xf9b1, 0xadba,
-  0xd850, 0xef55, 0xadbb, 0xe4d2, 0xe4d1, 0xec60, 0xef57, 0xef56,
-  0xc34c, 0xf3b2, 0xf3b3, 0xc4c9, 0xf9b2, 0xb0a8, 0xb6bf, 0xb6be,
-  0xe0e4, 0xe0e6, 0xb9a4, 0xe0e5, 0xb9a3, 0xb9a5, 0xe0e7, 0xe4d4,
-  0xe4d6, 0xe4d5, 0xe4d8, 0xbbe9, 0xe4d7, 0xe4d3, 0xe4d9, 0xe8cc,
-  0xe8cf, 0xe8d1, 0xe8c7, 0xe8cb, 0xe8c8, 0xbe6e, 0xbe71, 0xbe73,
-  0xe8c9, 0xe8ca, 0xbe72, 0xe8cd, 0xe8d0, 0xe8ce, 0xbe74, 0xbe70,
-  0xe8c6, 0xbe6d, 0xbe6f, 0xc063, 0xec66, 0xec64, 0xec63, 0xec69,
-  0xec68, 0xec67, 0xec62, 0xc062, 0xec61, 0xec65, 0xc064, 0xef5a,
-  0xef5e, 0xef5b, 0xef5d, 0xef5c, 0xef59, 0xef5f, 0xef62, 0xef60,
-  0xef61, 0xc240, 0xc1fe, 0xef58, 0xef63, 0xf1b3, 0xf1b6, 0xf1b8,
-  0xf1b7, 0xf1b1, 0xf1b5, 0xf1b0, 0xf1b2, 0xc34d, 0xf1af, 0xf1b4,
-  0xf3c0, 0xf3b5, 0xc445, 0xc446, 0xf3b4, 0xf3b9, 0xf3bf, 0xf3b7,
-  0xf3be, 0xf3bb, 0xf3ba, 0xf3bd, 0xf3b8, 0xf3b6, 0xf3bc, 0xf560,
-  0xf55e, 0xc4ca, 0xf55d, 0xf563, 0xf561, 0xc4cb, 0xf55c, 0xf55a,
-  0xf55b, 0xc4cd, 0xf55f, 0xc4cc, 0xf562, 0xf678, 0xf67e, 0xf679,
-  0xc55b, 0xf6a1, 0xc55a, 0xf67d, 0xf67c, 0xc559, 0xf67b, 0xc558,
-  0xf67a, 0xf77d, 0xf7a1, 0xf77e, 0xf77b, 0xc5bb, 0xf778, 0xf77c,
-  0xf7a3, 0xf7a2, 0xf779, 0xf77a, 0xc5ba, 0xf852, 0xc5e7, 0xf853,
-  0xc5e5, 0xc5e6, 0xf8d3, 0xc64a, 0xf976, 0xc66a, 0xf9b3, 0xc66b,
-  0xf9b4, 0xf9b5, 0xf9c3, 0xf9c2, 0xc67a, 0xf9cd, 0xb0a9, 0xe0e9,
-  0xe0e8, 0xbbea, 0xbbeb, 0xe4da, 0xe8d2, 0xec6c, 0xbe75, 0xc065,
-  0xec6a, 0xec6d, 0xc066, 0xef64, 0xec6b, 0xf1b9, 0xc34e, 0xf3c1,
-  0xf566, 0xf564, 0xf565, 0xf6a2, 0xc55c, 0xf7a4, 0xc5ea, 0xc5bc,
-  0xc5e8, 0xc5e9, 0xf8d4, 0xc662, 0xb0aa, 0xf1ba, 0xd449, 0xb9a6,
-  0xe4db, 0xbbec, 0xe4dc, 0xe8d4, 0xe8d3, 0xc068, 0xbe76, 0xbe77,
-  0xe8d7, 0xe8d6, 0xe8d5, 0xec6e, 0xec71, 0xec70, 0xec6f, 0xc067,
-  0xef68, 0xef66, 0xef65, 0xef67, 0xc34f, 0xf1bc, 0xf1bd, 0xc350,
-  0xf1bb, 0xf3c3, 0xf3c2, 0xf3c5, 0xc447, 0xf3c4, 0xf567, 0xf569,
-  0xf568, 0xf6a3, 0xf6a6, 0xf6a4, 0xf6a5, 0xf7a5, 0xc5bd, 0xf854,
-  0xf855, 0xf856, 0xc64b, 0xc663, 0xf9b6, 0xb0ab, 0xbe78, 0xc069,
-  0xf1be, 0xf7a6, 0xf9c4, 0xd44a, 0xc67b, 0xb0ac, 0xec72, 0xf1bf,
-  0xf3c6, 0xf6a7, 0xf7a7, 0xb0ad, 0xe4dd, 0xe4de, 0xbbed, 0xbbee,
-  0xe8d9, 0xbe7a, 0xbe79, 0xe8d8, 0xef69, 0xf1c0, 0xf1c2, 0xf1c1,
-  0xc353, 0xc352, 0xc351, 0xc55e, 0xf6a8, 0xc55d, 0xf7a9, 0xf7a8,
-  0xc64c, 0xf8d5, 0xb3bd, 0xe0ea, 0xe4e1, 0xe4df, 0xe4e0, 0xe8e2,
-  0xe8dd, 0xe8da, 0xe8e1, 0xe8e3, 0xbe7c, 0xe8e0, 0xe8dc, 0xe8db,
-  0xe8df, 0xe8de, 0xbe7b, 0xec7d, 0xec78, 0xec76, 0xeca1, 0xec77,
-  0xec73, 0xec79, 0xec74, 0xef72, 0xec75, 0xeca2, 0xec7c, 0xc06a,
-  0xec7b, 0xec7a, 0xec7e, 0xef6a, 0xef6d, 0xef6c, 0xef74, 0xef6f,
-  0xef73, 0xef71, 0xef70, 0xef6e, 0xef6b, 0xc243, 0xc242, 0xc244,
-  0xc241, 0xef75, 0xf1c8, 0xf1cb, 0xf1c9, 0xf1cd, 0xf1ce, 0xf1c6,
-  0xc358, 0xf1c7, 0xf1c5, 0xf1cc, 0xf1c4, 0xf1c3, 0xc357, 0xc355,
-  0xc354, 0xf1ca, 0xf3cf, 0xf3d5, 0xc44a, 0xf3d0, 0xf3d3, 0xf3d7,
-  0xc44b, 0xf3d2, 0xf3ca, 0xf3c9, 0xf3d6, 0xf3cd, 0xf3cb, 0xf3d4,
-  0xf3cc, 0xc449, 0xc448, 0xf3c7, 0xf3c8, 0xf3d1, 0xf3ce, 0xf56c,
-  0xf56f, 0xc356, 0xf56d, 0xf573, 0xf571, 0xf56b, 0xf576, 0xf56a,
-  0xc4cf, 0xf572, 0xf56e, 0xc4ce, 0xf575, 0xf574, 0xf6ab, 0xf6aa,
-  0xf6b1, 0xf6ad, 0xf6b0, 0xc560, 0xf6ae, 0xf6af, 0xf6a9, 0xf6ac,
-  0xc55f, 0xc5bf, 0xf7b4, 0xf7af, 0xf7b3, 0xf7b6, 0xf7b2, 0xf7ae,
-  0xc5c1, 0xf7b1, 0xf7b5, 0xc5c0, 0xf7ac, 0xf570, 0xf7b0, 0xf7ad,
-  0xf7aa, 0xf7ab, 0xc5be, 0xf85a, 0xf85c, 0xf85f, 0xf85b, 0xf860,
-  0xf859, 0xf857, 0xc5eb, 0xf85d, 0xc5ed, 0xc5ec, 0xf858, 0xf85e,
-  0xf8da, 0xc64d, 0xf8db, 0xf8d9, 0xf8d6, 0xf8d8, 0xf8d7, 0xf95a,
-  0xf95c, 0xf95b, 0xf979, 0xf978, 0xf977, 0xf97a, 0xc673, 0xc674,
-  0xf9ca, 0xf9ce, 0xb3be, 0xdcaf, 0xe0ed, 0xb9a7, 0xe0eb, 0xe0ec,
-  0xe4e2, 0xe4e3, 0xbbf1, 0xbbef, 0xe4e4, 0xbbf0, 0xe8e8, 0xe8eb,
-  0xe8e5, 0xe8ec, 0xe8e4, 0xe8e6, 0xe8e7, 0xe8ea, 0xbea1, 0xe8ef,
-  0xe8ee, 0xbe7d, 0xe8e9, 0xe8ed, 0xbe7e, 0xecac, 0xc06f, 0xeca7,
-  0xc06b, 0xeca4, 0xecaa, 0xecad, 0xc070, 0xeca9, 0xeca6, 0xecae,
-  0xeca5, 0xecab, 0xc06c, 0xeca3, 0xc06d, 0xc06e, 0xeca8, 0xefa9,
-  0xef7a, 0xef7b, 0xef7e, 0xef7c, 0xef76, 0xef79, 0xefa5, 0xef7d,
-  0xc245, 0xefa7, 0xefa4, 0xc246, 0xefa6, 0xef77, 0xefa2, 0xefa3,
-  0xefa1, 0xf1d2, 0xf1d4, 0xf1d7, 0xf1d1, 0xc359, 0xf1d9, 0xf1d0,
-  0xf1da, 0xf1d6, 0xf1d8, 0xf1dc, 0xf1d5, 0xf1dd, 0xf1d3, 0xf1cf,
-  0xc35a, 0xf1db, 0xc35b, 0xc44d, 0xef78, 0xf3f1, 0xf3e8, 0xc44f,
-  0xf3e4, 0xc450, 0xf3ed, 0xf3e7, 0xf3dd, 0xc44e, 0xf3ea, 0xf3e5,
-  0xf3e6, 0xf3d8, 0xf3df, 0xf3ee, 0xf3eb, 0xf3e3, 0xf3ef, 0xf3de,
-  0xf3d9, 0xf3ec, 0xf3db, 0xf3e9, 0xf3e0, 0xf3f0, 0xf3dc, 0xc44c,
-  0xf3da, 0xf3e1, 0xf3e2, 0xf57d, 0xf57b, 0xf5a2, 0xf5ae, 0xf5a5,
-  0xf57c, 0xf578, 0xf5a7, 0xf57e, 0xf5a3, 0xf57a, 0xf5aa, 0xf577,
-  0xf5a1, 0xf5a6, 0xf5a8, 0xf5ab, 0xf579, 0xf5af, 0xf5b0, 0xf5a9,
-  0xf5ad, 0xf5a4, 0xf6c1, 0xf6c4, 0xc561, 0xf6c3, 0xf6c8, 0xf6c6,
-  0xc562, 0xf6bd, 0xf6b3, 0xf6b2, 0xc564, 0xf6bf, 0xf6c0, 0xf6bc,
-  0xf6b4, 0xf6b9, 0xf5ac, 0xf6b5, 0xc563, 0xf6bb, 0xf6ba, 0xf6b6,
-  0xf6c2, 0xf6b7, 0xf7bb, 0xf6c5, 0xf6c7, 0xf6be, 0xf6b8, 0xf7bc,
-  0xf7be, 0xf7b8, 0xc5c2, 0xf7c5, 0xf7c3, 0xc5c3, 0xf7c2, 0xf7c1,
-  0xf7ba, 0xf7b7, 0xf7bd, 0xf7c6, 0xf7b9, 0xf7bf, 0xf869, 0xf86e,
-  0xf864, 0xf867, 0xc5ee, 0xf86b, 0xf872, 0xf7c0, 0xf865, 0xf86f,
-  0xf873, 0xf86a, 0xf863, 0xf86d, 0xf86c, 0xf871, 0xf870, 0xf7c4,
-  0xf868, 0xf862, 0xf866, 0xc64e, 0xc64f, 0xf861, 0xf8e6, 0xf8dd,
-  0xf8e5, 0xf8e2, 0xf8e3, 0xf8dc, 0xf8df, 0xf8e7, 0xf8e1, 0xf8e0,
-  0xf8de, 0xf8e4, 0xf95d, 0xf95e, 0xf960, 0xf95f, 0xf962, 0xf961,
-  0xf97c, 0xf97b, 0xf9b7, 0xf9b8, 0xf9c5, 0xc678, 0xc67c, 0xf9cf,
-  0xc67d, 0xb3bf, 0xc4d0, 0xf6c9, 0xc650, 0xc651, 0xb3c0, 0xe0ee,
-  0xb9a8, 0xe8f0, 0xecb0, 0xecb1, 0xecaf, 0xefab, 0xefaa, 0xc247,
-  0xf1df, 0xefac, 0xf1de, 0xf3f3, 0xc451, 0xc453, 0xf3f2, 0xc452,
-  0xf5b1, 0xf5b3, 0xf5b2, 0xf6ca, 0xc565, 0xc5ef, 0xf8e8, 0xf963,
-  0xf9d2, 0xb3c1, 0xe4e5, 0xbea2, 0xecb3, 0xecb2, 0xefad, 0xc454,
-  0xc4d1, 0xf7c7, 0xf9cb, 0xb3c2, 0xbbf2, 0xbea3, 0xf3f4, 0xf874,
-  0xb6c0, 0xefae, 0xc664, 0xb6c1, 0xbea4, 0xc248, 0xf875, 0xb6c2,
-  0xe8f1, 0xc072, 0xecb4, 0xecb5, 0xc071, 0xefaf, 0xc24c, 0xc24a,
-  0xc24b, 0xc249, 0xf1e0, 0xc35c, 0xf5b5, 0xf5b4, 0xf5b7, 0xf5b6,
-  0xc4d2, 0xf6cb, 0xf6cd, 0xf6cc, 0xc566, 0xf7c8, 0xf876, 0xf877,
-  0xc5f0, 0xf964, 0xf97d, 0xc675, 0xdcb0, 0xecb6, 0xefb0, 0xf3f5,
-  0xe0ef, 0xefb1, 0xf1e2, 0xf1e1, 0xf878, 0xc652, 0xf965, 0xf97e,
-  0xb9a9, 0xe8f2, 0xe8f3, 0xecb7, 0xb9aa, 0xc35d, 0xf1e3, 0xf6cf,
-  0xc567, 0xf6d0, 0xf6ce, 0xf879, 0xf8e9, 0xb9ab, 0xefb4, 0xefb3,
-  0xefb2, 0xf1e4, 0xf1e8, 0xf1e7, 0xf1e6, 0xf1e5, 0xc35e, 0xf3f6,
-  0xf5b9, 0xc4d3, 0xf5b8, 0xf6d1, 0xf7cb, 0xf7ca, 0xc5c4, 0xf7c9,
-  0xf87c, 0xf87b, 0xf87a, 0xbbf3, 0xecb8, 0xc24d, 0xf3f7, 0xf3f8,
-  0xf7cc, 0xf87d, 0xf8ea, 0xf966, 0xf9b9, 0xf9d4, 0xbbf4, 0xc24e,
-  0xf1e9, 0xf3f9, 0xf6d2, 0xf87e, 0xbea6, 0xefb5, 0xf1ea, 0xf3fa,
-  0xf3fb, 0xf3fc, 0xf5be, 0xf5ba, 0xc568, 0xf5bd, 0xf5bc, 0xc4d4,
-  0xf5bb, 0xc4d6, 0xc4d5, 0xf6d4, 0xf6d3, 0xc569, 0xc56a, 0xc5c6,
-  0xf7cd, 0xc5c5, 0xf8a3, 0xf8a4, 0xf8a2, 0xf8a1, 0xc654, 0xf8eb,
-  0xf8ec, 0xf8ed, 0xc653, 0xf967, 0xf96a, 0xf969, 0xf968, 0xf9d3,
-  0xc073, 0xc365, 0xf5bf, 0xf6d5, 0xc5c7, 0xf7ce, 0xf9d5, 0xc074,
-  0xefb6, 0xf7cf, 0xf9a1, 0xc94a, 0xddfc, 0xa14a, 0xa157, 0xa159,
-  0xa15b, 0xa15f, 0xa160, 0xa163, 0xa164, 0xa167, 0xa168, 0xa16b,
-  0xa16c, 0xa16f, 0xa170, 0xa173, 0xa174, 0xa177, 0xa178, 0xa17b,
-  0xa17c, 0xa1c6, 0xa1c7, 0xa1ca, 0xa1cb, 0xa1c8, 0xa1c9, 0xa15c,
-  0xa14d, 0xa14f, 0xa151, 0xa152, 0xa153, 0xa154, 0xa17d, 0xa17e,
-  0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1cc, 0xa1cd, 0xa1ce, 0xa1de,
-  0xa1df, 0xa1e0, 0xa1e1, 0xa1e2, 0xa24c, 0xa24d, 0xa24e, 0xa149,
-  0xa1ad, 0xa243, 0xa248, 0xa1ae, 0xa15d, 0xa15e, 0xa1af, 0xa1cf,
-  0xa141, 0xa1d0, 0xa144, 0xa241, 0xa2af, 0xa2b0, 0xa2b1, 0xa2b2,
-  0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, 0xa147, 0xa146,
-  0xa1d5, 0xa1d7, 0xa1d6, 0xa148, 0xa249, 0xa2cf, 0xa2d0, 0xa2d1,
-  0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, 0xa2d9,
-  0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0, 0xa2e1,
-  0xa2e2, 0xa2e3, 0xa2e4, 0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8, 0xa242,
-  0xa1c4, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ed, 0xa2ee, 0xa2ef,
-  0xa2f0, 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7,
-  0xa2f8, 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0xa2fd, 0xa2fe, 0xa340,
-  0xa341, 0xa342, 0xa343, 0xa161, 0xa155, 0xa162, 0xa14e,
-};
-
-static const Summary16 big5_uni2indx_page00[16] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x00ac }, {    4, 0x0083 },
-  {    7, 0x0000 }, {    7, 0x0080 }, {    8, 0x0000 }, {    8, 0x0080 },
-};
-static const Summary16 big5_uni2indx_page02[38] = {
-  /* 0x0200 */
-  {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 },
-  {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 },
-  {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 },
-  {    9, 0x0e80 }, {   13, 0x0200 }, {   14, 0x0000 }, {   14, 0x0000 },
-  /* 0x0300 */
-  {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x0000 },
-  {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x0000 },
-  {   14, 0x0000 }, {   14, 0xfffe }, {   29, 0x03fb }, {   38, 0xfffe },
-  {   53, 0x03fb }, {   62, 0x0000 }, {   62, 0x0000 }, {   62, 0x0000 },
-  /* 0x0400 */
-  {   62, 0x0002 }, {   63, 0x1ff0 }, {   72, 0xfff8 }, {   85, 0xffff },
-  {  101, 0xffff }, {  117, 0x0002 },
-};
-static const Summary16 big5_uni2indx_page20[44] = {
-  /* 0x2000 */
-  {  118, 0x0000 }, {  118, 0x3318 }, {  124, 0x0064 }, {  127, 0x4824 },
-  {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 },
-  {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 },
-  {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 },
-  /* 0x2100 */
-  {  131, 0x0228 }, {  134, 0x0000 }, {  134, 0x0000 }, {  134, 0x0000 },
-  {  134, 0x0000 }, {  134, 0x0000 }, {  134, 0x03ff }, {  144, 0x0000 },
-  {  144, 0x0000 }, {  144, 0x03cf }, {  152, 0x0000 }, {  152, 0x0000 },
-  {  152, 0x0000 }, {  152, 0x0000 }, {  152, 0x0000 }, {  152, 0x0000 },
-  /* 0x2200 */
-  {  152, 0x0000 }, {  152, 0xc400 }, {  155, 0x4e29 }, {  162, 0x1030 },
-  {  165, 0x0000 }, {  165, 0x0004 }, {  166, 0x00c3 }, {  170, 0x0000 },
-  {  170, 0x0000 }, {  170, 0x0000 }, {  170, 0x0020 }, {  171, 0x8000 },
-};
-static const Summary16 big5_uni2indx_page24[37] = {
-  /* 0x2400 */
-  {  172, 0x0000 }, {  172, 0x0000 }, {  172, 0x0000 }, {  172, 0x0000 },
-  {  172, 0x0000 }, {  172, 0x0000 }, {  172, 0x03ff }, {  182, 0x3ff0 },
-  {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 },
-  {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 },
-  /* 0x2500 */
-  {  192, 0x1005 }, {  195, 0x1111 }, {  199, 0x1010 }, {  201, 0x1010 },
-  {  203, 0x0000 }, {  203, 0x4001 }, {  205, 0xe402 }, {  210, 0x000f },
-  {  214, 0xfffe }, {  229, 0x0030 }, {  231, 0x0003 }, {  233, 0x300c },
-  {  237, 0xc8c0 }, {  242, 0x0000 }, {  242, 0x003c }, {  246, 0x0000 },
-  /* 0x2600 */
-  {  246, 0x0260 }, {  249, 0x0000 }, {  249, 0x0000 }, {  249, 0x0000 },
-  {  249, 0x0007 },
-};
-static const Summary16 big5_uni2indx_page30[62] = {
-  /* 0x3000 */
-  {  252, 0xff2f }, {  265, 0x6037 }, {  272, 0x03fe }, {  281, 0x0000 },
-  {  281, 0xfffe }, {  296, 0xffff }, {  312, 0xffff }, {  328, 0xffff },
-  {  344, 0xffff }, {  360, 0x600f }, {  366, 0xfffe }, {  381, 0xffff },
-  {  397, 0xffff }, {  413, 0xffff }, {  429, 0xffff }, {  445, 0x407f },
-  /* 0x3100 */
-  {  453, 0xffe0 }, {  464, 0xffff }, {  480, 0x03ff }, {  490, 0x0000 },
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 },
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 },
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 },
-  /* 0x3200 */
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 },
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 },
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0008 }, {  491, 0x0000 },
-  {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 },
-  /* 0x3300 */
-  {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 },
-  {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 },
-  {  491, 0xc000 }, {  493, 0x7000 }, {  496, 0x0002 }, {  497, 0x0000 },
-  {  497, 0x4010 }, {  499, 0x0026 },
-};
-static const Summary16 big5_uni2indx_page4e[1307] = {
-  /* 0x4e00 */
-  {  502, 0xff8b }, {  514, 0xc373 }, {  523, 0x6840 }, {  527, 0x1b0f },
-  {  535, 0xe9ac }, {  544, 0xf34c }, {  553, 0x0200 }, {  554, 0xc008 },
-  {  557, 0x795c }, {  566, 0xca3e }, {  575, 0x7976 }, {  585, 0x0648 },
-  {  589, 0x2fdf }, {  601, 0xf7f0 }, {  612, 0x033a }, {  618, 0xa8ff },
-  /* 0x4f00 */
-  {  629, 0xef37 }, {  641, 0x233f }, {  650, 0xb004 }, {  654, 0xfd59 },
-  {  665, 0xf3ca }, {  675, 0xffff }, {  691, 0xde9f }, {  703, 0xfff9 },
-  {  717, 0xabff }, {  730, 0x7df7 }, {  743, 0xc000 }, {  745, 0x8eec },
-  {  754, 0xeebf }, {  767, 0xffdb }, {  781, 0xd003 }, {  786, 0x45fa },
-  /* 0x5000 */
-  {  795, 0xfae1 }, {  805, 0xdffe }, {  819, 0xbfef }, {  833, 0x10ab },
-  {  839, 0xffeb }, {  853, 0xfcaa }, {  863, 0xef3f }, {  876, 0x24fd },
-  {  885, 0x78ad }, {  894, 0x7f76 }, {  906, 0xf00c }, {  912, 0xedff },
-  {  926, 0xcff6 }, {  938, 0x2cfa }, {  947, 0xf7f9 }, {  960, 0xeb6b },
-  /* 0x5100 */
-  {  971, 0x1ffd }, {  983, 0x95bf }, {  994, 0x6677 }, { 1004, 0xbfbf },
-  { 1018, 0x3bfb }, { 1030, 0xfeb4 }, { 1041, 0x7bae }, { 1052, 0x11e2 },
-  { 1058, 0xa681 }, { 1064, 0x41be }, { 1072, 0x1435 }, { 1078, 0x72c3 },
-  { 1086, 0x7d70 }, { 1095, 0x7191 }, { 1102, 0x0003 }, { 1104, 0x276b },
-  /* 0x5200 */
-  { 1113, 0x57cb }, { 1123, 0x70cf }, { 1132, 0x4732 }, { 1139, 0x0def },
-  { 1149, 0x7eda }, { 1160, 0xfc74 }, { 1170, 0xfe06 }, { 1179, 0xbdb4 },
-  { 1189, 0x3f9f }, { 1201, 0x8bca }, { 1209, 0x7e49 }, { 1218, 0x5800 },
-  { 1221, 0x228f }, { 1228, 0xebec }, { 1239, 0x8a5c }, { 1246, 0xddbb },
-  /* 0x5300 */
-  { 1258, 0xef60 }, { 1267, 0xb6e7 }, { 1278, 0xa40f }, { 1285, 0xf293 },
-  { 1294, 0x37bb }, { 1305, 0x549e }, { 1313, 0xd04b }, { 1320, 0x9baf },
-  { 1331, 0xc414 }, { 1336, 0xf7d4 }, { 1347, 0x30b0 }, { 1352, 0x0a14 },
-  { 1356, 0x2f08 }, { 1362, 0x88d0 }, { 1367, 0xff7e }, { 1381, 0x192f },
-  /* 0x5400 */
-  { 1389, 0xffda }, { 1402, 0xfb07 }, { 1412, 0x7ff1 }, { 1424, 0x7beb },
-  { 1436, 0xc5ef }, { 1447, 0x0010 }, { 1448, 0x99ff }, { 1460, 0xfdff },
-  { 1475, 0x79d7 }, { 1486, 0x0567 }, { 1493, 0xffe7 }, { 1507, 0xfdcb },
-  { 1519, 0xc3ff }, { 1531, 0x4040 }, { 1533, 0x6ff7 }, { 1546, 0xbd8e },
-  /* 0x5500 */
-  { 1556, 0xdffa }, { 1569, 0x0497 }, { 1575, 0xf4c0 }, { 1582, 0x5bff },
-  { 1595, 0xed7b }, { 1607, 0xd0e7 }, { 1616, 0x047e }, { 1623, 0xf8e0 },
-  { 1631, 0xff9f }, { 1645, 0xb73e }, { 1656, 0x7dfe }, { 1669, 0x882e },
-  { 1675, 0xfffd }, { 1690, 0xbe7f }, { 1703, 0x83fe }, { 1713, 0xf6c4 },
-  /* 0x5600 */
-  { 1722, 0xf357 }, { 1733, 0xb8fd }, { 1744, 0xd680 }, { 1750, 0xef7d },
-  { 1763, 0x5767 }, { 1773, 0x4788 }, { 1779, 0xff7d }, { 1793, 0xc3df },
-  { 1804, 0xf0ff }, { 1816, 0x37a9 }, { 1825, 0x7de0 }, { 1834, 0x70fc },
-  { 1843, 0x3f6f }, { 1855, 0xec9a }, { 1864, 0x4cb3 }, { 1872, 0x8681 },
-  /* 0x5700 */
-  { 1877, 0x3f9e }, { 1888, 0xdd5c }, { 1898, 0xf70d }, { 1908, 0x4819 },
-  { 1913, 0xfea3 }, { 1924, 0x0007 }, { 1927, 0xaf56 }, { 1937, 0x38ff },
-  { 1948, 0x980d }, { 1954, 0xefb8 }, { 1965, 0x403d }, { 1971, 0xb760 },
-  { 1979, 0xd8ce }, { 1988, 0x9035 }, { 1994, 0x72bf }, { 2005, 0x3fff },
-  /* 0x5800 */
-  { 2019, 0x7ff7 }, { 2033, 0x7a11 }, { 2040, 0xf7bb }, { 2053, 0xabff },
-  { 2066, 0xff00 }, { 2074, 0x6fbe }, { 2086, 0xa93c }, { 2094, 0xfe72 },
-  { 2105, 0xcfef }, { 2118, 0xf11b }, { 2127, 0xdb6b }, { 2138, 0xf40a },
-  { 2145, 0xc3e6 }, { 2154, 0xef7e }, { 2167, 0x9b9c }, { 2176, 0xf610 },
-  /* 0x5900 */
-  { 2183, 0xf048 }, { 2189, 0x16f4 }, { 2197, 0xfeb5 }, { 2209, 0x5182 },
-  { 2214, 0xc7b1 }, { 2223, 0x15bb }, { 2232, 0x6e87 }, { 2241, 0xfbdf },
-  { 2255, 0xe43f }, { 2265, 0x63cd }, { 2274, 0xc1ff }, { 2285, 0x7e7e },
-  { 2297, 0xfdeb }, { 2310, 0x7d5f }, { 2322, 0x777b }, { 2334, 0xfcfe },
-  /* 0x5a00 */
-  { 2347, 0x960b }, { 2354, 0xdbea }, { 2365, 0x6229 }, { 2371, 0x53e8 },
-  { 2379, 0x37df }, { 2391, 0xfdef }, { 2405, 0x36f5 }, { 2415, 0xbd81 },
-  { 2423, 0xdc18 }, { 2430, 0xfcbd }, { 2442, 0xd2e4 }, { 2450, 0xffff },
-  { 2466, 0x3fd7 }, { 2478, 0xffe0 }, { 2489, 0x7f6f }, { 2502, 0xabf8 },
-  /* 0x5b00 */
-  { 2512, 0x9bae }, { 2522, 0x6ed9 }, { 2532, 0xf5fb }, { 2545, 0xf115 },
-  { 2553, 0x79a9 }, { 2562, 0xbdfb }, { 2575, 0x5a3c }, { 2583, 0xadaf },
-  { 2594, 0xdbba }, { 2605, 0x1fac }, { 2614, 0x71fc }, { 2624, 0x8379 },
-  { 2632, 0x7cf7 }, { 2644, 0xc35f }, { 2654, 0xdfff }, { 2669, 0x0567 },
-  /* 0x5c00 */
-  { 2676, 0xff9a }, { 2688, 0x8467 }, { 2695, 0x1534 }, { 2701, 0xdf8b },
-  { 2712, 0xf9f3 }, { 2724, 0x3373 }, { 2733, 0xf7bd }, { 2746, 0x5e1a },
-  { 2754, 0xbf40 }, { 2762, 0xa03f }, { 2770, 0xffff }, { 2786, 0x01eb },
-  { 2793, 0xdfc0 }, { 2802, 0xcfdd }, { 2814, 0x7500 }, { 2819, 0xabd3 },
-  /* 0x5d00 */
-  { 2829, 0xf8c3 }, { 2838, 0xeed6 }, { 2849, 0x43fd }, { 2859, 0xb7ff },
-  { 2873, 0x5eaf }, { 2884, 0x4227 }, { 2890, 0x9bac }, { 2899, 0xf686 },
-  { 2908, 0x27d7 }, { 2918, 0xf6bc }, { 2929, 0xf787 }, { 2940, 0x35b7 },
-  { 2950, 0xaacd }, { 2959, 0xe176 }, { 2968, 0x49e7 }, { 2977, 0xe29f },
-  /* 0x5e00 */
-  { 2987, 0x545c }, { 2994, 0xaff2 }, { 3005, 0x2b3f }, { 3015, 0x61d8 },
-  { 3022, 0xfc3b }, { 3033, 0xbbb8 }, { 3043, 0xffcf }, { 3057, 0x7b7d },
-  { 3069, 0xbf95 }, { 3080, 0x1ce0 }, { 3086, 0x7dfd }, { 3099, 0x43ff },
-  { 3110, 0x5ff6 }, { 3122, 0xfffe }, { 3137, 0xd3ef }, { 3149, 0xc4ce },
-  /* 0x5f00 */
-  { 3157, 0x8db6 }, { 3166, 0xadbc }, { 3176, 0x63dc }, { 3185, 0x11eb },
-  { 3193, 0xdf59 }, { 3204, 0x23d0 }, { 3210, 0xbeb4 }, { 3220, 0xf3db },
-  { 3232, 0x1fe7 }, { 3243, 0xdbc7 }, { 3254, 0xff63 }, { 3266, 0xfae4 },
-  { 3276, 0xb22b }, { 3284, 0x63f7 }, { 3295, 0xed3b }, { 3306, 0xadba },
-  /* 0x6000 */
-  { 3316, 0xfe01 }, { 3324, 0x7eff }, { 3338, 0xfff7 }, { 3353, 0x02bc },
-  { 3359, 0x32ff }, { 3370, 0xef39 }, { 3381, 0xfffc }, { 3395, 0x8005 },
-  { 3398, 0x77fb }, { 3411, 0xbcf5 }, { 3422, 0x010d }, { 3426, 0xfff7 },
-  { 3441, 0xfffb }, { 3456, 0xbf3a }, { 3467, 0x0057 }, { 3472, 0xdfff },
-  /* 0x6100 */
-  { 3487, 0xef7b }, { 3500, 0xbd7d }, { 3512, 0xdb88 }, { 3520, 0xc8d4 },
-  { 3527, 0xfff3 }, { 3541, 0xed7c }, { 3552, 0x5dee }, { 3563, 0x56ff },
-  { 3575, 0x7e0d }, { 3584, 0xac5f }, { 3594, 0xff96 }, { 3606, 0xd57f },
-  { 3618, 0x3fee }, { 3630, 0xc140 }, { 3634, 0x6ff9 }, { 3646, 0xffe7 },
-  /* 0x6200 */
-  { 3660, 0x779b }, { 3671, 0x8e77 }, { 3681, 0x6ebf }, { 3693, 0xe45d },
-  { 3702, 0x6fcf }, { 3714, 0x5f1f }, { 3725, 0xe07f }, { 3735, 0xfedf },
-  { 3749, 0xd7db }, { 3761, 0x01fe }, { 3769, 0xff00 }, { 3777, 0xfb7b },
-  { 3790, 0xffd4 }, { 3802, 0x1fdf }, { 3814, 0xf800 }, { 3819, 0xffff },
-  /* 0x6300 */
-  { 3835, 0xfb8f }, { 3847, 0x007b }, { 3853, 0xbf00 }, { 3860, 0x7f5c },
-  { 3871, 0xffff }, { 3887, 0x07f3 }, { 3896, 0xeba0 }, { 3904, 0x3de7 },
-  { 3915, 0xf7bf }, { 3929, 0xfbd7 }, { 3942, 0xffbf }, { 3957, 0x6003 },
-  { 3961, 0xfffd }, { 3976, 0xbfed }, { 3989, 0xefbb }, { 4002, 0x027f },
-  /* 0x6400 */
-  { 4010, 0xfe40 }, { 4018, 0xddfd }, { 4031, 0xfdff }, { 4046, 0xe2f9 },
-  { 4056, 0x680b }, { 4062, 0xfb1f }, { 4074, 0xfbe3 }, { 4086, 0xaffd },
-  { 4099, 0x9fa4 }, { 4108, 0xf7ed }, { 4121, 0x7a7d }, { 4132, 0xf80f },
-  { 4141, 0xeebe }, { 4153, 0x0fd5 }, { 4162, 0xbb5d }, { 4173, 0xfd9f },
-  /* 0x6500 */
-  { 4186, 0xf2db }, { 4197, 0x3bf9 }, { 4208, 0xfe7f }, { 4222, 0xebcc },
-  { 4232, 0x876a }, { 4240, 0x73fa }, { 4251, 0x95fc }, { 4261, 0x9ffc },
-  { 4273, 0x109f }, { 4280, 0xfaf7 }, { 4293, 0xddb7 }, { 4305, 0xbbcd },
-  { 4316, 0xf87e }, { 4327, 0xeccd }, { 4337, 0xf366 }, { 4347, 0x3c3f },
-  /* 0x6600 */
-  { 4357, 0xfffd }, { 4372, 0xb03f }, { 4381, 0xe9f7 }, { 4393, 0x067e },
-  { 4401, 0x96ae }, { 4410, 0xfe06 }, { 4419, 0xd576 }, { 4429, 0x5fd7 },
-  { 4441, 0x3fd1 }, { 4451, 0xa3f3 }, { 4461, 0xcf07 }, { 4470, 0x6fb7 },
-  { 4482, 0x9fd1 }, { 4492, 0x7f44 }, { 4501, 0x7b59 }, { 4511, 0xd3dd },
-  /* 0x6700 */
-  { 4522, 0xaf3b }, { 4533, 0xa9bd }, { 4543, 0x7dcf }, { 4555, 0xff3a },
-  { 4567, 0xfbe0 }, { 4577, 0xf6eb }, { 4589, 0xb401 }, { 4594, 0xffff },
-  { 4610, 0x7afa }, { 4621, 0xb7bf }, { 4634, 0xc000 }, { 4636, 0x0ffd },
-  { 4647, 0xff7f }, { 4662, 0xff1f }, { 4675, 0xfefc }, { 4688, 0x95ff },
-  /* 0x6800 */
-  { 4700, 0x0000 }, { 4700, 0xb5dc }, { 4710, 0xef63 }, { 4721, 0x3f3e },
-  { 4732, 0xfb7f }, { 4746, 0x001b }, { 4750, 0xe800 }, { 4754, 0xfbf6 },
-  { 4767, 0x9eef }, { 4779, 0xb8df }, { 4790, 0xff9f }, { 4804, 0x003f },
-  { 4810, 0x7bd0 }, { 4819, 0xf5ff }, { 4833, 0xdfdb }, { 4846, 0x3fff },
-  /* 0x6900 */
-  { 4860, 0xfdf0 }, { 4871, 0x00bf }, { 4878, 0x8420 }, { 4881, 0xbbbd },
-  { 4893, 0xdf37 }, { 4905, 0xffde }, { 4919, 0xff6d }, { 4932, 0x0ff3 },
-  { 4942, 0x604c }, { 4947, 0x5efb }, { 4959, 0xfffb }, { 4974, 0xfafb },
-  { 4987, 0xfe5e }, { 4999, 0x0219 }, { 5003, 0x79f4 }, { 5013, 0xf9de },
-  /* 0x6a00 */
-  { 5025, 0xa7f7 }, { 5037, 0xebfa }, { 5049, 0x01eb }, { 5056, 0xff34 },
-  { 5067, 0xebd3 }, { 5078, 0xef73 }, { 5090, 0xafd7 }, { 5102, 0xc040 },
-  { 5105, 0x72bb }, { 5115, 0xdcff }, { 5128, 0xf17f }, { 5140, 0x2fd8 },
-  { 5149, 0xb8ec }, { 5158, 0xfe0b }, { 5168, 0xdda3 }, { 5178, 0x1f0b },
-  /* 0x6b00 */
-  { 5186, 0x8f1d }, { 5195, 0x47cf }, { 5205, 0xb12b }, { 5213, 0xffde },
-  { 5227, 0x7fee }, { 5240, 0xda73 }, { 5250, 0x24ff }, { 5260, 0xcbc4 },
-  { 5268, 0xf75d }, { 5280, 0xcbf2 }, { 5290, 0xecfd }, { 5302, 0xb4ed },
-  { 5312, 0xbff9 }, { 5325, 0x4ddd }, { 5335, 0x99dd }, { 5345, 0xfb8d },
-  /* 0x6c00 */
-  { 5356, 0xbb7f }, { 5369, 0xaf7b }, { 5381, 0xddfb }, { 5394, 0xc959 },
-  { 5402, 0xfc4f }, { 5413, 0xfab5 }, { 5424, 0xafe3 }, { 5435, 0x6d5f },
-  { 5446, 0xffff }, { 5462, 0x3f7d }, { 5474, 0x7800 }, { 5478, 0xffdb },
-  { 5492, 0xb6ff }, { 5505, 0x7eff }, { 5519, 0xfbaf }, { 5532, 0x022f },
-  /* 0x6d00 */
-  { 5538, 0xff9b }, { 5551, 0xefc7 }, { 5563, 0xffa5 }, { 5575, 0xffff },
-  { 5591, 0x0007 }, { 5594, 0xc700 }, { 5599, 0xf7ff }, { 5614, 0xfff1 },
-  { 5627, 0x7ffd }, { 5641, 0x01bf }, { 5649, 0xdc00 }, { 5654, 0xfdbc },
-  { 5666, 0xbff5 }, { 5679, 0xffff }, { 5695, 0xff7f }, { 5710, 0x3eff },
-  /* 0x6e00 */
-  { 5723, 0x0029 }, { 5726, 0xbe00 }, { 5732, 0xf9ff }, { 5746, 0xff7f },
-  { 5761, 0x6efb }, { 5773, 0xfd7e }, { 5786, 0xcbff }, { 5799, 0x039e },
-  { 5806, 0xe300 }, { 5811, 0xfbdd }, { 5824, 0xccff }, { 5836, 0xf6df },
-  { 5849, 0xffff }, { 5865, 0x117f }, { 5874, 0xf800 }, { 5879, 0xfbf6 },
-  /* 0x6f00 */
-  { 5892, 0xe7ef }, { 5905, 0xd73c }, { 5915, 0xfeef }, { 5929, 0xdfef },
-  { 5943, 0xc00b }, { 5948, 0xedbf }, { 5961, 0xfedf }, { 5975, 0xfdcd },
-  { 5987, 0x7bf5 }, { 5999, 0x40fd }, { 6007, 0xffff }, { 6023, 0xb75f },
-  { 6035, 0xffdf }, { 6050, 0xf930 }, { 6058, 0xfbdf }, { 6072, 0xdc97 },
-  /* 0x7000 */
-  { 6082, 0xfef3 }, { 6095, 0xbff2 }, { 6107, 0x8fdf }, { 6119, 0xdfbf },
-  { 6133, 0x177f }, { 6144, 0xede6 }, { 6155, 0x0f7f }, { 6166, 0x3553 },
-  { 6174, 0x447c }, { 6181, 0x877e }, { 6191, 0xfa12 }, { 6199, 0x45bb },
-  { 6208, 0xede0 }, { 6217, 0x779e }, { 6228, 0x8017 }, { 6233, 0xbfd9 },
-  /* 0x7100 */
-  { 6245, 0x7e55 }, { 6255, 0xde89 }, { 6264, 0xc16f }, { 6273, 0x0447 },
-  { 6278, 0x7ade }, { 6289, 0xf75d }, { 6301, 0x57ff }, { 6314, 0x2905 },
-  { 6319, 0x86f7 }, { 6329, 0xfe95 }, { 6340, 0x97b3 }, { 6350, 0xf32f },
-  { 6361, 0xcfff }, { 6375, 0x9f75 }, { 6386, 0x71f7 }, { 6397, 0xfb17 },
-  /* 0x7200 */
-  { 6408, 0x34ee }, { 6417, 0xee19 }, { 6426, 0x37cc }, { 6435, 0xef61 },
-  { 6445, 0x9fd6 }, { 6456, 0xef4c }, { 6466, 0xd68f }, { 6476, 0xfbdd },
-  { 6489, 0x7b73 }, { 6500, 0x6def }, { 6512, 0xd7fe }, { 6525, 0xa431 },
-  { 6531, 0x5e7f }, { 6543, 0x97d7 }, { 6554, 0x0f5b }, { 6563, 0xffd8 },
-  /* 0x7300 */
-  { 6575, 0x9d83 }, { 6583, 0x7bce }, { 6594, 0x22ec }, { 6601, 0xdcff },
-  { 6614, 0x763d }, { 6624, 0xef87 }, { 6635, 0xdfe7 }, { 6648, 0xfded },
-  { 6661, 0x4fff }, { 6674, 0xa0fc }, { 6682, 0x3b77 }, { 6693, 0xdbfc },
-  { 6705, 0x3ded }, { 6716, 0x7fdc }, { 6728, 0x6fa9 }, { 6738, 0xf570 },
-  /* 0x7400 */
-  { 6747, 0x3ffb }, { 6760, 0x2c40 }, { 6764, 0xff7f }, { 6779, 0x847f },
-  { 6788, 0xec57 }, { 6798, 0xdeb7 }, { 6810, 0xe69c }, { 6819, 0xf22f },
-  { 6829, 0x0feb }, { 6839, 0xd5b5 }, { 6849, 0xafeb }, { 6861, 0xede7 },
-  { 6873, 0x8c2f }, { 6881, 0xfff0 }, { 6893, 0x537f }, { 6904, 0xe8f0 },
-  /* 0x7500 */
-  { 6912, 0xb99d }, { 6922, 0xb5ff }, { 6935, 0xff66 }, { 6947, 0xe78f },
-  { 6958, 0xd981 }, { 6965, 0xbe10 }, { 6972, 0x9c7c }, { 6981, 0xe3c1 },
-  { 6989, 0x9cd1 }, { 6997, 0x2733 }, { 7005, 0x0cbc }, { 7012, 0xff6d },
-  { 7025, 0xfcb7 }, { 7037, 0xefb7 }, { 7050, 0xa0df }, { 7059, 0xffff },
-  /* 0x7600 */
-  { 7075, 0xbf0b }, { 7085, 0xfe7b }, { 7098, 0xa3ff }, { 7110, 0x353f },
-  { 7120, 0x13cc }, { 7127, 0x97cd }, { 7137, 0x7637 }, { 7147, 0xfb27 },
-  { 7158, 0xcfd6 }, { 7169, 0x7e6c }, { 7179, 0xec50 }, { 7186, 0xed31 },
-  { 7195, 0x677c }, { 7205, 0xfc1c }, { 7214, 0xf6fa }, { 7226, 0x5fbf },
-  /* 0x7700 */
-  { 7239, 0x0fba }, { 7248, 0xae2f }, { 7258, 0xa3ad }, { 7267, 0x7ffe },
-  { 7281, 0xfcf0 }, { 7291, 0xde74 }, { 7301, 0xffef }, { 7316, 0xf200 },
-  { 7321, 0xfbbf }, { 7335, 0xfea2 }, { 7345, 0x3daf }, { 7356, 0xbcff },
-  { 7369, 0xf694 }, { 7378, 0x5fb9 }, { 7389, 0xf3ad }, { 7400, 0x3f8f },
-  /* 0x7800 */
-  { 7411, 0xf26c }, { 7420, 0xa01f }, { 7427, 0xffef }, { 7442, 0x01bf },
-  { 7450, 0x7728 }, { 7458, 0x7005 }, { 7463, 0xff35 }, { 7475, 0xda03 },
-  { 7482, 0xd2f9 }, { 7492, 0xc7fa }, { 7503, 0x3fbf }, { 7516, 0x5c1d },
-  { 7524, 0xff3a }, { 7536, 0xec33 }, { 7545, 0xb7af }, { 7557, 0xfe9c },
-  /* 0x7900 */
-  { 7568, 0x5236 }, { 7575, 0x7a9f }, { 7586, 0xbffa }, { 7599, 0xe722 },
-  { 7607, 0x9ff7 }, { 7620, 0xfcff }, { 7634, 0x2fbb }, { 7645, 0xb61d },
-  { 7654, 0xed06 }, { 7662, 0x1dfd }, { 7673, 0x7dd7 }, { 7685, 0xefdf },
-  { 7699, 0xeb23 }, { 7708, 0xf166 }, { 7717, 0x7ed9 }, { 7728, 0x0dc0 },
-  /* 0x7a00 */
-  { 7733, 0x3d3d }, { 7743, 0xdfbf }, { 7757, 0xc945 }, { 7764, 0xba83 },
-  { 7772, 0x7dd1 }, { 7782, 0x9dd0 }, { 7790, 0x7b87 }, { 7800, 0xcf73 },
-  { 7811, 0x9ff3 }, { 7823, 0xc3f5 }, { 7833, 0xdf0d }, { 7843, 0xc5fe },
-  { 7854, 0x0cb3 }, { 7861, 0x8302 }, { 7865, 0xe879 }, { 7874, 0xaec0 },
-  /* 0x7b00 */
-  { 7881, 0xc773 }, { 7891, 0x6f0f }, { 7901, 0xfd7d }, { 7914, 0x093f },
-  { 7922, 0xfff1 }, { 7935, 0x0157 }, { 7941, 0x62fb }, { 7951, 0x01ff },
-  { 7960, 0xfdb4 }, { 7971, 0x3bf3 }, { 7982, 0xb013 }, { 7988, 0x43b2 },
-  { 7995, 0x5ed3 }, { 8005, 0xff30 }, { 8015, 0x0fff }, { 8027, 0xeb9f },
-  /* 0x7c00 */
-  { 8039, 0xfeef }, { 8053, 0xf203 }, { 8060, 0x3fef }, { 8073, 0xfb89 },
-  { 8083, 0x37a9 }, { 8092, 0x9e99 }, { 8101, 0xdef9 }, { 8113, 0xa72c },
-  { 8121, 0x3733 }, { 8130, 0xc1f6 }, { 8139, 0x812e }, { 8145, 0xfe3e },
-  { 8157, 0x5d20 }, { 8163, 0xf2f7 }, { 8175, 0xd585 }, { 8183, 0x69d7 },
-  /* 0x7d00 */
-  { 8193, 0xffff }, { 8209, 0xffff }, { 8225, 0xdb07 }, { 8234, 0xff6f },
-  { 8248, 0xc4ff }, { 8259, 0xd97f }, { 8271, 0xefce }, { 8283, 0xbe0f },
-  { 8293, 0xf17b }, { 8304, 0xf05e }, { 8313, 0xf6cf }, { 8325, 0xffb7 },
-  { 8339, 0x5ef7 }, { 8351, 0xef84 }, { 8360, 0xd7cb }, { 8371, 0x0edf },
-  /* 0x7e00 */
-  { 8381, 0xff08 }, { 8390, 0xfcff }, { 8404, 0xee3f }, { 8416, 0xffff },
-  { 8432, 0x13ff }, { 8443, 0xd7ff }, { 8457, 0xaf0f }, { 8467, 0x7ffd },
-  { 8481, 0xbdc7 }, { 8492, 0x1ffa }, { 8503, 0x0000 }, { 8503, 0x0000 },
-  { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 },
-  /* 0x7f00 */
-  { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0xe740 },
-  { 8510, 0xbd38 }, { 8519, 0xf933 }, { 8529, 0x7feb }, { 8542, 0xfeed },
-  { 8555, 0x7fe8 }, { 8566, 0x7c76 }, { 8576, 0xb3f7 }, { 8588, 0xffef },
-  { 8603, 0xfeaf }, { 8616, 0xd8b7 }, { 8626, 0xff6f }, { 8640, 0xfbbf },
-  /* 0x8000 */
-  { 8654, 0xf8fb }, { 8666, 0xdbf7 }, { 8679, 0x1752 }, { 8686, 0xe2f9 },
-  { 8696, 0x85c8 }, { 8702, 0x7547 }, { 8711, 0x9090 }, { 8715, 0xe3ef },
-  { 8727, 0x9ef4 }, { 8737, 0x3f6d }, { 8748, 0xee2e }, { 8758, 0x0536 },
-  { 8764, 0xf7bc }, { 8776, 0x7ff3 }, { 8789, 0xa07b }, { 8797, 0x7f3f },
-  /* 0x8100 */
-  { 8810, 0x0567 }, { 8817, 0xeb60 }, { 8825, 0xbabe }, { 8836, 0x6601 },
-  { 8841, 0xfcd8 }, { 8851, 0x583f }, { 8860, 0xcaf7 }, { 8871, 0x87df },
-  { 8882, 0xbfcd }, { 8894, 0xffa0 }, { 8904, 0x5bcd }, { 8914, 0xfebf },
-  { 8928, 0xb6fd }, { 8940, 0xefa7 }, { 8952, 0x77ef }, { 8965, 0xdf9c },
-  /* 0x8200 */
-  { 8976, 0x3fb7 }, { 8988, 0xf877 }, { 8999, 0x9d27 }, { 9008, 0xb7fc },
-  { 9020, 0xcab5 }, { 9029, 0xdfef }, { 9043, 0xfb5a }, { 9054, 0xf1b6 },
-  { 9064, 0xec39 }, { 9073, 0xef1f }, { 9085, 0xfbbf }, { 9099, 0x7ffb },
-  { 9113, 0x000d }, { 9116, 0xdafe }, { 9128, 0xbdfb }, { 9141, 0x4e7f },
-  /* 0x8300 */
-  { 9152, 0x33ff }, { 9164, 0x5ac0 }, { 9170, 0xbff5 }, { 9183, 0x9ffe },
-  { 9196, 0xffbf }, { 9211, 0x005f }, { 9217, 0x0000 }, { 9217, 0xfdf8 },
-  { 9229, 0xffca }, { 9241, 0x6ffd }, { 9254, 0xcffd }, { 9267, 0xa001 },
-  { 9270, 0xdfff }, { 9285, 0xfbf2 }, { 9297, 0xdfbf }, { 9311, 0xff7f },
-  /* 0x8400 */
-  { 9326, 0xfeda }, { 9338, 0x080f }, { 9343, 0xba08 }, { 9349, 0xbfff },
-  { 9364, 0x7afd }, { 9376, 0xeed7 }, { 9388, 0xfbeb }, { 9401, 0x67f9 },
-  { 9412, 0xe044 }, { 9417, 0xff93 }, { 9429, 0xdf97 }, { 9441, 0x9f57 },
-  { 9452, 0xfef7 }, { 9466, 0x08df }, { 9474, 0xdf80 }, { 9482, 0xfedf },
-  /* 0x8500 */
-  { 9496, 0xffc5 }, { 9508, 0xf7fe }, { 9522, 0xfffb }, { 9537, 0x6803 },
-  { 9542, 0x67fb }, { 9554, 0x6bfa }, { 9565, 0x7fff }, { 9580, 0x5fe2 },
-  { 9590, 0xffff }, { 9606, 0xff73 }, { 9619, 0x87df }, { 9630, 0xe7fb },
-  { 9643, 0xebfd }, { 9656, 0xf7a7 }, { 9668, 0xbf7e }, { 9681, 0xefc7 },
-  /* 0x8600 */
-  { 9693, 0x1ef3 }, { 9703, 0xdf82 }, { 9712, 0x76ff }, { 9725, 0xdf7e },
-  { 9738, 0x79c9 }, { 9747, 0xda7d }, { 9758, 0xefbe }, { 9771, 0x1e9b },
-  { 9780, 0x7ce0 }, { 9788, 0x77fb }, { 9801, 0x87be }, { 9811, 0xfffb },
-  { 9826, 0x1bff }, { 9838, 0xffdb }, { 9852, 0x3f5c }, { 9862, 0x4fe0 },
-  /* 0x8700 */
-  { 9870, 0x7fff }, { 9885, 0x5f0e }, { 9894, 0x77ff }, { 9908, 0xddbf },
-  { 9921, 0xf04f }, { 9930, 0xffff }, { 9946, 0xffff }, { 9962, 0x0ff8 },
-  { 9971, 0xa3be }, { 9981, 0xfddf }, { 9995, 0xfc1c }, { 10004, 0xfffd },
-  { 10019, 0x1f7d }, { 10030, 0xfb9e }, { 10042, 0xbdff }, { 10056, 0xdedc },
-  /* 0x8800 */
-  { 10067, 0x3f6f }, { 10079, 0xbafb }, { 10091, 0xdf7f }, { 10105, 0xfbef },
-  { 10119, 0x7d1b }, { 10129, 0x2eec }, { 10138, 0xaf8e }, { 10148, 0xf2f7 },
-  { 10160, 0x7b0f }, { 10170, 0xcfee }, { 10182, 0x1d96 }, { 10190, 0x77c6 },
-  { 10200, 0x7e07 }, { 10209, 0xfff5 }, { 10223, 0xd982 }, { 10230, 0x7fdf },
-  /* 0x8900 */
-  { 10244, 0x5ee6 }, { 10254, 0xc7ff }, { 10267, 0xfeee }, { 10280, 0x79ef },
-  { 10292, 0x9a56 }, { 10300, 0xffcf }, { 10314, 0xfe5f }, { 10327, 0xde5e },
-  { 10338, 0x896e }, { 10346, 0xf9e8 }, { 10356, 0xf45e }, { 10366, 0xe6c4 },
-  { 10374, 0x0001 }, { 10375, 0xbe7c }, { 10386, 0x3b7f }, { 10398, 0xdddf },
-  /* 0x8a00 */
-  { 10411, 0xd59d }, { 10421, 0xe9ef }, { 10433, 0x34ac }, { 10440, 0xde53 },
-  { 10450, 0xf573 }, { 10461, 0x4bf7 }, { 10472, 0x7b4f }, { 10483, 0x9eff },
-  { 10496, 0xb8fe }, { 10507, 0x476e }, { 10516, 0x0dfb }, { 10526, 0xff45 },
-  { 10537, 0xabfd }, { 10549, 0xfbfe }, { 10563, 0xe9d7 }, { 10574, 0xddff },
-  /* 0x8b00 */
-  { 10588, 0xedf7 }, { 10601, 0x7fff }, { 10616, 0xddfd }, { 10629, 0x7eeb },
-  { 10641, 0xcfe7 }, { 10653, 0xb7ff }, { 10667, 0xbde9 }, { 10678, 0xef91 },
-  { 10688, 0x5d75 }, { 10698, 0xd77c }, { 10709, 0x0000 }, { 10709, 0x0000 },
-  { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 },
-  /* 0x8c00 */
-  { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0xfa80 },
-  { 10716, 0xffee }, { 10730, 0xb4f1 }, { 10739, 0xbf76 }, { 10751, 0x2fef },
-  { 10763, 0xb677 }, { 10774, 0x77bf }, { 10787, 0x9fbf }, { 10800, 0xfffd },
-  { 10815, 0x95bf }, { 10826, 0xf6ae }, { 10837, 0x75ff }, { 10850, 0x7f3b },
-  /* 0x8d00 */
-  { 10862, 0xa7f5 }, { 10873, 0x0af9 }, { 10881, 0x0000 }, { 10881, 0x0000 },
-  { 10881, 0x0000 }, { 10881, 0x0000 }, { 10881, 0xfbd0 }, { 10891, 0x2bdd },
-  { 10901, 0xf633 }, { 10911, 0x9a7f }, { 10922, 0xfdab }, { 10934, 0xd6fc },
-  { 10945, 0xf9e6 }, { 10956, 0xbfeb }, { 10969, 0xdfdf }, { 10983, 0xf41f },
-  /* 0x8e00 */
-  { 10993, 0xa6fd }, { 11004, 0xffff }, { 11020, 0x4aff }, { 11031, 0xf37b },
-  { 11043, 0x7fb7 }, { 11056, 0xfef9 }, { 11069, 0xb6ff }, { 11082, 0x1d5c },
-  { 11090, 0x7ff6 }, { 11103, 0xe5ff }, { 11116, 0x1f7b }, { 11127, 0x2404 },
-  { 11130, 0xbe05 }, { 11138, 0xf99e }, { 11149, 0xdbe3 }, { 11160, 0xdff2 },
-  /* 0x8f00 */
-  { 11172, 0x6fef }, { 11185, 0xfdff }, { 11200, 0xd679 }, { 11210, 0xcbfc },
-  { 11221, 0xebfd }, { 11234, 0xefff }, { 11249, 0x001f }, { 11254, 0x0000 },
-  { 11254, 0x0000 }, { 11254, 0x9800 }, { 11257, 0xe148 }, { 11263, 0x8017 },
-  { 11268, 0x6a74 }, { 11276, 0x00fe }, { 11283, 0x6d7f }, { 11295, 0xfdf1 },
-  /* 0x9000 */
-  { 11307, 0xb87f }, { 11318, 0xfef3 }, { 11331, 0xe01f }, { 11339, 0xf176 },
-  { 11349, 0xee96 }, { 11359, 0x7b3f }, { 11371, 0xeb8d }, { 11381, 0xfffd },
-  { 11396, 0xadff }, { 11409, 0xcbb3 }, { 11419, 0x84ef }, { 11428, 0xe17f },
-  { 11439, 0x4daa }, { 11447, 0xbff0 }, { 11458, 0xbf3f }, { 11471, 0xfe3f },
-  /* 0x9100 */
-  { 11484, 0xebff }, { 11498, 0xffd7 }, { 11512, 0xffdf }, { 11527, 0xcf7f },
-  { 11540, 0xfffb }, { 11555, 0x85ed }, { 11564, 0xd73f }, { 11576, 0x07bc },
-  { 11584, 0xaeff }, { 11597, 0xfe0f }, { 11608, 0xfdaf }, { 11621, 0x76bf },
-  { 11633, 0xfaef }, { 11646, 0x37bb }, { 11657, 0x7fdc }, { 11669, 0xa3ba },
-  /* 0x9200 */
-  { 11678, 0xb6ff }, { 11691, 0x56f7 }, { 11702, 0x60f8 }, { 11709, 0xe7df },
-  { 11722, 0xff61 }, { 11733, 0x4cdf }, { 11743, 0xb0fb }, { 11753, 0xff45 },
-  { 11764, 0x7ded }, { 11776, 0x3ffa }, { 11788, 0x1fff }, { 11801, 0x18fc },
-  { 11809, 0xffff }, { 11825, 0xe3af }, { 11836, 0xc7d3 }, { 11846, 0xdf83 },
-  /* 0x9300 */
-  { 11856, 0xfb57 }, { 11868, 0xef7d }, { 11881, 0xefff }, { 11896, 0x1378 },
-  { 11903, 0xfec0 }, { 11912, 0x5ff7 }, { 11925, 0x34bb }, { 11934, 0x5ee3 },
-  { 11944, 0xf70d }, { 11954, 0xeff6 }, { 11967, 0xd7fe }, { 11980, 0x00bf },
-  { 11987, 0xf59d }, { 11998, 0xf7f7 }, { 12012, 0x51de }, { 12021, 0xffe0 },
-  /* 0x9400 */
-  { 12032, 0xfec9 }, { 12043, 0x037f }, { 12052, 0x5f01 }, { 12059, 0xbfef },
-  { 12073, 0x9ff1 }, { 12084, 0x60a7 }, { 12091, 0xef1d }, { 12102, 0xf1ff },
-  { 12115, 0x000f }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 },
-  { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 },
-  /* 0x9500 */
-  { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 },
-  { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x3c80 },
-  { 12124, 0xfb4d }, { 12135, 0xd91f }, { 12145, 0x7b3a }, { 12155, 0xfee3 },
-  { 12167, 0x3fe9 }, { 12178, 0xdc7f }, { 12190, 0x003f }, { 12196, 0x0000 },
-  /* 0x9600 */
-  { 12196, 0x0000 }, { 12196, 0x5000 }, { 12198, 0xf51f }, { 12209, 0xbe07 },
-  { 12218, 0xfc1d }, { 12228, 0xf91b }, { 12238, 0xbc1e }, { 12247, 0x71ff },
-  { 12259, 0x6ff9 }, { 12271, 0x5bbe }, { 12282, 0x5796 }, { 12291, 0x9b1b },
-  { 12300, 0x7fff }, { 12315, 0xfffc }, { 12329, 0x872e }, { 12337, 0xafe7 },
-  /* 0x9700 */
-  { 12349, 0xebf5 }, { 12361, 0xf34f }, { 12372, 0xdffd }, { 12386, 0xe725 },
-  { 12395, 0x0bdc }, { 12403, 0x5d44 }, { 12410, 0x5747 }, { 12419, 0xfddd },
-  { 12432, 0xed3f }, { 12444, 0x7790 }, { 12452, 0x7d7f }, { 12465, 0x8ac8 },
-  { 12471, 0xfafa }, { 12483, 0xf3f9 }, { 12495, 0x202a }, { 12499, 0xef4b },
-  /* 0x9800 */
-  { 12510, 0xf5ff }, { 12524, 0x79cf }, { 12535, 0xabd3 }, { 12545, 0x0ba5 },
-  { 12552, 0xf77a }, { 12564, 0xfb8f }, { 12576, 0x8ebd }, { 12586, 0x001f },
-  { 12591, 0x0000 }, { 12591, 0x0000 }, { 12591, 0xf300 }, { 12597, 0xfd4e },
-  { 12608, 0x1a57 }, { 12616, 0x8800 }, { 12618, 0xaeac }, { 12627, 0x7654 },
-  /* 0x9900 */
-  { 12635, 0x17ad }, { 12644, 0xcdff }, { 12657, 0xffb2 }, { 12669, 0xf42f },
-  { 12679, 0x5baa }, { 12688, 0xdbff }, { 12702, 0x0002 }, { 12703, 0x0000 },
-  { 12703, 0x0000 }, { 12703, 0x73c0 }, { 12710, 0xf9ea }, { 12721, 0x2e3f },
-  { 12731, 0xfa8e }, { 12741, 0xbbff }, { 12755, 0x76bc }, { 12765, 0xffd3 },
-  /* 0x9a00 */
-  { 12778, 0xeefe }, { 12791, 0x7e72 }, { 12801, 0x7ebd }, { 12813, 0xe7f7 },
-  { 12826, 0xf77f }, { 12840, 0xcefd }, { 12852, 0x0ff5 }, { 12862, 0x0000 },
-  { 12862, 0x0000 }, { 12862, 0x0000 }, { 12862, 0xa900 }, { 12866, 0xdb9b },
-  { 12877, 0xa4c7 }, { 12885, 0x917f }, { 12895, 0xf8ca }, { 12904, 0x7ece },
-  /* 0x9b00 */
-  { 12915, 0x7d7a }, { 12926, 0xc7e7 }, { 12937, 0xcbbd }, { 12948, 0xdcae },
-  { 12958, 0xfd7e }, { 12971, 0x8f76 }, { 12981, 0x91d3 }, { 12989, 0x7cf3 },
-  { 13000, 0x01e5 }, { 13006, 0x4c2f }, { 13014, 0xed77 }, { 13026, 0xa360 },
-  { 13032, 0x07db }, { 13041, 0x5ef8 }, { 13051, 0x1df7 }, { 13062, 0x2181 },
-  /* 0x9c00 */
-  { 13066, 0x6be0 }, { 13074, 0x309c }, { 13080, 0x3b3a }, { 13089, 0xfade },
-  { 13101, 0x7f53 }, { 13112, 0xc3f5 }, { 13122, 0x61cd }, { 13130, 0x07ba },
-  { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x0000 },
-  { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x26e0 }, { 13144, 0xbefe },
-  /* 0x9d00 */
-  { 13157, 0x03f9 }, { 13165, 0xebb5 }, { 13176, 0xe36d }, { 13186, 0xe9cb },
-  { 13196, 0x9c2f }, { 13205, 0xbfde }, { 13218, 0x9f83 }, { 13227, 0xabbf },
-  { 13239, 0x1ff7 }, { 13251, 0xffd5 }, { 13264, 0xb7df }, { 13277, 0xdffe },
-  { 13291, 0xfdae }, { 13303, 0xffef }, { 13318, 0xfb7e }, { 13331, 0xeffd },
-  /* 0x9e00 */
-  { 13345, 0xaaff }, { 13357, 0x6ebf }, { 13369, 0x0000 }, { 13369, 0x0000 },
-  { 13369, 0x0000 }, { 13369, 0x0000 }, { 13369, 0x0000 }, { 13369, 0xb620 },
-  { 13375, 0x7fcd }, { 13387, 0xbe9e }, { 13398, 0x62b3 }, { 13406, 0x58f1 },
-  { 13414, 0xf10d }, { 13422, 0xfd7b }, { 13435, 0xe9f1 }, { 13445, 0xbefd },
-  /* 0x9f00 */
-  { 13458, 0xc6c3 }, { 13466, 0x5f6d }, { 13477, 0xff3d }, { 13490, 0x69ff },
-  { 13502, 0xffcf }, { 13516, 0xfbf4 }, { 13528, 0xdcfb }, { 13540, 0x4ff7 },
-  { 13552, 0x2000 }, { 13553, 0x1137 }, { 13560, 0x0015 },
-};
-static const Summary16 big5_uni2indx_pagefa[1] = {
-  /* 0xfa00 */
-  { 13563, 0x3000 },
-};
-static const Summary16 big5_uni2indx_pagefe[23] = {
-  /* 0xfe00 */
-  { 13565, 0x0000 }, { 13565, 0x0000 }, { 13565, 0x0000 }, { 13565, 0xfffb },
-  { 13580, 0xfe1f }, { 13592, 0xfef5 }, { 13605, 0x0e7f }, { 13615, 0x0000 },
-  { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 },
-  { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 },
-  /* 0xff00 */
-  { 13615, 0xff7a }, { 13628, 0xffff }, { 13644, 0xffff }, { 13660, 0x97ff },
-  { 13673, 0xfffe }, { 13688, 0x3fff }, { 13702, 0x0010 },
-};
-
-static int
-big5_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0100)
-      summary = &big5_uni2indx_page00[(wc>>4)];
-    else if (wc >= 0x0200 && wc < 0x0460)
-      summary = &big5_uni2indx_page02[(wc>>4)-0x020];
-    else if (wc >= 0x2000 && wc < 0x22c0)
-      summary = &big5_uni2indx_page20[(wc>>4)-0x200];
-    else if (wc >= 0x2400 && wc < 0x2650)
-      summary = &big5_uni2indx_page24[(wc>>4)-0x240];
-    else if (wc >= 0x3000 && wc < 0x33e0)
-      summary = &big5_uni2indx_page30[(wc>>4)-0x300];
-    else if (wc >= 0x4e00 && wc < 0x9fb0)
-      summary = &big5_uni2indx_page4e[(wc>>4)-0x4e0];
-    else if (wc >= 0xfa00 && wc < 0xfa10)
-      summary = &big5_uni2indx_pagefa[(wc>>4)-0xfa0];
-    else if (wc >= 0xfe00 && wc < 0xff70)
-      summary = &big5_uni2indx_pagefe[(wc>>4)-0xfe0];
-    if (summary) {
-      unsigned short used = summary->used;
-      unsigned int i = wc & 0x0f;
-      if (used & ((unsigned short) 1 << i)) {
-        unsigned short c;
-        /* Keep in `used' only the bits 0..i-1. */
-        used &= ((unsigned short) 1 << i) - 1;
-        /* Add `summary->indx' and the number of bits set in `used'. */
-        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-        used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-        used = (used & 0x00ff) + (used >> 8);
-        c = big5_2charset[summary->indx + used];
-        r[0] = (c >> 8); r[1] = (c & 0xff);
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/big5_emacs.h b/common/fltk/src/xutf8/lcUniConv/big5_emacs.h
deleted file mode 100644
index 9147553..0000000
--- a/common/fltk/src/xutf8/lcUniConv/big5_emacs.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/big5_emacs.h,v 1.1 2000/11/28 18:50:06 dawes Exp $ */
-
-/*
- * BIG5-0 and BIG5-1
- */
-
-/*
-   BIG5 with its 13494 characters doesn't fit in a single 94x94 or 96x96
-   block. Therefore Emacs/Mule developers, in a typically Japanese way of
-   thinking, have developed an alternative encoding of BIG5 in two 94x94
-   planes, very similar to the SHIFT_JIS encoding for JISX0208.
-
-   Conversion between BIG5 codes (s1,s2) and BIG5-0 codes (c1,c2):
-   Example. (s1,s2) = 0xA140, (c1,c2) = 0x2121.
-   0xA1 <= s1 <= 0xC7, 0x40 <= s2 <= 0x7E || 0xA1 <= s2 <= 0xFE,
-   0x21 <= c1 <= 0x62, 0x21 <= c2 <= 0x7E.
-   Invariant:
-     157*(s1-0xA1) + (s2 < 0x80 ? s2-0x40 : s2-0x62)
-     = 94*(c1-0x21)+(c2-0x21)
-   Conversion (s1,s2) -> (c1,c2):
-     t := 157*(s1-0xA1) + (s2 < 0x80 ? s2-0x40 : s2-0x62)
-     c1 := (t div 94) + 0x21
-     c2 := (t mod 94) + 0x21
-   Conversion (c1,c2) -> (s1,s2):
-     t := 94*(c1-0x21)+(c2-0x21)
-     t2 := t mod 157
-     s1 := (t div 157) + 0xA1
-     s2 := (t2 < 0x3F ? t2+0x40 : t2+0x62)
-
-   Conversion between BIG5 codes (s1,s2) and BIG5-1 codes (c1,c2):
-   Example. (s1,s2) = 0xC940, (c1,c2) = 0x2121.
-   0xC9 <= s1 <= 0xF9, 0x40 <= s2 <= 0x7E || 0xA1 <= s2 <= 0xFE,
-   0x21 <= c1 <= 0x72, 0x21 <= c2 <= 0x7E.
-   Invariant:
-     157*(s1-0xC9) + (s2 < 0x80 ? s2-0x40 : s2-0x62)
-     = 94*(c1-0x21)+(c2-0x21)
-   Conversion (s1,s2) -> (c1,c2):
-     t := 157*(s1-0xC9) + (s2 < 0x80 ? s2-0x40 : s2-0x62)
-     c1 := (t div 94) + 0x21
-     c2 := (t mod 94) + 0x21
-   Conversion (c1,c2) -> (s1,s2):
-     t := 94*(c1-0x21)+(c2-0x21)
-     t2 := t mod 157
-     s1 := (t div 157) + 0xC9
-     s2 := (t2 < 0x3F ? t2+0x40 : t2+0x62)
- */
-
-static int
-big5_0_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = s[0];
-  if (c1 >= 0x21 && c1 <= 0x62) {
-    if (n >= 2) {
-      unsigned char c2 = s[1];
-      if (c2 >= 0x21 && c2 <= 0x7e) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        if (0) {
-          /* Unoptimized. */
-          unsigned char buf[2];
-          buf[0] = (i / 157) + 0xa1;
-          i = i % 157;
-          buf[1] = i + (i < 0x3f ? 0x40 : 0x62);
-          return big5_mbtowc(conv,pwc,buf,2);
-        } else {
-          /* Inline the implementation of big5_mbtowc. */
-          if (i < 6121) {
-            unsigned short wc = big5_2uni_pagea1[i];
-            if (wc != 0xfffd) {
-              *pwc = (ucs4_t) wc;
-              return 2;
-            }
-          }
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-
-static int
-big5_1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = s[0];
-  if (c1 >= 0x21 && c1 <= 0x72) {
-    if (n >= 2) {
-      unsigned char c2 = s[1];
-      if (c2 >= 0x21 && c2 <= 0x7e) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        if (0) {
-          /* Unoptimized. */
-          unsigned char buf[2];
-          buf[0] = (i / 157) + 0xc9;
-          i = i % 157;
-          buf[1] = i + (i < 0x3f ? 0x40 : 0x62);
-          return big5_mbtowc(conv,pwc,buf,2);
-        } else {
-          /* Inline the implementation of big5_mbtowc. */
-          if (i < 7652) {
-            unsigned short wc = big5_2uni_pagec9[i];
-            if (wc != 0xfffd) {
-              *pwc = (ucs4_t) wc;
-              return 2;
-            }
-          }
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-
-static int
-big5_0_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    unsigned char buf[2];
-    int ret = big5_wctomb(conv,buf,wc,2);
-    if (ret != RET_ILSEQ) {
-      unsigned char s1, s2;
-      if (ret != 2) abort();
-      s1 = buf[0];
-      s2 = buf[1];
-      if (!(s1 >= 0xa1)) abort();
-      if (!((s2 >= 0x40 && s2 <= 0x7e) || (s2 >= 0xa1 && s2 <= 0xfe))) abort();
-      if (s1 < 0xc9) {
-        unsigned int t = 157 * (s1 - 0xa1) + s2 - (s2 < 0x80 ? 0x40 : 0x62);
-        r[0] = (t / 94) + 0x21;
-        r[1] = (t % 94) + 0x21;
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-
-static int
-big5_1_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    unsigned char buf[2];
-    int ret = big5_wctomb(conv,buf,wc,2);
-    if (ret != RET_ILSEQ) {
-      unsigned char s1, s2;
-      if (ret != 2) abort();
-      s1 = buf[0];
-      s2 = buf[1];
-      if (!(s1 <= 0xf9)) abort();
-      if (!((s2 >= 0x40 && s2 <= 0x7e) || (s2 >= 0xa1 && s2 <= 0xfe))) abort();
-      if (s1 >= 0xc9) {
-        unsigned int t = 157 * (s1 - 0xc9) + s2 - (s2 < 0x80 ? 0x40 : 0x62);
-        r[0] = (t / 94) + 0x21;
-        r[1] = (t % 94) + 0x21;
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/cjk_tab_to_h.c b/common/fltk/src/xutf8/lcUniConv/cjk_tab_to_h.c
deleted file mode 100644
index 1335fae..0000000
--- a/common/fltk/src/xutf8/lcUniConv/cjk_tab_to_h.c
+++ /dev/null
@@ -1,1025 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cjk_tab_to_h.c,v 1.2 2000/12/04 18:49:31 dawes Exp $ */
-
-/*
- * Generates a CJK character set table from a .TXT table as found on
- * ftp.unicode.org or in the X nls directory.
- * Examples:
- *
- *   ./cjk_tab_to_h GB2312.1980-0 gb2312 > gb2312.h < gb2312
- *   ./cjk_tab_to_h JISX0208.1983-0 jisx0208 > jisx0208.h < jis0208
- *   ./cjk_tab_to_h KSC5601.1987-0 ksc5601 > ksc5601.h < ksc5601
- *
- *   ./cjk_tab_to_h GB2312.1980-0 gb2312 > gb2312.h < GB2312.TXT
- *   ./cjk_tab_to_h JISX0208.1983-0 jisx0208 > jisx0208.h < JIS0208.TXT
- *   ./cjk_tab_to_h JISX0212.1990-0 jisx0212 > jisx0212.h < JIS0212.TXT
- *   ./cjk_tab_to_h KSC5601.1987-0 ksc5601 > ksc5601.h < KSC5601.TXT
- *   ./cjk_tab_to_h KSX1001.1992-0 ksc5601 > ksc5601.h < KSX1001.TXT
- *
- *   ./cjk_tab_to_h BIG5 big5 > big5.h < BIG5.TXT
- *
- *   ./cjk_tab_to_h JOHAB johab > johab.h < JOHAB.TXT
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-
-typedef struct {
-  int start;
-  int end;
-} Block;
-
-typedef struct {
-  int rows;    /* number of possible values for the 1st byte */
-  int cols;    /* number of possible values for the 2nd byte */
-  int (*row_byte) (int row); /* returns the 1st byte value for a given row */
-  int (*col_byte) (int col); /* returns the 2nd byte value for a given col */
-  int (*byte_row) (int byte); /* converts a 1st byte value to a row, else -1 */
-  int (*byte_col) (int byte); /* converts a 2nd byte value to a col, else -1 */
-  const char* check_row_expr; /* format string for 1st byte value checking */
-  const char* check_col_expr; /* format string for 2nd byte value checking */
-  const char* byte_row_expr; /* format string for 1st byte value to row */
-  const char* byte_col_expr; /* format string for 2nd byte value to col */
-  int** charset2uni; /* charset2uni[0..rows-1][0..cols-1] is valid */
-  /* You'll understand the terms "row" and "col" when you buy Ken Lunde's book.
-     Once a row is fixed, choosing a "col" is the same as choosing a "cell". */
-  int* charsetpage; /* charsetpage[0..rows]: how large is a page for a row */
-  int ncharsetblocks;
-  Block* charsetblocks; /* blocks[0..nblocks-1] */
-  int* uni2charset; /* uni2charset[0x0000..0xffff] */
-} Encoding;
-
-/*
- * Outputs the file title.
- */
-static void output_title (const char *charsetname)
-{
-  printf("\n");
-  printf("/*\n");
-  printf(" * %s\n", charsetname);
-  printf(" */\n");
-  printf("\n");
-}
-
-/*
- * Reads the charset2uni table from standard input.
- */
-static void read_table (Encoding* enc)
-{
-  int row, col, i, i1, i2, c, j;
-
-  enc->charset2uni = (int**) malloc(enc->rows*sizeof(int*));
-  for (row = 0; row < enc->rows; row++)
-    enc->charset2uni[row] = (int*) malloc(enc->cols*sizeof(int));
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++)
-      enc->charset2uni[row][col] = 0xfffd;
-
-  c = getc(stdin);
-  ungetc(c,stdin);
-  if (c == '#') {
-    /* Read a unicode.org style .TXT file. */
-    for (;;) {
-      c = getc(stdin);
-      if (c == EOF)
-        break;
-      if (c == '\n' || c == ' ' || c == '\t')
-        continue;
-      if (c == '#') {
-        do { c = getc(stdin); } while (!(c == EOF || c == '\n'));
-        continue;
-      }
-      ungetc(c,stdin);
-      if (scanf("0x%x", &j) != 1)
-        exit(1);
-      i1 = j >> 8;
-      i2 = j & 0xff;
-      row = enc->byte_row(i1);
-      col = enc->byte_col(i2);
-      if (row < 0 || col < 0) {
-        fprintf(stderr, "lost entry for %02x %02x\n", i1, i2);
-        exit(1);
-      }
-      if (scanf(" 0x%x", &enc->charset2uni[row][col]) != 1)
-        exit(1);
-    }
-  } else {
-    /* Read a table of hexadecimal Unicode values. */
-    for (i1 = 32; i1 < 132; i1++)
-      for (i2 = 32; i2 < 132; i2++) {
-        i = scanf("%x", &j);
-        if (i == EOF)
-          goto read_done;
-        if (i != 1)
-          exit(1);
-        if (j < 0 || j == 0xffff)
-          j = 0xfffd;
-        if (j != 0xfffd) {
-          if (enc->byte_row(i1) < 0 || enc->byte_col(i2) < 0) {
-            fprintf(stderr, "lost entry at %02x %02x\n", i1, i2);
-            exit (1);
-          }
-          enc->charset2uni[enc->byte_row(i1)][enc->byte_col(i2)] = j;
-        }
-      }
-   read_done: ;
-  }
-}
-
-/*
- * Computes the charsetpage[0..rows] array.
- */
-static void find_charset2uni_pages (Encoding* enc)
-{
-  int row, col;
-
-  enc->charsetpage = (int*) malloc((enc->rows+1)*sizeof(int));
-
-  for (row = 0; row <= enc->rows; row++)
-    enc->charsetpage[row] = 0;
-
-  for (row = 0; row < enc->rows; row++) {
-    int used = 0;
-    for (col = 0; col < enc->cols; col++)
-      if (enc->charset2uni[row][col] != 0xfffd)
-        used = col+1;
-    enc->charsetpage[row] = used;
-  }
-}
-
-/*
- * Fills in nblocks and blocks.
- */
-static void find_charset2uni_blocks (Encoding* enc)
-{
-  int n, row, lastrow;
-
-  enc->charsetblocks = (Block*) malloc(enc->rows*sizeof(Block));
-
-  n = 0;
-  for (row = 0; row < enc->rows; row++)
-    if (enc->charsetpage[row] > 0 && (row == 0 || enc->charsetpage[row-1] == 0)) {
-      for (lastrow = row; enc->charsetpage[lastrow+1] > 0; lastrow++);
-      enc->charsetblocks[n].start = row * enc->cols;
-      enc->charsetblocks[n].end = lastrow * enc->cols + enc->charsetpage[lastrow];
-      n++;
-    }
-  enc->ncharsetblocks = n;
-}
-
-/*
- * Outputs the charset to unicode table and function.
- */
-static void output_charset2uni (const char* name, Encoding* enc)
-{
-  int row, col, lastrow, col_max, i, i1_min, i1_max;
-
-  find_charset2uni_pages(enc);
-
-  find_charset2uni_blocks(enc);
-
-  for (row = 0; row < enc->rows; row++)
-    if (enc->charsetpage[row] > 0) {
-      if (row == 0 || enc->charsetpage[row-1] == 0) {
-        /* Start a new block. */
-        for (lastrow = row; enc->charsetpage[lastrow+1] > 0; lastrow++);
-        printf("static const unsigned short %s_2uni_page%02x[%d] = {\n",
-               name, enc->row_byte(row),
-               (lastrow-row) * enc->cols + enc->charsetpage[lastrow]);
-      }
-      printf("  /""* 0x%02x *""/\n ", enc->row_byte(row));
-      col_max = (enc->charsetpage[row+1] > 0 ? enc->cols : enc->charsetpage[row]);
-      for (col = 0; col < col_max; col++) {
-        printf(" 0x%04x,", enc->charset2uni[row][col]);
-        if ((col % 8) == 7 && (col+1 < col_max)) printf("\n ");
-      }
-      printf("\n");
-      if (enc->charsetpage[row+1] == 0) {
-        /* End a block. */
-        printf("};\n");
-      }
-    }
-  printf("\n");
-
-  printf("static int\n");
-  printf("%s_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)\n", name);
-  printf("{\n");
-  printf("  unsigned char c1 = s[0];\n");
-  printf("  if (");
-  for (i = 0; i < enc->ncharsetblocks; i++) {
-    i1_min = enc->row_byte(enc->charsetblocks[i].start / enc->cols);
-    i1_max = enc->row_byte((enc->charsetblocks[i].end-1) / enc->cols);
-    if (i > 0)
-      printf(" || ");
-    if (i1_min == i1_max)
-      printf("(c1 == 0x%02x)", i1_min);
-    else
-      printf("(c1 >= 0x%02x && c1 <= 0x%02x)", i1_min, i1_max);
-  }
-  printf(") {\n");
-  printf("    if (n >= 2) {\n");
-  printf("      unsigned char c2 = s[1];\n");
-  printf("      if (");
-  printf(enc->check_col_expr, "c2");
-  printf(") {\n");
-  printf("        unsigned int i = %d * (", enc->cols);
-  printf(enc->byte_row_expr, "c1");
-  printf(") + (");
-  printf(enc->byte_col_expr, "c2");
-  printf(");\n");
-  printf("        unsigned short wc = 0xfffd;\n");
-  for (i = 0; i < enc->ncharsetblocks; i++) {
-    printf("        ");
-    if (i > 0)
-      printf("} else ");
-    if (i < enc->ncharsetblocks-1)
-      printf("if (i < %d) ", enc->charsetblocks[i+1].start);
-    printf("{\n");
-    printf("          if (i < %d)\n", enc->charsetblocks[i].end);
-    printf("            wc = %s_2uni_page%02x[i", name, enc->row_byte(enc->charsetblocks[i].start / enc->cols));
-    if (enc->charsetblocks[i].start > 0)
-      printf("-%d", enc->charsetblocks[i].start);
-    printf("];\n");
-  }
-  printf("        }\n");
-  printf("        if (wc != 0xfffd) {\n");
-  printf("          *pwc = (ucs4_t) wc;\n");
-  printf("          return 2;\n");
-  printf("        }\n");
-  printf("      }\n");
-  printf("      return RET_ILSEQ;\n");
-  printf("    }\n");
-  printf("    return RET_TOOFEW(0);\n");
-  printf("  }\n");
-  printf("  return RET_ILSEQ;\n");
-  printf("}\n");
-  printf("\n");
-}
-
-/*
- * Computes the uni2charset[0x0000..0xffff] array.
- */
-static void invert (Encoding* enc)
-{
-  int row, col, j;
-
-  enc->uni2charset = (int*) malloc(0x10000*sizeof(int));
-
-  for (j = 0; j < 0x10000; j++)
-    enc->uni2charset[j] = 0;
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        enc->uni2charset[j] = 0x100 * enc->row_byte(row) + enc->col_byte(col);
-    }
-}
-
-/*
- * Outputs the unicode to charset table and function, using a linear array.
- * (Suitable if the table is dense.)
- */
-static void output_uni2charset_dense (const char* name, Encoding* enc)
-{
-  /* Like in 8bit_tab_to_h.c */
-  bool pages[0x100];
-  int line[0x2000];
-  int tableno;
-  struct { int minline; int maxline; int usecount; } tables[0x2000];
-  bool first;
-  int row, col, j, p, j1, j2, t;
-
-  for (p = 0; p < 0x100; p++)
-    pages[p] = false;
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        pages[j>>8] = true;
-    }
-  for (j1 = 0; j1 < 0x2000; j1++) {
-    bool all_invalid = true;
-    for (j2 = 0; j2 < 8; j2++) {
-      j = 8*j1+j2;
-      if (enc->uni2charset[j] != 0)
-        all_invalid = false;
-    }
-    if (all_invalid)
-      line[j1] = -1;
-    else
-      line[j1] = 0;
-  }
-  tableno = 0;
-  for (j1 = 0; j1 < 0x2000; j1++) {
-    if (line[j1] >= 0) {
-      if (tableno > 0
-          && ((j1 > 0 && line[j1-1] == tableno-1)
-              || ((tables[tableno-1].maxline >> 5) == (j1 >> 5)
-                  && j1 - tables[tableno-1].maxline <= 8))) {
-        line[j1] = tableno-1;
-        tables[tableno-1].maxline = j1;
-      } else {
-        tableno++;
-        line[j1] = tableno-1;
-        tables[tableno-1].minline = tables[tableno-1].maxline = j1;
-      }
-    }
-  }
-  for (t = 0; t < tableno; t++) {
-    tables[t].usecount = 0;
-    j1 = 8*tables[t].minline;
-    j2 = 8*(tables[t].maxline+1);
-    for (j = j1; j < j2; j++)
-      if (enc->uni2charset[j] != 0)
-        tables[t].usecount++;
-  }
-  {
-    p = -1;
-    for (t = 0; t < tableno; t++)
-      if (tables[t].usecount > 1) {
-        p = tables[t].minline >> 5;
-        printf("static const unsigned short %s_page%02x[%d] = {\n", name, p, 8*(tables[t].maxline-tables[t].minline+1));
-        for (j1 = tables[t].minline; j1 <= tables[t].maxline; j1++) {
-          if ((j1 % 0x20) == 0 && j1 > tables[t].minline)
-            printf("  /* 0x%04x */\n", 8*j1);
-          printf(" ");
-          for (j2 = 0; j2 < 8; j2++) {
-            j = 8*j1+j2;
-            printf(" 0x%04x,", enc->uni2charset[j]);
-          }
-          printf(" /*0x%02x-0x%02x*/\n", 8*(j1 % 0x20), 8*(j1 % 0x20)+7);
-        }
-        printf("};\n");
-      }
-    if (p >= 0)
-      printf("\n");
-  }
-  printf("static int\n%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", name);
-  printf("{\n");
-  printf("  if (n >= 2) {\n");
-  printf("    unsigned short c = 0;\n");
-  first = true;
-  for (j1 = 0; j1 < 0x2000;) {
-    t = line[j1];
-    for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++);
-    if (t >= 0) {
-      if (j1 != tables[t].minline) abort();
-      if (j2 > tables[t].maxline+1) abort();
-      j2 = tables[t].maxline+1;
-      if (first)
-        printf("    ");
-      else
-        printf("    else ");
-      first = false;
-      if (tables[t].usecount == 0) abort();
-      if (tables[t].usecount == 1) {
-        if (j2 != j1+1) abort();
-        for (j = 8*j1; j < 8*j2; j++)
-          if (enc->uni2charset[j] != 0) {
-            printf("if (wc == 0x%04x)\n      c = 0x%02x;\n", j, enc->uni2charset[j]);
-            break;
-          }
-      } else {
-        if (j1 == 0) {
-          printf("if (wc < 0x%04x)", 8*j2);
-        } else {
-          printf("if (wc >= 0x%04x && wc < 0x%04x)", 8*j1, 8*j2);
-        }
-        printf("\n      c = %s_page%02x[wc", name, j1 >> 5);
-        if (tables[t].minline > 0)
-          printf("-0x%04x", 8*j1);
-        printf("];\n");
-      }
-    }
-    j1 = j2;
-  }
-  printf("    if (c != 0) {\n");
-  printf("      r[0] = (c >> 8); r[1] = (c & 0xff);\n");
-  printf("      return 2;\n");
-  printf("    }\n");
-  printf("    return RET_ILSEQ;\n");
-  printf("  }\n");
-  printf("  return RET_TOOSMALL;\n");
-  printf("}\n");
-}
-
-/*
- * Outputs the unicode to charset table and function, using a packed array.
- * (Suitable if the table is sparse.)
- */
-static void output_uni2charset_sparse (const char* name, Encoding* enc)
-{
-  bool pages[0x100];
-  Block pageblocks[0x100]; int npageblocks;
-  int indx2charset[0x10000];
-  int summary_indx[0x1000];
-  int summary_used[0x1000];
-  int i, row, col, j, p, j1, j2, indx;
-
-  /* Fill pages[0x100]. */
-  for (p = 0; p < 0x100; p++)
-    pages[p] = false;
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        pages[j>>8] = true;
-    }
-
-#if 0
-  for (p = 0; p < 0x100; p++)
-    if (pages[p]) {
-      printf("static const unsigned short %s_page%02x[256] = {\n", name, p);
-      for (j1 = 0; j1 < 32; j1++) {
-        printf("  ");
-        for (j2 = 0; j2 < 8; j2++)
-          printf("0x%04x, ", enc->uni2charset[256*p+8*j1+j2]);
-        printf("/""*0x%02x-0x%02x*""/\n", 8*j1, 8*j1+7);
-      }
-      printf("};\n");
-    }
-  printf("\n");
-#endif
-
-  /* Fill summary_indx[] and summary_used[]. */
-  indx = 0;
-  for (j1 = 0; j1 < 0x1000; j1++) {
-    summary_indx[j1] = indx;
-    summary_used[j1] = 0;
-    for (j2 = 0; j2 < 16; j2++) {
-      j = 16*j1+j2;
-      if (enc->uni2charset[j] != 0) {
-        indx2charset[indx++] = enc->uni2charset[j];
-        summary_used[j1] |= (1 << j2);
-      }
-    }
-  }
-
-  /* Fill npageblocks and pageblocks[]. */
-  npageblocks = 0;
-  for (p = 0; p < 0x100; ) {
-    if (pages[p] && (p == 0 || !pages[p-1])) {
-      pageblocks[npageblocks].start = 16*p;
-      do p++; while (p < 0x100 && pages[p]);
-      j1 = 16*p;
-      while (summary_used[j1-1] == 0) j1--;
-      pageblocks[npageblocks].end = j1;
-      npageblocks++;
-    } else
-      p++;
-  }
-
-  printf("static const unsigned short %s_2charset[%d] = {\n", name, indx);
-  for (i = 0; i < indx; ) {
-    if ((i % 8) == 0) printf(" ");
-    printf(" 0x%04x,", indx2charset[i]);
-    i++;
-    if ((i % 8) == 0 || i == indx) printf("\n");
-  }
-  printf("};\n");
-  printf("\n");
-  for (i = 0; i < npageblocks; i++) {
-    printf("static const Summary16 %s_uni2indx_page%02x[%d] = {\n", name,
-           pageblocks[i].start/16, pageblocks[i].end-pageblocks[i].start);
-    for (j1 = pageblocks[i].start; j1 < pageblocks[i].end; ) {
-      if (((16*j1) % 0x100) == 0) printf("  /""* 0x%04x *""/\n", 16*j1);
-      if ((j1 % 4) == 0) printf(" ");
-      printf(" { %4d, 0x%04x },", summary_indx[j1], summary_used[j1]);
-      j1++;
-      if ((j1 % 4) == 0 || j1 == pageblocks[i].end) printf("\n");
-    }
-    printf("};\n");
-  }
-  printf("\n");
-
-  printf("static int\n");
-  printf("%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", name);
-  printf("{\n");
-  printf("  if (n >= 2) {\n");
-  printf("    const Summary16 *summary = NULL;\n");
-  for (i = 0; i < npageblocks; i++) {
-    printf("    ");
-    if (i > 0)
-      printf("else ");
-    printf("if (wc >= 0x%04x && wc < 0x%04x)\n",
-           16*pageblocks[i].start, 16*pageblocks[i].end);
-    printf("      summary = &%s_uni2indx_page%02x[(wc>>4)", name,
-           pageblocks[i].start/16);
-    if (pageblocks[i].start > 0)
-      printf("-0x%03x", pageblocks[i].start);
-    printf("];\n");
-  }
-  printf("    if (summary) {\n");
-  printf("      unsigned short used = summary->used;\n");
-  printf("      unsigned int i = wc & 0x0f;\n");
-  printf("      if (used & ((unsigned short) 1 << i)) {\n");
-  printf("        unsigned short c;\n");
-  printf("        /* Keep in `used' only the bits 0..i-1. */\n");
-  printf("        used &= ((unsigned short) 1 << i) - 1;\n");
-  printf("        /* Add `summary->indx' and the number of bits set in `used'. */\n");
-  printf("        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);\n");
-  printf("        used = (used & 0x3333) + ((used & 0xcccc) >> 2);\n");
-  printf("        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);\n");
-  printf("        used = (used & 0x00ff) + (used >> 8);\n");
-  printf("        c = %s_2charset[summary->indx + used];\n", name);
-  printf("        r[0] = (c >> 8); r[1] = (c & 0xff);\n");
-  printf("        return 2;\n");
-  printf("      }\n");
-  printf("    }\n");
-  printf("    return RET_ILSEQ;\n");
-  printf("  }\n");
-  printf("  return RET_TOOSMALL;\n");
-  printf("}\n");
-}
-
-/* ISO-2022/EUC specifics */
-
-static int row_byte_normal (int row) { return 0x21+row; }
-static int col_byte_normal (int col) { return 0x21+col; }
-static int byte_row_normal (int byte) { return byte-0x21; }
-static int byte_col_normal (int byte) { return byte-0x21; }
-
-static void do_normal (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Note: On first sight, the jisx0212_2charset[] table seems to be in order,
-   starting from the charset=0x3021/uni=0x4e02 pair. But it's only mostly in
-   order. There are 75 out-of-order values, scattered all throughout the table.
- */
-
-static void do_normal_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-/* CNS 11643 specifics - trick to put two tables into one */
-
-static int row_byte_cns11643 (int row) {
-  return 0x100 * (row / 94) + (row % 94) + 0x21;
-}
-static int byte_row_cns11643 (int byte) {
-  return (byte >= 0x100 && byte < 0x200 ? byte-0x121 :
-          byte >= 0x200 && byte < 0x300 ? byte-0x221+94 :
-          byte >= 0x300 && byte < 0x400 ? byte-0x321+2*94 :
-          -1);
-}
-
-static void do_cns11643_only_uni2charset (const char* name)
-{
-  Encoding enc;
-  int j, x;
-
-  enc.rows = 3*94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_cns11643;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_cns11643;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  invert(&enc);
-  /* Move the 2 plane bits into the unused bits 15 and 7. */
-  for (j = 0; j < 0x10000; j++) {
-    x = enc.uni2charset[j];
-    if (x != 0) {
-      if (x & 0x8080) abort();
-      switch (x >> 16) {
-        case 0: /* plane 1 */ x = (x & 0xffff) | 0x0000; break;
-        case 1: /* plane 2 */ x = (x & 0xffff) | 0x0080; break;
-        case 2: /* plane 3 */ x = (x & 0xffff) | 0x8000; break;
-        default: abort();
-      }
-      enc.uni2charset[j] = x;
-    }
-  }
-  output_uni2charset_sparse(name,&enc);
-}
-
-/* GBK specifics */
-
-static int row_byte_gbk1 (int row) {
-  return 0x81+row;
-}
-static int col_byte_gbk1 (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_gbk1 (int byte) {
-  if (byte >= 0x81 && byte < 0xff)
-    return byte-0x81;
-  else
-    return -1;
-}
-static int byte_col_gbk1 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xff)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_gbk1 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_dense(name,&enc);
-}
-
-static void do_gbk1_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-static int row_byte_gbk2 (int row) {
-  return 0x81+row;
-}
-static int col_byte_gbk2 (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_gbk2 (int byte) {
-  if (byte >= 0x81 && byte < 0xff)
-    return byte-0x81;
-  else
-    return -1;
-}
-static int byte_col_gbk2 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xa1)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_gbk2_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 96;
-  enc.row_byte = row_byte_gbk2;
-  enc.col_byte = col_byte_gbk2;
-  enc.byte_row = byte_row_gbk2;
-  enc.byte_col = byte_col_gbk2;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xa1)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-static void do_gbk1_only_uni2charset (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* KSC 5601 specifics */
-
-/*
- * Reads the charset2uni table from standard input.
- */
-static void read_table_ksc5601 (Encoding* enc)
-{
-  int row, col, i, i1, i2, c, j;
-
-  enc->charset2uni = (int**) malloc(enc->rows*sizeof(int*));
-  for (row = 0; row < enc->rows; row++)
-    enc->charset2uni[row] = (int*) malloc(enc->cols*sizeof(int));
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++)
-      enc->charset2uni[row][col] = 0xfffd;
-
-  c = getc(stdin);
-  ungetc(c,stdin);
-  if (c == '#') {
-    /* Read a unicode.org style .TXT file. */
-    for (;;) {
-      c = getc(stdin);
-      if (c == EOF)
-        break;
-      if (c == '\n' || c == ' ' || c == '\t')
-        continue;
-      if (c == '#') {
-        do { c = getc(stdin); } while (!(c == EOF || c == '\n'));
-        continue;
-      }
-      ungetc(c,stdin);
-      if (scanf("0x%x", &j) != 1)
-        exit(1);
-      i1 = j >> 8;
-      i2 = j & 0xff;
-      if (scanf(" 0x%x", &j) != 1)
-        exit(1);
-      /* Take only the range covered by KS C 5601.1987-0 = KS C 5601.1989-0
-         = KS X 1001.1992, ignore the rest. */
-      if (!(i1 >= 128+33 && i1 < 128+127 && i2 >= 128+33 && i2 < 128+127))
-        continue;  /* KSC5601 specific */
-      i1 &= 0x7f;  /* KSC5601 specific */
-      i2 &= 0x7f;  /* KSC5601 specific */
-      row = enc->byte_row(i1);
-      col = enc->byte_col(i2);
-      if (row < 0 || col < 0) {
-        fprintf(stderr, "lost entry for %02x %02x\n", i1, i2);
-        exit(1);
-      }
-      enc->charset2uni[row][col] = j;
-    }
-  } else {
-    /* Read a table of hexadecimal Unicode values. */
-    for (i1 = 33; i1 < 127; i1++)
-      for (i2 = 33; i2 < 127; i2++) {
-        i = scanf("%x", &j);
-        if (i == EOF)
-          goto read_done;
-        if (i != 1)
-          exit(1);
-        if (j < 0 || j == 0xffff)
-          j = 0xfffd;
-        if (j != 0xfffd) {
-          if (enc->byte_row(i1) < 0 || enc->byte_col(i2) < 0) {
-            fprintf(stderr, "lost entry at %02x %02x\n", i1, i2);
-            exit (1);
-          }
-          enc->charset2uni[enc->byte_row(i1)][enc->byte_col(i2)] = j;
-        }
-      }
-   read_done: ;
-  }
-}
-
-static void do_ksc5601 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table_ksc5601(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Big5 specifics */
-
-static int row_byte_big5 (int row) {
-  return 0xa1+row;
-}
-static int col_byte_big5 (int col) {
-  return (col >= 0x3f ? 0x62 : 0x40) + col;
-}
-static int byte_row_big5 (int byte) {
-  if (byte >= 0xa1 && byte < 0xff)
-    return byte-0xa1;
-  else
-    return -1;
-}
-static int byte_col_big5 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0xa1 && byte < 0xff)
-    return byte-0x62;
-  else
-    return -1;
-}
-
-static void do_big5 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 157;
-  enc.row_byte = row_byte_big5;
-  enc.col_byte = col_byte_big5;
-  enc.byte_row = byte_row_big5;
-  enc.byte_col = byte_col_big5;
-  enc.check_row_expr = "%1$s >= 0xa1 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0xa1 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0xa1";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0xa1 ? 0x62 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Johab Hangul specifics */
-
-static int row_byte_johab_hangul (int row) {
-  return 0x84+row;
-}
-static int col_byte_johab_hangul (int col) {
-  return (col >= 0x3e ? 0x43 : 0x41) + col;
-}
-static int byte_row_johab_hangul (int byte) {
-  if (byte >= 0x84 && byte < 0xd4)
-    return byte-0x84;
-  else
-    return -1;
-}
-static int byte_col_johab_hangul (int byte) {
-  if (byte >= 0x41 && byte < 0x7f)
-    return byte-0x41;
-  else if (byte >= 0x81 && byte < 0xff)
-    return byte-0x43;
-  else
-    return -1;
-}
-
-static void do_johab_hangul (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 80;
-  enc.cols = 188;
-  enc.row_byte = row_byte_johab_hangul;
-  enc.col_byte = col_byte_johab_hangul;
-  enc.byte_row = byte_row_johab_hangul;
-  enc.byte_col = byte_col_johab_hangul;
-  enc.check_row_expr = "%1$s >= 0x84 && %1$s < 0xd4";
-  enc.check_col_expr = "(%1$s >= 0x41 && %1$s < 0x7f) || (%1$s >= 0x81 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x84";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x81 ? 0x43 : 0x41)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_dense(name,&enc);
-}
-
-/* SJIS specifics */
-
-static int row_byte_sjis (int row) {
-  return (row >= 0x1f ? 0xc1 : 0x81) + row;
-}
-static int col_byte_sjis (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_sjis (int byte) {
-  if (byte >= 0x81 && byte < 0xa0)
-    return byte-0x81;
-  else if (byte >= 0xe0)
-    return byte-0xc1;
-  else
-    return -1;
-}
-static int byte_col_sjis (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xfd)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_sjis (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 188;
-  enc.row_byte = row_byte_sjis;
-  enc.col_byte = col_byte_sjis;
-  enc.byte_row = byte_row_sjis;
-  enc.byte_col = byte_col_sjis;
-  enc.check_row_expr = "(%1$s >= 0x81 && %1$s < 0xa0) || (%1$s >= 0xe0)";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xfd)";
-  enc.byte_row_expr = "%1$s - (%1$s >= 0xe0 ? 0xc1 : 0x81)";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Main program */
-
-int main (int argc, char *argv[])
-{
-  const char* charsetname;
-  const char* name;
-
-  if (argc != 3)
-    exit(1);
-  charsetname = argv[1];
-  name = argv[2];
-
-  output_title(charsetname);
-
-  if (!strcmp(name,"gb2312") || !strcmp(name,"gb12345ext")
-      || !strcmp(name,"jisx0208") || !strcmp(name,"jisx0212"))
-    do_normal(name);
-  else if (!strcmp(name,"cns11643_1") || !strcmp(name,"cns11643_2")
-           || !strcmp(name,"cns11643_3"))
-    do_normal_only_charset2uni(name);
-  else if (!strcmp(name,"cns11643_inv"))
-    do_cns11643_only_uni2charset(name);
-  else if (!strcmp(name,"gbkext1"))
-    do_gbk1_only_charset2uni(name);
-  else if (!strcmp(name,"gbkext2"))
-    do_gbk2_only_charset2uni(name);
-  else if (!strcmp(name,"gbkext_inv"))
-    do_gbk1_only_uni2charset(name);
-  else if (!strcmp(name,"cp936ext"))
-    do_gbk1(name);
-  else if (!strcmp(name,"ksc5601"))
-    do_ksc5601(name);
-  else if (!strcmp(name,"big5") || !strcmp(name,"cp950ext"))
-    do_big5(name);
-  else if (!strcmp(name,"johab_hangul"))
-    do_johab_hangul(name);
-  else if (!strcmp(name,"cp932ext"))
-    do_sjis(name);
-  else
-    exit(1);
-
-  return 0;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/cp1133.h b/common/fltk/src/xutf8/lcUniConv/cp1133.h
deleted file mode 100644
index da7f589..0000000
--- a/common/fltk/src/xutf8/lcUniConv/cp1133.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cp1133.h,v 1.3 2000/11/29 17:40:28 dawes Exp $ */
-
-/*
- * IBM-CP1133
- */
-
-static const unsigned short cp1133_2uni_1[64] = {
-  /* 0xa0 */
-  0x00a0, 0x0e81, 0x0e82, 0x0e84, 0x0e87, 0x0e88, 0x0eaa, 0x0e8a,
-  0x0e8d, 0x0e94, 0x0e95, 0x0e96, 0x0e97, 0x0e99, 0x0e9a, 0x0e9b,
-  /* 0xb0 */
-  0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f, 0x0ea1, 0x0ea2, 0x0ea3, 0x0ea5,
-  0x0ea7, 0x0eab, 0x0ead, 0x0eae, 0xfffd, 0xfffd, 0xfffd, 0x0eaf,
-  /* 0xc0 */
-  0x0eb0, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7, 0x0eb8,
-  0x0eb9, 0x0ebc, 0x0eb1, 0x0ebb, 0x0ebd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xd0 */
-  0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, 0x0ec8, 0x0ec9, 0x0eca,
-  0x0ecb, 0x0ecc, 0x0ecd, 0x0ec6, 0xfffd, 0x0edc, 0x0edd, 0x20ad,
-};
-static const unsigned short cp1133_2uni_2[16] = {
-  /* 0xf0 */
-  0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7,
-  0x0ed8, 0x0ed9, 0xfffd, 0xfffd, 0x00a2, 0x00ac, 0x00a6, 0xfffd,
-};
-
-static int
-cp1133_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else if (c < 0xe0) {
-    unsigned short wc = cp1133_2uni_1[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  else if (c < 0xf0) {
-  }
-  else {
-    unsigned short wc = cp1133_2uni_2[c-0xf0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-
-static const unsigned char cp1133_page00[16] = {
-  0xa0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfe, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
-};
-static const unsigned char cp1133_page0e[96] = {
-  0x00, 0xa1, 0xa2, 0x00, 0xa3, 0x00, 0x00, 0xa4, /* 0x80-0x87 */
-  0xa5, 0x00, 0xa7, 0x00, 0x00, 0xa8, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x00, 0x00, 0xa9, 0xaa, 0xab, 0xac, /* 0x90-0x97 */
-  0x00, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, /* 0x98-0x9f */
-  0x00, 0xb4, 0xb5, 0xb6, 0x00, 0xb7, 0x00, 0xb8, /* 0xa0-0xa7 */
-  0x00, 0x00, 0xa6, 0xb9, 0x00, 0xba, 0xbb, 0xbf, /* 0xa8-0xaf */
-  0xc0, 0xca, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, /* 0xb0-0xb7 */
-  0xc7, 0xc8, 0x00, 0xcb, 0xc9, 0xcc, 0x00, 0x00, /* 0xb8-0xbf */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xdb, 0x00, /* 0xc0-0xc7 */
-  0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0x00, 0x00, /* 0xc8-0xcf */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */
-  0xf8, 0xf9, 0x00, 0x00, 0xdd, 0xde, 0x00, 0x00, /* 0xd8-0xdf */
-};
-
-static int
-cp1133_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00b0)
-    c = cp1133_page00[wc-0x00a0];
-  else if (wc >= 0x0e80 && wc < 0x0ee0)
-    c = cp1133_page0e[wc-0x0e80];
-  else if (wc == 0x20ad)
-    c = 0xdf;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/cp1251.h b/common/fltk/src/xutf8/lcUniConv/cp1251.h
deleted file mode 100644
index 8c0b54c..0000000
--- a/common/fltk/src/xutf8/lcUniConv/cp1251.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cp1251.h,v 1.1 2000/12/04 18:49:32 dawes Exp $ */
-
-/*
- * CP1251
- */
-#ifdef NEED_TOWC
-
-static const unsigned short cp1251_2uni[128] = {
-  /* 0x80 */
-  0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f,
-  /* 0x90 */
-  0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0xfffd, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f,
-  /* 0xa0 */
-  0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7,
-  0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7,
-  0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457,
-  /* 0xc0 */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
-  0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
-  /* 0xd0 */
-  0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
-  0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
-  /* 0xe0 */
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
-  0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
-  /* 0xf0 */
-  0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
-  0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
-};
-
-static int
-cp1251_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = cp1251_2uni[c-0x80];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char cp1251_page00[32] = {
-  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-};
-static const unsigned char cp1251_page04[152] = {
-  0x00, 0xa8, 0x80, 0x81, 0xaa, 0xbd, 0xb2, 0xaf, /* 0x00-0x07 */
-  0xa3, 0x8a, 0x8c, 0x8e, 0x8d, 0x00, 0xa1, 0x8f, /* 0x08-0x0f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */
-  0x00, 0xb8, 0x90, 0x83, 0xba, 0xbe, 0xb3, 0xbf, /* 0x50-0x57 */
-  0xbc, 0x9a, 0x9c, 0x9e, 0x9d, 0x00, 0xa2, 0x9f, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-};
-static const unsigned char cp1251_page20[48] = {
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-
-static int
-cp1251_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00c0)
-    c = cp1251_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x0498)
-    c = cp1251_page04[wc-0x0400];
-  else if (wc >= 0x2010 && wc < 0x2040)
-    c = cp1251_page20[wc-0x2010];
-  else if (wc == 0x20ac)
-    c = 0x88;
-  else if (wc == 0x2116)
-    c = 0xb9;
-  else if (wc == 0x2122)
-    c = 0x99;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/cp1255.h b/common/fltk/src/xutf8/lcUniConv/cp1255.h
deleted file mode 100644
index 17b843e..0000000
--- a/common/fltk/src/xutf8/lcUniConv/cp1255.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cp1255.h,v 1.1 2000/12/04 18:49:33 dawes Exp $ */
-
-/*
- * CP1255
- */
-
-static const unsigned short cp1255_2uni[128] = {
-  /* 0x80 */
-  0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x02c6, 0x2030, 0xfffd, 0x2039, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x90 */
-  0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0x02dc, 0x2122, 0xfffd, 0x203a, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa0 */
-  0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20aa, 0x00a5, 0x00a6, 0x00a7,
-  0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
-  0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
-  /* 0xc0 */
-  0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7,
-  0x05b8, 0x05b9, 0xfffd, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf,
-  /* 0xd0 */
-  0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3,
-  0x05f4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xe0 */
-  0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
-  0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
-  /* 0xf0 */
-  0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
-  0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0x200e, 0x200f, 0xfffd,
-};
-
-static int
-cp1255_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = cp1255_2uni[c-0x80];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-
-static const unsigned char cp1255_page00[88] = {
-  0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, /* 0xf0-0xf7 */
-};
-static const unsigned char cp1255_page02[32] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-};
-static const unsigned char cp1255_page05[72] = {
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xb0-0xb7 */
-  0xc8, 0xc9, 0x00, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xb8-0xbf */
-  0xd0, 0xd1, 0xd2, 0xd3, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xd0-0xd7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xd8-0xdf */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xe0-0xe7 */
-  0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
-};
-static const unsigned char cp1255_page20[56] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-
-static int
-cp1255_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00f8)
-    c = cp1255_page00[wc-0x00a0];
-  else if (wc == 0x0192)
-    c = 0x83;
-  else if (wc >= 0x02c0 && wc < 0x02e0)
-    c = cp1255_page02[wc-0x02c0];
-  else if (wc >= 0x05b0 && wc < 0x05f8)
-    c = cp1255_page05[wc-0x05b0];
-  else if (wc >= 0x2008 && wc < 0x2040)
-    c = cp1255_page20[wc-0x2008];
-  else if (wc == 0x20aa)
-    c = 0xa4;
-  else if (wc == 0x20ac)
-    c = 0x80;
-  else if (wc == 0x2122)
-    c = 0x99;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/cp1256.h b/common/fltk/src/xutf8/lcUniConv/cp1256.h
deleted file mode 100644
index 5d4051b..0000000
--- a/common/fltk/src/xutf8/lcUniConv/cp1256.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cp1256.h,v 1.1 2000/12/04 18:49:34 dawes Exp $ */
-
-/*
- * CP1256
- */
-
-static const unsigned short cp1256_2uni[128] = {
-  /* 0x80 */
-  0x20ac, 0x067e, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x02c6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
-  /* 0x90 */
-  0x06af, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0x06a9, 0x2122, 0x0691, 0x203a, 0x0153, 0x200c, 0x200d, 0x06ba,
-  /* 0xa0 */
-  0x00a0, 0x060c, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
-  0x00a8, 0x00a9, 0x06be, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
-  0x00b8, 0x00b9, 0x061b, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x061f,
-  /* 0xc0 */
-  0x06c1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
-  0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
-  /* 0xd0 */
-  0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00d7,
-  0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643,
-  /* 0xe0 */
-  0x00e0, 0x0644, 0x00e2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0649, 0x064a, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x064b, 0x064c, 0x064d, 0x064e, 0x00f4, 0x064f, 0x0650, 0x00f7,
-  0x0651, 0x00f9, 0x0652, 0x00fb, 0x00fc, 0x200e, 0x200f, 0x06d2,
-};
-
-static int
-cp1256_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) cp1256_2uni[c-0x80];
-  return 1;
-}
-
-static const unsigned char cp1256_page00[96] = {
-  0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0xe0, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0x00, 0x00, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0xf7, /* 0xf0-0xf7 */
-  0x00, 0xf9, 0x00, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-};
-static const unsigned char cp1256_page01[72] = {
-  0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-};
-static const unsigned char cp1256_page06[208] = {
-  0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */
-  0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, /* 0x30-0x37 */
-  0xd9, 0xda, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0xdc, 0xdd, 0xde, 0xdf, 0xe1, 0xe3, 0xe4, 0xe5, /* 0x40-0x47 */
-  0xe6, 0xec, 0xed, 0xf0, 0xf1, 0xf2, 0xf3, 0xf5, /* 0x48-0x4f */
-  0xf6, 0xf8, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x00, /* 0x80-0x87 */
-  0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0xa8-0xaf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0xaa, 0x00, /* 0xb8-0xbf */
-  0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-};
-static const unsigned char cp1256_page20[56] = {
-  0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0xfd, 0xfe, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-
-static int
-cp1256_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0100)
-    c = cp1256_page00[wc-0x00a0];
-  else if (wc >= 0x0150 && wc < 0x0198)
-    c = cp1256_page01[wc-0x0150];
-  else if (wc == 0x02c6)
-    c = 0x88;
-  else if (wc >= 0x0608 && wc < 0x06d8)
-    c = cp1256_page06[wc-0x0608];
-  else if (wc >= 0x2008 && wc < 0x2040)
-    c = cp1256_page20[wc-0x2008];
-  else if (wc == 0x20ac)
-    c = 0x80;
-  else if (wc == 0x2122)
-    c = 0x99;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/cp936ext.h b/common/fltk/src/xutf8/lcUniConv/cp936ext.h
deleted file mode 100644
index 578db95..0000000
--- a/common/fltk/src/xutf8/lcUniConv/cp936ext.h
+++ /dev/null
@@ -1,6259 +0,0 @@
-/*
- * "$Id$"
- *
- * Character encoding support for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-
-#ifndef CP936
-#ifdef NEED_TOWC
-static int
-cp936ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  return 0;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-static int
-cp936ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  return 0;
-}
-#endif /* NEED_TOMB */
-
-#else
-/*
- * CP936EXT
- */
-#ifdef NEED_TOWC
-
-static const unsigned short cp936ext_2uni_page81[23766] = {
-  /* 0x81 */
-  0x4e02, 0x4e04, 0x4e05, 0x4e06, 0x4e0f, 0x4e12, 0x4e17, 0x4e1f,
-  0x4e20, 0x4e21, 0x4e23, 0x4e26, 0x4e29, 0x4e2e, 0x4e2f, 0x4e31,
-  0x4e33, 0x4e35, 0x4e37, 0x4e3c, 0x4e40, 0x4e41, 0x4e42, 0x4e44,
-  0x4e46, 0x4e4a, 0x4e51, 0x4e55, 0x4e57, 0x4e5a, 0x4e5b, 0x4e62,
-  0x4e63, 0x4e64, 0x4e65, 0x4e67, 0x4e68, 0x4e6a, 0x4e6b, 0x4e6c,
-  0x4e6d, 0x4e6e, 0x4e6f, 0x4e72, 0x4e74, 0x4e75, 0x4e76, 0x4e77,
-  0x4e78, 0x4e79, 0x4e7a, 0x4e7b, 0x4e7c, 0x4e7d, 0x4e7f, 0x4e80,
-  0x4e81, 0x4e82, 0x4e83, 0x4e84, 0x4e85, 0x4e87, 0x4e8a, 0x4e90,
-  0x4e96, 0x4e97, 0x4e99, 0x4e9c, 0x4e9d, 0x4e9e, 0x4ea3, 0x4eaa,
-  0x4eaf, 0x4eb0, 0x4eb1, 0x4eb4, 0x4eb6, 0x4eb7, 0x4eb8, 0x4eb9,
-  0x4ebc, 0x4ebd, 0x4ebe, 0x4ec8, 0x4ecc, 0x4ecf, 0x4ed0, 0x4ed2,
-  0x4eda, 0x4edb, 0x4edc, 0x4ee0, 0x4ee2, 0x4ee6, 0x4ee7, 0x4ee9,
-  0x4eed, 0x4eee, 0x4eef, 0x4ef1, 0x4ef4, 0x4ef8, 0x4ef9, 0x4efa,
-  0x4efc, 0x4efe, 0x4f00, 0x4f02, 0x4f03, 0x4f04, 0x4f05, 0x4f06,
-  0x4f07, 0x4f08, 0x4f0b, 0x4f0c, 0x4f12, 0x4f13, 0x4f14, 0x4f15,
-  0x4f16, 0x4f1c, 0x4f1d, 0x4f21, 0x4f23, 0x4f28, 0x4f29, 0x4f2c,
-  0x4f2d, 0x4f2e, 0x4f31, 0x4f33, 0x4f35, 0x4f37, 0x4f39, 0x4f3b,
-  0x4f3e, 0x4f3f, 0x4f40, 0x4f41, 0x4f42, 0x4f44, 0x4f45, 0x4f47,
-  0x4f48, 0x4f49, 0x4f4a, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, 0x4f56,
-  0x4f61, 0x4f62, 0x4f66, 0x4f68, 0x4f6a, 0x4f6b, 0x4f6d, 0x4f6e,
-  0x4f71, 0x4f72, 0x4f75, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, 0x4f7d,
-  0x4f80, 0x4f81, 0x4f82, 0x4f85, 0x4f86, 0x4f87, 0x4f8a, 0x4f8c,
-  0x4f8e, 0x4f90, 0x4f92, 0x4f93, 0x4f95, 0x4f96, 0x4f98, 0x4f99,
-  0x4f9a, 0x4f9c, 0x4f9e, 0x4f9f, 0x4fa1, 0x4fa2,
-  /* 0x82 */
-  0x4fa4, 0x4fab, 0x4fad, 0x4fb0, 0x4fb1, 0x4fb2, 0x4fb3, 0x4fb4,
-  0x4fb6, 0x4fb7, 0x4fb8, 0x4fb9, 0x4fba, 0x4fbb, 0x4fbc, 0x4fbd,
-  0x4fbe, 0x4fc0, 0x4fc1, 0x4fc2, 0x4fc6, 0x4fc7, 0x4fc8, 0x4fc9,
-  0x4fcb, 0x4fcc, 0x4fcd, 0x4fd2, 0x4fd3, 0x4fd4, 0x4fd5, 0x4fd6,
-  0x4fd9, 0x4fdb, 0x4fe0, 0x4fe2, 0x4fe4, 0x4fe5, 0x4fe7, 0x4feb,
-  0x4fec, 0x4ff0, 0x4ff2, 0x4ff4, 0x4ff5, 0x4ff6, 0x4ff7, 0x4ff9,
-  0x4ffb, 0x4ffc, 0x4ffd, 0x4fff, 0x5000, 0x5001, 0x5002, 0x5003,
-  0x5004, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, 0x500a, 0x500b,
-  0x500e, 0x5010, 0x5011, 0x5013, 0x5015, 0x5016, 0x5017, 0x501b,
-  0x501d, 0x501e, 0x5020, 0x5022, 0x5023, 0x5024, 0x5027, 0x502b,
-  0x502f, 0x5030, 0x5031, 0x5032, 0x5033, 0x5034, 0x5035, 0x5036,
-  0x5037, 0x5038, 0x5039, 0x503b, 0x503d, 0x503f, 0x5040, 0x5041,
-  0x5042, 0x5044, 0x5045, 0x5046, 0x5049, 0x504a, 0x504b, 0x504d,
-  0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5056, 0x5057, 0x5058,
-  0x5059, 0x505b, 0x505d, 0x505e, 0x505f, 0x5060, 0x5061, 0x5062,
-  0x5063, 0x5064, 0x5066, 0x5067, 0x5068, 0x5069, 0x506a, 0x506b,
-  0x506d, 0x506e, 0x506f, 0x5070, 0x5071, 0x5072, 0x5073, 0x5074,
-  0x5075, 0x5078, 0x5079, 0x507a, 0x507c, 0x507d, 0x5081, 0x5082,
-  0x5083, 0x5084, 0x5086, 0x5087, 0x5089, 0x508a, 0x508b, 0x508c,
-  0x508e, 0x508f, 0x5090, 0x5091, 0x5092, 0x5093, 0x5094, 0x5095,
-  0x5096, 0x5097, 0x5098, 0x5099, 0x509a, 0x509b, 0x509c, 0x509d,
-  0x509e, 0x509f, 0x50a0, 0x50a1, 0x50a2, 0x50a4, 0x50a6, 0x50aa,
-  0x50ab, 0x50ad, 0x50ae, 0x50af, 0x50b0, 0x50b1, 0x50b3, 0x50b4,
-  0x50b5, 0x50b6, 0x50b7, 0x50b8, 0x50b9, 0x50bc,
-  /* 0x83 */
-  0x50bd, 0x50be, 0x50bf, 0x50c0, 0x50c1, 0x50c2, 0x50c3, 0x50c4,
-  0x50c5, 0x50c6, 0x50c7, 0x50c8, 0x50c9, 0x50ca, 0x50cb, 0x50cc,
-  0x50cd, 0x50ce, 0x50d0, 0x50d1, 0x50d2, 0x50d3, 0x50d4, 0x50d5,
-  0x50d7, 0x50d8, 0x50d9, 0x50db, 0x50dc, 0x50dd, 0x50de, 0x50df,
-  0x50e0, 0x50e1, 0x50e2, 0x50e3, 0x50e4, 0x50e5, 0x50e8, 0x50e9,
-  0x50ea, 0x50eb, 0x50ef, 0x50f0, 0x50f1, 0x50f2, 0x50f4, 0x50f6,
-  0x50f7, 0x50f8, 0x50f9, 0x50fa, 0x50fc, 0x50fd, 0x50fe, 0x50ff,
-  0x5100, 0x5101, 0x5102, 0x5103, 0x5104, 0x5105, 0x5108, 0x5109,
-  0x510a, 0x510c, 0x510d, 0x510e, 0x510f, 0x5110, 0x5111, 0x5113,
-  0x5114, 0x5115, 0x5116, 0x5117, 0x5118, 0x5119, 0x511a, 0x511b,
-  0x511c, 0x511d, 0x511e, 0x511f, 0x5120, 0x5122, 0x5123, 0x5124,
-  0x5125, 0x5126, 0x5127, 0x5128, 0x5129, 0x512a, 0x512b, 0x512c,
-  0x512d, 0x512e, 0x512f, 0x5130, 0x5131, 0x5132, 0x5133, 0x5134,
-  0x5135, 0x5136, 0x5137, 0x5138, 0x5139, 0x513a, 0x513b, 0x513c,
-  0x513d, 0x513e, 0x5142, 0x5147, 0x514a, 0x514c, 0x514e, 0x514f,
-  0x5150, 0x5152, 0x5153, 0x5157, 0x5158, 0x5159, 0x515b, 0x515d,
-  0x515e, 0x515f, 0x5160, 0x5161, 0x5163, 0x5164, 0x5166, 0x5167,
-  0x5169, 0x516a, 0x516f, 0x5172, 0x517a, 0x517e, 0x517f, 0x5183,
-  0x5184, 0x5186, 0x5187, 0x518a, 0x518b, 0x518e, 0x518f, 0x5190,
-  0x5191, 0x5193, 0x5194, 0x5198, 0x519a, 0x519d, 0x519e, 0x519f,
-  0x51a1, 0x51a3, 0x51a6, 0x51a7, 0x51a8, 0x51a9, 0x51aa, 0x51ad,
-  0x51ae, 0x51b4, 0x51b8, 0x51b9, 0x51ba, 0x51be, 0x51bf, 0x51c1,
-  0x51c2, 0x51c3, 0x51c5, 0x51c8, 0x51ca, 0x51cd, 0x51ce, 0x51d0,
-  0x51d2, 0x51d3, 0x51d4, 0x51d5, 0x51d6, 0x51d7,
-  /* 0x84 */
-  0x51d8, 0x51d9, 0x51da, 0x51dc, 0x51de, 0x51df, 0x51e2, 0x51e3,
-  0x51e5, 0x51e6, 0x51e7, 0x51e8, 0x51e9, 0x51ea, 0x51ec, 0x51ee,
-  0x51f1, 0x51f2, 0x51f4, 0x51f7, 0x51fe, 0x5204, 0x5205, 0x5209,
-  0x520b, 0x520c, 0x520f, 0x5210, 0x5213, 0x5214, 0x5215, 0x521c,
-  0x521e, 0x521f, 0x5221, 0x5222, 0x5223, 0x5225, 0x5226, 0x5227,
-  0x522a, 0x522c, 0x522f, 0x5231, 0x5232, 0x5234, 0x5235, 0x523c,
-  0x523e, 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524b,
-  0x524e, 0x524f, 0x5252, 0x5253, 0x5255, 0x5257, 0x5258, 0x5259,
-  0x525a, 0x525b, 0x525d, 0x525f, 0x5260, 0x5262, 0x5263, 0x5264,
-  0x5266, 0x5268, 0x526b, 0x526c, 0x526d, 0x526e, 0x5270, 0x5271,
-  0x5273, 0x5274, 0x5275, 0x5276, 0x5277, 0x5278, 0x5279, 0x527a,
-  0x527b, 0x527c, 0x527e, 0x5280, 0x5283, 0x5284, 0x5285, 0x5286,
-  0x5287, 0x5289, 0x528a, 0x528b, 0x528c, 0x528d, 0x528e, 0x528f,
-  0x5291, 0x5292, 0x5294, 0x5295, 0x5296, 0x5297, 0x5298, 0x5299,
-  0x529a, 0x529c, 0x52a4, 0x52a5, 0x52a6, 0x52a7, 0x52ae, 0x52af,
-  0x52b0, 0x52b4, 0x52b5, 0x52b6, 0x52b7, 0x52b8, 0x52b9, 0x52ba,
-  0x52bb, 0x52bc, 0x52bd, 0x52c0, 0x52c1, 0x52c2, 0x52c4, 0x52c5,
-  0x52c6, 0x52c8, 0x52ca, 0x52cc, 0x52cd, 0x52ce, 0x52cf, 0x52d1,
-  0x52d3, 0x52d4, 0x52d5, 0x52d7, 0x52d9, 0x52da, 0x52db, 0x52dc,
-  0x52dd, 0x52de, 0x52e0, 0x52e1, 0x52e2, 0x52e3, 0x52e5, 0x52e6,
-  0x52e7, 0x52e8, 0x52e9, 0x52ea, 0x52eb, 0x52ec, 0x52ed, 0x52ee,
-  0x52ef, 0x52f1, 0x52f2, 0x52f3, 0x52f4, 0x52f5, 0x52f6, 0x52f7,
-  0x52f8, 0x52fb, 0x52fc, 0x52fd, 0x5301, 0x5302, 0x5303, 0x5304,
-  0x5307, 0x5309, 0x530a, 0x530b, 0x530c, 0x530e,
-  /* 0x85 */
-  0x5311, 0x5312, 0x5313, 0x5314, 0x5318, 0x531b, 0x531c, 0x531e,
-  0x531f, 0x5322, 0x5324, 0x5325, 0x5327, 0x5328, 0x5329, 0x532b,
-  0x532c, 0x532d, 0x532f, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334,
-  0x5335, 0x5336, 0x5337, 0x5338, 0x533c, 0x533d, 0x5340, 0x5342,
-  0x5344, 0x5346, 0x534b, 0x534c, 0x534d, 0x5350, 0x5354, 0x5358,
-  0x5359, 0x535b, 0x535d, 0x5365, 0x5368, 0x536a, 0x536c, 0x536d,
-  0x5372, 0x5376, 0x5379, 0x537b, 0x537c, 0x537d, 0x537e, 0x5380,
-  0x5381, 0x5383, 0x5387, 0x5388, 0x538a, 0x538e, 0x538f, 0x5390,
-  0x5391, 0x5392, 0x5393, 0x5394, 0x5396, 0x5397, 0x5399, 0x539b,
-  0x539c, 0x539e, 0x53a0, 0x53a1, 0x53a4, 0x53a7, 0x53aa, 0x53ab,
-  0x53ac, 0x53ad, 0x53af, 0x53b0, 0x53b1, 0x53b2, 0x53b3, 0x53b4,
-  0x53b5, 0x53b7, 0x53b8, 0x53b9, 0x53ba, 0x53bc, 0x53bd, 0x53be,
-  0x53c0, 0x53c3, 0x53c4, 0x53c5, 0x53c6, 0x53c7, 0x53ce, 0x53cf,
-  0x53d0, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dc, 0x53dd, 0x53de,
-  0x53e1, 0x53e2, 0x53e7, 0x53f4, 0x53fa, 0x53fe, 0x53ff, 0x5400,
-  0x5402, 0x5405, 0x5407, 0x540b, 0x5414, 0x5418, 0x5419, 0x541a,
-  0x541c, 0x5422, 0x5424, 0x5425, 0x542a, 0x5430, 0x5433, 0x5436,
-  0x5437, 0x543a, 0x543d, 0x543f, 0x5441, 0x5442, 0x5444, 0x5445,
-  0x5447, 0x5449, 0x544c, 0x544d, 0x544e, 0x544f, 0x5451, 0x545a,
-  0x545d, 0x545e, 0x545f, 0x5460, 0x5461, 0x5463, 0x5465, 0x5467,
-  0x5469, 0x546a, 0x546b, 0x546c, 0x546d, 0x546e, 0x546f, 0x5470,
-  0x5474, 0x5479, 0x547a, 0x547e, 0x547f, 0x5481, 0x5483, 0x5485,
-  0x5487, 0x5488, 0x5489, 0x548a, 0x548d, 0x5491, 0x5493, 0x5497,
-  0x5498, 0x549c, 0x549e, 0x549f, 0x54a0, 0x54a1,
-  /* 0x86 */
-  0x54a2, 0x54a5, 0x54ae, 0x54b0, 0x54b2, 0x54b5, 0x54b6, 0x54b7,
-  0x54b9, 0x54ba, 0x54bc, 0x54be, 0x54c3, 0x54c5, 0x54ca, 0x54cb,
-  0x54d6, 0x54d8, 0x54db, 0x54e0, 0x54e1, 0x54e2, 0x54e3, 0x54e4,
-  0x54eb, 0x54ec, 0x54ef, 0x54f0, 0x54f1, 0x54f4, 0x54f5, 0x54f6,
-  0x54f7, 0x54f8, 0x54f9, 0x54fb, 0x54fe, 0x5500, 0x5502, 0x5503,
-  0x5504, 0x5505, 0x5508, 0x550a, 0x550b, 0x550c, 0x550d, 0x550e,
-  0x5512, 0x5513, 0x5515, 0x5516, 0x5517, 0x5518, 0x5519, 0x551a,
-  0x551c, 0x551d, 0x551e, 0x551f, 0x5521, 0x5525, 0x5526, 0x5528,
-  0x5529, 0x552b, 0x552d, 0x5532, 0x5534, 0x5535, 0x5536, 0x5538,
-  0x5539, 0x553a, 0x553b, 0x553d, 0x5540, 0x5542, 0x5545, 0x5547,
-  0x5548, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f, 0x5551, 0x5552,
-  0x5553, 0x5554, 0x5557, 0x5558, 0x5559, 0x555a, 0x555b, 0x555d,
-  0x555e, 0x555f, 0x5560, 0x5562, 0x5563, 0x5568, 0x5569, 0x556b,
-  0x556f, 0x5570, 0x5571, 0x5572, 0x5573, 0x5574, 0x5579, 0x557a,
-  0x557d, 0x557f, 0x5585, 0x5586, 0x558c, 0x558d, 0x558e, 0x5590,
-  0x5592, 0x5593, 0x5595, 0x5596, 0x5597, 0x559a, 0x559b, 0x559e,
-  0x55a0, 0x55a1, 0x55a2, 0x55a3, 0x55a4, 0x55a5, 0x55a6, 0x55a8,
-  0x55a9, 0x55aa, 0x55ab, 0x55ac, 0x55ad, 0x55ae, 0x55af, 0x55b0,
-  0x55b2, 0x55b4, 0x55b6, 0x55b8, 0x55ba, 0x55bc, 0x55bf, 0x55c0,
-  0x55c1, 0x55c2, 0x55c3, 0x55c6, 0x55c7, 0x55c8, 0x55ca, 0x55cb,
-  0x55ce, 0x55cf, 0x55d0, 0x55d5, 0x55d7, 0x55d8, 0x55d9, 0x55da,
-  0x55db, 0x55de, 0x55e0, 0x55e2, 0x55e7, 0x55e9, 0x55ed, 0x55ee,
-  0x55f0, 0x55f1, 0x55f4, 0x55f6, 0x55f8, 0x55f9, 0x55fa, 0x55fb,
-  0x55fc, 0x55ff, 0x5602, 0x5603, 0x5604, 0x5605,
-  /* 0x87 */
-  0x5606, 0x5607, 0x560a, 0x560b, 0x560d, 0x5610, 0x5611, 0x5612,
-  0x5613, 0x5614, 0x5615, 0x5616, 0x5617, 0x5619, 0x561a, 0x561c,
-  0x561d, 0x5620, 0x5621, 0x5622, 0x5625, 0x5626, 0x5628, 0x5629,
-  0x562a, 0x562b, 0x562e, 0x562f, 0x5630, 0x5633, 0x5635, 0x5637,
-  0x5638, 0x563a, 0x563c, 0x563d, 0x563e, 0x5640, 0x5641, 0x5642,
-  0x5643, 0x5644, 0x5645, 0x5646, 0x5647, 0x5648, 0x5649, 0x564a,
-  0x564b, 0x564f, 0x5650, 0x5651, 0x5652, 0x5653, 0x5655, 0x5656,
-  0x565a, 0x565b, 0x565d, 0x565e, 0x565f, 0x5660, 0x5661, 0x5663,
-  0x5665, 0x5666, 0x5667, 0x566d, 0x566e, 0x566f, 0x5670, 0x5672,
-  0x5673, 0x5674, 0x5675, 0x5677, 0x5678, 0x5679, 0x567a, 0x567d,
-  0x567e, 0x567f, 0x5680, 0x5681, 0x5682, 0x5683, 0x5684, 0x5687,
-  0x5688, 0x5689, 0x568a, 0x568b, 0x568c, 0x568d, 0x5690, 0x5691,
-  0x5692, 0x5694, 0x5695, 0x5696, 0x5697, 0x5698, 0x5699, 0x569a,
-  0x569b, 0x569c, 0x569d, 0x569e, 0x569f, 0x56a0, 0x56a1, 0x56a2,
-  0x56a4, 0x56a5, 0x56a6, 0x56a7, 0x56a8, 0x56a9, 0x56aa, 0x56ab,
-  0x56ac, 0x56ad, 0x56ae, 0x56b0, 0x56b1, 0x56b2, 0x56b3, 0x56b4,
-  0x56b5, 0x56b6, 0x56b8, 0x56b9, 0x56ba, 0x56bb, 0x56bd, 0x56be,
-  0x56bf, 0x56c0, 0x56c1, 0x56c2, 0x56c3, 0x56c4, 0x56c5, 0x56c6,
-  0x56c7, 0x56c8, 0x56c9, 0x56cb, 0x56cc, 0x56cd, 0x56ce, 0x56cf,
-  0x56d0, 0x56d1, 0x56d2, 0x56d3, 0x56d5, 0x56d6, 0x56d8, 0x56d9,
-  0x56dc, 0x56e3, 0x56e5, 0x56e6, 0x56e7, 0x56e8, 0x56e9, 0x56ea,
-  0x56ec, 0x56ee, 0x56ef, 0x56f2, 0x56f3, 0x56f6, 0x56f7, 0x56f8,
-  0x56fb, 0x56fc, 0x5700, 0x5701, 0x5702, 0x5705, 0x5707, 0x570b,
-  0x570c, 0x570d, 0x570e, 0x570f, 0x5710, 0x5711,
-  /* 0x88 */
-  0x5712, 0x5713, 0x5714, 0x5715, 0x5716, 0x5717, 0x5718, 0x5719,
-  0x571a, 0x571b, 0x571d, 0x571e, 0x5720, 0x5721, 0x5722, 0x5724,
-  0x5725, 0x5726, 0x5727, 0x572b, 0x5731, 0x5732, 0x5734, 0x5735,
-  0x5736, 0x5737, 0x5738, 0x573c, 0x573d, 0x573f, 0x5741, 0x5743,
-  0x5744, 0x5745, 0x5746, 0x5748, 0x5749, 0x574b, 0x5752, 0x5753,
-  0x5754, 0x5755, 0x5756, 0x5758, 0x5759, 0x5762, 0x5763, 0x5765,
-  0x5767, 0x576c, 0x576e, 0x5770, 0x5771, 0x5772, 0x5774, 0x5775,
-  0x5778, 0x5779, 0x577a, 0x577d, 0x577e, 0x577f, 0x5780, 0x5781,
-  0x5787, 0x5788, 0x5789, 0x578a, 0x578d, 0x578e, 0x578f, 0x5790,
-  0x5791, 0x5794, 0x5795, 0x5796, 0x5797, 0x5798, 0x5799, 0x579a,
-  0x579c, 0x579d, 0x579e, 0x579f, 0x57a5, 0x57a8, 0x57aa, 0x57ac,
-  0x57af, 0x57b0, 0x57b1, 0x57b3, 0x57b5, 0x57b6, 0x57b7, 0x57b9,
-  0x57ba, 0x57bb, 0x57bc, 0x57bd, 0x57be, 0x57bf, 0x57c0, 0x57c1,
-  0x57c4, 0x57c5, 0x57c6, 0x57c7, 0x57c8, 0x57c9, 0x57ca, 0x57cc,
-  0x57cd, 0x57d0, 0x57d1, 0x57d3, 0x57d6, 0x57d7, 0x57db, 0x57dc,
-  0x57de, 0x57e1, 0x57e2, 0x57e3, 0x57e5, 0x57e6, 0x57e7, 0x57e8,
-  0x57e9, 0x57ea, 0x57eb, 0x57ec, 0x57ee, 0x57f0, 0x57f1, 0x57f2,
-  0x57f3, 0x57f5, 0x57f6, 0x57f7, 0x57fb, 0x57fc, 0x57fe, 0x57ff,
-  0x5801, 0x5803, 0x5804, 0x5805, 0x5808, 0x5809, 0x580a, 0x580c,
-  0x580e, 0x580f, 0x5810, 0x5812, 0x5813, 0x5814, 0x5816, 0x5817,
-  0x5818, 0x581a, 0x581b, 0x581c, 0x581d, 0x581f, 0x5822, 0x5823,
-  0x5825, 0x5826, 0x5827, 0x5828, 0x5829, 0x582b, 0x582c, 0x582d,
-  0x582e, 0x582f, 0x5831, 0x5832, 0x5833, 0x5834, 0x5836, 0x5837,
-  0x5838, 0x5839, 0x583a, 0x583b, 0x583c, 0x583d,
-  /* 0x89 */
-  0x583e, 0x583f, 0x5840, 0x5841, 0x5842, 0x5843, 0x5845, 0x5846,
-  0x5847, 0x5848, 0x5849, 0x584a, 0x584b, 0x584e, 0x584f, 0x5850,
-  0x5852, 0x5853, 0x5855, 0x5856, 0x5857, 0x5859, 0x585a, 0x585b,
-  0x585c, 0x585d, 0x585f, 0x5860, 0x5861, 0x5862, 0x5863, 0x5864,
-  0x5866, 0x5867, 0x5868, 0x5869, 0x586a, 0x586d, 0x586e, 0x586f,
-  0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876, 0x5877,
-  0x5878, 0x5879, 0x587a, 0x587b, 0x587c, 0x587d, 0x587f, 0x5882,
-  0x5884, 0x5886, 0x5887, 0x5888, 0x588a, 0x588b, 0x588c, 0x588d,
-  0x588e, 0x588f, 0x5890, 0x5891, 0x5894, 0x5895, 0x5896, 0x5897,
-  0x5898, 0x589b, 0x589c, 0x589d, 0x58a0, 0x58a1, 0x58a2, 0x58a3,
-  0x58a4, 0x58a5, 0x58a6, 0x58a7, 0x58aa, 0x58ab, 0x58ac, 0x58ad,
-  0x58ae, 0x58af, 0x58b0, 0x58b1, 0x58b2, 0x58b3, 0x58b4, 0x58b5,
-  0x58b6, 0x58b7, 0x58b8, 0x58b9, 0x58ba, 0x58bb, 0x58bd, 0x58be,
-  0x58bf, 0x58c0, 0x58c2, 0x58c3, 0x58c4, 0x58c6, 0x58c7, 0x58c8,
-  0x58c9, 0x58ca, 0x58cb, 0x58cc, 0x58cd, 0x58ce, 0x58cf, 0x58d0,
-  0x58d2, 0x58d3, 0x58d4, 0x58d6, 0x58d7, 0x58d8, 0x58d9, 0x58da,
-  0x58db, 0x58dc, 0x58dd, 0x58de, 0x58df, 0x58e0, 0x58e1, 0x58e2,
-  0x58e3, 0x58e5, 0x58e6, 0x58e7, 0x58e8, 0x58e9, 0x58ea, 0x58ed,
-  0x58ef, 0x58f1, 0x58f2, 0x58f4, 0x58f5, 0x58f7, 0x58f8, 0x58fa,
-  0x58fb, 0x58fc, 0x58fd, 0x58fe, 0x58ff, 0x5900, 0x5901, 0x5903,
-  0x5905, 0x5906, 0x5908, 0x5909, 0x590a, 0x590b, 0x590c, 0x590e,
-  0x5910, 0x5911, 0x5912, 0x5913, 0x5917, 0x5918, 0x591b, 0x591d,
-  0x591e, 0x5920, 0x5921, 0x5922, 0x5923, 0x5926, 0x5928, 0x592c,
-  0x5930, 0x5932, 0x5933, 0x5935, 0x5936, 0x593b,
-  /* 0x8a */
-  0x593d, 0x593e, 0x593f, 0x5940, 0x5943, 0x5945, 0x5946, 0x594a,
-  0x594c, 0x594d, 0x5950, 0x5952, 0x5953, 0x5959, 0x595b, 0x595c,
-  0x595d, 0x595e, 0x595f, 0x5961, 0x5963, 0x5964, 0x5966, 0x5967,
-  0x5968, 0x5969, 0x596a, 0x596b, 0x596c, 0x596d, 0x596e, 0x596f,
-  0x5970, 0x5971, 0x5972, 0x5975, 0x5977, 0x597a, 0x597b, 0x597c,
-  0x597e, 0x597f, 0x5980, 0x5985, 0x5989, 0x598b, 0x598c, 0x598e,
-  0x598f, 0x5990, 0x5991, 0x5994, 0x5995, 0x5998, 0x599a, 0x599b,
-  0x599c, 0x599d, 0x599f, 0x59a0, 0x59a1, 0x59a2, 0x59a6, 0x59a7,
-  0x59ac, 0x59ad, 0x59b0, 0x59b1, 0x59b3, 0x59b4, 0x59b5, 0x59b6,
-  0x59b7, 0x59b8, 0x59ba, 0x59bc, 0x59bd, 0x59bf, 0x59c0, 0x59c1,
-  0x59c2, 0x59c3, 0x59c4, 0x59c5, 0x59c7, 0x59c8, 0x59c9, 0x59cc,
-  0x59cd, 0x59ce, 0x59cf, 0x59d5, 0x59d6, 0x59d9, 0x59db, 0x59de,
-  0x59df, 0x59e0, 0x59e1, 0x59e2, 0x59e4, 0x59e6, 0x59e7, 0x59e9,
-  0x59ea, 0x59eb, 0x59ed, 0x59ee, 0x59ef, 0x59f0, 0x59f1, 0x59f2,
-  0x59f3, 0x59f4, 0x59f5, 0x59f6, 0x59f7, 0x59f8, 0x59fa, 0x59fc,
-  0x59fd, 0x59fe, 0x5a00, 0x5a02, 0x5a0a, 0x5a0b, 0x5a0d, 0x5a0e,
-  0x5a0f, 0x5a10, 0x5a12, 0x5a14, 0x5a15, 0x5a16, 0x5a17, 0x5a19,
-  0x5a1a, 0x5a1b, 0x5a1d, 0x5a1e, 0x5a21, 0x5a22, 0x5a24, 0x5a26,
-  0x5a27, 0x5a28, 0x5a2a, 0x5a2b, 0x5a2c, 0x5a2d, 0x5a2e, 0x5a2f,
-  0x5a30, 0x5a33, 0x5a35, 0x5a37, 0x5a38, 0x5a39, 0x5a3a, 0x5a3b,
-  0x5a3d, 0x5a3e, 0x5a3f, 0x5a41, 0x5a42, 0x5a43, 0x5a44, 0x5a45,
-  0x5a47, 0x5a48, 0x5a4b, 0x5a4c, 0x5a4d, 0x5a4e, 0x5a4f, 0x5a50,
-  0x5a51, 0x5a52, 0x5a53, 0x5a54, 0x5a56, 0x5a57, 0x5a58, 0x5a59,
-  0x5a5b, 0x5a5c, 0x5a5d, 0x5a5e, 0x5a5f, 0x5a60,
-  /* 0x8b */
-  0x5a61, 0x5a63, 0x5a64, 0x5a65, 0x5a66, 0x5a68, 0x5a69, 0x5a6b,
-  0x5a6c, 0x5a6d, 0x5a6e, 0x5a6f, 0x5a70, 0x5a71, 0x5a72, 0x5a73,
-  0x5a78, 0x5a79, 0x5a7b, 0x5a7c, 0x5a7d, 0x5a7e, 0x5a80, 0x5a81,
-  0x5a82, 0x5a83, 0x5a84, 0x5a85, 0x5a86, 0x5a87, 0x5a88, 0x5a89,
-  0x5a8a, 0x5a8b, 0x5a8c, 0x5a8d, 0x5a8e, 0x5a8f, 0x5a90, 0x5a91,
-  0x5a93, 0x5a94, 0x5a95, 0x5a96, 0x5a97, 0x5a98, 0x5a99, 0x5a9c,
-  0x5a9d, 0x5a9e, 0x5a9f, 0x5aa0, 0x5aa1, 0x5aa2, 0x5aa3, 0x5aa4,
-  0x5aa5, 0x5aa6, 0x5aa7, 0x5aa8, 0x5aa9, 0x5aab, 0x5aac, 0x5aad,
-  0x5aae, 0x5aaf, 0x5ab0, 0x5ab1, 0x5ab4, 0x5ab6, 0x5ab7, 0x5ab9,
-  0x5aba, 0x5abb, 0x5abc, 0x5abd, 0x5abf, 0x5ac0, 0x5ac3, 0x5ac4,
-  0x5ac5, 0x5ac6, 0x5ac7, 0x5ac8, 0x5aca, 0x5acb, 0x5acd, 0x5ace,
-  0x5acf, 0x5ad0, 0x5ad1, 0x5ad3, 0x5ad5, 0x5ad7, 0x5ad9, 0x5ada,
-  0x5adb, 0x5add, 0x5ade, 0x5adf, 0x5ae2, 0x5ae4, 0x5ae5, 0x5ae7,
-  0x5ae8, 0x5aea, 0x5aec, 0x5aed, 0x5aee, 0x5aef, 0x5af0, 0x5af2,
-  0x5af3, 0x5af4, 0x5af5, 0x5af6, 0x5af7, 0x5af8, 0x5af9, 0x5afa,
-  0x5afb, 0x5afc, 0x5afd, 0x5afe, 0x5aff, 0x5b00, 0x5b01, 0x5b02,
-  0x5b03, 0x5b04, 0x5b05, 0x5b06, 0x5b07, 0x5b08, 0x5b0a, 0x5b0b,
-  0x5b0c, 0x5b0d, 0x5b0e, 0x5b0f, 0x5b10, 0x5b11, 0x5b12, 0x5b13,
-  0x5b14, 0x5b15, 0x5b18, 0x5b19, 0x5b1a, 0x5b1b, 0x5b1c, 0x5b1d,
-  0x5b1e, 0x5b1f, 0x5b20, 0x5b21, 0x5b22, 0x5b23, 0x5b24, 0x5b25,
-  0x5b26, 0x5b27, 0x5b28, 0x5b29, 0x5b2a, 0x5b2b, 0x5b2c, 0x5b2d,
-  0x5b2e, 0x5b2f, 0x5b30, 0x5b31, 0x5b33, 0x5b35, 0x5b36, 0x5b38,
-  0x5b39, 0x5b3a, 0x5b3b, 0x5b3c, 0x5b3d, 0x5b3e, 0x5b3f, 0x5b41,
-  0x5b42, 0x5b43, 0x5b44, 0x5b45, 0x5b46, 0x5b47,
-  /* 0x8c */
-  0x5b48, 0x5b49, 0x5b4a, 0x5b4b, 0x5b4c, 0x5b4d, 0x5b4e, 0x5b4f,
-  0x5b52, 0x5b56, 0x5b5e, 0x5b60, 0x5b61, 0x5b67, 0x5b68, 0x5b6b,
-  0x5b6d, 0x5b6e, 0x5b6f, 0x5b72, 0x5b74, 0x5b76, 0x5b77, 0x5b78,
-  0x5b79, 0x5b7b, 0x5b7c, 0x5b7e, 0x5b7f, 0x5b82, 0x5b86, 0x5b8a,
-  0x5b8d, 0x5b8e, 0x5b90, 0x5b91, 0x5b92, 0x5b94, 0x5b96, 0x5b9f,
-  0x5ba7, 0x5ba8, 0x5ba9, 0x5bac, 0x5bad, 0x5bae, 0x5baf, 0x5bb1,
-  0x5bb2, 0x5bb7, 0x5bba, 0x5bbb, 0x5bbc, 0x5bc0, 0x5bc1, 0x5bc3,
-  0x5bc8, 0x5bc9, 0x5bca, 0x5bcb, 0x5bcd, 0x5bce, 0x5bcf, 0x5bd1,
-  0x5bd4, 0x5bd5, 0x5bd6, 0x5bd7, 0x5bd8, 0x5bd9, 0x5bda, 0x5bdb,
-  0x5bdc, 0x5be0, 0x5be2, 0x5be3, 0x5be6, 0x5be7, 0x5be9, 0x5bea,
-  0x5beb, 0x5bec, 0x5bed, 0x5bef, 0x5bf1, 0x5bf2, 0x5bf3, 0x5bf4,
-  0x5bf5, 0x5bf6, 0x5bf7, 0x5bfd, 0x5bfe, 0x5c00, 0x5c02, 0x5c03,
-  0x5c05, 0x5c07, 0x5c08, 0x5c0b, 0x5c0c, 0x5c0d, 0x5c0e, 0x5c10,
-  0x5c12, 0x5c13, 0x5c17, 0x5c19, 0x5c1b, 0x5c1e, 0x5c1f, 0x5c20,
-  0x5c21, 0x5c23, 0x5c26, 0x5c28, 0x5c29, 0x5c2a, 0x5c2b, 0x5c2d,
-  0x5c2e, 0x5c2f, 0x5c30, 0x5c32, 0x5c33, 0x5c35, 0x5c36, 0x5c37,
-  0x5c43, 0x5c44, 0x5c46, 0x5c47, 0x5c4c, 0x5c4d, 0x5c52, 0x5c53,
-  0x5c54, 0x5c56, 0x5c57, 0x5c58, 0x5c5a, 0x5c5b, 0x5c5c, 0x5c5d,
-  0x5c5f, 0x5c62, 0x5c64, 0x5c67, 0x5c68, 0x5c69, 0x5c6a, 0x5c6b,
-  0x5c6c, 0x5c6d, 0x5c70, 0x5c72, 0x5c73, 0x5c74, 0x5c75, 0x5c76,
-  0x5c77, 0x5c78, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c7e, 0x5c80, 0x5c83,
-  0x5c84, 0x5c85, 0x5c86, 0x5c87, 0x5c89, 0x5c8a, 0x5c8b, 0x5c8e,
-  0x5c8f, 0x5c92, 0x5c93, 0x5c95, 0x5c9d, 0x5c9e, 0x5c9f, 0x5ca0,
-  0x5ca1, 0x5ca4, 0x5ca5, 0x5ca6, 0x5ca7, 0x5ca8,
-  /* 0x8d */
-  0x5caa, 0x5cae, 0x5caf, 0x5cb0, 0x5cb2, 0x5cb4, 0x5cb6, 0x5cb9,
-  0x5cba, 0x5cbb, 0x5cbc, 0x5cbe, 0x5cc0, 0x5cc2, 0x5cc3, 0x5cc5,
-  0x5cc6, 0x5cc7, 0x5cc8, 0x5cc9, 0x5cca, 0x5ccc, 0x5ccd, 0x5cce,
-  0x5ccf, 0x5cd0, 0x5cd1, 0x5cd3, 0x5cd4, 0x5cd5, 0x5cd6, 0x5cd7,
-  0x5cd8, 0x5cda, 0x5cdb, 0x5cdc, 0x5cdd, 0x5cde, 0x5cdf, 0x5ce0,
-  0x5ce2, 0x5ce3, 0x5ce7, 0x5ce9, 0x5ceb, 0x5cec, 0x5cee, 0x5cef,
-  0x5cf1, 0x5cf2, 0x5cf3, 0x5cf4, 0x5cf5, 0x5cf6, 0x5cf7, 0x5cf8,
-  0x5cf9, 0x5cfa, 0x5cfc, 0x5cfd, 0x5cfe, 0x5cff, 0x5d00, 0x5d01,
-  0x5d04, 0x5d05, 0x5d08, 0x5d09, 0x5d0a, 0x5d0b, 0x5d0c, 0x5d0d,
-  0x5d0f, 0x5d10, 0x5d11, 0x5d12, 0x5d13, 0x5d15, 0x5d17, 0x5d18,
-  0x5d19, 0x5d1a, 0x5d1c, 0x5d1d, 0x5d1f, 0x5d20, 0x5d21, 0x5d22,
-  0x5d23, 0x5d25, 0x5d28, 0x5d2a, 0x5d2b, 0x5d2c, 0x5d2f, 0x5d30,
-  0x5d31, 0x5d32, 0x5d33, 0x5d35, 0x5d36, 0x5d37, 0x5d38, 0x5d39,
-  0x5d3a, 0x5d3b, 0x5d3c, 0x5d3f, 0x5d40, 0x5d41, 0x5d42, 0x5d43,
-  0x5d44, 0x5d45, 0x5d46, 0x5d48, 0x5d49, 0x5d4d, 0x5d4e, 0x5d4f,
-  0x5d50, 0x5d51, 0x5d52, 0x5d53, 0x5d54, 0x5d55, 0x5d56, 0x5d57,
-  0x5d59, 0x5d5a, 0x5d5c, 0x5d5e, 0x5d5f, 0x5d60, 0x5d61, 0x5d62,
-  0x5d63, 0x5d64, 0x5d65, 0x5d66, 0x5d67, 0x5d68, 0x5d6a, 0x5d6d,
-  0x5d6e, 0x5d70, 0x5d71, 0x5d72, 0x5d73, 0x5d75, 0x5d76, 0x5d77,
-  0x5d78, 0x5d79, 0x5d7a, 0x5d7b, 0x5d7c, 0x5d7d, 0x5d7e, 0x5d7f,
-  0x5d80, 0x5d81, 0x5d83, 0x5d84, 0x5d85, 0x5d86, 0x5d87, 0x5d88,
-  0x5d89, 0x5d8a, 0x5d8b, 0x5d8c, 0x5d8d, 0x5d8e, 0x5d8f, 0x5d90,
-  0x5d91, 0x5d92, 0x5d93, 0x5d94, 0x5d95, 0x5d96, 0x5d97, 0x5d98,
-  0x5d9a, 0x5d9b, 0x5d9c, 0x5d9e, 0x5d9f, 0x5da0,
-  /* 0x8e */
-  0x5da1, 0x5da2, 0x5da3, 0x5da4, 0x5da5, 0x5da6, 0x5da7, 0x5da8,
-  0x5da9, 0x5daa, 0x5dab, 0x5dac, 0x5dad, 0x5dae, 0x5daf, 0x5db0,
-  0x5db1, 0x5db2, 0x5db3, 0x5db4, 0x5db5, 0x5db6, 0x5db8, 0x5db9,
-  0x5dba, 0x5dbb, 0x5dbc, 0x5dbd, 0x5dbe, 0x5dbf, 0x5dc0, 0x5dc1,
-  0x5dc2, 0x5dc3, 0x5dc4, 0x5dc6, 0x5dc7, 0x5dc8, 0x5dc9, 0x5dca,
-  0x5dcb, 0x5dcc, 0x5dce, 0x5dcf, 0x5dd0, 0x5dd1, 0x5dd2, 0x5dd3,
-  0x5dd4, 0x5dd5, 0x5dd6, 0x5dd7, 0x5dd8, 0x5dd9, 0x5dda, 0x5ddc,
-  0x5ddf, 0x5de0, 0x5de3, 0x5de4, 0x5dea, 0x5dec, 0x5ded, 0x5df0,
-  0x5df5, 0x5df6, 0x5df8, 0x5df9, 0x5dfa, 0x5dfb, 0x5dfc, 0x5dff,
-  0x5e00, 0x5e04, 0x5e07, 0x5e09, 0x5e0a, 0x5e0b, 0x5e0d, 0x5e0e,
-  0x5e12, 0x5e13, 0x5e17, 0x5e1e, 0x5e1f, 0x5e20, 0x5e21, 0x5e22,
-  0x5e23, 0x5e24, 0x5e25, 0x5e28, 0x5e29, 0x5e2a, 0x5e2b, 0x5e2c,
-  0x5e2f, 0x5e30, 0x5e32, 0x5e33, 0x5e34, 0x5e35, 0x5e36, 0x5e39,
-  0x5e3a, 0x5e3e, 0x5e3f, 0x5e40, 0x5e41, 0x5e43, 0x5e46, 0x5e47,
-  0x5e48, 0x5e49, 0x5e4a, 0x5e4b, 0x5e4d, 0x5e4e, 0x5e4f, 0x5e50,
-  0x5e51, 0x5e52, 0x5e53, 0x5e56, 0x5e57, 0x5e58, 0x5e59, 0x5e5a,
-  0x5e5c, 0x5e5d, 0x5e5f, 0x5e60, 0x5e63, 0x5e64, 0x5e65, 0x5e66,
-  0x5e67, 0x5e68, 0x5e69, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e,
-  0x5e6f, 0x5e70, 0x5e71, 0x5e75, 0x5e77, 0x5e79, 0x5e7e, 0x5e81,
-  0x5e82, 0x5e83, 0x5e85, 0x5e88, 0x5e89, 0x5e8c, 0x5e8d, 0x5e8e,
-  0x5e92, 0x5e98, 0x5e9b, 0x5e9d, 0x5ea1, 0x5ea2, 0x5ea3, 0x5ea4,
-  0x5ea8, 0x5ea9, 0x5eaa, 0x5eab, 0x5eac, 0x5eae, 0x5eaf, 0x5eb0,
-  0x5eb1, 0x5eb2, 0x5eb4, 0x5eba, 0x5ebb, 0x5ebc, 0x5ebd, 0x5ebf,
-  0x5ec0, 0x5ec1, 0x5ec2, 0x5ec3, 0x5ec4, 0x5ec5,
-  /* 0x8f */
-  0x5ec6, 0x5ec7, 0x5ec8, 0x5ecb, 0x5ecc, 0x5ecd, 0x5ece, 0x5ecf,
-  0x5ed0, 0x5ed4, 0x5ed5, 0x5ed7, 0x5ed8, 0x5ed9, 0x5eda, 0x5edc,
-  0x5edd, 0x5ede, 0x5edf, 0x5ee0, 0x5ee1, 0x5ee2, 0x5ee3, 0x5ee4,
-  0x5ee5, 0x5ee6, 0x5ee7, 0x5ee9, 0x5eeb, 0x5eec, 0x5eed, 0x5eee,
-  0x5eef, 0x5ef0, 0x5ef1, 0x5ef2, 0x5ef3, 0x5ef5, 0x5ef8, 0x5ef9,
-  0x5efb, 0x5efc, 0x5efd, 0x5f05, 0x5f06, 0x5f07, 0x5f09, 0x5f0c,
-  0x5f0d, 0x5f0e, 0x5f10, 0x5f12, 0x5f14, 0x5f16, 0x5f19, 0x5f1a,
-  0x5f1c, 0x5f1d, 0x5f1e, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f28,
-  0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f32, 0x5f33, 0x5f34, 0x5f35,
-  0x5f36, 0x5f37, 0x5f38, 0x5f3b, 0x5f3d, 0x5f3e, 0x5f3f, 0x5f41,
-  0x5f42, 0x5f43, 0x5f44, 0x5f45, 0x5f46, 0x5f47, 0x5f48, 0x5f49,
-  0x5f4a, 0x5f4b, 0x5f4c, 0x5f4d, 0x5f4e, 0x5f4f, 0x5f51, 0x5f54,
-  0x5f59, 0x5f5a, 0x5f5b, 0x5f5c, 0x5f5e, 0x5f5f, 0x5f60, 0x5f63,
-  0x5f65, 0x5f67, 0x5f68, 0x5f6b, 0x5f6e, 0x5f6f, 0x5f72, 0x5f74,
-  0x5f75, 0x5f76, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e, 0x5f7f, 0x5f83,
-  0x5f86, 0x5f8d, 0x5f8e, 0x5f8f, 0x5f91, 0x5f93, 0x5f94, 0x5f96,
-  0x5f9a, 0x5f9b, 0x5f9d, 0x5f9e, 0x5f9f, 0x5fa0, 0x5fa2, 0x5fa3,
-  0x5fa4, 0x5fa5, 0x5fa6, 0x5fa7, 0x5fa9, 0x5fab, 0x5fac, 0x5faf,
-  0x5fb0, 0x5fb1, 0x5fb2, 0x5fb3, 0x5fb4, 0x5fb6, 0x5fb8, 0x5fb9,
-  0x5fba, 0x5fbb, 0x5fbe, 0x5fbf, 0x5fc0, 0x5fc1, 0x5fc2, 0x5fc7,
-  0x5fc8, 0x5fca, 0x5fcb, 0x5fce, 0x5fd3, 0x5fd4, 0x5fd5, 0x5fda,
-  0x5fdb, 0x5fdc, 0x5fde, 0x5fdf, 0x5fe2, 0x5fe3, 0x5fe5, 0x5fe6,
-  0x5fe8, 0x5fe9, 0x5fec, 0x5fef, 0x5ff0, 0x5ff2, 0x5ff3, 0x5ff4,
-  0x5ff6, 0x5ff7, 0x5ff9, 0x5ffa, 0x5ffc, 0x6007,
-  /* 0x90 */
-  0x6008, 0x6009, 0x600b, 0x600c, 0x6010, 0x6011, 0x6013, 0x6017,
-  0x6018, 0x601a, 0x601e, 0x601f, 0x6022, 0x6023, 0x6024, 0x602c,
-  0x602d, 0x602e, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6036,
-  0x6037, 0x6038, 0x6039, 0x603a, 0x603d, 0x603e, 0x6040, 0x6044,
-  0x6045, 0x6046, 0x6047, 0x6048, 0x6049, 0x604a, 0x604c, 0x604e,
-  0x604f, 0x6051, 0x6053, 0x6054, 0x6056, 0x6057, 0x6058, 0x605b,
-  0x605c, 0x605e, 0x605f, 0x6060, 0x6061, 0x6065, 0x6066, 0x606e,
-  0x6071, 0x6072, 0x6074, 0x6075, 0x6077, 0x607e, 0x6080, 0x6081,
-  0x6082, 0x6085, 0x6086, 0x6087, 0x6088, 0x608a, 0x608b, 0x608e,
-  0x608f, 0x6090, 0x6091, 0x6093, 0x6095, 0x6097, 0x6098, 0x6099,
-  0x609c, 0x609e, 0x60a1, 0x60a2, 0x60a4, 0x60a5, 0x60a7, 0x60a9,
-  0x60aa, 0x60ae, 0x60b0, 0x60b3, 0x60b5, 0x60b6, 0x60b7, 0x60b9,
-  0x60ba, 0x60bd, 0x60be, 0x60bf, 0x60c0, 0x60c1, 0x60c2, 0x60c3,
-  0x60c4, 0x60c7, 0x60c8, 0x60c9, 0x60cc, 0x60cd, 0x60ce, 0x60cf,
-  0x60d0, 0x60d2, 0x60d3, 0x60d4, 0x60d6, 0x60d7, 0x60d9, 0x60db,
-  0x60de, 0x60e1, 0x60e2, 0x60e3, 0x60e4, 0x60e5, 0x60ea, 0x60f1,
-  0x60f2, 0x60f5, 0x60f7, 0x60f8, 0x60fb, 0x60fc, 0x60fd, 0x60fe,
-  0x60ff, 0x6102, 0x6103, 0x6104, 0x6105, 0x6107, 0x610a, 0x610b,
-  0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, 0x6117,
-  0x6118, 0x6119, 0x611b, 0x611c, 0x611d, 0x611e, 0x6121, 0x6122,
-  0x6125, 0x6128, 0x6129, 0x612a, 0x612c, 0x612d, 0x612e, 0x612f,
-  0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, 0x6137,
-  0x6138, 0x6139, 0x613a, 0x613b, 0x613c, 0x613d, 0x613e, 0x6140,
-  0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146,
-  /* 0x91 */
-  0x6147, 0x6149, 0x614b, 0x614d, 0x614f, 0x6150, 0x6152, 0x6153,
-  0x6154, 0x6156, 0x6157, 0x6158, 0x6159, 0x615a, 0x615b, 0x615c,
-  0x615e, 0x615f, 0x6160, 0x6161, 0x6163, 0x6164, 0x6165, 0x6166,
-  0x6169, 0x616a, 0x616b, 0x616c, 0x616d, 0x616e, 0x616f, 0x6171,
-  0x6172, 0x6173, 0x6174, 0x6176, 0x6178, 0x6179, 0x617a, 0x617b,
-  0x617c, 0x617d, 0x617e, 0x617f, 0x6180, 0x6181, 0x6182, 0x6183,
-  0x6184, 0x6185, 0x6186, 0x6187, 0x6188, 0x6189, 0x618a, 0x618c,
-  0x618d, 0x618f, 0x6190, 0x6191, 0x6192, 0x6193, 0x6195, 0x6196,
-  0x6197, 0x6198, 0x6199, 0x619a, 0x619b, 0x619c, 0x619e, 0x619f,
-  0x61a0, 0x61a1, 0x61a2, 0x61a3, 0x61a4, 0x61a5, 0x61a6, 0x61aa,
-  0x61ab, 0x61ad, 0x61ae, 0x61af, 0x61b0, 0x61b1, 0x61b2, 0x61b3,
-  0x61b4, 0x61b5, 0x61b6, 0x61b8, 0x61b9, 0x61ba, 0x61bb, 0x61bc,
-  0x61bd, 0x61bf, 0x61c0, 0x61c1, 0x61c3, 0x61c4, 0x61c5, 0x61c6,
-  0x61c7, 0x61c9, 0x61cc, 0x61cd, 0x61ce, 0x61cf, 0x61d0, 0x61d3,
-  0x61d5, 0x61d6, 0x61d7, 0x61d8, 0x61d9, 0x61da, 0x61db, 0x61dc,
-  0x61dd, 0x61de, 0x61df, 0x61e0, 0x61e1, 0x61e2, 0x61e3, 0x61e4,
-  0x61e5, 0x61e7, 0x61e8, 0x61e9, 0x61ea, 0x61eb, 0x61ec, 0x61ed,
-  0x61ee, 0x61ef, 0x61f0, 0x61f1, 0x61f2, 0x61f3, 0x61f4, 0x61f6,
-  0x61f7, 0x61f8, 0x61f9, 0x61fa, 0x61fb, 0x61fc, 0x61fd, 0x61fe,
-  0x6200, 0x6201, 0x6202, 0x6203, 0x6204, 0x6205, 0x6207, 0x6209,
-  0x6213, 0x6214, 0x6219, 0x621c, 0x621d, 0x621e, 0x6220, 0x6223,
-  0x6226, 0x6227, 0x6228, 0x6229, 0x622b, 0x622d, 0x622f, 0x6230,
-  0x6231, 0x6232, 0x6235, 0x6236, 0x6238, 0x6239, 0x623a, 0x623b,
-  0x623c, 0x6242, 0x6244, 0x6245, 0x6246, 0x624a,
-  /* 0x92 */
-  0x624f, 0x6250, 0x6255, 0x6256, 0x6257, 0x6259, 0x625a, 0x625c,
-  0x625d, 0x625e, 0x625f, 0x6260, 0x6261, 0x6262, 0x6264, 0x6265,
-  0x6268, 0x6271, 0x6272, 0x6274, 0x6275, 0x6277, 0x6278, 0x627a,
-  0x627b, 0x627d, 0x6281, 0x6282, 0x6283, 0x6285, 0x6286, 0x6287,
-  0x6288, 0x628b, 0x628c, 0x628d, 0x628e, 0x628f, 0x6290, 0x6294,
-  0x6299, 0x629c, 0x629d, 0x629e, 0x62a3, 0x62a6, 0x62a7, 0x62a9,
-  0x62aa, 0x62ad, 0x62ae, 0x62af, 0x62b0, 0x62b2, 0x62b3, 0x62b4,
-  0x62b6, 0x62b7, 0x62b8, 0x62ba, 0x62be, 0x62c0, 0x62c1, 0x62c3,
-  0x62cb, 0x62cf, 0x62d1, 0x62d5, 0x62dd, 0x62de, 0x62e0, 0x62e1,
-  0x62e4, 0x62ea, 0x62eb, 0x62f0, 0x62f2, 0x62f5, 0x62f8, 0x62f9,
-  0x62fa, 0x62fb, 0x6300, 0x6303, 0x6304, 0x6305, 0x6306, 0x630a,
-  0x630b, 0x630c, 0x630d, 0x630f, 0x6310, 0x6312, 0x6313, 0x6314,
-  0x6315, 0x6317, 0x6318, 0x6319, 0x631c, 0x6326, 0x6327, 0x6329,
-  0x632c, 0x632d, 0x632e, 0x6330, 0x6331, 0x6333, 0x6334, 0x6335,
-  0x6336, 0x6337, 0x6338, 0x633b, 0x633c, 0x633e, 0x633f, 0x6340,
-  0x6341, 0x6344, 0x6347, 0x6348, 0x634a, 0x6351, 0x6352, 0x6353,
-  0x6354, 0x6356, 0x6357, 0x6358, 0x6359, 0x635a, 0x635b, 0x635c,
-  0x635d, 0x6360, 0x6364, 0x6365, 0x6366, 0x6368, 0x636a, 0x636b,
-  0x636c, 0x636f, 0x6370, 0x6372, 0x6373, 0x6374, 0x6375, 0x6378,
-  0x6379, 0x637c, 0x637d, 0x637e, 0x637f, 0x6381, 0x6383, 0x6384,
-  0x6385, 0x6386, 0x638b, 0x638d, 0x6391, 0x6393, 0x6394, 0x6395,
-  0x6397, 0x6399, 0x639a, 0x639b, 0x639c, 0x639d, 0x639e, 0x639f,
-  0x63a1, 0x63a4, 0x63a6, 0x63ab, 0x63af, 0x63b1, 0x63b2, 0x63b5,
-  0x63b6, 0x63b9, 0x63bb, 0x63bd, 0x63bf, 0x63c0,
-  /* 0x93 */
-  0x63c1, 0x63c2, 0x63c3, 0x63c5, 0x63c7, 0x63c8, 0x63ca, 0x63cb,
-  0x63cc, 0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63d7, 0x63d8, 0x63d9,
-  0x63da, 0x63db, 0x63dc, 0x63dd, 0x63df, 0x63e2, 0x63e4, 0x63e5,
-  0x63e6, 0x63e7, 0x63e8, 0x63eb, 0x63ec, 0x63ee, 0x63ef, 0x63f0,
-  0x63f1, 0x63f3, 0x63f5, 0x63f7, 0x63f9, 0x63fa, 0x63fb, 0x63fc,
-  0x63fe, 0x6403, 0x6404, 0x6406, 0x6407, 0x6408, 0x6409, 0x640a,
-  0x640d, 0x640e, 0x6411, 0x6412, 0x6415, 0x6416, 0x6417, 0x6418,
-  0x6419, 0x641a, 0x641d, 0x641f, 0x6422, 0x6423, 0x6424, 0x6425,
-  0x6427, 0x6428, 0x6429, 0x642b, 0x642e, 0x642f, 0x6430, 0x6431,
-  0x6432, 0x6433, 0x6435, 0x6436, 0x6437, 0x6438, 0x6439, 0x643b,
-  0x643c, 0x643e, 0x6440, 0x6442, 0x6443, 0x6449, 0x644b, 0x644c,
-  0x644d, 0x644e, 0x644f, 0x6450, 0x6451, 0x6453, 0x6455, 0x6456,
-  0x6457, 0x6459, 0x645a, 0x645b, 0x645c, 0x645d, 0x645f, 0x6460,
-  0x6461, 0x6462, 0x6463, 0x6464, 0x6465, 0x6466, 0x6468, 0x646a,
-  0x646b, 0x646c, 0x646e, 0x646f, 0x6470, 0x6471, 0x6472, 0x6473,
-  0x6474, 0x6475, 0x6476, 0x6477, 0x647b, 0x647c, 0x647d, 0x647e,
-  0x647f, 0x6480, 0x6481, 0x6483, 0x6486, 0x6488, 0x6489, 0x648a,
-  0x648b, 0x648c, 0x648d, 0x648e, 0x648f, 0x6490, 0x6493, 0x6494,
-  0x6497, 0x6498, 0x649a, 0x649b, 0x649c, 0x649d, 0x649f, 0x64a0,
-  0x64a1, 0x64a2, 0x64a3, 0x64a5, 0x64a6, 0x64a7, 0x64a8, 0x64aa,
-  0x64ab, 0x64af, 0x64b1, 0x64b2, 0x64b3, 0x64b4, 0x64b6, 0x64b9,
-  0x64bb, 0x64bd, 0x64be, 0x64bf, 0x64c1, 0x64c3, 0x64c4, 0x64c6,
-  0x64c7, 0x64c8, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64cf, 0x64d1,
-  0x64d3, 0x64d4, 0x64d5, 0x64d6, 0x64d9, 0x64da,
-  /* 0x94 */
-  0x64db, 0x64dc, 0x64dd, 0x64df, 0x64e0, 0x64e1, 0x64e3, 0x64e5,
-  0x64e7, 0x64e8, 0x64e9, 0x64ea, 0x64eb, 0x64ec, 0x64ed, 0x64ee,
-  0x64ef, 0x64f0, 0x64f1, 0x64f2, 0x64f3, 0x64f4, 0x64f5, 0x64f6,
-  0x64f7, 0x64f8, 0x64f9, 0x64fa, 0x64fb, 0x64fc, 0x64fd, 0x64fe,
-  0x64ff, 0x6501, 0x6502, 0x6503, 0x6504, 0x6505, 0x6506, 0x6507,
-  0x6508, 0x650a, 0x650b, 0x650c, 0x650d, 0x650e, 0x650f, 0x6510,
-  0x6511, 0x6513, 0x6514, 0x6515, 0x6516, 0x6517, 0x6519, 0x651a,
-  0x651b, 0x651c, 0x651d, 0x651e, 0x651f, 0x6520, 0x6521, 0x6522,
-  0x6523, 0x6524, 0x6526, 0x6527, 0x6528, 0x6529, 0x652a, 0x652c,
-  0x652d, 0x6530, 0x6531, 0x6532, 0x6533, 0x6537, 0x653a, 0x653c,
-  0x653d, 0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6546, 0x6547,
-  0x654a, 0x654b, 0x654d, 0x654e, 0x6550, 0x6552, 0x6553, 0x6554,
-  0x6557, 0x6558, 0x655a, 0x655c, 0x655f, 0x6560, 0x6561, 0x6564,
-  0x6565, 0x6567, 0x6568, 0x6569, 0x656a, 0x656d, 0x656e, 0x656f,
-  0x6571, 0x6573, 0x6575, 0x6576, 0x6578, 0x6579, 0x657a, 0x657b,
-  0x657c, 0x657d, 0x657e, 0x657f, 0x6580, 0x6581, 0x6582, 0x6583,
-  0x6584, 0x6585, 0x6586, 0x6588, 0x6589, 0x658a, 0x658d, 0x658e,
-  0x658f, 0x6592, 0x6594, 0x6595, 0x6596, 0x6598, 0x659a, 0x659d,
-  0x659e, 0x65a0, 0x65a2, 0x65a3, 0x65a6, 0x65a8, 0x65aa, 0x65ac,
-  0x65ae, 0x65b1, 0x65b2, 0x65b3, 0x65b4, 0x65b5, 0x65b6, 0x65b7,
-  0x65b8, 0x65ba, 0x65bb, 0x65be, 0x65bf, 0x65c0, 0x65c2, 0x65c7,
-  0x65c8, 0x65c9, 0x65ca, 0x65cd, 0x65d0, 0x65d1, 0x65d3, 0x65d4,
-  0x65d5, 0x65d8, 0x65d9, 0x65da, 0x65db, 0x65dc, 0x65dd, 0x65de,
-  0x65df, 0x65e1, 0x65e3, 0x65e4, 0x65ea, 0x65eb,
-  /* 0x95 */
-  0x65f2, 0x65f3, 0x65f4, 0x65f5, 0x65f8, 0x65f9, 0x65fb, 0x65fc,
-  0x65fd, 0x65fe, 0x65ff, 0x6601, 0x6604, 0x6605, 0x6607, 0x6608,
-  0x6609, 0x660b, 0x660d, 0x6610, 0x6611, 0x6612, 0x6616, 0x6617,
-  0x6618, 0x661a, 0x661b, 0x661c, 0x661e, 0x6621, 0x6622, 0x6623,
-  0x6624, 0x6626, 0x6629, 0x662a, 0x662b, 0x662c, 0x662e, 0x6630,
-  0x6632, 0x6633, 0x6637, 0x6638, 0x6639, 0x663a, 0x663b, 0x663d,
-  0x663f, 0x6640, 0x6642, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648,
-  0x6649, 0x664a, 0x664d, 0x664e, 0x6650, 0x6651, 0x6658, 0x6659,
-  0x665b, 0x665c, 0x665d, 0x665e, 0x6660, 0x6662, 0x6663, 0x6665,
-  0x6667, 0x6669, 0x666a, 0x666b, 0x666c, 0x666d, 0x6671, 0x6672,
-  0x6673, 0x6675, 0x6678, 0x6679, 0x667b, 0x667c, 0x667d, 0x667f,
-  0x6680, 0x6681, 0x6683, 0x6685, 0x6686, 0x6688, 0x6689, 0x668a,
-  0x668b, 0x668d, 0x668e, 0x668f, 0x6690, 0x6692, 0x6693, 0x6694,
-  0x6695, 0x6698, 0x6699, 0x669a, 0x669b, 0x669c, 0x669e, 0x669f,
-  0x66a0, 0x66a1, 0x66a2, 0x66a3, 0x66a4, 0x66a5, 0x66a6, 0x66a9,
-  0x66aa, 0x66ab, 0x66ac, 0x66ad, 0x66af, 0x66b0, 0x66b1, 0x66b2,
-  0x66b3, 0x66b5, 0x66b6, 0x66b7, 0x66b8, 0x66ba, 0x66bb, 0x66bc,
-  0x66bd, 0x66bf, 0x66c0, 0x66c1, 0x66c2, 0x66c3, 0x66c4, 0x66c5,
-  0x66c6, 0x66c7, 0x66c8, 0x66c9, 0x66ca, 0x66cb, 0x66cc, 0x66cd,
-  0x66ce, 0x66cf, 0x66d0, 0x66d1, 0x66d2, 0x66d3, 0x66d4, 0x66d5,
-  0x66d6, 0x66d7, 0x66d8, 0x66da, 0x66de, 0x66df, 0x66e0, 0x66e1,
-  0x66e2, 0x66e3, 0x66e4, 0x66e5, 0x66e7, 0x66e8, 0x66ea, 0x66eb,
-  0x66ec, 0x66ed, 0x66ee, 0x66ef, 0x66f1, 0x66f5, 0x66f6, 0x66f8,
-  0x66fa, 0x66fb, 0x66fd, 0x6701, 0x6702, 0x6703,
-  /* 0x96 */
-  0x6704, 0x6705, 0x6706, 0x6707, 0x670c, 0x670e, 0x670f, 0x6711,
-  0x6712, 0x6713, 0x6716, 0x6718, 0x6719, 0x671a, 0x671c, 0x671e,
-  0x6720, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, 0x6727, 0x6729,
-  0x672e, 0x6730, 0x6732, 0x6733, 0x6736, 0x6737, 0x6738, 0x6739,
-  0x673b, 0x673c, 0x673e, 0x673f, 0x6741, 0x6744, 0x6745, 0x6747,
-  0x674a, 0x674b, 0x674d, 0x6752, 0x6754, 0x6755, 0x6757, 0x6758,
-  0x6759, 0x675a, 0x675b, 0x675d, 0x6762, 0x6763, 0x6764, 0x6766,
-  0x6767, 0x676b, 0x676c, 0x676e, 0x6771, 0x6774, 0x6776, 0x6778,
-  0x6779, 0x677a, 0x677b, 0x677d, 0x6780, 0x6782, 0x6783, 0x6785,
-  0x6786, 0x6788, 0x678a, 0x678c, 0x678d, 0x678e, 0x678f, 0x6791,
-  0x6792, 0x6793, 0x6794, 0x6796, 0x6799, 0x679b, 0x679f, 0x67a0,
-  0x67a1, 0x67a4, 0x67a6, 0x67a9, 0x67ac, 0x67ae, 0x67b1, 0x67b2,
-  0x67b4, 0x67b9, 0x67ba, 0x67bb, 0x67bc, 0x67bd, 0x67be, 0x67bf,
-  0x67c0, 0x67c2, 0x67c5, 0x67c6, 0x67c7, 0x67c8, 0x67c9, 0x67ca,
-  0x67cb, 0x67cc, 0x67cd, 0x67ce, 0x67d5, 0x67d6, 0x67d7, 0x67db,
-  0x67df, 0x67e1, 0x67e3, 0x67e4, 0x67e6, 0x67e7, 0x67e8, 0x67ea,
-  0x67eb, 0x67ed, 0x67ee, 0x67f2, 0x67f5, 0x67f6, 0x67f7, 0x67f8,
-  0x67f9, 0x67fa, 0x67fb, 0x67fc, 0x67fe, 0x6801, 0x6802, 0x6803,
-  0x6804, 0x6806, 0x680d, 0x6810, 0x6812, 0x6814, 0x6815, 0x6818,
-  0x6819, 0x681a, 0x681b, 0x681c, 0x681e, 0x681f, 0x6820, 0x6822,
-  0x6823, 0x6824, 0x6825, 0x6826, 0x6827, 0x6828, 0x682b, 0x682c,
-  0x682d, 0x682e, 0x682f, 0x6830, 0x6831, 0x6834, 0x6835, 0x6836,
-  0x683a, 0x683b, 0x683f, 0x6847, 0x684b, 0x684d, 0x684f, 0x6852,
-  0x6856, 0x6857, 0x6858, 0x6859, 0x685a, 0x685b,
-  /* 0x97 */
-  0x685c, 0x685d, 0x685e, 0x685f, 0x686a, 0x686c, 0x686d, 0x686e,
-  0x686f, 0x6870, 0x6871, 0x6872, 0x6873, 0x6875, 0x6878, 0x6879,
-  0x687a, 0x687b, 0x687c, 0x687d, 0x687e, 0x687f, 0x6880, 0x6882,
-  0x6884, 0x6887, 0x6888, 0x6889, 0x688a, 0x688b, 0x688c, 0x688d,
-  0x688e, 0x6890, 0x6891, 0x6892, 0x6894, 0x6895, 0x6896, 0x6898,
-  0x6899, 0x689a, 0x689b, 0x689c, 0x689d, 0x689e, 0x689f, 0x68a0,
-  0x68a1, 0x68a3, 0x68a4, 0x68a5, 0x68a9, 0x68aa, 0x68ab, 0x68ac,
-  0x68ae, 0x68b1, 0x68b2, 0x68b4, 0x68b6, 0x68b7, 0x68b8, 0x68b9,
-  0x68ba, 0x68bb, 0x68bc, 0x68bd, 0x68be, 0x68bf, 0x68c1, 0x68c3,
-  0x68c4, 0x68c5, 0x68c6, 0x68c7, 0x68c8, 0x68ca, 0x68cc, 0x68ce,
-  0x68cf, 0x68d0, 0x68d1, 0x68d3, 0x68d4, 0x68d6, 0x68d7, 0x68d9,
-  0x68db, 0x68dc, 0x68dd, 0x68de, 0x68df, 0x68e1, 0x68e2, 0x68e4,
-  0x68e5, 0x68e6, 0x68e7, 0x68e8, 0x68e9, 0x68ea, 0x68eb, 0x68ec,
-  0x68ed, 0x68ef, 0x68f2, 0x68f3, 0x68f4, 0x68f6, 0x68f7, 0x68f8,
-  0x68fb, 0x68fd, 0x68fe, 0x68ff, 0x6900, 0x6902, 0x6903, 0x6904,
-  0x6906, 0x6907, 0x6908, 0x6909, 0x690a, 0x690c, 0x690f, 0x6911,
-  0x6913, 0x6914, 0x6915, 0x6916, 0x6917, 0x6918, 0x6919, 0x691a,
-  0x691b, 0x691c, 0x691d, 0x691e, 0x6921, 0x6922, 0x6923, 0x6925,
-  0x6926, 0x6927, 0x6928, 0x6929, 0x692a, 0x692b, 0x692c, 0x692e,
-  0x692f, 0x6931, 0x6932, 0x6933, 0x6935, 0x6936, 0x6937, 0x6938,
-  0x693a, 0x693b, 0x693c, 0x693e, 0x6940, 0x6941, 0x6943, 0x6944,
-  0x6945, 0x6946, 0x6947, 0x6948, 0x6949, 0x694a, 0x694b, 0x694c,
-  0x694d, 0x694e, 0x694f, 0x6950, 0x6951, 0x6952, 0x6953, 0x6955,
-  0x6956, 0x6958, 0x6959, 0x695b, 0x695c, 0x695f,
-  /* 0x98 */
-  0x6961, 0x6962, 0x6964, 0x6965, 0x6967, 0x6968, 0x6969, 0x696a,
-  0x696c, 0x696d, 0x696f, 0x6970, 0x6972, 0x6973, 0x6974, 0x6975,
-  0x6976, 0x697a, 0x697b, 0x697d, 0x697e, 0x697f, 0x6981, 0x6983,
-  0x6985, 0x698a, 0x698b, 0x698c, 0x698e, 0x698f, 0x6990, 0x6991,
-  0x6992, 0x6993, 0x6996, 0x6997, 0x6999, 0x699a, 0x699d, 0x699e,
-  0x699f, 0x69a0, 0x69a1, 0x69a2, 0x69a3, 0x69a4, 0x69a5, 0x69a6,
-  0x69a9, 0x69aa, 0x69ac, 0x69ae, 0x69af, 0x69b0, 0x69b2, 0x69b3,
-  0x69b5, 0x69b6, 0x69b8, 0x69b9, 0x69ba, 0x69bc, 0x69bd, 0x69be,
-  0x69bf, 0x69c0, 0x69c2, 0x69c3, 0x69c4, 0x69c5, 0x69c6, 0x69c7,
-  0x69c8, 0x69c9, 0x69cb, 0x69cd, 0x69cf, 0x69d1, 0x69d2, 0x69d3,
-  0x69d5, 0x69d6, 0x69d7, 0x69d8, 0x69d9, 0x69da, 0x69dc, 0x69dd,
-  0x69de, 0x69e1, 0x69e2, 0x69e3, 0x69e4, 0x69e5, 0x69e6, 0x69e7,
-  0x69e8, 0x69e9, 0x69ea, 0x69eb, 0x69ec, 0x69ee, 0x69ef, 0x69f0,
-  0x69f1, 0x69f3, 0x69f4, 0x69f5, 0x69f6, 0x69f7, 0x69f8, 0x69f9,
-  0x69fa, 0x69fb, 0x69fc, 0x69fe, 0x6a00, 0x6a01, 0x6a02, 0x6a03,
-  0x6a04, 0x6a05, 0x6a06, 0x6a07, 0x6a08, 0x6a09, 0x6a0b, 0x6a0c,
-  0x6a0d, 0x6a0e, 0x6a0f, 0x6a10, 0x6a11, 0x6a12, 0x6a13, 0x6a14,
-  0x6a15, 0x6a16, 0x6a19, 0x6a1a, 0x6a1b, 0x6a1c, 0x6a1d, 0x6a1e,
-  0x6a20, 0x6a22, 0x6a23, 0x6a24, 0x6a25, 0x6a26, 0x6a27, 0x6a29,
-  0x6a2b, 0x6a2c, 0x6a2d, 0x6a2e, 0x6a30, 0x6a32, 0x6a33, 0x6a34,
-  0x6a36, 0x6a37, 0x6a38, 0x6a39, 0x6a3a, 0x6a3b, 0x6a3c, 0x6a3f,
-  0x6a40, 0x6a41, 0x6a42, 0x6a43, 0x6a45, 0x6a46, 0x6a48, 0x6a49,
-  0x6a4a, 0x6a4b, 0x6a4c, 0x6a4d, 0x6a4e, 0x6a4f, 0x6a51, 0x6a52,
-  0x6a53, 0x6a54, 0x6a55, 0x6a56, 0x6a57, 0x6a5a,
-  /* 0x99 */
-  0x6a5c, 0x6a5d, 0x6a5e, 0x6a5f, 0x6a60, 0x6a62, 0x6a63, 0x6a64,
-  0x6a66, 0x6a67, 0x6a68, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d,
-  0x6a6e, 0x6a6f, 0x6a70, 0x6a72, 0x6a73, 0x6a74, 0x6a75, 0x6a76,
-  0x6a77, 0x6a78, 0x6a7a, 0x6a7b, 0x6a7d, 0x6a7e, 0x6a7f, 0x6a81,
-  0x6a82, 0x6a83, 0x6a85, 0x6a86, 0x6a87, 0x6a88, 0x6a89, 0x6a8a,
-  0x6a8b, 0x6a8c, 0x6a8d, 0x6a8f, 0x6a92, 0x6a93, 0x6a94, 0x6a95,
-  0x6a96, 0x6a98, 0x6a99, 0x6a9a, 0x6a9b, 0x6a9c, 0x6a9d, 0x6a9e,
-  0x6a9f, 0x6aa1, 0x6aa2, 0x6aa3, 0x6aa4, 0x6aa5, 0x6aa6, 0x6aa7,
-  0x6aa8, 0x6aaa, 0x6aad, 0x6aae, 0x6aaf, 0x6ab0, 0x6ab1, 0x6ab2,
-  0x6ab3, 0x6ab4, 0x6ab5, 0x6ab6, 0x6ab7, 0x6ab8, 0x6ab9, 0x6aba,
-  0x6abb, 0x6abc, 0x6abd, 0x6abe, 0x6abf, 0x6ac0, 0x6ac1, 0x6ac2,
-  0x6ac3, 0x6ac4, 0x6ac5, 0x6ac6, 0x6ac7, 0x6ac8, 0x6ac9, 0x6aca,
-  0x6acb, 0x6acc, 0x6acd, 0x6ace, 0x6acf, 0x6ad0, 0x6ad1, 0x6ad2,
-  0x6ad3, 0x6ad4, 0x6ad5, 0x6ad6, 0x6ad7, 0x6ad8, 0x6ad9, 0x6ada,
-  0x6adb, 0x6adc, 0x6add, 0x6ade, 0x6adf, 0x6ae0, 0x6ae1, 0x6ae2,
-  0x6ae3, 0x6ae4, 0x6ae5, 0x6ae6, 0x6ae7, 0x6ae8, 0x6ae9, 0x6aea,
-  0x6aeb, 0x6aec, 0x6aed, 0x6aee, 0x6aef, 0x6af0, 0x6af1, 0x6af2,
-  0x6af3, 0x6af4, 0x6af5, 0x6af6, 0x6af7, 0x6af8, 0x6af9, 0x6afa,
-  0x6afb, 0x6afc, 0x6afd, 0x6afe, 0x6aff, 0x6b00, 0x6b01, 0x6b02,
-  0x6b03, 0x6b04, 0x6b05, 0x6b06, 0x6b07, 0x6b08, 0x6b09, 0x6b0a,
-  0x6b0b, 0x6b0c, 0x6b0d, 0x6b0e, 0x6b0f, 0x6b10, 0x6b11, 0x6b12,
-  0x6b13, 0x6b14, 0x6b15, 0x6b16, 0x6b17, 0x6b18, 0x6b19, 0x6b1a,
-  0x6b1b, 0x6b1c, 0x6b1d, 0x6b1e, 0x6b1f, 0x6b25, 0x6b26, 0x6b28,
-  0x6b29, 0x6b2a, 0x6b2b, 0x6b2c, 0x6b2d, 0x6b2e,
-  /* 0x9a */
-  0x6b2f, 0x6b30, 0x6b31, 0x6b33, 0x6b34, 0x6b35, 0x6b36, 0x6b38,
-  0x6b3b, 0x6b3c, 0x6b3d, 0x6b3f, 0x6b40, 0x6b41, 0x6b42, 0x6b44,
-  0x6b45, 0x6b48, 0x6b4a, 0x6b4b, 0x6b4d, 0x6b4e, 0x6b4f, 0x6b50,
-  0x6b51, 0x6b52, 0x6b53, 0x6b54, 0x6b55, 0x6b56, 0x6b57, 0x6b58,
-  0x6b5a, 0x6b5b, 0x6b5c, 0x6b5d, 0x6b5e, 0x6b5f, 0x6b60, 0x6b61,
-  0x6b68, 0x6b69, 0x6b6b, 0x6b6c, 0x6b6d, 0x6b6e, 0x6b6f, 0x6b70,
-  0x6b71, 0x6b72, 0x6b73, 0x6b74, 0x6b75, 0x6b76, 0x6b77, 0x6b78,
-  0x6b7a, 0x6b7d, 0x6b7e, 0x6b7f, 0x6b80, 0x6b85, 0x6b88, 0x6b8c,
-  0x6b8e, 0x6b8f, 0x6b90, 0x6b91, 0x6b94, 0x6b95, 0x6b97, 0x6b98,
-  0x6b99, 0x6b9c, 0x6b9d, 0x6b9e, 0x6b9f, 0x6ba0, 0x6ba2, 0x6ba3,
-  0x6ba4, 0x6ba5, 0x6ba6, 0x6ba7, 0x6ba8, 0x6ba9, 0x6bab, 0x6bac,
-  0x6bad, 0x6bae, 0x6baf, 0x6bb0, 0x6bb1, 0x6bb2, 0x6bb6, 0x6bb8,
-  0x6bb9, 0x6bba, 0x6bbb, 0x6bbc, 0x6bbd, 0x6bbe, 0x6bc0, 0x6bc3,
-  0x6bc4, 0x6bc6, 0x6bc7, 0x6bc8, 0x6bc9, 0x6bca, 0x6bcc, 0x6bce,
-  0x6bd0, 0x6bd1, 0x6bd8, 0x6bda, 0x6bdc, 0x6bdd, 0x6bde, 0x6bdf,
-  0x6be0, 0x6be2, 0x6be3, 0x6be4, 0x6be5, 0x6be6, 0x6be7, 0x6be8,
-  0x6be9, 0x6bec, 0x6bed, 0x6bee, 0x6bf0, 0x6bf1, 0x6bf2, 0x6bf4,
-  0x6bf6, 0x6bf7, 0x6bf8, 0x6bfa, 0x6bfb, 0x6bfc, 0x6bfe, 0x6bff,
-  0x6c00, 0x6c01, 0x6c02, 0x6c03, 0x6c04, 0x6c08, 0x6c09, 0x6c0a,
-  0x6c0b, 0x6c0c, 0x6c0e, 0x6c12, 0x6c17, 0x6c1c, 0x6c1d, 0x6c1e,
-  0x6c20, 0x6c23, 0x6c25, 0x6c2b, 0x6c2c, 0x6c2d, 0x6c31, 0x6c33,
-  0x6c36, 0x6c37, 0x6c39, 0x6c3a, 0x6c3b, 0x6c3c, 0x6c3e, 0x6c3f,
-  0x6c43, 0x6c44, 0x6c45, 0x6c48, 0x6c4b, 0x6c4c, 0x6c4d, 0x6c4e,
-  0x6c4f, 0x6c51, 0x6c52, 0x6c53, 0x6c56, 0x6c58,
-  /* 0x9b */
-  0x6c59, 0x6c5a, 0x6c62, 0x6c63, 0x6c65, 0x6c66, 0x6c67, 0x6c6b,
-  0x6c6c, 0x6c6d, 0x6c6e, 0x6c6f, 0x6c71, 0x6c73, 0x6c75, 0x6c77,
-  0x6c78, 0x6c7a, 0x6c7b, 0x6c7c, 0x6c7f, 0x6c80, 0x6c84, 0x6c87,
-  0x6c8a, 0x6c8b, 0x6c8d, 0x6c8e, 0x6c91, 0x6c92, 0x6c95, 0x6c96,
-  0x6c97, 0x6c98, 0x6c9a, 0x6c9c, 0x6c9d, 0x6c9e, 0x6ca0, 0x6ca2,
-  0x6ca8, 0x6cac, 0x6caf, 0x6cb0, 0x6cb4, 0x6cb5, 0x6cb6, 0x6cb7,
-  0x6cba, 0x6cc0, 0x6cc1, 0x6cc2, 0x6cc3, 0x6cc6, 0x6cc7, 0x6cc8,
-  0x6ccb, 0x6ccd, 0x6cce, 0x6ccf, 0x6cd1, 0x6cd2, 0x6cd8, 0x6cd9,
-  0x6cda, 0x6cdc, 0x6cdd, 0x6cdf, 0x6ce4, 0x6ce6, 0x6ce7, 0x6ce9,
-  0x6cec, 0x6ced, 0x6cf2, 0x6cf4, 0x6cf9, 0x6cff, 0x6d00, 0x6d02,
-  0x6d03, 0x6d05, 0x6d06, 0x6d08, 0x6d09, 0x6d0a, 0x6d0d, 0x6d0f,
-  0x6d10, 0x6d11, 0x6d13, 0x6d14, 0x6d15, 0x6d16, 0x6d18, 0x6d1c,
-  0x6d1d, 0x6d1f, 0x6d20, 0x6d21, 0x6d22, 0x6d23, 0x6d24, 0x6d26,
-  0x6d28, 0x6d29, 0x6d2c, 0x6d2d, 0x6d2f, 0x6d30, 0x6d34, 0x6d36,
-  0x6d37, 0x6d38, 0x6d3a, 0x6d3f, 0x6d40, 0x6d42, 0x6d44, 0x6d49,
-  0x6d4c, 0x6d50, 0x6d55, 0x6d56, 0x6d57, 0x6d58, 0x6d5b, 0x6d5d,
-  0x6d5f, 0x6d61, 0x6d62, 0x6d64, 0x6d65, 0x6d67, 0x6d68, 0x6d6b,
-  0x6d6c, 0x6d6d, 0x6d70, 0x6d71, 0x6d72, 0x6d73, 0x6d75, 0x6d76,
-  0x6d79, 0x6d7a, 0x6d7b, 0x6d7d, 0x6d7e, 0x6d7f, 0x6d80, 0x6d81,
-  0x6d83, 0x6d84, 0x6d86, 0x6d87, 0x6d8a, 0x6d8b, 0x6d8d, 0x6d8f,
-  0x6d90, 0x6d92, 0x6d96, 0x6d97, 0x6d98, 0x6d99, 0x6d9a, 0x6d9c,
-  0x6da2, 0x6da5, 0x6dac, 0x6dad, 0x6db0, 0x6db1, 0x6db3, 0x6db4,
-  0x6db6, 0x6db7, 0x6db9, 0x6dba, 0x6dbb, 0x6dbc, 0x6dbd, 0x6dbe,
-  0x6dc1, 0x6dc2, 0x6dc3, 0x6dc8, 0x6dc9, 0x6dca,
-  /* 0x9c */
-  0x6dcd, 0x6dce, 0x6dcf, 0x6dd0, 0x6dd2, 0x6dd3, 0x6dd4, 0x6dd5,
-  0x6dd7, 0x6dda, 0x6ddb, 0x6ddc, 0x6ddf, 0x6de2, 0x6de3, 0x6de5,
-  0x6de7, 0x6de8, 0x6de9, 0x6dea, 0x6ded, 0x6def, 0x6df0, 0x6df2,
-  0x6df4, 0x6df5, 0x6df6, 0x6df8, 0x6dfa, 0x6dfd, 0x6dfe, 0x6dff,
-  0x6e00, 0x6e01, 0x6e02, 0x6e03, 0x6e04, 0x6e06, 0x6e07, 0x6e08,
-  0x6e09, 0x6e0b, 0x6e0f, 0x6e12, 0x6e13, 0x6e15, 0x6e18, 0x6e19,
-  0x6e1b, 0x6e1c, 0x6e1e, 0x6e1f, 0x6e22, 0x6e26, 0x6e27, 0x6e28,
-  0x6e2a, 0x6e2c, 0x6e2e, 0x6e30, 0x6e31, 0x6e33, 0x6e35, 0x6e36,
-  0x6e37, 0x6e39, 0x6e3b, 0x6e3c, 0x6e3d, 0x6e3e, 0x6e3f, 0x6e40,
-  0x6e41, 0x6e42, 0x6e45, 0x6e46, 0x6e47, 0x6e48, 0x6e49, 0x6e4a,
-  0x6e4b, 0x6e4c, 0x6e4f, 0x6e50, 0x6e51, 0x6e52, 0x6e55, 0x6e57,
-  0x6e59, 0x6e5a, 0x6e5c, 0x6e5d, 0x6e5e, 0x6e60, 0x6e61, 0x6e62,
-  0x6e63, 0x6e64, 0x6e65, 0x6e66, 0x6e67, 0x6e68, 0x6e69, 0x6e6a,
-  0x6e6c, 0x6e6d, 0x6e6f, 0x6e70, 0x6e71, 0x6e72, 0x6e73, 0x6e74,
-  0x6e75, 0x6e76, 0x6e77, 0x6e78, 0x6e79, 0x6e7a, 0x6e7b, 0x6e7c,
-  0x6e7d, 0x6e80, 0x6e81, 0x6e82, 0x6e84, 0x6e87, 0x6e88, 0x6e8a,
-  0x6e8b, 0x6e8c, 0x6e8d, 0x6e8e, 0x6e91, 0x6e92, 0x6e93, 0x6e94,
-  0x6e95, 0x6e96, 0x6e97, 0x6e99, 0x6e9a, 0x6e9b, 0x6e9d, 0x6e9e,
-  0x6ea0, 0x6ea1, 0x6ea3, 0x6ea4, 0x6ea6, 0x6ea8, 0x6ea9, 0x6eab,
-  0x6eac, 0x6ead, 0x6eae, 0x6eb0, 0x6eb3, 0x6eb5, 0x6eb8, 0x6eb9,
-  0x6ebc, 0x6ebe, 0x6ebf, 0x6ec0, 0x6ec3, 0x6ec4, 0x6ec5, 0x6ec6,
-  0x6ec8, 0x6ec9, 0x6eca, 0x6ecc, 0x6ecd, 0x6ece, 0x6ed0, 0x6ed2,
-  0x6ed6, 0x6ed8, 0x6ed9, 0x6edb, 0x6edc, 0x6edd, 0x6ee3, 0x6ee7,
-  0x6eea, 0x6eeb, 0x6eec, 0x6eed, 0x6eee, 0x6eef,
-  /* 0x9d */
-  0x6ef0, 0x6ef1, 0x6ef2, 0x6ef3, 0x6ef5, 0x6ef6, 0x6ef7, 0x6ef8,
-  0x6efa, 0x6efb, 0x6efc, 0x6efd, 0x6efe, 0x6eff, 0x6f00, 0x6f01,
-  0x6f03, 0x6f04, 0x6f05, 0x6f07, 0x6f08, 0x6f0a, 0x6f0b, 0x6f0c,
-  0x6f0d, 0x6f0e, 0x6f10, 0x6f11, 0x6f12, 0x6f16, 0x6f17, 0x6f18,
-  0x6f19, 0x6f1a, 0x6f1b, 0x6f1c, 0x6f1d, 0x6f1e, 0x6f1f, 0x6f21,
-  0x6f22, 0x6f23, 0x6f25, 0x6f26, 0x6f27, 0x6f28, 0x6f2c, 0x6f2e,
-  0x6f30, 0x6f32, 0x6f34, 0x6f35, 0x6f37, 0x6f38, 0x6f39, 0x6f3a,
-  0x6f3b, 0x6f3c, 0x6f3d, 0x6f3f, 0x6f40, 0x6f41, 0x6f42, 0x6f43,
-  0x6f44, 0x6f45, 0x6f48, 0x6f49, 0x6f4a, 0x6f4c, 0x6f4e, 0x6f4f,
-  0x6f50, 0x6f51, 0x6f52, 0x6f53, 0x6f54, 0x6f55, 0x6f56, 0x6f57,
-  0x6f59, 0x6f5a, 0x6f5b, 0x6f5d, 0x6f5f, 0x6f60, 0x6f61, 0x6f63,
-  0x6f64, 0x6f65, 0x6f67, 0x6f68, 0x6f69, 0x6f6a, 0x6f6b, 0x6f6c,
-  0x6f6f, 0x6f70, 0x6f71, 0x6f73, 0x6f75, 0x6f76, 0x6f77, 0x6f79,
-  0x6f7b, 0x6f7d, 0x6f7e, 0x6f7f, 0x6f80, 0x6f81, 0x6f82, 0x6f83,
-  0x6f85, 0x6f86, 0x6f87, 0x6f8a, 0x6f8b, 0x6f8f, 0x6f90, 0x6f91,
-  0x6f92, 0x6f93, 0x6f94, 0x6f95, 0x6f96, 0x6f97, 0x6f98, 0x6f99,
-  0x6f9a, 0x6f9b, 0x6f9d, 0x6f9e, 0x6f9f, 0x6fa0, 0x6fa2, 0x6fa3,
-  0x6fa4, 0x6fa5, 0x6fa6, 0x6fa8, 0x6fa9, 0x6faa, 0x6fab, 0x6fac,
-  0x6fad, 0x6fae, 0x6faf, 0x6fb0, 0x6fb1, 0x6fb2, 0x6fb4, 0x6fb5,
-  0x6fb7, 0x6fb8, 0x6fba, 0x6fbb, 0x6fbc, 0x6fbd, 0x6fbe, 0x6fbf,
-  0x6fc1, 0x6fc3, 0x6fc4, 0x6fc5, 0x6fc6, 0x6fc7, 0x6fc8, 0x6fca,
-  0x6fcb, 0x6fcc, 0x6fcd, 0x6fce, 0x6fcf, 0x6fd0, 0x6fd3, 0x6fd4,
-  0x6fd5, 0x6fd6, 0x6fd7, 0x6fd8, 0x6fd9, 0x6fda, 0x6fdb, 0x6fdc,
-  0x6fdd, 0x6fdf, 0x6fe2, 0x6fe3, 0x6fe4, 0x6fe5,
-  /* 0x9e */
-  0x6fe6, 0x6fe7, 0x6fe8, 0x6fe9, 0x6fea, 0x6feb, 0x6fec, 0x6fed,
-  0x6ff0, 0x6ff1, 0x6ff2, 0x6ff3, 0x6ff4, 0x6ff5, 0x6ff6, 0x6ff7,
-  0x6ff8, 0x6ff9, 0x6ffa, 0x6ffb, 0x6ffc, 0x6ffd, 0x6ffe, 0x6fff,
-  0x7000, 0x7001, 0x7002, 0x7003, 0x7004, 0x7005, 0x7006, 0x7007,
-  0x7008, 0x7009, 0x700a, 0x700b, 0x700c, 0x700d, 0x700e, 0x700f,
-  0x7010, 0x7012, 0x7013, 0x7014, 0x7015, 0x7016, 0x7017, 0x7018,
-  0x7019, 0x701c, 0x701d, 0x701e, 0x701f, 0x7020, 0x7021, 0x7022,
-  0x7024, 0x7025, 0x7026, 0x7027, 0x7028, 0x7029, 0x702a, 0x702b,
-  0x702c, 0x702d, 0x702e, 0x702f, 0x7030, 0x7031, 0x7032, 0x7033,
-  0x7034, 0x7036, 0x7037, 0x7038, 0x703a, 0x703b, 0x703c, 0x703d,
-  0x703e, 0x703f, 0x7040, 0x7041, 0x7042, 0x7043, 0x7044, 0x7045,
-  0x7046, 0x7047, 0x7048, 0x7049, 0x704a, 0x704b, 0x704d, 0x704e,
-  0x7050, 0x7051, 0x7052, 0x7053, 0x7054, 0x7055, 0x7056, 0x7057,
-  0x7058, 0x7059, 0x705a, 0x705b, 0x705c, 0x705d, 0x705f, 0x7060,
-  0x7061, 0x7062, 0x7063, 0x7064, 0x7065, 0x7066, 0x7067, 0x7068,
-  0x7069, 0x706a, 0x706e, 0x7071, 0x7072, 0x7073, 0x7074, 0x7077,
-  0x7079, 0x707a, 0x707b, 0x707d, 0x7081, 0x7082, 0x7083, 0x7084,
-  0x7086, 0x7087, 0x7088, 0x708b, 0x708c, 0x708d, 0x708f, 0x7090,
-  0x7091, 0x7093, 0x7097, 0x7098, 0x709a, 0x709b, 0x709e, 0x709f,
-  0x70a0, 0x70a1, 0x70a2, 0x70a3, 0x70a4, 0x70a5, 0x70a6, 0x70a7,
-  0x70a8, 0x70a9, 0x70aa, 0x70b0, 0x70b2, 0x70b4, 0x70b5, 0x70b6,
-  0x70ba, 0x70be, 0x70bf, 0x70c4, 0x70c5, 0x70c6, 0x70c7, 0x70c9,
-  0x70cb, 0x70cc, 0x70cd, 0x70ce, 0x70cf, 0x70d0, 0x70d1, 0x70d2,
-  0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d7, 0x70da,
-  /* 0x9f */
-  0x70dc, 0x70dd, 0x70de, 0x70e0, 0x70e1, 0x70e2, 0x70e3, 0x70e5,
-  0x70ea, 0x70ee, 0x70f0, 0x70f1, 0x70f2, 0x70f3, 0x70f4, 0x70f5,
-  0x70f6, 0x70f8, 0x70fa, 0x70fb, 0x70fc, 0x70fe, 0x70ff, 0x7100,
-  0x7101, 0x7102, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x7108,
-  0x710b, 0x710c, 0x710d, 0x710e, 0x710f, 0x7111, 0x7112, 0x7114,
-  0x7117, 0x711b, 0x711c, 0x711d, 0x711e, 0x711f, 0x7120, 0x7121,
-  0x7122, 0x7123, 0x7124, 0x7125, 0x7127, 0x7128, 0x7129, 0x712a,
-  0x712b, 0x712c, 0x712d, 0x712e, 0x7132, 0x7133, 0x7134, 0x7135,
-  0x7137, 0x7138, 0x7139, 0x713a, 0x713b, 0x713c, 0x713d, 0x713e,
-  0x713f, 0x7140, 0x7141, 0x7142, 0x7143, 0x7144, 0x7146, 0x7147,
-  0x7148, 0x7149, 0x714b, 0x714d, 0x714f, 0x7150, 0x7151, 0x7152,
-  0x7153, 0x7154, 0x7155, 0x7156, 0x7157, 0x7158, 0x7159, 0x715a,
-  0x715b, 0x715d, 0x715f, 0x7160, 0x7161, 0x7162, 0x7163, 0x7165,
-  0x7169, 0x716a, 0x716b, 0x716c, 0x716d, 0x716f, 0x7170, 0x7171,
-  0x7174, 0x7175, 0x7176, 0x7177, 0x7179, 0x717b, 0x717c, 0x717e,
-  0x717f, 0x7180, 0x7181, 0x7182, 0x7183, 0x7185, 0x7186, 0x7187,
-  0x7188, 0x7189, 0x718b, 0x718c, 0x718d, 0x718e, 0x7190, 0x7191,
-  0x7192, 0x7193, 0x7195, 0x7196, 0x7197, 0x719a, 0x719b, 0x719c,
-  0x719d, 0x719e, 0x71a1, 0x71a2, 0x71a3, 0x71a4, 0x71a5, 0x71a6,
-  0x71a7, 0x71a9, 0x71aa, 0x71ab, 0x71ad, 0x71ae, 0x71af, 0x71b0,
-  0x71b1, 0x71b2, 0x71b4, 0x71b6, 0x71b7, 0x71b8, 0x71ba, 0x71bb,
-  0x71bc, 0x71bd, 0x71be, 0x71bf, 0x71c0, 0x71c1, 0x71c2, 0x71c4,
-  0x71c5, 0x71c6, 0x71c7, 0x71c8, 0x71c9, 0x71ca, 0x71cb, 0x71cc,
-  0x71cd, 0x71cf, 0x71d0, 0x71d1, 0x71d2, 0x71d3,
-  /* 0xa0 */
-  0x71d6, 0x71d7, 0x71d8, 0x71d9, 0x71da, 0x71db, 0x71dc, 0x71dd,
-  0x71de, 0x71df, 0x71e1, 0x71e2, 0x71e3, 0x71e4, 0x71e6, 0x71e8,
-  0x71e9, 0x71ea, 0x71eb, 0x71ec, 0x71ed, 0x71ef, 0x71f0, 0x71f1,
-  0x71f2, 0x71f3, 0x71f4, 0x71f5, 0x71f6, 0x71f7, 0x71f8, 0x71fa,
-  0x71fb, 0x71fc, 0x71fd, 0x71fe, 0x71ff, 0x7200, 0x7201, 0x7202,
-  0x7203, 0x7204, 0x7205, 0x7207, 0x7208, 0x7209, 0x720a, 0x720b,
-  0x720c, 0x720d, 0x720e, 0x720f, 0x7210, 0x7211, 0x7212, 0x7213,
-  0x7214, 0x7215, 0x7216, 0x7217, 0x7218, 0x7219, 0x721a, 0x721b,
-  0x721c, 0x721e, 0x721f, 0x7220, 0x7221, 0x7222, 0x7223, 0x7224,
-  0x7225, 0x7226, 0x7227, 0x7229, 0x722b, 0x722d, 0x722e, 0x722f,
-  0x7232, 0x7233, 0x7234, 0x723a, 0x723c, 0x723e, 0x7240, 0x7241,
-  0x7242, 0x7243, 0x7244, 0x7245, 0x7246, 0x7249, 0x724a, 0x724b,
-  0x724e, 0x724f, 0x7250, 0x7251, 0x7253, 0x7254, 0x7255, 0x7257,
-  0x7258, 0x725a, 0x725c, 0x725e, 0x7260, 0x7263, 0x7264, 0x7265,
-  0x7268, 0x726a, 0x726b, 0x726c, 0x726d, 0x7270, 0x7271, 0x7273,
-  0x7274, 0x7276, 0x7277, 0x7278, 0x727b, 0x727c, 0x727d, 0x7282,
-  0x7283, 0x7285, 0x7286, 0x7287, 0x7288, 0x7289, 0x728c, 0x728e,
-  0x7290, 0x7291, 0x7293, 0x7294, 0x7295, 0x7296, 0x7297, 0x7298,
-  0x7299, 0x729a, 0x729b, 0x729c, 0x729d, 0x729e, 0x72a0, 0x72a1,
-  0x72a2, 0x72a3, 0x72a4, 0x72a5, 0x72a6, 0x72a7, 0x72a8, 0x72a9,
-  0x72aa, 0x72ab, 0x72ae, 0x72b1, 0x72b2, 0x72b3, 0x72b5, 0x72ba,
-  0x72bb, 0x72bc, 0x72bd, 0x72be, 0x72bf, 0x72c0, 0x72c5, 0x72c6,
-  0x72c7, 0x72c9, 0x72ca, 0x72cb, 0x72cc, 0x72cf, 0x72d1, 0x72d3,
-  0x72d4, 0x72d5, 0x72d6, 0x72d8, 0x72da, 0x72db,
-  /* 0xa1 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x3000, 0x3001, 0x3002, 0x00b7, 0x02c9, 0x02c7, 0x00a8, 0x3003,
-  0x3005, 0x2014, 0xff5e, 0x2016, 0x2026, 0x2018, 0x2019, 0x201c,
-  0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c,
-  0x300d, 0x300e, 0x300f, 0x3016, 0x3017, 0x3010, 0x3011, 0x00b1,
-  0x00d7, 0x00f7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220f, 0x222a,
-  0x2229, 0x2208, 0x2237, 0x221a, 0x22a5, 0x2225, 0x2220, 0x2312,
-  0x2299, 0x222b, 0x222e, 0x2261, 0x224c, 0x2248, 0x223d, 0x221d,
-  0x2260, 0x226e, 0x226f, 0x2264, 0x2265, 0x221e, 0x2235, 0x2234,
-  0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xff04, 0x00a4,
-  0xffe0, 0xffe1, 0x2030, 0x00a7, 0x2116, 0x2606, 0x2605, 0x25cb,
-  0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2,
-  0x203b, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013,
-  /* 0xa2 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
-  0x2178, 0x2179, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f,
-  0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497,
-  0x2498, 0x2499, 0x249a, 0x249b, 0x2474, 0x2475, 0x2476, 0x2477,
-  0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f,
-  0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487,
-  0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467,
-  0x2468, 0x2469, 0xfffd, 0xfffd, 0x3220, 0x3221, 0x3222, 0x3223,
-  0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0xfffd, 0xfffd,
-  0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167,
-  0x2168, 0x2169, 0x216a, 0x216b, 0xfffd, 0xfffd,
-  /* 0xa3 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xff01, 0xff02, 0xff03, 0xffe5, 0xff05, 0xff06, 0xff07, 0xff08,
-  0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10,
-  0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18,
-  0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20,
-  0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28,
-  0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
-  0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38,
-  0xff39, 0xff3a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40,
-  0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48,
-  0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50,
-  0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58,
-  0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3,
-  /* 0xa4 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
-  0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050,
-  0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
-  0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060,
-  0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
-  0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070,
-  0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
-  0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080,
-  0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
-  0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090,
-  0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa5 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8,
-  0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
-  0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8,
-  0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
-  0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8,
-  0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
-  0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8,
-  0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
-  0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8,
-  0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
-  0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa6 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
-  0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
-  0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
-  0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
-  0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfe35,
-  0xfe36, 0xfe39, 0xfe3a, 0xfe3f, 0xfe40, 0xfe3d, 0xfe3e, 0xfe41,
-  0xfe42, 0xfe43, 0xfe44, 0xfffd, 0xfffd, 0xfe3b, 0xfe3c, 0xfe37,
-  0xfe38, 0xfe31, 0xfffd, 0xfe33, 0xfe34, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa7 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
-  0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
-  0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e,
-  0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
-  0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
-  0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e,
-  0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa8 */
-  0x02ca, 0x02cb, 0x02d9, 0x2013, 0x2015, 0x2025, 0x2035, 0x2105,
-  0x2109, 0x2196, 0x2197, 0x2198, 0x2199, 0x2215, 0x221f, 0x2223,
-  0x2252, 0x2266, 0x2267, 0x22bf, 0x2550, 0x2551, 0x2552, 0x2553,
-  0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b,
-  0x255c, 0x255d, 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563,
-  0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b,
-  0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572, 0x2573,
-  0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0x2588,
-  0x2589, 0x258a, 0x258b, 0x258c, 0x258d, 0x258e, 0x258f, 0x2593,
-  0x2594, 0x2595, 0x25bc, 0x25bd, 0x25e2, 0x25e3, 0x25e4, 0x25e5,
-  0x2609, 0x2295, 0x3012, 0x301d, 0x301e, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0113, 0x00e9, 0x011b, 0x00e8,
-  0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2,
-  0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x01dc,
-  0x00fc, 0x00ea, 0x0251, 0xfffd, 0x0144, 0x0148, 0xfffd, 0x0261,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3105, 0x3106, 0x3107, 0x3108,
-  0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110,
-  0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118,
-  0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120,
-  0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128,
-  0x3129, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa9 */
-  0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028,
-  0x3029, 0x32a3, 0x338e, 0x338f, 0x339c, 0x339d, 0x339e, 0x33a1,
-  0x33c4, 0x33ce, 0x33d1, 0x33d2, 0x33d5, 0xfe30, 0xffe2, 0xffe4,
-  0xfffd, 0x2121, 0x3231, 0xfffd, 0x2010, 0xfffd, 0xfffd, 0xfffd,
-  0x30fc, 0x309b, 0x309c, 0x30fd, 0x30fe, 0x3006, 0x309d, 0x309e,
-  0xfe49, 0xfe4a, 0xfe4b, 0xfe4c, 0xfe4d, 0xfe4e, 0xfe4f, 0xfe50,
-  0xfe51, 0xfe52, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xfe59, 0xfe5a,
-  0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0xfe5f, 0xfe60, 0xfe61, 0xfe62,
-  0xfe63, 0xfe64, 0xfe65, 0xfe66, 0xfe68, 0xfe69, 0xfe6a, 0xfe6b,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3007, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0x2500, 0x2501, 0x2502, 0x2503, 0x2504,
-  0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250a, 0x250b, 0x250c,
-  0x250d, 0x250e, 0x250f, 0x2510, 0x2511, 0x2512, 0x2513, 0x2514,
-  0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251a, 0x251b, 0x251c,
-  0x251d, 0x251e, 0x251f, 0x2520, 0x2521, 0x2522, 0x2523, 0x2524,
-  0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c,
-  0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534,
-  0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c,
-  0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544,
-  0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xaa */
-  0x72dc, 0x72dd, 0x72df, 0x72e2, 0x72e3, 0x72e4, 0x72e5, 0x72e6,
-  0x72e7, 0x72ea, 0x72eb, 0x72f5, 0x72f6, 0x72f9, 0x72fd, 0x72fe,
-  0x72ff, 0x7300, 0x7302, 0x7304, 0x7305, 0x7306, 0x7307, 0x7308,
-  0x7309, 0x730b, 0x730c, 0x730d, 0x730f, 0x7310, 0x7311, 0x7312,
-  0x7314, 0x7318, 0x7319, 0x731a, 0x731f, 0x7320, 0x7323, 0x7324,
-  0x7326, 0x7327, 0x7328, 0x732d, 0x732f, 0x7330, 0x7332, 0x7333,
-  0x7335, 0x7336, 0x733a, 0x733b, 0x733c, 0x733d, 0x7340, 0x7341,
-  0x7342, 0x7343, 0x7344, 0x7345, 0x7346, 0x7347, 0x7348, 0x7349,
-  0x734a, 0x734b, 0x734c, 0x734e, 0x734f, 0x7351, 0x7353, 0x7354,
-  0x7355, 0x7356, 0x7358, 0x7359, 0x735a, 0x735b, 0x735c, 0x735d,
-  0x735e, 0x735f, 0x7361, 0x7362, 0x7363, 0x7364, 0x7365, 0x7366,
-  0x7367, 0x7368, 0x7369, 0x736a, 0x736b, 0x736e, 0x7370, 0x7371,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xab */
-  0x7372, 0x7373, 0x7374, 0x7375, 0x7376, 0x7377, 0x7378, 0x7379,
-  0x737a, 0x737b, 0x737c, 0x737d, 0x737f, 0x7380, 0x7381, 0x7382,
-  0x7383, 0x7385, 0x7386, 0x7388, 0x738a, 0x738c, 0x738d, 0x738f,
-  0x7390, 0x7392, 0x7393, 0x7394, 0x7395, 0x7397, 0x7398, 0x7399,
-  0x739a, 0x739c, 0x739d, 0x739e, 0x73a0, 0x73a1, 0x73a3, 0x73a4,
-  0x73a5, 0x73a6, 0x73a7, 0x73a8, 0x73aa, 0x73ac, 0x73ad, 0x73b1,
-  0x73b4, 0x73b5, 0x73b6, 0x73b8, 0x73b9, 0x73bc, 0x73bd, 0x73be,
-  0x73bf, 0x73c1, 0x73c3, 0x73c4, 0x73c5, 0x73c6, 0x73c7, 0x73cb,
-  0x73cc, 0x73ce, 0x73d2, 0x73d3, 0x73d4, 0x73d5, 0x73d6, 0x73d7,
-  0x73d8, 0x73da, 0x73db, 0x73dc, 0x73dd, 0x73df, 0x73e1, 0x73e2,
-  0x73e3, 0x73e4, 0x73e6, 0x73e8, 0x73ea, 0x73eb, 0x73ec, 0x73ee,
-  0x73ef, 0x73f0, 0x73f1, 0x73f3, 0x73f4, 0x73f5, 0x73f6, 0x73f7,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xac */
-  0x73f8, 0x73f9, 0x73fa, 0x73fb, 0x73fc, 0x73fd, 0x73fe, 0x73ff,
-  0x7400, 0x7401, 0x7402, 0x7404, 0x7407, 0x7408, 0x740b, 0x740c,
-  0x740d, 0x740e, 0x7411, 0x7412, 0x7413, 0x7414, 0x7415, 0x7416,
-  0x7417, 0x7418, 0x7419, 0x741c, 0x741d, 0x741e, 0x741f, 0x7420,
-  0x7421, 0x7423, 0x7424, 0x7427, 0x7429, 0x742b, 0x742d, 0x742f,
-  0x7431, 0x7432, 0x7437, 0x7438, 0x7439, 0x743a, 0x743b, 0x743d,
-  0x743e, 0x743f, 0x7440, 0x7442, 0x7443, 0x7444, 0x7445, 0x7446,
-  0x7447, 0x7448, 0x7449, 0x744a, 0x744b, 0x744c, 0x744d, 0x744e,
-  0x744f, 0x7450, 0x7451, 0x7452, 0x7453, 0x7454, 0x7456, 0x7458,
-  0x745d, 0x7460, 0x7461, 0x7462, 0x7463, 0x7464, 0x7465, 0x7466,
-  0x7467, 0x7468, 0x7469, 0x746a, 0x746b, 0x746c, 0x746e, 0x746f,
-  0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7478, 0x7479, 0x747a,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xad */
-  0x747b, 0x747c, 0x747d, 0x747f, 0x7482, 0x7484, 0x7485, 0x7486,
-  0x7488, 0x7489, 0x748a, 0x748c, 0x748d, 0x748f, 0x7491, 0x7492,
-  0x7493, 0x7494, 0x7495, 0x7496, 0x7497, 0x7498, 0x7499, 0x749a,
-  0x749b, 0x749d, 0x749f, 0x74a0, 0x74a1, 0x74a2, 0x74a3, 0x74a4,
-  0x74a5, 0x74a6, 0x74aa, 0x74ab, 0x74ac, 0x74ad, 0x74ae, 0x74af,
-  0x74b0, 0x74b1, 0x74b2, 0x74b3, 0x74b4, 0x74b5, 0x74b6, 0x74b7,
-  0x74b8, 0x74b9, 0x74bb, 0x74bc, 0x74bd, 0x74be, 0x74bf, 0x74c0,
-  0x74c1, 0x74c2, 0x74c3, 0x74c4, 0x74c5, 0x74c6, 0x74c7, 0x74c8,
-  0x74c9, 0x74ca, 0x74cb, 0x74cc, 0x74cd, 0x74ce, 0x74cf, 0x74d0,
-  0x74d1, 0x74d3, 0x74d4, 0x74d5, 0x74d6, 0x74d7, 0x74d8, 0x74d9,
-  0x74da, 0x74db, 0x74dd, 0x74df, 0x74e1, 0x74e5, 0x74e7, 0x74e8,
-  0x74e9, 0x74ea, 0x74eb, 0x74ec, 0x74ed, 0x74f0, 0x74f1, 0x74f2,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xae */
-  0x74f3, 0x74f5, 0x74f8, 0x74f9, 0x74fa, 0x74fb, 0x74fc, 0x74fd,
-  0x74fe, 0x7500, 0x7501, 0x7502, 0x7503, 0x7505, 0x7506, 0x7507,
-  0x7508, 0x7509, 0x750a, 0x750b, 0x750c, 0x750e, 0x7510, 0x7512,
-  0x7514, 0x7515, 0x7516, 0x7517, 0x751b, 0x751d, 0x751e, 0x7520,
-  0x7521, 0x7522, 0x7523, 0x7524, 0x7526, 0x7527, 0x752a, 0x752e,
-  0x7534, 0x7536, 0x7539, 0x753c, 0x753d, 0x753f, 0x7541, 0x7542,
-  0x7543, 0x7544, 0x7546, 0x7547, 0x7549, 0x754a, 0x754d, 0x7550,
-  0x7551, 0x7552, 0x7553, 0x7555, 0x7556, 0x7557, 0x7558, 0x755d,
-  0x755e, 0x755f, 0x7560, 0x7561, 0x7562, 0x7563, 0x7564, 0x7567,
-  0x7568, 0x7569, 0x756b, 0x756c, 0x756d, 0x756e, 0x756f, 0x7570,
-  0x7571, 0x7573, 0x7575, 0x7576, 0x7577, 0x757a, 0x757b, 0x757c,
-  0x757d, 0x757e, 0x7580, 0x7581, 0x7582, 0x7584, 0x7585, 0x7587,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xaf */
-  0x7588, 0x7589, 0x758a, 0x758c, 0x758d, 0x758e, 0x7590, 0x7593,
-  0x7595, 0x7598, 0x759b, 0x759c, 0x759e, 0x75a2, 0x75a6, 0x75a7,
-  0x75a8, 0x75a9, 0x75aa, 0x75ad, 0x75b6, 0x75b7, 0x75ba, 0x75bb,
-  0x75bf, 0x75c0, 0x75c1, 0x75c6, 0x75cb, 0x75cc, 0x75ce, 0x75cf,
-  0x75d0, 0x75d1, 0x75d3, 0x75d7, 0x75d9, 0x75da, 0x75dc, 0x75dd,
-  0x75df, 0x75e0, 0x75e1, 0x75e5, 0x75e9, 0x75ec, 0x75ed, 0x75ee,
-  0x75ef, 0x75f2, 0x75f3, 0x75f5, 0x75f6, 0x75f7, 0x75f8, 0x75fa,
-  0x75fb, 0x75fd, 0x75fe, 0x7602, 0x7604, 0x7606, 0x7607, 0x7608,
-  0x7609, 0x760b, 0x760d, 0x760e, 0x760f, 0x7611, 0x7612, 0x7613,
-  0x7614, 0x7616, 0x761a, 0x761c, 0x761d, 0x761e, 0x7621, 0x7623,
-  0x7627, 0x7628, 0x762c, 0x762e, 0x762f, 0x7631, 0x7632, 0x7636,
-  0x7637, 0x7639, 0x763a, 0x763b, 0x763d, 0x7641, 0x7642, 0x7644,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xb0 */
-  0x7645, 0x7646, 0x7647, 0x7648, 0x7649, 0x764a, 0x764b, 0x764e,
-  0x764f, 0x7650, 0x7651, 0x7652, 0x7653, 0x7655, 0x7657, 0x7658,
-  0x7659, 0x765a, 0x765b, 0x765d, 0x765f, 0x7660, 0x7661, 0x7662,
-  0x7664, 0x7665, 0x7666, 0x7667, 0x7668, 0x7669, 0x766a, 0x766c,
-  0x766d, 0x766e, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x7675,
-  0x7676, 0x7677, 0x7679, 0x767a, 0x767c, 0x767f, 0x7680, 0x7681,
-  0x7683, 0x7685, 0x7689, 0x768a, 0x768c, 0x768d, 0x768f, 0x7690,
-  0x7692, 0x7694, 0x7695, 0x7697, 0x7698, 0x769a, 0x769b, 0x769c,
-  0x769d, 0x769e, 0x769f, 0x76a0, 0x76a1, 0x76a2, 0x76a3, 0x76a5,
-  0x76a6, 0x76a7, 0x76a8, 0x76a9, 0x76aa, 0x76ab, 0x76ac, 0x76ad,
-  0x76af, 0x76b0, 0x76b3, 0x76b5, 0x76b6, 0x76b7, 0x76b8, 0x76b9,
-  0x76ba, 0x76bb, 0x76bc, 0x76bd, 0x76be, 0x76c0, 0x76c1, 0x76c3,
-  0x554a, 0x963f, 0x57c3, 0x6328, 0x54ce, 0x5509, 0x54c0, 0x7691,
-  0x764c, 0x853c, 0x77ee, 0x827e, 0x788d, 0x7231, 0x9698, 0x978d,
-  0x6c28, 0x5b89, 0x4ffa, 0x6309, 0x6697, 0x5cb8, 0x80fa, 0x6848,
-  0x80ae, 0x6602, 0x76ce, 0x51f9, 0x6556, 0x71ac, 0x7ff1, 0x8884,
-  0x50b2, 0x5965, 0x61ca, 0x6fb3, 0x82ad, 0x634c, 0x6252, 0x53ed,
-  0x5427, 0x7b06, 0x516b, 0x75a4, 0x5df4, 0x62d4, 0x8dcb, 0x9776,
-  0x628a, 0x8019, 0x575d, 0x9738, 0x7f62, 0x7238, 0x767d, 0x67cf,
-  0x767e, 0x6446, 0x4f70, 0x8d25, 0x62dc, 0x7a17, 0x6591, 0x73ed,
-  0x642c, 0x6273, 0x822c, 0x9881, 0x677f, 0x7248, 0x626e, 0x62cc,
-  0x4f34, 0x74e3, 0x534a, 0x529e, 0x7eca, 0x90a6, 0x5e2e, 0x6886,
-  0x699c, 0x8180, 0x7ed1, 0x68d2, 0x78c5, 0x868c, 0x9551, 0x508d,
-  0x8c24, 0x82de, 0x80de, 0x5305, 0x8912, 0x5265,
-  /* 0xb1 */
-  0x76c4, 0x76c7, 0x76c9, 0x76cb, 0x76cc, 0x76d3, 0x76d5, 0x76d9,
-  0x76da, 0x76dc, 0x76dd, 0x76de, 0x76e0, 0x76e1, 0x76e2, 0x76e3,
-  0x76e4, 0x76e6, 0x76e7, 0x76e8, 0x76e9, 0x76ea, 0x76eb, 0x76ec,
-  0x76ed, 0x76f0, 0x76f3, 0x76f5, 0x76f6, 0x76f7, 0x76fa, 0x76fb,
-  0x76fd, 0x76ff, 0x7700, 0x7702, 0x7703, 0x7705, 0x7706, 0x770a,
-  0x770c, 0x770e, 0x770f, 0x7710, 0x7711, 0x7712, 0x7713, 0x7714,
-  0x7715, 0x7716, 0x7717, 0x7718, 0x771b, 0x771c, 0x771d, 0x771e,
-  0x7721, 0x7723, 0x7724, 0x7725, 0x7727, 0x772a, 0x772b, 0x772c,
-  0x772e, 0x7730, 0x7731, 0x7732, 0x7733, 0x7734, 0x7739, 0x773b,
-  0x773d, 0x773e, 0x773f, 0x7742, 0x7744, 0x7745, 0x7746, 0x7748,
-  0x7749, 0x774a, 0x774b, 0x774c, 0x774d, 0x774e, 0x774f, 0x7752,
-  0x7753, 0x7754, 0x7755, 0x7756, 0x7757, 0x7758, 0x7759, 0x775c,
-  0x8584, 0x96f9, 0x4fdd, 0x5821, 0x9971, 0x5b9d, 0x62b1, 0x62a5,
-  0x66b4, 0x8c79, 0x9c8d, 0x7206, 0x676f, 0x7891, 0x60b2, 0x5351,
-  0x5317, 0x8f88, 0x80cc, 0x8d1d, 0x94a1, 0x500d, 0x72c8, 0x5907,
-  0x60eb, 0x7119, 0x88ab, 0x5954, 0x82ef, 0x672c, 0x7b28, 0x5d29,
-  0x7ef7, 0x752d, 0x6cf5, 0x8e66, 0x8ff8, 0x903c, 0x9f3b, 0x6bd4,
-  0x9119, 0x7b14, 0x5f7c, 0x78a7, 0x84d6, 0x853d, 0x6bd5, 0x6bd9,
-  0x6bd6, 0x5e01, 0x5e87, 0x75f9, 0x95ed, 0x655d, 0x5f0a, 0x5fc5,
-  0x8f9f, 0x58c1, 0x81c2, 0x907f, 0x965b, 0x97ad, 0x8fb9, 0x7f16,
-  0x8d2c, 0x6241, 0x4fbf, 0x53d8, 0x535e, 0x8fa8, 0x8fa9, 0x8fab,
-  0x904d, 0x6807, 0x5f6a, 0x8198, 0x8868, 0x9cd6, 0x618b, 0x522b,
-  0x762a, 0x5f6c, 0x658c, 0x6fd2, 0x6ee8, 0x5bbe, 0x6448, 0x5175,
-  0x51b0, 0x67c4, 0x4e19, 0x79c9, 0x997c, 0x70b3,
-  /* 0xb2 */
-  0x775d, 0x775e, 0x775f, 0x7760, 0x7764, 0x7767, 0x7769, 0x776a,
-  0x776d, 0x776e, 0x776f, 0x7770, 0x7771, 0x7772, 0x7773, 0x7774,
-  0x7775, 0x7776, 0x7777, 0x7778, 0x777a, 0x777b, 0x777c, 0x7781,
-  0x7782, 0x7783, 0x7786, 0x7787, 0x7788, 0x7789, 0x778a, 0x778b,
-  0x778f, 0x7790, 0x7793, 0x7794, 0x7795, 0x7796, 0x7797, 0x7798,
-  0x7799, 0x779a, 0x779b, 0x779c, 0x779d, 0x779e, 0x77a1, 0x77a3,
-  0x77a4, 0x77a6, 0x77a8, 0x77ab, 0x77ad, 0x77ae, 0x77af, 0x77b1,
-  0x77b2, 0x77b4, 0x77b6, 0x77b7, 0x77b8, 0x77b9, 0x77ba, 0x77bc,
-  0x77be, 0x77c0, 0x77c1, 0x77c2, 0x77c3, 0x77c4, 0x77c5, 0x77c6,
-  0x77c7, 0x77c8, 0x77c9, 0x77ca, 0x77cb, 0x77cc, 0x77ce, 0x77cf,
-  0x77d0, 0x77d1, 0x77d2, 0x77d3, 0x77d4, 0x77d5, 0x77d6, 0x77d8,
-  0x77d9, 0x77da, 0x77dd, 0x77de, 0x77df, 0x77e0, 0x77e1, 0x77e4,
-  0x75c5, 0x5e76, 0x73bb, 0x83e0, 0x64ad, 0x62e8, 0x94b5, 0x6ce2,
-  0x535a, 0x52c3, 0x640f, 0x94c2, 0x7b94, 0x4f2f, 0x5e1b, 0x8236,
-  0x8116, 0x818a, 0x6e24, 0x6cca, 0x9a73, 0x6355, 0x535c, 0x54fa,
-  0x8865, 0x57e0, 0x4e0d, 0x5e03, 0x6b65, 0x7c3f, 0x90e8, 0x6016,
-  0x64e6, 0x731c, 0x88c1, 0x6750, 0x624d, 0x8d22, 0x776c, 0x8e29,
-  0x91c7, 0x5f69, 0x83dc, 0x8521, 0x9910, 0x53c2, 0x8695, 0x6b8b,
-  0x60ed, 0x60e8, 0x707f, 0x82cd, 0x8231, 0x4ed3, 0x6ca7, 0x85cf,
-  0x64cd, 0x7cd9, 0x69fd, 0x66f9, 0x8349, 0x5395, 0x7b56, 0x4fa7,
-  0x518c, 0x6d4b, 0x5c42, 0x8e6d, 0x63d2, 0x53c9, 0x832c, 0x8336,
-  0x67e5, 0x78b4, 0x643d, 0x5bdf, 0x5c94, 0x5dee, 0x8be7, 0x62c6,
-  0x67f4, 0x8c7a, 0x6400, 0x63ba, 0x8749, 0x998b, 0x8c17, 0x7f20,
-  0x94f2, 0x4ea7, 0x9610, 0x98a4, 0x660c, 0x7316,
-  /* 0xb3 */
-  0x77e6, 0x77e8, 0x77ea, 0x77ef, 0x77f0, 0x77f1, 0x77f2, 0x77f4,
-  0x77f5, 0x77f7, 0x77f9, 0x77fa, 0x77fb, 0x77fc, 0x7803, 0x7804,
-  0x7805, 0x7806, 0x7807, 0x7808, 0x780a, 0x780b, 0x780e, 0x780f,
-  0x7810, 0x7813, 0x7815, 0x7819, 0x781b, 0x781e, 0x7820, 0x7821,
-  0x7822, 0x7824, 0x7828, 0x782a, 0x782b, 0x782e, 0x782f, 0x7831,
-  0x7832, 0x7833, 0x7835, 0x7836, 0x783d, 0x783f, 0x7841, 0x7842,
-  0x7843, 0x7844, 0x7846, 0x7848, 0x7849, 0x784a, 0x784b, 0x784d,
-  0x784f, 0x7851, 0x7853, 0x7854, 0x7858, 0x7859, 0x785a, 0x785b,
-  0x785c, 0x785e, 0x785f, 0x7860, 0x7861, 0x7862, 0x7863, 0x7864,
-  0x7865, 0x7866, 0x7867, 0x7868, 0x7869, 0x786f, 0x7870, 0x7871,
-  0x7872, 0x7873, 0x7874, 0x7875, 0x7876, 0x7878, 0x7879, 0x787a,
-  0x787b, 0x787d, 0x787e, 0x787f, 0x7880, 0x7881, 0x7882, 0x7883,
-  0x573a, 0x5c1d, 0x5e38, 0x957f, 0x507f, 0x80a0, 0x5382, 0x655e,
-  0x7545, 0x5531, 0x5021, 0x8d85, 0x6284, 0x949e, 0x671d, 0x5632,
-  0x6f6e, 0x5de2, 0x5435, 0x7092, 0x8f66, 0x626f, 0x64a4, 0x63a3,
-  0x5f7b, 0x6f88, 0x90f4, 0x81e3, 0x8fb0, 0x5c18, 0x6668, 0x5ff1,
-  0x6c89, 0x9648, 0x8d81, 0x886c, 0x6491, 0x79f0, 0x57ce, 0x6a59,
-  0x6210, 0x5448, 0x4e58, 0x7a0b, 0x60e9, 0x6f84, 0x8bda, 0x627f,
-  0x901e, 0x9a8b, 0x79e4, 0x5403, 0x75f4, 0x6301, 0x5319, 0x6c60,
-  0x8fdf, 0x5f1b, 0x9a70, 0x803b, 0x9f7f, 0x4f88, 0x5c3a, 0x8d64,
-  0x7fc5, 0x65a5, 0x70bd, 0x5145, 0x51b2, 0x866b, 0x5d07, 0x5ba0,
-  0x62bd, 0x916c, 0x7574, 0x8e0c, 0x7a20, 0x6101, 0x7b79, 0x4ec7,
-  0x7ef8, 0x7785, 0x4e11, 0x81ed, 0x521d, 0x51fa, 0x6a71, 0x53a8,
-  0x8e87, 0x9504, 0x96cf, 0x6ec1, 0x9664, 0x695a,
-  /* 0xb4 */
-  0x7884, 0x7885, 0x7886, 0x7888, 0x788a, 0x788b, 0x788f, 0x7890,
-  0x7892, 0x7894, 0x7895, 0x7896, 0x7899, 0x789d, 0x789e, 0x78a0,
-  0x78a2, 0x78a4, 0x78a6, 0x78a8, 0x78a9, 0x78aa, 0x78ab, 0x78ac,
-  0x78ad, 0x78ae, 0x78af, 0x78b5, 0x78b6, 0x78b7, 0x78b8, 0x78ba,
-  0x78bb, 0x78bc, 0x78bd, 0x78bf, 0x78c0, 0x78c2, 0x78c3, 0x78c4,
-  0x78c6, 0x78c7, 0x78c8, 0x78cc, 0x78cd, 0x78ce, 0x78cf, 0x78d1,
-  0x78d2, 0x78d3, 0x78d6, 0x78d7, 0x78d8, 0x78da, 0x78db, 0x78dc,
-  0x78dd, 0x78de, 0x78df, 0x78e0, 0x78e1, 0x78e2, 0x78e3, 0x78e4,
-  0x78e5, 0x78e6, 0x78e7, 0x78e9, 0x78ea, 0x78eb, 0x78ed, 0x78ee,
-  0x78ef, 0x78f0, 0x78f1, 0x78f3, 0x78f5, 0x78f6, 0x78f8, 0x78f9,
-  0x78fb, 0x78fc, 0x78fd, 0x78fe, 0x78ff, 0x7900, 0x7902, 0x7903,
-  0x7904, 0x7906, 0x7907, 0x7908, 0x7909, 0x790a, 0x790b, 0x790c,
-  0x7840, 0x50a8, 0x77d7, 0x6410, 0x89e6, 0x5904, 0x63e3, 0x5ddd,
-  0x7a7f, 0x693d, 0x4f20, 0x8239, 0x5598, 0x4e32, 0x75ae, 0x7a97,
-  0x5e62, 0x5e8a, 0x95ef, 0x521b, 0x5439, 0x708a, 0x6376, 0x9524,
-  0x5782, 0x6625, 0x693f, 0x9187, 0x5507, 0x6df3, 0x7eaf, 0x8822,
-  0x6233, 0x7ef0, 0x75b5, 0x8328, 0x78c1, 0x96cc, 0x8f9e, 0x6148,
-  0x74f7, 0x8bcd, 0x6b64, 0x523a, 0x8d50, 0x6b21, 0x806a, 0x8471,
-  0x56f1, 0x5306, 0x4ece, 0x4e1b, 0x51d1, 0x7c97, 0x918b, 0x7c07,
-  0x4fc3, 0x8e7f, 0x7be1, 0x7a9c, 0x6467, 0x5d14, 0x50ac, 0x8106,
-  0x7601, 0x7cb9, 0x6dec, 0x7fe0, 0x6751, 0x5b58, 0x5bf8, 0x78cb,
-  0x64ae, 0x6413, 0x63aa, 0x632b, 0x9519, 0x642d, 0x8fbe, 0x7b54,
-  0x7629, 0x6253, 0x5927, 0x5446, 0x6b79, 0x50a3, 0x6234, 0x5e26,
-  0x6b86, 0x4ee3, 0x8d37, 0x888b, 0x5f85, 0x902e,
-  /* 0xb5 */
-  0x790d, 0x790e, 0x790f, 0x7910, 0x7911, 0x7912, 0x7914, 0x7915,
-  0x7916, 0x7917, 0x7918, 0x7919, 0x791a, 0x791b, 0x791c, 0x791d,
-  0x791f, 0x7920, 0x7921, 0x7922, 0x7923, 0x7925, 0x7926, 0x7927,
-  0x7928, 0x7929, 0x792a, 0x792b, 0x792c, 0x792d, 0x792e, 0x792f,
-  0x7930, 0x7931, 0x7932, 0x7933, 0x7935, 0x7936, 0x7937, 0x7938,
-  0x7939, 0x793d, 0x793f, 0x7942, 0x7943, 0x7944, 0x7945, 0x7947,
-  0x794a, 0x794b, 0x794c, 0x794d, 0x794e, 0x794f, 0x7950, 0x7951,
-  0x7952, 0x7954, 0x7955, 0x7958, 0x7959, 0x7961, 0x7963, 0x7964,
-  0x7966, 0x7969, 0x796a, 0x796b, 0x796c, 0x796e, 0x7970, 0x7971,
-  0x7972, 0x7973, 0x7974, 0x7975, 0x7976, 0x7979, 0x797b, 0x797c,
-  0x797d, 0x797e, 0x797f, 0x7982, 0x7983, 0x7986, 0x7987, 0x7988,
-  0x7989, 0x798b, 0x798c, 0x798d, 0x798e, 0x7990, 0x7991, 0x7992,
-  0x6020, 0x803d, 0x62c5, 0x4e39, 0x5355, 0x90f8, 0x63b8, 0x80c6,
-  0x65e6, 0x6c2e, 0x4f46, 0x60ee, 0x6de1, 0x8bde, 0x5f39, 0x86cb,
-  0x5f53, 0x6321, 0x515a, 0x8361, 0x6863, 0x5200, 0x6363, 0x8e48,
-  0x5012, 0x5c9b, 0x7977, 0x5bfc, 0x5230, 0x7a3b, 0x60bc, 0x9053,
-  0x76d7, 0x5fb7, 0x5f97, 0x7684, 0x8e6c, 0x706f, 0x767b, 0x7b49,
-  0x77aa, 0x51f3, 0x9093, 0x5824, 0x4f4e, 0x6ef4, 0x8fea, 0x654c,
-  0x7b1b, 0x72c4, 0x6da4, 0x7fdf, 0x5ae1, 0x62b5, 0x5e95, 0x5730,
-  0x8482, 0x7b2c, 0x5e1d, 0x5f1f, 0x9012, 0x7f14, 0x98a0, 0x6382,
-  0x6ec7, 0x7898, 0x70b9, 0x5178, 0x975b, 0x57ab, 0x7535, 0x4f43,
-  0x7538, 0x5e97, 0x60e6, 0x5960, 0x6dc0, 0x6bbf, 0x7889, 0x53fc,
-  0x96d5, 0x51cb, 0x5201, 0x6389, 0x540a, 0x9493, 0x8c03, 0x8dcc,
-  0x7239, 0x789f, 0x8776, 0x8fed, 0x8c0d, 0x53e0,
-  /* 0xb6 */
-  0x7993, 0x7994, 0x7995, 0x7996, 0x7997, 0x7998, 0x7999, 0x799b,
-  0x799c, 0x799d, 0x799e, 0x799f, 0x79a0, 0x79a1, 0x79a2, 0x79a3,
-  0x79a4, 0x79a5, 0x79a6, 0x79a8, 0x79a9, 0x79aa, 0x79ab, 0x79ac,
-  0x79ad, 0x79ae, 0x79af, 0x79b0, 0x79b1, 0x79b2, 0x79b4, 0x79b5,
-  0x79b6, 0x79b7, 0x79b8, 0x79bc, 0x79bf, 0x79c2, 0x79c4, 0x79c5,
-  0x79c7, 0x79c8, 0x79ca, 0x79cc, 0x79ce, 0x79cf, 0x79d0, 0x79d3,
-  0x79d4, 0x79d6, 0x79d7, 0x79d9, 0x79da, 0x79db, 0x79dc, 0x79dd,
-  0x79de, 0x79e0, 0x79e1, 0x79e2, 0x79e5, 0x79e8, 0x79ea, 0x79ec,
-  0x79ee, 0x79f1, 0x79f2, 0x79f3, 0x79f4, 0x79f5, 0x79f6, 0x79f7,
-  0x79f9, 0x79fa, 0x79fc, 0x79fe, 0x79ff, 0x7a01, 0x7a04, 0x7a05,
-  0x7a07, 0x7a08, 0x7a09, 0x7a0a, 0x7a0c, 0x7a0f, 0x7a10, 0x7a11,
-  0x7a12, 0x7a13, 0x7a15, 0x7a16, 0x7a18, 0x7a19, 0x7a1b, 0x7a1c,
-  0x4e01, 0x76ef, 0x53ee, 0x9489, 0x9876, 0x9f0e, 0x952d, 0x5b9a,
-  0x8ba2, 0x4e22, 0x4e1c, 0x51ac, 0x8463, 0x61c2, 0x52a8, 0x680b,
-  0x4f97, 0x606b, 0x51bb, 0x6d1e, 0x515c, 0x6296, 0x6597, 0x9661,
-  0x8c46, 0x9017, 0x75d8, 0x90fd, 0x7763, 0x6bd2, 0x728a, 0x72ec,
-  0x8bfb, 0x5835, 0x7779, 0x8d4c, 0x675c, 0x9540, 0x809a, 0x5ea6,
-  0x6e21, 0x5992, 0x7aef, 0x77ed, 0x953b, 0x6bb5, 0x65ad, 0x7f0e,
-  0x5806, 0x5151, 0x961f, 0x5bf9, 0x58a9, 0x5428, 0x8e72, 0x6566,
-  0x987f, 0x56e4, 0x949d, 0x76fe, 0x9041, 0x6387, 0x54c6, 0x591a,
-  0x593a, 0x579b, 0x8eb2, 0x6735, 0x8dfa, 0x8235, 0x5241, 0x60f0,
-  0x5815, 0x86fe, 0x5ce8, 0x9e45, 0x4fc4, 0x989d, 0x8bb9, 0x5a25,
-  0x6076, 0x5384, 0x627c, 0x904f, 0x9102, 0x997f, 0x6069, 0x800c,
-  0x513f, 0x8033, 0x5c14, 0x9975, 0x6d31, 0x4e8c,
-  /* 0xb7 */
-  0x7a1d, 0x7a1f, 0x7a21, 0x7a22, 0x7a24, 0x7a25, 0x7a26, 0x7a27,
-  0x7a28, 0x7a29, 0x7a2a, 0x7a2b, 0x7a2c, 0x7a2d, 0x7a2e, 0x7a2f,
-  0x7a30, 0x7a31, 0x7a32, 0x7a34, 0x7a35, 0x7a36, 0x7a38, 0x7a3a,
-  0x7a3e, 0x7a40, 0x7a41, 0x7a42, 0x7a43, 0x7a44, 0x7a45, 0x7a47,
-  0x7a48, 0x7a49, 0x7a4a, 0x7a4b, 0x7a4c, 0x7a4d, 0x7a4e, 0x7a4f,
-  0x7a50, 0x7a52, 0x7a53, 0x7a54, 0x7a55, 0x7a56, 0x7a58, 0x7a59,
-  0x7a5a, 0x7a5b, 0x7a5c, 0x7a5d, 0x7a5e, 0x7a5f, 0x7a60, 0x7a61,
-  0x7a62, 0x7a63, 0x7a64, 0x7a65, 0x7a66, 0x7a67, 0x7a68, 0x7a69,
-  0x7a6a, 0x7a6b, 0x7a6c, 0x7a6d, 0x7a6e, 0x7a6f, 0x7a71, 0x7a72,
-  0x7a73, 0x7a75, 0x7a7b, 0x7a7c, 0x7a7d, 0x7a7e, 0x7a82, 0x7a85,
-  0x7a87, 0x7a89, 0x7a8a, 0x7a8b, 0x7a8c, 0x7a8e, 0x7a8f, 0x7a90,
-  0x7a93, 0x7a94, 0x7a99, 0x7a9a, 0x7a9b, 0x7a9e, 0x7aa1, 0x7aa2,
-  0x8d30, 0x53d1, 0x7f5a, 0x7b4f, 0x4f10, 0x4e4f, 0x9600, 0x6cd5,
-  0x73d0, 0x85e9, 0x5e06, 0x756a, 0x7ffb, 0x6a0a, 0x77fe, 0x9492,
-  0x7e41, 0x51e1, 0x70e6, 0x53cd, 0x8fd4, 0x8303, 0x8d29, 0x72af,
-  0x996d, 0x6cdb, 0x574a, 0x82b3, 0x65b9, 0x80aa, 0x623f, 0x9632,
-  0x59a8, 0x4eff, 0x8bbf, 0x7eba, 0x653e, 0x83f2, 0x975e, 0x5561,
-  0x98de, 0x80a5, 0x532a, 0x8bfd, 0x5420, 0x80ba, 0x5e9f, 0x6cb8,
-  0x8d39, 0x82ac, 0x915a, 0x5429, 0x6c1b, 0x5206, 0x7eb7, 0x575f,
-  0x711a, 0x6c7e, 0x7c89, 0x594b, 0x4efd, 0x5fff, 0x6124, 0x7caa,
-  0x4e30, 0x5c01, 0x67ab, 0x8702, 0x5cf0, 0x950b, 0x98ce, 0x75af,
-  0x70fd, 0x9022, 0x51af, 0x7f1d, 0x8bbd, 0x5949, 0x51e4, 0x4f5b,
-  0x5426, 0x592b, 0x6577, 0x80a4, 0x5b75, 0x6276, 0x62c2, 0x8f90,
-  0x5e45, 0x6c1f, 0x7b26, 0x4f0f, 0x4fd8, 0x670d,
-  /* 0xb8 */
-  0x7aa3, 0x7aa4, 0x7aa7, 0x7aa9, 0x7aaa, 0x7aab, 0x7aae, 0x7aaf,
-  0x7ab0, 0x7ab1, 0x7ab2, 0x7ab4, 0x7ab5, 0x7ab6, 0x7ab7, 0x7ab8,
-  0x7ab9, 0x7aba, 0x7abb, 0x7abc, 0x7abd, 0x7abe, 0x7ac0, 0x7ac1,
-  0x7ac2, 0x7ac3, 0x7ac4, 0x7ac5, 0x7ac6, 0x7ac7, 0x7ac8, 0x7ac9,
-  0x7aca, 0x7acc, 0x7acd, 0x7ace, 0x7acf, 0x7ad0, 0x7ad1, 0x7ad2,
-  0x7ad3, 0x7ad4, 0x7ad5, 0x7ad7, 0x7ad8, 0x7ada, 0x7adb, 0x7adc,
-  0x7add, 0x7ae1, 0x7ae2, 0x7ae4, 0x7ae7, 0x7ae8, 0x7ae9, 0x7aea,
-  0x7aeb, 0x7aec, 0x7aee, 0x7af0, 0x7af1, 0x7af2, 0x7af3, 0x7af4,
-  0x7af5, 0x7af6, 0x7af7, 0x7af8, 0x7afb, 0x7afc, 0x7afe, 0x7b00,
-  0x7b01, 0x7b02, 0x7b05, 0x7b07, 0x7b09, 0x7b0c, 0x7b0d, 0x7b0e,
-  0x7b10, 0x7b12, 0x7b13, 0x7b16, 0x7b17, 0x7b18, 0x7b1a, 0x7b1c,
-  0x7b1d, 0x7b1f, 0x7b21, 0x7b22, 0x7b23, 0x7b27, 0x7b29, 0x7b2d,
-  0x6d6e, 0x6daa, 0x798f, 0x88b1, 0x5f17, 0x752b, 0x629a, 0x8f85,
-  0x4fef, 0x91dc, 0x65a7, 0x812f, 0x8151, 0x5e9c, 0x8150, 0x8d74,
-  0x526f, 0x8986, 0x8d4b, 0x590d, 0x5085, 0x4ed8, 0x961c, 0x7236,
-  0x8179, 0x8d1f, 0x5bcc, 0x8ba3, 0x9644, 0x5987, 0x7f1a, 0x5490,
-  0x5676, 0x560e, 0x8be5, 0x6539, 0x6982, 0x9499, 0x76d6, 0x6e89,
-  0x5e72, 0x7518, 0x6746, 0x67d1, 0x7aff, 0x809d, 0x8d76, 0x611f,
-  0x79c6, 0x6562, 0x8d63, 0x5188, 0x521a, 0x94a2, 0x7f38, 0x809b,
-  0x7eb2, 0x5c97, 0x6e2f, 0x6760, 0x7bd9, 0x768b, 0x9ad8, 0x818f,
-  0x7f94, 0x7cd5, 0x641e, 0x9550, 0x7a3f, 0x544a, 0x54e5, 0x6b4c,
-  0x6401, 0x6208, 0x9e3d, 0x80f3, 0x7599, 0x5272, 0x9769, 0x845b,
-  0x683c, 0x86e4, 0x9601, 0x9694, 0x94ec, 0x4e2a, 0x5404, 0x7ed9,
-  0x6839, 0x8ddf, 0x8015, 0x66f4, 0x5e9a, 0x7fb9,
-  /* 0xb9 */
-  0x7b2f, 0x7b30, 0x7b32, 0x7b34, 0x7b35, 0x7b36, 0x7b37, 0x7b39,
-  0x7b3b, 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b42, 0x7b43, 0x7b44,
-  0x7b46, 0x7b48, 0x7b4a, 0x7b4d, 0x7b4e, 0x7b53, 0x7b55, 0x7b57,
-  0x7b59, 0x7b5c, 0x7b5e, 0x7b5f, 0x7b61, 0x7b63, 0x7b64, 0x7b65,
-  0x7b66, 0x7b67, 0x7b68, 0x7b69, 0x7b6a, 0x7b6b, 0x7b6c, 0x7b6d,
-  0x7b6f, 0x7b70, 0x7b73, 0x7b74, 0x7b76, 0x7b78, 0x7b7a, 0x7b7c,
-  0x7b7d, 0x7b7f, 0x7b81, 0x7b82, 0x7b83, 0x7b84, 0x7b86, 0x7b87,
-  0x7b88, 0x7b89, 0x7b8a, 0x7b8b, 0x7b8c, 0x7b8e, 0x7b8f, 0x7b91,
-  0x7b92, 0x7b93, 0x7b96, 0x7b98, 0x7b99, 0x7b9a, 0x7b9b, 0x7b9e,
-  0x7b9f, 0x7ba0, 0x7ba3, 0x7ba4, 0x7ba5, 0x7bae, 0x7baf, 0x7bb0,
-  0x7bb2, 0x7bb3, 0x7bb5, 0x7bb6, 0x7bb7, 0x7bb9, 0x7bba, 0x7bbb,
-  0x7bbc, 0x7bbd, 0x7bbe, 0x7bbf, 0x7bc0, 0x7bc2, 0x7bc3, 0x7bc4,
-  0x57c2, 0x803f, 0x6897, 0x5de5, 0x653b, 0x529f, 0x606d, 0x9f9a,
-  0x4f9b, 0x8eac, 0x516c, 0x5bab, 0x5f13, 0x5de9, 0x6c5e, 0x62f1,
-  0x8d21, 0x5171, 0x94a9, 0x52fe, 0x6c9f, 0x82df, 0x72d7, 0x57a2,
-  0x6784, 0x8d2d, 0x591f, 0x8f9c, 0x83c7, 0x5495, 0x7b8d, 0x4f30,
-  0x6cbd, 0x5b64, 0x59d1, 0x9f13, 0x53e4, 0x86ca, 0x9aa8, 0x8c37,
-  0x80a1, 0x6545, 0x987e, 0x56fa, 0x96c7, 0x522e, 0x74dc, 0x5250,
-  0x5be1, 0x6302, 0x8902, 0x4e56, 0x62d0, 0x602a, 0x68fa, 0x5173,
-  0x5b98, 0x51a0, 0x89c2, 0x7ba1, 0x9986, 0x7f50, 0x60ef, 0x704c,
-  0x8d2f, 0x5149, 0x5e7f, 0x901b, 0x7470, 0x89c4, 0x572d, 0x7845,
-  0x5f52, 0x9f9f, 0x95fa, 0x8f68, 0x9b3c, 0x8be1, 0x7678, 0x6842,
-  0x67dc, 0x8dea, 0x8d35, 0x523d, 0x8f8a, 0x6eda, 0x68cd, 0x9505,
-  0x90ed, 0x56fd, 0x679c, 0x88f9, 0x8fc7, 0x54c8,
-  /* 0xba */
-  0x7bc5, 0x7bc8, 0x7bc9, 0x7bca, 0x7bcb, 0x7bcd, 0x7bce, 0x7bcf,
-  0x7bd0, 0x7bd2, 0x7bd4, 0x7bd5, 0x7bd6, 0x7bd7, 0x7bd8, 0x7bdb,
-  0x7bdc, 0x7bde, 0x7bdf, 0x7be0, 0x7be2, 0x7be3, 0x7be4, 0x7be7,
-  0x7be8, 0x7be9, 0x7beb, 0x7bec, 0x7bed, 0x7bef, 0x7bf0, 0x7bf2,
-  0x7bf3, 0x7bf4, 0x7bf5, 0x7bf6, 0x7bf8, 0x7bf9, 0x7bfa, 0x7bfb,
-  0x7bfd, 0x7bff, 0x7c00, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c05,
-  0x7c06, 0x7c08, 0x7c09, 0x7c0a, 0x7c0d, 0x7c0e, 0x7c10, 0x7c11,
-  0x7c12, 0x7c13, 0x7c14, 0x7c15, 0x7c17, 0x7c18, 0x7c19, 0x7c1a,
-  0x7c1b, 0x7c1c, 0x7c1d, 0x7c1e, 0x7c20, 0x7c21, 0x7c22, 0x7c23,
-  0x7c24, 0x7c25, 0x7c28, 0x7c29, 0x7c2b, 0x7c2c, 0x7c2d, 0x7c2e,
-  0x7c2f, 0x7c30, 0x7c31, 0x7c32, 0x7c33, 0x7c34, 0x7c35, 0x7c36,
-  0x7c37, 0x7c39, 0x7c3a, 0x7c3b, 0x7c3c, 0x7c3d, 0x7c3e, 0x7c42,
-  0x9ab8, 0x5b69, 0x6d77, 0x6c26, 0x4ea5, 0x5bb3, 0x9a87, 0x9163,
-  0x61a8, 0x90af, 0x97e9, 0x542b, 0x6db5, 0x5bd2, 0x51fd, 0x558a,
-  0x7f55, 0x7ff0, 0x64bc, 0x634d, 0x65f1, 0x61be, 0x608d, 0x710a,
-  0x6c57, 0x6c49, 0x592f, 0x676d, 0x822a, 0x58d5, 0x568e, 0x8c6a,
-  0x6beb, 0x90dd, 0x597d, 0x8017, 0x53f7, 0x6d69, 0x5475, 0x559d,
-  0x8377, 0x83cf, 0x6838, 0x79be, 0x548c, 0x4f55, 0x5408, 0x76d2,
-  0x8c89, 0x9602, 0x6cb3, 0x6db8, 0x8d6b, 0x8910, 0x9e64, 0x8d3a,
-  0x563f, 0x9ed1, 0x75d5, 0x5f88, 0x72e0, 0x6068, 0x54fc, 0x4ea8,
-  0x6a2a, 0x8861, 0x6052, 0x8f70, 0x54c4, 0x70d8, 0x8679, 0x9e3f,
-  0x6d2a, 0x5b8f, 0x5f18, 0x7ea2, 0x5589, 0x4faf, 0x7334, 0x543c,
-  0x539a, 0x5019, 0x540e, 0x547c, 0x4e4e, 0x5ffd, 0x745a, 0x58f6,
-  0x846b, 0x80e1, 0x8774, 0x72d0, 0x7cca, 0x6e56,
-  /* 0xbb */
-  0x7c43, 0x7c44, 0x7c45, 0x7c46, 0x7c47, 0x7c48, 0x7c49, 0x7c4a,
-  0x7c4b, 0x7c4c, 0x7c4e, 0x7c4f, 0x7c50, 0x7c51, 0x7c52, 0x7c53,
-  0x7c54, 0x7c55, 0x7c56, 0x7c57, 0x7c58, 0x7c59, 0x7c5a, 0x7c5b,
-  0x7c5c, 0x7c5d, 0x7c5e, 0x7c5f, 0x7c60, 0x7c61, 0x7c62, 0x7c63,
-  0x7c64, 0x7c65, 0x7c66, 0x7c67, 0x7c68, 0x7c69, 0x7c6a, 0x7c6b,
-  0x7c6c, 0x7c6d, 0x7c6e, 0x7c6f, 0x7c70, 0x7c71, 0x7c72, 0x7c75,
-  0x7c76, 0x7c77, 0x7c78, 0x7c79, 0x7c7a, 0x7c7e, 0x7c7f, 0x7c80,
-  0x7c81, 0x7c82, 0x7c83, 0x7c84, 0x7c85, 0x7c86, 0x7c87, 0x7c88,
-  0x7c8a, 0x7c8b, 0x7c8c, 0x7c8d, 0x7c8e, 0x7c8f, 0x7c90, 0x7c93,
-  0x7c94, 0x7c96, 0x7c99, 0x7c9a, 0x7c9b, 0x7ca0, 0x7ca1, 0x7ca3,
-  0x7ca6, 0x7ca7, 0x7ca8, 0x7ca9, 0x7cab, 0x7cac, 0x7cad, 0x7caf,
-  0x7cb0, 0x7cb4, 0x7cb5, 0x7cb6, 0x7cb7, 0x7cb8, 0x7cba, 0x7cbb,
-  0x5f27, 0x864e, 0x552c, 0x62a4, 0x4e92, 0x6caa, 0x6237, 0x82b1,
-  0x54d7, 0x534e, 0x733e, 0x6ed1, 0x753b, 0x5212, 0x5316, 0x8bdd,
-  0x69d0, 0x5f8a, 0x6000, 0x6dee, 0x574f, 0x6b22, 0x73af, 0x6853,
-  0x8fd8, 0x7f13, 0x6362, 0x60a3, 0x5524, 0x75ea, 0x8c62, 0x7115,
-  0x6da3, 0x5ba6, 0x5e7b, 0x8352, 0x614c, 0x9ec4, 0x78fa, 0x8757,
-  0x7c27, 0x7687, 0x51f0, 0x60f6, 0x714c, 0x6643, 0x5e4c, 0x604d,
-  0x8c0e, 0x7070, 0x6325, 0x8f89, 0x5fbd, 0x6062, 0x86d4, 0x56de,
-  0x6bc1, 0x6094, 0x6167, 0x5349, 0x60e0, 0x6666, 0x8d3f, 0x79fd,
-  0x4f1a, 0x70e9, 0x6c47, 0x8bb3, 0x8bf2, 0x7ed8, 0x8364, 0x660f,
-  0x5a5a, 0x9b42, 0x6d51, 0x6df7, 0x8c41, 0x6d3b, 0x4f19, 0x706b,
-  0x83b7, 0x6216, 0x60d1, 0x970d, 0x8d27, 0x7978, 0x51fb, 0x573e,
-  0x57fa, 0x673a, 0x7578, 0x7a3d, 0x79ef, 0x7b95,
-  /* 0xbc */
-  0x7cbf, 0x7cc0, 0x7cc2, 0x7cc3, 0x7cc4, 0x7cc6, 0x7cc9, 0x7ccb,
-  0x7cce, 0x7ccf, 0x7cd0, 0x7cd1, 0x7cd2, 0x7cd3, 0x7cd4, 0x7cd8,
-  0x7cda, 0x7cdb, 0x7cdd, 0x7cde, 0x7ce1, 0x7ce2, 0x7ce3, 0x7ce4,
-  0x7ce5, 0x7ce6, 0x7ce7, 0x7ce9, 0x7cea, 0x7ceb, 0x7cec, 0x7ced,
-  0x7cee, 0x7cf0, 0x7cf1, 0x7cf2, 0x7cf3, 0x7cf4, 0x7cf5, 0x7cf6,
-  0x7cf7, 0x7cf9, 0x7cfa, 0x7cfc, 0x7cfd, 0x7cfe, 0x7cff, 0x7d00,
-  0x7d01, 0x7d02, 0x7d03, 0x7d04, 0x7d05, 0x7d06, 0x7d07, 0x7d08,
-  0x7d09, 0x7d0b, 0x7d0c, 0x7d0d, 0x7d0e, 0x7d0f, 0x7d10, 0x7d11,
-  0x7d12, 0x7d13, 0x7d14, 0x7d15, 0x7d16, 0x7d17, 0x7d18, 0x7d19,
-  0x7d1a, 0x7d1b, 0x7d1c, 0x7d1d, 0x7d1e, 0x7d1f, 0x7d21, 0x7d23,
-  0x7d24, 0x7d25, 0x7d26, 0x7d28, 0x7d29, 0x7d2a, 0x7d2c, 0x7d2d,
-  0x7d2e, 0x7d30, 0x7d31, 0x7d32, 0x7d33, 0x7d34, 0x7d35, 0x7d36,
-  0x808c, 0x9965, 0x8ff9, 0x6fc0, 0x8ba5, 0x9e21, 0x59ec, 0x7ee9,
-  0x7f09, 0x5409, 0x6781, 0x68d8, 0x8f91, 0x7c4d, 0x96c6, 0x53ca,
-  0x6025, 0x75be, 0x6c72, 0x5373, 0x5ac9, 0x7ea7, 0x6324, 0x51e0,
-  0x810a, 0x5df1, 0x84df, 0x6280, 0x5180, 0x5b63, 0x4f0e, 0x796d,
-  0x5242, 0x60b8, 0x6d4e, 0x5bc4, 0x5bc2, 0x8ba1, 0x8bb0, 0x65e2,
-  0x5fcc, 0x9645, 0x5993, 0x7ee7, 0x7eaa, 0x5609, 0x67b7, 0x5939,
-  0x4f73, 0x5bb6, 0x52a0, 0x835a, 0x988a, 0x8d3e, 0x7532, 0x94be,
-  0x5047, 0x7a3c, 0x4ef7, 0x67b6, 0x9a7e, 0x5ac1, 0x6b7c, 0x76d1,
-  0x575a, 0x5c16, 0x7b3a, 0x95f4, 0x714e, 0x517c, 0x80a9, 0x8270,
-  0x5978, 0x7f04, 0x8327, 0x68c0, 0x67ec, 0x78b1, 0x7877, 0x62e3,
-  0x6361, 0x7b80, 0x4fed, 0x526a, 0x51cf, 0x8350, 0x69db, 0x9274,
-  0x8df5, 0x8d31, 0x89c1, 0x952e, 0x7bad, 0x4ef6,
-  /* 0xbd */
-  0x7d37, 0x7d38, 0x7d39, 0x7d3a, 0x7d3b, 0x7d3c, 0x7d3d, 0x7d3e,
-  0x7d3f, 0x7d40, 0x7d41, 0x7d42, 0x7d43, 0x7d44, 0x7d45, 0x7d46,
-  0x7d47, 0x7d48, 0x7d49, 0x7d4a, 0x7d4b, 0x7d4c, 0x7d4d, 0x7d4e,
-  0x7d4f, 0x7d50, 0x7d51, 0x7d52, 0x7d53, 0x7d54, 0x7d55, 0x7d56,
-  0x7d57, 0x7d58, 0x7d59, 0x7d5a, 0x7d5b, 0x7d5c, 0x7d5d, 0x7d5e,
-  0x7d5f, 0x7d60, 0x7d61, 0x7d62, 0x7d63, 0x7d64, 0x7d65, 0x7d66,
-  0x7d67, 0x7d68, 0x7d69, 0x7d6a, 0x7d6b, 0x7d6c, 0x7d6d, 0x7d6f,
-  0x7d70, 0x7d71, 0x7d72, 0x7d73, 0x7d74, 0x7d75, 0x7d76, 0x7d78,
-  0x7d79, 0x7d7a, 0x7d7b, 0x7d7c, 0x7d7d, 0x7d7e, 0x7d7f, 0x7d80,
-  0x7d81, 0x7d82, 0x7d83, 0x7d84, 0x7d85, 0x7d86, 0x7d87, 0x7d88,
-  0x7d89, 0x7d8a, 0x7d8b, 0x7d8c, 0x7d8d, 0x7d8e, 0x7d8f, 0x7d90,
-  0x7d91, 0x7d92, 0x7d93, 0x7d94, 0x7d95, 0x7d96, 0x7d97, 0x7d98,
-  0x5065, 0x8230, 0x5251, 0x996f, 0x6e10, 0x6e85, 0x6da7, 0x5efa,
-  0x50f5, 0x59dc, 0x5c06, 0x6d46, 0x6c5f, 0x7586, 0x848b, 0x6868,
-  0x5956, 0x8bb2, 0x5320, 0x9171, 0x964d, 0x8549, 0x6912, 0x7901,
-  0x7126, 0x80f6, 0x4ea4, 0x90ca, 0x6d47, 0x9a84, 0x5a07, 0x56bc,
-  0x6405, 0x94f0, 0x77eb, 0x4fa5, 0x811a, 0x72e1, 0x89d2, 0x997a,
-  0x7f34, 0x7ede, 0x527f, 0x6559, 0x9175, 0x8f7f, 0x8f83, 0x53eb,
-  0x7a96, 0x63ed, 0x63a5, 0x7686, 0x79f8, 0x8857, 0x9636, 0x622a,
-  0x52ab, 0x8282, 0x6854, 0x6770, 0x6377, 0x776b, 0x7aed, 0x6d01,
-  0x7ed3, 0x89e3, 0x59d0, 0x6212, 0x85c9, 0x82a5, 0x754c, 0x501f,
-  0x4ecb, 0x75a5, 0x8beb, 0x5c4a, 0x5dfe, 0x7b4b, 0x65a4, 0x91d1,
-  0x4eca, 0x6d25, 0x895f, 0x7d27, 0x9526, 0x4ec5, 0x8c28, 0x8fdb,
-  0x9773, 0x664b, 0x7981, 0x8fd1, 0x70ec, 0x6d78,
-  /* 0xbe */
-  0x7d99, 0x7d9a, 0x7d9b, 0x7d9c, 0x7d9d, 0x7d9e, 0x7d9f, 0x7da0,
-  0x7da1, 0x7da2, 0x7da3, 0x7da4, 0x7da5, 0x7da7, 0x7da8, 0x7da9,
-  0x7daa, 0x7dab, 0x7dac, 0x7dad, 0x7daf, 0x7db0, 0x7db1, 0x7db2,
-  0x7db3, 0x7db4, 0x7db5, 0x7db6, 0x7db7, 0x7db8, 0x7db9, 0x7dba,
-  0x7dbb, 0x7dbc, 0x7dbd, 0x7dbe, 0x7dbf, 0x7dc0, 0x7dc1, 0x7dc2,
-  0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dc7, 0x7dc8, 0x7dc9, 0x7dca,
-  0x7dcb, 0x7dcc, 0x7dcd, 0x7dce, 0x7dcf, 0x7dd0, 0x7dd1, 0x7dd2,
-  0x7dd3, 0x7dd4, 0x7dd5, 0x7dd6, 0x7dd7, 0x7dd8, 0x7dd9, 0x7dda,
-  0x7ddb, 0x7ddc, 0x7ddd, 0x7dde, 0x7ddf, 0x7de0, 0x7de1, 0x7de2,
-  0x7de3, 0x7de4, 0x7de5, 0x7de6, 0x7de7, 0x7de8, 0x7de9, 0x7dea,
-  0x7deb, 0x7dec, 0x7ded, 0x7dee, 0x7def, 0x7df0, 0x7df1, 0x7df2,
-  0x7df3, 0x7df4, 0x7df5, 0x7df6, 0x7df7, 0x7df8, 0x7df9, 0x7dfa,
-  0x5c3d, 0x52b2, 0x8346, 0x5162, 0x830e, 0x775b, 0x6676, 0x9cb8,
-  0x4eac, 0x60ca, 0x7cbe, 0x7cb3, 0x7ecf, 0x4e95, 0x8b66, 0x666f,
-  0x9888, 0x9759, 0x5883, 0x656c, 0x955c, 0x5f84, 0x75c9, 0x9756,
-  0x7adf, 0x7ade, 0x51c0, 0x70af, 0x7a98, 0x63ea, 0x7a76, 0x7ea0,
-  0x7396, 0x97ed, 0x4e45, 0x7078, 0x4e5d, 0x9152, 0x53a9, 0x6551,
-  0x65e7, 0x81fc, 0x8205, 0x548e, 0x5c31, 0x759a, 0x97a0, 0x62d8,
-  0x72d9, 0x75bd, 0x5c45, 0x9a79, 0x83ca, 0x5c40, 0x5480, 0x77e9,
-  0x4e3e, 0x6cae, 0x805a, 0x62d2, 0x636e, 0x5de8, 0x5177, 0x8ddd,
-  0x8e1e, 0x952f, 0x4ff1, 0x53e5, 0x60e7, 0x70ac, 0x5267, 0x6350,
-  0x9e43, 0x5a1f, 0x5026, 0x7737, 0x5377, 0x7ee2, 0x6485, 0x652b,
-  0x6289, 0x6398, 0x5014, 0x7235, 0x89c9, 0x51b3, 0x8bc0, 0x7edd,
-  0x5747, 0x83cc, 0x94a7, 0x519b, 0x541b, 0x5cfb,
-  /* 0xbf */
-  0x7dfb, 0x7dfc, 0x7dfd, 0x7dfe, 0x7dff, 0x7e00, 0x7e01, 0x7e02,
-  0x7e03, 0x7e04, 0x7e05, 0x7e06, 0x7e07, 0x7e08, 0x7e09, 0x7e0a,
-  0x7e0b, 0x7e0c, 0x7e0d, 0x7e0e, 0x7e0f, 0x7e10, 0x7e11, 0x7e12,
-  0x7e13, 0x7e14, 0x7e15, 0x7e16, 0x7e17, 0x7e18, 0x7e19, 0x7e1a,
-  0x7e1b, 0x7e1c, 0x7e1d, 0x7e1e, 0x7e1f, 0x7e20, 0x7e21, 0x7e22,
-  0x7e23, 0x7e24, 0x7e25, 0x7e26, 0x7e27, 0x7e28, 0x7e29, 0x7e2a,
-  0x7e2b, 0x7e2c, 0x7e2d, 0x7e2e, 0x7e2f, 0x7e30, 0x7e31, 0x7e32,
-  0x7e33, 0x7e34, 0x7e35, 0x7e36, 0x7e37, 0x7e38, 0x7e39, 0x7e3a,
-  0x7e3c, 0x7e3d, 0x7e3e, 0x7e3f, 0x7e40, 0x7e42, 0x7e43, 0x7e44,
-  0x7e45, 0x7e46, 0x7e48, 0x7e49, 0x7e4a, 0x7e4b, 0x7e4c, 0x7e4d,
-  0x7e4e, 0x7e4f, 0x7e50, 0x7e51, 0x7e52, 0x7e53, 0x7e54, 0x7e55,
-  0x7e56, 0x7e57, 0x7e58, 0x7e59, 0x7e5a, 0x7e5b, 0x7e5c, 0x7e5d,
-  0x4fca, 0x7ae3, 0x6d5a, 0x90e1, 0x9a8f, 0x5580, 0x5496, 0x5361,
-  0x54af, 0x5f00, 0x63e9, 0x6977, 0x51ef, 0x6168, 0x520a, 0x582a,
-  0x52d8, 0x574e, 0x780d, 0x770b, 0x5eb7, 0x6177, 0x7ce0, 0x625b,
-  0x6297, 0x4ea2, 0x7095, 0x8003, 0x62f7, 0x70e4, 0x9760, 0x5777,
-  0x82db, 0x67ef, 0x68f5, 0x78d5, 0x9897, 0x79d1, 0x58f3, 0x54b3,
-  0x53ef, 0x6e34, 0x514b, 0x523b, 0x5ba2, 0x8bfe, 0x80af, 0x5543,
-  0x57a6, 0x6073, 0x5751, 0x542d, 0x7a7a, 0x6050, 0x5b54, 0x63a7,
-  0x62a0, 0x53e3, 0x6263, 0x5bc7, 0x67af, 0x54ed, 0x7a9f, 0x82e6,
-  0x9177, 0x5e93, 0x88e4, 0x5938, 0x57ae, 0x630e, 0x8de8, 0x80ef,
-  0x5757, 0x7b77, 0x4fa9, 0x5feb, 0x5bbd, 0x6b3e, 0x5321, 0x7b50,
-  0x72c2, 0x6846, 0x77ff, 0x7736, 0x65f7, 0x51b5, 0x4e8f, 0x76d4,
-  0x5cbf, 0x7aa5, 0x8475, 0x594e, 0x9b41, 0x5080,
-  /* 0xc0 */
-  0x7e5e, 0x7e5f, 0x7e60, 0x7e61, 0x7e62, 0x7e63, 0x7e64, 0x7e65,
-  0x7e66, 0x7e67, 0x7e68, 0x7e69, 0x7e6a, 0x7e6b, 0x7e6c, 0x7e6d,
-  0x7e6e, 0x7e6f, 0x7e70, 0x7e71, 0x7e72, 0x7e73, 0x7e74, 0x7e75,
-  0x7e76, 0x7e77, 0x7e78, 0x7e79, 0x7e7a, 0x7e7b, 0x7e7c, 0x7e7d,
-  0x7e7e, 0x7e7f, 0x7e80, 0x7e81, 0x7e83, 0x7e84, 0x7e85, 0x7e86,
-  0x7e87, 0x7e88, 0x7e89, 0x7e8a, 0x7e8b, 0x7e8c, 0x7e8d, 0x7e8e,
-  0x7e8f, 0x7e90, 0x7e91, 0x7e92, 0x7e93, 0x7e94, 0x7e95, 0x7e96,
-  0x7e97, 0x7e98, 0x7e99, 0x7e9a, 0x7e9c, 0x7e9d, 0x7e9e, 0x7eae,
-  0x7eb4, 0x7ebb, 0x7ebc, 0x7ed6, 0x7ee4, 0x7eec, 0x7ef9, 0x7f0a,
-  0x7f10, 0x7f1e, 0x7f37, 0x7f39, 0x7f3b, 0x7f3c, 0x7f3d, 0x7f3e,
-  0x7f3f, 0x7f40, 0x7f41, 0x7f43, 0x7f46, 0x7f47, 0x7f48, 0x7f49,
-  0x7f4a, 0x7f4b, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f4f, 0x7f52, 0x7f53,
-  0x9988, 0x6127, 0x6e83, 0x5764, 0x6606, 0x6346, 0x56f0, 0x62ec,
-  0x6269, 0x5ed3, 0x9614, 0x5783, 0x62c9, 0x5587, 0x8721, 0x814a,
-  0x8fa3, 0x5566, 0x83b1, 0x6765, 0x8d56, 0x84dd, 0x5a6a, 0x680f,
-  0x62e6, 0x7bee, 0x9611, 0x5170, 0x6f9c, 0x8c30, 0x63fd, 0x89c8,
-  0x61d2, 0x7f06, 0x70c2, 0x6ee5, 0x7405, 0x6994, 0x72fc, 0x5eca,
-  0x90ce, 0x6717, 0x6d6a, 0x635e, 0x52b3, 0x7262, 0x8001, 0x4f6c,
-  0x59e5, 0x916a, 0x70d9, 0x6d9d, 0x52d2, 0x4e50, 0x96f7, 0x956d,
-  0x857e, 0x78ca, 0x7d2f, 0x5121, 0x5792, 0x64c2, 0x808b, 0x7c7b,
-  0x6cea, 0x68f1, 0x695e, 0x51b7, 0x5398, 0x68a8, 0x7281, 0x9ece,
-  0x7bf1, 0x72f8, 0x79bb, 0x6f13, 0x7406, 0x674e, 0x91cc, 0x9ca4,
-  0x793c, 0x8389, 0x8354, 0x540f, 0x6817, 0x4e3d, 0x5389, 0x52b1,
-  0x783e, 0x5386, 0x5229, 0x5088, 0x4f8b, 0x4fd0,
-  /* 0xc1 */
-  0x7f56, 0x7f59, 0x7f5b, 0x7f5c, 0x7f5d, 0x7f5e, 0x7f60, 0x7f63,
-  0x7f64, 0x7f65, 0x7f66, 0x7f67, 0x7f6b, 0x7f6c, 0x7f6d, 0x7f6f,
-  0x7f70, 0x7f73, 0x7f75, 0x7f76, 0x7f77, 0x7f78, 0x7f7a, 0x7f7b,
-  0x7f7c, 0x7f7d, 0x7f7f, 0x7f80, 0x7f82, 0x7f83, 0x7f84, 0x7f85,
-  0x7f86, 0x7f87, 0x7f88, 0x7f89, 0x7f8b, 0x7f8d, 0x7f8f, 0x7f90,
-  0x7f91, 0x7f92, 0x7f93, 0x7f95, 0x7f96, 0x7f97, 0x7f98, 0x7f99,
-  0x7f9b, 0x7f9c, 0x7fa0, 0x7fa2, 0x7fa3, 0x7fa5, 0x7fa6, 0x7fa8,
-  0x7fa9, 0x7faa, 0x7fab, 0x7fac, 0x7fad, 0x7fae, 0x7fb1, 0x7fb3,
-  0x7fb4, 0x7fb5, 0x7fb6, 0x7fb7, 0x7fba, 0x7fbb, 0x7fbe, 0x7fc0,
-  0x7fc2, 0x7fc3, 0x7fc4, 0x7fc6, 0x7fc7, 0x7fc8, 0x7fc9, 0x7fcb,
-  0x7fcd, 0x7fcf, 0x7fd0, 0x7fd1, 0x7fd2, 0x7fd3, 0x7fd6, 0x7fd7,
-  0x7fd9, 0x7fda, 0x7fdb, 0x7fdc, 0x7fdd, 0x7fde, 0x7fe2, 0x7fe3,
-  0x75e2, 0x7acb, 0x7c92, 0x6ca5, 0x96b6, 0x529b, 0x7483, 0x54e9,
-  0x4fe9, 0x8054, 0x83b2, 0x8fde, 0x9570, 0x5ec9, 0x601c, 0x6d9f,
-  0x5e18, 0x655b, 0x8138, 0x94fe, 0x604b, 0x70bc, 0x7ec3, 0x7cae,
-  0x51c9, 0x6881, 0x7cb1, 0x826f, 0x4e24, 0x8f86, 0x91cf, 0x667e,
-  0x4eae, 0x8c05, 0x64a9, 0x804a, 0x50da, 0x7597, 0x71ce, 0x5be5,
-  0x8fbd, 0x6f66, 0x4e86, 0x6482, 0x9563, 0x5ed6, 0x6599, 0x5217,
-  0x88c2, 0x70c8, 0x52a3, 0x730e, 0x7433, 0x6797, 0x78f7, 0x9716,
-  0x4e34, 0x90bb, 0x9cde, 0x6dcb, 0x51db, 0x8d41, 0x541d, 0x62ce,
-  0x73b2, 0x83f1, 0x96f6, 0x9f84, 0x94c3, 0x4f36, 0x7f9a, 0x51cc,
-  0x7075, 0x9675, 0x5cad, 0x9886, 0x53e6, 0x4ee4, 0x6e9c, 0x7409,
-  0x69b4, 0x786b, 0x998f, 0x7559, 0x5218, 0x7624, 0x6d41, 0x67f3,
-  0x516d, 0x9f99, 0x804b, 0x5499, 0x7b3c, 0x7abf,
-  /* 0xc2 */
-  0x7fe4, 0x7fe7, 0x7fe8, 0x7fea, 0x7feb, 0x7fec, 0x7fed, 0x7fef,
-  0x7ff2, 0x7ff4, 0x7ff5, 0x7ff6, 0x7ff7, 0x7ff8, 0x7ff9, 0x7ffa,
-  0x7ffd, 0x7ffe, 0x7fff, 0x8002, 0x8007, 0x8008, 0x8009, 0x800a,
-  0x800e, 0x800f, 0x8011, 0x8013, 0x801a, 0x801b, 0x801d, 0x801e,
-  0x801f, 0x8021, 0x8023, 0x8024, 0x802b, 0x802c, 0x802d, 0x802e,
-  0x802f, 0x8030, 0x8032, 0x8034, 0x8039, 0x803a, 0x803c, 0x803e,
-  0x8040, 0x8041, 0x8044, 0x8045, 0x8047, 0x8048, 0x8049, 0x804e,
-  0x804f, 0x8050, 0x8051, 0x8053, 0x8055, 0x8056, 0x8057, 0x8059,
-  0x805b, 0x805c, 0x805d, 0x805e, 0x805f, 0x8060, 0x8061, 0x8062,
-  0x8063, 0x8064, 0x8065, 0x8066, 0x8067, 0x8068, 0x806b, 0x806c,
-  0x806d, 0x806e, 0x806f, 0x8070, 0x8072, 0x8073, 0x8074, 0x8075,
-  0x8076, 0x8077, 0x8078, 0x8079, 0x807a, 0x807b, 0x807c, 0x807d,
-  0x9686, 0x5784, 0x62e2, 0x9647, 0x697c, 0x5a04, 0x6402, 0x7bd3,
-  0x6f0f, 0x964b, 0x82a6, 0x5362, 0x9885, 0x5e90, 0x7089, 0x63b3,
-  0x5364, 0x864f, 0x9c81, 0x9e93, 0x788c, 0x9732, 0x8def, 0x8d42,
-  0x9e7f, 0x6f5e, 0x7984, 0x5f55, 0x9646, 0x622e, 0x9a74, 0x5415,
-  0x94dd, 0x4fa3, 0x65c5, 0x5c65, 0x5c61, 0x7f15, 0x8651, 0x6c2f,
-  0x5f8b, 0x7387, 0x6ee4, 0x7eff, 0x5ce6, 0x631b, 0x5b6a, 0x6ee6,
-  0x5375, 0x4e71, 0x63a0, 0x7565, 0x62a1, 0x8f6e, 0x4f26, 0x4ed1,
-  0x6ca6, 0x7eb6, 0x8bba, 0x841d, 0x87ba, 0x7f57, 0x903b, 0x9523,
-  0x7ba9, 0x9aa1, 0x88f8, 0x843d, 0x6d1b, 0x9a86, 0x7edc, 0x5988,
-  0x9ebb, 0x739b, 0x7801, 0x8682, 0x9a6c, 0x9a82, 0x561b, 0x5417,
-  0x57cb, 0x4e70, 0x9ea6, 0x5356, 0x8fc8, 0x8109, 0x7792, 0x9992,
-  0x86ee, 0x6ee1, 0x8513, 0x66fc, 0x6162, 0x6f2b,
-  /* 0xc3 */
-  0x807e, 0x8081, 0x8082, 0x8085, 0x8088, 0x808a, 0x808d, 0x808e,
-  0x808f, 0x8090, 0x8091, 0x8092, 0x8094, 0x8095, 0x8097, 0x8099,
-  0x809e, 0x80a3, 0x80a6, 0x80a7, 0x80a8, 0x80ac, 0x80b0, 0x80b3,
-  0x80b5, 0x80b6, 0x80b8, 0x80b9, 0x80bb, 0x80c5, 0x80c7, 0x80c8,
-  0x80c9, 0x80ca, 0x80cb, 0x80cf, 0x80d0, 0x80d1, 0x80d2, 0x80d3,
-  0x80d4, 0x80d5, 0x80d8, 0x80df, 0x80e0, 0x80e2, 0x80e3, 0x80e6,
-  0x80ee, 0x80f5, 0x80f7, 0x80f9, 0x80fb, 0x80fe, 0x80ff, 0x8100,
-  0x8101, 0x8103, 0x8104, 0x8105, 0x8107, 0x8108, 0x810b, 0x810c,
-  0x8115, 0x8117, 0x8119, 0x811b, 0x811c, 0x811d, 0x811f, 0x8120,
-  0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126, 0x8127, 0x8128,
-  0x8129, 0x812a, 0x812b, 0x812d, 0x812e, 0x8130, 0x8133, 0x8134,
-  0x8135, 0x8137, 0x8139, 0x813a, 0x813b, 0x813c, 0x813d, 0x813f,
-  0x8c29, 0x8292, 0x832b, 0x76f2, 0x6c13, 0x5fd9, 0x83bd, 0x732b,
-  0x8305, 0x951a, 0x6bdb, 0x77db, 0x94c6, 0x536f, 0x8302, 0x5192,
-  0x5e3d, 0x8c8c, 0x8d38, 0x4e48, 0x73ab, 0x679a, 0x6885, 0x9176,
-  0x9709, 0x7164, 0x6ca1, 0x7709, 0x5a92, 0x9541, 0x6bcf, 0x7f8e,
-  0x6627, 0x5bd0, 0x59b9, 0x5a9a, 0x95e8, 0x95f7, 0x4eec, 0x840c,
-  0x8499, 0x6aac, 0x76df, 0x9530, 0x731b, 0x68a6, 0x5b5f, 0x772f,
-  0x919a, 0x9761, 0x7cdc, 0x8ff7, 0x8c1c, 0x5f25, 0x7c73, 0x79d8,
-  0x89c5, 0x6ccc, 0x871c, 0x5bc6, 0x5e42, 0x68c9, 0x7720, 0x7ef5,
-  0x5195, 0x514d, 0x52c9, 0x5a29, 0x7f05, 0x9762, 0x82d7, 0x63cf,
-  0x7784, 0x85d0, 0x79d2, 0x6e3a, 0x5e99, 0x5999, 0x8511, 0x706d,
-  0x6c11, 0x62bf, 0x76bf, 0x654f, 0x60af, 0x95fd, 0x660e, 0x879f,
-  0x9e23, 0x94ed, 0x540d, 0x547d, 0x8c2c, 0x6478,
-  /* 0xc4 */
-  0x8140, 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8147, 0x8149,
-  0x814d, 0x814e, 0x814f, 0x8152, 0x8156, 0x8157, 0x8158, 0x815b,
-  0x815c, 0x815d, 0x815e, 0x815f, 0x8161, 0x8162, 0x8163, 0x8164,
-  0x8166, 0x8168, 0x816a, 0x816b, 0x816c, 0x816f, 0x8172, 0x8173,
-  0x8175, 0x8176, 0x8177, 0x8178, 0x8181, 0x8183, 0x8184, 0x8185,
-  0x8186, 0x8187, 0x8189, 0x818b, 0x818c, 0x818d, 0x818e, 0x8190,
-  0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8199, 0x819a,
-  0x819e, 0x819f, 0x81a0, 0x81a1, 0x81a2, 0x81a4, 0x81a5, 0x81a7,
-  0x81a9, 0x81ab, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1,
-  0x81b2, 0x81b4, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0x81bc,
-  0x81bd, 0x81be, 0x81bf, 0x81c4, 0x81c5, 0x81c7, 0x81c8, 0x81c9,
-  0x81cb, 0x81cd, 0x81ce, 0x81cf, 0x81d0, 0x81d1, 0x81d2, 0x81d3,
-  0x6479, 0x8611, 0x6a21, 0x819c, 0x78e8, 0x6469, 0x9b54, 0x62b9,
-  0x672b, 0x83ab, 0x58a8, 0x9ed8, 0x6cab, 0x6f20, 0x5bde, 0x964c,
-  0x8c0b, 0x725f, 0x67d0, 0x62c7, 0x7261, 0x4ea9, 0x59c6, 0x6bcd,
-  0x5893, 0x66ae, 0x5e55, 0x52df, 0x6155, 0x6728, 0x76ee, 0x7766,
-  0x7267, 0x7a46, 0x62ff, 0x54ea, 0x5450, 0x94a0, 0x90a3, 0x5a1c,
-  0x7eb3, 0x6c16, 0x4e43, 0x5976, 0x8010, 0x5948, 0x5357, 0x7537,
-  0x96be, 0x56ca, 0x6320, 0x8111, 0x607c, 0x95f9, 0x6dd6, 0x5462,
-  0x9981, 0x5185, 0x5ae9, 0x80fd, 0x59ae, 0x9713, 0x502a, 0x6ce5,
-  0x5c3c, 0x62df, 0x4f60, 0x533f, 0x817b, 0x9006, 0x6eba, 0x852b,
-  0x62c8, 0x5e74, 0x78be, 0x64b5, 0x637b, 0x5ff5, 0x5a18, 0x917f,
-  0x9e1f, 0x5c3f, 0x634f, 0x8042, 0x5b7d, 0x556e, 0x954a, 0x954d,
-  0x6d85, 0x60a8, 0x67e0, 0x72de, 0x51dd, 0x5b81,
-  /* 0xc5 */
-  0x81d4, 0x81d5, 0x81d6, 0x81d7, 0x81d8, 0x81d9, 0x81da, 0x81db,
-  0x81dc, 0x81dd, 0x81de, 0x81df, 0x81e0, 0x81e1, 0x81e2, 0x81e4,
-  0x81e5, 0x81e6, 0x81e8, 0x81e9, 0x81eb, 0x81ee, 0x81ef, 0x81f0,
-  0x81f1, 0x81f2, 0x81f5, 0x81f6, 0x81f7, 0x81f8, 0x81f9, 0x81fa,
-  0x81fd, 0x81ff, 0x8203, 0x8207, 0x8208, 0x8209, 0x820a, 0x820b,
-  0x820e, 0x820f, 0x8211, 0x8213, 0x8215, 0x8216, 0x8217, 0x8218,
-  0x8219, 0x821a, 0x821d, 0x8220, 0x8224, 0x8225, 0x8226, 0x8227,
-  0x8229, 0x822e, 0x8232, 0x823a, 0x823c, 0x823d, 0x823f, 0x8240,
-  0x8241, 0x8242, 0x8243, 0x8245, 0x8246, 0x8248, 0x824a, 0x824c,
-  0x824d, 0x824e, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255,
-  0x8256, 0x8257, 0x8259, 0x825b, 0x825c, 0x825d, 0x825e, 0x8260,
-  0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267, 0x8269,
-  0x62e7, 0x6cde, 0x725b, 0x626d, 0x94ae, 0x7ebd, 0x8113, 0x6d53,
-  0x519c, 0x5f04, 0x5974, 0x52aa, 0x6012, 0x5973, 0x6696, 0x8650,
-  0x759f, 0x632a, 0x61e6, 0x7cef, 0x8bfa, 0x54e6, 0x6b27, 0x9e25,
-  0x6bb4, 0x85d5, 0x5455, 0x5076, 0x6ca4, 0x556a, 0x8db4, 0x722c,
-  0x5e15, 0x6015, 0x7436, 0x62cd, 0x6392, 0x724c, 0x5f98, 0x6e43,
-  0x6d3e, 0x6500, 0x6f58, 0x76d8, 0x78d0, 0x76fc, 0x7554, 0x5224,
-  0x53db, 0x4e53, 0x5e9e, 0x65c1, 0x802a, 0x80d6, 0x629b, 0x5486,
-  0x5228, 0x70ae, 0x888d, 0x8dd1, 0x6ce1, 0x5478, 0x80da, 0x57f9,
-  0x88f4, 0x8d54, 0x966a, 0x914d, 0x4f69, 0x6c9b, 0x55b7, 0x76c6,
-  0x7830, 0x62a8, 0x70f9, 0x6f8e, 0x5f6d, 0x84ec, 0x68da, 0x787c,
-  0x7bf7, 0x81a8, 0x670b, 0x9e4f, 0x6367, 0x78b0, 0x576f, 0x7812,
-  0x9739, 0x6279, 0x62ab, 0x5288, 0x7435, 0x6bd7,
-  /* 0xc6 */
-  0x826a, 0x826b, 0x826c, 0x826d, 0x8271, 0x8275, 0x8276, 0x8277,
-  0x8278, 0x827b, 0x827c, 0x8280, 0x8281, 0x8283, 0x8285, 0x8286,
-  0x8287, 0x8289, 0x828c, 0x8290, 0x8293, 0x8294, 0x8295, 0x8296,
-  0x829a, 0x829b, 0x829e, 0x82a0, 0x82a2, 0x82a3, 0x82a7, 0x82b2,
-  0x82b5, 0x82b6, 0x82ba, 0x82bb, 0x82bc, 0x82bf, 0x82c0, 0x82c2,
-  0x82c3, 0x82c5, 0x82c6, 0x82c9, 0x82d0, 0x82d6, 0x82d9, 0x82da,
-  0x82dd, 0x82e2, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82ec, 0x82ed,
-  0x82ee, 0x82f0, 0x82f2, 0x82f3, 0x82f5, 0x82f6, 0x82f8, 0x82fa,
-  0x82fc, 0x82fd, 0x82fe, 0x82ff, 0x8300, 0x830a, 0x830b, 0x830d,
-  0x8310, 0x8312, 0x8313, 0x8316, 0x8318, 0x8319, 0x831d, 0x831e,
-  0x831f, 0x8320, 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, 0x8326,
-  0x8329, 0x832a, 0x832e, 0x8330, 0x8332, 0x8337, 0x833b, 0x833d,
-  0x5564, 0x813e, 0x75b2, 0x76ae, 0x5339, 0x75de, 0x50fb, 0x5c41,
-  0x8b6c, 0x7bc7, 0x504f, 0x7247, 0x9a97, 0x98d8, 0x6f02, 0x74e2,
-  0x7968, 0x6487, 0x77a5, 0x62fc, 0x9891, 0x8d2b, 0x54c1, 0x8058,
-  0x4e52, 0x576a, 0x82f9, 0x840d, 0x5e73, 0x51ed, 0x74f6, 0x8bc4,
-  0x5c4f, 0x5761, 0x6cfc, 0x9887, 0x5a46, 0x7834, 0x9b44, 0x8feb,
-  0x7c95, 0x5256, 0x6251, 0x94fa, 0x4ec6, 0x8386, 0x8461, 0x83e9,
-  0x84b2, 0x57d4, 0x6734, 0x5703, 0x666e, 0x6d66, 0x8c31, 0x66dd,
-  0x7011, 0x671f, 0x6b3a, 0x6816, 0x621a, 0x59bb, 0x4e03, 0x51c4,
-  0x6f06, 0x67d2, 0x6c8f, 0x5176, 0x68cb, 0x5947, 0x6b67, 0x7566,
-  0x5d0e, 0x8110, 0x9f50, 0x65d7, 0x7948, 0x7941, 0x9a91, 0x8d77,
-  0x5c82, 0x4e5e, 0x4f01, 0x542f, 0x5951, 0x780c, 0x5668, 0x6c14,
-  0x8fc4, 0x5f03, 0x6c7d, 0x6ce3, 0x8bab, 0x6390,
-  /* 0xc7 */
-  0x833e, 0x833f, 0x8341, 0x8342, 0x8344, 0x8345, 0x8348, 0x834a,
-  0x834b, 0x834c, 0x834d, 0x834e, 0x8353, 0x8355, 0x8356, 0x8357,
-  0x8358, 0x8359, 0x835d, 0x8362, 0x8370, 0x8371, 0x8372, 0x8373,
-  0x8374, 0x8375, 0x8376, 0x8379, 0x837a, 0x837e, 0x837f, 0x8380,
-  0x8381, 0x8382, 0x8383, 0x8384, 0x8387, 0x8388, 0x838a, 0x838b,
-  0x838c, 0x838d, 0x838f, 0x8390, 0x8391, 0x8394, 0x8395, 0x8396,
-  0x8397, 0x8399, 0x839a, 0x839d, 0x839f, 0x83a1, 0x83a2, 0x83a3,
-  0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83ac, 0x83ad, 0x83ae, 0x83af,
-  0x83b5, 0x83bb, 0x83be, 0x83bf, 0x83c2, 0x83c3, 0x83c4, 0x83c6,
-  0x83c8, 0x83c9, 0x83cb, 0x83cd, 0x83ce, 0x83d0, 0x83d1, 0x83d2,
-  0x83d3, 0x83d5, 0x83d7, 0x83d9, 0x83da, 0x83db, 0x83de, 0x83e2,
-  0x83e3, 0x83e4, 0x83e6, 0x83e7, 0x83e8, 0x83eb, 0x83ec, 0x83ed,
-  0x6070, 0x6d3d, 0x7275, 0x6266, 0x948e, 0x94c5, 0x5343, 0x8fc1,
-  0x7b7e, 0x4edf, 0x8c26, 0x4e7e, 0x9ed4, 0x94b1, 0x94b3, 0x524d,
-  0x6f5c, 0x9063, 0x6d45, 0x8c34, 0x5811, 0x5d4c, 0x6b20, 0x6b49,
-  0x67aa, 0x545b, 0x8154, 0x7f8c, 0x5899, 0x8537, 0x5f3a, 0x62a2,
-  0x6a47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77a7, 0x4e54, 0x4fa8,
-  0x5de7, 0x9798, 0x64ac, 0x7fd8, 0x5ced, 0x4fcf, 0x7a8d, 0x5207,
-  0x8304, 0x4e14, 0x602f, 0x7a83, 0x94a6, 0x4fb5, 0x4eb2, 0x79e6,
-  0x7434, 0x52e4, 0x82b9, 0x64d2, 0x79bd, 0x5bdd, 0x6c81, 0x9752,
-  0x8f7b, 0x6c22, 0x503e, 0x537f, 0x6e05, 0x64ce, 0x6674, 0x6c30,
-  0x60c5, 0x9877, 0x8bf7, 0x5e86, 0x743c, 0x7a77, 0x79cb, 0x4e18,
-  0x90b1, 0x7403, 0x6c42, 0x56da, 0x914b, 0x6cc5, 0x8d8b, 0x533a,
-  0x86c6, 0x66f2, 0x8eaf, 0x5c48, 0x9a71, 0x6e20,
-  /* 0xc8 */
-  0x83ee, 0x83ef, 0x83f3, 0x83f4, 0x83f5, 0x83f6, 0x83f7, 0x83fa,
-  0x83fb, 0x83fc, 0x83fe, 0x83ff, 0x8400, 0x8402, 0x8405, 0x8407,
-  0x8408, 0x8409, 0x840a, 0x8410, 0x8412, 0x8413, 0x8414, 0x8415,
-  0x8416, 0x8417, 0x8419, 0x841a, 0x841b, 0x841e, 0x841f, 0x8420,
-  0x8421, 0x8422, 0x8423, 0x8429, 0x842a, 0x842b, 0x842c, 0x842d,
-  0x842e, 0x842f, 0x8430, 0x8432, 0x8433, 0x8434, 0x8435, 0x8436,
-  0x8437, 0x8439, 0x843a, 0x843b, 0x843e, 0x843f, 0x8440, 0x8441,
-  0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, 0x8449, 0x844a,
-  0x844b, 0x844c, 0x844d, 0x844e, 0x844f, 0x8450, 0x8452, 0x8453,
-  0x8454, 0x8455, 0x8456, 0x8458, 0x845d, 0x845e, 0x845f, 0x8460,
-  0x8462, 0x8464, 0x8465, 0x8466, 0x8467, 0x8468, 0x846a, 0x846e,
-  0x846f, 0x8470, 0x8472, 0x8474, 0x8477, 0x8479, 0x847b, 0x847c,
-  0x53d6, 0x5a36, 0x9f8b, 0x8da3, 0x53bb, 0x5708, 0x98a7, 0x6743,
-  0x919b, 0x6cc9, 0x5168, 0x75ca, 0x62f3, 0x72ac, 0x5238, 0x529d,
-  0x7f3a, 0x7094, 0x7638, 0x5374, 0x9e4a, 0x69b7, 0x786e, 0x96c0,
-  0x88d9, 0x7fa4, 0x7136, 0x71c3, 0x5189, 0x67d3, 0x74e4, 0x58e4,
-  0x6518, 0x56b7, 0x8ba9, 0x9976, 0x6270, 0x7ed5, 0x60f9, 0x70ed,
-  0x58ec, 0x4ec1, 0x4eba, 0x5fcd, 0x97e7, 0x4efb, 0x8ba4, 0x5203,
-  0x598a, 0x7eab, 0x6254, 0x4ecd, 0x65e5, 0x620e, 0x8338, 0x84c9,
-  0x8363, 0x878d, 0x7194, 0x6eb6, 0x5bb9, 0x7ed2, 0x5197, 0x63c9,
-  0x67d4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5b7a, 0x5982, 0x8fb1,
-  0x4e73, 0x6c5d, 0x5165, 0x8925, 0x8f6f, 0x962e, 0x854a, 0x745e,
-  0x9510, 0x95f0, 0x6da6, 0x82e5, 0x5f31, 0x6492, 0x6d12, 0x8428,
-  0x816e, 0x9cc3, 0x585e, 0x8d5b, 0x4e09, 0x53c1,
-  /* 0xc9 */
-  0x847d, 0x847e, 0x847f, 0x8480, 0x8481, 0x8483, 0x8484, 0x8485,
-  0x8486, 0x848a, 0x848d, 0x848f, 0x8490, 0x8491, 0x8492, 0x8493,
-  0x8494, 0x8495, 0x8496, 0x8498, 0x849a, 0x849b, 0x849d, 0x849e,
-  0x849f, 0x84a0, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7,
-  0x84a8, 0x84a9, 0x84aa, 0x84ab, 0x84ac, 0x84ad, 0x84ae, 0x84b0,
-  0x84b1, 0x84b3, 0x84b5, 0x84b6, 0x84b7, 0x84bb, 0x84bc, 0x84be,
-  0x84c0, 0x84c2, 0x84c3, 0x84c5, 0x84c6, 0x84c7, 0x84c8, 0x84cb,
-  0x84cc, 0x84ce, 0x84cf, 0x84d2, 0x84d4, 0x84d5, 0x84d7, 0x84d8,
-  0x84d9, 0x84da, 0x84db, 0x84dc, 0x84de, 0x84e1, 0x84e2, 0x84e4,
-  0x84e7, 0x84e8, 0x84e9, 0x84ea, 0x84eb, 0x84ed, 0x84ee, 0x84ef,
-  0x84f1, 0x84f2, 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7, 0x84f8,
-  0x84f9, 0x84fa, 0x84fb, 0x84fd, 0x84fe, 0x8500, 0x8501, 0x8502,
-  0x4f1e, 0x6563, 0x6851, 0x55d3, 0x4e27, 0x6414, 0x9a9a, 0x626b,
-  0x5ac2, 0x745f, 0x8272, 0x6da9, 0x68ee, 0x50e7, 0x838e, 0x7802,
-  0x6740, 0x5239, 0x6c99, 0x7eb1, 0x50bb, 0x5565, 0x715e, 0x7b5b,
-  0x6652, 0x73ca, 0x82eb, 0x6749, 0x5c71, 0x5220, 0x717d, 0x886b,
-  0x95ea, 0x9655, 0x64c5, 0x8d61, 0x81b3, 0x5584, 0x6c55, 0x6247,
-  0x7f2e, 0x5892, 0x4f24, 0x5546, 0x8d4f, 0x664c, 0x4e0a, 0x5c1a,
-  0x88f3, 0x68a2, 0x634e, 0x7a0d, 0x70e7, 0x828d, 0x52fa, 0x97f6,
-  0x5c11, 0x54e8, 0x90b5, 0x7ecd, 0x5962, 0x8d4a, 0x86c7, 0x820c,
-  0x820d, 0x8d66, 0x6444, 0x5c04, 0x6151, 0x6d89, 0x793e, 0x8bbe,
-  0x7837, 0x7533, 0x547b, 0x4f38, 0x8eab, 0x6df1, 0x5a20, 0x7ec5,
-  0x795e, 0x6c88, 0x5ba1, 0x5a76, 0x751a, 0x80be, 0x614e, 0x6e17,
-  0x58f0, 0x751f, 0x7525, 0x7272, 0x5347, 0x7ef3,
-  /* 0xca */
-  0x8503, 0x8504, 0x8505, 0x8506, 0x8507, 0x8508, 0x8509, 0x850a,
-  0x850b, 0x850d, 0x850e, 0x850f, 0x8510, 0x8512, 0x8514, 0x8515,
-  0x8516, 0x8518, 0x8519, 0x851b, 0x851c, 0x851d, 0x851e, 0x8520,
-  0x8522, 0x8523, 0x8524, 0x8525, 0x8526, 0x8527, 0x8528, 0x8529,
-  0x852a, 0x852d, 0x852e, 0x852f, 0x8530, 0x8531, 0x8532, 0x8533,
-  0x8534, 0x8535, 0x8536, 0x853e, 0x853f, 0x8540, 0x8541, 0x8542,
-  0x8544, 0x8545, 0x8546, 0x8547, 0x854b, 0x854c, 0x854d, 0x854e,
-  0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0x8557,
-  0x8558, 0x855a, 0x855b, 0x855c, 0x855d, 0x855f, 0x8560, 0x8561,
-  0x8562, 0x8563, 0x8565, 0x8566, 0x8567, 0x8569, 0x856a, 0x856b,
-  0x856c, 0x856d, 0x856e, 0x856f, 0x8570, 0x8571, 0x8573, 0x8575,
-  0x8576, 0x8577, 0x8578, 0x857c, 0x857d, 0x857f, 0x8580, 0x8581,
-  0x7701, 0x76db, 0x5269, 0x80dc, 0x5723, 0x5e08, 0x5931, 0x72ee,
-  0x65bd, 0x6e7f, 0x8bd7, 0x5c38, 0x8671, 0x5341, 0x77f3, 0x62fe,
-  0x65f6, 0x4ec0, 0x98df, 0x8680, 0x5b9e, 0x8bc6, 0x53f2, 0x77e2,
-  0x4f7f, 0x5c4e, 0x9a76, 0x59cb, 0x5f0f, 0x793a, 0x58eb, 0x4e16,
-  0x67ff, 0x4e8b, 0x62ed, 0x8a93, 0x901d, 0x52bf, 0x662f, 0x55dc,
-  0x566c, 0x9002, 0x4ed5, 0x4f8d, 0x91ca, 0x9970, 0x6c0f, 0x5e02,
-  0x6043, 0x5ba4, 0x89c6, 0x8bd5, 0x6536, 0x624b, 0x9996, 0x5b88,
-  0x5bff, 0x6388, 0x552e, 0x53d7, 0x7626, 0x517d, 0x852c, 0x67a2,
-  0x68b3, 0x6b8a, 0x6292, 0x8f93, 0x53d4, 0x8212, 0x6dd1, 0x758f,
-  0x4e66, 0x8d4e, 0x5b70, 0x719f, 0x85af, 0x6691, 0x66d9, 0x7f72,
-  0x8700, 0x9ecd, 0x9f20, 0x5c5e, 0x672f, 0x8ff0, 0x6811, 0x675f,
-  0x620d, 0x7ad6, 0x5885, 0x5eb6, 0x6570, 0x6f31,
-  /* 0xcb */
-  0x8582, 0x8583, 0x8586, 0x8588, 0x8589, 0x858a, 0x858b, 0x858c,
-  0x858d, 0x858e, 0x8590, 0x8591, 0x8592, 0x8593, 0x8594, 0x8595,
-  0x8596, 0x8597, 0x8598, 0x8599, 0x859a, 0x859d, 0x859e, 0x859f,
-  0x85a0, 0x85a1, 0x85a2, 0x85a3, 0x85a5, 0x85a6, 0x85a7, 0x85a9,
-  0x85ab, 0x85ac, 0x85ad, 0x85b1, 0x85b2, 0x85b3, 0x85b4, 0x85b5,
-  0x85b6, 0x85b8, 0x85ba, 0x85bb, 0x85bc, 0x85bd, 0x85be, 0x85bf,
-  0x85c0, 0x85c2, 0x85c3, 0x85c4, 0x85c5, 0x85c6, 0x85c7, 0x85c8,
-  0x85ca, 0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85d1, 0x85d2, 0x85d4,
-  0x85d6, 0x85d7, 0x85d8, 0x85d9, 0x85da, 0x85db, 0x85dd, 0x85de,
-  0x85df, 0x85e0, 0x85e1, 0x85e2, 0x85e3, 0x85e5, 0x85e6, 0x85e7,
-  0x85e8, 0x85ea, 0x85eb, 0x85ec, 0x85ed, 0x85ee, 0x85ef, 0x85f0,
-  0x85f1, 0x85f2, 0x85f3, 0x85f4, 0x85f5, 0x85f6, 0x85f7, 0x85f8,
-  0x6055, 0x5237, 0x800d, 0x6454, 0x8870, 0x7529, 0x5e05, 0x6813,
-  0x62f4, 0x971c, 0x53cc, 0x723d, 0x8c01, 0x6c34, 0x7761, 0x7a0e,
-  0x542e, 0x77ac, 0x987a, 0x821c, 0x8bf4, 0x7855, 0x6714, 0x70c1,
-  0x65af, 0x6495, 0x5636, 0x601d, 0x79c1, 0x53f8, 0x4e1d, 0x6b7b,
-  0x8086, 0x5bfa, 0x55e3, 0x56db, 0x4f3a, 0x4f3c, 0x9972, 0x5df3,
-  0x677e, 0x8038, 0x6002, 0x9882, 0x9001, 0x5b8b, 0x8bbc, 0x8bf5,
-  0x641c, 0x8258, 0x64de, 0x55fd, 0x82cf, 0x9165, 0x4fd7, 0x7d20,
-  0x901f, 0x7c9f, 0x50f3, 0x5851, 0x6eaf, 0x5bbf, 0x8bc9, 0x8083,
-  0x9178, 0x849c, 0x7b97, 0x867d, 0x968b, 0x968f, 0x7ee5, 0x9ad3,
-  0x788e, 0x5c81, 0x7a57, 0x9042, 0x96a7, 0x795f, 0x5b59, 0x635f,
-  0x7b0b, 0x84d1, 0x68ad, 0x5506, 0x7f29, 0x7410, 0x7d22, 0x9501,
-  0x6240, 0x584c, 0x4ed6, 0x5b83, 0x5979, 0x5854,
-  /* 0xcc */
-  0x85f9, 0x85fa, 0x85fc, 0x85fd, 0x85fe, 0x8600, 0x8601, 0x8602,
-  0x8603, 0x8604, 0x8606, 0x8607, 0x8608, 0x8609, 0x860a, 0x860b,
-  0x860c, 0x860d, 0x860e, 0x860f, 0x8610, 0x8612, 0x8613, 0x8614,
-  0x8615, 0x8617, 0x8618, 0x8619, 0x861a, 0x861b, 0x861c, 0x861d,
-  0x861e, 0x861f, 0x8620, 0x8621, 0x8622, 0x8623, 0x8624, 0x8625,
-  0x8626, 0x8628, 0x862a, 0x862b, 0x862c, 0x862d, 0x862e, 0x862f,
-  0x8630, 0x8631, 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637,
-  0x8639, 0x863a, 0x863b, 0x863d, 0x863e, 0x863f, 0x8640, 0x8641,
-  0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649,
-  0x864a, 0x864b, 0x864c, 0x8652, 0x8653, 0x8655, 0x8656, 0x8657,
-  0x8658, 0x8659, 0x865b, 0x865c, 0x865d, 0x865f, 0x8660, 0x8661,
-  0x8663, 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866a,
-  0x736d, 0x631e, 0x8e4b, 0x8e0f, 0x80ce, 0x82d4, 0x62ac, 0x53f0,
-  0x6cf0, 0x915e, 0x592a, 0x6001, 0x6c70, 0x574d, 0x644a, 0x8d2a,
-  0x762b, 0x6ee9, 0x575b, 0x6a80, 0x75f0, 0x6f6d, 0x8c2d, 0x8c08,
-  0x5766, 0x6bef, 0x8892, 0x78b3, 0x63a2, 0x53f9, 0x70ad, 0x6c64,
-  0x5858, 0x642a, 0x5802, 0x68e0, 0x819b, 0x5510, 0x7cd6, 0x5018,
-  0x8eba, 0x6dcc, 0x8d9f, 0x70eb, 0x638f, 0x6d9b, 0x6ed4, 0x7ee6,
-  0x8404, 0x6843, 0x9003, 0x6dd8, 0x9676, 0x8ba8, 0x5957, 0x7279,
-  0x85e4, 0x817e, 0x75bc, 0x8a8a, 0x68af, 0x5254, 0x8e22, 0x9511,
-  0x63d0, 0x9898, 0x8e44, 0x557c, 0x4f53, 0x66ff, 0x568f, 0x60d5,
-  0x6d95, 0x5243, 0x5c49, 0x5929, 0x6dfb, 0x586b, 0x7530, 0x751c,
-  0x606c, 0x8214, 0x8146, 0x6311, 0x6761, 0x8fe2, 0x773a, 0x8df3,
-  0x8d34, 0x94c1, 0x5e16, 0x5385, 0x542c, 0x70c3,
-  /* 0xcd */
-  0x866d, 0x866f, 0x8670, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676,
-  0x8677, 0x8678, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, 0x8688,
-  0x8689, 0x868e, 0x868f, 0x8690, 0x8691, 0x8692, 0x8694, 0x8696,
-  0x8697, 0x8698, 0x8699, 0x869a, 0x869b, 0x869e, 0x869f, 0x86a0,
-  0x86a1, 0x86a2, 0x86a5, 0x86a6, 0x86ab, 0x86ad, 0x86ae, 0x86b2,
-  0x86b3, 0x86b7, 0x86b8, 0x86b9, 0x86bb, 0x86bc, 0x86bd, 0x86be,
-  0x86bf, 0x86c1, 0x86c2, 0x86c3, 0x86c5, 0x86c8, 0x86cc, 0x86cd,
-  0x86d2, 0x86d3, 0x86d5, 0x86d6, 0x86d7, 0x86da, 0x86dc, 0x86dd,
-  0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e5, 0x86e6, 0x86e7, 0x86e8,
-  0x86ea, 0x86eb, 0x86ec, 0x86ef, 0x86f5, 0x86f6, 0x86f7, 0x86fa,
-  0x86fb, 0x86fc, 0x86fd, 0x86ff, 0x8701, 0x8704, 0x8705, 0x8706,
-  0x870b, 0x870c, 0x870e, 0x870f, 0x8710, 0x8711, 0x8714, 0x8716,
-  0x6c40, 0x5ef7, 0x505c, 0x4ead, 0x5ead, 0x633a, 0x8247, 0x901a,
-  0x6850, 0x916e, 0x77b3, 0x540c, 0x94dc, 0x5f64, 0x7ae5, 0x6876,
-  0x6345, 0x7b52, 0x7edf, 0x75db, 0x5077, 0x6295, 0x5934, 0x900f,
-  0x51f8, 0x79c3, 0x7a81, 0x56fe, 0x5f92, 0x9014, 0x6d82, 0x5c60,
-  0x571f, 0x5410, 0x5154, 0x6e4d, 0x56e2, 0x63a8, 0x9893, 0x817f,
-  0x8715, 0x892a, 0x9000, 0x541e, 0x5c6f, 0x81c0, 0x62d6, 0x6258,
-  0x8131, 0x9e35, 0x9640, 0x9a6e, 0x9a7c, 0x692d, 0x59a5, 0x62d3,
-  0x553e, 0x6316, 0x54c7, 0x86d9, 0x6d3c, 0x5a03, 0x74e6, 0x889c,
-  0x6b6a, 0x5916, 0x8c4c, 0x5f2f, 0x6e7e, 0x73a9, 0x987d, 0x4e38,
-  0x70f7, 0x5b8c, 0x7897, 0x633d, 0x665a, 0x7696, 0x60cb, 0x5b9b,
-  0x5a49, 0x4e07, 0x8155, 0x6c6a, 0x738b, 0x4ea1, 0x6789, 0x7f51,
-  0x5f80, 0x65fa, 0x671b, 0x5fd8, 0x5984, 0x5a01,
-  /* 0xce */
-  0x8719, 0x871b, 0x871d, 0x871f, 0x8720, 0x8724, 0x8726, 0x8727,
-  0x8728, 0x872a, 0x872b, 0x872c, 0x872d, 0x872f, 0x8730, 0x8732,
-  0x8733, 0x8735, 0x8736, 0x8738, 0x8739, 0x873a, 0x873c, 0x873d,
-  0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x874a,
-  0x874b, 0x874d, 0x874f, 0x8750, 0x8751, 0x8752, 0x8754, 0x8755,
-  0x8756, 0x8758, 0x875a, 0x875b, 0x875c, 0x875d, 0x875e, 0x875f,
-  0x8761, 0x8762, 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b,
-  0x876c, 0x876d, 0x876f, 0x8771, 0x8772, 0x8773, 0x8775, 0x8777,
-  0x8778, 0x8779, 0x877a, 0x877f, 0x8780, 0x8781, 0x8784, 0x8786,
-  0x8787, 0x8789, 0x878a, 0x878c, 0x878e, 0x878f, 0x8790, 0x8791,
-  0x8792, 0x8794, 0x8795, 0x8796, 0x8798, 0x8799, 0x879a, 0x879b,
-  0x879c, 0x879d, 0x879e, 0x87a0, 0x87a1, 0x87a2, 0x87a3, 0x87a4,
-  0x5dcd, 0x5fae, 0x5371, 0x97e6, 0x8fdd, 0x6845, 0x56f4, 0x552f,
-  0x60df, 0x4e3a, 0x6f4d, 0x7ef4, 0x82c7, 0x840e, 0x59d4, 0x4f1f,
-  0x4f2a, 0x5c3e, 0x7eac, 0x672a, 0x851a, 0x5473, 0x754f, 0x80c3,
-  0x5582, 0x9b4f, 0x4f4d, 0x6e2d, 0x8c13, 0x5c09, 0x6170, 0x536b,
-  0x761f, 0x6e29, 0x868a, 0x6587, 0x95fb, 0x7eb9, 0x543b, 0x7a33,
-  0x7d0a, 0x95ee, 0x55e1, 0x7fc1, 0x74ee, 0x631d, 0x8717, 0x6da1,
-  0x7a9d, 0x6211, 0x65a1, 0x5367, 0x63e1, 0x6c83, 0x5deb, 0x545c,
-  0x94a8, 0x4e4c, 0x6c61, 0x8bec, 0x5c4b, 0x65e0, 0x829c, 0x68a7,
-  0x543e, 0x5434, 0x6bcb, 0x6b66, 0x4e94, 0x6342, 0x5348, 0x821e,
-  0x4f0d, 0x4fae, 0x575e, 0x620a, 0x96fe, 0x6664, 0x7269, 0x52ff,
-  0x52a1, 0x609f, 0x8bef, 0x6614, 0x7199, 0x6790, 0x897f, 0x7852,
-  0x77fd, 0x6670, 0x563b, 0x5438, 0x9521, 0x727a,
-  /* 0xcf */
-  0x87a5, 0x87a6, 0x87a7, 0x87a9, 0x87aa, 0x87ae, 0x87b0, 0x87b1,
-  0x87b2, 0x87b4, 0x87b6, 0x87b7, 0x87b8, 0x87b9, 0x87bb, 0x87bc,
-  0x87be, 0x87bf, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c7,
-  0x87c8, 0x87c9, 0x87cc, 0x87cd, 0x87ce, 0x87cf, 0x87d0, 0x87d4,
-  0x87d5, 0x87d6, 0x87d7, 0x87d8, 0x87d9, 0x87da, 0x87dc, 0x87dd,
-  0x87de, 0x87df, 0x87e1, 0x87e2, 0x87e3, 0x87e4, 0x87e6, 0x87e7,
-  0x87e8, 0x87e9, 0x87eb, 0x87ec, 0x87ed, 0x87ef, 0x87f0, 0x87f1,
-  0x87f2, 0x87f3, 0x87f4, 0x87f5, 0x87f6, 0x87f7, 0x87f8, 0x87fa,
-  0x87fb, 0x87fc, 0x87fd, 0x87ff, 0x8800, 0x8801, 0x8802, 0x8804,
-  0x8805, 0x8806, 0x8807, 0x8808, 0x8809, 0x880b, 0x880c, 0x880d,
-  0x880e, 0x880f, 0x8810, 0x8811, 0x8812, 0x8814, 0x8817, 0x8818,
-  0x8819, 0x881a, 0x881c, 0x881d, 0x881e, 0x881f, 0x8820, 0x8823,
-  0x7a00, 0x606f, 0x5e0c, 0x6089, 0x819d, 0x5915, 0x60dc, 0x7184,
-  0x70ef, 0x6eaa, 0x6c50, 0x7280, 0x6a84, 0x88ad, 0x5e2d, 0x4e60,
-  0x5ab3, 0x559c, 0x94e3, 0x6d17, 0x7cfb, 0x9699, 0x620f, 0x7ec6,
-  0x778e, 0x867e, 0x5323, 0x971e, 0x8f96, 0x6687, 0x5ce1, 0x4fa0,
-  0x72ed, 0x4e0b, 0x53a6, 0x590f, 0x5413, 0x6380, 0x9528, 0x5148,
-  0x4ed9, 0x9c9c, 0x7ea4, 0x54b8, 0x8d24, 0x8854, 0x8237, 0x95f2,
-  0x6d8e, 0x5f26, 0x5acc, 0x663e, 0x9669, 0x73b0, 0x732e, 0x53bf,
-  0x817a, 0x9985, 0x7fa1, 0x5baa, 0x9677, 0x9650, 0x7ebf, 0x76f8,
-  0x53a2, 0x9576, 0x9999, 0x7bb1, 0x8944, 0x6e58, 0x4e61, 0x7fd4,
-  0x7965, 0x8be6, 0x60f3, 0x54cd, 0x4eab, 0x9879, 0x5df7, 0x6a61,
-  0x50cf, 0x5411, 0x8c61, 0x8427, 0x785d, 0x9704, 0x524a, 0x54ee,
-  0x56a3, 0x9500, 0x6d88, 0x5bb5, 0x6dc6, 0x6653,
-  /* 0xd0 */
-  0x8824, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, 0x882a, 0x882b,
-  0x882c, 0x882d, 0x882e, 0x882f, 0x8830, 0x8831, 0x8833, 0x8834,
-  0x8835, 0x8836, 0x8837, 0x8838, 0x883a, 0x883b, 0x883d, 0x883e,
-  0x883f, 0x8841, 0x8842, 0x8843, 0x8846, 0x8847, 0x8848, 0x8849,
-  0x884a, 0x884b, 0x884e, 0x884f, 0x8850, 0x8851, 0x8852, 0x8853,
-  0x8855, 0x8856, 0x8858, 0x885a, 0x885b, 0x885c, 0x885d, 0x885e,
-  0x885f, 0x8860, 0x8866, 0x8867, 0x886a, 0x886d, 0x886f, 0x8871,
-  0x8873, 0x8874, 0x8875, 0x8876, 0x8878, 0x8879, 0x887a, 0x887b,
-  0x887c, 0x8880, 0x8883, 0x8886, 0x8887, 0x8889, 0x888a, 0x888c,
-  0x888e, 0x888f, 0x8890, 0x8891, 0x8893, 0x8894, 0x8895, 0x8897,
-  0x8898, 0x8899, 0x889a, 0x889b, 0x889d, 0x889e, 0x889f, 0x88a0,
-  0x88a1, 0x88a3, 0x88a5, 0x88a6, 0x88a7, 0x88a8, 0x88a9, 0x88aa,
-  0x5c0f, 0x5b5d, 0x6821, 0x8096, 0x5578, 0x7b11, 0x6548, 0x6954,
-  0x4e9b, 0x6b47, 0x874e, 0x978b, 0x534f, 0x631f, 0x643a, 0x90aa,
-  0x659c, 0x80c1, 0x8c10, 0x5199, 0x68b0, 0x5378, 0x87f9, 0x61c8,
-  0x6cc4, 0x6cfb, 0x8c22, 0x5c51, 0x85aa, 0x82af, 0x950c, 0x6b23,
-  0x8f9b, 0x65b0, 0x5ffb, 0x5fc3, 0x4fe1, 0x8845, 0x661f, 0x8165,
-  0x7329, 0x60fa, 0x5174, 0x5211, 0x578b, 0x5f62, 0x90a2, 0x884c,
-  0x9192, 0x5e78, 0x674f, 0x6027, 0x59d3, 0x5144, 0x51f6, 0x80f8,
-  0x5308, 0x6c79, 0x96c4, 0x718a, 0x4f11, 0x4fee, 0x7f9e, 0x673d,
-  0x55c5, 0x9508, 0x79c0, 0x8896, 0x7ee3, 0x589f, 0x620c, 0x9700,
-  0x865a, 0x5618, 0x987b, 0x5f90, 0x8bb8, 0x84c4, 0x9157, 0x53d9,
-  0x65ed, 0x5e8f, 0x755c, 0x6064, 0x7d6e, 0x5a7f, 0x7eea, 0x7eed,
-  0x8f69, 0x55a7, 0x5ba3, 0x60ac, 0x65cb, 0x7384,
-  /* 0xd1 */
-  0x88ac, 0x88ae, 0x88af, 0x88b0, 0x88b2, 0x88b3, 0x88b4, 0x88b5,
-  0x88b6, 0x88b8, 0x88b9, 0x88ba, 0x88bb, 0x88bd, 0x88be, 0x88bf,
-  0x88c0, 0x88c3, 0x88c4, 0x88c7, 0x88c8, 0x88ca, 0x88cb, 0x88cc,
-  0x88cd, 0x88cf, 0x88d0, 0x88d1, 0x88d3, 0x88d6, 0x88d7, 0x88da,
-  0x88db, 0x88dc, 0x88dd, 0x88de, 0x88e0, 0x88e1, 0x88e6, 0x88e7,
-  0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f2,
-  0x88f5, 0x88f6, 0x88f7, 0x88fa, 0x88fb, 0x88fd, 0x88ff, 0x8900,
-  0x8901, 0x8903, 0x8904, 0x8905, 0x8906, 0x8907, 0x8908, 0x8909,
-  0x890b, 0x890c, 0x890d, 0x890e, 0x890f, 0x8911, 0x8914, 0x8915,
-  0x8916, 0x8917, 0x8918, 0x891c, 0x891d, 0x891e, 0x891f, 0x8920,
-  0x8922, 0x8923, 0x8924, 0x8926, 0x8927, 0x8928, 0x8929, 0x892c,
-  0x892d, 0x892e, 0x892f, 0x8931, 0x8932, 0x8933, 0x8935, 0x8937,
-  0x9009, 0x7663, 0x7729, 0x7eda, 0x9774, 0x859b, 0x5b66, 0x7a74,
-  0x96ea, 0x8840, 0x52cb, 0x718f, 0x5faa, 0x65ec, 0x8be2, 0x5bfb,
-  0x9a6f, 0x5de1, 0x6b89, 0x6c5b, 0x8bad, 0x8baf, 0x900a, 0x8fc5,
-  0x538b, 0x62bc, 0x9e26, 0x9e2d, 0x5440, 0x4e2b, 0x82bd, 0x7259,
-  0x869c, 0x5d16, 0x8859, 0x6daf, 0x96c5, 0x54d1, 0x4e9a, 0x8bb6,
-  0x7109, 0x54bd, 0x9609, 0x70df, 0x6df9, 0x76d0, 0x4e25, 0x7814,
-  0x8712, 0x5ca9, 0x5ef6, 0x8a00, 0x989c, 0x960e, 0x708e, 0x6cbf,
-  0x5944, 0x63a9, 0x773c, 0x884d, 0x6f14, 0x8273, 0x5830, 0x71d5,
-  0x538c, 0x781a, 0x96c1, 0x5501, 0x5f66, 0x7130, 0x5bb4, 0x8c1a,
-  0x9a8c, 0x6b83, 0x592e, 0x9e2f, 0x79e7, 0x6768, 0x626c, 0x4f6f,
-  0x75a1, 0x7f8a, 0x6d0b, 0x9633, 0x6c27, 0x4ef0, 0x75d2, 0x517b,
-  0x6837, 0x6f3e, 0x9080, 0x8170, 0x5996, 0x7476,
-  /* 0xd2 */
-  0x8938, 0x8939, 0x893a, 0x893b, 0x893c, 0x893d, 0x893e, 0x893f,
-  0x8940, 0x8942, 0x8943, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949,
-  0x894a, 0x894b, 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951,
-  0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959,
-  0x895a, 0x895b, 0x895c, 0x895d, 0x8960, 0x8961, 0x8962, 0x8963,
-  0x8964, 0x8965, 0x8967, 0x8968, 0x8969, 0x896a, 0x896b, 0x896c,
-  0x896d, 0x896e, 0x896f, 0x8970, 0x8971, 0x8972, 0x8973, 0x8974,
-  0x8975, 0x8976, 0x8977, 0x8978, 0x8979, 0x897a, 0x897c, 0x897d,
-  0x897e, 0x8980, 0x8982, 0x8984, 0x8985, 0x8987, 0x8988, 0x8989,
-  0x898a, 0x898b, 0x898c, 0x898d, 0x898e, 0x898f, 0x8990, 0x8991,
-  0x8992, 0x8993, 0x8994, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999,
-  0x899a, 0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1,
-  0x6447, 0x5c27, 0x9065, 0x7a91, 0x8c23, 0x59da, 0x54ac, 0x8200,
-  0x836f, 0x8981, 0x8000, 0x6930, 0x564e, 0x8036, 0x7237, 0x91ce,
-  0x51b6, 0x4e5f, 0x9875, 0x6396, 0x4e1a, 0x53f6, 0x66f3, 0x814b,
-  0x591c, 0x6db2, 0x4e00, 0x58f9, 0x533b, 0x63d6, 0x94f1, 0x4f9d,
-  0x4f0a, 0x8863, 0x9890, 0x5937, 0x9057, 0x79fb, 0x4eea, 0x80f0,
-  0x7591, 0x6c82, 0x5b9c, 0x59e8, 0x5f5d, 0x6905, 0x8681, 0x501a,
-  0x5df2, 0x4e59, 0x77e3, 0x4ee5, 0x827a, 0x6291, 0x6613, 0x9091,
-  0x5c79, 0x4ebf, 0x5f79, 0x81c6, 0x9038, 0x8084, 0x75ab, 0x4ea6,
-  0x88d4, 0x610f, 0x6bc5, 0x5fc6, 0x4e49, 0x76ca, 0x6ea2, 0x8be3,
-  0x8bae, 0x8c0a, 0x8bd1, 0x5f02, 0x7ffc, 0x7fcc, 0x7ece, 0x8335,
-  0x836b, 0x56e0, 0x6bb7, 0x97f3, 0x9634, 0x59fb, 0x541f, 0x94f6,
-  0x6deb, 0x5bc5, 0x996e, 0x5c39, 0x5f15, 0x9690,
-  /* 0xd3 */
-  0x89a2, 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7, 0x89a8, 0x89a9,
-  0x89aa, 0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0, 0x89b1,
-  0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9,
-  0x89ba, 0x89bb, 0x89bc, 0x89bd, 0x89be, 0x89bf, 0x89c0, 0x89c3,
-  0x89cd, 0x89d3, 0x89d4, 0x89d5, 0x89d7, 0x89d8, 0x89d9, 0x89db,
-  0x89dd, 0x89df, 0x89e0, 0x89e1, 0x89e2, 0x89e4, 0x89e7, 0x89e8,
-  0x89e9, 0x89ea, 0x89ec, 0x89ed, 0x89ee, 0x89f0, 0x89f1, 0x89f2,
-  0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9, 0x89fa, 0x89fb,
-  0x89fc, 0x89fd, 0x89fe, 0x89ff, 0x8a01, 0x8a02, 0x8a03, 0x8a04,
-  0x8a05, 0x8a06, 0x8a08, 0x8a09, 0x8a0a, 0x8a0b, 0x8a0c, 0x8a0d,
-  0x8a0e, 0x8a0f, 0x8a10, 0x8a11, 0x8a12, 0x8a13, 0x8a14, 0x8a15,
-  0x8a16, 0x8a17, 0x8a18, 0x8a19, 0x8a1a, 0x8a1b, 0x8a1c, 0x8a1d,
-  0x5370, 0x82f1, 0x6a31, 0x5a74, 0x9e70, 0x5e94, 0x7f28, 0x83b9,
-  0x8424, 0x8425, 0x8367, 0x8747, 0x8fce, 0x8d62, 0x76c8, 0x5f71,
-  0x9896, 0x786c, 0x6620, 0x54df, 0x62e5, 0x4f63, 0x81c3, 0x75c8,
-  0x5eb8, 0x96cd, 0x8e0a, 0x86f9, 0x548f, 0x6cf3, 0x6d8c, 0x6c38,
-  0x607f, 0x52c7, 0x7528, 0x5e7d, 0x4f18, 0x60a0, 0x5fe7, 0x5c24,
-  0x7531, 0x90ae, 0x94c0, 0x72b9, 0x6cb9, 0x6e38, 0x9149, 0x6709,
-  0x53cb, 0x53f3, 0x4f51, 0x91c9, 0x8bf1, 0x53c8, 0x5e7c, 0x8fc2,
-  0x6de4, 0x4e8e, 0x76c2, 0x6986, 0x865e, 0x611a, 0x8206, 0x4f59,
-  0x4fde, 0x903e, 0x9c7c, 0x6109, 0x6e1d, 0x6e14, 0x9685, 0x4e88,
-  0x5a31, 0x96e8, 0x4e0e, 0x5c7f, 0x79b9, 0x5b87, 0x8bed, 0x7fbd,
-  0x7389, 0x57df, 0x828b, 0x90c1, 0x5401, 0x9047, 0x55bb, 0x5cea,
-  0x5fa1, 0x6108, 0x6b32, 0x72f1, 0x80b2, 0x8a89,
-  /* 0xd4 */
-  0x8a1e, 0x8a1f, 0x8a20, 0x8a21, 0x8a22, 0x8a23, 0x8a24, 0x8a25,
-  0x8a26, 0x8a27, 0x8a28, 0x8a29, 0x8a2a, 0x8a2b, 0x8a2c, 0x8a2d,
-  0x8a2e, 0x8a2f, 0x8a30, 0x8a31, 0x8a32, 0x8a33, 0x8a34, 0x8a35,
-  0x8a36, 0x8a37, 0x8a38, 0x8a39, 0x8a3a, 0x8a3b, 0x8a3c, 0x8a3d,
-  0x8a3f, 0x8a40, 0x8a41, 0x8a42, 0x8a43, 0x8a44, 0x8a45, 0x8a46,
-  0x8a47, 0x8a49, 0x8a4a, 0x8a4b, 0x8a4c, 0x8a4d, 0x8a4e, 0x8a4f,
-  0x8a50, 0x8a51, 0x8a52, 0x8a53, 0x8a54, 0x8a55, 0x8a56, 0x8a57,
-  0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f,
-  0x8a60, 0x8a61, 0x8a62, 0x8a63, 0x8a64, 0x8a65, 0x8a66, 0x8a67,
-  0x8a68, 0x8a69, 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f,
-  0x8a70, 0x8a71, 0x8a72, 0x8a73, 0x8a74, 0x8a75, 0x8a76, 0x8a77,
-  0x8a78, 0x8a7a, 0x8a7b, 0x8a7c, 0x8a7d, 0x8a7e, 0x8a7f, 0x8a80,
-  0x6d74, 0x5bd3, 0x88d5, 0x9884, 0x8c6b, 0x9a6d, 0x9e33, 0x6e0a,
-  0x51a4, 0x5143, 0x57a3, 0x8881, 0x539f, 0x63f4, 0x8f95, 0x56ed,
-  0x5458, 0x5706, 0x733f, 0x6e90, 0x7f18, 0x8fdc, 0x82d1, 0x613f,
-  0x6028, 0x9662, 0x66f0, 0x7ea6, 0x8d8a, 0x8dc3, 0x94a5, 0x5cb3,
-  0x7ca4, 0x6708, 0x60a6, 0x9605, 0x8018, 0x4e91, 0x90e7, 0x5300,
-  0x9668, 0x5141, 0x8fd0, 0x8574, 0x915d, 0x6655, 0x97f5, 0x5b55,
-  0x531d, 0x7838, 0x6742, 0x683d, 0x54c9, 0x707e, 0x5bb0, 0x8f7d,
-  0x518d, 0x5728, 0x54b1, 0x6512, 0x6682, 0x8d5e, 0x8d43, 0x810f,
-  0x846c, 0x906d, 0x7cdf, 0x51ff, 0x85fb, 0x67a3, 0x65e9, 0x6fa1,
-  0x86a4, 0x8e81, 0x566a, 0x9020, 0x7682, 0x7076, 0x71e5, 0x8d23,
-  0x62e9, 0x5219, 0x6cfd, 0x8d3c, 0x600e, 0x589e, 0x618e, 0x66fe,
-  0x8d60, 0x624e, 0x55b3, 0x6e23, 0x672d, 0x8f67,
-  /* 0xd5 */
-  0x8a81, 0x8a82, 0x8a83, 0x8a84, 0x8a85, 0x8a86, 0x8a87, 0x8a88,
-  0x8a8b, 0x8a8c, 0x8a8d, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a92,
-  0x8a94, 0x8a95, 0x8a96, 0x8a97, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b,
-  0x8a9c, 0x8a9d, 0x8a9e, 0x8a9f, 0x8aa0, 0x8aa1, 0x8aa2, 0x8aa3,
-  0x8aa4, 0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab,
-  0x8aac, 0x8aad, 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3,
-  0x8ab4, 0x8ab5, 0x8ab6, 0x8ab7, 0x8ab8, 0x8ab9, 0x8aba, 0x8abb,
-  0x8abc, 0x8abd, 0x8abe, 0x8abf, 0x8ac0, 0x8ac1, 0x8ac2, 0x8ac3,
-  0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, 0x8aca, 0x8acb,
-  0x8acc, 0x8acd, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad2, 0x8ad3,
-  0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, 0x8ad9, 0x8ada, 0x8adb,
-  0x8adc, 0x8add, 0x8ade, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, 0x8ae3,
-  0x94e1, 0x95f8, 0x7728, 0x6805, 0x69a8, 0x548b, 0x4e4d, 0x70b8,
-  0x8bc8, 0x6458, 0x658b, 0x5b85, 0x7a84, 0x503a, 0x5be8, 0x77bb,
-  0x6be1, 0x8a79, 0x7c98, 0x6cbe, 0x76cf, 0x65a9, 0x8f97, 0x5d2d,
-  0x5c55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7ad9, 0x6e5b, 0x7efd,
-  0x6a1f, 0x7ae0, 0x5f70, 0x6f33, 0x5f20, 0x638c, 0x6da8, 0x6756,
-  0x4e08, 0x5e10, 0x8d26, 0x4ed7, 0x80c0, 0x7634, 0x969c, 0x62db,
-  0x662d, 0x627e, 0x6cbc, 0x8d75, 0x7167, 0x7f69, 0x5146, 0x8087,
-  0x53ec, 0x906e, 0x6298, 0x54f2, 0x86f0, 0x8f99, 0x8005, 0x9517,
-  0x8517, 0x8fd9, 0x6d59, 0x73cd, 0x659f, 0x771f, 0x7504, 0x7827,
-  0x81fb, 0x8d1e, 0x9488, 0x4fa6, 0x6795, 0x75b9, 0x8bca, 0x9707,
-  0x632f, 0x9547, 0x9635, 0x84b8, 0x6323, 0x7741, 0x5f81, 0x72f0,
-  0x4e89, 0x6014, 0x6574, 0x62ef, 0x6b63, 0x653f,
-  /* 0xd6 */
-  0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb,
-  0x8aec, 0x8aed, 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af2, 0x8af3,
-  0x8af4, 0x8af5, 0x8af6, 0x8af7, 0x8af8, 0x8af9, 0x8afa, 0x8afb,
-  0x8afc, 0x8afd, 0x8afe, 0x8aff, 0x8b00, 0x8b01, 0x8b02, 0x8b03,
-  0x8b04, 0x8b05, 0x8b06, 0x8b08, 0x8b09, 0x8b0a, 0x8b0b, 0x8b0c,
-  0x8b0d, 0x8b0e, 0x8b0f, 0x8b10, 0x8b11, 0x8b12, 0x8b13, 0x8b14,
-  0x8b15, 0x8b16, 0x8b17, 0x8b18, 0x8b19, 0x8b1a, 0x8b1b, 0x8b1c,
-  0x8b1d, 0x8b1e, 0x8b1f, 0x8b20, 0x8b21, 0x8b22, 0x8b23, 0x8b24,
-  0x8b25, 0x8b27, 0x8b28, 0x8b29, 0x8b2a, 0x8b2b, 0x8b2c, 0x8b2d,
-  0x8b2e, 0x8b2f, 0x8b30, 0x8b31, 0x8b32, 0x8b33, 0x8b34, 0x8b35,
-  0x8b36, 0x8b37, 0x8b38, 0x8b39, 0x8b3a, 0x8b3b, 0x8b3c, 0x8b3d,
-  0x8b3e, 0x8b3f, 0x8b40, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0x8b45,
-  0x5e27, 0x75c7, 0x90d1, 0x8bc1, 0x829d, 0x679d, 0x652f, 0x5431,
-  0x8718, 0x77e5, 0x80a2, 0x8102, 0x6c41, 0x4e4b, 0x7ec7, 0x804c,
-  0x76f4, 0x690d, 0x6b96, 0x6267, 0x503c, 0x4f84, 0x5740, 0x6307,
-  0x6b62, 0x8dbe, 0x53ea, 0x65e8, 0x7eb8, 0x5fd7, 0x631a, 0x63b7,
-  0x81f3, 0x81f4, 0x7f6e, 0x5e1c, 0x5cd9, 0x5236, 0x667a, 0x79e9,
-  0x7a1a, 0x8d28, 0x7099, 0x75d4, 0x6ede, 0x6cbb, 0x7a92, 0x4e2d,
-  0x76c5, 0x5fe0, 0x949f, 0x8877, 0x7ec8, 0x79cd, 0x80bf, 0x91cd,
-  0x4ef2, 0x4f17, 0x821f, 0x5468, 0x5dde, 0x6d32, 0x8bcc, 0x7ca5,
-  0x8f74, 0x8098, 0x5e1a, 0x5492, 0x76b1, 0x5b99, 0x663c, 0x9aa4,
-  0x73e0, 0x682a, 0x86db, 0x6731, 0x732a, 0x8bf8, 0x8bdb, 0x9010,
-  0x7af9, 0x70db, 0x716e, 0x62c4, 0x77a9, 0x5631, 0x4e3b, 0x8457,
-  0x67f1, 0x52a9, 0x86c0, 0x8d2e, 0x94f8, 0x7b51,
-  /* 0xd7 */
-  0x8b46, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4d,
-  0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b52, 0x8b53, 0x8b54, 0x8b55,
-  0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d,
-  0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65,
-  0x8b67, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6d, 0x8b6e, 0x8b6f,
-  0x8b70, 0x8b71, 0x8b72, 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77,
-  0x8b78, 0x8b79, 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d, 0x8b7e, 0x8b7f,
-  0x8b80, 0x8b81, 0x8b82, 0x8b83, 0x8b84, 0x8b85, 0x8b86, 0x8b87,
-  0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8d, 0x8b8e, 0x8b8f,
-  0x8b90, 0x8b91, 0x8b92, 0x8b93, 0x8b94, 0x8b95, 0x8b96, 0x8b97,
-  0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d, 0x8b9e, 0x8b9f,
-  0x8bac, 0x8bb1, 0x8bbb, 0x8bc7, 0x8bd0, 0x8bea, 0x8c09, 0x8c1e,
-  0x4f4f, 0x6ce8, 0x795d, 0x9a7b, 0x6293, 0x722a, 0x62fd, 0x4e13,
-  0x7816, 0x8f6c, 0x64b0, 0x8d5a, 0x7bc6, 0x6869, 0x5e84, 0x88c5,
-  0x5986, 0x649e, 0x58ee, 0x72b6, 0x690e, 0x9525, 0x8ffd, 0x8d58,
-  0x5760, 0x7f00, 0x8c06, 0x51c6, 0x6349, 0x62d9, 0x5353, 0x684c,
-  0x7422, 0x8301, 0x914c, 0x5544, 0x7740, 0x707c, 0x6d4a, 0x5179,
-  0x54a8, 0x8d44, 0x59ff, 0x6ecb, 0x6dc4, 0x5b5c, 0x7d2b, 0x4ed4,
-  0x7c7d, 0x6ed3, 0x5b50, 0x81ea, 0x6e0d, 0x5b57, 0x9b03, 0x68d5,
-  0x8e2a, 0x5b97, 0x7efc, 0x603b, 0x7eb5, 0x90b9, 0x8d70, 0x594f,
-  0x63cd, 0x79df, 0x8db3, 0x5352, 0x65cf, 0x7956, 0x8bc5, 0x963b,
-  0x7ec4, 0x94bb, 0x7e82, 0x5634, 0x9189, 0x6700, 0x7f6a, 0x5c0a,
-  0x9075, 0x6628, 0x5de6, 0x4f50, 0x67de, 0x505a, 0x4f5c, 0x5750,
-  0x5ea7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xd8 */
-  0x8c38, 0x8c39, 0x8c3a, 0x8c3b, 0x8c3c, 0x8c3d, 0x8c3e, 0x8c3f,
-  0x8c40, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c48, 0x8c4a, 0x8c4b,
-  0x8c4d, 0x8c4e, 0x8c4f, 0x8c50, 0x8c51, 0x8c52, 0x8c53, 0x8c54,
-  0x8c56, 0x8c57, 0x8c58, 0x8c59, 0x8c5b, 0x8c5c, 0x8c5d, 0x8c5e,
-  0x8c5f, 0x8c60, 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67, 0x8c68,
-  0x8c69, 0x8c6c, 0x8c6d, 0x8c6e, 0x8c6f, 0x8c70, 0x8c71, 0x8c72,
-  0x8c74, 0x8c75, 0x8c76, 0x8c77, 0x8c7b, 0x8c7c, 0x8c7d, 0x8c7e,
-  0x8c7f, 0x8c80, 0x8c81, 0x8c83, 0x8c84, 0x8c86, 0x8c87, 0x8c88,
-  0x8c8b, 0x8c8d, 0x8c8e, 0x8c8f, 0x8c90, 0x8c91, 0x8c92, 0x8c93,
-  0x8c95, 0x8c96, 0x8c97, 0x8c99, 0x8c9a, 0x8c9b, 0x8c9c, 0x8c9d,
-  0x8c9e, 0x8c9f, 0x8ca0, 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, 0x8ca5,
-  0x8ca6, 0x8ca7, 0x8ca8, 0x8ca9, 0x8caa, 0x8cab, 0x8cac, 0x8cad,
-  0x4e8d, 0x4e0c, 0x5140, 0x4e10, 0x5eff, 0x5345, 0x4e15, 0x4e98,
-  0x4e1e, 0x9b32, 0x5b6c, 0x5669, 0x4e28, 0x79ba, 0x4e3f, 0x5315,
-  0x4e47, 0x592d, 0x723b, 0x536e, 0x6c10, 0x56df, 0x80e4, 0x9997,
-  0x6bd3, 0x777e, 0x9f17, 0x4e36, 0x4e9f, 0x9f10, 0x4e5c, 0x4e69,
-  0x4e93, 0x8288, 0x5b5b, 0x556c, 0x560f, 0x4ec4, 0x538d, 0x539d,
-  0x53a3, 0x53a5, 0x53ae, 0x9765, 0x8d5d, 0x531a, 0x53f5, 0x5326,
-  0x532e, 0x533e, 0x8d5c, 0x5366, 0x5363, 0x5202, 0x5208, 0x520e,
-  0x522d, 0x5233, 0x523f, 0x5240, 0x524c, 0x525e, 0x5261, 0x525c,
-  0x84af, 0x527d, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, 0x7f54,
-  0x4ebb, 0x4ec3, 0x4ec9, 0x4ec2, 0x4ee8, 0x4ee1, 0x4eeb, 0x4ede,
-  0x4f1b, 0x4ef3, 0x4f22, 0x4f64, 0x4ef5, 0x4f25, 0x4f27, 0x4f09,
-  0x4f2b, 0x4f5e, 0x4f67, 0x6538, 0x4f5a, 0x4f5d,
-  /* 0xd9 */
-  0x8cae, 0x8caf, 0x8cb0, 0x8cb1, 0x8cb2, 0x8cb3, 0x8cb4, 0x8cb5,
-  0x8cb6, 0x8cb7, 0x8cb8, 0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd,
-  0x8cbe, 0x8cbf, 0x8cc0, 0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5,
-  0x8cc6, 0x8cc7, 0x8cc8, 0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd,
-  0x8cce, 0x8ccf, 0x8cd0, 0x8cd1, 0x8cd2, 0x8cd3, 0x8cd4, 0x8cd5,
-  0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd,
-  0x8cde, 0x8cdf, 0x8ce0, 0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4, 0x8ce5,
-  0x8ce6, 0x8ce7, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, 0x8ced,
-  0x8cee, 0x8cef, 0x8cf0, 0x8cf1, 0x8cf2, 0x8cf3, 0x8cf4, 0x8cf5,
-  0x8cf6, 0x8cf7, 0x8cf8, 0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd,
-  0x8cfe, 0x8cff, 0x8d00, 0x8d01, 0x8d02, 0x8d03, 0x8d04, 0x8d05,
-  0x8d06, 0x8d07, 0x8d08, 0x8d09, 0x8d0a, 0x8d0b, 0x8d0c, 0x8d0d,
-  0x4f5f, 0x4f57, 0x4f32, 0x4f3d, 0x4f76, 0x4f74, 0x4f91, 0x4f89,
-  0x4f83, 0x4f8f, 0x4f7e, 0x4f7b, 0x4faa, 0x4f7c, 0x4fac, 0x4f94,
-  0x4fe6, 0x4fe8, 0x4fea, 0x4fc5, 0x4fda, 0x4fe3, 0x4fdc, 0x4fd1,
-  0x4fdf, 0x4ff8, 0x5029, 0x504c, 0x4ff3, 0x502c, 0x500f, 0x502e,
-  0x502d, 0x4ffe, 0x501c, 0x500c, 0x5025, 0x5028, 0x507e, 0x5043,
-  0x5055, 0x5048, 0x504e, 0x506c, 0x507b, 0x50a5, 0x50a7, 0x50a9,
-  0x50ba, 0x50d6, 0x5106, 0x50ed, 0x50ec, 0x50e6, 0x50ee, 0x5107,
-  0x510b, 0x4edd, 0x6c3d, 0x4f58, 0x4f65, 0x4fce, 0x9fa0, 0x6c46,
-  0x7c74, 0x516e, 0x5dfd, 0x9ec9, 0x9998, 0x5181, 0x5914, 0x52f9,
-  0x530d, 0x8a07, 0x5310, 0x51eb, 0x5919, 0x5155, 0x4ea0, 0x5156,
-  0x4eb3, 0x886e, 0x88a4, 0x4eb5, 0x8114, 0x88d2, 0x7980, 0x5b34,
-  0x8803, 0x7fb8, 0x51ab, 0x51b1, 0x51bd, 0x51bc,
-  /* 0xda */
-  0x8d0e, 0x8d0f, 0x8d10, 0x8d11, 0x8d12, 0x8d13, 0x8d14, 0x8d15,
-  0x8d16, 0x8d17, 0x8d18, 0x8d19, 0x8d1a, 0x8d1b, 0x8d1c, 0x8d20,
-  0x8d51, 0x8d52, 0x8d57, 0x8d5f, 0x8d65, 0x8d68, 0x8d69, 0x8d6a,
-  0x8d6c, 0x8d6e, 0x8d6f, 0x8d71, 0x8d72, 0x8d78, 0x8d79, 0x8d7a,
-  0x8d7b, 0x8d7c, 0x8d7d, 0x8d7e, 0x8d7f, 0x8d80, 0x8d82, 0x8d83,
-  0x8d86, 0x8d87, 0x8d88, 0x8d89, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f,
-  0x8d90, 0x8d92, 0x8d93, 0x8d95, 0x8d96, 0x8d97, 0x8d98, 0x8d99,
-  0x8d9a, 0x8d9b, 0x8d9c, 0x8d9d, 0x8d9e, 0x8da0, 0x8da1, 0x8da2,
-  0x8da4, 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa, 0x8dab,
-  0x8dac, 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db2, 0x8db6, 0x8db7,
-  0x8db9, 0x8dbb, 0x8dbd, 0x8dc0, 0x8dc1, 0x8dc2, 0x8dc5, 0x8dc7,
-  0x8dc8, 0x8dc9, 0x8dca, 0x8dcd, 0x8dd0, 0x8dd2, 0x8dd3, 0x8dd4,
-  0x51c7, 0x5196, 0x51a2, 0x51a5, 0x8ba0, 0x8ba6, 0x8ba7, 0x8baa,
-  0x8bb4, 0x8bb5, 0x8bb7, 0x8bc2, 0x8bc3, 0x8bcb, 0x8bcf, 0x8bce,
-  0x8bd2, 0x8bd3, 0x8bd4, 0x8bd6, 0x8bd8, 0x8bd9, 0x8bdc, 0x8bdf,
-  0x8be0, 0x8be4, 0x8be8, 0x8be9, 0x8bee, 0x8bf0, 0x8bf3, 0x8bf6,
-  0x8bf9, 0x8bfc, 0x8bff, 0x8c00, 0x8c02, 0x8c04, 0x8c07, 0x8c0c,
-  0x8c0f, 0x8c11, 0x8c12, 0x8c14, 0x8c15, 0x8c16, 0x8c19, 0x8c1b,
-  0x8c18, 0x8c1d, 0x8c1f, 0x8c20, 0x8c21, 0x8c25, 0x8c27, 0x8c2a,
-  0x8c2b, 0x8c2e, 0x8c2f, 0x8c32, 0x8c33, 0x8c35, 0x8c36, 0x5369,
-  0x537a, 0x961d, 0x9622, 0x9621, 0x9631, 0x962a, 0x963d, 0x963c,
-  0x9642, 0x9649, 0x9654, 0x965f, 0x9667, 0x966c, 0x9672, 0x9674,
-  0x9688, 0x968d, 0x9697, 0x96b0, 0x9097, 0x909b, 0x909d, 0x9099,
-  0x90ac, 0x90a1, 0x90b4, 0x90b3, 0x90b6, 0x90ba,
-  /* 0xdb */
-  0x8dd5, 0x8dd8, 0x8dd9, 0x8ddc, 0x8de0, 0x8de1, 0x8de2, 0x8de5,
-  0x8de6, 0x8de7, 0x8de9, 0x8ded, 0x8dee, 0x8df0, 0x8df1, 0x8df2,
-  0x8df4, 0x8df6, 0x8dfc, 0x8dfe, 0x8dff, 0x8e00, 0x8e01, 0x8e02,
-  0x8e03, 0x8e04, 0x8e06, 0x8e07, 0x8e08, 0x8e0b, 0x8e0d, 0x8e0e,
-  0x8e10, 0x8e11, 0x8e12, 0x8e13, 0x8e15, 0x8e16, 0x8e17, 0x8e18,
-  0x8e19, 0x8e1a, 0x8e1b, 0x8e1c, 0x8e20, 0x8e21, 0x8e24, 0x8e25,
-  0x8e26, 0x8e27, 0x8e28, 0x8e2b, 0x8e2d, 0x8e30, 0x8e32, 0x8e33,
-  0x8e34, 0x8e36, 0x8e37, 0x8e38, 0x8e3b, 0x8e3c, 0x8e3e, 0x8e3f,
-  0x8e43, 0x8e45, 0x8e46, 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e50,
-  0x8e53, 0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, 0x8e5a, 0x8e5b,
-  0x8e5c, 0x8e5d, 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0x8e63,
-  0x8e64, 0x8e65, 0x8e67, 0x8e68, 0x8e6a, 0x8e6b, 0x8e6e, 0x8e71,
-  0x90b8, 0x90b0, 0x90cf, 0x90c5, 0x90be, 0x90d0, 0x90c4, 0x90c7,
-  0x90d3, 0x90e6, 0x90e2, 0x90dc, 0x90d7, 0x90db, 0x90eb, 0x90ef,
-  0x90fe, 0x9104, 0x9122, 0x911e, 0x9123, 0x9131, 0x912f, 0x9139,
-  0x9143, 0x9146, 0x520d, 0x5942, 0x52a2, 0x52ac, 0x52ad, 0x52be,
-  0x54ff, 0x52d0, 0x52d6, 0x52f0, 0x53df, 0x71ee, 0x77cd, 0x5ef4,
-  0x51f5, 0x51fc, 0x9b2f, 0x53b6, 0x5f01, 0x755a, 0x5def, 0x574c,
-  0x57a9, 0x57a1, 0x587e, 0x58bc, 0x58c5, 0x58d1, 0x5729, 0x572c,
-  0x572a, 0x5733, 0x5739, 0x572e, 0x572f, 0x575c, 0x573b, 0x5742,
-  0x5769, 0x5785, 0x576b, 0x5786, 0x577c, 0x577b, 0x5768, 0x576d,
-  0x5776, 0x5773, 0x57ad, 0x57a4, 0x578c, 0x57b2, 0x57cf, 0x57a7,
-  0x57b4, 0x5793, 0x57a0, 0x57d5, 0x57d8, 0x57da, 0x57d9, 0x57d2,
-  0x57b8, 0x57f4, 0x57ef, 0x57f8, 0x57e4, 0x57dd,
-  /* 0xdc */
-  0x8e73, 0x8e75, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e7b, 0x8e7d,
-  0x8e7e, 0x8e80, 0x8e82, 0x8e83, 0x8e84, 0x8e86, 0x8e88, 0x8e89,
-  0x8e8a, 0x8e8b, 0x8e8c, 0x8e8d, 0x8e8e, 0x8e91, 0x8e92, 0x8e93,
-  0x8e95, 0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0x8e9d,
-  0x8e9f, 0x8ea0, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6,
-  0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0x8ead, 0x8eae, 0x8eb0, 0x8eb1,
-  0x8eb3, 0x8eb4, 0x8eb5, 0x8eb6, 0x8eb7, 0x8eb8, 0x8eb9, 0x8ebb,
-  0x8ebc, 0x8ebd, 0x8ebe, 0x8ebf, 0x8ec0, 0x8ec1, 0x8ec2, 0x8ec3,
-  0x8ec4, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, 0x8eca, 0x8ecb,
-  0x8ecc, 0x8ecd, 0x8ecf, 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4,
-  0x8ed5, 0x8ed6, 0x8ed7, 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, 0x8edc,
-  0x8edd, 0x8ede, 0x8edf, 0x8ee0, 0x8ee1, 0x8ee2, 0x8ee3, 0x8ee4,
-  0x580b, 0x580d, 0x57fd, 0x57ed, 0x5800, 0x581e, 0x5819, 0x5844,
-  0x5820, 0x5865, 0x586c, 0x5881, 0x5889, 0x589a, 0x5880, 0x99a8,
-  0x9f19, 0x61ff, 0x8279, 0x827d, 0x827f, 0x828f, 0x828a, 0x82a8,
-  0x8284, 0x828e, 0x8291, 0x8297, 0x8299, 0x82ab, 0x82b8, 0x82be,
-  0x82b0, 0x82c8, 0x82ca, 0x82e3, 0x8298, 0x82b7, 0x82ae, 0x82cb,
-  0x82cc, 0x82c1, 0x82a9, 0x82b4, 0x82a1, 0x82aa, 0x829f, 0x82c4,
-  0x82ce, 0x82a4, 0x82e1, 0x8309, 0x82f7, 0x82e4, 0x830f, 0x8307,
-  0x82dc, 0x82f4, 0x82d2, 0x82d8, 0x830c, 0x82fb, 0x82d3, 0x8311,
-  0x831a, 0x8306, 0x8314, 0x8315, 0x82e0, 0x82d5, 0x831c, 0x8351,
-  0x835b, 0x835c, 0x8308, 0x8392, 0x833c, 0x8334, 0x8331, 0x839b,
-  0x835e, 0x832f, 0x834f, 0x8347, 0x8343, 0x835f, 0x8340, 0x8317,
-  0x8360, 0x832d, 0x833a, 0x8333, 0x8366, 0x8365,
-  /* 0xdd */
-  0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec,
-  0x8eed, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, 0x8ef4,
-  0x8ef5, 0x8ef6, 0x8ef7, 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc,
-  0x8efd, 0x8efe, 0x8eff, 0x8f00, 0x8f01, 0x8f02, 0x8f03, 0x8f04,
-  0x8f05, 0x8f06, 0x8f07, 0x8f08, 0x8f09, 0x8f0a, 0x8f0b, 0x8f0c,
-  0x8f0d, 0x8f0e, 0x8f0f, 0x8f10, 0x8f11, 0x8f12, 0x8f13, 0x8f14,
-  0x8f15, 0x8f16, 0x8f17, 0x8f18, 0x8f19, 0x8f1a, 0x8f1b, 0x8f1c,
-  0x8f1d, 0x8f1e, 0x8f1f, 0x8f20, 0x8f21, 0x8f22, 0x8f23, 0x8f24,
-  0x8f25, 0x8f26, 0x8f27, 0x8f28, 0x8f29, 0x8f2a, 0x8f2b, 0x8f2c,
-  0x8f2d, 0x8f2e, 0x8f2f, 0x8f30, 0x8f31, 0x8f32, 0x8f33, 0x8f34,
-  0x8f35, 0x8f36, 0x8f37, 0x8f38, 0x8f39, 0x8f3a, 0x8f3b, 0x8f3c,
-  0x8f3d, 0x8f3e, 0x8f3f, 0x8f40, 0x8f41, 0x8f42, 0x8f43, 0x8f44,
-  0x8368, 0x831b, 0x8369, 0x836c, 0x836a, 0x836d, 0x836e, 0x83b0,
-  0x8378, 0x83b3, 0x83b4, 0x83a0, 0x83aa, 0x8393, 0x839c, 0x8385,
-  0x837c, 0x83b6, 0x83a9, 0x837d, 0x83b8, 0x837b, 0x8398, 0x839e,
-  0x83a8, 0x83ba, 0x83bc, 0x83c1, 0x8401, 0x83e5, 0x83d8, 0x5807,
-  0x8418, 0x840b, 0x83dd, 0x83fd, 0x83d6, 0x841c, 0x8438, 0x8411,
-  0x8406, 0x83d4, 0x83df, 0x840f, 0x8403, 0x83f8, 0x83f9, 0x83ea,
-  0x83c5, 0x83c0, 0x8426, 0x83f0, 0x83e1, 0x845c, 0x8451, 0x845a,
-  0x8459, 0x8473, 0x8487, 0x8488, 0x847a, 0x8489, 0x8478, 0x843c,
-  0x8446, 0x8469, 0x8476, 0x848c, 0x848e, 0x8431, 0x846d, 0x84c1,
-  0x84cd, 0x84d0, 0x84e6, 0x84bd, 0x84d3, 0x84ca, 0x84bf, 0x84ba,
-  0x84e0, 0x84a1, 0x84b9, 0x84b4, 0x8497, 0x84e5, 0x84e3, 0x850c,
-  0x750d, 0x8538, 0x84f0, 0x8539, 0x851f, 0x853a,
-  /* 0xde */
-  0x8f45, 0x8f46, 0x8f47, 0x8f48, 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c,
-  0x8f4d, 0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, 0x8f53, 0x8f54,
-  0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, 0x8f5b, 0x8f5c,
-  0x8f5d, 0x8f5e, 0x8f5f, 0x8f60, 0x8f61, 0x8f62, 0x8f63, 0x8f64,
-  0x8f65, 0x8f6a, 0x8f80, 0x8f8c, 0x8f92, 0x8f9d, 0x8fa0, 0x8fa1,
-  0x8fa2, 0x8fa4, 0x8fa5, 0x8fa6, 0x8fa7, 0x8faa, 0x8fac, 0x8fad,
-  0x8fae, 0x8faf, 0x8fb2, 0x8fb3, 0x8fb4, 0x8fb5, 0x8fb7, 0x8fb8,
-  0x8fba, 0x8fbb, 0x8fbc, 0x8fbf, 0x8fc0, 0x8fc3, 0x8fc6, 0x8fc9,
-  0x8fca, 0x8fcb, 0x8fcc, 0x8fcd, 0x8fcf, 0x8fd2, 0x8fd6, 0x8fd7,
-  0x8fda, 0x8fe0, 0x8fe1, 0x8fe3, 0x8fe7, 0x8fec, 0x8fef, 0x8ff1,
-  0x8ff2, 0x8ff4, 0x8ff5, 0x8ff6, 0x8ffa, 0x8ffb, 0x8ffc, 0x8ffe,
-  0x8fff, 0x9007, 0x9008, 0x900c, 0x900e, 0x9013, 0x9015, 0x9018,
-  0x8556, 0x853b, 0x84ff, 0x84fc, 0x8559, 0x8548, 0x8568, 0x8564,
-  0x855e, 0x857a, 0x77a2, 0x8543, 0x8572, 0x857b, 0x85a4, 0x85a8,
-  0x8587, 0x858f, 0x8579, 0x85ae, 0x859c, 0x8585, 0x85b9, 0x85b7,
-  0x85b0, 0x85d3, 0x85c1, 0x85dc, 0x85ff, 0x8627, 0x8605, 0x8629,
-  0x8616, 0x863c, 0x5efe, 0x5f08, 0x593c, 0x5941, 0x8037, 0x5955,
-  0x595a, 0x5958, 0x530f, 0x5c22, 0x5c25, 0x5c2c, 0x5c34, 0x624c,
-  0x626a, 0x629f, 0x62bb, 0x62ca, 0x62da, 0x62d7, 0x62ee, 0x6322,
-  0x62f6, 0x6339, 0x634b, 0x6343, 0x63ad, 0x63f6, 0x6371, 0x637a,
-  0x638e, 0x63b4, 0x636d, 0x63ac, 0x638a, 0x6369, 0x63ae, 0x63bc,
-  0x63f2, 0x63f8, 0x63e0, 0x63ff, 0x63c4, 0x63de, 0x63ce, 0x6452,
-  0x63c6, 0x63be, 0x6445, 0x6441, 0x640b, 0x641b, 0x6420, 0x640c,
-  0x6426, 0x6421, 0x645e, 0x6484, 0x646d, 0x6496,
-  /* 0xdf */
-  0x9019, 0x901c, 0x9023, 0x9024, 0x9025, 0x9027, 0x9028, 0x9029,
-  0x902a, 0x902b, 0x902c, 0x9030, 0x9031, 0x9032, 0x9033, 0x9034,
-  0x9037, 0x9039, 0x903a, 0x903d, 0x903f, 0x9040, 0x9043, 0x9045,
-  0x9046, 0x9048, 0x9049, 0x904a, 0x904b, 0x904c, 0x904e, 0x9054,
-  0x9055, 0x9056, 0x9059, 0x905a, 0x905c, 0x905d, 0x905e, 0x905f,
-  0x9060, 0x9061, 0x9064, 0x9066, 0x9067, 0x9069, 0x906a, 0x906b,
-  0x906c, 0x906f, 0x9070, 0x9071, 0x9072, 0x9073, 0x9076, 0x9077,
-  0x9078, 0x9079, 0x907a, 0x907b, 0x907c, 0x907e, 0x9081, 0x9084,
-  0x9085, 0x9086, 0x9087, 0x9089, 0x908a, 0x908c, 0x908d, 0x908e,
-  0x908f, 0x9090, 0x9092, 0x9094, 0x9096, 0x9098, 0x909a, 0x909c,
-  0x909e, 0x909f, 0x90a0, 0x90a4, 0x90a5, 0x90a7, 0x90a8, 0x90a9,
-  0x90ab, 0x90ad, 0x90b2, 0x90b7, 0x90bc, 0x90bd, 0x90bf, 0x90c0,
-  0x647a, 0x64b7, 0x64b8, 0x6499, 0x64ba, 0x64c0, 0x64d0, 0x64d7,
-  0x64e4, 0x64e2, 0x6509, 0x6525, 0x652e, 0x5f0b, 0x5fd2, 0x7519,
-  0x5f11, 0x535f, 0x53f1, 0x53fd, 0x53e9, 0x53e8, 0x53fb, 0x5412,
-  0x5416, 0x5406, 0x544b, 0x5452, 0x5453, 0x5454, 0x5456, 0x5443,
-  0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, 0x5477,
-  0x5471, 0x5464, 0x549a, 0x549b, 0x5484, 0x5476, 0x5466, 0x549d,
-  0x54d0, 0x54ad, 0x54c2, 0x54b4, 0x54d2, 0x54a7, 0x54a6, 0x54d3,
-  0x54d4, 0x5472, 0x54a3, 0x54d5, 0x54bb, 0x54bf, 0x54cc, 0x54d9,
-  0x54da, 0x54dc, 0x54a9, 0x54aa, 0x54a4, 0x54dd, 0x54cf, 0x54de,
-  0x551b, 0x54e7, 0x5520, 0x54fd, 0x5514, 0x54f3, 0x5522, 0x5523,
-  0x550f, 0x5511, 0x5527, 0x552a, 0x5567, 0x558f, 0x55b5, 0x5549,
-  0x556d, 0x5541, 0x5555, 0x553f, 0x5550, 0x553c,
-  /* 0xe0 */
-  0x90c2, 0x90c3, 0x90c6, 0x90c8, 0x90c9, 0x90cb, 0x90cc, 0x90cd,
-  0x90d2, 0x90d4, 0x90d5, 0x90d6, 0x90d8, 0x90d9, 0x90da, 0x90de,
-  0x90df, 0x90e0, 0x90e3, 0x90e4, 0x90e5, 0x90e9, 0x90ea, 0x90ec,
-  0x90ee, 0x90f0, 0x90f1, 0x90f2, 0x90f3, 0x90f5, 0x90f6, 0x90f7,
-  0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90ff, 0x9100, 0x9101, 0x9103,
-  0x9105, 0x9106, 0x9107, 0x9108, 0x9109, 0x910a, 0x910b, 0x910c,
-  0x910d, 0x910e, 0x910f, 0x9110, 0x9111, 0x9112, 0x9113, 0x9114,
-  0x9115, 0x9116, 0x9117, 0x9118, 0x911a, 0x911b, 0x911c, 0x911d,
-  0x911f, 0x9120, 0x9121, 0x9124, 0x9125, 0x9126, 0x9127, 0x9128,
-  0x9129, 0x912a, 0x912b, 0x912c, 0x912d, 0x912e, 0x9130, 0x9132,
-  0x9133, 0x9134, 0x9135, 0x9136, 0x9137, 0x9138, 0x913a, 0x913b,
-  0x913c, 0x913d, 0x913e, 0x913f, 0x9140, 0x9141, 0x9142, 0x9144,
-  0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, 0x555c,
-  0x558b, 0x55d2, 0x5583, 0x55b1, 0x55b9, 0x5588, 0x5581, 0x559f,
-  0x557e, 0x55d6, 0x5591, 0x557b, 0x55df, 0x55bd, 0x55be, 0x5594,
-  0x5599, 0x55ea, 0x55f7, 0x55c9, 0x561f, 0x55d1, 0x55eb, 0x55ec,
-  0x55d4, 0x55e6, 0x55dd, 0x55c4, 0x55ef, 0x55e5, 0x55f2, 0x55f3,
-  0x55cc, 0x55cd, 0x55e8, 0x55f5, 0x55e4, 0x8f94, 0x561e, 0x5608,
-  0x560c, 0x5601, 0x5624, 0x5623, 0x55fe, 0x5600, 0x5627, 0x562d,
-  0x5658, 0x5639, 0x5657, 0x562c, 0x564d, 0x5662, 0x5659, 0x565c,
-  0x564c, 0x5654, 0x5686, 0x5664, 0x5671, 0x566b, 0x567b, 0x567c,
-  0x5685, 0x5693, 0x56af, 0x56d4, 0x56d7, 0x56dd, 0x56e1, 0x56f5,
-  0x56eb, 0x56f9, 0x56ff, 0x5704, 0x570a, 0x5709, 0x571c, 0x5e0f,
-  0x5e19, 0x5e14, 0x5e11, 0x5e31, 0x5e3b, 0x5e3c,
-  /* 0xe1 */
-  0x9145, 0x9147, 0x9148, 0x9151, 0x9153, 0x9154, 0x9155, 0x9156,
-  0x9158, 0x9159, 0x915b, 0x915c, 0x915f, 0x9160, 0x9166, 0x9167,
-  0x9168, 0x916b, 0x916d, 0x9173, 0x917a, 0x917b, 0x917c, 0x9180,
-  0x9181, 0x9182, 0x9183, 0x9184, 0x9186, 0x9188, 0x918a, 0x918e,
-  0x918f, 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199,
-  0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0x91a4, 0x91a5,
-  0x91a6, 0x91a7, 0x91a8, 0x91a9, 0x91ab, 0x91ac, 0x91b0, 0x91b1,
-  0x91b2, 0x91b3, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91bb, 0x91bc,
-  0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0x91c2, 0x91c3, 0x91c4,
-  0x91c5, 0x91c6, 0x91c8, 0x91cb, 0x91d0, 0x91d2, 0x91d3, 0x91d4,
-  0x91d5, 0x91d6, 0x91d7, 0x91d8, 0x91d9, 0x91da, 0x91db, 0x91dd,
-  0x91de, 0x91df, 0x91e0, 0x91e1, 0x91e2, 0x91e3, 0x91e4, 0x91e5,
-  0x5e37, 0x5e44, 0x5e54, 0x5e5b, 0x5e5e, 0x5e61, 0x5c8c, 0x5c7a,
-  0x5c8d, 0x5c90, 0x5c96, 0x5c88, 0x5c98, 0x5c99, 0x5c91, 0x5c9a,
-  0x5c9c, 0x5cb5, 0x5ca2, 0x5cbd, 0x5cac, 0x5cab, 0x5cb1, 0x5ca3,
-  0x5cc1, 0x5cb7, 0x5cc4, 0x5cd2, 0x5ce4, 0x5ccb, 0x5ce5, 0x5d02,
-  0x5d03, 0x5d27, 0x5d26, 0x5d2e, 0x5d24, 0x5d1e, 0x5d06, 0x5d1b,
-  0x5d58, 0x5d3e, 0x5d34, 0x5d3d, 0x5d6c, 0x5d5b, 0x5d6f, 0x5d5d,
-  0x5d6b, 0x5d4b, 0x5d4a, 0x5d69, 0x5d74, 0x5d82, 0x5d99, 0x5d9d,
-  0x8c73, 0x5db7, 0x5dc5, 0x5f73, 0x5f77, 0x5f82, 0x5f87, 0x5f89,
-  0x5f8c, 0x5f95, 0x5f99, 0x5f9c, 0x5fa8, 0x5fad, 0x5fb5, 0x5fbc,
-  0x8862, 0x5f61, 0x72ad, 0x72b0, 0x72b4, 0x72b7, 0x72b8, 0x72c3,
-  0x72c1, 0x72ce, 0x72cd, 0x72d2, 0x72e8, 0x72ef, 0x72e9, 0x72f2,
-  0x72f4, 0x72f7, 0x7301, 0x72f3, 0x7303, 0x72fa,
-  /* 0xe2 */
-  0x91e6, 0x91e7, 0x91e8, 0x91e9, 0x91ea, 0x91eb, 0x91ec, 0x91ed,
-  0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f2, 0x91f3, 0x91f4, 0x91f5,
-  0x91f6, 0x91f7, 0x91f8, 0x91f9, 0x91fa, 0x91fb, 0x91fc, 0x91fd,
-  0x91fe, 0x91ff, 0x9200, 0x9201, 0x9202, 0x9203, 0x9204, 0x9205,
-  0x9206, 0x9207, 0x9208, 0x9209, 0x920a, 0x920b, 0x920c, 0x920d,
-  0x920e, 0x920f, 0x9210, 0x9211, 0x9212, 0x9213, 0x9214, 0x9215,
-  0x9216, 0x9217, 0x9218, 0x9219, 0x921a, 0x921b, 0x921c, 0x921d,
-  0x921e, 0x921f, 0x9220, 0x9221, 0x9222, 0x9223, 0x9224, 0x9225,
-  0x9226, 0x9227, 0x9228, 0x9229, 0x922a, 0x922b, 0x922c, 0x922d,
-  0x922e, 0x922f, 0x9230, 0x9231, 0x9232, 0x9233, 0x9234, 0x9235,
-  0x9236, 0x9237, 0x9238, 0x9239, 0x923a, 0x923b, 0x923c, 0x923d,
-  0x923e, 0x923f, 0x9240, 0x9241, 0x9242, 0x9243, 0x9244, 0x9245,
-  0x72fb, 0x7317, 0x7313, 0x7321, 0x730a, 0x731e, 0x731d, 0x7315,
-  0x7322, 0x7339, 0x7325, 0x732c, 0x7338, 0x7331, 0x7350, 0x734d,
-  0x7357, 0x7360, 0x736c, 0x736f, 0x737e, 0x821b, 0x5925, 0x98e7,
-  0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996a, 0x996b,
-  0x996c, 0x9974, 0x9977, 0x997d, 0x9980, 0x9984, 0x9987, 0x998a,
-  0x998d, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5e80, 0x5e91,
-  0x5e8b, 0x5e96, 0x5ea5, 0x5ea0, 0x5eb9, 0x5eb5, 0x5ebe, 0x5eb3,
-  0x8d53, 0x5ed2, 0x5ed1, 0x5edb, 0x5ee8, 0x5eea, 0x81ba, 0x5fc4,
-  0x5fc9, 0x5fd6, 0x5fcf, 0x6003, 0x5fee, 0x6004, 0x5fe1, 0x5fe4,
-  0x5ffe, 0x6005, 0x6006, 0x5fea, 0x5fed, 0x5ff8, 0x6019, 0x6035,
-  0x6026, 0x601b, 0x600f, 0x600d, 0x6029, 0x602b, 0x600a, 0x603f,
-  0x6021, 0x6078, 0x6079, 0x607b, 0x607a, 0x6042,
-  /* 0xe3 */
-  0x9246, 0x9247, 0x9248, 0x9249, 0x924a, 0x924b, 0x924c, 0x924d,
-  0x924e, 0x924f, 0x9250, 0x9251, 0x9252, 0x9253, 0x9254, 0x9255,
-  0x9256, 0x9257, 0x9258, 0x9259, 0x925a, 0x925b, 0x925c, 0x925d,
-  0x925e, 0x925f, 0x9260, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265,
-  0x9266, 0x9267, 0x9268, 0x9269, 0x926a, 0x926b, 0x926c, 0x926d,
-  0x926e, 0x926f, 0x9270, 0x9271, 0x9272, 0x9273, 0x9275, 0x9276,
-  0x9277, 0x9278, 0x9279, 0x927a, 0x927b, 0x927c, 0x927d, 0x927e,
-  0x927f, 0x9280, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0x9286,
-  0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c, 0x928d, 0x928f,
-  0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, 0x9297,
-  0x9298, 0x9299, 0x929a, 0x929b, 0x929c, 0x929d, 0x929e, 0x929f,
-  0x92a0, 0x92a1, 0x92a2, 0x92a3, 0x92a4, 0x92a5, 0x92a6, 0x92a7,
-  0x606a, 0x607d, 0x6096, 0x609a, 0x60ad, 0x609d, 0x6083, 0x6092,
-  0x608c, 0x609b, 0x60ec, 0x60bb, 0x60b1, 0x60dd, 0x60d8, 0x60c6,
-  0x60da, 0x60b4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60f4, 0x6100,
-  0x610e, 0x612b, 0x614a, 0x6175, 0x61ac, 0x6194, 0x61a7, 0x61b7,
-  0x61d4, 0x61f5, 0x5fdd, 0x96b3, 0x95e9, 0x95eb, 0x95f1, 0x95f3,
-  0x95f5, 0x95f6, 0x95fc, 0x95fe, 0x9603, 0x9604, 0x9606, 0x9608,
-  0x960a, 0x960b, 0x960c, 0x960d, 0x960f, 0x9612, 0x9615, 0x9616,
-  0x9617, 0x9619, 0x961a, 0x4e2c, 0x723f, 0x6215, 0x6c35, 0x6c54,
-  0x6c5c, 0x6c4a, 0x6ca3, 0x6c85, 0x6c90, 0x6c94, 0x6c8c, 0x6c68,
-  0x6c69, 0x6c74, 0x6c76, 0x6c86, 0x6ca9, 0x6cd0, 0x6cd4, 0x6cad,
-  0x6cf7, 0x6cf8, 0x6cf1, 0x6cd7, 0x6cb2, 0x6ce0, 0x6cd6, 0x6cfa,
-  0x6ceb, 0x6cee, 0x6cb1, 0x6cd3, 0x6cef, 0x6cfe,
-  /* 0xe4 */
-  0x92a8, 0x92a9, 0x92aa, 0x92ab, 0x92ac, 0x92ad, 0x92af, 0x92b0,
-  0x92b1, 0x92b2, 0x92b3, 0x92b4, 0x92b5, 0x92b6, 0x92b7, 0x92b8,
-  0x92b9, 0x92ba, 0x92bb, 0x92bc, 0x92bd, 0x92be, 0x92bf, 0x92c0,
-  0x92c1, 0x92c2, 0x92c3, 0x92c4, 0x92c5, 0x92c6, 0x92c7, 0x92c9,
-  0x92ca, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92cf, 0x92d0, 0x92d1,
-  0x92d2, 0x92d3, 0x92d4, 0x92d5, 0x92d6, 0x92d7, 0x92d8, 0x92d9,
-  0x92da, 0x92db, 0x92dc, 0x92dd, 0x92de, 0x92df, 0x92e0, 0x92e1,
-  0x92e2, 0x92e3, 0x92e4, 0x92e5, 0x92e6, 0x92e7, 0x92e8, 0x92e9,
-  0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, 0x92f1,
-  0x92f2, 0x92f3, 0x92f4, 0x92f5, 0x92f6, 0x92f7, 0x92f8, 0x92f9,
-  0x92fa, 0x92fb, 0x92fc, 0x92fd, 0x92fe, 0x92ff, 0x9300, 0x9301,
-  0x9302, 0x9303, 0x9304, 0x9305, 0x9306, 0x9307, 0x9308, 0x9309,
-  0x6d39, 0x6d27, 0x6d0c, 0x6d43, 0x6d48, 0x6d07, 0x6d04, 0x6d19,
-  0x6d0e, 0x6d2b, 0x6d4d, 0x6d2e, 0x6d35, 0x6d1a, 0x6d4f, 0x6d52,
-  0x6d54, 0x6d33, 0x6d91, 0x6d6f, 0x6d9e, 0x6da0, 0x6d5e, 0x6d93,
-  0x6d94, 0x6d5c, 0x6d60, 0x6d7c, 0x6d63, 0x6e1a, 0x6dc7, 0x6dc5,
-  0x6dde, 0x6e0e, 0x6dbf, 0x6de0, 0x6e11, 0x6de6, 0x6ddd, 0x6dd9,
-  0x6e16, 0x6dab, 0x6e0c, 0x6dae, 0x6e2b, 0x6e6e, 0x6e4e, 0x6e6b,
-  0x6eb2, 0x6e5f, 0x6e86, 0x6e53, 0x6e54, 0x6e32, 0x6e25, 0x6e44,
-  0x6edf, 0x6eb1, 0x6e98, 0x6ee0, 0x6f2d, 0x6ee2, 0x6ea5, 0x6ea7,
-  0x6ebd, 0x6ebb, 0x6eb7, 0x6ed7, 0x6eb4, 0x6ecf, 0x6e8f, 0x6ec2,
-  0x6e9f, 0x6f62, 0x6f46, 0x6f47, 0x6f24, 0x6f15, 0x6ef9, 0x6f2f,
-  0x6f36, 0x6f4b, 0x6f74, 0x6f2a, 0x6f09, 0x6f29, 0x6f89, 0x6f8d,
-  0x6f8c, 0x6f78, 0x6f72, 0x6f7c, 0x6f7a, 0x6fd1,
-  /* 0xe5 */
-  0x930a, 0x930b, 0x930c, 0x930d, 0x930e, 0x930f, 0x9310, 0x9311,
-  0x9312, 0x9313, 0x9314, 0x9315, 0x9316, 0x9317, 0x9318, 0x9319,
-  0x931a, 0x931b, 0x931c, 0x931d, 0x931e, 0x931f, 0x9320, 0x9321,
-  0x9322, 0x9323, 0x9324, 0x9325, 0x9326, 0x9327, 0x9328, 0x9329,
-  0x932a, 0x932b, 0x932c, 0x932d, 0x932e, 0x932f, 0x9330, 0x9331,
-  0x9332, 0x9333, 0x9334, 0x9335, 0x9336, 0x9337, 0x9338, 0x9339,
-  0x933a, 0x933b, 0x933c, 0x933d, 0x933f, 0x9340, 0x9341, 0x9342,
-  0x9343, 0x9344, 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x934a,
-  0x934b, 0x934c, 0x934d, 0x934e, 0x934f, 0x9350, 0x9351, 0x9352,
-  0x9353, 0x9354, 0x9355, 0x9356, 0x9357, 0x9358, 0x9359, 0x935a,
-  0x935b, 0x935c, 0x935d, 0x935e, 0x935f, 0x9360, 0x9361, 0x9362,
-  0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, 0x936b,
-  0x6fc9, 0x6fa7, 0x6fb9, 0x6fb6, 0x6fc2, 0x6fe1, 0x6fee, 0x6fde,
-  0x6fe0, 0x6fef, 0x701a, 0x7023, 0x701b, 0x7039, 0x7035, 0x704f,
-  0x705e, 0x5b80, 0x5b84, 0x5b95, 0x5b93, 0x5ba5, 0x5bb8, 0x752f,
-  0x9a9e, 0x6434, 0x5be4, 0x5bee, 0x8930, 0x5bf0, 0x8e47, 0x8b07,
-  0x8fb6, 0x8fd3, 0x8fd5, 0x8fe5, 0x8fee, 0x8fe4, 0x8fe9, 0x8fe6,
-  0x8ff3, 0x8fe8, 0x9005, 0x9004, 0x900b, 0x9026, 0x9011, 0x900d,
-  0x9016, 0x9021, 0x9035, 0x9036, 0x902d, 0x902f, 0x9044, 0x9051,
-  0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905b, 0x66b9, 0x9074,
-  0x907d, 0x9082, 0x9088, 0x9083, 0x908b, 0x5f50, 0x5f57, 0x5f56,
-  0x5f58, 0x5c3b, 0x54ab, 0x5c50, 0x5c59, 0x5b71, 0x5c63, 0x5c66,
-  0x7fbc, 0x5f2a, 0x5f29, 0x5f2d, 0x8274, 0x5f3c, 0x9b3b, 0x5c6e,
-  0x5981, 0x5983, 0x598d, 0x59a9, 0x59aa, 0x59a3,
-  /* 0xe6 */
-  0x936c, 0x936d, 0x936e, 0x936f, 0x9370, 0x9371, 0x9372, 0x9373,
-  0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, 0x937a, 0x937b,
-  0x937c, 0x937d, 0x937e, 0x937f, 0x9380, 0x9381, 0x9382, 0x9383,
-  0x9384, 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938a, 0x938b,
-  0x938c, 0x938d, 0x938e, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394,
-  0x9395, 0x9396, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, 0x939c,
-  0x939d, 0x939e, 0x939f, 0x93a0, 0x93a1, 0x93a2, 0x93a3, 0x93a4,
-  0x93a5, 0x93a6, 0x93a7, 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac,
-  0x93ad, 0x93ae, 0x93af, 0x93b0, 0x93b1, 0x93b2, 0x93b3, 0x93b4,
-  0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc,
-  0x93bd, 0x93be, 0x93bf, 0x93c0, 0x93c1, 0x93c2, 0x93c3, 0x93c4,
-  0x93c5, 0x93c6, 0x93c7, 0x93c8, 0x93c9, 0x93cb, 0x93cc, 0x93cd,
-  0x5997, 0x59ca, 0x59ab, 0x599e, 0x59a4, 0x59d2, 0x59b2, 0x59af,
-  0x59d7, 0x59be, 0x5a05, 0x5a06, 0x59dd, 0x5a08, 0x59e3, 0x59d8,
-  0x59f9, 0x5a0c, 0x5a09, 0x5a32, 0x5a34, 0x5a11, 0x5a23, 0x5a13,
-  0x5a40, 0x5a67, 0x5a4a, 0x5a55, 0x5a3c, 0x5a62, 0x5a75, 0x80ec,
-  0x5aaa, 0x5a9b, 0x5a77, 0x5a7a, 0x5abe, 0x5aeb, 0x5ab2, 0x5ad2,
-  0x5ad4, 0x5ab8, 0x5ae0, 0x5ae3, 0x5af1, 0x5ad6, 0x5ae6, 0x5ad8,
-  0x5adc, 0x5b09, 0x5b17, 0x5b16, 0x5b32, 0x5b37, 0x5b40, 0x5c15,
-  0x5c1c, 0x5b5a, 0x5b65, 0x5b73, 0x5b51, 0x5b53, 0x5b62, 0x9a75,
-  0x9a77, 0x9a78, 0x9a7a, 0x9a7f, 0x9a7d, 0x9a80, 0x9a81, 0x9a85,
-  0x9a88, 0x9a8a, 0x9a90, 0x9a92, 0x9a93, 0x9a96, 0x9a98, 0x9a9b,
-  0x9a9c, 0x9a9d, 0x9a9f, 0x9aa0, 0x9aa2, 0x9aa3, 0x9aa5, 0x9aa7,
-  0x7e9f, 0x7ea1, 0x7ea3, 0x7ea5, 0x7ea8, 0x7ea9,
-  /* 0xe7 */
-  0x93ce, 0x93cf, 0x93d0, 0x93d1, 0x93d2, 0x93d3, 0x93d4, 0x93d5,
-  0x93d7, 0x93d8, 0x93d9, 0x93da, 0x93db, 0x93dc, 0x93dd, 0x93de,
-  0x93df, 0x93e0, 0x93e1, 0x93e2, 0x93e3, 0x93e4, 0x93e5, 0x93e6,
-  0x93e7, 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, 0x93ee,
-  0x93ef, 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6,
-  0x93f7, 0x93f8, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0x93fd, 0x93fe,
-  0x93ff, 0x9400, 0x9401, 0x9402, 0x9403, 0x9404, 0x9405, 0x9406,
-  0x9407, 0x9408, 0x9409, 0x940a, 0x940b, 0x940c, 0x940d, 0x940e,
-  0x940f, 0x9410, 0x9411, 0x9412, 0x9413, 0x9414, 0x9415, 0x9416,
-  0x9417, 0x9418, 0x9419, 0x941a, 0x941b, 0x941c, 0x941d, 0x941e,
-  0x941f, 0x9420, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, 0x9426,
-  0x9427, 0x9428, 0x9429, 0x942a, 0x942b, 0x942c, 0x942d, 0x942e,
-  0x7ead, 0x7eb0, 0x7ebe, 0x7ec0, 0x7ec1, 0x7ec2, 0x7ec9, 0x7ecb,
-  0x7ecc, 0x7ed0, 0x7ed4, 0x7ed7, 0x7edb, 0x7ee0, 0x7ee1, 0x7ee8,
-  0x7eeb, 0x7eee, 0x7eef, 0x7ef1, 0x7ef2, 0x7f0d, 0x7ef6, 0x7efa,
-  0x7efb, 0x7efe, 0x7f01, 0x7f02, 0x7f03, 0x7f07, 0x7f08, 0x7f0b,
-  0x7f0c, 0x7f0f, 0x7f11, 0x7f12, 0x7f17, 0x7f19, 0x7f1c, 0x7f1b,
-  0x7f1f, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27,
-  0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2f, 0x7f30, 0x7f31, 0x7f32,
-  0x7f33, 0x7f35, 0x5e7a, 0x757f, 0x5ddb, 0x753e, 0x9095, 0x738e,
-  0x7391, 0x73ae, 0x73a2, 0x739f, 0x73cf, 0x73c2, 0x73d1, 0x73b7,
-  0x73b3, 0x73c0, 0x73c9, 0x73c8, 0x73e5, 0x73d9, 0x987c, 0x740a,
-  0x73e9, 0x73e7, 0x73de, 0x73ba, 0x73f2, 0x740f, 0x742a, 0x745b,
-  0x7426, 0x7425, 0x7428, 0x7430, 0x742e, 0x742c,
-  /* 0xe8 */
-  0x942f, 0x9430, 0x9431, 0x9432, 0x9433, 0x9434, 0x9435, 0x9436,
-  0x9437, 0x9438, 0x9439, 0x943a, 0x943b, 0x943c, 0x943d, 0x943f,
-  0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447,
-  0x9448, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f,
-  0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457,
-  0x9458, 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f,
-  0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467,
-  0x9468, 0x9469, 0x946a, 0x946c, 0x946d, 0x946e, 0x946f, 0x9470,
-  0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, 0x9478,
-  0x9479, 0x947a, 0x947b, 0x947c, 0x947d, 0x947e, 0x947f, 0x9480,
-  0x9481, 0x9482, 0x9483, 0x9484, 0x9491, 0x9496, 0x9498, 0x94c7,
-  0x94cf, 0x94d3, 0x94d4, 0x94da, 0x94e6, 0x94fb, 0x951c, 0x9520,
-  0x741b, 0x741a, 0x7441, 0x745c, 0x7457, 0x7455, 0x7459, 0x7477,
-  0x746d, 0x747e, 0x749c, 0x748e, 0x7480, 0x7481, 0x7487, 0x748b,
-  0x749e, 0x74a8, 0x74a9, 0x7490, 0x74a7, 0x74d2, 0x74ba, 0x97ea,
-  0x97eb, 0x97ec, 0x674c, 0x6753, 0x675e, 0x6748, 0x6769, 0x67a5,
-  0x6787, 0x676a, 0x6773, 0x6798, 0x67a7, 0x6775, 0x67a8, 0x679e,
-  0x67ad, 0x678b, 0x6777, 0x677c, 0x67f0, 0x6809, 0x67d8, 0x680a,
-  0x67e9, 0x67b0, 0x680c, 0x67d9, 0x67b5, 0x67da, 0x67b3, 0x67dd,
-  0x6800, 0x67c3, 0x67b8, 0x67e2, 0x680e, 0x67c1, 0x67fd, 0x6832,
-  0x6833, 0x6860, 0x6861, 0x684e, 0x6862, 0x6844, 0x6864, 0x6883,
-  0x681d, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683e, 0x684a,
-  0x6849, 0x6829, 0x68b5, 0x688f, 0x6874, 0x6877, 0x6893, 0x686b,
-  0x68c2, 0x696e, 0x68fc, 0x691f, 0x6920, 0x68f9,
-  /* 0xe9 */
-  0x9527, 0x9533, 0x953d, 0x9543, 0x9548, 0x954b, 0x9555, 0x955a,
-  0x9560, 0x956e, 0x9574, 0x9575, 0x9577, 0x9578, 0x9579, 0x957a,
-  0x957b, 0x957c, 0x957d, 0x957e, 0x9580, 0x9581, 0x9582, 0x9583,
-  0x9584, 0x9585, 0x9586, 0x9587, 0x9588, 0x9589, 0x958a, 0x958b,
-  0x958c, 0x958d, 0x958e, 0x958f, 0x9590, 0x9591, 0x9592, 0x9593,
-  0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, 0x959a, 0x959b,
-  0x959c, 0x959d, 0x959e, 0x959f, 0x95a0, 0x95a1, 0x95a2, 0x95a3,
-  0x95a4, 0x95a5, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0x95aa, 0x95ab,
-  0x95ac, 0x95ad, 0x95ae, 0x95af, 0x95b0, 0x95b1, 0x95b2, 0x95b3,
-  0x95b4, 0x95b5, 0x95b6, 0x95b7, 0x95b8, 0x95b9, 0x95ba, 0x95bb,
-  0x95bc, 0x95bd, 0x95be, 0x95bf, 0x95c0, 0x95c1, 0x95c2, 0x95c3,
-  0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0x95ca, 0x95cb,
-  0x6924, 0x68f0, 0x690b, 0x6901, 0x6957, 0x68e3, 0x6910, 0x6971,
-  0x6939, 0x6960, 0x6942, 0x695d, 0x6984, 0x696b, 0x6980, 0x6998,
-  0x6978, 0x6934, 0x69cc, 0x6987, 0x6988, 0x69ce, 0x6989, 0x6966,
-  0x6963, 0x6979, 0x699b, 0x69a7, 0x69bb, 0x69ab, 0x69ad, 0x69d4,
-  0x69b1, 0x69c1, 0x69ca, 0x69df, 0x6995, 0x69e0, 0x698d, 0x69ff,
-  0x6a2f, 0x69ed, 0x6a17, 0x6a18, 0x6a65, 0x69f2, 0x6a44, 0x6a3e,
-  0x6aa0, 0x6a50, 0x6a5b, 0x6a35, 0x6a8e, 0x6a79, 0x6a3d, 0x6a28,
-  0x6a58, 0x6a7c, 0x6a91, 0x6a90, 0x6aa9, 0x6a97, 0x6aab, 0x7337,
-  0x7352, 0x6b81, 0x6b82, 0x6b87, 0x6b84, 0x6b92, 0x6b93, 0x6b8d,
-  0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x8f6b, 0x8f6d, 0x8f71, 0x8f72,
-  0x8f73, 0x8f75, 0x8f76, 0x8f78, 0x8f77, 0x8f79, 0x8f7a, 0x8f7c,
-  0x8f7e, 0x8f81, 0x8f82, 0x8f84, 0x8f87, 0x8f8b,
-  /* 0xea */
-  0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, 0x95d3,
-  0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, 0x95db,
-  0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, 0x95e3,
-  0x95e4, 0x95e5, 0x95e6, 0x95e7, 0x95ec, 0x95ff, 0x9607, 0x9613,
-  0x9618, 0x961b, 0x961e, 0x9620, 0x9623, 0x9624, 0x9625, 0x9626,
-  0x9627, 0x9628, 0x9629, 0x962b, 0x962c, 0x962d, 0x962f, 0x9630,
-  0x9637, 0x9638, 0x9639, 0x963a, 0x963e, 0x9641, 0x9643, 0x964a,
-  0x964e, 0x964f, 0x9651, 0x9652, 0x9653, 0x9656, 0x9657, 0x9658,
-  0x9659, 0x965a, 0x965c, 0x965d, 0x965e, 0x9660, 0x9663, 0x9665,
-  0x9666, 0x966b, 0x966d, 0x966e, 0x966f, 0x9670, 0x9671, 0x9673,
-  0x9678, 0x9679, 0x967a, 0x967b, 0x967c, 0x967d, 0x967e, 0x967f,
-  0x9680, 0x9681, 0x9682, 0x9683, 0x9684, 0x9687, 0x9689, 0x968a,
-  0x8f8d, 0x8f8e, 0x8f8f, 0x8f98, 0x8f9a, 0x8ece, 0x620b, 0x6217,
-  0x621b, 0x621f, 0x6222, 0x6221, 0x6225, 0x6224, 0x622c, 0x81e7,
-  0x74ef, 0x74f4, 0x74ff, 0x750f, 0x7511, 0x7513, 0x6534, 0x65ee,
-  0x65ef, 0x65f0, 0x660a, 0x6619, 0x6772, 0x6603, 0x6615, 0x6600,
-  0x7085, 0x66f7, 0x661d, 0x6634, 0x6631, 0x6636, 0x6635, 0x8006,
-  0x665f, 0x6654, 0x6641, 0x664f, 0x6656, 0x6661, 0x6657, 0x6677,
-  0x6684, 0x668c, 0x66a7, 0x669d, 0x66be, 0x66db, 0x66dc, 0x66e6,
-  0x66e9, 0x8d32, 0x8d33, 0x8d36, 0x8d3b, 0x8d3d, 0x8d40, 0x8d45,
-  0x8d46, 0x8d48, 0x8d49, 0x8d47, 0x8d4d, 0x8d55, 0x8d59, 0x89c7,
-  0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x726e,
-  0x729f, 0x725d, 0x7266, 0x726f, 0x727e, 0x727f, 0x7284, 0x728b,
-  0x728d, 0x728f, 0x7292, 0x6308, 0x6332, 0x63b0,
-  /* 0xeb */
-  0x968c, 0x968e, 0x9691, 0x9692, 0x9693, 0x9695, 0x9696, 0x969a,
-  0x969b, 0x969d, 0x969e, 0x969f, 0x96a0, 0x96a1, 0x96a2, 0x96a3,
-  0x96a4, 0x96a5, 0x96a6, 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac,
-  0x96ad, 0x96ae, 0x96af, 0x96b1, 0x96b2, 0x96b4, 0x96b5, 0x96b7,
-  0x96b8, 0x96ba, 0x96bb, 0x96bf, 0x96c2, 0x96c3, 0x96c8, 0x96ca,
-  0x96cb, 0x96d0, 0x96d1, 0x96d3, 0x96d4, 0x96d6, 0x96d7, 0x96d8,
-  0x96d9, 0x96da, 0x96db, 0x96dc, 0x96dd, 0x96de, 0x96df, 0x96e1,
-  0x96e2, 0x96e3, 0x96e4, 0x96e5, 0x96e6, 0x96e7, 0x96eb, 0x96ec,
-  0x96ed, 0x96ee, 0x96f0, 0x96f1, 0x96f2, 0x96f4, 0x96f5, 0x96f8,
-  0x96fa, 0x96fb, 0x96fc, 0x96fd, 0x96ff, 0x9702, 0x9703, 0x9705,
-  0x970a, 0x970b, 0x970c, 0x9710, 0x9711, 0x9712, 0x9714, 0x9715,
-  0x9717, 0x9718, 0x9719, 0x971a, 0x971b, 0x971d, 0x971f, 0x9720,
-  0x643f, 0x64d8, 0x8004, 0x6bea, 0x6bf3, 0x6bfd, 0x6bf5, 0x6bf9,
-  0x6c05, 0x6c07, 0x6c06, 0x6c0d, 0x6c15, 0x6c18, 0x6c19, 0x6c1a,
-  0x6c21, 0x6c29, 0x6c24, 0x6c2a, 0x6c32, 0x6535, 0x6555, 0x656b,
-  0x724d, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809f, 0x809c,
-  0x8093, 0x80bc, 0x670a, 0x80bd, 0x80b1, 0x80ab, 0x80ad, 0x80b4,
-  0x80b7, 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80db, 0x80c2, 0x80c4,
-  0x80d9, 0x80cd, 0x80d7, 0x6710, 0x80dd, 0x80eb, 0x80f1, 0x80f4,
-  0x80ed, 0x810d, 0x810e, 0x80f2, 0x80fc, 0x6715, 0x8112, 0x8c5a,
-  0x8136, 0x811e, 0x812c, 0x8118, 0x8132, 0x8148, 0x814c, 0x8153,
-  0x8174, 0x8159, 0x815a, 0x8171, 0x8160, 0x8169, 0x817c, 0x817d,
-  0x816d, 0x8167, 0x584d, 0x5ab5, 0x8188, 0x8182, 0x8191, 0x6ed5,
-  0x81a3, 0x81aa, 0x81cc, 0x6726, 0x81ca, 0x81bb,
-  /* 0xec */
-  0x9721, 0x9722, 0x9723, 0x9724, 0x9725, 0x9726, 0x9727, 0x9728,
-  0x9729, 0x972b, 0x972c, 0x972e, 0x972f, 0x9731, 0x9733, 0x9734,
-  0x9735, 0x9736, 0x9737, 0x973a, 0x973b, 0x973c, 0x973d, 0x973f,
-  0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747,
-  0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, 0x974e, 0x974f,
-  0x9750, 0x9751, 0x9754, 0x9755, 0x9757, 0x9758, 0x975a, 0x975c,
-  0x975d, 0x975f, 0x9763, 0x9764, 0x9766, 0x9767, 0x9768, 0x976a,
-  0x976b, 0x976c, 0x976d, 0x976e, 0x976f, 0x9770, 0x9771, 0x9772,
-  0x9775, 0x9777, 0x9778, 0x9779, 0x977a, 0x977b, 0x977d, 0x977e,
-  0x977f, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9786, 0x9787,
-  0x9788, 0x9789, 0x978a, 0x978c, 0x978e, 0x978f, 0x9790, 0x9793,
-  0x9795, 0x9796, 0x9797, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d,
-  0x81c1, 0x81a6, 0x6b24, 0x6b37, 0x6b39, 0x6b43, 0x6b46, 0x6b59,
-  0x98d1, 0x98d2, 0x98d3, 0x98d5, 0x98d9, 0x98da, 0x6bb3, 0x5f40,
-  0x6bc2, 0x89f3, 0x6590, 0x9f51, 0x6593, 0x65bc, 0x65c6, 0x65c4,
-  0x65c3, 0x65cc, 0x65ce, 0x65d2, 0x65d6, 0x7080, 0x709c, 0x7096,
-  0x709d, 0x70bb, 0x70c0, 0x70b7, 0x70ab, 0x70b1, 0x70e8, 0x70ca,
-  0x7110, 0x7113, 0x7116, 0x712f, 0x7131, 0x7173, 0x715c, 0x7168,
-  0x7145, 0x7172, 0x714a, 0x7178, 0x717a, 0x7198, 0x71b3, 0x71b5,
-  0x71a8, 0x71a0, 0x71e0, 0x71d4, 0x71e7, 0x71f9, 0x721d, 0x7228,
-  0x706c, 0x7118, 0x7166, 0x71b9, 0x623e, 0x623d, 0x6243, 0x6248,
-  0x6249, 0x793b, 0x7940, 0x7946, 0x7949, 0x795b, 0x795c, 0x7953,
-  0x795a, 0x7962, 0x7957, 0x7960, 0x796f, 0x7967, 0x797a, 0x7985,
-  0x798a, 0x799a, 0x79a7, 0x79b3, 0x5fd1, 0x5fd0,
-  /* 0xed */
-  0x979e, 0x979f, 0x97a1, 0x97a2, 0x97a4, 0x97a5, 0x97a6, 0x97a7,
-  0x97a8, 0x97a9, 0x97aa, 0x97ac, 0x97ae, 0x97b0, 0x97b1, 0x97b3,
-  0x97b5, 0x97b6, 0x97b7, 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc,
-  0x97bd, 0x97be, 0x97bf, 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4,
-  0x97c5, 0x97c6, 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc,
-  0x97cd, 0x97ce, 0x97cf, 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4,
-  0x97d5, 0x97d6, 0x97d7, 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc,
-  0x97dd, 0x97de, 0x97df, 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x97e4,
-  0x97e5, 0x97e8, 0x97ee, 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f4,
-  0x97f7, 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0x97fc, 0x97fd, 0x97fe,
-  0x97ff, 0x9800, 0x9801, 0x9802, 0x9803, 0x9804, 0x9805, 0x9806,
-  0x9807, 0x9808, 0x9809, 0x980a, 0x980b, 0x980c, 0x980d, 0x980e,
-  0x603c, 0x605d, 0x605a, 0x6067, 0x6041, 0x6059, 0x6063, 0x60ab,
-  0x6106, 0x610d, 0x615d, 0x61a9, 0x619d, 0x61cb, 0x61d1, 0x6206,
-  0x8080, 0x807f, 0x6c93, 0x6cf6, 0x6dfc, 0x77f6, 0x77f8, 0x7800,
-  0x7809, 0x7817, 0x7818, 0x7811, 0x65ab, 0x782d, 0x781c, 0x781d,
-  0x7839, 0x783a, 0x783b, 0x781f, 0x783c, 0x7825, 0x782c, 0x7823,
-  0x7829, 0x784e, 0x786d, 0x7856, 0x7857, 0x7826, 0x7850, 0x7847,
-  0x784c, 0x786a, 0x789b, 0x7893, 0x789a, 0x7887, 0x789c, 0x78a1,
-  0x78a3, 0x78b2, 0x78b9, 0x78a5, 0x78d4, 0x78d9, 0x78c9, 0x78ec,
-  0x78f2, 0x7905, 0x78f4, 0x7913, 0x7924, 0x791e, 0x7934, 0x9f9b,
-  0x9ef9, 0x9efb, 0x9efc, 0x76f1, 0x7704, 0x770d, 0x76f9, 0x7707,
-  0x7708, 0x771a, 0x7722, 0x7719, 0x772d, 0x7726, 0x7735, 0x7738,
-  0x7750, 0x7751, 0x7747, 0x7743, 0x775a, 0x7768,
-  /* 0xee */
-  0x980f, 0x9810, 0x9811, 0x9812, 0x9813, 0x9814, 0x9815, 0x9816,
-  0x9817, 0x9818, 0x9819, 0x981a, 0x981b, 0x981c, 0x981d, 0x981e,
-  0x981f, 0x9820, 0x9821, 0x9822, 0x9823, 0x9824, 0x9825, 0x9826,
-  0x9827, 0x9828, 0x9829, 0x982a, 0x982b, 0x982c, 0x982d, 0x982e,
-  0x982f, 0x9830, 0x9831, 0x9832, 0x9833, 0x9834, 0x9835, 0x9836,
-  0x9837, 0x9838, 0x9839, 0x983a, 0x983b, 0x983c, 0x983d, 0x983e,
-  0x983f, 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846,
-  0x9847, 0x9848, 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x984e,
-  0x984f, 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856,
-  0x9857, 0x9858, 0x9859, 0x985a, 0x985b, 0x985c, 0x985d, 0x985e,
-  0x985f, 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866,
-  0x9867, 0x9868, 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e,
-  0x7762, 0x7765, 0x777f, 0x778d, 0x777d, 0x7780, 0x778c, 0x7791,
-  0x779f, 0x77a0, 0x77b0, 0x77b5, 0x77bd, 0x753a, 0x7540, 0x754e,
-  0x754b, 0x7548, 0x755b, 0x7572, 0x7579, 0x7583, 0x7f58, 0x7f61,
-  0x7f5f, 0x8a48, 0x7f68, 0x7f74, 0x7f71, 0x7f79, 0x7f81, 0x7f7e,
-  0x76cd, 0x76e5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948b, 0x948a,
-  0x948c, 0x948d, 0x948f, 0x9490, 0x9494, 0x9497, 0x9495, 0x949a,
-  0x949b, 0x949c, 0x94a3, 0x94a4, 0x94ab, 0x94aa, 0x94ad, 0x94ac,
-  0x94af, 0x94b0, 0x94b2, 0x94b4, 0x94b6, 0x94b7, 0x94b8, 0x94b9,
-  0x94ba, 0x94bc, 0x94bd, 0x94bf, 0x94c4, 0x94c8, 0x94c9, 0x94ca,
-  0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, 0x94d5,
-  0x94d6, 0x94d7, 0x94d9, 0x94d8, 0x94db, 0x94de, 0x94df, 0x94e0,
-  0x94e2, 0x94e4, 0x94e5, 0x94e7, 0x94e8, 0x94ea,
-  /* 0xef */
-  0x986f, 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x988b, 0x988e,
-  0x9892, 0x9895, 0x9899, 0x98a3, 0x98a8, 0x98a9, 0x98aa, 0x98ab,
-  0x98ac, 0x98ad, 0x98ae, 0x98af, 0x98b0, 0x98b1, 0x98b2, 0x98b3,
-  0x98b4, 0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9, 0x98ba, 0x98bb,
-  0x98bc, 0x98bd, 0x98be, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3,
-  0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0x98cb,
-  0x98cc, 0x98cd, 0x98cf, 0x98d0, 0x98d4, 0x98d6, 0x98d7, 0x98db,
-  0x98dc, 0x98dd, 0x98e0, 0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x98e5,
-  0x98e6, 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, 0x98ef,
-  0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0x98f7,
-  0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x98fe, 0x98ff,
-  0x9900, 0x9901, 0x9902, 0x9903, 0x9904, 0x9905, 0x9906, 0x9907,
-  0x94e9, 0x94eb, 0x94ee, 0x94ef, 0x94f3, 0x94f4, 0x94f5, 0x94f7,
-  0x94f9, 0x94fc, 0x94fd, 0x94ff, 0x9503, 0x9502, 0x9506, 0x9507,
-  0x9509, 0x950a, 0x950d, 0x950e, 0x950f, 0x9512, 0x9513, 0x9514,
-  0x9515, 0x9516, 0x9518, 0x951b, 0x951d, 0x951e, 0x951f, 0x9522,
-  0x952a, 0x952b, 0x9529, 0x952c, 0x9531, 0x9532, 0x9534, 0x9536,
-  0x9537, 0x9538, 0x953c, 0x953e, 0x953f, 0x9542, 0x9535, 0x9544,
-  0x9545, 0x9546, 0x9549, 0x954c, 0x954e, 0x954f, 0x9552, 0x9553,
-  0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955b, 0x955e, 0x955f,
-  0x955d, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568,
-  0x9569, 0x956a, 0x956b, 0x956c, 0x956f, 0x9571, 0x9572, 0x9573,
-  0x953a, 0x77e7, 0x77ec, 0x96c9, 0x79d5, 0x79ed, 0x79e3, 0x79eb,
-  0x7a06, 0x5d47, 0x7a03, 0x7a02, 0x7a1e, 0x7a14,
-  /* 0xf0 */
-  0x9908, 0x9909, 0x990a, 0x990b, 0x990c, 0x990e, 0x990f, 0x9911,
-  0x9912, 0x9913, 0x9914, 0x9915, 0x9916, 0x9917, 0x9918, 0x9919,
-  0x991a, 0x991b, 0x991c, 0x991d, 0x991e, 0x991f, 0x9920, 0x9921,
-  0x9922, 0x9923, 0x9924, 0x9925, 0x9926, 0x9927, 0x9928, 0x9929,
-  0x992a, 0x992b, 0x992c, 0x992d, 0x992f, 0x9930, 0x9931, 0x9932,
-  0x9933, 0x9934, 0x9935, 0x9936, 0x9937, 0x9938, 0x9939, 0x993a,
-  0x993b, 0x993c, 0x993d, 0x993e, 0x993f, 0x9940, 0x9941, 0x9942,
-  0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0x994a,
-  0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, 0x9952,
-  0x9953, 0x9956, 0x9957, 0x9958, 0x9959, 0x995a, 0x995b, 0x995c,
-  0x995d, 0x995e, 0x995f, 0x9960, 0x9961, 0x9962, 0x9964, 0x9966,
-  0x9973, 0x9978, 0x9979, 0x997b, 0x997e, 0x9982, 0x9983, 0x9989,
-  0x7a39, 0x7a37, 0x7a51, 0x9ecf, 0x99a5, 0x7a70, 0x7688, 0x768e,
-  0x7693, 0x7699, 0x76a4, 0x74de, 0x74e0, 0x752c, 0x9e20, 0x9e22,
-  0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e32, 0x9e31, 0x9e36,
-  0x9e38, 0x9e37, 0x9e39, 0x9e3a, 0x9e3e, 0x9e41, 0x9e42, 0x9e44,
-  0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4b, 0x9e4c, 0x9e4e, 0x9e51,
-  0x9e55, 0x9e57, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5e, 0x9e63, 0x9e66,
-  0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e71, 0x9e6d,
-  0x9e73, 0x7592, 0x7594, 0x7596, 0x75a0, 0x759d, 0x75ac, 0x75a3,
-  0x75b3, 0x75b4, 0x75b8, 0x75c4, 0x75b1, 0x75b0, 0x75c3, 0x75c2,
-  0x75d6, 0x75cd, 0x75e3, 0x75e8, 0x75e6, 0x75e4, 0x75eb, 0x75e7,
-  0x7603, 0x75f1, 0x75fc, 0x75ff, 0x7610, 0x7600, 0x7605, 0x760c,
-  0x7617, 0x760a, 0x7625, 0x7618, 0x7615, 0x7619,
-  /* 0xf1 */
-  0x998c, 0x998e, 0x999a, 0x999b, 0x999c, 0x999d, 0x999e, 0x999f,
-  0x99a0, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a6, 0x99a7, 0x99a9,
-  0x99aa, 0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x99b0, 0x99b1,
-  0x99b2, 0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0x99b8, 0x99b9,
-  0x99ba, 0x99bb, 0x99bc, 0x99bd, 0x99be, 0x99bf, 0x99c0, 0x99c1,
-  0x99c2, 0x99c3, 0x99c4, 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9,
-  0x99ca, 0x99cb, 0x99cc, 0x99cd, 0x99ce, 0x99cf, 0x99d0, 0x99d1,
-  0x99d2, 0x99d3, 0x99d4, 0x99d5, 0x99d6, 0x99d7, 0x99d8, 0x99d9,
-  0x99da, 0x99db, 0x99dc, 0x99dd, 0x99de, 0x99df, 0x99e0, 0x99e1,
-  0x99e2, 0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7, 0x99e8, 0x99e9,
-  0x99ea, 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0x99f0, 0x99f1,
-  0x99f2, 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, 0x99f8, 0x99f9,
-  0x761b, 0x763c, 0x7622, 0x7620, 0x7640, 0x762d, 0x7630, 0x763f,
-  0x7635, 0x7643, 0x763e, 0x7633, 0x764d, 0x765e, 0x7654, 0x765c,
-  0x7656, 0x766b, 0x766f, 0x7fca, 0x7ae6, 0x7a78, 0x7a79, 0x7a80,
-  0x7a86, 0x7a88, 0x7a95, 0x7aa6, 0x7aa0, 0x7aac, 0x7aa8, 0x7aad,
-  0x7ab3, 0x8864, 0x8869, 0x8872, 0x887d, 0x887f, 0x8882, 0x88a2,
-  0x88c6, 0x88b7, 0x88bc, 0x88c9, 0x88e2, 0x88ce, 0x88e3, 0x88e5,
-  0x88f1, 0x891a, 0x88fc, 0x88e8, 0x88fe, 0x88f0, 0x8921, 0x8919,
-  0x8913, 0x891b, 0x890a, 0x8934, 0x892b, 0x8936, 0x8941, 0x8966,
-  0x897b, 0x758b, 0x80e5, 0x76b2, 0x76b4, 0x77dc, 0x8012, 0x8014,
-  0x8016, 0x801c, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, 0x8029,
-  0x8028, 0x8031, 0x800b, 0x8035, 0x8043, 0x8046, 0x804d, 0x8052,
-  0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883,
-  /* 0xf2 */
-  0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x99ff, 0x9a00, 0x9a01,
-  0x9a02, 0x9a03, 0x9a04, 0x9a05, 0x9a06, 0x9a07, 0x9a08, 0x9a09,
-  0x9a0a, 0x9a0b, 0x9a0c, 0x9a0d, 0x9a0e, 0x9a0f, 0x9a10, 0x9a11,
-  0x9a12, 0x9a13, 0x9a14, 0x9a15, 0x9a16, 0x9a17, 0x9a18, 0x9a19,
-  0x9a1a, 0x9a1b, 0x9a1c, 0x9a1d, 0x9a1e, 0x9a1f, 0x9a20, 0x9a21,
-  0x9a22, 0x9a23, 0x9a24, 0x9a25, 0x9a26, 0x9a27, 0x9a28, 0x9a29,
-  0x9a2a, 0x9a2b, 0x9a2c, 0x9a2d, 0x9a2e, 0x9a2f, 0x9a30, 0x9a31,
-  0x9a32, 0x9a33, 0x9a34, 0x9a35, 0x9a36, 0x9a37, 0x9a38, 0x9a39,
-  0x9a3a, 0x9a3b, 0x9a3c, 0x9a3d, 0x9a3e, 0x9a3f, 0x9a40, 0x9a41,
-  0x9a42, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0x9a47, 0x9a48, 0x9a49,
-  0x9a4a, 0x9a4b, 0x9a4c, 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51,
-  0x9a52, 0x9a53, 0x9a54, 0x9a55, 0x9a56, 0x9a57, 0x9a58, 0x9a59,
-  0x9889, 0x988c, 0x988d, 0x988f, 0x9894, 0x989a, 0x989b, 0x989e,
-  0x989f, 0x98a1, 0x98a2, 0x98a5, 0x98a6, 0x864d, 0x8654, 0x866c,
-  0x866e, 0x867f, 0x867a, 0x867c, 0x867b, 0x86a8, 0x868d, 0x868b,
-  0x86ac, 0x869d, 0x86a7, 0x86a3, 0x86aa, 0x8693, 0x86a9, 0x86b6,
-  0x86c4, 0x86b5, 0x86ce, 0x86b0, 0x86ba, 0x86b1, 0x86af, 0x86c9,
-  0x86cf, 0x86b4, 0x86e9, 0x86f1, 0x86f2, 0x86ed, 0x86f3, 0x86d0,
-  0x8713, 0x86de, 0x86f4, 0x86df, 0x86d8, 0x86d1, 0x8703, 0x8707,
-  0x86f8, 0x8708, 0x870a, 0x870d, 0x8709, 0x8723, 0x873b, 0x871e,
-  0x8725, 0x872e, 0x871a, 0x873e, 0x8748, 0x8734, 0x8731, 0x8729,
-  0x8737, 0x873f, 0x8782, 0x8722, 0x877d, 0x877e, 0x877b, 0x8760,
-  0x8770, 0x874c, 0x876e, 0x878b, 0x8753, 0x8763, 0x877c, 0x8764,
-  0x8759, 0x8765, 0x8793, 0x87af, 0x87a8, 0x87d2,
-  /* 0xf3 */
-  0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, 0x9a5f, 0x9a60, 0x9a61,
-  0x9a62, 0x9a63, 0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69,
-  0x9a6a, 0x9a6b, 0x9a72, 0x9a83, 0x9a89, 0x9a8d, 0x9a8e, 0x9a94,
-  0x9a95, 0x9a99, 0x9aa6, 0x9aa9, 0x9aaa, 0x9aab, 0x9aac, 0x9aad,
-  0x9aae, 0x9aaf, 0x9ab2, 0x9ab3, 0x9ab4, 0x9ab5, 0x9ab9, 0x9abb,
-  0x9abd, 0x9abe, 0x9abf, 0x9ac3, 0x9ac4, 0x9ac6, 0x9ac7, 0x9ac8,
-  0x9ac9, 0x9aca, 0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad2, 0x9ad4,
-  0x9ad5, 0x9ad6, 0x9ad7, 0x9ad9, 0x9ada, 0x9adb, 0x9adc, 0x9add,
-  0x9ade, 0x9ae0, 0x9ae2, 0x9ae3, 0x9ae4, 0x9ae5, 0x9ae7, 0x9ae8,
-  0x9ae9, 0x9aea, 0x9aec, 0x9aee, 0x9af0, 0x9af1, 0x9af2, 0x9af3,
-  0x9af4, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9afa, 0x9afc, 0x9afd,
-  0x9afe, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b04, 0x9b05, 0x9b06,
-  0x87c6, 0x8788, 0x8785, 0x87ad, 0x8797, 0x8783, 0x87ab, 0x87e5,
-  0x87ac, 0x87b5, 0x87b3, 0x87cb, 0x87d3, 0x87bd, 0x87d1, 0x87c0,
-  0x87ca, 0x87db, 0x87ea, 0x87e0, 0x87ee, 0x8816, 0x8813, 0x87fe,
-  0x880a, 0x881b, 0x8821, 0x8839, 0x883c, 0x7f36, 0x7f42, 0x7f44,
-  0x7f45, 0x8210, 0x7afa, 0x7afd, 0x7b08, 0x7b03, 0x7b04, 0x7b15,
-  0x7b0a, 0x7b2b, 0x7b0f, 0x7b47, 0x7b38, 0x7b2a, 0x7b19, 0x7b2e,
-  0x7b31, 0x7b20, 0x7b25, 0x7b24, 0x7b33, 0x7b3e, 0x7b1e, 0x7b58,
-  0x7b5a, 0x7b45, 0x7b75, 0x7b4c, 0x7b5d, 0x7b60, 0x7b6e, 0x7b7b,
-  0x7b62, 0x7b72, 0x7b71, 0x7b90, 0x7ba6, 0x7ba7, 0x7bb8, 0x7bac,
-  0x7b9d, 0x7ba8, 0x7b85, 0x7baa, 0x7b9c, 0x7ba2, 0x7bab, 0x7bb4,
-  0x7bd1, 0x7bc1, 0x7bcc, 0x7bdd, 0x7bda, 0x7be5, 0x7be6, 0x7bea,
-  0x7c0c, 0x7bfe, 0x7bfc, 0x7c0f, 0x7c16, 0x7c0b,
-  /* 0xf4 */
-  0x9b07, 0x9b09, 0x9b0a, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e, 0x9b10,
-  0x9b11, 0x9b12, 0x9b14, 0x9b15, 0x9b16, 0x9b17, 0x9b18, 0x9b19,
-  0x9b1a, 0x9b1b, 0x9b1c, 0x9b1d, 0x9b1e, 0x9b20, 0x9b21, 0x9b22,
-  0x9b24, 0x9b25, 0x9b26, 0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2b,
-  0x9b2c, 0x9b2d, 0x9b2e, 0x9b30, 0x9b31, 0x9b33, 0x9b34, 0x9b35,
-  0x9b36, 0x9b37, 0x9b38, 0x9b39, 0x9b3a, 0x9b3d, 0x9b3e, 0x9b3f,
-  0x9b40, 0x9b46, 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4e, 0x9b50, 0x9b52,
-  0x9b53, 0x9b55, 0x9b56, 0x9b57, 0x9b58, 0x9b59, 0x9b5a, 0x9b5b,
-  0x9b5c, 0x9b5d, 0x9b5e, 0x9b5f, 0x9b60, 0x9b61, 0x9b62, 0x9b63,
-  0x9b64, 0x9b65, 0x9b66, 0x9b67, 0x9b68, 0x9b69, 0x9b6a, 0x9b6b,
-  0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, 0x9b70, 0x9b71, 0x9b72, 0x9b73,
-  0x9b74, 0x9b75, 0x9b76, 0x9b77, 0x9b78, 0x9b79, 0x9b7a, 0x9b7b,
-  0x7c1f, 0x7c2a, 0x7c26, 0x7c38, 0x7c41, 0x7c40, 0x81fe, 0x8201,
-  0x8202, 0x8204, 0x81ec, 0x8844, 0x8221, 0x8222, 0x8223, 0x822d,
-  0x822f, 0x8228, 0x822b, 0x8238, 0x823b, 0x8233, 0x8234, 0x823e,
-  0x8244, 0x8249, 0x824b, 0x824f, 0x825a, 0x825f, 0x8268, 0x887e,
-  0x8885, 0x8888, 0x88d8, 0x88df, 0x895e, 0x7f9d, 0x7f9f, 0x7fa7,
-  0x7faf, 0x7fb0, 0x7fb2, 0x7c7c, 0x6549, 0x7c91, 0x7c9d, 0x7c9c,
-  0x7c9e, 0x7ca2, 0x7cb2, 0x7cbc, 0x7cbd, 0x7cc1, 0x7cc7, 0x7ccc,
-  0x7ccd, 0x7cc8, 0x7cc5, 0x7cd7, 0x7ce8, 0x826e, 0x66a8, 0x7fbf,
-  0x7fce, 0x7fd5, 0x7fe5, 0x7fe1, 0x7fe6, 0x7fe9, 0x7fee, 0x7ff3,
-  0x7cf8, 0x7d77, 0x7da6, 0x7dae, 0x7e47, 0x7e9b, 0x9eb8, 0x9eb4,
-  0x8d73, 0x8d84, 0x8d94, 0x8d91, 0x8db1, 0x8d67, 0x8d6d, 0x8c47,
-  0x8c49, 0x914a, 0x9150, 0x914e, 0x914f, 0x9164,
-  /* 0xf5 */
-  0x9b7c, 0x9b7d, 0x9b7e, 0x9b7f, 0x9b80, 0x9b81, 0x9b82, 0x9b83,
-  0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b88, 0x9b89, 0x9b8a, 0x9b8b,
-  0x9b8c, 0x9b8d, 0x9b8e, 0x9b8f, 0x9b90, 0x9b91, 0x9b92, 0x9b93,
-  0x9b94, 0x9b95, 0x9b96, 0x9b97, 0x9b98, 0x9b99, 0x9b9a, 0x9b9b,
-  0x9b9c, 0x9b9d, 0x9b9e, 0x9b9f, 0x9ba0, 0x9ba1, 0x9ba2, 0x9ba3,
-  0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0x9ba8, 0x9ba9, 0x9baa, 0x9bab,
-  0x9bac, 0x9bad, 0x9bae, 0x9baf, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3,
-  0x9bb4, 0x9bb5, 0x9bb6, 0x9bb7, 0x9bb8, 0x9bb9, 0x9bba, 0x9bbb,
-  0x9bbc, 0x9bbd, 0x9bbe, 0x9bbf, 0x9bc0, 0x9bc1, 0x9bc2, 0x9bc3,
-  0x9bc4, 0x9bc5, 0x9bc6, 0x9bc7, 0x9bc8, 0x9bc9, 0x9bca, 0x9bcb,
-  0x9bcc, 0x9bcd, 0x9bce, 0x9bcf, 0x9bd0, 0x9bd1, 0x9bd2, 0x9bd3,
-  0x9bd4, 0x9bd5, 0x9bd6, 0x9bd7, 0x9bd8, 0x9bd9, 0x9bda, 0x9bdb,
-  0x9162, 0x9161, 0x9170, 0x9169, 0x916f, 0x917d, 0x917e, 0x9172,
-  0x9174, 0x9179, 0x918c, 0x9185, 0x9190, 0x918d, 0x9191, 0x91a2,
-  0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b5, 0x91b4, 0x91ba,
-  0x8c55, 0x9e7e, 0x8db8, 0x8deb, 0x8e05, 0x8e59, 0x8e69, 0x8db5,
-  0x8dbf, 0x8dbc, 0x8dba, 0x8dc4, 0x8dd6, 0x8dd7, 0x8dda, 0x8dde,
-  0x8dce, 0x8dcf, 0x8ddb, 0x8dc6, 0x8dec, 0x8df7, 0x8df8, 0x8de3,
-  0x8df9, 0x8dfb, 0x8de4, 0x8e09, 0x8dfd, 0x8e14, 0x8e1d, 0x8e1f,
-  0x8e2c, 0x8e2e, 0x8e23, 0x8e2f, 0x8e3a, 0x8e40, 0x8e39, 0x8e35,
-  0x8e3d, 0x8e31, 0x8e49, 0x8e41, 0x8e42, 0x8e51, 0x8e52, 0x8e4a,
-  0x8e70, 0x8e76, 0x8e7c, 0x8e6f, 0x8e74, 0x8e85, 0x8e8f, 0x8e94,
-  0x8e90, 0x8e9c, 0x8e9e, 0x8c78, 0x8c82, 0x8c8a, 0x8c85, 0x8c98,
-  0x8c94, 0x659b, 0x89d6, 0x89de, 0x89da, 0x89dc,
-  /* 0xf6 */
-  0x9bdc, 0x9bdd, 0x9bde, 0x9bdf, 0x9be0, 0x9be1, 0x9be2, 0x9be3,
-  0x9be4, 0x9be5, 0x9be6, 0x9be7, 0x9be8, 0x9be9, 0x9bea, 0x9beb,
-  0x9bec, 0x9bed, 0x9bee, 0x9bef, 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3,
-  0x9bf4, 0x9bf5, 0x9bf6, 0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb,
-  0x9bfc, 0x9bfd, 0x9bfe, 0x9bff, 0x9c00, 0x9c01, 0x9c02, 0x9c03,
-  0x9c04, 0x9c05, 0x9c06, 0x9c07, 0x9c08, 0x9c09, 0x9c0a, 0x9c0b,
-  0x9c0c, 0x9c0d, 0x9c0e, 0x9c0f, 0x9c10, 0x9c11, 0x9c12, 0x9c13,
-  0x9c14, 0x9c15, 0x9c16, 0x9c17, 0x9c18, 0x9c19, 0x9c1a, 0x9c1b,
-  0x9c1c, 0x9c1d, 0x9c1e, 0x9c1f, 0x9c20, 0x9c21, 0x9c22, 0x9c23,
-  0x9c24, 0x9c25, 0x9c26, 0x9c27, 0x9c28, 0x9c29, 0x9c2a, 0x9c2b,
-  0x9c2c, 0x9c2d, 0x9c2e, 0x9c2f, 0x9c30, 0x9c31, 0x9c32, 0x9c33,
-  0x9c34, 0x9c35, 0x9c36, 0x9c37, 0x9c38, 0x9c39, 0x9c3a, 0x9c3b,
-  0x89e5, 0x89eb, 0x89ef, 0x8a3e, 0x8b26, 0x9753, 0x96e9, 0x96f3,
-  0x96ef, 0x9706, 0x9701, 0x9708, 0x970f, 0x970e, 0x972a, 0x972d,
-  0x9730, 0x973e, 0x9f80, 0x9f83, 0x9f85, 0x9f86, 0x9f87, 0x9f88,
-  0x9f89, 0x9f8a, 0x9f8c, 0x9efe, 0x9f0b, 0x9f0d, 0x96b9, 0x96bc,
-  0x96bd, 0x96ce, 0x96d2, 0x77bf, 0x96e0, 0x928e, 0x92ae, 0x92c8,
-  0x933e, 0x936a, 0x93ca, 0x938f, 0x943e, 0x946b, 0x9c7f, 0x9c82,
-  0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x7a23, 0x9c8b, 0x9c8e, 0x9c90,
-  0x9c91, 0x9c92, 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9e, 0x9c9f,
-  0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8,
-  0x9ca9, 0x9cab, 0x9cad, 0x9cae, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3,
-  0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd,
-  0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cca, 0x9ccb,
-  /* 0xf7 */
-  0x9c3c, 0x9c3d, 0x9c3e, 0x9c3f, 0x9c40, 0x9c41, 0x9c42, 0x9c43,
-  0x9c44, 0x9c45, 0x9c46, 0x9c47, 0x9c48, 0x9c49, 0x9c4a, 0x9c4b,
-  0x9c4c, 0x9c4d, 0x9c4e, 0x9c4f, 0x9c50, 0x9c51, 0x9c52, 0x9c53,
-  0x9c54, 0x9c55, 0x9c56, 0x9c57, 0x9c58, 0x9c59, 0x9c5a, 0x9c5b,
-  0x9c5c, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c60, 0x9c61, 0x9c62, 0x9c63,
-  0x9c64, 0x9c65, 0x9c66, 0x9c67, 0x9c68, 0x9c69, 0x9c6a, 0x9c6b,
-  0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f, 0x9c70, 0x9c71, 0x9c72, 0x9c73,
-  0x9c74, 0x9c75, 0x9c76, 0x9c77, 0x9c78, 0x9c79, 0x9c7a, 0x9c7b,
-  0x9c7d, 0x9c7e, 0x9c80, 0x9c83, 0x9c84, 0x9c89, 0x9c8a, 0x9c8c,
-  0x9c8f, 0x9c93, 0x9c96, 0x9c97, 0x9c98, 0x9c99, 0x9c9d, 0x9caa,
-  0x9cac, 0x9caf, 0x9cb9, 0x9cbe, 0x9cbf, 0x9cc0, 0x9cc1, 0x9cc2,
-  0x9cc8, 0x9cc9, 0x9cd1, 0x9cd2, 0x9cda, 0x9cdb, 0x9ce0, 0x9ce1,
-  0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd3, 0x9cd4, 0x9cd5,
-  0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc, 0x9cdd, 0x9cdf, 0x9ce2, 0x977c,
-  0x9785, 0x9791, 0x9792, 0x9794, 0x97af, 0x97ab, 0x97a3, 0x97b2,
-  0x97b4, 0x9ab1, 0x9ab0, 0x9ab7, 0x9e58, 0x9ab6, 0x9aba, 0x9abc,
-  0x9ac1, 0x9ac0, 0x9ac5, 0x9ac2, 0x9acb, 0x9acc, 0x9ad1, 0x9b45,
-  0x9b43, 0x9b47, 0x9b49, 0x9b48, 0x9b4d, 0x9b51, 0x98e8, 0x990d,
-  0x992e, 0x9955, 0x9954, 0x9adf, 0x9ae1, 0x9ae6, 0x9aef, 0x9aeb,
-  0x9afb, 0x9aed, 0x9af9, 0x9b08, 0x9b0f, 0x9b13, 0x9b1f, 0x9b23,
-  0x9ebd, 0x9ebe, 0x7e3b, 0x9e82, 0x9e87, 0x9e88, 0x9e8b, 0x9e92,
-  0x93d6, 0x9e9d, 0x9e9f, 0x9edb, 0x9edc, 0x9edd, 0x9ee0, 0x9edf,
-  0x9ee2, 0x9ee9, 0x9ee7, 0x9ee5, 0x9eea, 0x9eef, 0x9f22, 0x9f2c,
-  0x9f2f, 0x9f39, 0x9f37, 0x9f3d, 0x9f3e, 0x9f44,
-  /* 0xf8 */
-  0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0x9ce9, 0x9cea,
-  0x9ceb, 0x9cec, 0x9ced, 0x9cee, 0x9cef, 0x9cf0, 0x9cf1, 0x9cf2,
-  0x9cf3, 0x9cf4, 0x9cf5, 0x9cf6, 0x9cf7, 0x9cf8, 0x9cf9, 0x9cfa,
-  0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9cff, 0x9d00, 0x9d01, 0x9d02,
-  0x9d03, 0x9d04, 0x9d05, 0x9d06, 0x9d07, 0x9d08, 0x9d09, 0x9d0a,
-  0x9d0b, 0x9d0c, 0x9d0d, 0x9d0e, 0x9d0f, 0x9d10, 0x9d11, 0x9d12,
-  0x9d13, 0x9d14, 0x9d15, 0x9d16, 0x9d17, 0x9d18, 0x9d19, 0x9d1a,
-  0x9d1b, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d1f, 0x9d20, 0x9d21, 0x9d22,
-  0x9d23, 0x9d24, 0x9d25, 0x9d26, 0x9d27, 0x9d28, 0x9d29, 0x9d2a,
-  0x9d2b, 0x9d2c, 0x9d2d, 0x9d2e, 0x9d2f, 0x9d30, 0x9d31, 0x9d32,
-  0x9d33, 0x9d34, 0x9d35, 0x9d36, 0x9d37, 0x9d38, 0x9d39, 0x9d3a,
-  0x9d3b, 0x9d3c, 0x9d3d, 0x9d3e, 0x9d3f, 0x9d40, 0x9d41, 0x9d42,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xf9 */
-  0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, 0x9d48, 0x9d49, 0x9d4a,
-  0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f, 0x9d50, 0x9d51, 0x9d52,
-  0x9d53, 0x9d54, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, 0x9d5a,
-  0x9d5b, 0x9d5c, 0x9d5d, 0x9d5e, 0x9d5f, 0x9d60, 0x9d61, 0x9d62,
-  0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, 0x9d6a,
-  0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, 0x9d72,
-  0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a,
-  0x9d7b, 0x9d7c, 0x9d7d, 0x9d7e, 0x9d7f, 0x9d80, 0x9d81, 0x9d82,
-  0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, 0x9d88, 0x9d89, 0x9d8a,
-  0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, 0x9d91, 0x9d92,
-  0x9d93, 0x9d94, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9d99, 0x9d9a,
-  0x9d9b, 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0x9da1, 0x9da2,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xfa */
-  0x9da3, 0x9da4, 0x9da5, 0x9da6, 0x9da7, 0x9da8, 0x9da9, 0x9daa,
-  0x9dab, 0x9dac, 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0x9db1, 0x9db2,
-  0x9db3, 0x9db4, 0x9db5, 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba,
-  0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2,
-  0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca,
-  0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2,
-  0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dd8, 0x9dd9, 0x9dda,
-  0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, 0x9de1, 0x9de2,
-  0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, 0x9dea,
-  0x9deb, 0x9dec, 0x9ded, 0x9dee, 0x9def, 0x9df0, 0x9df1, 0x9df2,
-  0x9df3, 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0x9dfa,
-  0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9dff, 0x9e00, 0x9e01, 0x9e02,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xfb */
-  0x9e03, 0x9e04, 0x9e05, 0x9e06, 0x9e07, 0x9e08, 0x9e09, 0x9e0a,
-  0x9e0b, 0x9e0c, 0x9e0d, 0x9e0e, 0x9e0f, 0x9e10, 0x9e11, 0x9e12,
-  0x9e13, 0x9e14, 0x9e15, 0x9e16, 0x9e17, 0x9e18, 0x9e19, 0x9e1a,
-  0x9e1b, 0x9e1c, 0x9e1d, 0x9e1e, 0x9e24, 0x9e27, 0x9e2e, 0x9e30,
-  0x9e34, 0x9e3b, 0x9e3c, 0x9e40, 0x9e4d, 0x9e50, 0x9e52, 0x9e53,
-  0x9e54, 0x9e56, 0x9e59, 0x9e5d, 0x9e5f, 0x9e60, 0x9e61, 0x9e62,
-  0x9e65, 0x9e6e, 0x9e6f, 0x9e72, 0x9e74, 0x9e75, 0x9e76, 0x9e77,
-  0x9e78, 0x9e79, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e7d, 0x9e80, 0x9e81,
-  0x9e83, 0x9e84, 0x9e85, 0x9e86, 0x9e89, 0x9e8a, 0x9e8c, 0x9e8d,
-  0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e94, 0x9e95, 0x9e96, 0x9e97,
-  0x9e98, 0x9e99, 0x9e9a, 0x9e9b, 0x9e9c, 0x9e9e, 0x9ea0, 0x9ea1,
-  0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea7, 0x9ea8, 0x9ea9, 0x9eaa,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xfc */
-  0x9eab, 0x9eac, 0x9ead, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb2,
-  0x9eb3, 0x9eb5, 0x9eb6, 0x9eb7, 0x9eb9, 0x9eba, 0x9ebc, 0x9ebf,
-  0x9ec0, 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8,
-  0x9eca, 0x9ecb, 0x9ecc, 0x9ed0, 0x9ed2, 0x9ed3, 0x9ed5, 0x9ed6,
-  0x9ed7, 0x9ed9, 0x9eda, 0x9ede, 0x9ee1, 0x9ee3, 0x9ee4, 0x9ee6,
-  0x9ee8, 0x9eeb, 0x9eec, 0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2,
-  0x9ef3, 0x9ef4, 0x9ef5, 0x9ef6, 0x9ef7, 0x9ef8, 0x9efa, 0x9efd,
-  0x9eff, 0x9f00, 0x9f01, 0x9f02, 0x9f03, 0x9f04, 0x9f05, 0x9f06,
-  0x9f07, 0x9f08, 0x9f09, 0x9f0a, 0x9f0c, 0x9f0f, 0x9f11, 0x9f12,
-  0x9f14, 0x9f15, 0x9f16, 0x9f18, 0x9f1a, 0x9f1b, 0x9f1c, 0x9f1d,
-  0x9f1e, 0x9f1f, 0x9f21, 0x9f23, 0x9f24, 0x9f25, 0x9f26, 0x9f27,
-  0x9f28, 0x9f29, 0x9f2a, 0x9f2b, 0x9f2d, 0x9f2e, 0x9f30, 0x9f31,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xfd */
-  0x9f32, 0x9f33, 0x9f34, 0x9f35, 0x9f36, 0x9f38, 0x9f3a, 0x9f3c,
-  0x9f3f, 0x9f40, 0x9f41, 0x9f42, 0x9f43, 0x9f45, 0x9f46, 0x9f47,
-  0x9f48, 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f,
-  0x9f52, 0x9f53, 0x9f54, 0x9f55, 0x9f56, 0x9f57, 0x9f58, 0x9f59,
-  0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, 0x9f5f, 0x9f60, 0x9f61,
-  0x9f62, 0x9f63, 0x9f64, 0x9f65, 0x9f66, 0x9f67, 0x9f68, 0x9f69,
-  0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71,
-  0x9f72, 0x9f73, 0x9f74, 0x9f75, 0x9f76, 0x9f77, 0x9f78, 0x9f79,
-  0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d, 0x9f7e, 0x9f81, 0x9f82, 0x9f8d,
-  0x9f8e, 0x9f8f, 0x9f90, 0x9f91, 0x9f92, 0x9f93, 0x9f94, 0x9f95,
-  0x9f96, 0x9f97, 0x9f98, 0x9f9c, 0x9f9d, 0x9f9e, 0x9fa1, 0x9fa2,
-  0x9fa3, 0x9fa4, 0x9fa5, 0xf92c, 0xf979, 0xf995, 0xf9e7, 0xf9f1,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xfe */
-  0xfa0c, 0xfa0d, 0xfa0e, 0xfa0f, 0xfa11, 0xfa13, 0xfa14, 0xfa18,
-  0xfa1f, 0xfa20, 0xfa21, 0xfa23, 0xfa24, 0xfa27, 0xfa28, 0xfa29,
-};
-
-static int
-cp936ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = s[0];
-  if ((c1 >= 0x81 && c1 <= 0xfe)) {
-    if (n >= 2) {
-      unsigned char c2 = s[1];
-      if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0x80 && c2 < 0xff)) {
-        unsigned int i = 190 * (c1 - 0x81) + (c2 - (c2 >= 0x80 ? 0x41 : 0x40));
-        unsigned short wc = 0xfffd;
-        {
-          if (i < 23766)
-            wc = cp936ext_2uni_page81[i];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-
-static const unsigned short cp936ext_page0014[208] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa1e8, 0x0000, 0x0000, 0xa1ec, /*0xa0-0xa7*/
-  0xa1a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0xa1e3, 0xa1c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1a4, /*0xb0-0xb7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1c1, /*0xd0-0xd7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/
-  0xa8a4, 0xa8a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xe0-0xe7*/
-  0xa8a8, 0xa8a6, 0xa8ba, 0x0000, 0xa8ac, 0xa8aa, 0x0000, 0x0000, /*0xe8-0xef*/
-  0x0000, 0x0000, 0xa8b0, 0xa8ae, 0x0000, 0x0000, 0x0000, 0xa1c2, /*0xf0-0xf7*/
-  0x0000, 0xa8b4, 0xa8b2, 0x0000, 0xa8b9, 0x0000, 0x0000, 0x0000, /*0xf8-0xff*/
-  /* 0x0100 */
-  0x0000, 0xa8a1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x00-0x07*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/
-  0x0000, 0x0000, 0x0000, 0xa8a5, 0x0000, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/
-  0x0000, 0x0000, 0x0000, 0xa8a7, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/
-  0x0000, 0x0000, 0x0000, 0xa8a9, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa8bd, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-  0xa8be, 0x0000, 0x0000, 0x0000, 0x0000, 0xa8ad, 0x0000, 0x0000, /*0x48-0x4f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/
-  0x0000, 0x0000, 0x0000, 0xa8b1, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/
-};
-static const unsigned short cp936ext_page0039[24] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa8a3, 0x0000, /*0xc8-0xcf*/
-  0xa8ab, 0x0000, 0xa8af, 0x0000, 0xa8b3, 0x0000, 0xa8b5, 0x0000, /*0xd0-0xd7*/
-  0xa8b6, 0x0000, 0xa8b7, 0x0000, 0xa8b8, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/
-};
-static const unsigned short cp936ext_page004a[24] = {
-  0x0000, 0xa8bb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0x0000, 0xa8c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/
-};
-static const unsigned short cp936ext_page0058[32] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1a6, /*0xc0-0xc7*/
-  0x0000, 0xa1a5, 0xa840, 0xa841, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/
-  0x0000, 0xa842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/
-};
-static const unsigned short cp936ext_page0072[64] = {
-  0x0000, 0xa6a1, 0xa6a2, 0xa6a3, 0xa6a4, 0xa6a5, 0xa6a6, 0xa6a7, /*0x90-0x97*/
-  0xa6a8, 0xa6a9, 0xa6aa, 0xa6ab, 0xa6ac, 0xa6ad, 0xa6ae, 0xa6af, /*0x98-0x9f*/
-  0xa6b0, 0xa6b1, 0x0000, 0xa6b2, 0xa6b3, 0xa6b4, 0xa6b5, 0xa6b6, /*0xa0-0xa7*/
-  0xa6b7, 0xa6b8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0xa6c1, 0xa6c2, 0xa6c3, 0xa6c4, 0xa6c5, 0xa6c6, 0xa6c7, /*0xb0-0xb7*/
-  0xa6c8, 0xa6c9, 0xa6ca, 0xa6cb, 0xa6cc, 0xa6cd, 0xa6ce, 0xa6cf, /*0xb8-0xbf*/
-  0xa6d0, 0xa6d1, 0x0000, 0xa6d2, 0xa6d3, 0xa6d4, 0xa6d5, 0xa6d6, /*0xc0-0xc7*/
-  0xa6d7, 0xa6d8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/
-};
-static const unsigned short cp936ext_page0080[88] = {
-  0x0000, 0xa7a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x00-0x07*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/
-  0xa7a1, 0xa7a2, 0xa7a3, 0xa7a4, 0xa7a5, 0xa7a6, 0xa7a8, 0xa7a9, /*0x10-0x17*/
-  0xa7aa, 0xa7ab, 0xa7ac, 0xa7ad, 0xa7ae, 0xa7af, 0xa7b0, 0xa7b1, /*0x18-0x1f*/
-  0xa7b2, 0xa7b3, 0xa7b4, 0xa7b5, 0xa7b6, 0xa7b7, 0xa7b8, 0xa7b9, /*0x20-0x27*/
-  0xa7ba, 0xa7bb, 0xa7bc, 0xa7bd, 0xa7be, 0xa7bf, 0xa7c0, 0xa7c1, /*0x28-0x2f*/
-  0xa7d1, 0xa7d2, 0xa7d3, 0xa7d4, 0xa7d5, 0xa7d6, 0xa7d8, 0xa7d9, /*0x30-0x37*/
-  0xa7da, 0xa7db, 0xa7dc, 0xa7dd, 0xa7de, 0xa7df, 0xa7e0, 0xa7e1, /*0x38-0x3f*/
-  0xa7e2, 0xa7e3, 0xa7e4, 0xa7e5, 0xa7e6, 0xa7e7, 0xa7e8, 0xa7e9, /*0x40-0x47*/
-  0xa7ea, 0xa7eb, 0xa7ec, 0xa7ed, 0xa7ee, 0xa7ef, 0xa7f0, 0xa7f1, /*0x48-0x4f*/
-  0x0000, 0xa7d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-};
-static const unsigned short cp936ext_page0402[48] = {
-  0xa95c, 0x0000, 0x0000, 0xa843, 0xa1aa, 0xa844, 0xa1ac, 0x0000, /*0x10-0x17*/
-  0xa1ae, 0xa1af, 0x0000, 0x0000, 0xa1b0, 0xa1b1, 0x0000, 0x0000, /*0x18-0x1f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa845, 0xa1ad, 0x0000, /*0x20-0x27*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0xa1eb, 0x0000, 0xa1e4, 0xa1e5, 0x0000, 0xa846, 0x0000, 0x0000, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0xa1f9, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/
-};
-static const unsigned short cp936ext_page0420[160] = {
-  0x0000, 0x0000, 0x0000, 0xa1e6, 0x0000, 0xa847, 0x0000, 0x0000, /*0x00-0x07*/
-  0x0000, 0xa848, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1ed, 0x0000, /*0x10-0x17*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/
-  0x0000, 0xa959, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7, 0xa2f8, /*0x60-0x67*/
-  0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/
-  0xa2a1, 0xa2a2, 0xa2a3, 0xa2a4, 0xa2a5, 0xa2a6, 0xa2a7, 0xa2a8, /*0x70-0x77*/
-  0xa2a9, 0xa2aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/
-  0xa1fb, 0xa1fc, 0xa1fa, 0xa1fd, 0x0000, 0x0000, 0xa849, 0xa84a, /*0x90-0x97*/
-  0xa84b, 0xa84c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/
-};
-static const unsigned short cp936ext_page0441[184] = {
-  0xa1ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1c7, /*0x08-0x0f*/
-  0x0000, 0xa1c6, 0x0000, 0x0000, 0x0000, 0xa84d, 0x0000, 0x0000, /*0x10-0x17*/
-  0x0000, 0x0000, 0xa1cc, 0x0000, 0x0000, 0xa1d8, 0xa1de, 0xa84e, /*0x18-0x1f*/
-  0xa1cf, 0x0000, 0x0000, 0xa84f, 0x0000, 0xa1ce, 0x0000, 0xa1c4, /*0x20-0x27*/
-  0xa1c5, 0xa1c9, 0xa1c8, 0xa1d2, 0x0000, 0x0000, 0xa1d3, 0x0000, /*0x28-0x2f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa1e0, 0xa1df, 0xa1c3, 0xa1cb, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1d7, 0x0000, 0x0000, /*0x38-0x3f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-  0xa1d6, 0x0000, 0x0000, 0x0000, 0xa1d5, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/
-  0x0000, 0x0000, 0xa850, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0xa1d9, 0xa1d4, 0x0000, 0x0000, 0xa1dc, 0xa1dd, 0xa851, 0xa852, /*0x60-0x67*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1da, 0xa1db, /*0x68-0x6f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa892, 0x0000, 0x0000, /*0x90-0x97*/
-  0x0000, 0xa1d1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1cd, 0x0000, 0x0000, /*0xa0-0xa7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa853, /*0xb8-0xbf*/
-};
-static const unsigned short cp936ext_page048c[64] = {
-  0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0, /*0x60-0x67*/
-  0xa2e1, 0xa2e2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, /*0x70-0x77*/
-  0xa2c9, 0xa2ca, 0xa2cb, 0xa2cc, 0xa2cd, 0xa2ce, 0xa2cf, 0xa2d0, /*0x78-0x7f*/
-  0xa2d1, 0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, /*0x80-0x87*/
-  0xa2b1, 0xa2b2, 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, /*0x88-0x8f*/
-  0xa2b9, 0xa2ba, 0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, /*0x90-0x97*/
-  0xa2c1, 0xa2c2, 0xa2c3, 0xa2c4, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/
-};
-static const unsigned short cp936ext_page04a0[232] = {
-  0xa9a4, 0xa9a5, 0xa9a6, 0xa9a7, 0xa9a8, 0xa9a9, 0xa9aa, 0xa9ab, /*0x00-0x07*/
-  0xa9ac, 0xa9ad, 0xa9ae, 0xa9af, 0xa9b0, 0xa9b1, 0xa9b2, 0xa9b3, /*0x08-0x0f*/
-  0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7, 0xa9b8, 0xa9b9, 0xa9ba, 0xa9bb, /*0x10-0x17*/
-  0xa9bc, 0xa9bd, 0xa9be, 0xa9bf, 0xa9c0, 0xa9c1, 0xa9c2, 0xa9c3, /*0x18-0x1f*/
-  0xa9c4, 0xa9c5, 0xa9c6, 0xa9c7, 0xa9c8, 0xa9c9, 0xa9ca, 0xa9cb, /*0x20-0x27*/
-  0xa9cc, 0xa9cd, 0xa9ce, 0xa9cf, 0xa9d0, 0xa9d1, 0xa9d2, 0xa9d3, /*0x28-0x2f*/
-  0xa9d4, 0xa9d5, 0xa9d6, 0xa9d7, 0xa9d8, 0xa9d9, 0xa9da, 0xa9db, /*0x30-0x37*/
-  0xa9dc, 0xa9dd, 0xa9de, 0xa9df, 0xa9e0, 0xa9e1, 0xa9e2, 0xa9e3, /*0x38-0x3f*/
-  0xa9e4, 0xa9e5, 0xa9e6, 0xa9e7, 0xa9e8, 0xa9e9, 0xa9ea, 0xa9eb, /*0x40-0x47*/
-  0xa9ec, 0xa9ed, 0xa9ee, 0xa9ef, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/
-  0xa854, 0xa855, 0xa856, 0xa857, 0xa858, 0xa859, 0xa85a, 0xa85b, /*0x50-0x57*/
-  0xa85c, 0xa85d, 0xa85e, 0xa85f, 0xa860, 0xa861, 0xa862, 0xa863, /*0x58-0x5f*/
-  0xa864, 0xa865, 0xa866, 0xa867, 0xa868, 0xa869, 0xa86a, 0xa86b, /*0x60-0x67*/
-  0xa86c, 0xa86d, 0xa86e, 0xa86f, 0xa870, 0xa871, 0xa872, 0xa873, /*0x68-0x6f*/
-  0xa874, 0xa875, 0xa876, 0xa877, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0xa878, 0xa879, 0xa87a, 0xa87b, 0xa87c, 0xa87d, 0xa87e, /*0x80-0x87*/
-  0xa880, 0xa881, 0xa882, 0xa883, 0xa884, 0xa885, 0xa886, 0xa887, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0xa888, 0xa889, 0xa88a, 0x0000, 0x0000, /*0x90-0x97*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/
-  0xa1f6, 0xa1f5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0x0000, 0xa1f8, 0xa1f7, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa88b, 0xa88c, 0x0000, 0x0000, /*0xb8-0xbf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1f4, 0xa1f3, /*0xc0-0xc7*/
-  0x0000, 0x0000, 0x0000, 0xa1f0, 0x0000, 0x0000, 0xa1f2, 0xa1f1, /*0xc8-0xcf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/
-  0x0000, 0x0000, 0xa88d, 0xa88e, 0xa88f, 0xa890, 0x0000, 0x0000, /*0xe0-0xe7*/
-};
-static const unsigned short cp936ext_page04c0[72] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1ef, 0xa1ee, 0x0000, /*0x00-0x07*/
-  0x0000, 0xa891, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/
-  0xa1e2, 0x0000, 0xa1e1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-};
-static const unsigned short cp936ext_page0600[304] = {
-  0xa1a1, 0xa1a2, 0xa1a3, 0xa1a8, 0x0000, 0xa1a9, 0xa965, 0xa996, /*0x00-0x07*/
-  0xa1b4, 0xa1b5, 0xa1b6, 0xa1b7, 0xa1b8, 0xa1b9, 0xa1ba, 0xa1bb, /*0x08-0x0f*/
-  0xa1be, 0xa1bf, 0xa893, 0xa1fe, 0xa1b2, 0xa1b3, 0xa1bc, 0xa1bd, /*0x10-0x17*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa894, 0xa895, 0x0000, /*0x18-0x1f*/
-  0x0000, 0xa940, 0xa941, 0xa942, 0xa943, 0xa944, 0xa945, 0xa946, /*0x20-0x27*/
-  0xa947, 0xa948, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/
-  0x0000, 0xa4a1, 0xa4a2, 0xa4a3, 0xa4a4, 0xa4a5, 0xa4a6, 0xa4a7, /*0x40-0x47*/
-  0xa4a8, 0xa4a9, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4ae, 0xa4af, /*0x48-0x4f*/
-  0xa4b0, 0xa4b1, 0xa4b2, 0xa4b3, 0xa4b4, 0xa4b5, 0xa4b6, 0xa4b7, /*0x50-0x57*/
-  0xa4b8, 0xa4b9, 0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd, 0xa4be, 0xa4bf, /*0x58-0x5f*/
-  0xa4c0, 0xa4c1, 0xa4c2, 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c6, 0xa4c7, /*0x60-0x67*/
-  0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4cc, 0xa4cd, 0xa4ce, 0xa4cf, /*0x68-0x6f*/
-  0xa4d0, 0xa4d1, 0xa4d2, 0xa4d3, 0xa4d4, 0xa4d5, 0xa4d6, 0xa4d7, /*0x70-0x77*/
-  0xa4d8, 0xa4d9, 0xa4da, 0xa4db, 0xa4dc, 0xa4dd, 0xa4de, 0xa4df, /*0x78-0x7f*/
-  0xa4e0, 0xa4e1, 0xa4e2, 0xa4e3, 0xa4e4, 0xa4e5, 0xa4e6, 0xa4e7, /*0x80-0x87*/
-  0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ee, 0xa4ef, /*0x88-0x8f*/
-  0xa4f0, 0xa4f1, 0xa4f2, 0xa4f3, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/
-  0x0000, 0x0000, 0x0000, 0xa961, 0xa962, 0xa966, 0xa967, 0x0000, /*0x98-0x9f*/
-  0x0000, 0xa5a1, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a5, 0xa5a6, 0xa5a7, /*0xa0-0xa7*/
-  0xa5a8, 0xa5a9, 0xa5aa, 0xa5ab, 0xa5ac, 0xa5ad, 0xa5ae, 0xa5af, /*0xa8-0xaf*/
-  0xa5b0, 0xa5b1, 0xa5b2, 0xa5b3, 0xa5b4, 0xa5b5, 0xa5b6, 0xa5b7, /*0xb0-0xb7*/
-  0xa5b8, 0xa5b9, 0xa5ba, 0xa5bb, 0xa5bc, 0xa5bd, 0xa5be, 0xa5bf, /*0xb8-0xbf*/
-  0xa5c0, 0xa5c1, 0xa5c2, 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c6, 0xa5c7, /*0xc0-0xc7*/
-  0xa5c8, 0xa5c9, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf, /*0xc8-0xcf*/
-  0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa5d4, 0xa5d5, 0xa5d6, 0xa5d7, /*0xd0-0xd7*/
-  0xa5d8, 0xa5d9, 0xa5da, 0xa5db, 0xa5dc, 0xa5dd, 0xa5de, 0xa5df, /*0xd8-0xdf*/
-  0xa5e0, 0xa5e1, 0xa5e2, 0xa5e3, 0xa5e4, 0xa5e5, 0xa5e6, 0xa5e7, /*0xe0-0xe7*/
-  0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ee, 0xa5ef, /*0xe8-0xef*/
-  0xa5f0, 0xa5f1, 0xa5f2, 0xa5f3, 0xa5f4, 0xa5f5, 0xa5f6, 0x0000, /*0xf0-0xf7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa960, 0xa963, 0xa964, 0x0000, /*0xf8-0xff*/
-  /* 0x3100 */
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa8c5, 0xa8c6, 0xa8c7, /*0x00-0x07*/
-  0xa8c8, 0xa8c9, 0xa8ca, 0xa8cb, 0xa8cc, 0xa8cd, 0xa8ce, 0xa8cf, /*0x08-0x0f*/
-  0xa8d0, 0xa8d1, 0xa8d2, 0xa8d3, 0xa8d4, 0xa8d5, 0xa8d6, 0xa8d7, /*0x10-0x17*/
-  0xa8d8, 0xa8d9, 0xa8da, 0xa8db, 0xa8dc, 0xa8dd, 0xa8de, 0xa8df, /*0x18-0x1f*/
-  0xa8e0, 0xa8e1, 0xa8e2, 0xa8e3, 0xa8e4, 0xa8e5, 0xa8e6, 0xa8e7, /*0x20-0x27*/
-  0xa8e8, 0xa8e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-};
-static const unsigned short cp936ext_page0644[24] = {
-  0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, /*0x20-0x27*/
-  0xa2ed, 0xa2ee, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0x0000, 0xa95a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/
-};
-static const unsigned short cp936ext_page0671[80] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa94a, 0xa94b, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa94c, 0xa94d, 0xa94e, 0x0000, /*0x98-0x9f*/
-  0x0000, 0xa94f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa950, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa951, 0x0000, /*0xc8-0xcf*/
-  0x0000, 0xa952, 0xa953, 0x0000, 0x0000, 0xa954, 0x0000, 0x0000, /*0xd0-0xd7*/
-};
-static const unsigned short cp936ext_page09c0[20904] = {
-  0xd2bb, 0xb6a1, 0x8140, 0xc6df, 0x8141, 0x8142, 0x8143, 0xcdf2, /*0x00-0x07*/
-  0xd5c9, 0xc8fd, 0xc9cf, 0xcfc2, 0xd8a2, 0xb2bb, 0xd3eb, 0x8144, /*0x08-0x0f*/
-  0xd8a4, 0xb3f3, 0x8145, 0xd7a8, 0xc7d2, 0xd8a7, 0xcac0, 0x8146, /*0x10-0x17*/
-  0xc7f0, 0xb1fb, 0xd2b5, 0xb4d4, 0xb6ab, 0xcbbf, 0xd8a9, 0x8147, /*0x18-0x1f*/
-  0x8148, 0x8149, 0xb6aa, 0x814a, 0xc1bd, 0xd1cf, 0x814b, 0xc9a5, /*0x20-0x27*/
-  0xd8ad, 0x814c, 0xb8f6, 0xd1be, 0xe3dc, 0xd6d0, 0x814d, 0x814e, /*0x28-0x2f*/
-  0xb7e1, 0x814f, 0xb4ae, 0x8150, 0xc1d9, 0x8151, 0xd8bc, 0x8152, /*0x30-0x37*/
-  0xcde8, 0xb5a4, 0xceaa, 0xd6f7, 0x8153, 0xc0f6, 0xbed9, 0xd8af, /*0x38-0x3f*/
-  0x8154, 0x8155, 0x8156, 0xc4cb, 0x8157, 0xbec3, 0x8158, 0xd8b1, /*0x40-0x47*/
-  0xc3b4, 0xd2e5, 0x8159, 0xd6ae, 0xceda, 0xd5a7, 0xbaf5, 0xb7a6, /*0x48-0x4f*/
-  0xc0d6, 0x815a, 0xc6b9, 0xc5d2, 0xc7c7, 0x815b, 0xb9d4, 0x815c, /*0x50-0x57*/
-  0xb3cb, 0xd2d2, 0x815d, 0x815e, 0xd8bf, 0xbec5, 0xc6f2, 0xd2b2, /*0x58-0x5f*/
-  0xcfb0, 0xcfe7, 0x815f, 0x8160, 0x8161, 0x8162, 0xcae9, 0x8163, /*0x60-0x67*/
-  0x8164, 0xd8c0, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, 0x816a, /*0x68-0x6f*/
-  0xc2f2, 0xc2d2, 0x816b, 0xc8e9, 0x816c, 0x816d, 0x816e, 0x816f, /*0x70-0x77*/
-  0x8170, 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0xc7ac, 0x8176, /*0x78-0x7f*/
-  0x8177, 0x8178, 0x8179, 0x817a, 0x817b, 0x817c, 0xc1cb, 0x817d, /*0x80-0x87*/
-  0xd3e8, 0xd5f9, 0x817e, 0xcac2, 0xb6fe, 0xd8a1, 0xd3da, 0xbff7, /*0x88-0x8f*/
-  0x8180, 0xd4c6, 0xbba5, 0xd8c1, 0xcee5, 0xbeae, 0x8181, 0x8182, /*0x90-0x97*/
-  0xd8a8, 0x8183, 0xd1c7, 0xd0a9, 0x8184, 0x8185, 0x8186, 0xd8bd, /*0x98-0x9f*/
-  0xd9ef, 0xcdf6, 0xbfba, 0x8187, 0xbdbb, 0xbaa5, 0xd2e0, 0xb2fa, /*0xa0-0xa7*/
-  0xbae0, 0xc4b6, 0x8188, 0xcfed, 0xbea9, 0xcda4, 0xc1c1, 0x8189, /*0xa8-0xaf*/
-  0x818a, 0x818b, 0xc7d7, 0xd9f1, 0x818c, 0xd9f4, 0x818d, 0x818e, /*0xb0-0xb7*/
-  0x818f, 0x8190, 0xc8cb, 0xd8e9, 0x8191, 0x8192, 0x8193, 0xd2da, /*0xb8-0xbf*/
-  0xcab2, 0xc8ca, 0xd8ec, 0xd8ea, 0xd8c6, 0xbdf6, 0xc6cd, 0xb3f0, /*0xc0-0xc7*/
-  0x8194, 0xd8eb, 0xbdf1, 0xbde9, 0x8195, 0xc8d4, 0xb4d3, 0x8196, /*0xc8-0xcf*/
-  0x8197, 0xc2d8, 0x8198, 0xb2d6, 0xd7d0, 0xcacb, 0xcbfb, 0xd5cc, /*0xd0-0xd7*/
-  0xb8b6, 0xcfc9, 0x8199, 0x819a, 0x819b, 0xd9da, 0xd8f0, 0xc7aa, /*0xd8-0xdf*/
-  0x819c, 0xd8ee, 0x819d, 0xb4fa, 0xc1ee, 0xd2d4, 0x819e, 0x819f, /*0xe0-0xe7*/
-  0xd8ed, 0x81a0, 0xd2c7, 0xd8ef, 0xc3c7, 0x81a1, 0x81a2, 0x81a3, /*0xe8-0xef*/
-  0xd1f6, 0x81a4, 0xd6d9, 0xd8f2, 0x81a5, 0xd8f5, 0xbcfe, 0xbcdb, /*0xf0-0xf7*/
-  0x81a6, 0x81a7, 0x81a8, 0xc8ce, 0x81a9, 0xb7dd, 0x81aa, 0xb7c2, /*0xf8-0xff*/
-  /* 0x4f00 */
-  0x81ab, 0xc6f3, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1, /*0x00-0x07*/
-  0x81b2, 0xd8f8, 0xd2c1, 0x81b3, 0x81b4, 0xcee9, 0xbcbf, 0xb7fc, /*0x08-0x0f*/
-  0xb7a5, 0xd0dd, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0xd6da, /*0x10-0x17*/
-  0xd3c5, 0xbbef, 0xbbe1, 0xd8f1, 0x81ba, 0x81bb, 0xc9a1, 0xceb0, /*0x18-0x1f*/
-  0xb4ab, 0x81bc, 0xd8f3, 0x81bd, 0xc9cb, 0xd8f6, 0xc2d7, 0xd8f7, /*0x20-0x27*/
-  0x81be, 0x81bf, 0xceb1, 0xd8f9, 0x81c0, 0x81c1, 0x81c2, 0xb2ae, /*0x28-0x2f*/
-  0xb9c0, 0x81c3, 0xd9a3, 0x81c4, 0xb0e9, 0x81c5, 0xc1e6, 0x81c6, /*0x30-0x37*/
-  0xc9ec, 0x81c7, 0xcbc5, 0x81c8, 0xcbc6, 0xd9a4, 0x81c9, 0x81ca, /*0x38-0x3f*/
-  0x81cb, 0x81cc, 0x81cd, 0xb5e8, 0x81ce, 0x81cf, 0xb5ab, 0x81d0, /*0x40-0x47*/
-  0x81d1, 0x81d2, 0x81d3, 0x81d4, 0x81d5, 0xcebb, 0xb5cd, 0xd7a1, /*0x48-0x4f*/
-  0xd7f4, 0xd3d3, 0x81d6, 0xcce5, 0x81d7, 0xbace, 0x81d8, 0xd9a2, /*0x50-0x57*/
-  0xd9dc, 0xd3e0, 0xd8fd, 0xb7f0, 0xd7f7, 0xd8fe, 0xd8fa, 0xd9a1, /*0x58-0x5f*/
-  0xc4e3, 0x81d9, 0x81da, 0xd3b6, 0xd8f4, 0xd9dd, 0x81db, 0xd8fb, /*0x60-0x67*/
-  0x81dc, 0xc5e5, 0x81dd, 0x81de, 0xc0d0, 0x81df, 0x81e0, 0xd1f0, /*0x68-0x6f*/
-  0xb0db, 0x81e1, 0x81e2, 0xbcd1, 0xd9a6, 0x81e3, 0xd9a5, 0x81e4, /*0x70-0x77*/
-  0x81e5, 0x81e6, 0x81e7, 0xd9ac, 0xd9ae, 0x81e8, 0xd9ab, 0xcab9, /*0x78-0x7f*/
-  0x81e9, 0x81ea, 0x81eb, 0xd9a9, 0xd6b6, 0x81ec, 0x81ed, 0x81ee, /*0x80-0x87*/
-  0xb3de, 0xd9a8, 0x81ef, 0xc0fd, 0x81f0, 0xcacc, 0x81f1, 0xd9aa, /*0x88-0x8f*/
-  0x81f2, 0xd9a7, 0x81f3, 0x81f4, 0xd9b0, 0x81f5, 0x81f6, 0xb6b1, /*0x90-0x97*/
-  0x81f7, 0x81f8, 0x81f9, 0xb9a9, 0x81fa, 0xd2c0, 0x81fb, 0x81fc, /*0x98-0x9f*/
-  0xcfc0, 0x81fd, 0x81fe, 0xc2c2, 0x8240, 0xbdc4, 0xd5ec, 0xb2e0, /*0xa0-0xa7*/
-  0xc7c8, 0xbfeb, 0xd9ad, 0x8241, 0xd9af, 0x8242, 0xceea, 0xbaee, /*0xa8-0xaf*/
-  0x8243, 0x8244, 0x8245, 0x8246, 0x8247, 0xc7d6, 0x8248, 0x8249, /*0xb0-0xb7*/
-  0x824a, 0x824b, 0x824c, 0x824d, 0x824e, 0x824f, 0x8250, 0xb1e3, /*0xb8-0xbf*/
-  0x8251, 0x8252, 0x8253, 0xb4d9, 0xb6ed, 0xd9b4, 0x8254, 0x8255, /*0xc0-0xc7*/
-  0x8256, 0x8257, 0xbfa1, 0x8258, 0x8259, 0x825a, 0xd9de, 0xc7ce, /*0xc8-0xcf*/
-  0xc0fe, 0xd9b8, 0x825b, 0x825c, 0x825d, 0x825e, 0x825f, 0xcbd7, /*0xd0-0xd7*/
-  0xb7fd, 0x8260, 0xd9b5, 0x8261, 0xd9b7, 0xb1a3, 0xd3e1, 0xd9b9, /*0xd8-0xdf*/
-  0x8262, 0xd0c5, 0x8263, 0xd9b6, 0x8264, 0x8265, 0xd9b1, 0x8266, /*0xe0-0xe7*/
-  0xd9b2, 0xc1a9, 0xd9b3, 0x8267, 0x8268, 0xbcf3, 0xd0de, 0xb8a9, /*0xe8-0xef*/
-  0x8269, 0xbee3, 0x826a, 0xd9bd, 0x826b, 0x826c, 0x826d, 0x826e, /*0xf0-0xf7*/
-  0xd9ba, 0x826f, 0xb0b3, 0x8270, 0x8271, 0x8272, 0xd9c2, 0x8273, /*0xf8-0xff*/
-  /* 0x5000 */
-  0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827a, 0x827b, /*0x00-0x07*/
-  0x827c, 0x827d, 0x827e, 0x8280, 0xd9c4, 0xb1b6, 0x8281, 0xd9bf, /*0x08-0x0f*/
-  0x8282, 0x8283, 0xb5b9, 0x8284, 0xbef3, 0x8285, 0x8286, 0x8287, /*0x10-0x17*/
-  0xccc8, 0xbaf2, 0xd2d0, 0x8288, 0xd9c3, 0x8289, 0x828a, 0xbde8, /*0x18-0x1f*/
-  0x828b, 0xb3ab, 0x828c, 0x828d, 0x828e, 0xd9c5, 0xbeeb, 0x828f, /*0x20-0x27*/
-  0xd9c6, 0xd9bb, 0xc4df, 0x8290, 0xd9be, 0xd9c1, 0xd9c0, 0x8291, /*0x28-0x2f*/
-  0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, /*0x30-0x37*/
-  0x829a, 0x829b, 0xd5ae, 0x829c, 0xd6b5, 0x829d, 0xc7e3, 0x829e, /*0x38-0x3f*/
-  0x829f, 0x82a0, 0x82a1, 0xd9c8, 0x82a2, 0x82a3, 0x82a4, 0xbcd9, /*0x40-0x47*/
-  0xd9ca, 0x82a5, 0x82a6, 0x82a7, 0xd9bc, 0x82a8, 0xd9cb, 0xc6ab, /*0x48-0x4f*/
-  0x82a9, 0x82aa, 0x82ab, 0x82ac, 0x82ad, 0xd9c9, 0x82ae, 0x82af, /*0x50-0x57*/
-  0x82b0, 0x82b1, 0xd7f6, 0x82b2, 0xcda3, 0x82b3, 0x82b4, 0x82b5, /*0x58-0x5f*/
-  0x82b6, 0x82b7, 0x82b8, 0x82b9, 0x82ba, 0xbda1, 0x82bb, 0x82bc, /*0x60-0x67*/
-  0x82bd, 0x82be, 0x82bf, 0x82c0, 0xd9cc, 0x82c1, 0x82c2, 0x82c3, /*0x68-0x6f*/
-  0x82c4, 0x82c5, 0x82c6, 0x82c7, 0x82c8, 0x82c9, 0xc5bc, 0xcdb5, /*0x70-0x77*/
-  0x82ca, 0x82cb, 0x82cc, 0xd9cd, 0x82cd, 0x82ce, 0xd9c7, 0xb3a5, /*0x78-0x7f*/
-  0xbffe, 0x82cf, 0x82d0, 0x82d1, 0x82d2, 0xb8b5, 0x82d3, 0x82d4, /*0x80-0x87*/
-  0xc0fc, 0x82d5, 0x82d6, 0x82d7, 0x82d8, 0xb0f8, 0x82d9, 0x82da, /*0x88-0x8f*/
-  0x82db, 0x82dc, 0x82dd, 0x82de, 0x82df, 0x82e0, 0x82e1, 0x82e2, /*0x90-0x97*/
-  0x82e3, 0x82e4, 0x82e5, 0x82e6, 0x82e7, 0x82e8, 0x82e9, 0x82ea, /*0x98-0x9f*/
-  0x82eb, 0x82ec, 0x82ed, 0xb4f6, 0x82ee, 0xd9ce, 0x82ef, 0xd9cf, /*0xa0-0xa7*/
-  0xb4a2, 0xd9d0, 0x82f0, 0x82f1, 0xb4df, 0x82f2, 0x82f3, 0x82f4, /*0xa8-0xaf*/
-  0x82f5, 0x82f6, 0xb0c1, 0x82f7, 0x82f8, 0x82f9, 0x82fa, 0x82fb, /*0xb0-0xb7*/
-  0x82fc, 0x82fd, 0xd9d1, 0xc9b5, 0x82fe, 0x8340, 0x8341, 0x8342, /*0xb8-0xbf*/
-  0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834a, /*0xc0-0xc7*/
-  0x834b, 0x834c, 0x834d, 0x834e, 0x834f, 0x8350, 0x8351, 0xcff1, /*0xc8-0xcf*/
-  0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0xd9d2, 0x8358, /*0xd0-0xd7*/
-  0x8359, 0x835a, 0xc1c5, 0x835b, 0x835c, 0x835d, 0x835e, 0x835f, /*0xd8-0xdf*/
-  0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0xd9d6, 0xc9ae, /*0xe0-0xe7*/
-  0x8366, 0x8367, 0x8368, 0x8369, 0xd9d5, 0xd9d4, 0xd9d7, 0x836a, /*0xe8-0xef*/
-  0x836b, 0x836c, 0x836d, 0xcbdb, 0x836e, 0xbda9, 0x836f, 0x8370, /*0xf0-0xf7*/
-  0x8371, 0x8372, 0x8373, 0xc6a7, 0x8374, 0x8375, 0x8376, 0x8377, /*0xf8-0xff*/
-  /* 0x5100 */
-  0x8378, 0x8379, 0x837a, 0x837b, 0x837c, 0x837d, 0xd9d3, 0xd9d8, /*0x00-0x07*/
-  0x837e, 0x8380, 0x8381, 0xd9d9, 0x8382, 0x8383, 0x8384, 0x8385, /*0x08-0x0f*/
-  0x8386, 0x8387, 0xc8e5, 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, /*0x10-0x17*/
-  0x838d, 0x838e, 0x838f, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, /*0x18-0x1f*/
-  0x8395, 0xc0dc, 0x8396, 0x8397, 0x8398, 0x8399, 0x839a, 0x839b, /*0x20-0x27*/
-  0x839c, 0x839d, 0x839e, 0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3, /*0x28-0x2f*/
-  0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab, /*0x30-0x37*/
-  0x83ac, 0x83ad, 0x83ae, 0x83af, 0x83b0, 0x83b1, 0x83b2, 0xb6f9, /*0x38-0x3f*/
-  0xd8a3, 0xd4ca, 0x83b3, 0xd4aa, 0xd0d6, 0xb3e4, 0xd5d7, 0x83b4, /*0x40-0x47*/
-  0xcfc8, 0xb9e2, 0x83b5, 0xbfcb, 0x83b6, 0xc3e2, 0x83b7, 0x83b8, /*0x48-0x4f*/
-  0x83b9, 0xb6d2, 0x83ba, 0x83bb, 0xcdc3, 0xd9ee, 0xd9f0, 0x83bc, /*0x50-0x57*/
-  0x83bd, 0x83be, 0xb5b3, 0x83bf, 0xb6b5, 0x83c0, 0x83c1, 0x83c2, /*0x58-0x5f*/
-  0x83c3, 0x83c4, 0xbea4, 0x83c5, 0x83c6, 0xc8eb, 0x83c7, 0x83c8, /*0x60-0x67*/
-  0xc8ab, 0x83c9, 0x83ca, 0xb0cb, 0xb9ab, 0xc1f9, 0xd9e2, 0x83cb, /*0x68-0x6f*/
-  0xc0bc, 0xb9b2, 0x83cc, 0xb9d8, 0xd0cb, 0xb1f8, 0xc6e4, 0xbedf, /*0x70-0x77*/
-  0xb5e4, 0xd7c8, 0x83cd, 0xd1f8, 0xbce6, 0xcade, 0x83ce, 0x83cf, /*0x78-0x7f*/
-  0xbcbd, 0xd9e6, 0xd8e7, 0x83d0, 0x83d1, 0xc4da, 0x83d2, 0x83d3, /*0x80-0x87*/
-  0xb8d4, 0xc8bd, 0x83d4, 0x83d5, 0xb2e1, 0xd4d9, 0x83d6, 0x83d7, /*0x88-0x8f*/
-  0x83d8, 0x83d9, 0xc3b0, 0x83da, 0x83db, 0xc3e1, 0xdaa2, 0xc8df, /*0x90-0x97*/
-  0x83dc, 0xd0b4, 0x83dd, 0xbefc, 0xc5a9, 0x83de, 0x83df, 0x83e0, /*0x98-0x9f*/
-  0xb9da, 0x83e1, 0xdaa3, 0x83e2, 0xd4a9, 0xdaa4, 0x83e3, 0x83e4, /*0xa0-0xa7*/
-  0x83e5, 0x83e6, 0x83e7, 0xd9fb, 0xb6ac, 0x83e8, 0x83e9, 0xb7eb, /*0xa8-0xaf*/
-  0xb1f9, 0xd9fc, 0xb3e5, 0xbef6, 0x83ea, 0xbff6, 0xd2b1, 0xc0e4, /*0xb0-0xb7*/
-  0x83eb, 0x83ec, 0x83ed, 0xb6b3, 0xd9fe, 0xd9fd, 0x83ee, 0x83ef, /*0xb8-0xbf*/
-  0xbebb, 0x83f0, 0x83f1, 0x83f2, 0xc6e0, 0x83f3, 0xd7bc, 0xdaa1, /*0xc0-0xc7*/
-  0x83f4, 0xc1b9, 0x83f5, 0xb5f2, 0xc1e8, 0x83f6, 0x83f7, 0xbcf5, /*0xc8-0xcf*/
-  0x83f8, 0xb4d5, 0x83f9, 0x83fa, 0x83fb, 0x83fc, 0x83fd, 0x83fe, /*0xd0-0xd7*/
-  0x8440, 0x8441, 0x8442, 0xc1dd, 0x8443, 0xc4fd, 0x8444, 0x8445, /*0xd8-0xdf*/
-  0xbcb8, 0xb7b2, 0x8446, 0x8447, 0xb7ef, 0x8448, 0x8449, 0x844a, /*0xe0-0xe7*/
-  0x844b, 0x844c, 0x844d, 0xd9ec, 0x844e, 0xc6be, 0x844f, 0xbfad, /*0xe8-0xef*/
-  0xbbcb, 0x8450, 0x8451, 0xb5ca, 0x8452, 0xdbc9, 0xd0d7, 0x8453, /*0xf0-0xf7*/
-  0xcdb9, 0xb0bc, 0xb3f6, 0xbbf7, 0xdbca, 0xbaaf, 0x8454, 0xd4e4, /*0xf8-0xff*/
-  /* 0x5200 */
-  0xb5b6, 0xb5f3, 0xd8d6, 0xc8d0, 0x8455, 0x8456, 0xb7d6, 0xc7d0, /*0x00-0x07*/
-  0xd8d7, 0x8457, 0xbfaf, 0x8458, 0x8459, 0xdbbb, 0xd8d8, 0x845a, /*0x08-0x0f*/
-  0x845b, 0xd0cc, 0xbbae, 0x845c, 0x845d, 0x845e, 0xebbe, 0xc1d0, /*0x10-0x17*/
-  0xc1f5, 0xd4f2, 0xb8d5, 0xb4b4, 0x845f, 0xb3f5, 0x8460, 0x8461, /*0x18-0x1f*/
-  0xc9be, 0x8462, 0x8463, 0x8464, 0xc5d0, 0x8465, 0x8466, 0x8467, /*0x20-0x27*/
-  0xc5d9, 0xc0fb, 0x8468, 0xb1f0, 0x8469, 0xd8d9, 0xb9ce, 0x846a, /*0x28-0x2f*/
-  0xb5bd, 0x846b, 0x846c, 0xd8da, 0x846d, 0x846e, 0xd6c6, 0xcba2, /*0x30-0x37*/
-  0xc8af, 0xc9b2, 0xb4cc, 0xbfcc, 0x846f, 0xb9f4, 0x8470, 0xd8db, /*0x38-0x3f*/
-  0xd8dc, 0xb6e7, 0xbcc1, 0xccea, 0x8471, 0x8472, 0x8473, 0x8474, /*0x40-0x47*/
-  0x8475, 0x8476, 0xcff7, 0x8477, 0xd8dd, 0xc7b0, 0x8478, 0x8479, /*0x48-0x4f*/
-  0xb9d0, 0xbda3, 0x847a, 0x847b, 0xccde, 0x847c, 0xc6ca, 0x847d, /*0x50-0x57*/
-  0x847e, 0x8480, 0x8481, 0x8482, 0xd8e0, 0x8483, 0xd8de, 0x8484, /*0x58-0x5f*/
-  0x8485, 0xd8df, 0x8486, 0x8487, 0x8488, 0xb0fe, 0x8489, 0xbee7, /*0x60-0x67*/
-  0x848a, 0xcaa3, 0xbcf4, 0x848b, 0x848c, 0x848d, 0x848e, 0xb8b1, /*0x68-0x6f*/
-  0x848f, 0x8490, 0xb8ee, 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, /*0x70-0x77*/
-  0x8496, 0x8497, 0x8498, 0x8499, 0x849a, 0xd8e2, 0x849b, 0xbdcb, /*0x78-0x7f*/
-  0x849c, 0xd8e4, 0xd8e3, 0x849d, 0x849e, 0x849f, 0x84a0, 0x84a1, /*0x80-0x87*/
-  0xc5fc, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, 0x84a8, /*0x88-0x8f*/
-  0xd8e5, 0x84a9, 0x84aa, 0xd8e6, 0x84ab, 0x84ac, 0x84ad, 0x84ae, /*0x90-0x97*/
-  0x84af, 0x84b0, 0x84b1, 0xc1a6, 0x84b2, 0xc8b0, 0xb0ec, 0xb9a6, /*0x98-0x9f*/
-  0xbcd3, 0xcef1, 0xdbbd, 0xc1d3, 0x84b3, 0x84b4, 0x84b5, 0x84b6, /*0xa0-0xa7*/
-  0xb6af, 0xd6fa, 0xc5ac, 0xbdd9, 0xdbbe, 0xdbbf, 0x84b7, 0x84b8, /*0xa8-0xaf*/
-  0x84b9, 0xc0f8, 0xbea2, 0xc0cd, 0x84ba, 0x84bb, 0x84bc, 0x84bd, /*0xb0-0xb7*/
-  0x84be, 0x84bf, 0x84c0, 0x84c1, 0x84c2, 0x84c3, 0xdbc0, 0xcac6, /*0xb8-0xbf*/
-  0x84c4, 0x84c5, 0x84c6, 0xb2aa, 0x84c7, 0x84c8, 0x84c9, 0xd3c2, /*0xc0-0xc7*/
-  0x84ca, 0xc3e3, 0x84cb, 0xd1ab, 0x84cc, 0x84cd, 0x84ce, 0x84cf, /*0xc8-0xcf*/
-  0xdbc2, 0x84d0, 0xc0d5, 0x84d1, 0x84d2, 0x84d3, 0xdbc3, 0x84d4, /*0xd0-0xd7*/
-  0xbfb1, 0x84d5, 0x84d6, 0x84d7, 0x84d8, 0x84d9, 0x84da, 0xc4bc, /*0xd8-0xdf*/
-  0x84db, 0x84dc, 0x84dd, 0x84de, 0xc7da, 0x84df, 0x84e0, 0x84e1, /*0xe0-0xe7*/
-  0x84e2, 0x84e3, 0x84e4, 0x84e5, 0x84e6, 0x84e7, 0x84e8, 0x84e9, /*0xe8-0xef*/
-  0xdbc4, 0x84ea, 0x84eb, 0x84ec, 0x84ed, 0x84ee, 0x84ef, 0x84f0, /*0xf0-0xf7*/
-  0x84f1, 0xd9e8, 0xc9d7, 0x84f2, 0x84f3, 0x84f4, 0xb9b4, 0xcef0, /*0xf8-0xff*/
-  /* 0x5300 */
-  0xd4c8, 0x84f5, 0x84f6, 0x84f7, 0x84f8, 0xb0fc, 0xb4d2, 0x84f9, /*0x00-0x07*/
-  0xd0d9, 0x84fa, 0x84fb, 0x84fc, 0x84fd, 0xd9e9, 0x84fe, 0xdecb, /*0x08-0x0f*/
-  0xd9eb, 0x8540, 0x8541, 0x8542, 0x8543, 0xd8b0, 0xbbaf, 0xb1b1, /*0x10-0x17*/
-  0x8544, 0xb3d7, 0xd8ce, 0x8545, 0x8546, 0xd4d1, 0x8547, 0x8548, /*0x18-0x1f*/
-  0xbdb3, 0xbfef, 0x8549, 0xcfbb, 0x854a, 0x854b, 0xd8d0, 0x854c, /*0x20-0x27*/
-  0x854d, 0x854e, 0xb7cb, 0x854f, 0x8550, 0x8551, 0xd8d1, 0x8552, /*0x28-0x2f*/
-  0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559, 0x855a, /*0x30-0x37*/
-  0x855b, 0xc6a5, 0xc7f8, 0xd2bd, 0x855c, 0x855d, 0xd8d2, 0xc4e4, /*0x38-0x3f*/
-  0x855e, 0xcaae, 0x855f, 0xc7a7, 0x8560, 0xd8a6, 0x8561, 0xc9fd, /*0x40-0x47*/
-  0xcee7, 0xbbdc, 0xb0eb, 0x8562, 0x8563, 0x8564, 0xbbaa, 0xd0ad, /*0x48-0x4f*/
-  0x8565, 0xb1b0, 0xd7e4, 0xd7bf, 0x8566, 0xb5a5, 0xc2f4, 0xc4cf, /*0x50-0x57*/
-  0x8567, 0x8568, 0xb2a9, 0x8569, 0xb2b7, 0x856a, 0xb1e5, 0xdfb2, /*0x58-0x5f*/
-  0xd5bc, 0xbfa8, 0xc2ac, 0xd8d5, 0xc2b1, 0x856b, 0xd8d4, 0xced4, /*0x60-0x67*/
-  0x856c, 0xdae0, 0x856d, 0xcec0, 0x856e, 0x856f, 0xd8b4, 0xc3ae, /*0x68-0x6f*/
-  0xd3a1, 0xcea3, 0x8570, 0xbcb4, 0xc8b4, 0xc2d1, 0x8571, 0xbeed, /*0x70-0x77*/
-  0xd0b6, 0x8572, 0xdae1, 0x8573, 0x8574, 0x8575, 0x8576, 0xc7e4, /*0x78-0x7f*/
-  0x8577, 0x8578, 0xb3a7, 0x8579, 0xb6f2, 0xccfc, 0xc0fa, 0x857a, /*0x80-0x87*/
-  0x857b, 0xc0f7, 0x857c, 0xd1b9, 0xd1e1, 0xd8c7, 0x857d, 0x857e, /*0x88-0x8f*/
-  0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0xb2de, 0x8585, 0x8586, /*0x90-0x97*/
-  0xc0e5, 0x8587, 0xbaf1, 0x8588, 0x8589, 0xd8c8, 0x858a, 0xd4ad, /*0x98-0x9f*/
-  0x858b, 0x858c, 0xcfe1, 0xd8c9, 0x858d, 0xd8ca, 0xcfc3, 0x858e, /*0xa0-0xa7*/
-  0xb3f8, 0xbec7, 0x858f, 0x8590, 0x8591, 0x8592, 0xd8cb, 0x8593, /*0xa8-0xaf*/
-  0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0xdbcc, 0x859a, /*0xb0-0xb7*/
-  0x859b, 0x859c, 0x859d, 0xc8a5, 0x859e, 0x859f, 0x85a0, 0xcfd8, /*0xb8-0xbf*/
-  0x85a1, 0xc8fe, 0xb2ce, 0x85a2, 0x85a3, 0x85a4, 0x85a5, 0x85a6, /*0xc0-0xc7*/
-  0xd3d6, 0xb2e6, 0xbcb0, 0xd3d1, 0xcbab, 0xb7b4, 0x85a7, 0x85a8, /*0xc8-0xcf*/
-  0x85a9, 0xb7a2, 0x85aa, 0x85ab, 0xcae5, 0x85ac, 0xc8a1, 0xcadc, /*0xd0-0xd7*/
-  0xb1e4, 0xd0f0, 0x85ad, 0xc5d1, 0x85ae, 0x85af, 0x85b0, 0xdbc5, /*0xd8-0xdf*/
-  0xb5fe, 0x85b1, 0x85b2, 0xbfda, 0xb9c5, 0xbee4, 0xc1ed, 0x85b3, /*0xe0-0xe7*/
-  0xdfb6, 0xdfb5, 0xd6bb, 0xbdd0, 0xd5d9, 0xb0c8, 0xb6a3, 0xbfc9, /*0xe8-0xef*/
-  0xcca8, 0xdfb3, 0xcab7, 0xd3d2, 0x85b4, 0xd8cf, 0xd2b6, 0xbac5, /*0xf0-0xf7*/
-  0xcbbe, 0xccbe, 0x85b5, 0xdfb7, 0xb5f0, 0xdfb4, 0x85b6, 0x85b7, /*0xf8-0xff*/
-  /* 0x5400 */
-  0x85b8, 0xd3f5, 0x85b9, 0xb3d4, 0xb8f7, 0x85ba, 0xdfba, 0x85bb, /*0x00-0x07*/
-  0xbacf, 0xbcaa, 0xb5f5, 0x85bc, 0xcdac, 0xc3fb, 0xbaf3, 0xc0f4, /*0x08-0x0f*/
-  0xcdc2, 0xcff2, 0xdfb8, 0xcfc5, 0x85bd, 0xc2c0, 0xdfb9, 0xc2f0, /*0x10-0x17*/
-  0x85be, 0x85bf, 0x85c0, 0xbefd, 0x85c1, 0xc1df, 0xcdcc, 0xd2f7, /*0x18-0x1f*/
-  0xb7cd, 0xdfc1, 0x85c2, 0xdfc4, 0x85c3, 0x85c4, 0xb7f1, 0xb0c9, /*0x20-0x27*/
-  0xb6d6, 0xb7d4, 0x85c5, 0xbaac, 0xccfd, 0xbfd4, 0xcbb1, 0xc6f4, /*0x28-0x2f*/
-  0x85c6, 0xd6a8, 0xdfc5, 0x85c7, 0xcee2, 0xb3b3, 0x85c8, 0x85c9, /*0x30-0x37*/
-  0xcefc, 0xb4b5, 0x85ca, 0xcec7, 0xbaf0, 0x85cb, 0xcee1, 0x85cc, /*0x38-0x3f*/
-  0xd1bd, 0x85cd, 0x85ce, 0xdfc0, 0x85cf, 0x85d0, 0xb4f4, 0x85d1, /*0x40-0x47*/
-  0xb3ca, 0x85d2, 0xb8e6, 0xdfbb, 0x85d3, 0x85d4, 0x85d5, 0x85d6, /*0x48-0x4f*/
-  0xc4c5, 0x85d7, 0xdfbc, 0xdfbd, 0xdfbe, 0xc5bb, 0xdfbf, 0xdfc2, /*0x50-0x57*/
-  0xd4b1, 0xdfc3, 0x85d8, 0xc7ba, 0xced8, 0x85d9, 0x85da, 0x85db, /*0x58-0x5f*/
-  0x85dc, 0x85dd, 0xc4d8, 0x85de, 0xdfca, 0x85df, 0xdfcf, 0x85e0, /*0x60-0x67*/
-  0xd6dc, 0x85e1, 0x85e2, 0x85e3, 0x85e4, 0x85e5, 0x85e6, 0x85e7, /*0x68-0x6f*/
-  0x85e8, 0xdfc9, 0xdfda, 0xceb6, 0x85e9, 0xbac7, 0xdfce, 0xdfc8, /*0x70-0x77*/
-  0xc5de, 0x85ea, 0x85eb, 0xc9eb, 0xbaf4, 0xc3fc, 0x85ec, 0x85ed, /*0x78-0x7f*/
-  0xbed7, 0x85ee, 0xdfc6, 0x85ef, 0xdfcd, 0x85f0, 0xc5d8, 0x85f1, /*0x80-0x87*/
-  0x85f2, 0x85f3, 0x85f4, 0xd5a6, 0xbacd, 0x85f5, 0xbecc, 0xd3bd, /*0x88-0x8f*/
-  0xb8c0, 0x85f6, 0xd6e4, 0x85f7, 0xdfc7, 0xb9be, 0xbfa7, 0x85f8, /*0x90-0x97*/
-  0x85f9, 0xc1fc, 0xdfcb, 0xdfcc, 0x85fa, 0xdfd0, 0x85fb, 0x85fc, /*0x98-0x9f*/
-  0x85fd, 0x85fe, 0x8640, 0xdfdb, 0xdfe5, 0x8641, 0xdfd7, 0xdfd6, /*0xa0-0xa7*/
-  0xd7c9, 0xdfe3, 0xdfe4, 0xe5eb, 0xd2a7, 0xdfd2, 0x8642, 0xbfa9, /*0xa8-0xaf*/
-  0x8643, 0xd4db, 0x8644, 0xbfc8, 0xdfd4, 0x8645, 0x8646, 0x8647, /*0xb0-0xb7*/
-  0xcfcc, 0x8648, 0x8649, 0xdfdd, 0x864a, 0xd1ca, 0x864b, 0xdfde, /*0xb8-0xbf*/
-  0xb0a7, 0xc6b7, 0xdfd3, 0x864c, 0xbae5, 0x864d, 0xb6df, 0xcddb, /*0xc0-0xc7*/
-  0xb9fe, 0xd4d5, 0x864e, 0x864f, 0xdfdf, 0xcfec, 0xb0a5, 0xdfe7, /*0xc8-0xcf*/
-  0xdfd1, 0xd1c6, 0xdfd5, 0xdfd8, 0xdfd9, 0xdfdc, 0x8650, 0xbba9, /*0xd0-0xd7*/
-  0x8651, 0xdfe0, 0xdfe1, 0x8652, 0xdfe2, 0xdfe6, 0xdfe8, 0xd3b4, /*0xd8-0xdf*/
-  0x8653, 0x8654, 0x8655, 0x8656, 0x8657, 0xb8e7, 0xc5b6, 0xdfea, /*0xe0-0xe7*/
-  0xc9da, 0xc1a8, 0xc4c4, 0x8658, 0x8659, 0xbfde, 0xcff8, 0x865a, /*0xe8-0xef*/
-  0x865b, 0x865c, 0xd5dc, 0xdfee, 0x865d, 0x865e, 0x865f, 0x8660, /*0xf0-0xf7*/
-  0x8661, 0x8662, 0xb2b8, 0x8663, 0xbadf, 0xdfec, 0x8664, 0xdbc1, /*0xf8-0xff*/
-  /* 0x5500 */
-  0x8665, 0xd1e4, 0x8666, 0x8667, 0x8668, 0x8669, 0xcbf4, 0xb4bd, /*0x00-0x07*/
-  0x866a, 0xb0a6, 0x866b, 0x866c, 0x866d, 0x866e, 0x866f, 0xdff1, /*0x08-0x0f*/
-  0xccc6, 0xdff2, 0x8670, 0x8671, 0xdfed, 0x8672, 0x8673, 0x8674, /*0x10-0x17*/
-  0x8675, 0x8676, 0x8677, 0xdfe9, 0x8678, 0x8679, 0x867a, 0x867b, /*0x18-0x1f*/
-  0xdfeb, 0x867c, 0xdfef, 0xdff0, 0xbbbd, 0x867d, 0x867e, 0xdff3, /*0x20-0x27*/
-  0x8680, 0x8681, 0xdff4, 0x8682, 0xbba3, 0x8683, 0xcadb, 0xcea8, /*0x28-0x2f*/
-  0xe0a7, 0xb3aa, 0x8684, 0xe0a6, 0x8685, 0x8686, 0x8687, 0xe0a1, /*0x30-0x37*/
-  0x8688, 0x8689, 0x868a, 0x868b, 0xdffe, 0x868c, 0xcdd9, 0xdffc, /*0x38-0x3f*/
-  0x868d, 0xdffa, 0x868e, 0xbfd0, 0xd7c4, 0x868f, 0xc9cc, 0x8690, /*0x40-0x47*/
-  0x8691, 0xdff8, 0xb0a1, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, /*0x48-0x4f*/
-  0xdffd, 0x8697, 0x8698, 0x8699, 0x869a, 0xdffb, 0xe0a2, 0x869b, /*0x50-0x57*/
-  0x869c, 0x869d, 0x869e, 0x869f, 0xe0a8, 0x86a0, 0x86a1, 0x86a2, /*0x58-0x5f*/
-  0x86a3, 0xb7c8, 0x86a4, 0x86a5, 0xc6a1, 0xc9b6, 0xc0b2, 0xdff5, /*0x60-0x67*/
-  0x86a6, 0x86a7, 0xc5be, 0x86a8, 0xd8c4, 0xdff9, 0xc4f6, 0x86a9, /*0x68-0x6f*/
-  0x86aa, 0x86ab, 0x86ac, 0x86ad, 0x86ae, 0xe0a3, 0xe0a4, 0xe0a5, /*0x70-0x77*/
-  0xd0a5, 0x86af, 0x86b0, 0xe0b4, 0xcce4, 0x86b1, 0xe0b1, 0x86b2, /*0x78-0x7f*/
-  0xbfa6, 0xe0af, 0xceb9, 0xe0ab, 0xc9c6, 0x86b3, 0x86b4, 0xc0ae, /*0x80-0x87*/
-  0xe0ae, 0xbaed, 0xbab0, 0xe0a9, 0x86b5, 0x86b6, 0x86b7, 0xdff6, /*0x88-0x8f*/
-  0x86b8, 0xe0b3, 0x86b9, 0x86ba, 0xe0b8, 0x86bb, 0x86bc, 0x86bd, /*0x90-0x97*/
-  0xb4ad, 0xe0b9, 0x86be, 0x86bf, 0xcfb2, 0xbac8, 0x86c0, 0xe0b0, /*0x98-0x9f*/
-  0x86c1, 0x86c2, 0x86c3, 0x86c4, 0x86c5, 0x86c6, 0x86c7, 0xd0fa, /*0xa0-0xa7*/
-  0x86c8, 0x86c9, 0x86ca, 0x86cb, 0x86cc, 0x86cd, 0x86ce, 0x86cf, /*0xa8-0xaf*/
-  0x86d0, 0xe0ac, 0x86d1, 0xd4fb, 0x86d2, 0xdff7, 0x86d3, 0xc5e7, /*0xb0-0xb7*/
-  0x86d4, 0xe0ad, 0x86d5, 0xd3f7, 0x86d6, 0xe0b6, 0xe0b7, 0x86d7, /*0xb8-0xbf*/
-  0x86d8, 0x86d9, 0x86da, 0x86db, 0xe0c4, 0xd0e1, 0x86dc, 0x86dd, /*0xc0-0xc7*/
-  0x86de, 0xe0bc, 0x86df, 0x86e0, 0xe0c9, 0xe0ca, 0x86e1, 0x86e2, /*0xc8-0xcf*/
-  0x86e3, 0xe0be, 0xe0aa, 0xc9a4, 0xe0c1, 0x86e4, 0xe0b2, 0x86e5, /*0xd0-0xd7*/
-  0x86e6, 0x86e7, 0x86e8, 0x86e9, 0xcac8, 0xe0c3, 0x86ea, 0xe0b5, /*0xd8-0xdf*/
-  0x86eb, 0xcecb, 0x86ec, 0xcbc3, 0xe0cd, 0xe0c6, 0xe0c2, 0x86ed, /*0xe0-0xe7*/
-  0xe0cb, 0x86ee, 0xe0ba, 0xe0bf, 0xe0c0, 0x86ef, 0x86f0, 0xe0c5, /*0xe8-0xef*/
-  0x86f1, 0x86f2, 0xe0c7, 0xe0c8, 0x86f3, 0xe0cc, 0x86f4, 0xe0bb, /*0xf0-0xf7*/
-  0x86f5, 0x86f6, 0x86f7, 0x86f8, 0x86f9, 0xcbd4, 0xe0d5, 0x86fa, /*0xf8-0xff*/
-  /* 0x5600 */
-  0xe0d6, 0xe0d2, 0x86fb, 0x86fc, 0x86fd, 0x86fe, 0x8740, 0x8741, /*0x00-0x07*/
-  0xe0d0, 0xbcce, 0x8742, 0x8743, 0xe0d1, 0x8744, 0xb8c2, 0xd8c5, /*0x08-0x0f*/
-  0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, /*0x10-0x17*/
-  0xd0ea, 0x874d, 0x874e, 0xc2ef, 0x874f, 0x8750, 0xe0cf, 0xe0bd, /*0x18-0x1f*/
-  0x8751, 0x8752, 0x8753, 0xe0d4, 0xe0d3, 0x8754, 0x8755, 0xe0d7, /*0x20-0x27*/
-  0x8756, 0x8757, 0x8758, 0x8759, 0xe0dc, 0xe0d8, 0x875a, 0x875b, /*0x28-0x2f*/
-  0x875c, 0xd6f6, 0xb3b0, 0x875d, 0xd7ec, 0x875e, 0xcbbb, 0x875f, /*0x30-0x37*/
-  0x8760, 0xe0da, 0x8761, 0xcefb, 0x8762, 0x8763, 0x8764, 0xbad9, /*0x38-0x3f*/
-  0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, /*0x40-0x47*/
-  0x876d, 0x876e, 0x876f, 0x8770, 0xe0e1, 0xe0dd, 0xd2ad, 0x8771, /*0x48-0x4f*/
-  0x8772, 0x8773, 0x8774, 0x8775, 0xe0e2, 0x8776, 0x8777, 0xe0db, /*0x50-0x57*/
-  0xe0d9, 0xe0df, 0x8778, 0x8779, 0xe0e0, 0x877a, 0x877b, 0x877c, /*0x58-0x5f*/
-  0x877d, 0x877e, 0xe0de, 0x8780, 0xe0e4, 0x8781, 0x8782, 0x8783, /*0x60-0x67*/
-  0xc6f7, 0xd8ac, 0xd4eb, 0xe0e6, 0xcac9, 0x8784, 0x8785, 0x8786, /*0x68-0x6f*/
-  0x8787, 0xe0e5, 0x8788, 0x8789, 0x878a, 0x878b, 0xb8c1, 0x878c, /*0x70-0x77*/
-  0x878d, 0x878e, 0x878f, 0xe0e7, 0xe0e8, 0x8790, 0x8791, 0x8792, /*0x78-0x7f*/
-  0x8793, 0x8794, 0x8795, 0x8796, 0x8797, 0xe0e9, 0xe0e3, 0x8798, /*0x80-0x87*/
-  0x8799, 0x879a, 0x879b, 0x879c, 0x879d, 0x879e, 0xbabf, 0xcce7, /*0x88-0x8f*/
-  0x879f, 0x87a0, 0x87a1, 0xe0ea, 0x87a2, 0x87a3, 0x87a4, 0x87a5, /*0x90-0x97*/
-  0x87a6, 0x87a7, 0x87a8, 0x87a9, 0x87aa, 0x87ab, 0x87ac, 0x87ad, /*0x98-0x9f*/
-  0x87ae, 0x87af, 0x87b0, 0xcff9, 0x87b1, 0x87b2, 0x87b3, 0x87b4, /*0xa0-0xa7*/
-  0x87b5, 0x87b6, 0x87b7, 0x87b8, 0x87b9, 0x87ba, 0x87bb, 0xe0eb, /*0xa8-0xaf*/
-  0x87bc, 0x87bd, 0x87be, 0x87bf, 0x87c0, 0x87c1, 0x87c2, 0xc8c2, /*0xb0-0xb7*/
-  0x87c3, 0x87c4, 0x87c5, 0x87c6, 0xbdc0, 0x87c7, 0x87c8, 0x87c9, /*0xb8-0xbf*/
-  0x87ca, 0x87cb, 0x87cc, 0x87cd, 0x87ce, 0x87cf, 0x87d0, 0x87d1, /*0xc0-0xc7*/
-  0x87d2, 0x87d3, 0xc4d2, 0x87d4, 0x87d5, 0x87d6, 0x87d7, 0x87d8, /*0xc8-0xcf*/
-  0x87d9, 0x87da, 0x87db, 0x87dc, 0xe0ec, 0x87dd, 0x87de, 0xe0ed, /*0xd0-0xd7*/
-  0x87df, 0x87e0, 0xc7f4, 0xcbc4, 0x87e1, 0xe0ee, 0xbbd8, 0xd8b6, /*0xd8-0xdf*/
-  0xd2f2, 0xe0ef, 0xcdc5, 0x87e2, 0xb6da, 0x87e3, 0x87e4, 0x87e5, /*0xe0-0xe7*/
-  0x87e6, 0x87e7, 0x87e8, 0xe0f1, 0x87e9, 0xd4b0, 0x87ea, 0x87eb, /*0xe8-0xef*/
-  0xc0a7, 0xb4d1, 0x87ec, 0x87ed, 0xcea7, 0xe0f0, 0x87ee, 0x87ef, /*0xf0-0xf7*/
-  0x87f0, 0xe0f2, 0xb9cc, 0x87f1, 0x87f2, 0xb9fa, 0xcdbc, 0xe0f3, /*0xf8-0xff*/
-  /* 0x5700 */
-  0x87f3, 0x87f4, 0x87f5, 0xc6d4, 0xe0f4, 0x87f6, 0xd4b2, 0x87f7, /*0x00-0x07*/
-  0xc8a6, 0xe0f6, 0xe0f5, 0x87f8, 0x87f9, 0x87fa, 0x87fb, 0x87fc, /*0x08-0x0f*/
-  0x87fd, 0x87fe, 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, /*0x10-0x17*/
-  0x8846, 0x8847, 0x8848, 0x8849, 0xe0f7, 0x884a, 0x884b, 0xcdc1, /*0x18-0x1f*/
-  0x884c, 0x884d, 0x884e, 0xcaa5, 0x884f, 0x8850, 0x8851, 0x8852, /*0x20-0x27*/
-  0xd4da, 0xdbd7, 0xdbd9, 0x8853, 0xdbd8, 0xb9e7, 0xdbdc, 0xdbdd, /*0x28-0x2f*/
-  0xb5d8, 0x8854, 0x8855, 0xdbda, 0x8856, 0x8857, 0x8858, 0x8859, /*0x30-0x37*/
-  0x885a, 0xdbdb, 0xb3a1, 0xdbdf, 0x885b, 0x885c, 0xbbf8, 0x885d, /*0x38-0x3f*/
-  0xd6b7, 0x885e, 0xdbe0, 0x885f, 0x8860, 0x8861, 0x8862, 0xbef9, /*0x40-0x47*/
-  0x8863, 0x8864, 0xb7bb, 0x8865, 0xdbd0, 0xccae, 0xbfb2, 0xbbb5, /*0x48-0x4f*/
-  0xd7f8, 0xbfd3, 0x8866, 0x8867, 0x8868, 0x8869, 0x886a, 0xbfe9, /*0x50-0x57*/
-  0x886b, 0x886c, 0xbce1, 0xccb3, 0xdbde, 0xb0d3, 0xceeb, 0xb7d8, /*0x58-0x5f*/
-  0xd7b9, 0xc6c2, 0x886d, 0x886e, 0xc0a4, 0x886f, 0xccb9, 0x8870, /*0x60-0x67*/
-  0xdbe7, 0xdbe1, 0xc6ba, 0xdbe3, 0x8871, 0xdbe8, 0x8872, 0xc5f7, /*0x68-0x6f*/
-  0x8873, 0x8874, 0x8875, 0xdbea, 0x8876, 0x8877, 0xdbe9, 0xbfc0, /*0x70-0x77*/
-  0x8878, 0x8879, 0x887a, 0xdbe6, 0xdbe5, 0x887b, 0x887c, 0x887d, /*0x78-0x7f*/
-  0x887e, 0x8880, 0xb4b9, 0xc0ac, 0xc2a2, 0xdbe2, 0xdbe4, 0x8881, /*0x80-0x87*/
-  0x8882, 0x8883, 0x8884, 0xd0cd, 0xdbed, 0x8885, 0x8886, 0x8887, /*0x88-0x8f*/
-  0x8888, 0x8889, 0xc0dd, 0xdbf2, 0x888a, 0x888b, 0x888c, 0x888d, /*0x90-0x97*/
-  0x888e, 0x888f, 0x8890, 0xb6e2, 0x8891, 0x8892, 0x8893, 0x8894, /*0x98-0x9f*/
-  0xdbf3, 0xdbd2, 0xb9b8, 0xd4ab, 0xdbec, 0x8895, 0xbfd1, 0xdbf0, /*0xa0-0xa7*/
-  0x8896, 0xdbd1, 0x8897, 0xb5e6, 0x8898, 0xdbeb, 0xbfe5, 0x8899, /*0xa8-0xaf*/
-  0x889a, 0x889b, 0xdbee, 0x889c, 0xdbf1, 0x889d, 0x889e, 0x889f, /*0xb0-0xb7*/
-  0xdbf9, 0x88a0, 0x88a1, 0x88a2, 0x88a3, 0x88a4, 0x88a5, 0x88a6, /*0xb8-0xbf*/
-  0x88a7, 0x88a8, 0xb9a1, 0xb0a3, 0x88a9, 0x88aa, 0x88ab, 0x88ac, /*0xc0-0xc7*/
-  0x88ad, 0x88ae, 0x88af, 0xc2f1, 0x88b0, 0x88b1, 0xb3c7, 0xdbef, /*0xc8-0xcf*/
-  0x88b2, 0x88b3, 0xdbf8, 0x88b4, 0xc6d2, 0xdbf4, 0x88b5, 0x88b6, /*0xd0-0xd7*/
-  0xdbf5, 0xdbf7, 0xdbf6, 0x88b7, 0x88b8, 0xdbfe, 0x88b9, 0xd3f2, /*0xd8-0xdf*/
-  0xb2ba, 0x88ba, 0x88bb, 0x88bc, 0xdbfd, 0x88bd, 0x88be, 0x88bf, /*0xe0-0xe7*/
-  0x88c0, 0x88c1, 0x88c2, 0x88c3, 0x88c4, 0xdca4, 0x88c5, 0xdbfb, /*0xe8-0xef*/
-  0x88c6, 0x88c7, 0x88c8, 0x88c9, 0xdbfa, 0x88ca, 0x88cb, 0x88cc, /*0xf0-0xf7*/
-  0xdbfc, 0xc5e0, 0xbbf9, 0x88cd, 0x88ce, 0xdca3, 0x88cf, 0x88d0, /*0xf8-0xff*/
-  /* 0x5800 */
-  0xdca5, 0x88d1, 0xccc3, 0x88d2, 0x88d3, 0x88d4, 0xb6d1, 0xddc0, /*0x00-0x07*/
-  0x88d5, 0x88d6, 0x88d7, 0xdca1, 0x88d8, 0xdca2, 0x88d9, 0x88da, /*0x08-0x0f*/
-  0x88db, 0xc7b5, 0x88dc, 0x88dd, 0x88de, 0xb6e9, 0x88df, 0x88e0, /*0x10-0x17*/
-  0x88e1, 0xdca7, 0x88e2, 0x88e3, 0x88e4, 0x88e5, 0xdca6, 0x88e6, /*0x18-0x1f*/
-  0xdca9, 0xb1a4, 0x88e7, 0x88e8, 0xb5cc, 0x88e9, 0x88ea, 0x88eb, /*0x20-0x27*/
-  0x88ec, 0x88ed, 0xbfb0, 0x88ee, 0x88ef, 0x88f0, 0x88f1, 0x88f2, /*0x28-0x2f*/
-  0xd1df, 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0xb6c2, 0x88f7, 0x88f8, /*0x30-0x37*/
-  0x88f9, 0x88fa, 0x88fb, 0x88fc, 0x88fd, 0x88fe, 0x8940, 0x8941, /*0x38-0x3f*/
-  0x8942, 0x8943, 0x8944, 0x8945, 0xdca8, 0x8946, 0x8947, 0x8948, /*0x40-0x47*/
-  0x8949, 0x894a, 0x894b, 0x894c, 0xcbfa, 0xebf3, 0x894d, 0x894e, /*0x48-0x4f*/
-  0x894f, 0xcbdc, 0x8950, 0x8951, 0xcbfe, 0x8952, 0x8953, 0x8954, /*0x50-0x57*/
-  0xccc1, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, 0xc8fb, 0x895a, /*0x58-0x5f*/
-  0x895b, 0x895c, 0x895d, 0x895e, 0x895f, 0xdcaa, 0x8960, 0x8961, /*0x60-0x67*/
-  0x8962, 0x8963, 0x8964, 0xccee, 0xdcab, 0x8965, 0x8966, 0x8967, /*0x68-0x6f*/
-  0x8968, 0x8969, 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, /*0x70-0x77*/
-  0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0xdbd3, 0x8976, /*0x78-0x7f*/
-  0xdcaf, 0xdcac, 0x8977, 0xbeb3, 0x8978, 0xcafb, 0x8979, 0x897a, /*0x80-0x87*/
-  0x897b, 0xdcad, 0x897c, 0x897d, 0x897e, 0x8980, 0x8981, 0x8982, /*0x88-0x8f*/
-  0x8983, 0x8984, 0xc9ca, 0xc4b9, 0x8985, 0x8986, 0x8987, 0x8988, /*0x90-0x97*/
-  0x8989, 0xc7bd, 0xdcae, 0x898a, 0x898b, 0x898c, 0xd4f6, 0xd0e6, /*0x98-0x9f*/
-  0x898d, 0x898e, 0x898f, 0x8990, 0x8991, 0x8992, 0x8993, 0x8994, /*0xa0-0xa7*/
-  0xc4ab, 0xb6d5, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899a, /*0xa8-0xaf*/
-  0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1, 0x89a2, /*0xb0-0xb7*/
-  0x89a3, 0x89a4, 0x89a5, 0x89a6, 0xdbd4, 0x89a7, 0x89a8, 0x89a9, /*0xb8-0xbf*/
-  0x89aa, 0xb1da, 0x89ab, 0x89ac, 0x89ad, 0xdbd5, 0x89ae, 0x89af, /*0xc0-0xc7*/
-  0x89b0, 0x89b1, 0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, /*0xc8-0xcf*/
-  0x89b8, 0xdbd6, 0x89b9, 0x89ba, 0x89bb, 0xbabe, 0x89bc, 0x89bd, /*0xd0-0xd7*/
-  0x89be, 0x89bf, 0x89c0, 0x89c1, 0x89c2, 0x89c3, 0x89c4, 0x89c5, /*0xd8-0xdf*/
-  0x89c6, 0x89c7, 0x89c8, 0x89c9, 0xc8c0, 0x89ca, 0x89cb, 0x89cc, /*0xe0-0xe7*/
-  0x89cd, 0x89ce, 0x89cf, 0xcabf, 0xc8c9, 0x89d0, 0xd7b3, 0x89d1, /*0xe8-0xef*/
-  0xc9f9, 0x89d2, 0x89d3, 0xbfc7, 0x89d4, 0x89d5, 0xbaf8, 0x89d6, /*0xf0-0xf7*/
-  0x89d7, 0xd2bc, 0x89d8, 0x89d9, 0x89da, 0x89db, 0x89dc, 0x89dd, /*0xf8-0xff*/
-  /* 0x5900 */
-  0x89de, 0x89df, 0xe2ba, 0x89e0, 0xb4a6, 0x89e1, 0x89e2, 0xb1b8, /*0x00-0x07*/
-  0x89e3, 0x89e4, 0x89e5, 0x89e6, 0x89e7, 0xb8b4, 0x89e8, 0xcfc4, /*0x08-0x0f*/
-  0x89e9, 0x89ea, 0x89eb, 0x89ec, 0xd9e7, 0xcfa6, 0xcde2, 0x89ed, /*0x10-0x17*/
-  0x89ee, 0xd9ed, 0xb6e0, 0x89ef, 0xd2b9, 0x89f0, 0x89f1, 0xb9bb, /*0x18-0x1f*/
-  0x89f2, 0x89f3, 0x89f4, 0x89f5, 0xe2b9, 0xe2b7, 0x89f6, 0xb4f3, /*0x20-0x27*/
-  0x89f7, 0xccec, 0xccab, 0xb7f2, 0x89f8, 0xd8b2, 0xd1eb, 0xbabb, /*0x28-0x2f*/
-  0x89f9, 0xcaa7, 0x89fa, 0x89fb, 0xcdb7, 0x89fc, 0x89fd, 0xd2c4, /*0x30-0x37*/
-  0xbfe4, 0xbcd0, 0xb6e1, 0x89fe, 0xdec5, 0x8a40, 0x8a41, 0x8a42, /*0x38-0x3f*/
-  0x8a43, 0xdec6, 0xdbbc, 0x8a44, 0xd1d9, 0x8a45, 0x8a46, 0xc6e6, /*0x40-0x47*/
-  0xc4ce, 0xb7ee, 0x8a47, 0xb7dc, 0x8a48, 0x8a49, 0xbffc, 0xd7e0, /*0x48-0x4f*/
-  0x8a4a, 0xc6f5, 0x8a4b, 0x8a4c, 0xb1bc, 0xdec8, 0xbdb1, 0xccd7, /*0x50-0x57*/
-  0xdeca, 0x8a4d, 0xdec9, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a52, /*0x58-0x5f*/
-  0xb5ec, 0x8a53, 0xc9dd, 0x8a54, 0x8a55, 0xb0c2, 0x8a56, 0x8a57, /*0x60-0x67*/
-  0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f, /*0x68-0x6f*/
-  0x8a60, 0x8a61, 0x8a62, 0xc5ae, 0xc5ab, 0x8a63, 0xc4cc, 0x8a64, /*0x70-0x77*/
-  0xbce9, 0xcbfd, 0x8a65, 0x8a66, 0x8a67, 0xbac3, 0x8a68, 0x8a69, /*0x78-0x7f*/
-  0x8a6a, 0xe5f9, 0xc8e7, 0xe5fa, 0xcdfd, 0x8a6b, 0xd7b1, 0xb8be, /*0x80-0x87*/
-  0xc2e8, 0x8a6c, 0xc8d1, 0x8a6d, 0x8a6e, 0xe5fb, 0x8a6f, 0x8a70, /*0x88-0x8f*/
-  0x8a71, 0x8a72, 0xb6ca, 0xbccb, 0x8a73, 0x8a74, 0xd1fd, 0xe6a1, /*0x90-0x97*/
-  0x8a75, 0xc3ee, 0x8a76, 0x8a77, 0x8a78, 0x8a79, 0xe6a4, 0x8a7a, /*0x98-0x9f*/
-  0x8a7b, 0x8a7c, 0x8a7d, 0xe5fe, 0xe6a5, 0xcdd7, 0x8a7e, 0x8a80, /*0xa0-0xa7*/
-  0xb7c1, 0xe5fc, 0xe5fd, 0xe6a3, 0x8a81, 0x8a82, 0xc4dd, 0xe6a8, /*0xa8-0xaf*/
-  0x8a83, 0x8a84, 0xe6a7, 0x8a85, 0x8a86, 0x8a87, 0x8a88, 0x8a89, /*0xb0-0xb7*/
-  0x8a8a, 0xc3c3, 0x8a8b, 0xc6de, 0x8a8c, 0x8a8d, 0xe6aa, 0x8a8e, /*0xb8-0xbf*/
-  0x8a8f, 0x8a90, 0x8a91, 0x8a92, 0x8a93, 0x8a94, 0xc4b7, 0x8a95, /*0xc0-0xc7*/
-  0x8a96, 0x8a97, 0xe6a2, 0xcabc, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, /*0xc8-0xcf*/
-  0xbde3, 0xb9c3, 0xe6a6, 0xd0d5, 0xceaf, 0x8a9c, 0x8a9d, 0xe6a9, /*0xd0-0xd7*/
-  0xe6b0, 0x8a9e, 0xd2a6, 0x8a9f, 0xbdaa, 0xe6ad, 0x8aa0, 0x8aa1, /*0xd8-0xdf*/
-  0x8aa2, 0x8aa3, 0x8aa4, 0xe6af, 0x8aa5, 0xc0d1, 0x8aa6, 0x8aa7, /*0xe0-0xe7*/
-  0xd2cc, 0x8aa8, 0x8aa9, 0x8aaa, 0xbca7, 0x8aab, 0x8aac, 0x8aad, /*0xe8-0xef*/
-  0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4, 0x8ab5, /*0xf0-0xf7*/
-  0x8ab6, 0xe6b1, 0x8ab7, 0xd2f6, 0x8ab8, 0x8ab9, 0x8aba, 0xd7cb, /*0xf8-0xff*/
-  /* 0x5a00 */
-  0x8abb, 0xcdfe, 0x8abc, 0xcdde, 0xc2a6, 0xe6ab, 0xe6ac, 0xbdbf, /*0x00-0x07*/
-  0xe6ae, 0xe6b3, 0x8abd, 0x8abe, 0xe6b2, 0x8abf, 0x8ac0, 0x8ac1, /*0x08-0x0f*/
-  0x8ac2, 0xe6b6, 0x8ac3, 0xe6b8, 0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, /*0x10-0x17*/
-  0xc4ef, 0x8ac8, 0x8ac9, 0x8aca, 0xc4c8, 0x8acb, 0x8acc, 0xbeea, /*0x18-0x1f*/
-  0xc9ef, 0x8acd, 0x8ace, 0xe6b7, 0x8acf, 0xb6f0, 0x8ad0, 0x8ad1, /*0x20-0x27*/
-  0x8ad2, 0xc3e4, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, /*0x28-0x2f*/
-  0x8ad9, 0xd3e9, 0xe6b4, 0x8ada, 0xe6b5, 0x8adb, 0xc8a2, 0x8adc, /*0x30-0x37*/
-  0x8add, 0x8ade, 0x8adf, 0x8ae0, 0xe6bd, 0x8ae1, 0x8ae2, 0x8ae3, /*0x38-0x3f*/
-  0xe6b9, 0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0xc6c5, 0x8ae9, /*0x40-0x47*/
-  0x8aea, 0xcdf1, 0xe6bb, 0x8aeb, 0x8aec, 0x8aed, 0x8aee, 0x8aef, /*0x48-0x4f*/
-  0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4, 0xe6bc, 0x8af5, 0x8af6, /*0x50-0x57*/
-  0x8af7, 0x8af8, 0xbbe9, 0x8af9, 0x8afa, 0x8afb, 0x8afc, 0x8afd, /*0x58-0x5f*/
-  0x8afe, 0x8b40, 0xe6be, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0xe6ba, /*0x60-0x67*/
-  0x8b45, 0x8b46, 0xc0b7, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, /*0x68-0x6f*/
-  0x8b4c, 0x8b4d, 0x8b4e, 0x8b4f, 0xd3a4, 0xe6bf, 0xc9f4, 0xe6c3, /*0x70-0x77*/
-  0x8b50, 0x8b51, 0xe6c4, 0x8b52, 0x8b53, 0x8b54, 0x8b55, 0xd0f6, /*0x78-0x7f*/
-  0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, /*0x80-0x87*/
-  0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, /*0x88-0x8f*/
-  0x8b66, 0x8b67, 0xc3bd, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6c, /*0x90-0x97*/
-  0x8b6d, 0x8b6e, 0xc3c4, 0xe6c2, 0x8b6f, 0x8b70, 0x8b71, 0x8b72, /*0x98-0x9f*/
-  0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77, 0x8b78, 0x8b79, 0x8b7a, /*0xa0-0xa7*/
-  0x8b7b, 0x8b7c, 0xe6c1, 0x8b7d, 0x8b7e, 0x8b80, 0x8b81, 0x8b82, /*0xa8-0xaf*/
-  0x8b83, 0x8b84, 0xe6c7, 0xcfb1, 0x8b85, 0xebf4, 0x8b86, 0x8b87, /*0xb0-0xb7*/
-  0xe6ca, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0xe6c5, 0x8b8d, /*0xb8-0xbf*/
-  0x8b8e, 0xbcde, 0xc9a9, 0x8b8f, 0x8b90, 0x8b91, 0x8b92, 0x8b93, /*0xc0-0xc7*/
-  0x8b94, 0xbcb5, 0x8b95, 0x8b96, 0xcfd3, 0x8b97, 0x8b98, 0x8b99, /*0xc8-0xcf*/
-  0x8b9a, 0x8b9b, 0xe6c8, 0x8b9c, 0xe6c9, 0x8b9d, 0xe6ce, 0x8b9e, /*0xd0-0xd7*/
-  0xe6d0, 0x8b9f, 0x8ba0, 0x8ba1, 0xe6d1, 0x8ba2, 0x8ba3, 0x8ba4, /*0xd8-0xdf*/
-  0xe6cb, 0xb5d5, 0x8ba5, 0xe6cc, 0x8ba6, 0x8ba7, 0xe6cf, 0x8ba8, /*0xe0-0xe7*/
-  0x8ba9, 0xc4db, 0x8baa, 0xe6c6, 0x8bab, 0x8bac, 0x8bad, 0x8bae, /*0xe8-0xef*/
-  0x8baf, 0xe6cd, 0x8bb0, 0x8bb1, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, /*0xf0-0xf7*/
-  0x8bb6, 0x8bb7, 0x8bb8, 0x8bb9, 0x8bba, 0x8bbb, 0x8bbc, 0x8bbd, /*0xf8-0xff*/
-  /* 0x5b00 */
-  0x8bbe, 0x8bbf, 0x8bc0, 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, /*0x00-0x07*/
-  0x8bc6, 0xe6d2, 0x8bc7, 0x8bc8, 0x8bc9, 0x8bca, 0x8bcb, 0x8bcc, /*0x08-0x0f*/
-  0x8bcd, 0x8bce, 0x8bcf, 0x8bd0, 0x8bd1, 0x8bd2, 0xe6d4, 0xe6d3, /*0x10-0x17*/
-  0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6, 0x8bd7, 0x8bd8, 0x8bd9, 0x8bda, /*0x18-0x1f*/
-  0x8bdb, 0x8bdc, 0x8bdd, 0x8bde, 0x8bdf, 0x8be0, 0x8be1, 0x8be2, /*0x20-0x27*/
-  0x8be3, 0x8be4, 0x8be5, 0x8be6, 0x8be7, 0x8be8, 0x8be9, 0x8bea, /*0x28-0x2f*/
-  0x8beb, 0x8bec, 0xe6d5, 0x8bed, 0xd9f8, 0x8bee, 0x8bef, 0xe6d6, /*0x30-0x37*/
-  0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6, 0x8bf7, /*0x38-0x3f*/
-  0xe6d7, 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd, 0x8bfe, /*0x40-0x47*/
-  0x8c40, 0x8c41, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c46, 0x8c47, /*0x48-0x4f*/
-  0xd7d3, 0xe6dd, 0x8c48, 0xe6de, 0xbfd7, 0xd4d0, 0x8c49, 0xd7d6, /*0x50-0x57*/
-  0xb4e6, 0xcbef, 0xe6da, 0xd8c3, 0xd7ce, 0xd0a2, 0x8c4a, 0xc3cf, /*0x58-0x5f*/
-  0x8c4b, 0x8c4c, 0xe6df, 0xbcbe, 0xb9c2, 0xe6db, 0xd1a7, 0x8c4d, /*0x60-0x67*/
-  0x8c4e, 0xbaa2, 0xc2cf, 0x8c4f, 0xd8ab, 0x8c50, 0x8c51, 0x8c52, /*0x68-0x6f*/
-  0xcaeb, 0xe5ee, 0x8c53, 0xe6dc, 0x8c54, 0xb7f5, 0x8c55, 0x8c56, /*0x70-0x77*/
-  0x8c57, 0x8c58, 0xc8e6, 0x8c59, 0x8c5a, 0xc4f5, 0x8c5b, 0x8c5c, /*0x78-0x7f*/
-  0xe5b2, 0xc4fe, 0x8c5d, 0xcbfc, 0xe5b3, 0xd5ac, 0x8c5e, 0xd3ee, /*0x80-0x87*/
-  0xcad8, 0xb0b2, 0x8c5f, 0xcbce, 0xcdea, 0x8c60, 0x8c61, 0xbaea, /*0x88-0x8f*/
-  0x8c62, 0x8c63, 0x8c64, 0xe5b5, 0x8c65, 0xe5b4, 0x8c66, 0xd7da, /*0x90-0x97*/
-  0xb9d9, 0xd6e6, 0xb6a8, 0xcdf0, 0xd2cb, 0xb1a6, 0xcab5, 0x8c67, /*0x98-0x9f*/
-  0xb3e8, 0xc9f3, 0xbfcd, 0xd0fb, 0xcad2, 0xe5b6, 0xbbc2, 0x8c68, /*0xa0-0xa7*/
-  0x8c69, 0x8c6a, 0xcfdc, 0xb9ac, 0x8c6b, 0x8c6c, 0x8c6d, 0x8c6e, /*0xa8-0xaf*/
-  0xd4d7, 0x8c6f, 0x8c70, 0xbaa6, 0xd1e7, 0xcffc, 0xbcd2, 0x8c71, /*0xb0-0xb7*/
-  0xe5b7, 0xc8dd, 0x8c72, 0x8c73, 0x8c74, 0xbfed, 0xb1f6, 0xcbde, /*0xb8-0xbf*/
-  0x8c75, 0x8c76, 0xbcc5, 0x8c77, 0xbcc4, 0xd2fa, 0xc3dc, 0xbfdc, /*0xc0-0xc7*/
-  0x8c78, 0x8c79, 0x8c7a, 0x8c7b, 0xb8bb, 0x8c7c, 0x8c7d, 0x8c7e, /*0xc8-0xcf*/
-  0xc3c2, 0x8c80, 0xbaae, 0xd4a2, 0x8c81, 0x8c82, 0x8c83, 0x8c84, /*0xd0-0xd7*/
-  0x8c85, 0x8c86, 0x8c87, 0x8c88, 0x8c89, 0xc7de, 0xc4af, 0xb2ec, /*0xd8-0xdf*/
-  0x8c8a, 0xb9d1, 0x8c8b, 0x8c8c, 0xe5bb, 0xc1c8, 0x8c8d, 0x8c8e, /*0xe0-0xe7*/
-  0xd5af, 0x8c8f, 0x8c90, 0x8c91, 0x8c92, 0x8c93, 0xe5bc, 0x8c94, /*0xe8-0xef*/
-  0xe5be, 0x8c95, 0x8c96, 0x8c97, 0x8c98, 0x8c99, 0x8c9a, 0x8c9b, /*0xf0-0xf7*/
-  0xb4e7, 0xb6d4, 0xcbc2, 0xd1b0, 0xb5bc, 0x8c9c, 0x8c9d, 0xcad9, /*0xf8-0xff*/
-  /* 0x5c00 */
-  0x8c9e, 0xb7e2, 0x8c9f, 0x8ca0, 0xc9e4, 0x8ca1, 0xbdab, 0x8ca2, /*0x00-0x07*/
-  0x8ca3, 0xcebe, 0xd7f0, 0x8ca4, 0x8ca5, 0x8ca6, 0x8ca7, 0xd0a1, /*0x08-0x0f*/
-  0x8ca8, 0xc9d9, 0x8ca9, 0x8caa, 0xb6fb, 0xe6d8, 0xbce2, 0x8cab, /*0x10-0x17*/
-  0xb3be, 0x8cac, 0xc9d0, 0x8cad, 0xe6d9, 0xb3a2, 0x8cae, 0x8caf, /*0x18-0x1f*/
-  0x8cb0, 0x8cb1, 0xdecc, 0x8cb2, 0xd3c8, 0xdecd, 0x8cb3, 0xd2a2, /*0x20-0x27*/
-  0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7, 0xdece, 0x8cb8, 0x8cb9, 0x8cba, /*0x28-0x2f*/
-  0x8cbb, 0xbecd, 0x8cbc, 0x8cbd, 0xdecf, 0x8cbe, 0x8cbf, 0x8cc0, /*0x30-0x37*/
-  0xcaac, 0xd2fc, 0xb3df, 0xe5ea, 0xc4e1, 0xbea1, 0xceb2, 0xc4f2, /*0x38-0x3f*/
-  0xbed6, 0xc6a8, 0xb2e3, 0x8cc1, 0x8cc2, 0xbed3, 0x8cc3, 0x8cc4, /*0x40-0x47*/
-  0xc7fc, 0xcceb, 0xbdec, 0xcedd, 0x8cc5, 0x8cc6, 0xcaba, 0xc6c1, /*0x48-0x4f*/
-  0xe5ec, 0xd0bc, 0x8cc7, 0x8cc8, 0x8cc9, 0xd5b9, 0x8cca, 0x8ccb, /*0x50-0x57*/
-  0x8ccc, 0xe5ed, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0, 0xcaf4, 0x8cd1, /*0x58-0x5f*/
-  0xcdc0, 0xc2c5, 0x8cd2, 0xe5ef, 0x8cd3, 0xc2c4, 0xe5f0, 0x8cd4, /*0x60-0x67*/
-  0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, 0xe5f8, 0xcdcd, /*0x68-0x6f*/
-  0x8cdb, 0xc9bd, 0x8cdc, 0x8cdd, 0x8cde, 0x8cdf, 0x8ce0, 0x8ce1, /*0x70-0x77*/
-  0x8ce2, 0xd2d9, 0xe1a8, 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce6, 0xd3ec, /*0x78-0x7f*/
-  0x8ce7, 0xcbea, 0xc6f1, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, /*0x80-0x87*/
-  0xe1ac, 0x8ced, 0x8cee, 0x8cef, 0xe1a7, 0xe1a9, 0x8cf0, 0x8cf1, /*0x88-0x8f*/
-  0xe1aa, 0xe1af, 0x8cf2, 0x8cf3, 0xb2ed, 0x8cf4, 0xe1ab, 0xb8da, /*0x90-0x97*/
-  0xe1ad, 0xe1ae, 0xe1b0, 0xb5ba, 0xe1b1, 0x8cf5, 0x8cf6, 0x8cf7, /*0x98-0x9f*/
-  0x8cf8, 0x8cf9, 0xe1b3, 0xe1b8, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, /*0xa0-0xa7*/
-  0x8cfe, 0xd1d2, 0x8d40, 0xe1b6, 0xe1b5, 0xc1eb, 0x8d41, 0x8d42, /*0xa8-0xaf*/
-  0x8d43, 0xe1b7, 0x8d44, 0xd4c0, 0x8d45, 0xe1b2, 0x8d46, 0xe1ba, /*0xb0-0xb7*/
-  0xb0b6, 0x8d47, 0x8d48, 0x8d49, 0x8d4a, 0xe1b4, 0x8d4b, 0xbff9, /*0xb8-0xbf*/
-  0x8d4c, 0xe1b9, 0x8d4d, 0x8d4e, 0xe1bb, 0x8d4f, 0x8d50, 0x8d51, /*0xc0-0xc7*/
-  0x8d52, 0x8d53, 0x8d54, 0xe1be, 0x8d55, 0x8d56, 0x8d57, 0x8d58, /*0xc8-0xcf*/
-  0x8d59, 0x8d5a, 0xe1bc, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d5e, 0x8d5f, /*0xd0-0xd7*/
-  0x8d60, 0xd6c5, 0x8d61, 0x8d62, 0x8d63, 0x8d64, 0x8d65, 0x8d66, /*0xd8-0xdf*/
-  0x8d67, 0xcfbf, 0x8d68, 0x8d69, 0xe1bd, 0xe1bf, 0xc2cd, 0x8d6a, /*0xe0-0xe7*/
-  0xb6eb, 0x8d6b, 0xd3f8, 0x8d6c, 0x8d6d, 0xc7cd, 0x8d6e, 0x8d6f, /*0xe8-0xef*/
-  0xb7e5, 0x8d70, 0x8d71, 0x8d72, 0x8d73, 0x8d74, 0x8d75, 0x8d76, /*0xf0-0xf7*/
-  0x8d77, 0x8d78, 0x8d79, 0xbefe, 0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d, /*0xf8-0xff*/
-  /* 0x5d00 */
-  0x8d7e, 0x8d80, 0xe1c0, 0xe1c1, 0x8d81, 0x8d82, 0xe1c7, 0xb3e7, /*0x00-0x07*/
-  0x8d83, 0x8d84, 0x8d85, 0x8d86, 0x8d87, 0x8d88, 0xc6e9, 0x8d89, /*0x08-0x0f*/
-  0x8d8a, 0x8d8b, 0x8d8c, 0x8d8d, 0xb4de, 0x8d8e, 0xd1c2, 0x8d8f, /*0x10-0x17*/
-  0x8d90, 0x8d91, 0x8d92, 0xe1c8, 0x8d93, 0x8d94, 0xe1c6, 0x8d95, /*0x18-0x1f*/
-  0x8d96, 0x8d97, 0x8d98, 0x8d99, 0xe1c5, 0x8d9a, 0xe1c3, 0xe1c2, /*0x20-0x27*/
-  0x8d9b, 0xb1c0, 0x8d9c, 0x8d9d, 0x8d9e, 0xd5b8, 0xe1c4, 0x8d9f, /*0x28-0x2f*/
-  0x8da0, 0x8da1, 0x8da2, 0x8da3, 0xe1cb, 0x8da4, 0x8da5, 0x8da6, /*0x30-0x37*/
-  0x8da7, 0x8da8, 0x8da9, 0x8daa, 0x8dab, 0xe1cc, 0xe1ca, 0x8dac, /*0x38-0x3f*/
-  0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db1, 0x8db2, 0x8db3, 0xeffa, /*0x40-0x47*/
-  0x8db4, 0x8db5, 0xe1d3, 0xe1d2, 0xc7b6, 0x8db6, 0x8db7, 0x8db8, /*0x48-0x4f*/
-  0x8db9, 0x8dba, 0x8dbb, 0x8dbc, 0x8dbd, 0x8dbe, 0x8dbf, 0x8dc0, /*0x50-0x57*/
-  0xe1c9, 0x8dc1, 0x8dc2, 0xe1ce, 0x8dc3, 0xe1d0, 0x8dc4, 0x8dc5, /*0x58-0x5f*/
-  0x8dc6, 0x8dc7, 0x8dc8, 0x8dc9, 0x8dca, 0x8dcb, 0x8dcc, 0x8dcd, /*0x60-0x67*/
-  0x8dce, 0xe1d4, 0x8dcf, 0xe1d1, 0xe1cd, 0x8dd0, 0x8dd1, 0xe1cf, /*0x68-0x6f*/
-  0x8dd2, 0x8dd3, 0x8dd4, 0x8dd5, 0xe1d5, 0x8dd6, 0x8dd7, 0x8dd8, /*0x70-0x77*/
-  0x8dd9, 0x8dda, 0x8ddb, 0x8ddc, 0x8ddd, 0x8dde, 0x8ddf, 0x8de0, /*0x78-0x7f*/
-  0x8de1, 0x8de2, 0xe1d6, 0x8de3, 0x8de4, 0x8de5, 0x8de6, 0x8de7, /*0x80-0x87*/
-  0x8de8, 0x8de9, 0x8dea, 0x8deb, 0x8dec, 0x8ded, 0x8dee, 0x8def, /*0x88-0x8f*/
-  0x8df0, 0x8df1, 0x8df2, 0x8df3, 0x8df4, 0x8df5, 0x8df6, 0x8df7, /*0x90-0x97*/
-  0x8df8, 0xe1d7, 0x8df9, 0x8dfa, 0x8dfb, 0xe1d8, 0x8dfc, 0x8dfd, /*0x98-0x9f*/
-  0x8dfe, 0x8e40, 0x8e41, 0x8e42, 0x8e43, 0x8e44, 0x8e45, 0x8e46, /*0xa0-0xa7*/
-  0x8e47, 0x8e48, 0x8e49, 0x8e4a, 0x8e4b, 0x8e4c, 0x8e4d, 0x8e4e, /*0xa8-0xaf*/
-  0x8e4f, 0x8e50, 0x8e51, 0x8e52, 0x8e53, 0x8e54, 0x8e55, 0xe1da, /*0xb0-0xb7*/
-  0x8e56, 0x8e57, 0x8e58, 0x8e59, 0x8e5a, 0x8e5b, 0x8e5c, 0x8e5d, /*0xb8-0xbf*/
-  0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0xe1db, 0x8e63, 0x8e64, /*0xc0-0xc7*/
-  0x8e65, 0x8e66, 0x8e67, 0x8e68, 0x8e69, 0xcea1, 0x8e6a, 0x8e6b, /*0xc8-0xcf*/
-  0x8e6c, 0x8e6d, 0x8e6e, 0x8e6f, 0x8e70, 0x8e71, 0x8e72, 0x8e73, /*0xd0-0xd7*/
-  0x8e74, 0x8e75, 0x8e76, 0xe7dd, 0x8e77, 0xb4a8, 0xd6dd, 0x8e78, /*0xd8-0xdf*/
-  0x8e79, 0xd1b2, 0xb3b2, 0x8e7a, 0x8e7b, 0xb9a4, 0xd7f3, 0xc7c9, /*0xe0-0xe7*/
-  0xbede, 0xb9ae, 0x8e7c, 0xced7, 0x8e7d, 0x8e7e, 0xb2ee, 0xdbcf, /*0xe8-0xef*/
-  0x8e80, 0xbcba, 0xd2d1, 0xcbc8, 0xb0cd, 0x8e81, 0x8e82, 0xcfef, /*0xf0-0xf7*/
-  0x8e83, 0x8e84, 0x8e85, 0x8e86, 0x8e87, 0xd9e3, 0xbded, 0x8e88, /*0xf8-0xff*/
-  /* 0x5e00 */
-  0x8e89, 0xb1d2, 0xcad0, 0xb2bc, 0x8e8a, 0xcba7, 0xb7ab, 0x8e8b, /*0x00-0x07*/
-  0xcaa6, 0x8e8c, 0x8e8d, 0x8e8e, 0xcfa3, 0x8e8f, 0x8e90, 0xe0f8, /*0x08-0x0f*/
-  0xd5ca, 0xe0fb, 0x8e91, 0x8e92, 0xe0fa, 0xc5c1, 0xccfb, 0x8e93, /*0x10-0x17*/
-  0xc1b1, 0xe0f9, 0xd6e3, 0xb2af, 0xd6c4, 0xb5db, 0x8e94, 0x8e95, /*0x18-0x1f*/
-  0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0xb4f8, 0xd6a1, /*0x20-0x27*/
-  0x8e9c, 0x8e9d, 0x8e9e, 0x8e9f, 0x8ea0, 0xcfaf, 0xb0ef, 0x8ea1, /*0x28-0x2f*/
-  0x8ea2, 0xe0fc, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6, 0x8ea7, 0xe1a1, /*0x30-0x37*/
-  0xb3a3, 0x8ea8, 0x8ea9, 0xe0fd, 0xe0fe, 0xc3b1, 0x8eaa, 0x8eab, /*0x38-0x3f*/
-  0x8eac, 0x8ead, 0xc3dd, 0x8eae, 0xe1a2, 0xb7f9, 0x8eaf, 0x8eb0, /*0x40-0x47*/
-  0x8eb1, 0x8eb2, 0x8eb3, 0x8eb4, 0xbbcf, 0x8eb5, 0x8eb6, 0x8eb7, /*0x48-0x4f*/
-  0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0xe1a3, 0xc4bb, 0x8ebc, 0x8ebd, /*0x50-0x57*/
-  0x8ebe, 0x8ebf, 0x8ec0, 0xe1a4, 0x8ec1, 0x8ec2, 0xe1a5, 0x8ec3, /*0x58-0x5f*/
-  0x8ec4, 0xe1a6, 0xb4b1, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, /*0x60-0x67*/
-  0x8eca, 0x8ecb, 0x8ecc, 0x8ecd, 0x8ece, 0x8ecf, 0x8ed0, 0x8ed1, /*0x68-0x6f*/
-  0x8ed2, 0x8ed3, 0xb8c9, 0xc6bd, 0xc4ea, 0x8ed4, 0xb2a2, 0x8ed5, /*0x70-0x77*/
-  0xd0d2, 0x8ed6, 0xe7db, 0xbbc3, 0xd3d7, 0xd3c4, 0x8ed7, 0xb9e3, /*0x78-0x7f*/
-  0xe2cf, 0x8ed8, 0x8ed9, 0x8eda, 0xd7af, 0x8edb, 0xc7ec, 0xb1d3, /*0x80-0x87*/
-  0x8edc, 0x8edd, 0xb4b2, 0xe2d1, 0x8ede, 0x8edf, 0x8ee0, 0xd0f2, /*0x88-0x8f*/
-  0xc2ae, 0xe2d0, 0x8ee1, 0xbfe2, 0xd3a6, 0xb5d7, 0xe2d2, 0xb5ea, /*0x90-0x97*/
-  0x8ee2, 0xc3ed, 0xb8fd, 0x8ee3, 0xb8ae, 0x8ee4, 0xc5d3, 0xb7cf, /*0x98-0x9f*/
-  0xe2d4, 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0xe2d3, 0xb6c8, 0xd7f9, /*0xa0-0xa7*/
-  0x8ee9, 0x8eea, 0x8eeb, 0x8eec, 0x8eed, 0xcda5, 0x8eee, 0x8eef, /*0xa8-0xaf*/
-  0x8ef0, 0x8ef1, 0x8ef2, 0xe2d8, 0x8ef3, 0xe2d6, 0xcafc, 0xbfb5, /*0xb0-0xb7*/
-  0xd3b9, 0xe2d5, 0x8ef4, 0x8ef5, 0x8ef6, 0x8ef7, 0xe2d7, 0x8ef8, /*0xb8-0xbf*/
-  0x8ef9, 0x8efa, 0x8efb, 0x8efc, 0x8efd, 0x8efe, 0x8f40, 0x8f41, /*0xc0-0xc7*/
-  0x8f42, 0xc1ae, 0xc0c8, 0x8f43, 0x8f44, 0x8f45, 0x8f46, 0x8f47, /*0xc8-0xcf*/
-  0x8f48, 0xe2db, 0xe2da, 0xc0aa, 0x8f49, 0x8f4a, 0xc1ce, 0x8f4b, /*0xd0-0xd7*/
-  0x8f4c, 0x8f4d, 0x8f4e, 0xe2dc, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, /*0xd8-0xdf*/
-  0x8f53, 0x8f54, 0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, /*0xe0-0xe7*/
-  0xe2dd, 0x8f5b, 0xe2de, 0x8f5c, 0x8f5d, 0x8f5e, 0x8f5f, 0x8f60, /*0xe8-0xef*/
-  0x8f61, 0x8f62, 0x8f63, 0x8f64, 0xdbc8, 0x8f65, 0xd1d3, 0xcda2, /*0xf0-0xf7*/
-  0x8f66, 0x8f67, 0xbda8, 0x8f68, 0x8f69, 0x8f6a, 0xdec3, 0xd8a5, /*0xf8-0xff*/
-  /* 0x5f00 */
-  0xbfaa, 0xdbcd, 0xd2ec, 0xc6fa, 0xc5aa, 0x8f6b, 0x8f6c, 0x8f6d, /*0x00-0x07*/
-  0xdec4, 0x8f6e, 0xb1d7, 0xdfae, 0x8f6f, 0x8f70, 0x8f71, 0xcabd, /*0x08-0x0f*/
-  0x8f72, 0xdfb1, 0x8f73, 0xb9ad, 0x8f74, 0xd2fd, 0x8f75, 0xb8a5, /*0x10-0x17*/
-  0xbaeb, 0x8f76, 0x8f77, 0xb3da, 0x8f78, 0x8f79, 0x8f7a, 0xb5dc, /*0x18-0x1f*/
-  0xd5c5, 0x8f7b, 0x8f7c, 0x8f7d, 0x8f7e, 0xc3d6, 0xcfd2, 0xbba1, /*0x20-0x27*/
-  0x8f80, 0xe5f3, 0xe5f2, 0x8f81, 0x8f82, 0xe5f4, 0x8f83, 0xcde4, /*0x28-0x2f*/
-  0x8f84, 0xc8f5, 0x8f85, 0x8f86, 0x8f87, 0x8f88, 0x8f89, 0x8f8a, /*0x30-0x37*/
-  0x8f8b, 0xb5af, 0xc7bf, 0x8f8c, 0xe5f6, 0x8f8d, 0x8f8e, 0x8f8f, /*0x38-0x3f*/
-  0xecb0, 0x8f90, 0x8f91, 0x8f92, 0x8f93, 0x8f94, 0x8f95, 0x8f96, /*0x40-0x47*/
-  0x8f97, 0x8f98, 0x8f99, 0x8f9a, 0x8f9b, 0x8f9c, 0x8f9d, 0x8f9e, /*0x48-0x4f*/
-  0xe5e6, 0x8f9f, 0xb9e9, 0xb5b1, 0x8fa0, 0xc2bc, 0xe5e8, 0xe5e7, /*0x50-0x57*/
-  0xe5e9, 0x8fa1, 0x8fa2, 0x8fa3, 0x8fa4, 0xd2cd, 0x8fa5, 0x8fa6, /*0x58-0x5f*/
-  0x8fa7, 0xe1ea, 0xd0ce, 0x8fa8, 0xcdae, 0x8fa9, 0xd1e5, 0x8faa, /*0x60-0x67*/
-  0x8fab, 0xb2ca, 0xb1eb, 0x8fac, 0xb1f2, 0xc5ed, 0x8fad, 0x8fae, /*0x68-0x6f*/
-  0xd5c3, 0xd3b0, 0x8faf, 0xe1dc, 0x8fb0, 0x8fb1, 0x8fb2, 0xe1dd, /*0x70-0x77*/
-  0x8fb3, 0xd2db, 0x8fb4, 0xb3b9, 0xb1cb, 0x8fb5, 0x8fb6, 0x8fb7, /*0x78-0x7f*/
-  0xcdf9, 0xd5f7, 0xe1de, 0x8fb8, 0xbeb6, 0xb4fd, 0x8fb9, 0xe1df, /*0x80-0x87*/
-  0xbadc, 0xe1e0, 0xbbb2, 0xc2c9, 0xe1e1, 0x8fba, 0x8fbb, 0x8fbc, /*0x88-0x8f*/
-  0xd0ec, 0x8fbd, 0xcdbd, 0x8fbe, 0x8fbf, 0xe1e2, 0x8fc0, 0xb5c3, /*0x90-0x97*/
-  0xc5c7, 0xe1e3, 0x8fc1, 0x8fc2, 0xe1e4, 0x8fc3, 0x8fc4, 0x8fc5, /*0x98-0x9f*/
-  0x8fc6, 0xd3f9, 0x8fc7, 0x8fc8, 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, /*0xa0-0xa7*/
-  0xe1e5, 0x8fcd, 0xd1ad, 0x8fce, 0x8fcf, 0xe1e6, 0xcea2, 0x8fd0, /*0xa8-0xaf*/
-  0x8fd1, 0x8fd2, 0x8fd3, 0x8fd4, 0x8fd5, 0xe1e7, 0x8fd6, 0xb5c2, /*0xb0-0xb7*/
-  0x8fd7, 0x8fd8, 0x8fd9, 0x8fda, 0xe1e8, 0xbbd5, 0x8fdb, 0x8fdc, /*0xb8-0xbf*/
-  0x8fdd, 0x8fde, 0x8fdf, 0xd0c4, 0xe2e0, 0xb1d8, 0xd2e4, 0x8fe0, /*0xc0-0xc7*/
-  0x8fe1, 0xe2e1, 0x8fe2, 0x8fe3, 0xbcc9, 0xc8cc, 0x8fe4, 0xe2e3, /*0xc8-0xcf*/
-  0xecfe, 0xecfd, 0xdfaf, 0x8fe5, 0x8fe6, 0x8fe7, 0xe2e2, 0xd6be, /*0xd0-0xd7*/
-  0xcdfc, 0xc3a6, 0x8fe8, 0x8fe9, 0x8fea, 0xe3c3, 0x8feb, 0x8fec, /*0xd8-0xdf*/
-  0xd6d2, 0xe2e7, 0x8fed, 0x8fee, 0xe2e8, 0x8fef, 0x8ff0, 0xd3c7, /*0xe0-0xe7*/
-  0x8ff1, 0x8ff2, 0xe2ec, 0xbfec, 0x8ff3, 0xe2ed, 0xe2e5, 0x8ff4, /*0xe8-0xef*/
-  0x8ff5, 0xb3c0, 0x8ff6, 0x8ff7, 0x8ff8, 0xc4ee, 0x8ff9, 0x8ffa, /*0xf0-0xf7*/
-  0xe2ee, 0x8ffb, 0x8ffc, 0xd0c3, 0x8ffd, 0xbaf6, 0xe2e9, 0xb7de, /*0xf8-0xff*/
-  /* 0x6000 */
-  0xbbb3, 0xccac, 0xcbcb, 0xe2e4, 0xe2e6, 0xe2ea, 0xe2eb, 0x8ffe, /*0x00-0x07*/
-  0x9040, 0x9041, 0xe2f7, 0x9042, 0x9043, 0xe2f4, 0xd4f5, 0xe2f3, /*0x08-0x0f*/
-  0x9044, 0x9045, 0xc5ad, 0x9046, 0xd5fa, 0xc5c2, 0xb2c0, 0x9047, /*0x10-0x17*/
-  0x9048, 0xe2ef, 0x9049, 0xe2f2, 0xc1af, 0xcbbc, 0x904a, 0x904b, /*0x18-0x1f*/
-  0xb5a1, 0xe2f9, 0x904c, 0x904d, 0x904e, 0xbcb1, 0xe2f1, 0xd0d4, /*0x20-0x27*/
-  0xd4b9, 0xe2f5, 0xb9d6, 0xe2f6, 0x904f, 0x9050, 0x9051, 0xc7d3, /*0x28-0x2f*/
-  0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0xe2f0, 0x9057, 0x9058, /*0x30-0x37*/
-  0x9059, 0x905a, 0x905b, 0xd7dc, 0xeda1, 0x905c, 0x905d, 0xe2f8, /*0x38-0x3f*/
-  0x905e, 0xeda5, 0xe2fe, 0xcad1, 0x905f, 0x9060, 0x9061, 0x9062, /*0x40-0x47*/
-  0x9063, 0x9064, 0x9065, 0xc1b5, 0x9066, 0xbbd0, 0x9067, 0x9068, /*0x48-0x4f*/
-  0xbfd6, 0x9069, 0xbae3, 0x906a, 0x906b, 0xcba1, 0x906c, 0x906d, /*0x50-0x57*/
-  0x906e, 0xeda6, 0xeda3, 0x906f, 0x9070, 0xeda2, 0x9071, 0x9072, /*0x58-0x5f*/
-  0x9073, 0x9074, 0xbbd6, 0xeda7, 0xd0f4, 0x9075, 0x9076, 0xeda4, /*0x60-0x67*/
-  0xbade, 0xb6f7, 0xe3a1, 0xb6b2, 0xccf1, 0xb9a7, 0x9077, 0xcfa2, /*0x68-0x6f*/
-  0xc7a1, 0x9078, 0x9079, 0xbfd2, 0x907a, 0x907b, 0xb6f1, 0x907c, /*0x70-0x77*/
-  0xe2fa, 0xe2fb, 0xe2fd, 0xe2fc, 0xc4d5, 0xe3a2, 0x907d, 0xd3c1, /*0x78-0x7f*/
-  0x907e, 0x9080, 0x9081, 0xe3a7, 0xc7c4, 0x9082, 0x9083, 0x9084, /*0x80-0x87*/
-  0x9085, 0xcfa4, 0x9086, 0x9087, 0xe3a9, 0xbab7, 0x9088, 0x9089, /*0x88-0x8f*/
-  0x908a, 0x908b, 0xe3a8, 0x908c, 0xbbda, 0x908d, 0xe3a3, 0x908e, /*0x90-0x97*/
-  0x908f, 0x9090, 0xe3a4, 0xe3aa, 0x9091, 0xe3a6, 0x9092, 0xcef2, /*0x98-0x9f*/
-  0xd3c6, 0x9093, 0x9094, 0xbbbc, 0x9095, 0x9096, 0xd4c3, 0x9097, /*0xa0-0xa7*/
-  0xc4fa, 0x9098, 0x9099, 0xeda8, 0xd0fc, 0xe3a5, 0x909a, 0xc3f5, /*0xa8-0xaf*/
-  0x909b, 0xe3ad, 0xb1af, 0x909c, 0xe3b2, 0x909d, 0x909e, 0x909f, /*0xb0-0xb7*/
-  0xbcc2, 0x90a0, 0x90a1, 0xe3ac, 0xb5bf, 0x90a2, 0x90a3, 0x90a4, /*0xb8-0xbf*/
-  0x90a5, 0x90a6, 0x90a7, 0x90a8, 0x90a9, 0xc7e9, 0xe3b0, 0x90aa, /*0xc0-0xc7*/
-  0x90ab, 0x90ac, 0xbeaa, 0xcdef, 0x90ad, 0x90ae, 0x90af, 0x90b0, /*0xc8-0xcf*/
-  0x90b1, 0xbbf3, 0x90b2, 0x90b3, 0x90b4, 0xcce8, 0x90b5, 0x90b6, /*0xd0-0xd7*/
-  0xe3af, 0x90b7, 0xe3b1, 0x90b8, 0xcfa7, 0xe3ae, 0x90b9, 0xcea9, /*0xd8-0xdf*/
-  0xbbdd, 0x90ba, 0x90bb, 0x90bc, 0x90bd, 0x90be, 0xb5eb, 0xbee5, /*0xe0-0xe7*/
-  0xb2d2, 0xb3cd, 0x90bf, 0xb1b9, 0xe3ab, 0xb2d1, 0xb5ac, 0xb9df, /*0xe8-0xef*/
-  0xb6e8, 0x90c0, 0x90c1, 0xcfeb, 0xe3b7, 0x90c2, 0xbbcc, 0x90c3, /*0xf0-0xf7*/
-  0x90c4, 0xc8c7, 0xd0ca, 0x90c5, 0x90c6, 0x90c7, 0x90c8, 0x90c9, /*0xf8-0xff*/
-  /* 0x6100 */
-  0xe3b8, 0xb3ee, 0x90ca, 0x90cb, 0x90cc, 0x90cd, 0xeda9, 0x90ce, /*0x00-0x07*/
-  0xd3fa, 0xd3e4, 0x90cf, 0x90d0, 0x90d1, 0xedaa, 0xe3b9, 0xd2e2, /*0x08-0x0f*/
-  0x90d2, 0x90d3, 0x90d4, 0x90d5, 0x90d6, 0xe3b5, 0x90d7, 0x90d8, /*0x10-0x17*/
-  0x90d9, 0x90da, 0xd3de, 0x90db, 0x90dc, 0x90dd, 0x90de, 0xb8d0, /*0x18-0x1f*/
-  0xe3b3, 0x90df, 0x90e0, 0xe3b6, 0xb7df, 0x90e1, 0xe3b4, 0xc0a2, /*0x20-0x27*/
-  0x90e2, 0x90e3, 0x90e4, 0xe3ba, 0x90e5, 0x90e6, 0x90e7, 0x90e8, /*0x28-0x2f*/
-  0x90e9, 0x90ea, 0x90eb, 0x90ec, 0x90ed, 0x90ee, 0x90ef, 0x90f0, /*0x30-0x37*/
-  0x90f1, 0x90f2, 0x90f3, 0x90f4, 0x90f5, 0x90f6, 0x90f7, 0xd4b8, /*0x38-0x3f*/
-  0x90f8, 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90fd, 0x90fe, 0x9140, /*0x40-0x47*/
-  0xb4c8, 0x9141, 0xe3bb, 0x9142, 0xbbc5, 0x9143, 0xc9f7, 0x9144, /*0x48-0x4f*/
-  0x9145, 0xc9e5, 0x9146, 0x9147, 0x9148, 0xc4bd, 0x9149, 0x914a, /*0x50-0x57*/
-  0x914b, 0x914c, 0x914d, 0x914e, 0x914f, 0xedab, 0x9150, 0x9151, /*0x58-0x5f*/
-  0x9152, 0x9153, 0xc2fd, 0x9154, 0x9155, 0x9156, 0x9157, 0xbbdb, /*0x60-0x67*/
-  0xbfae, 0x9158, 0x9159, 0x915a, 0x915b, 0x915c, 0x915d, 0x915e, /*0x68-0x6f*/
-  0xcebf, 0x915f, 0x9160, 0x9161, 0x9162, 0xe3bc, 0x9163, 0xbfb6, /*0x70-0x77*/
-  0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169, 0x916a, 0x916b, /*0x78-0x7f*/
-  0x916c, 0x916d, 0x916e, 0x916f, 0x9170, 0x9171, 0x9172, 0x9173, /*0x80-0x87*/
-  0x9174, 0x9175, 0x9176, 0xb1ef, 0x9177, 0x9178, 0xd4f7, 0x9179, /*0x88-0x8f*/
-  0x917a, 0x917b, 0x917c, 0x917d, 0xe3be, 0x917e, 0x9180, 0x9181, /*0x90-0x97*/
-  0x9182, 0x9183, 0x9184, 0x9185, 0x9186, 0xedad, 0x9187, 0x9188, /*0x98-0x9f*/
-  0x9189, 0x918a, 0x918b, 0x918c, 0x918d, 0x918e, 0x918f, 0xe3bf, /*0xa0-0xa7*/
-  0xbaa9, 0xedac, 0x9190, 0x9191, 0xe3bd, 0x9192, 0x9193, 0x9194, /*0xa8-0xaf*/
-  0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919a, 0x919b, 0xe3c0, /*0xb0-0xb7*/
-  0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0xbab6, 0x91a2, /*0xb8-0xbf*/
-  0x91a3, 0x91a4, 0xb6ae, 0x91a5, 0x91a6, 0x91a7, 0x91a8, 0x91a9, /*0xc0-0xc7*/
-  0xd0b8, 0x91aa, 0xb0c3, 0xedae, 0x91ab, 0x91ac, 0x91ad, 0x91ae, /*0xc8-0xcf*/
-  0x91af, 0xedaf, 0xc0c1, 0x91b0, 0xe3c1, 0x91b1, 0x91b2, 0x91b3, /*0xd0-0xd7*/
-  0x91b4, 0x91b5, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91ba, 0x91bb, /*0xd8-0xdf*/
-  0x91bc, 0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0xc5b3, 0x91c2, /*0xe0-0xe7*/
-  0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c7, 0x91c8, 0x91c9, 0x91ca, /*0xe8-0xef*/
-  0x91cb, 0x91cc, 0x91cd, 0x91ce, 0x91cf, 0xe3c2, 0x91d0, 0x91d1, /*0xf0-0xf7*/
-  0x91d2, 0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0xdcb2, /*0xf8-0xff*/
-  /* 0x6200 */
-  0x91d9, 0x91da, 0x91db, 0x91dc, 0x91dd, 0x91de, 0xedb0, 0x91df, /*0x00-0x07*/
-  0xb8ea, 0x91e0, 0xceec, 0xeaa7, 0xd0e7, 0xcaf9, 0xc8d6, 0xcfb7, /*0x08-0x0f*/
-  0xb3c9, 0xced2, 0xbde4, 0x91e1, 0x91e2, 0xe3de, 0xbbf2, 0xeaa8, /*0x10-0x17*/
-  0xd5bd, 0x91e3, 0xc6dd, 0xeaa9, 0x91e4, 0x91e5, 0x91e6, 0xeaaa, /*0x18-0x1f*/
-  0x91e7, 0xeaac, 0xeaab, 0x91e8, 0xeaae, 0xeaad, 0x91e9, 0x91ea, /*0x20-0x27*/
-  0x91eb, 0x91ec, 0xbdd8, 0x91ed, 0xeaaf, 0x91ee, 0xc2be, 0x91ef, /*0x28-0x2f*/
-  0x91f0, 0x91f1, 0x91f2, 0xb4c1, 0xb4f7, 0x91f3, 0x91f4, 0xbba7, /*0x30-0x37*/
-  0x91f5, 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0xece6, 0xece5, 0xb7bf, /*0x38-0x3f*/
-  0xcbf9, 0xb1e2, 0x91fa, 0xece7, 0x91fb, 0x91fc, 0x91fd, 0xc9c8, /*0x40-0x47*/
-  0xece8, 0xece9, 0x91fe, 0xcad6, 0xded0, 0xb2c5, 0xd4fa, 0x9240, /*0x48-0x4f*/
-  0x9241, 0xc6cb, 0xb0c7, 0xb4f2, 0xc8d3, 0x9242, 0x9243, 0x9244, /*0x50-0x57*/
-  0xcdd0, 0x9245, 0x9246, 0xbfb8, 0x9247, 0x9248, 0x9249, 0x924a, /*0x58-0x5f*/
-  0x924b, 0x924c, 0x924d, 0xbfdb, 0x924e, 0x924f, 0xc7a4, 0xd6b4, /*0x60-0x67*/
-  0x9250, 0xc0a9, 0xded1, 0xc9a8, 0xd1ef, 0xc5a4, 0xb0e7, 0xb3b6, /*0x68-0x6f*/
-  0xc8c5, 0x9251, 0x9252, 0xb0e2, 0x9253, 0x9254, 0xb7f6, 0x9255, /*0x70-0x77*/
-  0x9256, 0xc5fa, 0x9257, 0x9258, 0xb6f3, 0x9259, 0xd5d2, 0xb3d0, /*0x78-0x7f*/
-  0xbcbc, 0x925a, 0x925b, 0x925c, 0xb3ad, 0x925d, 0x925e, 0x925f, /*0x80-0x87*/
-  0x9260, 0xbef1, 0xb0d1, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, /*0x88-0x8f*/
-  0x9266, 0xd2d6, 0xcae3, 0xd7a5, 0x9267, 0xcdb6, 0xb6b6, 0xbfb9, /*0x90-0x97*/
-  0xd5db, 0x9268, 0xb8a7, 0xc5d7, 0x9269, 0x926a, 0x926b, 0xded2, /*0x98-0x9f*/
-  0xbfd9, 0xc2d5, 0xc7c0, 0x926c, 0xbba4, 0xb1a8, 0x926d, 0x926e, /*0xa0-0xa7*/
-  0xc5ea, 0x926f, 0x9270, 0xc5fb, 0xcca7, 0x9271, 0x9272, 0x9273, /*0xa8-0xaf*/
-  0x9274, 0xb1a7, 0x9275, 0x9276, 0x9277, 0xb5d6, 0x9278, 0x9279, /*0xb0-0xb7*/
-  0x927a, 0xc4a8, 0x927b, 0xded3, 0xd1ba, 0xb3e9, 0x927c, 0xc3f2, /*0xb8-0xbf*/
-  0x927d, 0x927e, 0xb7f7, 0x9280, 0xd6f4, 0xb5a3, 0xb2f0, 0xc4b4, /*0xc0-0xc7*/
-  0xc4e9, 0xc0ad, 0xded4, 0x9281, 0xb0e8, 0xc5c4, 0xc1e0, 0x9282, /*0xc8-0xcf*/
-  0xb9d5, 0x9283, 0xbedc, 0xcdd8, 0xb0ce, 0x9284, 0xcdcf, 0xded6, /*0xd0-0xd7*/
-  0xbed0, 0xd7be, 0xded5, 0xd5d0, 0xb0dd, 0x9285, 0x9286, 0xc4e2, /*0xd8-0xdf*/
-  0x9287, 0x9288, 0xc2a3, 0xbcf0, 0x9289, 0xd3b5, 0xc0b9, 0xc5a1, /*0xe0-0xe7*/
-  0xb2a6, 0xd4f1, 0x928a, 0x928b, 0xc0a8, 0xcac3, 0xded7, 0xd5fc, /*0xe8-0xef*/
-  0x928c, 0xb9b0, 0x928d, 0xc8ad, 0xcba9, 0x928e, 0xded9, 0xbfbd, /*0xf0-0xf7*/
-  0x928f, 0x9290, 0x9291, 0x9292, 0xc6b4, 0xd7a7, 0xcab0, 0xc4c3, /*0xf8-0xff*/
-  /* 0x6300 */
-  0x9293, 0xb3d6, 0xb9d2, 0x9294, 0x9295, 0x9296, 0x9297, 0xd6b8, /*0x00-0x07*/
-  0xeafc, 0xb0b4, 0x9298, 0x9299, 0x929a, 0x929b, 0xbfe6, 0x929c, /*0x08-0x0f*/
-  0x929d, 0xccf4, 0x929e, 0x929f, 0x92a0, 0x92a1, 0xcdda, 0x92a2, /*0x10-0x17*/
-  0x92a3, 0x92a4, 0xd6bf, 0xc2ce, 0x92a5, 0xcece, 0xcca2, 0xd0ae, /*0x18-0x1f*/
-  0xc4d3, 0xb5b2, 0xded8, 0xd5f5, 0xbcb7, 0xbbd3, 0x92a6, 0x92a7, /*0x20-0x27*/
-  0xb0a4, 0x92a8, 0xc5b2, 0xb4ec, 0x92a9, 0x92aa, 0x92ab, 0xd5f1, /*0x28-0x2f*/
-  0x92ac, 0x92ad, 0xeafd, 0x92ae, 0x92af, 0x92b0, 0x92b1, 0x92b2, /*0x30-0x37*/
-  0x92b3, 0xdeda, 0xcda6, 0x92b4, 0x92b5, 0xcdec, 0x92b6, 0x92b7, /*0x38-0x3f*/
-  0x92b8, 0x92b9, 0xcee6, 0xdedc, 0x92ba, 0xcdb1, 0xc0a6, 0x92bb, /*0x40-0x47*/
-  0x92bc, 0xd7bd, 0x92bd, 0xdedb, 0xb0c6, 0xbab4, 0xc9d3, 0xc4f3, /*0x48-0x4f*/
-  0xbee8, 0x92be, 0x92bf, 0x92c0, 0x92c1, 0xb2b6, 0x92c2, 0x92c3, /*0x50-0x57*/
-  0x92c4, 0x92c5, 0x92c6, 0x92c7, 0x92c8, 0x92c9, 0xc0cc, 0xcbf0, /*0x58-0x5f*/
-  0x92ca, 0xbcf1, 0xbbbb, 0xb5b7, 0x92cb, 0x92cc, 0x92cd, 0xc5f5, /*0x60-0x67*/
-  0x92ce, 0xdee6, 0x92cf, 0x92d0, 0x92d1, 0xdee3, 0xbedd, 0x92d2, /*0x68-0x6f*/
-  0x92d3, 0xdedf, 0x92d4, 0x92d5, 0x92d6, 0x92d7, 0xb4b7, 0xbddd, /*0x70-0x77*/
-  0x92d8, 0x92d9, 0xdee0, 0xc4ed, 0x92da, 0x92db, 0x92dc, 0x92dd, /*0x78-0x7f*/
-  0xcfc6, 0x92de, 0xb5e0, 0x92df, 0x92e0, 0x92e1, 0x92e2, 0xb6de, /*0x80-0x87*/
-  0xcada, 0xb5f4, 0xdee5, 0x92e3, 0xd5c6, 0x92e4, 0xdee1, 0xcccd, /*0x88-0x8f*/
-  0xc6fe, 0x92e5, 0xc5c5, 0x92e6, 0x92e7, 0x92e8, 0xd2b4, 0x92e9, /*0x90-0x97*/
-  0xbef2, 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, /*0x98-0x9f*/
-  0xc2d3, 0x92f1, 0xccbd, 0xb3b8, 0x92f2, 0xbdd3, 0x92f3, 0xbfd8, /*0xa0-0xa7*/
-  0xcdc6, 0xd1da, 0xb4eb, 0x92f4, 0xdee4, 0xdedd, 0xdee7, 0x92f5, /*0xa8-0xaf*/
-  0xeafe, 0x92f6, 0x92f7, 0xc2b0, 0xdee2, 0x92f8, 0x92f9, 0xd6c0, /*0xb0-0xb7*/
-  0xb5a7, 0x92fa, 0xb2f4, 0x92fb, 0xdee8, 0x92fc, 0xdef2, 0x92fd, /*0xb8-0xbf*/
-  0x92fe, 0x9340, 0x9341, 0x9342, 0xdeed, 0x9343, 0xdef1, 0x9344, /*0xc0-0xc7*/
-  0x9345, 0xc8e0, 0x9346, 0x9347, 0x9348, 0xd7e1, 0xdeef, 0xc3e8, /*0xc8-0xcf*/
-  0xcce1, 0x9349, 0xb2e5, 0x934a, 0x934b, 0x934c, 0xd2be, 0x934d, /*0xd0-0xd7*/
-  0x934e, 0x934f, 0x9350, 0x9351, 0x9352, 0x9353, 0xdeee, 0x9354, /*0xd8-0xdf*/
-  0xdeeb, 0xced5, 0x9355, 0xb4a7, 0x9356, 0x9357, 0x9358, 0x9359, /*0xe0-0xe7*/
-  0x935a, 0xbfab, 0xbebe, 0x935b, 0x935c, 0xbdd2, 0x935d, 0x935e, /*0xe8-0xef*/
-  0x935f, 0x9360, 0xdee9, 0x9361, 0xd4ae, 0x9362, 0xdede, 0x9363, /*0xf0-0xf7*/
-  0xdeea, 0x9364, 0x9365, 0x9366, 0x9367, 0xc0bf, 0x9368, 0xdeec, /*0xf8-0xff*/
-  /* 0x6400 */
-  0xb2f3, 0xb8e9, 0xc2a7, 0x9369, 0x936a, 0xbdc1, 0x936b, 0x936c, /*0x00-0x07*/
-  0x936d, 0x936e, 0x936f, 0xdef5, 0xdef8, 0x9370, 0x9371, 0xb2ab, /*0x08-0x0f*/
-  0xb4a4, 0x9372, 0x9373, 0xb4ea, 0xc9a6, 0x9374, 0x9375, 0x9376, /*0x10-0x17*/
-  0x9377, 0x9378, 0x9379, 0xdef6, 0xcbd1, 0x937a, 0xb8e3, 0x937b, /*0x18-0x1f*/
-  0xdef7, 0xdefa, 0x937c, 0x937d, 0x937e, 0x9380, 0xdef9, 0x9381, /*0x20-0x27*/
-  0x9382, 0x9383, 0xccc2, 0x9384, 0xb0e1, 0xb4ee, 0x9385, 0x9386, /*0x28-0x2f*/
-  0x9387, 0x9388, 0x9389, 0x938a, 0xe5ba, 0x938b, 0x938c, 0x938d, /*0x30-0x37*/
-  0x938e, 0x938f, 0xd0af, 0x9390, 0x9391, 0xb2eb, 0x9392, 0xeba1, /*0x38-0x3f*/
-  0x9393, 0xdef4, 0x9394, 0x9395, 0xc9e3, 0xdef3, 0xb0da, 0xd2a1, /*0x40-0x47*/
-  0xb1f7, 0x9396, 0xccaf, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, /*0x48-0x4f*/
-  0x939c, 0x939d, 0xdef0, 0x939e, 0xcba4, 0x939f, 0x93a0, 0x93a1, /*0x50-0x57*/
-  0xd5aa, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6, 0xdefb, 0x93a7, /*0x58-0x5f*/
-  0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae, 0xb4dd, /*0x60-0x67*/
-  0x93af, 0xc4a6, 0x93b0, 0x93b1, 0x93b2, 0xdefd, 0x93b3, 0x93b4, /*0x68-0x6f*/
-  0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, /*0x70-0x77*/
-  0xc3fe, 0xc4a1, 0xdfa1, 0x93bd, 0x93be, 0x93bf, 0x93c0, 0x93c1, /*0x78-0x7f*/
-  0x93c2, 0x93c3, 0xc1cc, 0x93c4, 0xdefc, 0xbeef, 0x93c5, 0xc6b2, /*0x80-0x87*/
-  0x93c6, 0x93c7, 0x93c8, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, /*0x88-0x8f*/
-  0x93ce, 0xb3c5, 0xc8f6, 0x93cf, 0x93d0, 0xcbba, 0xdefe, 0x93d1, /*0x90-0x97*/
-  0x93d2, 0xdfa4, 0x93d3, 0x93d4, 0x93d5, 0x93d6, 0xd7b2, 0x93d7, /*0x98-0x9f*/
-  0x93d8, 0x93d9, 0x93da, 0x93db, 0xb3b7, 0x93dc, 0x93dd, 0x93de, /*0xa0-0xa7*/
-  0x93df, 0xc1c3, 0x93e0, 0x93e1, 0xc7cb, 0xb2a5, 0xb4e9, 0x93e2, /*0xa8-0xaf*/
-  0xd7ab, 0x93e3, 0x93e4, 0x93e5, 0x93e6, 0xc4ec, 0x93e7, 0xdfa2, /*0xb0-0xb7*/
-  0xdfa3, 0x93e8, 0xdfa5, 0x93e9, 0xbab3, 0x93ea, 0x93eb, 0x93ec, /*0xb8-0xbf*/
-  0xdfa6, 0x93ed, 0xc0de, 0x93ee, 0x93ef, 0xc9c3, 0x93f0, 0x93f1, /*0xc0-0xc7*/
-  0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, 0xb2d9, 0xc7e6, 0x93f7, /*0xc8-0xcf*/
-  0xdfa7, 0x93f8, 0xc7dc, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0xdfa8, /*0xd0-0xd7*/
-  0xeba2, 0x93fd, 0x93fe, 0x9440, 0x9441, 0x9442, 0xcbd3, 0x9443, /*0xd8-0xdf*/
-  0x9444, 0x9445, 0xdfaa, 0x9446, 0xdfa9, 0x9447, 0xb2c1, 0x9448, /*0xe0-0xe7*/
-  0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f, 0x9450, /*0xe8-0xef*/
-  0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, 0x9458, /*0xf0-0xf7*/
-  0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f, 0x9460, /*0xf8-0xff*/
-  /* 0x6500 */
-  0xc5ca, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, /*0x00-0x07*/
-  0x9468, 0xdfab, 0x9469, 0x946a, 0x946b, 0x946c, 0x946d, 0x946e, /*0x08-0x0f*/
-  0x946f, 0x9470, 0xd4dc, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, /*0x10-0x17*/
-  0xc8c1, 0x9476, 0x9477, 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, /*0x18-0x1f*/
-  0x947d, 0x947e, 0x9480, 0x9481, 0x9482, 0xdfac, 0x9483, 0x9484, /*0x20-0x27*/
-  0x9485, 0x9486, 0x9487, 0xbef0, 0x9488, 0x9489, 0xdfad, 0xd6a7, /*0x28-0x2f*/
-  0x948a, 0x948b, 0x948c, 0x948d, 0xeab7, 0xebb6, 0xcad5, 0x948e, /*0x30-0x37*/
-  0xd8fc, 0xb8c4, 0x948f, 0xb9a5, 0x9490, 0x9491, 0xb7c5, 0xd5fe, /*0x38-0x3f*/
-  0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0xb9ca, 0x9497, 0x9498, /*0x40-0x47*/
-  0xd0a7, 0xf4cd, 0x9499, 0x949a, 0xb5d0, 0x949b, 0x949c, 0xc3f4, /*0x48-0x4f*/
-  0x949d, 0xbec8, 0x949e, 0x949f, 0x94a0, 0xebb7, 0xb0bd, 0x94a1, /*0x50-0x57*/
-  0x94a2, 0xbdcc, 0x94a3, 0xc1b2, 0x94a4, 0xb1d6, 0xb3a8, 0x94a5, /*0x58-0x5f*/
-  0x94a6, 0x94a7, 0xb8d2, 0xc9a2, 0x94a8, 0x94a9, 0xb6d8, 0x94aa, /*0x60-0x67*/
-  0x94ab, 0x94ac, 0x94ad, 0xebb8, 0xbeb4, 0x94ae, 0x94af, 0x94b0, /*0x68-0x6f*/
-  0xcafd, 0x94b1, 0xc7c3, 0x94b2, 0xd5fb, 0x94b3, 0x94b4, 0xb7f3, /*0x70-0x77*/
-  0x94b5, 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bb, 0x94bc, /*0x78-0x7f*/
-  0x94bd, 0x94be, 0x94bf, 0x94c0, 0x94c1, 0x94c2, 0x94c3, 0xcec4, /*0x80-0x87*/
-  0x94c4, 0x94c5, 0x94c6, 0xd5ab, 0xb1f3, 0x94c7, 0x94c8, 0x94c9, /*0x88-0x8f*/
-  0xecb3, 0xb0df, 0x94ca, 0xecb5, 0x94cb, 0x94cc, 0x94cd, 0xb6b7, /*0x90-0x97*/
-  0x94ce, 0xc1cf, 0x94cf, 0xf5fa, 0xd0b1, 0x94d0, 0x94d1, 0xd5e5, /*0x98-0x9f*/
-  0x94d2, 0xced3, 0x94d3, 0x94d4, 0xbdef, 0xb3e2, 0x94d5, 0xb8ab, /*0xa0-0xa7*/
-  0x94d6, 0xd5b6, 0x94d7, 0xedbd, 0x94d8, 0xb6cf, 0x94d9, 0xcbb9, /*0xa8-0xaf*/
-  0xd0c2, 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94de, 0x94df, 0x94e0, /*0xb0-0xb7*/
-  0x94e1, 0xb7bd, 0x94e2, 0x94e3, 0xecb6, 0xcaa9, 0x94e4, 0x94e5, /*0xb8-0xbf*/
-  0x94e6, 0xc5d4, 0x94e7, 0xecb9, 0xecb8, 0xc2c3, 0xecb7, 0x94e8, /*0xc0-0xc7*/
-  0x94e9, 0x94ea, 0x94eb, 0xd0fd, 0xecba, 0x94ec, 0xecbb, 0xd7e5, /*0xc8-0xcf*/
-  0x94ed, 0x94ee, 0xecbc, 0x94ef, 0x94f0, 0x94f1, 0xecbd, 0xc6ec, /*0xd0-0xd7*/
-  0x94f2, 0x94f3, 0x94f4, 0x94f5, 0x94f6, 0x94f7, 0x94f8, 0x94f9, /*0xd8-0xdf*/
-  0xcede, 0x94fa, 0xbcc8, 0x94fb, 0x94fc, 0xc8d5, 0xb5a9, 0xbec9, /*0xe0-0xe7*/
-  0xd6bc, 0xd4e7, 0x94fd, 0x94fe, 0xd1ae, 0xd0f1, 0xeab8, 0xeab9, /*0xe8-0xef*/
-  0xeaba, 0xbab5, 0x9540, 0x9541, 0x9542, 0x9543, 0xcab1, 0xbff5, /*0xf0-0xf7*/
-  0x9544, 0x9545, 0xcdfa, 0x9546, 0x9547, 0x9548, 0x9549, 0x954a, /*0xf8-0xff*/
-  /* 0x6600 */
-  0xeac0, 0x954b, 0xb0ba, 0xeabe, 0x954c, 0x954d, 0xc0a5, 0x954e, /*0x00-0x07*/
-  0x954f, 0x9550, 0xeabb, 0x9551, 0xb2fd, 0x9552, 0xc3f7, 0xbbe8, /*0x08-0x0f*/
-  0x9553, 0x9554, 0x9555, 0xd2d7, 0xcef4, 0xeabf, 0x9556, 0x9557, /*0x10-0x17*/
-  0x9558, 0xeabc, 0x9559, 0x955a, 0x955b, 0xeac3, 0x955c, 0xd0c7, /*0x18-0x1f*/
-  0xd3b3, 0x955d, 0x955e, 0x955f, 0x9560, 0xb4ba, 0x9561, 0xc3c1, /*0x20-0x27*/
-  0xd7f2, 0x9562, 0x9563, 0x9564, 0x9565, 0xd5d1, 0x9566, 0xcac7, /*0x28-0x2f*/
-  0x9567, 0xeac5, 0x9568, 0x9569, 0xeac4, 0xeac7, 0xeac6, 0x956a, /*0x30-0x37*/
-  0x956b, 0x956c, 0x956d, 0x956e, 0xd6e7, 0x956f, 0xcfd4, 0x9570, /*0x38-0x3f*/
-  0x9571, 0xeacb, 0x9572, 0xbbce, 0x9573, 0x9574, 0x9575, 0x9576, /*0x40-0x47*/
-  0x9577, 0x9578, 0x9579, 0xbdfa, 0xc9ce, 0x957a, 0x957b, 0xeacc, /*0x48-0x4f*/
-  0x957c, 0x957d, 0xc9b9, 0xcffe, 0xeaca, 0xd4ce, 0xeacd, 0xeacf, /*0x50-0x57*/
-  0x957e, 0x9580, 0xcded, 0x9581, 0x9582, 0x9583, 0x9584, 0xeac9, /*0x58-0x5f*/
-  0x9585, 0xeace, 0x9586, 0x9587, 0xceee, 0x9588, 0xbbde, 0x9589, /*0x60-0x67*/
-  0xb3bf, 0x958a, 0x958b, 0x958c, 0x958d, 0x958e, 0xc6d5, 0xbeb0, /*0x68-0x6f*/
-  0xcefa, 0x958f, 0x9590, 0x9591, 0xc7e7, 0x9592, 0xbea7, 0xead0, /*0x70-0x77*/
-  0x9593, 0x9594, 0xd6c7, 0x9595, 0x9596, 0x9597, 0xc1c0, 0x9598, /*0x78-0x7f*/
-  0x9599, 0x959a, 0xd4dd, 0x959b, 0xead1, 0x959c, 0x959d, 0xcfbe, /*0x80-0x87*/
-  0x959e, 0x959f, 0x95a0, 0x95a1, 0xead2, 0x95a2, 0x95a3, 0x95a4, /*0x88-0x8f*/
-  0x95a5, 0xcaee, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0xc5af, 0xb0b5, /*0x90-0x97*/
-  0x95aa, 0x95ab, 0x95ac, 0x95ad, 0x95ae, 0xead4, 0x95af, 0x95b0, /*0x98-0x9f*/
-  0x95b1, 0x95b2, 0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0xead3, /*0xa0-0xa7*/
-  0xf4df, 0x95b8, 0x95b9, 0x95ba, 0x95bb, 0x95bc, 0xc4ba, 0x95bd, /*0xa8-0xaf*/
-  0x95be, 0x95bf, 0x95c0, 0x95c1, 0xb1a9, 0x95c2, 0x95c3, 0x95c4, /*0xb0-0xb7*/
-  0x95c5, 0xe5df, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0xead5, 0x95ca, /*0xb8-0xbf*/
-  0x95cb, 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, /*0xc0-0xc7*/
-  0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, /*0xc8-0xcf*/
-  0x95db, 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, /*0xd0-0xd7*/
-  0x95e3, 0xcaef, 0x95e4, 0xead6, 0xead7, 0xc6d8, 0x95e5, 0x95e6, /*0xd8-0xdf*/
-  0x95e7, 0x95e8, 0x95e9, 0x95ea, 0x95eb, 0x95ec, 0xead8, 0x95ed, /*0xe0-0xe7*/
-  0x95ee, 0xead9, 0x95ef, 0x95f0, 0x95f1, 0x95f2, 0x95f3, 0x95f4, /*0xe8-0xef*/
-  0xd4bb, 0x95f5, 0xc7fa, 0xd2b7, 0xb8fc, 0x95f6, 0x95f7, 0xeac2, /*0xf0-0xf7*/
-  0x95f8, 0xb2dc, 0x95f9, 0x95fa, 0xc2fc, 0x95fb, 0xd4f8, 0xcce6, /*0xf8-0xff*/
-  /* 0x6700 */
-  0xd7ee, 0x95fc, 0x95fd, 0x95fe, 0x9640, 0x9641, 0x9642, 0x9643, /*0x00-0x07*/
-  0xd4c2, 0xd3d0, 0xebc3, 0xc5f3, 0x9644, 0xb7fe, 0x9645, 0x9646, /*0x08-0x0f*/
-  0xebd4, 0x9647, 0x9648, 0x9649, 0xcbb7, 0xebde, 0x964a, 0xc0ca, /*0x10-0x17*/
-  0x964b, 0x964c, 0x964d, 0xcdfb, 0x964e, 0xb3af, 0x964f, 0xc6da, /*0x18-0x1f*/
-  0x9650, 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0xebfc, 0x9656, /*0x20-0x27*/
-  0xc4be, 0x9657, 0xceb4, 0xc4a9, 0xb1be, 0xd4fd, 0x9658, 0xcaf5, /*0x28-0x2f*/
-  0x9659, 0xd6ec, 0x965a, 0x965b, 0xc6d3, 0xb6e4, 0x965c, 0x965d, /*0x30-0x37*/
-  0x965e, 0x965f, 0xbbfa, 0x9660, 0x9661, 0xd0e0, 0x9662, 0x9663, /*0x38-0x3f*/
-  0xc9b1, 0x9664, 0xd4d3, 0xc8a8, 0x9665, 0x9666, 0xb8cb, 0x9667, /*0x40-0x47*/
-  0xe8be, 0xc9bc, 0x9668, 0x9669, 0xe8bb, 0x966a, 0xc0ee, 0xd0d3, /*0x48-0x4f*/
-  0xb2c4, 0xb4e5, 0x966b, 0xe8bc, 0x966c, 0x966d, 0xd5c8, 0x966e, /*0x50-0x57*/
-  0x966f, 0x9670, 0x9671, 0x9672, 0xb6c5, 0x9673, 0xe8bd, 0xcaf8, /*0x58-0x5f*/
-  0xb8dc, 0xccf5, 0x9674, 0x9675, 0x9676, 0xc0b4, 0x9677, 0x9678, /*0x60-0x67*/
-  0xd1ee, 0xe8bf, 0xe8c2, 0x9679, 0x967a, 0xbabc, 0x967b, 0xb1ad, /*0x68-0x6f*/
-  0xbddc, 0x967c, 0xeabd, 0xe8c3, 0x967d, 0xe8c6, 0x967e, 0xe8cb, /*0x70-0x77*/
-  0x9680, 0x9681, 0x9682, 0x9683, 0xe8cc, 0x9684, 0xcbc9, 0xb0e5, /*0x78-0x7f*/
-  0x9685, 0xbcab, 0x9686, 0x9687, 0xb9b9, 0x9688, 0x9689, 0xe8c1, /*0x80-0x87*/
-  0x968a, 0xcdf7, 0x968b, 0xe8ca, 0x968c, 0x968d, 0x968e, 0x968f, /*0x88-0x8f*/
-  0xcef6, 0x9690, 0x9691, 0x9692, 0x9693, 0xd5ed, 0x9694, 0xc1d6, /*0x90-0x97*/
-  0xe8c4, 0x9695, 0xc3b6, 0x9696, 0xb9fb, 0xd6a6, 0xe8c8, 0x9697, /*0x98-0x9f*/
-  0x9698, 0x9699, 0xcae0, 0xd4e6, 0x969a, 0xe8c0, 0x969b, 0xe8c5, /*0xa0-0xa7*/
-  0xe8c7, 0x969c, 0xc7b9, 0xb7e3, 0x969d, 0xe8c9, 0x969e, 0xbfdd, /*0xa8-0xaf*/
-  0xe8d2, 0x969f, 0x96a0, 0xe8d7, 0x96a1, 0xe8d5, 0xbcdc, 0xbccf, /*0xb0-0xb7*/
-  0xe8db, 0x96a2, 0x96a3, 0x96a4, 0x96a5, 0x96a6, 0x96a7, 0x96a8, /*0xb8-0xbf*/
-  0x96a9, 0xe8de, 0x96aa, 0xe8da, 0xb1fa, 0x96ab, 0x96ac, 0x96ad, /*0xc0-0xc7*/
-  0x96ae, 0x96af, 0x96b0, 0x96b1, 0x96b2, 0x96b3, 0x96b4, 0xb0d8, /*0xc8-0xcf*/
-  0xc4b3, 0xb8cc, 0xc6e2, 0xc8be, 0xc8e1, 0x96b5, 0x96b6, 0x96b7, /*0xd0-0xd7*/
-  0xe8cf, 0xe8d4, 0xe8d6, 0x96b8, 0xb9f1, 0xe8d8, 0xd7f5, 0x96b9, /*0xd8-0xdf*/
-  0xc4fb, 0x96ba, 0xe8dc, 0x96bb, 0x96bc, 0xb2e9, 0x96bd, 0x96be, /*0xe0-0xe7*/
-  0x96bf, 0xe8d1, 0x96c0, 0x96c1, 0xbced, 0x96c2, 0x96c3, 0xbfc2, /*0xe8-0xef*/
-  0xe8cd, 0xd6f9, 0x96c4, 0xc1f8, 0xb2f1, 0x96c5, 0x96c6, 0x96c7, /*0xf0-0xf7*/
-  0x96c8, 0x96c9, 0x96ca, 0x96cb, 0x96cc, 0xe8df, 0x96cd, 0xcac1, /*0xf8-0xff*/
-  /* 0x6800 */
-  0xe8d9, 0x96ce, 0x96cf, 0x96d0, 0x96d1, 0xd5a4, 0x96d2, 0xb1ea, /*0x00-0x07*/
-  0xd5bb, 0xe8ce, 0xe8d0, 0xb6b0, 0xe8d3, 0x96d3, 0xe8dd, 0xc0b8, /*0x08-0x0f*/
-  0x96d4, 0xcaf7, 0x96d5, 0xcba8, 0x96d6, 0x96d7, 0xc6dc, 0xc0f5, /*0x10-0x17*/
-  0x96d8, 0x96d9, 0x96da, 0x96db, 0x96dc, 0xe8e9, 0x96dd, 0x96de, /*0x18-0x1f*/
-  0x96df, 0xd0a3, 0x96e0, 0x96e1, 0x96e2, 0x96e3, 0x96e4, 0x96e5, /*0x20-0x27*/
-  0x96e6, 0xe8f2, 0xd6ea, 0x96e7, 0x96e8, 0x96e9, 0x96ea, 0x96eb, /*0x28-0x2f*/
-  0x96ec, 0x96ed, 0xe8e0, 0xe8e1, 0x96ee, 0x96ef, 0x96f0, 0xd1f9, /*0x30-0x37*/
-  0xbacb, 0xb8f9, 0x96f1, 0x96f2, 0xb8f1, 0xd4d4, 0xe8ef, 0x96f3, /*0x38-0x3f*/
-  0xe8ee, 0xe8ec, 0xb9f0, 0xccd2, 0xe8e6, 0xcea6, 0xbff2, 0x96f4, /*0x40-0x47*/
-  0xb0b8, 0xe8f1, 0xe8f0, 0x96f5, 0xd7c0, 0x96f6, 0xe8e4, 0x96f7, /*0x48-0x4f*/
-  0xcda9, 0xc9a3, 0x96f8, 0xbbb8, 0xbddb, 0xe8ea, 0x96f9, 0x96fa, /*0x50-0x57*/
-  0x96fb, 0x96fc, 0x96fd, 0x96fe, 0x9740, 0x9741, 0x9742, 0x9743, /*0x58-0x5f*/
-  0xe8e2, 0xe8e3, 0xe8e5, 0xb5b5, 0xe8e7, 0xc7c5, 0xe8eb, 0xe8ed, /*0x60-0x67*/
-  0xbdb0, 0xd7ae, 0x9744, 0xe8f8, 0x9745, 0x9746, 0x9747, 0x9748, /*0x68-0x6f*/
-  0x9749, 0x974a, 0x974b, 0x974c, 0xe8f5, 0x974d, 0xcdb0, 0xe8f6, /*0x70-0x77*/
-  0x974e, 0x974f, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, /*0x78-0x7f*/
-  0x9756, 0xc1ba, 0x9757, 0xe8e8, 0x9758, 0xc3b7, 0xb0f0, 0x9759, /*0x80-0x87*/
-  0x975a, 0x975b, 0x975c, 0x975d, 0x975e, 0x975f, 0x9760, 0xe8f4, /*0x88-0x8f*/
-  0x9761, 0x9762, 0x9763, 0xe8f7, 0x9764, 0x9765, 0x9766, 0xb9a3, /*0x90-0x97*/
-  0x9767, 0x9768, 0x9769, 0x976a, 0x976b, 0x976c, 0x976d, 0x976e, /*0x98-0x9f*/
-  0x976f, 0x9770, 0xc9d2, 0x9771, 0x9772, 0x9773, 0xc3ce, 0xcee0, /*0xa0-0xa7*/
-  0xc0e6, 0x9774, 0x9775, 0x9776, 0x9777, 0xcbf3, 0x9778, 0xccdd, /*0xa8-0xaf*/
-  0xd0b5, 0x9779, 0x977a, 0xcae1, 0x977b, 0xe8f3, 0x977c, 0x977d, /*0xb0-0xb7*/
-  0x977e, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, /*0xb8-0xbf*/
-  0xbcec, 0x9787, 0xe8f9, 0x9788, 0x9789, 0x978a, 0x978b, 0x978c, /*0xc0-0xc7*/
-  0x978d, 0xc3de, 0x978e, 0xc6e5, 0x978f, 0xb9f7, 0x9790, 0x9791, /*0xc8-0xcf*/
-  0x9792, 0x9793, 0xb0f4, 0x9794, 0x9795, 0xd7d8, 0x9796, 0x9797, /*0xd0-0xd7*/
-  0xbcac, 0x9798, 0xc5ef, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d, /*0xd8-0xdf*/
-  0xccc4, 0x979e, 0x979f, 0xe9a6, 0x97a0, 0x97a1, 0x97a2, 0x97a3, /*0xe0-0xe7*/
-  0x97a4, 0x97a5, 0x97a6, 0x97a7, 0x97a8, 0x97a9, 0xc9ad, 0x97aa, /*0xe8-0xef*/
-  0xe9a2, 0xc0e2, 0x97ab, 0x97ac, 0x97ad, 0xbfc3, 0x97ae, 0x97af, /*0xf0-0xf7*/
-  0x97b0, 0xe8fe, 0xb9d7, 0x97b1, 0xe8fb, 0x97b2, 0x97b3, 0x97b4, /*0xf8-0xff*/
-  /* 0x6900 */
-  0x97b5, 0xe9a4, 0x97b6, 0x97b7, 0x97b8, 0xd2ce, 0x97b9, 0x97ba, /*0x00-0x07*/
-  0x97bb, 0x97bc, 0x97bd, 0xe9a3, 0x97be, 0xd6b2, 0xd7b5, 0x97bf, /*0x08-0x0f*/
-  0xe9a7, 0x97c0, 0xbdb7, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, /*0x10-0x17*/
-  0x97c6, 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0xe8fc, /*0x18-0x1f*/
-  0xe8fd, 0x97cd, 0x97ce, 0x97cf, 0xe9a1, 0x97d0, 0x97d1, 0x97d2, /*0x20-0x27*/
-  0x97d3, 0x97d4, 0x97d5, 0x97d6, 0x97d7, 0xcdd6, 0x97d8, 0x97d9, /*0x28-0x2f*/
-  0xd2ac, 0x97da, 0x97db, 0x97dc, 0xe9b2, 0x97dd, 0x97de, 0x97df, /*0x30-0x37*/
-  0x97e0, 0xe9a9, 0x97e1, 0x97e2, 0x97e3, 0xb4aa, 0x97e4, 0xb4bb, /*0x38-0x3f*/
-  0x97e5, 0x97e6, 0xe9ab, 0x97e7, 0x97e8, 0x97e9, 0x97ea, 0x97eb, /*0x40-0x47*/
-  0x97ec, 0x97ed, 0x97ee, 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f3, /*0x48-0x4f*/
-  0x97f4, 0x97f5, 0x97f6, 0x97f7, 0xd0a8, 0x97f8, 0x97f9, 0xe9a5, /*0x50-0x57*/
-  0x97fa, 0x97fb, 0xb3fe, 0x97fc, 0x97fd, 0xe9ac, 0xc0e3, 0x97fe, /*0x58-0x5f*/
-  0xe9aa, 0x9840, 0x9841, 0xe9b9, 0x9842, 0x9843, 0xe9b8, 0x9844, /*0x60-0x67*/
-  0x9845, 0x9846, 0x9847, 0xe9ae, 0x9848, 0x9849, 0xe8fa, 0x984a, /*0x68-0x6f*/
-  0x984b, 0xe9a8, 0x984c, 0x984d, 0x984e, 0x984f, 0x9850, 0xbfac, /*0x70-0x77*/
-  0xe9b1, 0xe9ba, 0x9851, 0x9852, 0xc2a5, 0x9853, 0x9854, 0x9855, /*0x78-0x7f*/
-  0xe9af, 0x9856, 0xb8c5, 0x9857, 0xe9ad, 0x9858, 0xd3dc, 0xe9b4, /*0x80-0x87*/
-  0xe9b5, 0xe9b7, 0x9859, 0x985a, 0x985b, 0xe9c7, 0x985c, 0x985d, /*0x88-0x8f*/
-  0x985e, 0x985f, 0x9860, 0x9861, 0xc0c6, 0xe9c5, 0x9862, 0x9863, /*0x90-0x97*/
-  0xe9b0, 0x9864, 0x9865, 0xe9bb, 0xb0f1, 0x9866, 0x9867, 0x9868, /*0x98-0x9f*/
-  0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f, 0xe9bc, /*0xa0-0xa7*/
-  0xd5a5, 0x9870, 0x9871, 0xe9be, 0x9872, 0xe9bf, 0x9873, 0x9874, /*0xa8-0xaf*/
-  0x9875, 0xe9c1, 0x9876, 0x9877, 0xc1f1, 0x9878, 0x9879, 0xc8b6, /*0xb0-0xb7*/
-  0x987a, 0x987b, 0x987c, 0xe9bd, 0x987d, 0x987e, 0x9880, 0x9881, /*0xb8-0xbf*/
-  0x9882, 0xe9c2, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, 0x9888, /*0xc0-0xc7*/
-  0x9889, 0x988a, 0xe9c3, 0x988b, 0xe9b3, 0x988c, 0xe9b6, 0x988d, /*0xc8-0xcf*/
-  0xbbb1, 0x988e, 0x988f, 0x9890, 0xe9c0, 0x9891, 0x9892, 0x9893, /*0xd0-0xd7*/
-  0x9894, 0x9895, 0x9896, 0xbcf7, 0x9897, 0x9898, 0x9899, 0xe9c4, /*0xd8-0xdf*/
-  0xe9c6, 0x989a, 0x989b, 0x989c, 0x989d, 0x989e, 0x989f, 0x98a0, /*0xe0-0xe7*/
-  0x98a1, 0x98a2, 0x98a3, 0x98a4, 0x98a5, 0xe9ca, 0x98a6, 0x98a7, /*0xe8-0xef*/
-  0x98a8, 0x98a9, 0xe9ce, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, /*0xf0-0xf7*/
-  0x98af, 0x98b0, 0x98b1, 0x98b2, 0x98b3, 0xb2db, 0x98b4, 0xe9c8, /*0xf8-0xff*/
-  /* 0x6a00 */
-  0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9, 0x98ba, 0x98bb, 0x98bc, /*0x00-0x07*/
-  0x98bd, 0x98be, 0xb7ae, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3, /*0x08-0x0f*/
-  0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0xe9cb, /*0x10-0x17*/
-  0xe9cc, 0x98cb, 0x98cc, 0x98cd, 0x98ce, 0x98cf, 0x98d0, 0xd5c1, /*0x18-0x1f*/
-  0x98d1, 0xc4a3, 0x98d2, 0x98d3, 0x98d4, 0x98d5, 0x98d6, 0x98d7, /*0x20-0x27*/
-  0xe9d8, 0x98d8, 0xbae1, 0x98d9, 0x98da, 0x98db, 0x98dc, 0xe9c9, /*0x28-0x2f*/
-  0x98dd, 0xd3a3, 0x98de, 0x98df, 0x98e0, 0xe9d4, 0x98e1, 0x98e2, /*0x30-0x37*/
-  0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e7, 0xe9d7, 0xe9d0, 0x98e8, /*0x38-0x3f*/
-  0x98e9, 0x98ea, 0x98eb, 0x98ec, 0xe9cf, 0x98ed, 0x98ee, 0xc7c1, /*0x40-0x47*/
-  0x98ef, 0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, /*0x48-0x4f*/
-  0xe9d2, 0x98f7, 0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, /*0x50-0x57*/
-  0xe9d9, 0xb3c8, 0x98fe, 0xe9d3, 0x9940, 0x9941, 0x9942, 0x9943, /*0x58-0x5f*/
-  0x9944, 0xcff0, 0x9945, 0x9946, 0x9947, 0xe9cd, 0x9948, 0x9949, /*0x60-0x67*/
-  0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, /*0x68-0x6f*/
-  0x9952, 0xb3f7, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, /*0x70-0x77*/
-  0x9959, 0xe9d6, 0x995a, 0x995b, 0xe9da, 0x995c, 0x995d, 0x995e, /*0x78-0x7f*/
-  0xccb4, 0x995f, 0x9960, 0x9961, 0xcfad, 0x9962, 0x9963, 0x9964, /*0x80-0x87*/
-  0x9965, 0x9966, 0x9967, 0x9968, 0x9969, 0x996a, 0xe9d5, 0x996b, /*0x88-0x8f*/
-  0xe9dc, 0xe9db, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970, 0xe9de, /*0x90-0x97*/
-  0x9971, 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, /*0x98-0x9f*/
-  0xe9d1, 0x9979, 0x997a, 0x997b, 0x997c, 0x997d, 0x997e, 0x9980, /*0xa0-0xa7*/
-  0x9981, 0xe9dd, 0x9982, 0xe9df, 0xc3ca, 0x9983, 0x9984, 0x9985, /*0xa8-0xaf*/
-  0x9986, 0x9987, 0x9988, 0x9989, 0x998a, 0x998b, 0x998c, 0x998d, /*0xb0-0xb7*/
-  0x998e, 0x998f, 0x9990, 0x9991, 0x9992, 0x9993, 0x9994, 0x9995, /*0xb8-0xbf*/
-  0x9996, 0x9997, 0x9998, 0x9999, 0x999a, 0x999b, 0x999c, 0x999d, /*0xc0-0xc7*/
-  0x999e, 0x999f, 0x99a0, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a5, /*0xc8-0xcf*/
-  0x99a6, 0x99a7, 0x99a8, 0x99a9, 0x99aa, 0x99ab, 0x99ac, 0x99ad, /*0xd0-0xd7*/
-  0x99ae, 0x99af, 0x99b0, 0x99b1, 0x99b2, 0x99b3, 0x99b4, 0x99b5, /*0xd8-0xdf*/
-  0x99b6, 0x99b7, 0x99b8, 0x99b9, 0x99ba, 0x99bb, 0x99bc, 0x99bd, /*0xe0-0xe7*/
-  0x99be, 0x99bf, 0x99c0, 0x99c1, 0x99c2, 0x99c3, 0x99c4, 0x99c5, /*0xe8-0xef*/
-  0x99c6, 0x99c7, 0x99c8, 0x99c9, 0x99ca, 0x99cb, 0x99cc, 0x99cd, /*0xf0-0xf7*/
-  0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d2, 0x99d3, 0x99d4, 0x99d5, /*0xf8-0xff*/
-  /* 0x6b00 */
-  0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da, 0x99db, 0x99dc, 0x99dd, /*0x00-0x07*/
-  0x99de, 0x99df, 0x99e0, 0x99e1, 0x99e2, 0x99e3, 0x99e4, 0x99e5, /*0x08-0x0f*/
-  0x99e6, 0x99e7, 0x99e8, 0x99e9, 0x99ea, 0x99eb, 0x99ec, 0x99ed, /*0x10-0x17*/
-  0x99ee, 0x99ef, 0x99f0, 0x99f1, 0x99f2, 0x99f3, 0x99f4, 0x99f5, /*0x18-0x1f*/
-  0xc7b7, 0xb4ce, 0xbbb6, 0xd0c0, 0xeca3, 0x99f6, 0x99f7, 0xc5b7, /*0x20-0x27*/
-  0x99f8, 0x99f9, 0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x9a40, /*0x28-0x2f*/
-  0x9a41, 0x9a42, 0xd3fb, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0xeca4, /*0x30-0x37*/
-  0x9a47, 0xeca5, 0xc6db, 0x9a48, 0x9a49, 0x9a4a, 0xbfee, 0x9a4b, /*0x38-0x3f*/
-  0x9a4c, 0x9a4d, 0x9a4e, 0xeca6, 0x9a4f, 0x9a50, 0xeca7, 0xd0aa, /*0x40-0x47*/
-  0x9a51, 0xc7b8, 0x9a52, 0x9a53, 0xb8e8, 0x9a54, 0x9a55, 0x9a56, /*0x48-0x4f*/
-  0x9a57, 0x9a58, 0x9a59, 0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, /*0x50-0x57*/
-  0x9a5f, 0xeca8, 0x9a60, 0x9a61, 0x9a62, 0x9a63, 0x9a64, 0x9a65, /*0x58-0x5f*/
-  0x9a66, 0x9a67, 0xd6b9, 0xd5fd, 0xb4cb, 0xb2bd, 0xcee4, 0xc6e7, /*0x60-0x67*/
-  0x9a68, 0x9a69, 0xcde1, 0x9a6a, 0x9a6b, 0x9a6c, 0x9a6d, 0x9a6e, /*0x68-0x6f*/
-  0x9a6f, 0x9a70, 0x9a71, 0x9a72, 0x9a73, 0x9a74, 0x9a75, 0x9a76, /*0x70-0x77*/
-  0x9a77, 0xb4f5, 0x9a78, 0xcbc0, 0xbcdf, 0x9a79, 0x9a7a, 0x9a7b, /*0x78-0x7f*/
-  0x9a7c, 0xe9e2, 0xe9e3, 0xd1ea, 0xe9e5, 0x9a7d, 0xb4f9, 0xe9e4, /*0x80-0x87*/
-  0x9a7e, 0xd1b3, 0xcae2, 0xb2d0, 0x9a80, 0xe9e8, 0x9a81, 0x9a82, /*0x88-0x8f*/
-  0x9a83, 0x9a84, 0xe9e6, 0xe9e7, 0x9a85, 0x9a86, 0xd6b3, 0x9a87, /*0x90-0x97*/
-  0x9a88, 0x9a89, 0xe9e9, 0xe9ea, 0x9a8a, 0x9a8b, 0x9a8c, 0x9a8d, /*0x98-0x9f*/
-  0x9a8e, 0xe9eb, 0x9a8f, 0x9a90, 0x9a91, 0x9a92, 0x9a93, 0x9a94, /*0xa0-0xa7*/
-  0x9a95, 0x9a96, 0xe9ec, 0x9a97, 0x9a98, 0x9a99, 0x9a9a, 0x9a9b, /*0xa8-0xaf*/
-  0x9a9c, 0x9a9d, 0x9a9e, 0xecaf, 0xc5b9, 0xb6ce, 0x9a9f, 0xd2f3, /*0xb0-0xb7*/
-  0x9aa0, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, 0x9aa5, 0x9aa6, 0xb5ee, /*0xb8-0xbf*/
-  0x9aa7, 0xbbd9, 0xecb1, 0x9aa8, 0x9aa9, 0xd2e3, 0x9aaa, 0x9aab, /*0xc0-0xc7*/
-  0x9aac, 0x9aad, 0x9aae, 0xcee3, 0x9aaf, 0xc4b8, 0x9ab0, 0xc3bf, /*0xc8-0xcf*/
-  0x9ab1, 0x9ab2, 0xb6be, 0xd8b9, 0xb1c8, 0xb1cf, 0xb1d1, 0xc5fe, /*0xd0-0xd7*/
-  0x9ab3, 0xb1d0, 0x9ab4, 0xc3ab, 0x9ab5, 0x9ab6, 0x9ab7, 0x9ab8, /*0xd8-0xdf*/
-  0x9ab9, 0xd5b1, 0x9aba, 0x9abb, 0x9abc, 0x9abd, 0x9abe, 0x9abf, /*0xe0-0xe7*/
-  0x9ac0, 0x9ac1, 0xeba4, 0xbac1, 0x9ac2, 0x9ac3, 0x9ac4, 0xccba, /*0xe8-0xef*/
-  0x9ac5, 0x9ac6, 0x9ac7, 0xeba5, 0x9ac8, 0xeba7, 0x9ac9, 0x9aca, /*0xf0-0xf7*/
-  0x9acb, 0xeba8, 0x9acc, 0x9acd, 0x9ace, 0xeba6, 0x9acf, 0x9ad0, /*0xf8-0xff*/
-  /* 0x6c00 */
-  0x9ad1, 0x9ad2, 0x9ad3, 0x9ad4, 0x9ad5, 0xeba9, 0xebab, 0xebaa, /*0x00-0x07*/
-  0x9ad6, 0x9ad7, 0x9ad8, 0x9ad9, 0x9ada, 0xebac, 0x9adb, 0xcacf, /*0x08-0x0f*/
-  0xd8b5, 0xc3f1, 0x9adc, 0xc3a5, 0xc6f8, 0xebad, 0xc4ca, 0x9add, /*0x10-0x17*/
-  0xebae, 0xebaf, 0xebb0, 0xb7d5, 0x9ade, 0x9adf, 0x9ae0, 0xb7fa, /*0x18-0x1f*/
-  0x9ae1, 0xebb1, 0xc7e2, 0x9ae2, 0xebb3, 0x9ae3, 0xbaa4, 0xd1f5, /*0x20-0x27*/
-  0xb0b1, 0xebb2, 0xebb4, 0x9ae4, 0x9ae5, 0x9ae6, 0xb5aa, 0xc2c8, /*0x28-0x2f*/
-  0xc7e8, 0x9ae7, 0xebb5, 0x9ae8, 0xcbae, 0xe3df, 0x9ae9, 0x9aea, /*0x30-0x37*/
-  0xd3c0, 0x9aeb, 0x9aec, 0x9aed, 0x9aee, 0xd9db, 0x9aef, 0x9af0, /*0x38-0x3f*/
-  0xcda1, 0xd6ad, 0xc7f3, 0x9af1, 0x9af2, 0x9af3, 0xd9e0, 0xbbe3, /*0x40-0x47*/
-  0x9af4, 0xbaba, 0xe3e2, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9af9, /*0x48-0x4f*/
-  0xcfab, 0x9afa, 0x9afb, 0x9afc, 0xe3e0, 0xc9c7, 0x9afd, 0xbab9, /*0x50-0x57*/
-  0x9afe, 0x9b40, 0x9b41, 0xd1b4, 0xe3e1, 0xc8ea, 0xb9af, 0xbdad, /*0x58-0x5f*/
-  0xb3d8, 0xcedb, 0x9b42, 0x9b43, 0xccc0, 0x9b44, 0x9b45, 0x9b46, /*0x60-0x67*/
-  0xe3e8, 0xe3e9, 0xcdf4, 0x9b47, 0x9b48, 0x9b49, 0x9b4a, 0x9b4b, /*0x68-0x6f*/
-  0xccad, 0x9b4c, 0xbcb3, 0x9b4d, 0xe3ea, 0x9b4e, 0xe3eb, 0x9b4f, /*0x70-0x77*/
-  0x9b50, 0xd0da, 0x9b51, 0x9b52, 0x9b53, 0xc6fb, 0xb7da, 0x9b54, /*0x78-0x7f*/
-  0x9b55, 0xc7df, 0xd2ca, 0xced6, 0x9b56, 0xe3e4, 0xe3ec, 0x9b57, /*0x80-0x87*/
-  0xc9f2, 0xb3c1, 0x9b58, 0x9b59, 0xe3e7, 0x9b5a, 0x9b5b, 0xc6e3, /*0x88-0x8f*/
-  0xe3e5, 0x9b5c, 0x9b5d, 0xedb3, 0xe3e6, 0x9b5e, 0x9b5f, 0x9b60, /*0x90-0x97*/
-  0x9b61, 0xc9b3, 0x9b62, 0xc5e6, 0x9b63, 0x9b64, 0x9b65, 0xb9b5, /*0x98-0x9f*/
-  0x9b66, 0xc3bb, 0x9b67, 0xe3e3, 0xc5bd, 0xc1a4, 0xc2d9, 0xb2d7, /*0xa0-0xa7*/
-  0x9b68, 0xe3ed, 0xbba6, 0xc4ad, 0x9b69, 0xe3f0, 0xbeda, 0x9b6a, /*0xa8-0xaf*/
-  0x9b6b, 0xe3fb, 0xe3f5, 0xbad3, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, /*0xb0-0xb7*/
-  0xb7d0, 0xd3cd, 0x9b70, 0xd6ce, 0xd5d3, 0xb9c1, 0xd5b4, 0xd1d8, /*0xb8-0xbf*/
-  0x9b71, 0x9b72, 0x9b73, 0x9b74, 0xd0b9, 0xc7f6, 0x9b75, 0x9b76, /*0xc0-0xc7*/
-  0x9b77, 0xc8aa, 0xb2b4, 0x9b78, 0xc3da, 0x9b79, 0x9b7a, 0x9b7b, /*0xc8-0xcf*/
-  0xe3ee, 0x9b7c, 0x9b7d, 0xe3fc, 0xe3ef, 0xb7a8, 0xe3f7, 0xe3f4, /*0xd0-0xd7*/
-  0x9b7e, 0x9b80, 0x9b81, 0xb7ba, 0x9b82, 0x9b83, 0xc5a2, 0x9b84, /*0xd8-0xdf*/
-  0xe3f6, 0xc5dd, 0xb2a8, 0xc6fc, 0x9b85, 0xc4e0, 0x9b86, 0x9b87, /*0xe0-0xe7*/
-  0xd7a2, 0x9b88, 0xc0e1, 0xe3f9, 0x9b89, 0x9b8a, 0xe3fa, 0xe3fd, /*0xe8-0xef*/
-  0xcca9, 0xe3f3, 0x9b8b, 0xd3be, 0x9b8c, 0xb1c3, 0xedb4, 0xe3f1, /*0xf0-0xf7*/
-  0xe3f2, 0x9b8d, 0xe3f8, 0xd0ba, 0xc6c3, 0xd4f3, 0xe3fe, 0x9b8e, /*0xf8-0xff*/
-  /* 0x6d00 */
-  0x9b8f, 0xbde0, 0x9b90, 0x9b91, 0xe4a7, 0x9b92, 0x9b93, 0xe4a6, /*0x00-0x07*/
-  0x9b94, 0x9b95, 0x9b96, 0xd1f3, 0xe4a3, 0x9b97, 0xe4a9, 0x9b98, /*0x08-0x0f*/
-  0x9b99, 0x9b9a, 0xc8f7, 0x9b9b, 0x9b9c, 0x9b9d, 0x9b9e, 0xcfb4, /*0x10-0x17*/
-  0x9b9f, 0xe4a8, 0xe4ae, 0xc2e5, 0x9ba0, 0x9ba1, 0xb6b4, 0x9ba2, /*0x18-0x1f*/
-  0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0xbdf2, 0x9ba8, 0xe4a2, /*0x20-0x27*/
-  0x9ba9, 0x9baa, 0xbae9, 0xe4aa, 0x9bab, 0x9bac, 0xe4ac, 0x9bad, /*0x28-0x2f*/
-  0x9bae, 0xb6fd, 0xd6de, 0xe4b2, 0x9baf, 0xe4ad, 0x9bb0, 0x9bb1, /*0x30-0x37*/
-  0x9bb2, 0xe4a1, 0x9bb3, 0xbbee, 0xcddd, 0xc7a2, 0xc5c9, 0x9bb4, /*0x38-0x3f*/
-  0x9bb5, 0xc1f7, 0x9bb6, 0xe4a4, 0x9bb7, 0xc7b3, 0xbdac, 0xbdbd, /*0x40-0x47*/
-  0xe4a5, 0x9bb8, 0xd7c7, 0xb2e2, 0x9bb9, 0xe4ab, 0xbcc3, 0xe4af, /*0x48-0x4f*/
-  0x9bba, 0xbbeb, 0xe4b0, 0xc5a8, 0xe4b1, 0x9bbb, 0x9bbc, 0x9bbd, /*0x50-0x57*/
-  0x9bbe, 0xd5e3, 0xbfa3, 0x9bbf, 0xe4ba, 0x9bc0, 0xe4b7, 0x9bc1, /*0x58-0x5f*/
-  0xe4bb, 0x9bc2, 0x9bc3, 0xe4bd, 0x9bc4, 0x9bc5, 0xc6d6, 0x9bc6, /*0x60-0x67*/
-  0x9bc7, 0xbac6, 0xc0cb, 0x9bc8, 0x9bc9, 0x9bca, 0xb8a1, 0xe4b4, /*0x68-0x6f*/
-  0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, 0xd4a1, 0x9bcf, 0x9bd0, 0xbaa3, /*0x70-0x77*/
-  0xbdfe, 0x9bd1, 0x9bd2, 0x9bd3, 0xe4bc, 0x9bd4, 0x9bd5, 0x9bd6, /*0x78-0x7f*/
-  0x9bd7, 0x9bd8, 0xcdbf, 0x9bd9, 0x9bda, 0xc4f9, 0x9bdb, 0x9bdc, /*0x80-0x87*/
-  0xcffb, 0xc9e6, 0x9bdd, 0x9bde, 0xd3bf, 0x9bdf, 0xcfd1, 0x9be0, /*0x88-0x8f*/
-  0x9be1, 0xe4b3, 0x9be2, 0xe4b8, 0xe4b9, 0xcce9, 0x9be3, 0x9be4, /*0x90-0x97*/
-  0x9be5, 0x9be6, 0x9be7, 0xccce, 0x9be8, 0xc0d4, 0xe4b5, 0xc1b0, /*0x98-0x9f*/
-  0xe4b6, 0xced0, 0x9be9, 0xbbc1, 0xb5d3, 0x9bea, 0xc8f3, 0xbda7, /*0xa0-0xa7*/
-  0xd5c7, 0xc9ac, 0xb8a2, 0xe4ca, 0x9beb, 0x9bec, 0xe4cc, 0xd1c4, /*0xa8-0xaf*/
-  0x9bed, 0x9bee, 0xd2ba, 0x9bef, 0x9bf0, 0xbaad, 0x9bf1, 0x9bf2, /*0xb0-0xb7*/
-  0xbad4, 0x9bf3, 0x9bf4, 0x9bf5, 0x9bf6, 0x9bf7, 0x9bf8, 0xe4c3, /*0xb8-0xbf*/
-  0xb5ed, 0x9bf9, 0x9bfa, 0x9bfb, 0xd7cd, 0xe4c0, 0xcffd, 0xe4bf, /*0xc0-0xc7*/
-  0x9bfc, 0x9bfd, 0x9bfe, 0xc1dc, 0xccca, 0x9c40, 0x9c41, 0x9c42, /*0xc8-0xcf*/
-  0x9c43, 0xcae7, 0x9c44, 0x9c45, 0x9c46, 0x9c47, 0xc4d7, 0x9c48, /*0xd0-0xd7*/
-  0xccd4, 0xe4c8, 0x9c49, 0x9c4a, 0x9c4b, 0xe4c7, 0xe4c1, 0x9c4c, /*0xd8-0xdf*/
-  0xe4c4, 0xb5ad, 0x9c4d, 0x9c4e, 0xd3d9, 0x9c4f, 0xe4c6, 0x9c50, /*0xe0-0xe7*/
-  0x9c51, 0x9c52, 0x9c53, 0xd2f9, 0xb4e3, 0x9c54, 0xbbb4, 0x9c55, /*0xe8-0xef*/
-  0x9c56, 0xc9ee, 0x9c57, 0xb4be, 0x9c58, 0x9c59, 0x9c5a, 0xbbec, /*0xf0-0xf7*/
-  0x9c5b, 0xd1cd, 0x9c5c, 0xcced, 0xedb5, 0x9c5d, 0x9c5e, 0x9c5f, /*0xf8-0xff*/
-  /* 0x6e00 */
-  0x9c60, 0x9c61, 0x9c62, 0x9c63, 0x9c64, 0xc7e5, 0x9c65, 0x9c66, /*0x00-0x07*/
-  0x9c67, 0x9c68, 0xd4a8, 0x9c69, 0xe4cb, 0xd7d5, 0xe4c2, 0x9c6a, /*0x08-0x0f*/
-  0xbda5, 0xe4c5, 0x9c6b, 0x9c6c, 0xd3e6, 0x9c6d, 0xe4c9, 0xc9f8, /*0x10-0x17*/
-  0x9c6e, 0x9c6f, 0xe4be, 0x9c70, 0x9c71, 0xd3e5, 0x9c72, 0x9c73, /*0x18-0x1f*/
-  0xc7fe, 0xb6c9, 0x9c74, 0xd4fc, 0xb2b3, 0xe4d7, 0x9c75, 0x9c76, /*0x20-0x27*/
-  0x9c77, 0xcec2, 0x9c78, 0xe4cd, 0x9c79, 0xcebc, 0x9c7a, 0xb8db, /*0x28-0x2f*/
-  0x9c7b, 0x9c7c, 0xe4d6, 0x9c7d, 0xbfca, 0x9c7e, 0x9c80, 0x9c81, /*0x30-0x37*/
-  0xd3ce, 0x9c82, 0xc3ec, 0x9c83, 0x9c84, 0x9c85, 0x9c86, 0x9c87, /*0x38-0x3f*/
-  0x9c88, 0x9c89, 0x9c8a, 0xc5c8, 0xe4d8, 0x9c8b, 0x9c8c, 0x9c8d, /*0x40-0x47*/
-  0x9c8e, 0x9c8f, 0x9c90, 0x9c91, 0x9c92, 0xcdc4, 0xe4cf, 0x9c93, /*0x48-0x4f*/
-  0x9c94, 0x9c95, 0x9c96, 0xe4d4, 0xe4d5, 0x9c97, 0xbafe, 0x9c98, /*0x50-0x57*/
-  0xcfe6, 0x9c99, 0x9c9a, 0xd5bf, 0x9c9b, 0x9c9c, 0x9c9d, 0xe4d2, /*0x58-0x5f*/
-  0x9c9e, 0x9c9f, 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, /*0x60-0x67*/
-  0x9ca6, 0x9ca7, 0x9ca8, 0xe4d0, 0x9ca9, 0x9caa, 0xe4ce, 0x9cab, /*0x68-0x6f*/
-  0x9cac, 0x9cad, 0x9cae, 0x9caf, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, /*0x70-0x77*/
-  0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cb8, 0x9cb9, 0xcde5, 0xcaaa, /*0x78-0x7f*/
-  0x9cba, 0x9cbb, 0x9cbc, 0xc0a3, 0x9cbd, 0xbda6, 0xe4d3, 0x9cbe, /*0x80-0x87*/
-  0x9cbf, 0xb8c8, 0x9cc0, 0x9cc1, 0x9cc2, 0x9cc3, 0x9cc4, 0xe4e7, /*0x88-0x8f*/
-  0xd4b4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cc8, 0x9cc9, 0x9cca, 0x9ccb, /*0x90-0x97*/
-  0xe4db, 0x9ccc, 0x9ccd, 0x9cce, 0xc1ef, 0x9ccf, 0x9cd0, 0xe4e9, /*0x98-0x9f*/
-  0x9cd1, 0x9cd2, 0xd2e7, 0x9cd3, 0x9cd4, 0xe4df, 0x9cd5, 0xe4e0, /*0xa0-0xa7*/
-  0x9cd6, 0x9cd7, 0xcfaa, 0x9cd8, 0x9cd9, 0x9cda, 0x9cdb, 0xcbdd, /*0xa8-0xaf*/
-  0x9cdc, 0xe4da, 0xe4d1, 0x9cdd, 0xe4e5, 0x9cde, 0xc8dc, 0xe4e3, /*0xb0-0xb7*/
-  0x9cdf, 0x9ce0, 0xc4e7, 0xe4e2, 0x9ce1, 0xe4e1, 0x9ce2, 0x9ce3, /*0xb8-0xbf*/
-  0x9ce4, 0xb3fc, 0xe4e8, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0xb5e1, /*0xc0-0xc7*/
-  0x9ce9, 0x9cea, 0x9ceb, 0xd7cc, 0x9cec, 0x9ced, 0x9cee, 0xe4e6, /*0xc8-0xcf*/
-  0x9cef, 0xbbac, 0x9cf0, 0xd7d2, 0xcccf, 0xebf8, 0x9cf1, 0xe4e4, /*0xd0-0xd7*/
-  0x9cf2, 0x9cf3, 0xb9f6, 0x9cf4, 0x9cf5, 0x9cf6, 0xd6cd, 0xe4d9, /*0xd8-0xdf*/
-  0xe4dc, 0xc2fa, 0xe4de, 0x9cf7, 0xc2cb, 0xc0c4, 0xc2d0, 0x9cf8, /*0xe0-0xe7*/
-  0xb1f5, 0xccb2, 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, /*0xe8-0xef*/
-  0x9d40, 0x9d41, 0x9d42, 0x9d43, 0xb5ce, 0x9d44, 0x9d45, 0x9d46, /*0xf0-0xf7*/
-  0x9d47, 0xe4ef, 0x9d48, 0x9d49, 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, /*0xf8-0xff*/
-  /* 0x6f00 */
-  0x9d4e, 0x9d4f, 0xc6af, 0x9d50, 0x9d51, 0x9d52, 0xc6e1, 0x9d53, /*0x00-0x07*/
-  0x9d54, 0xe4f5, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, 0xc2a9, /*0x08-0x0f*/
-  0x9d5a, 0x9d5b, 0x9d5c, 0xc0ec, 0xd1dd, 0xe4ee, 0x9d5d, 0x9d5e, /*0x10-0x17*/
-  0x9d5f, 0x9d60, 0x9d61, 0x9d62, 0x9d63, 0x9d64, 0x9d65, 0x9d66, /*0x18-0x1f*/
-  0xc4ae, 0x9d67, 0x9d68, 0x9d69, 0xe4ed, 0x9d6a, 0x9d6b, 0x9d6c, /*0x20-0x27*/
-  0x9d6d, 0xe4f6, 0xe4f4, 0xc2fe, 0x9d6e, 0xe4dd, 0x9d6f, 0xe4f0, /*0x28-0x2f*/
-  0x9d70, 0xcafe, 0x9d71, 0xd5c4, 0x9d72, 0x9d73, 0xe4f1, 0x9d74, /*0x30-0x37*/
-  0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a, 0xd1fa, 0x9d7b, /*0x38-0x3f*/
-  0x9d7c, 0x9d7d, 0x9d7e, 0x9d80, 0x9d81, 0x9d82, 0xe4eb, 0xe4ec, /*0x40-0x47*/
-  0x9d83, 0x9d84, 0x9d85, 0xe4f2, 0x9d86, 0xceab, 0x9d87, 0x9d88, /*0x48-0x4f*/
-  0x9d89, 0x9d8a, 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, /*0x50-0x57*/
-  0xc5cb, 0x9d91, 0x9d92, 0x9d93, 0xc7b1, 0x9d94, 0xc2ba, 0x9d95, /*0x58-0x5f*/
-  0x9d96, 0x9d97, 0xe4ea, 0x9d98, 0x9d99, 0x9d9a, 0xc1ca, 0x9d9b, /*0x60-0x67*/
-  0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0xccb6, 0xb3b1, 0x9da1, /*0x68-0x6f*/
-  0x9da2, 0x9da3, 0xe4fb, 0x9da4, 0xe4f3, 0x9da5, 0x9da6, 0x9da7, /*0x70-0x77*/
-  0xe4fa, 0x9da8, 0xe4fd, 0x9da9, 0xe4fc, 0x9daa, 0x9dab, 0x9dac, /*0x78-0x7f*/
-  0x9dad, 0x9dae, 0x9daf, 0x9db0, 0xb3ce, 0x9db1, 0x9db2, 0x9db3, /*0x80-0x87*/
-  0xb3ba, 0xe4f7, 0x9db4, 0x9db5, 0xe4f9, 0xe4f8, 0xc5ec, 0x9db6, /*0x88-0x8f*/
-  0x9db7, 0x9db8, 0x9db9, 0x9dba, 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, /*0x90-0x97*/
-  0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2, 0xc0bd, 0x9dc3, 0x9dc4, 0x9dc5, /*0x98-0x9f*/
-  0x9dc6, 0xd4e8, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca, 0x9dcb, 0xe5a2, /*0xa0-0xa7*/
-  0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2, 0x9dd3, /*0xa8-0xaf*/
-  0x9dd4, 0x9dd5, 0x9dd6, 0xb0c4, 0x9dd7, 0x9dd8, 0xe5a4, 0x9dd9, /*0xb0-0xb7*/
-  0x9dda, 0xe5a3, 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, /*0xb8-0xbf*/
-  0xbca4, 0x9de1, 0xe5a5, 0x9de2, 0x9de3, 0x9de4, 0x9de5, 0x9de6, /*0xc0-0xc7*/
-  0x9de7, 0xe5a1, 0x9de8, 0x9de9, 0x9dea, 0x9deb, 0x9dec, 0x9ded, /*0xc8-0xcf*/
-  0x9dee, 0xe4fe, 0xb1f4, 0x9def, 0x9df0, 0x9df1, 0x9df2, 0x9df3, /*0xd0-0xd7*/
-  0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0xe5a8, 0x9dfa, /*0xd8-0xdf*/
-  0xe5a9, 0xe5a6, 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9e40, 0x9e41, /*0xe0-0xe7*/
-  0x9e42, 0x9e43, 0x9e44, 0x9e45, 0x9e46, 0x9e47, 0xe5a7, 0xe5aa, /*0xe8-0xef*/
-  0x9e48, 0x9e49, 0x9e4a, 0x9e4b, 0x9e4c, 0x9e4d, 0x9e4e, 0x9e4f, /*0xf0-0xf7*/
-  0x9e50, 0x9e51, 0x9e52, 0x9e53, 0x9e54, 0x9e55, 0x9e56, 0x9e57, /*0xf8-0xff*/
-  /* 0x7000 */
-  0x9e58, 0x9e59, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5d, 0x9e5e, 0x9e5f, /*0x00-0x07*/
-  0x9e60, 0x9e61, 0x9e62, 0x9e63, 0x9e64, 0x9e65, 0x9e66, 0x9e67, /*0x08-0x0f*/
-  0x9e68, 0xc6d9, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e6d, 0x9e6e, /*0x10-0x17*/
-  0x9e6f, 0x9e70, 0xe5ab, 0xe5ad, 0x9e71, 0x9e72, 0x9e73, 0x9e74, /*0x18-0x1f*/
-  0x9e75, 0x9e76, 0x9e77, 0xe5ac, 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, /*0x20-0x27*/
-  0x9e7c, 0x9e7d, 0x9e7e, 0x9e80, 0x9e81, 0x9e82, 0x9e83, 0x9e84, /*0x28-0x2f*/
-  0x9e85, 0x9e86, 0x9e87, 0x9e88, 0x9e89, 0xe5af, 0x9e8a, 0x9e8b, /*0x30-0x37*/
-  0x9e8c, 0xe5ae, 0x9e8d, 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e92, /*0x38-0x3f*/
-  0x9e93, 0x9e94, 0x9e95, 0x9e96, 0x9e97, 0x9e98, 0x9e99, 0x9e9a, /*0x40-0x47*/
-  0x9e9b, 0x9e9c, 0x9e9d, 0x9e9e, 0xb9e0, 0x9e9f, 0x9ea0, 0xe5b0, /*0x48-0x4f*/
-  0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea6, 0x9ea7, 0x9ea8, /*0x50-0x57*/
-  0x9ea9, 0x9eaa, 0x9eab, 0x9eac, 0x9ead, 0x9eae, 0xe5b1, 0x9eaf, /*0x58-0x5f*/
-  0x9eb0, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb4, 0x9eb5, 0x9eb6, 0x9eb7, /*0x60-0x67*/
-  0x9eb8, 0x9eb9, 0x9eba, 0xbbf0, 0xece1, 0xc3f0, 0x9ebb, 0xb5c6, /*0x68-0x6f*/
-  0xbbd2, 0x9ebc, 0x9ebd, 0x9ebe, 0x9ebf, 0xc1e9, 0xd4ee, 0x9ec0, /*0x70-0x77*/
-  0xbec4, 0x9ec1, 0x9ec2, 0x9ec3, 0xd7c6, 0x9ec4, 0xd4d6, 0xb2d3, /*0x78-0x7f*/
-  0xecbe, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, 0xeac1, 0x9ec9, 0x9eca, /*0x80-0x87*/
-  0x9ecb, 0xc2af, 0xb4b6, 0x9ecc, 0x9ecd, 0x9ece, 0xd1d7, 0x9ecf, /*0x88-0x8f*/
-  0x9ed0, 0x9ed1, 0xb3b4, 0x9ed2, 0xc8b2, 0xbfbb, 0xecc0, 0x9ed3, /*0x90-0x97*/
-  0x9ed4, 0xd6cb, 0x9ed5, 0x9ed6, 0xecbf, 0xecc1, 0x9ed7, 0x9ed8, /*0x98-0x9f*/
-  0x9ed9, 0x9eda, 0x9edb, 0x9edc, 0x9edd, 0x9ede, 0x9edf, 0x9ee0, /*0xa0-0xa7*/
-  0x9ee1, 0x9ee2, 0x9ee3, 0xecc5, 0xbee6, 0xccbf, 0xc5da, 0xbebc, /*0xa8-0xaf*/
-  0x9ee4, 0xecc6, 0x9ee5, 0xb1fe, 0x9ee6, 0x9ee7, 0x9ee8, 0xecc4, /*0xb0-0xb7*/
-  0xd5a8, 0xb5e3, 0x9ee9, 0xecc2, 0xc1b6, 0xb3e3, 0x9eea, 0x9eeb, /*0xb8-0xbf*/
-  0xecc3, 0xcbb8, 0xc0c3, 0xccfe, 0x9eec, 0x9eed, 0x9eee, 0x9eef, /*0xc0-0xc7*/
-  0xc1d2, 0x9ef0, 0xecc8, 0x9ef1, 0x9ef2, 0x9ef3, 0x9ef4, 0x9ef5, /*0xc8-0xcf*/
-  0x9ef6, 0x9ef7, 0x9ef8, 0x9ef9, 0x9efa, 0x9efb, 0x9efc, 0x9efd, /*0xd0-0xd7*/
-  0xbae6, 0xc0d3, 0x9efe, 0xd6f2, 0x9f40, 0x9f41, 0x9f42, 0xd1cc, /*0xd8-0xdf*/
-  0x9f43, 0x9f44, 0x9f45, 0x9f46, 0xbfbe, 0x9f47, 0xb7b3, 0xc9d5, /*0xe0-0xe7*/
-  0xecc7, 0xbbe2, 0x9f48, 0xcccc, 0xbdfd, 0xc8c8, 0x9f49, 0xcfa9, /*0xe8-0xef*/
-  0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f, 0x9f50, 0xcde9, /*0xf0-0xf7*/
-  0x9f51, 0xc5eb, 0x9f52, 0x9f53, 0x9f54, 0xb7e9, 0x9f55, 0x9f56, /*0xf8-0xff*/
-  /* 0x7100 */
-  0x9f57, 0x9f58, 0x9f59, 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, /*0x00-0x07*/
-  0x9f5f, 0xd1c9, 0xbab8, 0x9f60, 0x9f61, 0x9f62, 0x9f63, 0x9f64, /*0x08-0x0f*/
-  0xecc9, 0x9f65, 0x9f66, 0xecca, 0x9f67, 0xbbc0, 0xeccb, 0x9f68, /*0x10-0x17*/
-  0xece2, 0xb1ba, 0xb7d9, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, /*0x18-0x1f*/
-  0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f72, 0x9f73, 0xbdb9, 0x9f74, /*0x20-0x27*/
-  0x9f75, 0x9f76, 0x9f77, 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0xeccc, /*0x28-0x2f*/
-  0xd1e6, 0xeccd, 0x9f7c, 0x9f7d, 0x9f7e, 0x9f80, 0xc8bb, 0x9f81, /*0x30-0x37*/
-  0x9f82, 0x9f83, 0x9f84, 0x9f85, 0x9f86, 0x9f87, 0x9f88, 0x9f89, /*0x38-0x3f*/
-  0x9f8a, 0x9f8b, 0x9f8c, 0x9f8d, 0x9f8e, 0xecd1, 0x9f8f, 0x9f90, /*0x40-0x47*/
-  0x9f91, 0x9f92, 0xecd3, 0x9f93, 0xbbcd, 0x9f94, 0xbce5, 0x9f95, /*0x48-0x4f*/
-  0x9f96, 0x9f97, 0x9f98, 0x9f99, 0x9f9a, 0x9f9b, 0x9f9c, 0x9f9d, /*0x50-0x57*/
-  0x9f9e, 0x9f9f, 0x9fa0, 0x9fa1, 0xeccf, 0x9fa2, 0xc9b7, 0x9fa3, /*0x58-0x5f*/
-  0x9fa4, 0x9fa5, 0x9fa6, 0x9fa7, 0xc3ba, 0x9fa8, 0xece3, 0xd5d5, /*0x60-0x67*/
-  0xecd0, 0x9fa9, 0x9faa, 0x9fab, 0x9fac, 0x9fad, 0xd6f3, 0x9fae, /*0x68-0x6f*/
-  0x9faf, 0x9fb0, 0xecd2, 0xecce, 0x9fb1, 0x9fb2, 0x9fb3, 0x9fb4, /*0x70-0x77*/
-  0xecd4, 0x9fb5, 0xecd5, 0x9fb6, 0x9fb7, 0xc9bf, 0x9fb8, 0x9fb9, /*0x78-0x7f*/
-  0x9fba, 0x9fbb, 0x9fbc, 0x9fbd, 0xcfa8, 0x9fbe, 0x9fbf, 0x9fc0, /*0x80-0x87*/
-  0x9fc1, 0x9fc2, 0xd0dc, 0x9fc3, 0x9fc4, 0x9fc5, 0x9fc6, 0xd1ac, /*0x88-0x8f*/
-  0x9fc7, 0x9fc8, 0x9fc9, 0x9fca, 0xc8db, 0x9fcb, 0x9fcc, 0x9fcd, /*0x90-0x97*/
-  0xecd6, 0xcef5, 0x9fce, 0x9fcf, 0x9fd0, 0x9fd1, 0x9fd2, 0xcaec, /*0x98-0x9f*/
-  0xecda, 0x9fd3, 0x9fd4, 0x9fd5, 0x9fd6, 0x9fd7, 0x9fd8, 0x9fd9, /*0xa0-0xa7*/
-  0xecd9, 0x9fda, 0x9fdb, 0x9fdc, 0xb0be, 0x9fdd, 0x9fde, 0x9fdf, /*0xa8-0xaf*/
-  0x9fe0, 0x9fe1, 0x9fe2, 0xecd7, 0x9fe3, 0xecd8, 0x9fe4, 0x9fe5, /*0xb0-0xb7*/
-  0x9fe6, 0xece4, 0x9fe7, 0x9fe8, 0x9fe9, 0x9fea, 0x9feb, 0x9fec, /*0xb8-0xbf*/
-  0x9fed, 0x9fee, 0x9fef, 0xc8bc, 0x9ff0, 0x9ff1, 0x9ff2, 0x9ff3, /*0xc0-0xc7*/
-  0x9ff4, 0x9ff5, 0x9ff6, 0x9ff7, 0x9ff8, 0x9ff9, 0xc1c7, 0x9ffa, /*0xc8-0xcf*/
-  0x9ffb, 0x9ffc, 0x9ffd, 0x9ffe, 0xecdc, 0xd1e0, 0xa040, 0xa041, /*0xd0-0xd7*/
-  0xa042, 0xa043, 0xa044, 0xa045, 0xa046, 0xa047, 0xa048, 0xa049, /*0xd8-0xdf*/
-  0xecdb, 0xa04a, 0xa04b, 0xa04c, 0xa04d, 0xd4ef, 0xa04e, 0xecdd, /*0xe0-0xe7*/
-  0xa04f, 0xa050, 0xa051, 0xa052, 0xa053, 0xa054, 0xdbc6, 0xa055, /*0xe8-0xef*/
-  0xa056, 0xa057, 0xa058, 0xa059, 0xa05a, 0xa05b, 0xa05c, 0xa05d, /*0xf0-0xf7*/
-  0xa05e, 0xecde, 0xa05f, 0xa060, 0xa061, 0xa062, 0xa063, 0xa064, /*0xf8-0xff*/
-  /* 0x7200 */
-  0xa065, 0xa066, 0xa067, 0xa068, 0xa069, 0xa06a, 0xb1ac, 0xa06b, /*0x00-0x07*/
-  0xa06c, 0xa06d, 0xa06e, 0xa06f, 0xa070, 0xa071, 0xa072, 0xa073, /*0x08-0x0f*/
-  0xa074, 0xa075, 0xa076, 0xa077, 0xa078, 0xa079, 0xa07a, 0xa07b, /*0x10-0x17*/
-  0xa07c, 0xa07d, 0xa07e, 0xa080, 0xa081, 0xecdf, 0xa082, 0xa083, /*0x18-0x1f*/
-  0xa084, 0xa085, 0xa086, 0xa087, 0xa088, 0xa089, 0xa08a, 0xa08b, /*0x20-0x27*/
-  0xece0, 0xa08c, 0xd7a6, 0xa08d, 0xc5c0, 0xa08e, 0xa08f, 0xa090, /*0x28-0x2f*/
-  0xebbc, 0xb0ae, 0xa091, 0xa092, 0xa093, 0xbef4, 0xb8b8, 0xd2af, /*0x30-0x37*/
-  0xb0d6, 0xb5f9, 0xa094, 0xd8b3, 0xa095, 0xcbac, 0xa096, 0xe3dd, /*0x38-0x3f*/
-  0xa097, 0xa098, 0xa099, 0xa09a, 0xa09b, 0xa09c, 0xa09d, 0xc6ac, /*0x40-0x47*/
-  0xb0e6, 0xa09e, 0xa09f, 0xa0a0, 0xc5c6, 0xebb9, 0xa0a1, 0xa0a2, /*0x48-0x4f*/
-  0xa0a3, 0xa0a4, 0xebba, 0xa0a5, 0xa0a6, 0xa0a7, 0xebbb, 0xa0a8, /*0x50-0x57*/
-  0xa0a9, 0xd1c0, 0xa0aa, 0xc5a3, 0xa0ab, 0xeaf2, 0xa0ac, 0xc4b2, /*0x58-0x5f*/
-  0xa0ad, 0xc4b5, 0xc0ce, 0xa0ae, 0xa0af, 0xa0b0, 0xeaf3, 0xc4c1, /*0x60-0x67*/
-  0xa0b1, 0xceef, 0xa0b2, 0xa0b3, 0xa0b4, 0xa0b5, 0xeaf0, 0xeaf4, /*0x68-0x6f*/
-  0xa0b6, 0xa0b7, 0xc9fc, 0xa0b8, 0xa0b9, 0xc7a3, 0xa0ba, 0xa0bb, /*0x70-0x77*/
-  0xa0bc, 0xccd8, 0xcefe, 0xa0bd, 0xa0be, 0xa0bf, 0xeaf5, 0xeaf6, /*0x78-0x7f*/
-  0xcfac, 0xc0e7, 0xa0c0, 0xa0c1, 0xeaf7, 0xa0c2, 0xa0c3, 0xa0c4, /*0x80-0x87*/
-  0xa0c5, 0xa0c6, 0xb6bf, 0xeaf8, 0xa0c7, 0xeaf9, 0xa0c8, 0xeafa, /*0x88-0x8f*/
-  0xa0c9, 0xa0ca, 0xeafb, 0xa0cb, 0xa0cc, 0xa0cd, 0xa0ce, 0xa0cf, /*0x90-0x97*/
-  0xa0d0, 0xa0d1, 0xa0d2, 0xa0d3, 0xa0d4, 0xa0d5, 0xa0d6, 0xeaf1, /*0x98-0x9f*/
-  0xa0d7, 0xa0d8, 0xa0d9, 0xa0da, 0xa0db, 0xa0dc, 0xa0dd, 0xa0de, /*0xa0-0xa7*/
-  0xa0df, 0xa0e0, 0xa0e1, 0xa0e2, 0xc8ae, 0xe1eb, 0xa0e3, 0xb7b8, /*0xa8-0xaf*/
-  0xe1ec, 0xa0e4, 0xa0e5, 0xa0e6, 0xe1ed, 0xa0e7, 0xd7b4, 0xe1ee, /*0xb0-0xb7*/
-  0xe1ef, 0xd3cc, 0xa0e8, 0xa0e9, 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ed, /*0xb8-0xbf*/
-  0xa0ee, 0xe1f1, 0xbff1, 0xe1f0, 0xb5d2, 0xa0ef, 0xa0f0, 0xa0f1, /*0xc0-0xc7*/
-  0xb1b7, 0xa0f2, 0xa0f3, 0xa0f4, 0xa0f5, 0xe1f3, 0xe1f2, 0xa0f6, /*0xc8-0xcf*/
-  0xbafc, 0xa0f7, 0xe1f4, 0xa0f8, 0xa0f9, 0xa0fa, 0xa0fb, 0xb9b7, /*0xd0-0xd7*/
-  0xa0fc, 0xbed1, 0xa0fd, 0xa0fe, 0xaa40, 0xaa41, 0xc4fc, 0xaa42, /*0xd8-0xdf*/
-  0xbadd, 0xbdc6, 0xaa43, 0xaa44, 0xaa45, 0xaa46, 0xaa47, 0xaa48, /*0xe0-0xe7*/
-  0xe1f5, 0xe1f7, 0xaa49, 0xaa4a, 0xb6c0, 0xcfc1, 0xcaa8, 0xe1f6, /*0xe8-0xef*/
-  0xd5f8, 0xd3fc, 0xe1f8, 0xe1fc, 0xe1f9, 0xaa4b, 0xaa4c, 0xe1fa, /*0xf0-0xf7*/
-  0xc0ea, 0xaa4d, 0xe1fe, 0xe2a1, 0xc0c7, 0xaa4e, 0xaa4f, 0xaa50, /*0xf8-0xff*/
-  /* 0x7300 */
-  0xaa51, 0xe1fb, 0xaa52, 0xe1fd, 0xaa53, 0xaa54, 0xaa55, 0xaa56, /*0x00-0x07*/
-  0xaa57, 0xaa58, 0xe2a5, 0xaa59, 0xaa5a, 0xaa5b, 0xc1d4, 0xaa5c, /*0x08-0x0f*/
-  0xaa5d, 0xaa5e, 0xaa5f, 0xe2a3, 0xaa60, 0xe2a8, 0xb2fe, 0xe2a2, /*0x10-0x17*/
-  0xaa61, 0xaa62, 0xaa63, 0xc3cd, 0xb2c2, 0xe2a7, 0xe2a6, 0xaa64, /*0x18-0x1f*/
-  0xaa65, 0xe2a4, 0xe2a9, 0xaa66, 0xaa67, 0xe2ab, 0xaa68, 0xaa69, /*0x20-0x27*/
-  0xaa6a, 0xd0c9, 0xd6ed, 0xc3a8, 0xe2ac, 0xaa6b, 0xcfd7, 0xaa6c, /*0x28-0x2f*/
-  0xaa6d, 0xe2ae, 0xaa6e, 0xaa6f, 0xbaef, 0xaa70, 0xaa71, 0xe9e0, /*0x30-0x37*/
-  0xe2ad, 0xe2aa, 0xaa72, 0xaa73, 0xaa74, 0xaa75, 0xbbab, 0xd4b3, /*0x38-0x3f*/
-  0xaa76, 0xaa77, 0xaa78, 0xaa79, 0xaa7a, 0xaa7b, 0xaa7c, 0xaa7d, /*0x40-0x47*/
-  0xaa7e, 0xaa80, 0xaa81, 0xaa82, 0xaa83, 0xe2b0, 0xaa84, 0xaa85, /*0x48-0x4f*/
-  0xe2af, 0xaa86, 0xe9e1, 0xaa87, 0xaa88, 0xaa89, 0xaa8a, 0xe2b1, /*0x50-0x57*/
-  0xaa8b, 0xaa8c, 0xaa8d, 0xaa8e, 0xaa8f, 0xaa90, 0xaa91, 0xaa92, /*0x58-0x5f*/
-  0xe2b2, 0xaa93, 0xaa94, 0xaa95, 0xaa96, 0xaa97, 0xaa98, 0xaa99, /*0x60-0x67*/
-  0xaa9a, 0xaa9b, 0xaa9c, 0xaa9d, 0xe2b3, 0xcca1, 0xaa9e, 0xe2b4, /*0x68-0x6f*/
-  0xaa9f, 0xaaa0, 0xab40, 0xab41, 0xab42, 0xab43, 0xab44, 0xab45, /*0x70-0x77*/
-  0xab46, 0xab47, 0xab48, 0xab49, 0xab4a, 0xab4b, 0xe2b5, 0xab4c, /*0x78-0x7f*/
-  0xab4d, 0xab4e, 0xab4f, 0xab50, 0xd0fe, 0xab51, 0xab52, 0xc2ca, /*0x80-0x87*/
-  0xab53, 0xd3f1, 0xab54, 0xcdf5, 0xab55, 0xab56, 0xe7e0, 0xab57, /*0x88-0x8f*/
-  0xab58, 0xe7e1, 0xab59, 0xab5a, 0xab5b, 0xab5c, 0xbec1, 0xab5d, /*0x90-0x97*/
-  0xab5e, 0xab5f, 0xab60, 0xc2ea, 0xab61, 0xab62, 0xab63, 0xe7e4, /*0x98-0x9f*/
-  0xab64, 0xab65, 0xe7e3, 0xab66, 0xab67, 0xab68, 0xab69, 0xab6a, /*0xa0-0xa7*/
-  0xab6b, 0xcde6, 0xab6c, 0xc3b5, 0xab6d, 0xab6e, 0xe7e2, 0xbbb7, /*0xa8-0xaf*/
-  0xcfd6, 0xab6f, 0xc1e1, 0xe7e9, 0xab70, 0xab71, 0xab72, 0xe7e8, /*0xb0-0xb7*/
-  0xab73, 0xab74, 0xe7f4, 0xb2a3, 0xab75, 0xab76, 0xab77, 0xab78, /*0xb8-0xbf*/
-  0xe7ea, 0xab79, 0xe7e6, 0xab7a, 0xab7b, 0xab7c, 0xab7d, 0xab7e, /*0xc0-0xc7*/
-  0xe7ec, 0xe7eb, 0xc9ba, 0xab80, 0xab81, 0xd5e4, 0xab82, 0xe7e5, /*0xc8-0xcf*/
-  0xb7a9, 0xe7e7, 0xab83, 0xab84, 0xab85, 0xab86, 0xab87, 0xab88, /*0xd0-0xd7*/
-  0xab89, 0xe7ee, 0xab8a, 0xab8b, 0xab8c, 0xab8d, 0xe7f3, 0xab8e, /*0xd8-0xdf*/
-  0xd6e9, 0xab8f, 0xab90, 0xab91, 0xab92, 0xe7ed, 0xab93, 0xe7f2, /*0xe0-0xe7*/
-  0xab94, 0xe7f1, 0xab95, 0xab96, 0xab97, 0xb0e0, 0xab98, 0xab99, /*0xe8-0xef*/
-  0xab9a, 0xab9b, 0xe7f5, 0xab9c, 0xab9d, 0xab9e, 0xab9f, 0xaba0, /*0xf0-0xf7*/
-  0xac40, 0xac41, 0xac42, 0xac43, 0xac44, 0xac45, 0xac46, 0xac47, /*0xf8-0xff*/
-  /* 0x7400 */
-  0xac48, 0xac49, 0xac4a, 0xc7f2, 0xac4b, 0xc0c5, 0xc0ed, 0xac4c, /*0x00-0x07*/
-  0xac4d, 0xc1f0, 0xe7f0, 0xac4e, 0xac4f, 0xac50, 0xac51, 0xe7f6, /*0x08-0x0f*/
-  0xcbf6, 0xac52, 0xac53, 0xac54, 0xac55, 0xac56, 0xac57, 0xac58, /*0x10-0x17*/
-  0xac59, 0xac5a, 0xe8a2, 0xe8a1, 0xac5b, 0xac5c, 0xac5d, 0xac5e, /*0x18-0x1f*/
-  0xac5f, 0xac60, 0xd7c1, 0xac61, 0xac62, 0xe7fa, 0xe7f9, 0xac63, /*0x20-0x27*/
-  0xe7fb, 0xac64, 0xe7f7, 0xac65, 0xe7fe, 0xac66, 0xe7fd, 0xac67, /*0x28-0x2f*/
-  0xe7fc, 0xac68, 0xac69, 0xc1d5, 0xc7d9, 0xc5fd, 0xc5c3, 0xac6a, /*0x30-0x37*/
-  0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xc7ed, 0xac6f, 0xac70, 0xac71, /*0x38-0x3f*/
-  0xac72, 0xe8a3, 0xac73, 0xac74, 0xac75, 0xac76, 0xac77, 0xac78, /*0x40-0x47*/
-  0xac79, 0xac7a, 0xac7b, 0xac7c, 0xac7d, 0xac7e, 0xac80, 0xac81, /*0x48-0x4f*/
-  0xac82, 0xac83, 0xac84, 0xac85, 0xac86, 0xe8a6, 0xac87, 0xe8a5, /*0x50-0x57*/
-  0xac88, 0xe8a7, 0xbaf7, 0xe7f8, 0xe8a4, 0xac89, 0xc8f0, 0xc9aa, /*0x58-0x5f*/
-  0xac8a, 0xac8b, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90, 0xac91, /*0x60-0x67*/
-  0xac92, 0xac93, 0xac94, 0xac95, 0xac96, 0xe8a9, 0xac97, 0xac98, /*0x68-0x6f*/
-  0xb9e5, 0xac99, 0xac9a, 0xac9b, 0xac9c, 0xac9d, 0xd1fe, 0xe8a8, /*0x70-0x77*/
-  0xac9e, 0xac9f, 0xaca0, 0xad40, 0xad41, 0xad42, 0xe8aa, 0xad43, /*0x78-0x7f*/
-  0xe8ad, 0xe8ae, 0xad44, 0xc1a7, 0xad45, 0xad46, 0xad47, 0xe8af, /*0x80-0x87*/
-  0xad48, 0xad49, 0xad4a, 0xe8b0, 0xad4b, 0xad4c, 0xe8ac, 0xad4d, /*0x88-0x8f*/
-  0xe8b4, 0xad4e, 0xad4f, 0xad50, 0xad51, 0xad52, 0xad53, 0xad54, /*0x90-0x97*/
-  0xad55, 0xad56, 0xad57, 0xad58, 0xe8ab, 0xad59, 0xe8b1, 0xad5a, /*0x98-0x9f*/
-  0xad5b, 0xad5c, 0xad5d, 0xad5e, 0xad5f, 0xad60, 0xad61, 0xe8b5, /*0xa0-0xa7*/
-  0xe8b2, 0xe8b3, 0xad62, 0xad63, 0xad64, 0xad65, 0xad66, 0xad67, /*0xa8-0xaf*/
-  0xad68, 0xad69, 0xad6a, 0xad6b, 0xad6c, 0xad6d, 0xad6e, 0xad6f, /*0xb0-0xb7*/
-  0xad70, 0xad71, 0xe8b7, 0xad72, 0xad73, 0xad74, 0xad75, 0xad76, /*0xb8-0xbf*/
-  0xad77, 0xad78, 0xad79, 0xad7a, 0xad7b, 0xad7c, 0xad7d, 0xad7e, /*0xc0-0xc7*/
-  0xad80, 0xad81, 0xad82, 0xad83, 0xad84, 0xad85, 0xad86, 0xad87, /*0xc8-0xcf*/
-  0xad88, 0xad89, 0xe8b6, 0xad8a, 0xad8b, 0xad8c, 0xad8d, 0xad8e, /*0xd0-0xd7*/
-  0xad8f, 0xad90, 0xad91, 0xad92, 0xb9cf, 0xad93, 0xf0ac, 0xad94, /*0xd8-0xdf*/
-  0xf0ad, 0xad95, 0xc6b0, 0xb0ea, 0xc8bf, 0xad96, 0xcddf, 0xad97, /*0xe0-0xe7*/
-  0xad98, 0xad99, 0xad9a, 0xad9b, 0xad9c, 0xad9d, 0xcecd, 0xeab1, /*0xe8-0xef*/
-  0xad9e, 0xad9f, 0xada0, 0xae40, 0xeab2, 0xae41, 0xc6bf, 0xb4c9, /*0xf0-0xf7*/
-  0xae42, 0xae43, 0xae44, 0xae45, 0xae46, 0xae47, 0xae48, 0xeab3, /*0xf8-0xff*/
-  /* 0x7500 */
-  0xae49, 0xae4a, 0xae4b, 0xae4c, 0xd5e7, 0xae4d, 0xae4e, 0xae4f, /*0x00-0x07*/
-  0xae50, 0xae51, 0xae52, 0xae53, 0xae54, 0xddf9, 0xae55, 0xeab4, /*0x08-0x0f*/
-  0xae56, 0xeab5, 0xae57, 0xeab6, 0xae58, 0xae59, 0xae5a, 0xae5b, /*0x10-0x17*/
-  0xb8ca, 0xdfb0, 0xc9f5, 0xae5c, 0xccf0, 0xae5d, 0xae5e, 0xc9fa, /*0x18-0x1f*/
-  0xae5f, 0xae60, 0xae61, 0xae62, 0xae63, 0xc9fb, 0xae64, 0xae65, /*0x20-0x27*/
-  0xd3c3, 0xcba6, 0xae66, 0xb8a6, 0xf0ae, 0xb1c2, 0xae67, 0xe5b8, /*0x28-0x2f*/
-  0xccef, 0xd3c9, 0xbcd7, 0xc9ea, 0xae68, 0xb5e7, 0xae69, 0xc4d0, /*0x30-0x37*/
-  0xb5e9, 0xae6a, 0xeeae, 0xbbad, 0xae6b, 0xae6c, 0xe7de, 0xae6d, /*0x38-0x3f*/
-  0xeeaf, 0xae6e, 0xae6f, 0xae70, 0xae71, 0xb3a9, 0xae72, 0xae73, /*0x40-0x47*/
-  0xeeb2, 0xae74, 0xae75, 0xeeb1, 0xbde7, 0xae76, 0xeeb0, 0xceb7, /*0x48-0x4f*/
-  0xae77, 0xae78, 0xae79, 0xae7a, 0xc5cf, 0xae7b, 0xae7c, 0xae7d, /*0x50-0x57*/
-  0xae7e, 0xc1f4, 0xdbce, 0xeeb3, 0xd0f3, 0xae80, 0xae81, 0xae82, /*0x58-0x5f*/
-  0xae83, 0xae84, 0xae85, 0xae86, 0xae87, 0xc2d4, 0xc6e8, 0xae88, /*0x60-0x67*/
-  0xae89, 0xae8a, 0xb7ac, 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f, /*0x68-0x6f*/
-  0xae90, 0xae91, 0xeeb4, 0xae92, 0xb3eb, 0xae93, 0xae94, 0xae95, /*0x70-0x77*/
-  0xbbfb, 0xeeb5, 0xae96, 0xae97, 0xae98, 0xae99, 0xae9a, 0xe7dc, /*0x78-0x7f*/
-  0xae9b, 0xae9c, 0xae9d, 0xeeb6, 0xae9e, 0xae9f, 0xbdae, 0xaea0, /*0x80-0x87*/
-  0xaf40, 0xaf41, 0xaf42, 0xf1e2, 0xaf43, 0xaf44, 0xaf45, 0xcae8, /*0x88-0x8f*/
-  0xaf46, 0xd2c9, 0xf0da, 0xaf47, 0xf0db, 0xaf48, 0xf0dc, 0xc1c6, /*0x90-0x97*/
-  0xaf49, 0xb8ed, 0xbece, 0xaf4a, 0xaf4b, 0xf0de, 0xaf4c, 0xc5b1, /*0x98-0x9f*/
-  0xf0dd, 0xd1f1, 0xaf4d, 0xf0e0, 0xb0cc, 0xbdea, 0xaf4e, 0xaf4f, /*0xa0-0xa7*/
-  0xaf50, 0xaf51, 0xaf52, 0xd2df, 0xf0df, 0xaf53, 0xb4af, 0xb7e8, /*0xa8-0xaf*/
-  0xf0e6, 0xf0e5, 0xc6a3, 0xf0e1, 0xf0e2, 0xb4c3, 0xaf54, 0xaf55, /*0xb0-0xb7*/
-  0xf0e3, 0xd5ee, 0xaf56, 0xaf57, 0xccdb, 0xbed2, 0xbcb2, 0xaf58, /*0xb8-0xbf*/
-  0xaf59, 0xaf5a, 0xf0e8, 0xf0e7, 0xf0e4, 0xb2a1, 0xaf5b, 0xd6a2, /*0xc0-0xc7*/
-  0xd3b8, 0xbeb7, 0xc8ac, 0xaf5c, 0xaf5d, 0xf0ea, 0xaf5e, 0xaf5f, /*0xc8-0xcf*/
-  0xaf60, 0xaf61, 0xd1f7, 0xaf62, 0xd6cc, 0xbadb, 0xf0e9, 0xaf63, /*0xd0-0xd7*/
-  0xb6bb, 0xaf64, 0xaf65, 0xcdb4, 0xaf66, 0xaf67, 0xc6a6, 0xaf68, /*0xd8-0xdf*/
-  0xaf69, 0xaf6a, 0xc1a1, 0xf0eb, 0xf0ee, 0xaf6b, 0xf0ed, 0xf0f0, /*0xe0-0xe7*/
-  0xf0ec, 0xaf6c, 0xbbbe, 0xf0ef, 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, /*0xe8-0xef*/
-  0xccb5, 0xf0f2, 0xaf71, 0xaf72, 0xb3d5, 0xaf73, 0xaf74, 0xaf75, /*0xf0-0xf7*/
-  0xaf76, 0xb1d4, 0xaf77, 0xaf78, 0xf0f3, 0xaf79, 0xaf7a, 0xf0f4, /*0xf8-0xff*/
-  /* 0x7600 */
-  0xf0f6, 0xb4e1, 0xaf7b, 0xf0f1, 0xaf7c, 0xf0f7, 0xaf7d, 0xaf7e, /*0x00-0x07*/
-  0xaf80, 0xaf81, 0xf0fa, 0xaf82, 0xf0f8, 0xaf83, 0xaf84, 0xaf85, /*0x08-0x0f*/
-  0xf0f5, 0xaf86, 0xaf87, 0xaf88, 0xaf89, 0xf0fd, 0xaf8a, 0xf0f9, /*0x10-0x17*/
-  0xf0fc, 0xf0fe, 0xaf8b, 0xf1a1, 0xaf8c, 0xaf8d, 0xaf8e, 0xcec1, /*0x18-0x1f*/
-  0xf1a4, 0xaf8f, 0xf1a3, 0xaf90, 0xc1f6, 0xf0fb, 0xcadd, 0xaf91, /*0x20-0x27*/
-  0xaf92, 0xb4f1, 0xb1f1, 0xccb1, 0xaf93, 0xf1a6, 0xaf94, 0xaf95, /*0x28-0x2f*/
-  0xf1a7, 0xaf96, 0xaf97, 0xf1ac, 0xd5ce, 0xf1a9, 0xaf98, 0xaf99, /*0x30-0x37*/
-  0xc8b3, 0xaf9a, 0xaf9b, 0xaf9c, 0xf1a2, 0xaf9d, 0xf1ab, 0xf1a8, /*0x38-0x3f*/
-  0xf1a5, 0xaf9e, 0xaf9f, 0xf1aa, 0xafa0, 0xb040, 0xb041, 0xb042, /*0x40-0x47*/
-  0xb043, 0xb044, 0xb045, 0xb046, 0xb0a9, 0xf1ad, 0xb047, 0xb048, /*0x48-0x4f*/
-  0xb049, 0xb04a, 0xb04b, 0xb04c, 0xf1af, 0xb04d, 0xf1b1, 0xb04e, /*0x50-0x57*/
-  0xb04f, 0xb050, 0xb051, 0xb052, 0xf1b0, 0xb053, 0xf1ae, 0xb054, /*0x58-0x5f*/
-  0xb055, 0xb056, 0xb057, 0xd1a2, 0xb058, 0xb059, 0xb05a, 0xb05b, /*0x60-0x67*/
-  0xb05c, 0xb05d, 0xb05e, 0xf1b2, 0xb05f, 0xb060, 0xb061, 0xf1b3, /*0x68-0x6f*/
-  0xb062, 0xb063, 0xb064, 0xb065, 0xb066, 0xb067, 0xb068, 0xb069, /*0x70-0x77*/
-  0xb9ef, 0xb06a, 0xb06b, 0xb5c7, 0xb06c, 0xb0d7, 0xb0d9, 0xb06d, /*0x78-0x7f*/
-  0xb06e, 0xb06f, 0xd4ed, 0xb070, 0xb5c4, 0xb071, 0xbdd4, 0xbbca, /*0x80-0x87*/
-  0xf0a7, 0xb072, 0xb073, 0xb8de, 0xb074, 0xb075, 0xf0a8, 0xb076, /*0x88-0x8f*/
-  0xb077, 0xb0a8, 0xb078, 0xf0a9, 0xb079, 0xb07a, 0xcdee, 0xb07b, /*0x90-0x97*/
-  0xb07c, 0xf0aa, 0xb07d, 0xb07e, 0xb080, 0xb081, 0xb082, 0xb083, /*0x98-0x9f*/
-  0xb084, 0xb085, 0xb086, 0xb087, 0xf0ab, 0xb088, 0xb089, 0xb08a, /*0xa0-0xa7*/
-  0xb08b, 0xb08c, 0xb08d, 0xb08e, 0xb08f, 0xb090, 0xc6a4, 0xb091, /*0xa8-0xaf*/
-  0xb092, 0xd6e5, 0xf1e4, 0xb093, 0xf1e5, 0xb094, 0xb095, 0xb096, /*0xb0-0xb7*/
-  0xb097, 0xb098, 0xb099, 0xb09a, 0xb09b, 0xb09c, 0xb09d, 0xc3f3, /*0xb8-0xbf*/
-  0xb09e, 0xb09f, 0xd3db, 0xb0a0, 0xb140, 0xd6d1, 0xc5e8, 0xb141, /*0xc0-0xc7*/
-  0xd3af, 0xb142, 0xd2e6, 0xb143, 0xb144, 0xeec1, 0xb0bb, 0xd5b5, /*0xc8-0xcf*/
-  0xd1ce, 0xbce0, 0xbad0, 0xb145, 0xbff8, 0xb146, 0xb8c7, 0xb5c1, /*0xd0-0xd7*/
-  0xc5cc, 0xb147, 0xb148, 0xcaa2, 0xb149, 0xb14a, 0xb14b, 0xc3cb, /*0xd8-0xdf*/
-  0xb14c, 0xb14d, 0xb14e, 0xb14f, 0xb150, 0xeec2, 0xb151, 0xb152, /*0xe0-0xe7*/
-  0xb153, 0xb154, 0xb155, 0xb156, 0xb157, 0xb158, 0xc4bf, 0xb6a2, /*0xe8-0xef*/
-  0xb159, 0xedec, 0xc3a4, 0xb15a, 0xd6b1, 0xb15b, 0xb15c, 0xb15d, /*0xf0-0xf7*/
-  0xcfe0, 0xedef, 0xb15e, 0xb15f, 0xc5ce, 0xb160, 0xb6dc, 0xb161, /*0xf8-0xff*/
-  /* 0x7700 */
-  0xb162, 0xcaa1, 0xb163, 0xb164, 0xeded, 0xb165, 0xb166, 0xedf0, /*0x00-0x07*/
-  0xedf1, 0xc3bc, 0xb167, 0xbfb4, 0xb168, 0xedee, 0xb169, 0xb16a, /*0x08-0x0f*/
-  0xb16b, 0xb16c, 0xb16d, 0xb16e, 0xb16f, 0xb170, 0xb171, 0xb172, /*0x10-0x17*/
-  0xb173, 0xedf4, 0xedf2, 0xb174, 0xb175, 0xb176, 0xb177, 0xd5e6, /*0x18-0x1f*/
-  0xc3df, 0xb178, 0xedf3, 0xb179, 0xb17a, 0xb17b, 0xedf6, 0xb17c, /*0x20-0x27*/
-  0xd5a3, 0xd1a3, 0xb17d, 0xb17e, 0xb180, 0xedf5, 0xb181, 0xc3d0, /*0x28-0x2f*/
-  0xb182, 0xb183, 0xb184, 0xb185, 0xb186, 0xedf7, 0xbff4, 0xbeec, /*0x30-0x37*/
-  0xedf8, 0xb187, 0xccf7, 0xb188, 0xd1db, 0xb189, 0xb18a, 0xb18b, /*0x38-0x3f*/
-  0xd7c5, 0xd5f6, 0xb18c, 0xedfc, 0xb18d, 0xb18e, 0xb18f, 0xedfb, /*0x40-0x47*/
-  0xb190, 0xb191, 0xb192, 0xb193, 0xb194, 0xb195, 0xb196, 0xb197, /*0x48-0x4f*/
-  0xedf9, 0xedfa, 0xb198, 0xb199, 0xb19a, 0xb19b, 0xb19c, 0xb19d, /*0x50-0x57*/
-  0xb19e, 0xb19f, 0xedfd, 0xbea6, 0xb1a0, 0xb240, 0xb241, 0xb242, /*0x58-0x5f*/
-  0xb243, 0xcbaf, 0xeea1, 0xb6bd, 0xb244, 0xeea2, 0xc4c0, 0xb245, /*0x60-0x67*/
-  0xedfe, 0xb246, 0xb247, 0xbdde, 0xb2c7, 0xb248, 0xb249, 0xb24a, /*0x68-0x6f*/
-  0xb24b, 0xb24c, 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251, 0xb252, /*0x70-0x77*/
-  0xb253, 0xb6c3, 0xb254, 0xb255, 0xb256, 0xeea5, 0xd8ba, 0xeea3, /*0x78-0x7f*/
-  0xeea6, 0xb257, 0xb258, 0xb259, 0xc3e9, 0xb3f2, 0xb25a, 0xb25b, /*0x80-0x87*/
-  0xb25c, 0xb25d, 0xb25e, 0xb25f, 0xeea7, 0xeea4, 0xcfb9, 0xb260, /*0x88-0x8f*/
-  0xb261, 0xeea8, 0xc2f7, 0xb262, 0xb263, 0xb264, 0xb265, 0xb266, /*0x90-0x97*/
-  0xb267, 0xb268, 0xb269, 0xb26a, 0xb26b, 0xb26c, 0xb26d, 0xeea9, /*0x98-0x9f*/
-  0xeeaa, 0xb26e, 0xdeab, 0xb26f, 0xb270, 0xc6b3, 0xb271, 0xc7c6, /*0xa0-0xa7*/
-  0xb272, 0xd6f5, 0xb5c9, 0xb273, 0xcbb2, 0xb274, 0xb275, 0xb276, /*0xa8-0xaf*/
-  0xeeab, 0xb277, 0xb278, 0xcdab, 0xb279, 0xeeac, 0xb27a, 0xb27b, /*0xb0-0xb7*/
-  0xb27c, 0xb27d, 0xb27e, 0xd5b0, 0xb280, 0xeead, 0xb281, 0xf6c4, /*0xb8-0xbf*/
-  0xb282, 0xb283, 0xb284, 0xb285, 0xb286, 0xb287, 0xb288, 0xb289, /*0xc0-0xc7*/
-  0xb28a, 0xb28b, 0xb28c, 0xb28d, 0xb28e, 0xdbc7, 0xb28f, 0xb290, /*0xc8-0xcf*/
-  0xb291, 0xb292, 0xb293, 0xb294, 0xb295, 0xb296, 0xb297, 0xb4a3, /*0xd0-0xd7*/
-  0xb298, 0xb299, 0xb29a, 0xc3ac, 0xf1e6, 0xb29b, 0xb29c, 0xb29d, /*0xd8-0xdf*/
-  0xb29e, 0xb29f, 0xcab8, 0xd2d3, 0xb2a0, 0xd6aa, 0xb340, 0xeff2, /*0xe0-0xe7*/
-  0xb341, 0xbed8, 0xb342, 0xbdc3, 0xeff3, 0xb6cc, 0xb0ab, 0xb343, /*0xe8-0xef*/
-  0xb344, 0xb345, 0xb346, 0xcaaf, 0xb347, 0xb348, 0xedb6, 0xb349, /*0xf0-0xf7*/
-  0xedb7, 0xb34a, 0xb34b, 0xb34c, 0xb34d, 0xcef9, 0xb7af, 0xbff3, /*0xf8-0xff*/
-  /* 0x7800 */
-  0xedb8, 0xc2eb, 0xc9b0, 0xb34e, 0xb34f, 0xb350, 0xb351, 0xb352, /*0x00-0x07*/
-  0xb353, 0xedb9, 0xb354, 0xb355, 0xc6f6, 0xbfb3, 0xb356, 0xb357, /*0x08-0x0f*/
-  0xb358, 0xedbc, 0xc5f8, 0xb359, 0xd1d0, 0xb35a, 0xd7a9, 0xedba, /*0x10-0x17*/
-  0xedbb, 0xb35b, 0xd1e2, 0xb35c, 0xedbf, 0xedc0, 0xb35d, 0xedc4, /*0x18-0x1f*/
-  0xb35e, 0xb35f, 0xb360, 0xedc8, 0xb361, 0xedc6, 0xedce, 0xd5e8, /*0x20-0x27*/
-  0xb362, 0xedc9, 0xb363, 0xb364, 0xedc7, 0xedbe, 0xb365, 0xb366, /*0x28-0x2f*/
-  0xc5e9, 0xb367, 0xb368, 0xb369, 0xc6c6, 0xb36a, 0xb36b, 0xc9e9, /*0x30-0x37*/
-  0xd4d2, 0xedc1, 0xedc2, 0xedc3, 0xedc5, 0xb36c, 0xc0f9, 0xb36d, /*0x38-0x3f*/
-  0xb4a1, 0xb36e, 0xb36f, 0xb370, 0xb371, 0xb9e8, 0xb372, 0xedd0, /*0x40-0x47*/
-  0xb373, 0xb374, 0xb375, 0xb376, 0xedd1, 0xb377, 0xedca, 0xb378, /*0x48-0x4f*/
-  0xedcf, 0xb379, 0xcef8, 0xb37a, 0xb37b, 0xcbb6, 0xedcc, 0xedcd, /*0x50-0x57*/
-  0xb37c, 0xb37d, 0xb37e, 0xb380, 0xb381, 0xcff5, 0xb382, 0xb383, /*0x58-0x5f*/
-  0xb384, 0xb385, 0xb386, 0xb387, 0xb388, 0xb389, 0xb38a, 0xb38b, /*0x60-0x67*/
-  0xb38c, 0xb38d, 0xedd2, 0xc1f2, 0xd3b2, 0xedcb, 0xc8b7, 0xb38e, /*0x68-0x6f*/
-  0xb38f, 0xb390, 0xb391, 0xb392, 0xb393, 0xb394, 0xb395, 0xbcef, /*0x70-0x77*/
-  0xb396, 0xb397, 0xb398, 0xb399, 0xc5f0, 0xb39a, 0xb39b, 0xb39c, /*0x78-0x7f*/
-  0xb39d, 0xb39e, 0xb39f, 0xb3a0, 0xb440, 0xb441, 0xb442, 0xedd6, /*0x80-0x87*/
-  0xb443, 0xb5ef, 0xb444, 0xb445, 0xc2b5, 0xb0ad, 0xcbe9, 0xb446, /*0x88-0x8f*/
-  0xb447, 0xb1ae, 0xb448, 0xedd4, 0xb449, 0xb44a, 0xb44b, 0xcdeb, /*0x90-0x97*/
-  0xb5e2, 0xb44c, 0xedd5, 0xedd3, 0xedd7, 0xb44d, 0xb44e, 0xb5fa, /*0x98-0x9f*/
-  0xb44f, 0xedd8, 0xb450, 0xedd9, 0xb451, 0xeddc, 0xb452, 0xb1cc, /*0xa0-0xa7*/
-  0xb453, 0xb454, 0xb455, 0xb456, 0xb457, 0xb458, 0xb459, 0xb45a, /*0xa8-0xaf*/
-  0xc5f6, 0xbcee, 0xedda, 0xccbc, 0xb2ea, 0xb45b, 0xb45c, 0xb45d, /*0xb0-0xb7*/
-  0xb45e, 0xeddb, 0xb45f, 0xb460, 0xb461, 0xb462, 0xc4eb, 0xb463, /*0xb8-0xbf*/
-  0xb464, 0xb4c5, 0xb465, 0xb466, 0xb467, 0xb0f5, 0xb468, 0xb469, /*0xc0-0xc7*/
-  0xb46a, 0xeddf, 0xc0da, 0xb4e8, 0xb46b, 0xb46c, 0xb46d, 0xb46e, /*0xc8-0xcf*/
-  0xc5cd, 0xb46f, 0xb470, 0xb471, 0xeddd, 0xbfc4, 0xb472, 0xb473, /*0xd0-0xd7*/
-  0xb474, 0xedde, 0xb475, 0xb476, 0xb477, 0xb478, 0xb479, 0xb47a, /*0xd8-0xdf*/
-  0xb47b, 0xb47c, 0xb47d, 0xb47e, 0xb480, 0xb481, 0xb482, 0xb483, /*0xe0-0xe7*/
-  0xc4a5, 0xb484, 0xb485, 0xb486, 0xede0, 0xb487, 0xb488, 0xb489, /*0xe8-0xef*/
-  0xb48a, 0xb48b, 0xede1, 0xb48c, 0xede3, 0xb48d, 0xb48e, 0xc1d7, /*0xf0-0xf7*/
-  0xb48f, 0xb490, 0xbbc7, 0xb491, 0xb492, 0xb493, 0xb494, 0xb495, /*0xf8-0xff*/
-  /* 0x7900 */
-  0xb496, 0xbdb8, 0xb497, 0xb498, 0xb499, 0xede2, 0xb49a, 0xb49b, /*0x00-0x07*/
-  0xb49c, 0xb49d, 0xb49e, 0xb49f, 0xb4a0, 0xb540, 0xb541, 0xb542, /*0x08-0x0f*/
-  0xb543, 0xb544, 0xb545, 0xede4, 0xb546, 0xb547, 0xb548, 0xb549, /*0x10-0x17*/
-  0xb54a, 0xb54b, 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xede6, 0xb550, /*0x18-0x1f*/
-  0xb551, 0xb552, 0xb553, 0xb554, 0xede5, 0xb555, 0xb556, 0xb557, /*0x20-0x27*/
-  0xb558, 0xb559, 0xb55a, 0xb55b, 0xb55c, 0xb55d, 0xb55e, 0xb55f, /*0x28-0x2f*/
-  0xb560, 0xb561, 0xb562, 0xb563, 0xede7, 0xb564, 0xb565, 0xb566, /*0x30-0x37*/
-  0xb567, 0xb568, 0xcabe, 0xecea, 0xc0f1, 0xb569, 0xc9e7, 0xb56a, /*0x38-0x3f*/
-  0xeceb, 0xc6ee, 0xb56b, 0xb56c, 0xb56d, 0xb56e, 0xecec, 0xb56f, /*0x40-0x47*/
-  0xc6ed, 0xeced, 0xb570, 0xb571, 0xb572, 0xb573, 0xb574, 0xb575, /*0x48-0x4f*/
-  0xb576, 0xb577, 0xb578, 0xecf0, 0xb579, 0xb57a, 0xd7e6, 0xecf3, /*0x50-0x57*/
-  0xb57b, 0xb57c, 0xecf1, 0xecee, 0xecef, 0xd7a3, 0xc9f1, 0xcbee, /*0x58-0x5f*/
-  0xecf4, 0xb57d, 0xecf2, 0xb57e, 0xb580, 0xcfe9, 0xb581, 0xecf6, /*0x60-0x67*/
-  0xc6b1, 0xb582, 0xb583, 0xb584, 0xb585, 0xbcc0, 0xb586, 0xecf5, /*0x68-0x6f*/
-  0xb587, 0xb588, 0xb589, 0xb58a, 0xb58b, 0xb58c, 0xb58d, 0xb5bb, /*0x70-0x77*/
-  0xbbf6, 0xb58e, 0xecf7, 0xb58f, 0xb590, 0xb591, 0xb592, 0xb593, /*0x78-0x7f*/
-  0xd9f7, 0xbdfb, 0xb594, 0xb595, 0xc2bb, 0xecf8, 0xb596, 0xb597, /*0x80-0x87*/
-  0xb598, 0xb599, 0xecf9, 0xb59a, 0xb59b, 0xb59c, 0xb59d, 0xb8a3, /*0x88-0x8f*/
-  0xb59e, 0xb59f, 0xb5a0, 0xb640, 0xb641, 0xb642, 0xb643, 0xb644, /*0x90-0x97*/
-  0xb645, 0xb646, 0xecfa, 0xb647, 0xb648, 0xb649, 0xb64a, 0xb64b, /*0x98-0x9f*/
-  0xb64c, 0xb64d, 0xb64e, 0xb64f, 0xb650, 0xb651, 0xb652, 0xecfb, /*0xa0-0xa7*/
-  0xb653, 0xb654, 0xb655, 0xb656, 0xb657, 0xb658, 0xb659, 0xb65a, /*0xa8-0xaf*/
-  0xb65b, 0xb65c, 0xb65d, 0xecfc, 0xb65e, 0xb65f, 0xb660, 0xb661, /*0xb0-0xb7*/
-  0xb662, 0xd3ed, 0xd8ae, 0xc0eb, 0xb663, 0xc7dd, 0xbacc, 0xb664, /*0xb8-0xbf*/
-  0xd0e3, 0xcbbd, 0xb665, 0xcdba, 0xb666, 0xb667, 0xb8d1, 0xb668, /*0xc0-0xc7*/
-  0xb669, 0xb1fc, 0xb66a, 0xc7ef, 0xb66b, 0xd6d6, 0xb66c, 0xb66d, /*0xc8-0xcf*/
-  0xb66e, 0xbfc6, 0xc3eb, 0xb66f, 0xb670, 0xeff5, 0xb671, 0xb672, /*0xd0-0xd7*/
-  0xc3d8, 0xb673, 0xb674, 0xb675, 0xb676, 0xb677, 0xb678, 0xd7e2, /*0xd8-0xdf*/
-  0xb679, 0xb67a, 0xb67b, 0xeff7, 0xb3d3, 0xb67c, 0xc7d8, 0xd1ed, /*0xe0-0xe7*/
-  0xb67d, 0xd6c8, 0xb67e, 0xeff8, 0xb680, 0xeff6, 0xb681, 0xbbfd, /*0xe8-0xef*/
-  0xb3c6, 0xb682, 0xb683, 0xb684, 0xb685, 0xb686, 0xb687, 0xb688, /*0xf0-0xf7*/
-  0xbdd5, 0xb689, 0xb68a, 0xd2c6, 0xb68b, 0xbbe0, 0xb68c, 0xb68d, /*0xf8-0xff*/
-  /* 0x7a00 */
-  0xcfa1, 0xb68e, 0xeffc, 0xeffb, 0xb68f, 0xb690, 0xeff9, 0xb691, /*0x00-0x07*/
-  0xb692, 0xb693, 0xb694, 0xb3cc, 0xb695, 0xc9d4, 0xcbb0, 0xb696, /*0x08-0x0f*/
-  0xb697, 0xb698, 0xb699, 0xb69a, 0xeffe, 0xb69b, 0xb69c, 0xb0de, /*0x10-0x17*/
-  0xb69d, 0xb69e, 0xd6c9, 0xb69f, 0xb6a0, 0xb740, 0xeffd, 0xb741, /*0x18-0x1f*/
-  0xb3ed, 0xb742, 0xb743, 0xf6d5, 0xb744, 0xb745, 0xb746, 0xb747, /*0x20-0x27*/
-  0xb748, 0xb749, 0xb74a, 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f, /*0x28-0x2f*/
-  0xb750, 0xb751, 0xb752, 0xcec8, 0xb753, 0xb754, 0xb755, 0xf0a2, /*0x30-0x37*/
-  0xb756, 0xf0a1, 0xb757, 0xb5be, 0xbcda, 0xbbfc, 0xb758, 0xb8e5, /*0x38-0x3f*/
-  0xb759, 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xc4c2, 0xb75f, /*0x40-0x47*/
-  0xb760, 0xb761, 0xb762, 0xb763, 0xb764, 0xb765, 0xb766, 0xb767, /*0x48-0x4f*/
-  0xb768, 0xf0a3, 0xb769, 0xb76a, 0xb76b, 0xb76c, 0xb76d, 0xcbeb, /*0x50-0x57*/
-  0xb76e, 0xb76f, 0xb770, 0xb771, 0xb772, 0xb773, 0xb774, 0xb775, /*0x58-0x5f*/
-  0xb776, 0xb777, 0xb778, 0xb779, 0xb77a, 0xb77b, 0xb77c, 0xb77d, /*0x60-0x67*/
-  0xb77e, 0xb780, 0xb781, 0xb782, 0xb783, 0xb784, 0xb785, 0xb786, /*0x68-0x6f*/
-  0xf0a6, 0xb787, 0xb788, 0xb789, 0xd1a8, 0xb78a, 0xbebf, 0xc7ee, /*0x70-0x77*/
-  0xf1b6, 0xf1b7, 0xbfd5, 0xb78b, 0xb78c, 0xb78d, 0xb78e, 0xb4a9, /*0x78-0x7f*/
-  0xf1b8, 0xcdbb, 0xb78f, 0xc7d4, 0xd5ad, 0xb790, 0xf1b9, 0xb791, /*0x80-0x87*/
-  0xf1ba, 0xb792, 0xb793, 0xb794, 0xb795, 0xc7cf, 0xb796, 0xb797, /*0x88-0x8f*/
-  0xb798, 0xd2a4, 0xd6cf, 0xb799, 0xb79a, 0xf1bb, 0xbdd1, 0xb4b0, /*0x90-0x97*/
-  0xbebd, 0xb79b, 0xb79c, 0xb79d, 0xb4dc, 0xced1, 0xb79e, 0xbfdf, /*0x98-0x9f*/
-  0xf1bd, 0xb79f, 0xb7a0, 0xb840, 0xb841, 0xbffa, 0xf1bc, 0xb842, /*0xa0-0xa7*/
-  0xf1bf, 0xb843, 0xb844, 0xb845, 0xf1be, 0xf1c0, 0xb846, 0xb847, /*0xa8-0xaf*/
-  0xb848, 0xb849, 0xb84a, 0xf1c1, 0xb84b, 0xb84c, 0xb84d, 0xb84e, /*0xb0-0xb7*/
-  0xb84f, 0xb850, 0xb851, 0xb852, 0xb853, 0xb854, 0xb855, 0xc1fe, /*0xb8-0xbf*/
-  0xb856, 0xb857, 0xb858, 0xb859, 0xb85a, 0xb85b, 0xb85c, 0xb85d, /*0xc0-0xc7*/
-  0xb85e, 0xb85f, 0xb860, 0xc1a2, 0xb861, 0xb862, 0xb863, 0xb864, /*0xc8-0xcf*/
-  0xb865, 0xb866, 0xb867, 0xb868, 0xb869, 0xb86a, 0xcafa, 0xb86b, /*0xd0-0xd7*/
-  0xb86c, 0xd5be, 0xb86d, 0xb86e, 0xb86f, 0xb870, 0xbeba, 0xbeb9, /*0xd8-0xdf*/
-  0xd5c2, 0xb871, 0xb872, 0xbfa2, 0xb873, 0xcdaf, 0xf1b5, 0xb874, /*0xe0-0xe7*/
-  0xb875, 0xb876, 0xb877, 0xb878, 0xb879, 0xbddf, 0xb87a, 0xb6cb, /*0xe8-0xef*/
-  0xb87b, 0xb87c, 0xb87d, 0xb87e, 0xb880, 0xb881, 0xb882, 0xb883, /*0xf0-0xf7*/
-  0xb884, 0xd6f1, 0xf3c3, 0xb885, 0xb886, 0xf3c4, 0xb887, 0xb8cd, /*0xf8-0xff*/
-  /* 0x7b00 */
-  0xb888, 0xb889, 0xb88a, 0xf3c6, 0xf3c7, 0xb88b, 0xb0ca, 0xb88c, /*0x00-0x07*/
-  0xf3c5, 0xb88d, 0xf3c9, 0xcbf1, 0xb88e, 0xb88f, 0xb890, 0xf3cb, /*0x08-0x0f*/
-  0xb891, 0xd0a6, 0xb892, 0xb893, 0xb1ca, 0xf3c8, 0xb894, 0xb895, /*0x10-0x17*/
-  0xb896, 0xf3cf, 0xb897, 0xb5d1, 0xb898, 0xb899, 0xf3d7, 0xb89a, /*0x18-0x1f*/
-  0xf3d2, 0xb89b, 0xb89c, 0xb89d, 0xf3d4, 0xf3d3, 0xb7fb, 0xb89e, /*0x20-0x27*/
-  0xb1bf, 0xb89f, 0xf3ce, 0xf3ca, 0xb5da, 0xb8a0, 0xf3d0, 0xb940, /*0x28-0x2f*/
-  0xb941, 0xf3d1, 0xb942, 0xf3d5, 0xb943, 0xb944, 0xb945, 0xb946, /*0x30-0x37*/
-  0xf3cd, 0xb947, 0xbce3, 0xb948, 0xc1fd, 0xb949, 0xf3d6, 0xb94a, /*0x38-0x3f*/
-  0xb94b, 0xb94c, 0xb94d, 0xb94e, 0xb94f, 0xf3da, 0xb950, 0xf3cc, /*0x40-0x47*/
-  0xb951, 0xb5c8, 0xb952, 0xbdee, 0xf3dc, 0xb953, 0xb954, 0xb7a4, /*0x48-0x4f*/
-  0xbff0, 0xd6fe, 0xcdb2, 0xb955, 0xb4f0, 0xb956, 0xb2df, 0xb957, /*0x50-0x57*/
-  0xf3d8, 0xb958, 0xf3d9, 0xc9b8, 0xb959, 0xf3dd, 0xb95a, 0xb95b, /*0x58-0x5f*/
-  0xf3de, 0xb95c, 0xf3e1, 0xb95d, 0xb95e, 0xb95f, 0xb960, 0xb961, /*0x60-0x67*/
-  0xb962, 0xb963, 0xb964, 0xb965, 0xb966, 0xb967, 0xf3df, 0xb968, /*0x68-0x6f*/
-  0xb969, 0xf3e3, 0xf3e2, 0xb96a, 0xb96b, 0xf3db, 0xb96c, 0xbfea, /*0x70-0x77*/
-  0xb96d, 0xb3ef, 0xb96e, 0xf3e0, 0xb96f, 0xb970, 0xc7a9, 0xb971, /*0x78-0x7f*/
-  0xbcf2, 0xb972, 0xb973, 0xb974, 0xb975, 0xf3eb, 0xb976, 0xb977, /*0x80-0x87*/
-  0xb978, 0xb979, 0xb97a, 0xb97b, 0xb97c, 0xb9bf, 0xb97d, 0xb97e, /*0x88-0x8f*/
-  0xf3e4, 0xb980, 0xb981, 0xb982, 0xb2ad, 0xbbfe, 0xb983, 0xcbe3, /*0x90-0x97*/
-  0xb984, 0xb985, 0xb986, 0xb987, 0xf3ed, 0xf3e9, 0xb988, 0xb989, /*0x98-0x9f*/
-  0xb98a, 0xb9dc, 0xf3ee, 0xb98b, 0xb98c, 0xb98d, 0xf3e5, 0xf3e6, /*0xa0-0xa7*/
-  0xf3ea, 0xc2e1, 0xf3ec, 0xf3ef, 0xf3e8, 0xbcfd, 0xb98e, 0xb98f, /*0xa8-0xaf*/
-  0xb990, 0xcfe4, 0xb991, 0xb992, 0xf3f0, 0xb993, 0xb994, 0xb995, /*0xb0-0xb7*/
-  0xf3e7, 0xb996, 0xb997, 0xb998, 0xb999, 0xb99a, 0xb99b, 0xb99c, /*0xb8-0xbf*/
-  0xb99d, 0xf3f2, 0xb99e, 0xb99f, 0xb9a0, 0xba40, 0xd7ad, 0xc6aa, /*0xc0-0xc7*/
-  0xba41, 0xba42, 0xba43, 0xba44, 0xf3f3, 0xba45, 0xba46, 0xba47, /*0xc8-0xcf*/
-  0xba48, 0xf3f1, 0xba49, 0xc2a8, 0xba4a, 0xba4b, 0xba4c, 0xba4d, /*0xd0-0xd7*/
-  0xba4e, 0xb8dd, 0xf3f5, 0xba4f, 0xba50, 0xf3f4, 0xba51, 0xba52, /*0xd8-0xdf*/
-  0xba53, 0xb4db, 0xba54, 0xba55, 0xba56, 0xf3f6, 0xf3f7, 0xba57, /*0xe0-0xe7*/
-  0xba58, 0xba59, 0xf3f8, 0xba5a, 0xba5b, 0xba5c, 0xc0ba, 0xba5d, /*0xe8-0xef*/
-  0xba5e, 0xc0e9, 0xba5f, 0xba60, 0xba61, 0xba62, 0xba63, 0xc5f1, /*0xf0-0xf7*/
-  0xba64, 0xba65, 0xba66, 0xba67, 0xf3fb, 0xba68, 0xf3fa, 0xba69, /*0xf8-0xff*/
-  /* 0x7c00 */
-  0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f, 0xba70, 0xb4d8, /*0x00-0x07*/
-  0xba71, 0xba72, 0xba73, 0xf3fe, 0xf3f9, 0xba74, 0xba75, 0xf3fc, /*0x08-0x0f*/
-  0xba76, 0xba77, 0xba78, 0xba79, 0xba7a, 0xba7b, 0xf3fd, 0xba7c, /*0x10-0x17*/
-  0xba7d, 0xba7e, 0xba80, 0xba81, 0xba82, 0xba83, 0xba84, 0xf4a1, /*0x18-0x1f*/
-  0xba85, 0xba86, 0xba87, 0xba88, 0xba89, 0xba8a, 0xf4a3, 0xbbc9, /*0x20-0x27*/
-  0xba8b, 0xba8c, 0xf4a2, 0xba8d, 0xba8e, 0xba8f, 0xba90, 0xba91, /*0x28-0x2f*/
-  0xba92, 0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, /*0x30-0x37*/
-  0xf4a4, 0xba9a, 0xba9b, 0xba9c, 0xba9d, 0xba9e, 0xba9f, 0xb2be, /*0x38-0x3f*/
-  0xf4a6, 0xf4a5, 0xbaa0, 0xbb40, 0xbb41, 0xbb42, 0xbb43, 0xbb44, /*0x40-0x47*/
-  0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49, 0xbcae, 0xbb4a, 0xbb4b, /*0x48-0x4f*/
-  0xbb4c, 0xbb4d, 0xbb4e, 0xbb4f, 0xbb50, 0xbb51, 0xbb52, 0xbb53, /*0x50-0x57*/
-  0xbb54, 0xbb55, 0xbb56, 0xbb57, 0xbb58, 0xbb59, 0xbb5a, 0xbb5b, /*0x58-0x5f*/
-  0xbb5c, 0xbb5d, 0xbb5e, 0xbb5f, 0xbb60, 0xbb61, 0xbb62, 0xbb63, /*0x60-0x67*/
-  0xbb64, 0xbb65, 0xbb66, 0xbb67, 0xbb68, 0xbb69, 0xbb6a, 0xbb6b, /*0x68-0x6f*/
-  0xbb6c, 0xbb6d, 0xbb6e, 0xc3d7, 0xd9e1, 0xbb6f, 0xbb70, 0xbb71, /*0x70-0x77*/
-  0xbb72, 0xbb73, 0xbb74, 0xc0e0, 0xf4cc, 0xd7d1, 0xbb75, 0xbb76, /*0x78-0x7f*/
-  0xbb77, 0xbb78, 0xbb79, 0xbb7a, 0xbb7b, 0xbb7c, 0xbb7d, 0xbb7e, /*0x80-0x87*/
-  0xbb80, 0xb7db, 0xbb81, 0xbb82, 0xbb83, 0xbb84, 0xbb85, 0xbb86, /*0x88-0x8f*/
-  0xbb87, 0xf4ce, 0xc1a3, 0xbb88, 0xbb89, 0xc6c9, 0xbb8a, 0xb4d6, /*0x90-0x97*/
-  0xd5b3, 0xbb8b, 0xbb8c, 0xbb8d, 0xf4d0, 0xf4cf, 0xf4d1, 0xcbda, /*0x98-0x9f*/
-  0xbb8e, 0xbb8f, 0xf4d2, 0xbb90, 0xd4c1, 0xd6e0, 0xbb91, 0xbb92, /*0xa0-0xa7*/
-  0xbb93, 0xbb94, 0xb7e0, 0xbb95, 0xbb96, 0xbb97, 0xc1b8, 0xbb98, /*0xa8-0xaf*/
-  0xbb99, 0xc1bb, 0xf4d3, 0xbeac, 0xbb9a, 0xbb9b, 0xbb9c, 0xbb9d, /*0xb0-0xb7*/
-  0xbb9e, 0xb4e2, 0xbb9f, 0xbba0, 0xf4d4, 0xf4d5, 0xbeab, 0xbc40, /*0xb8-0xbf*/
-  0xbc41, 0xf4d6, 0xbc42, 0xbc43, 0xbc44, 0xf4db, 0xbc45, 0xf4d7, /*0xc0-0xc7*/
-  0xf4da, 0xbc46, 0xbafd, 0xbc47, 0xf4d8, 0xf4d9, 0xbc48, 0xbc49, /*0xc8-0xcf*/
-  0xbc4a, 0xbc4b, 0xbc4c, 0xbc4d, 0xbc4e, 0xb8e2, 0xccc7, 0xf4dc, /*0xd0-0xd7*/
-  0xbc4f, 0xb2da, 0xbc50, 0xbc51, 0xc3d3, 0xbc52, 0xbc53, 0xd4e3, /*0xd8-0xdf*/
-  0xbfb7, 0xbc54, 0xbc55, 0xbc56, 0xbc57, 0xbc58, 0xbc59, 0xbc5a, /*0xe0-0xe7*/
-  0xf4dd, 0xbc5b, 0xbc5c, 0xbc5d, 0xbc5e, 0xbc5f, 0xbc60, 0xc5b4, /*0xe8-0xef*/
-  0xbc61, 0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67, 0xbc68, /*0xf0-0xf7*/
-  0xf4e9, 0xbc69, 0xbc6a, 0xcfb5, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e, /*0xf8-0xff*/
-  /* 0x7d00 */
-  0xbc6f, 0xbc70, 0xbc71, 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76, /*0x00-0x07*/
-  0xbc77, 0xbc78, 0xcec9, 0xbc79, 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d, /*0x08-0x0f*/
-  0xbc7e, 0xbc80, 0xbc81, 0xbc82, 0xbc83, 0xbc84, 0xbc85, 0xbc86, /*0x10-0x17*/
-  0xbc87, 0xbc88, 0xbc89, 0xbc8a, 0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, /*0x18-0x1f*/
-  0xcbd8, 0xbc8f, 0xcbf7, 0xbc90, 0xbc91, 0xbc92, 0xbc93, 0xbdf4, /*0x20-0x27*/
-  0xbc94, 0xbc95, 0xbc96, 0xd7cf, 0xbc97, 0xbc98, 0xbc99, 0xc0db, /*0x28-0x2f*/
-  0xbc9a, 0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f, 0xbca0, 0xbd40, /*0x30-0x37*/
-  0xbd41, 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0xbd48, /*0x38-0x3f*/
-  0xbd49, 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e, 0xbd4f, 0xbd50, /*0x40-0x47*/
-  0xbd51, 0xbd52, 0xbd53, 0xbd54, 0xbd55, 0xbd56, 0xbd57, 0xbd58, /*0x48-0x4f*/
-  0xbd59, 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d, 0xbd5e, 0xbd5f, 0xbd60, /*0x50-0x57*/
-  0xbd61, 0xbd62, 0xbd63, 0xbd64, 0xbd65, 0xbd66, 0xbd67, 0xbd68, /*0x58-0x5f*/
-  0xbd69, 0xbd6a, 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, /*0x60-0x67*/
-  0xbd71, 0xbd72, 0xbd73, 0xbd74, 0xbd75, 0xbd76, 0xd0f5, 0xbd77, /*0x68-0x6f*/
-  0xbd78, 0xbd79, 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xf4ea, /*0x70-0x77*/
-  0xbd80, 0xbd81, 0xbd82, 0xbd83, 0xbd84, 0xbd85, 0xbd86, 0xbd87, /*0x78-0x7f*/
-  0xbd88, 0xbd89, 0xbd8a, 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f, /*0x80-0x87*/
-  0xbd90, 0xbd91, 0xbd92, 0xbd93, 0xbd94, 0xbd95, 0xbd96, 0xbd97, /*0x88-0x8f*/
-  0xbd98, 0xbd99, 0xbd9a, 0xbd9b, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f, /*0x90-0x97*/
-  0xbda0, 0xbe40, 0xbe41, 0xbe42, 0xbe43, 0xbe44, 0xbe45, 0xbe46, /*0x98-0x9f*/
-  0xbe47, 0xbe48, 0xbe49, 0xbe4a, 0xbe4b, 0xbe4c, 0xf4eb, 0xbe4d, /*0xa0-0xa7*/
-  0xbe4e, 0xbe4f, 0xbe50, 0xbe51, 0xbe52, 0xbe53, 0xf4ec, 0xbe54, /*0xa8-0xaf*/
-  0xbe55, 0xbe56, 0xbe57, 0xbe58, 0xbe59, 0xbe5a, 0xbe5b, 0xbe5c, /*0xb0-0xb7*/
-  0xbe5d, 0xbe5e, 0xbe5f, 0xbe60, 0xbe61, 0xbe62, 0xbe63, 0xbe64, /*0xb8-0xbf*/
-  0xbe65, 0xbe66, 0xbe67, 0xbe68, 0xbe69, 0xbe6a, 0xbe6b, 0xbe6c, /*0xc0-0xc7*/
-  0xbe6d, 0xbe6e, 0xbe6f, 0xbe70, 0xbe71, 0xbe72, 0xbe73, 0xbe74, /*0xc8-0xcf*/
-  0xbe75, 0xbe76, 0xbe77, 0xbe78, 0xbe79, 0xbe7a, 0xbe7b, 0xbe7c, /*0xd0-0xd7*/
-  0xbe7d, 0xbe7e, 0xbe80, 0xbe81, 0xbe82, 0xbe83, 0xbe84, 0xbe85, /*0xd8-0xdf*/
-  0xbe86, 0xbe87, 0xbe88, 0xbe89, 0xbe8a, 0xbe8b, 0xbe8c, 0xbe8d, /*0xe0-0xe7*/
-  0xbe8e, 0xbe8f, 0xbe90, 0xbe91, 0xbe92, 0xbe93, 0xbe94, 0xbe95, /*0xe8-0xef*/
-  0xbe96, 0xbe97, 0xbe98, 0xbe99, 0xbe9a, 0xbe9b, 0xbe9c, 0xbe9d, /*0xf0-0xf7*/
-  0xbe9e, 0xbe9f, 0xbea0, 0xbf40, 0xbf41, 0xbf42, 0xbf43, 0xbf44, /*0xf8-0xff*/
-  /* 0x7e00 */
-  0xbf45, 0xbf46, 0xbf47, 0xbf48, 0xbf49, 0xbf4a, 0xbf4b, 0xbf4c, /*0x00-0x07*/
-  0xbf4d, 0xbf4e, 0xbf4f, 0xbf50, 0xbf51, 0xbf52, 0xbf53, 0xbf54, /*0x08-0x0f*/
-  0xbf55, 0xbf56, 0xbf57, 0xbf58, 0xbf59, 0xbf5a, 0xbf5b, 0xbf5c, /*0x10-0x17*/
-  0xbf5d, 0xbf5e, 0xbf5f, 0xbf60, 0xbf61, 0xbf62, 0xbf63, 0xbf64, /*0x18-0x1f*/
-  0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, 0xbf6a, 0xbf6b, 0xbf6c, /*0x20-0x27*/
-  0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71, 0xbf72, 0xbf73, 0xbf74, /*0x28-0x2f*/
-  0xbf75, 0xbf76, 0xbf77, 0xbf78, 0xbf79, 0xbf7a, 0xbf7b, 0xbf7c, /*0x30-0x37*/
-  0xbf7d, 0xbf7e, 0xbf80, 0xf7e3, 0xbf81, 0xbf82, 0xbf83, 0xbf84, /*0x38-0x3f*/
-  0xbf85, 0xb7b1, 0xbf86, 0xbf87, 0xbf88, 0xbf89, 0xbf8a, 0xf4ed, /*0x40-0x47*/
-  0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, 0xbf92, /*0x48-0x4f*/
-  0xbf93, 0xbf94, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99, 0xbf9a, /*0x50-0x57*/
-  0xbf9b, 0xbf9c, 0xbf9d, 0xbf9e, 0xbf9f, 0xbfa0, 0xc040, 0xc041, /*0x58-0x5f*/
-  0xc042, 0xc043, 0xc044, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049, /*0x60-0x67*/
-  0xc04a, 0xc04b, 0xc04c, 0xc04d, 0xc04e, 0xc04f, 0xc050, 0xc051, /*0x68-0x6f*/
-  0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057, 0xc058, 0xc059, /*0x70-0x77*/
-  0xc05a, 0xc05b, 0xc05c, 0xc05d, 0xc05e, 0xc05f, 0xc060, 0xc061, /*0x78-0x7f*/
-  0xc062, 0xc063, 0xd7eb, 0xc064, 0xc065, 0xc066, 0xc067, 0xc068, /*0x80-0x87*/
-  0xc069, 0xc06a, 0xc06b, 0xc06c, 0xc06d, 0xc06e, 0xc06f, 0xc070, /*0x88-0x8f*/
-  0xc071, 0xc072, 0xc073, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, /*0x90-0x97*/
-  0xc079, 0xc07a, 0xc07b, 0xf4ee, 0xc07c, 0xc07d, 0xc07e, 0xe6f9, /*0x98-0x9f*/
-  0xbec0, 0xe6fa, 0xbaec, 0xe6fb, 0xcfcb, 0xe6fc, 0xd4bc, 0xbcb6, /*0xa0-0xa7*/
-  0xe6fd, 0xe6fe, 0xbccd, 0xc8d2, 0xceb3, 0xe7a1, 0xc080, 0xb4bf, /*0xa8-0xaf*/
-  0xe7a2, 0xc9b4, 0xb8d9, 0xc4c9, 0xc081, 0xd7dd, 0xc2da, 0xb7d7, /*0xb0-0xb7*/
-  0xd6bd, 0xcec6, 0xb7c4, 0xc082, 0xc083, 0xc5a6, 0xe7a3, 0xcfdf, /*0xb8-0xbf*/
-  0xe7a4, 0xe7a5, 0xe7a6, 0xc1b7, 0xd7e9, 0xc9f0, 0xcfb8, 0xd6af, /*0xc0-0xc7*/
-  0xd6d5, 0xe7a7, 0xb0ed, 0xe7a8, 0xe7a9, 0xc9dc, 0xd2ef, 0xbead, /*0xc8-0xcf*/
-  0xe7aa, 0xb0f3, 0xc8de, 0xbde1, 0xe7ab, 0xc8c6, 0xc084, 0xe7ac, /*0xd0-0xd7*/
-  0xbbe6, 0xb8f8, 0xd1a4, 0xe7ad, 0xc2e7, 0xbef8, 0xbdca, 0xcdb3, /*0xd8-0xdf*/
-  0xe7ae, 0xe7af, 0xbeee, 0xd0e5, 0xc085, 0xcbe7, 0xccd0, 0xbccc, /*0xe0-0xe7*/
-  0xe7b0, 0xbca8, 0xd0f7, 0xe7b1, 0xc086, 0xd0f8, 0xe7b2, 0xe7b3, /*0xe8-0xef*/
-  0xb4c2, 0xe7b4, 0xe7b5, 0xc9fe, 0xceac, 0xc3e0, 0xe7b7, 0xb1c1, /*0xf0-0xf7*/
-  0xb3f1, 0xc087, 0xe7b8, 0xe7b9, 0xd7db, 0xd5c0, 0xe7ba, 0xc2cc, /*0xf8-0xff*/
-  /* 0x7f00 */
-  0xd7ba, 0xe7bb, 0xe7bc, 0xe7bd, 0xbcea, 0xc3e5, 0xc0c2, 0xe7be, /*0x00-0x07*/
-  0xe7bf, 0xbca9, 0xc088, 0xe7c0, 0xe7c1, 0xe7b6, 0xb6d0, 0xe7c2, /*0x08-0x0f*/
-  0xc089, 0xe7c3, 0xe7c4, 0xbbba, 0xb5de, 0xc2c6, 0xb1e0, 0xe7c5, /*0x10-0x17*/
-  0xd4b5, 0xe7c6, 0xb8bf, 0xe7c8, 0xe7c7, 0xb7ec, 0xc08a, 0xe7c9, /*0x18-0x1f*/
-  0xb2f8, 0xe7ca, 0xe7cb, 0xe7cc, 0xe7cd, 0xe7ce, 0xe7cf, 0xe7d0, /*0x20-0x27*/
-  0xd3a7, 0xcbf5, 0xe7d1, 0xe7d2, 0xe7d3, 0xe7d4, 0xc9c9, 0xe7d5, /*0x28-0x2f*/
-  0xe7d6, 0xe7d7, 0xe7d8, 0xe7d9, 0xbdc9, 0xe7da, 0xf3be, 0xc08b, /*0x30-0x37*/
-  0xb8d7, 0xc08c, 0xc8b1, 0xc08d, 0xc08e, 0xc08f, 0xc090, 0xc091, /*0x38-0x3f*/
-  0xc092, 0xc093, 0xf3bf, 0xc094, 0xf3c0, 0xf3c1, 0xc095, 0xc096, /*0x40-0x47*/
-  0xc097, 0xc098, 0xc099, 0xc09a, 0xc09b, 0xc09c, 0xc09d, 0xc09e, /*0x48-0x4f*/
-  0xb9de, 0xcdf8, 0xc09f, 0xc0a0, 0xd8e8, 0xbab1, 0xc140, 0xc2de, /*0x50-0x57*/
-  0xeeb7, 0xc141, 0xb7a3, 0xc142, 0xc143, 0xc144, 0xc145, 0xeeb9, /*0x58-0x5f*/
-  0xc146, 0xeeb8, 0xb0d5, 0xc147, 0xc148, 0xc149, 0xc14a, 0xc14b, /*0x60-0x67*/
-  0xeebb, 0xd5d6, 0xd7ef, 0xc14c, 0xc14d, 0xc14e, 0xd6c3, 0xc14f, /*0x68-0x6f*/
-  0xc150, 0xeebd, 0xcaf0, 0xc151, 0xeebc, 0xc152, 0xc153, 0xc154, /*0x70-0x77*/
-  0xc155, 0xeebe, 0xc156, 0xc157, 0xc158, 0xc159, 0xeec0, 0xc15a, /*0x78-0x7f*/
-  0xc15b, 0xeebf, 0xc15c, 0xc15d, 0xc15e, 0xc15f, 0xc160, 0xc161, /*0x80-0x87*/
-  0xc162, 0xc163, 0xd1f2, 0xc164, 0xc7bc, 0xc165, 0xc3c0, 0xc166, /*0x88-0x8f*/
-  0xc167, 0xc168, 0xc169, 0xc16a, 0xb8e1, 0xc16b, 0xc16c, 0xc16d, /*0x90-0x97*/
-  0xc16e, 0xc16f, 0xc1e7, 0xc170, 0xc171, 0xf4c6, 0xd0df, 0xf4c7, /*0x98-0x9f*/
-  0xc172, 0xcfdb, 0xc173, 0xc174, 0xc8ba, 0xc175, 0xc176, 0xf4c8, /*0xa0-0xa7*/
-  0xc177, 0xc178, 0xc179, 0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xf4c9, /*0xa8-0xaf*/
-  0xf4ca, 0xc17e, 0xf4cb, 0xc180, 0xc181, 0xc182, 0xc183, 0xc184, /*0xb0-0xb7*/
-  0xd9fa, 0xb8fe, 0xc185, 0xc186, 0xe5f1, 0xd3f0, 0xc187, 0xf4e0, /*0xb8-0xbf*/
-  0xc188, 0xcecc, 0xc189, 0xc18a, 0xc18b, 0xb3e1, 0xc18c, 0xc18d, /*0xc0-0xc7*/
-  0xc18e, 0xc18f, 0xf1b4, 0xc190, 0xd2ee, 0xc191, 0xf4e1, 0xc192, /*0xc8-0xcf*/
-  0xc193, 0xc194, 0xc195, 0xc196, 0xcfe8, 0xf4e2, 0xc197, 0xc198, /*0xd0-0xd7*/
-  0xc7cc, 0xc199, 0xc19a, 0xc19b, 0xc19c, 0xc19d, 0xc19e, 0xb5d4, /*0xd8-0xdf*/
-  0xb4e4, 0xf4e4, 0xc19f, 0xc1a0, 0xc240, 0xf4e3, 0xf4e5, 0xc241, /*0xe0-0xe7*/
-  0xc242, 0xf4e6, 0xc243, 0xc244, 0xc245, 0xc246, 0xf4e7, 0xc247, /*0xe8-0xef*/
-  0xbab2, 0xb0bf, 0xc248, 0xf4e8, 0xc249, 0xc24a, 0xc24b, 0xc24c, /*0xf0-0xf7*/
-  0xc24d, 0xc24e, 0xc24f, 0xb7ad, 0xd2ed, 0xc250, 0xc251, 0xc252, /*0xf8-0xff*/
-  /* 0x8000 */
-  0xd2ab, 0xc0cf, 0xc253, 0xbfbc, 0xeba3, 0xd5df, 0xeac8, 0xc254, /*0x00-0x07*/
-  0xc255, 0xc256, 0xc257, 0xf1f3, 0xb6f8, 0xcba3, 0xc258, 0xc259, /*0x08-0x0f*/
-  0xc4cd, 0xc25a, 0xf1e7, 0xc25b, 0xf1e8, 0xb8fb, 0xf1e9, 0xbac4, /*0x10-0x17*/
-  0xd4c5, 0xb0d2, 0xc25c, 0xc25d, 0xf1ea, 0xc25e, 0xc25f, 0xc260, /*0x18-0x1f*/
-  0xf1eb, 0xc261, 0xf1ec, 0xc262, 0xc263, 0xf1ed, 0xf1ee, 0xf1ef, /*0x20-0x27*/
-  0xf1f1, 0xf1f0, 0xc5d5, 0xc264, 0xc265, 0xc266, 0xc267, 0xc268, /*0x28-0x2f*/
-  0xc269, 0xf1f2, 0xc26a, 0xb6fa, 0xc26b, 0xf1f4, 0xd2ae, 0xdec7, /*0x30-0x37*/
-  0xcbca, 0xc26c, 0xc26d, 0xb3dc, 0xc26e, 0xb5a2, 0xc26f, 0xb9a2, /*0x38-0x3f*/
-  0xc270, 0xc271, 0xc4f4, 0xf1f5, 0xc272, 0xc273, 0xf1f6, 0xc274, /*0x40-0x47*/
-  0xc275, 0xc276, 0xc1c4, 0xc1fb, 0xd6b0, 0xf1f7, 0xc277, 0xc278, /*0x48-0x4f*/
-  0xc279, 0xc27a, 0xf1f8, 0xc27b, 0xc1aa, 0xc27c, 0xc27d, 0xc27e, /*0x50-0x57*/
-  0xc6b8, 0xc280, 0xbedb, 0xc281, 0xc282, 0xc283, 0xc284, 0xc285, /*0x58-0x5f*/
-  0xc286, 0xc287, 0xc288, 0xc289, 0xc28a, 0xc28b, 0xc28c, 0xc28d, /*0x60-0x67*/
-  0xc28e, 0xf1f9, 0xb4cf, 0xc28f, 0xc290, 0xc291, 0xc292, 0xc293, /*0x68-0x6f*/
-  0xc294, 0xf1fa, 0xc295, 0xc296, 0xc297, 0xc298, 0xc299, 0xc29a, /*0x70-0x77*/
-  0xc29b, 0xc29c, 0xc29d, 0xc29e, 0xc29f, 0xc2a0, 0xc340, 0xedb2, /*0x78-0x7f*/
-  0xedb1, 0xc341, 0xc342, 0xcbe0, 0xd2de, 0xc343, 0xcbc1, 0xd5d8, /*0x80-0x87*/
-  0xc344, 0xc8e2, 0xc345, 0xc0df, 0xbca1, 0xc346, 0xc347, 0xc348, /*0x88-0x8f*/
-  0xc349, 0xc34a, 0xc34b, 0xebc1, 0xc34c, 0xc34d, 0xd0a4, 0xc34e, /*0x90-0x97*/
-  0xd6e2, 0xc34f, 0xb6c7, 0xb8d8, 0xebc0, 0xb8ce, 0xc350, 0xebbf, /*0x98-0x9f*/
-  0xb3a6, 0xb9c9, 0xd6ab, 0xc351, 0xb7f4, 0xb7ca, 0xc352, 0xc353, /*0xa0-0xa7*/
-  0xc354, 0xbce7, 0xb7be, 0xebc6, 0xc355, 0xebc7, 0xb0b9, 0xbfcf, /*0xa8-0xaf*/
-  0xc356, 0xebc5, 0xd3fd, 0xc357, 0xebc8, 0xc358, 0xc359, 0xebc9, /*0xb0-0xb7*/
-  0xc35a, 0xc35b, 0xb7ce, 0xc35c, 0xebc2, 0xebc4, 0xc9f6, 0xd6d7, /*0xb8-0xbf*/
-  0xd5cd, 0xd0b2, 0xebcf, 0xceb8, 0xebd0, 0xc35d, 0xb5a8, 0xc35e, /*0xc0-0xc7*/
-  0xc35f, 0xc360, 0xc361, 0xc362, 0xb1b3, 0xebd2, 0xcca5, 0xc363, /*0xc8-0xcf*/
-  0xc364, 0xc365, 0xc366, 0xc367, 0xc368, 0xc369, 0xc5d6, 0xebd3, /*0xd0-0xd7*/
-  0xc36a, 0xebd1, 0xc5df, 0xebce, 0xcaa4, 0xebd5, 0xb0fb, 0xc36b, /*0xd8-0xdf*/
-  0xc36c, 0xbafa, 0xc36d, 0xc36e, 0xd8b7, 0xf1e3, 0xc36f, 0xebca, /*0xe0-0xe7*/
-  0xebcb, 0xebcc, 0xebcd, 0xebd6, 0xe6c0, 0xebd9, 0xc370, 0xbfe8, /*0xe8-0xef*/
-  0xd2c8, 0xebd7, 0xebdc, 0xb8ec, 0xebd8, 0xc371, 0xbdba, 0xc372, /*0xf0-0xf7*/
-  0xd0d8, 0xc373, 0xb0b7, 0xc374, 0xebdd, 0xc4dc, 0xc375, 0xc376, /*0xf8-0xff*/
-  /* 0x8100 */
-  0xc377, 0xc378, 0xd6ac, 0xc379, 0xc37a, 0xc37b, 0xb4e0, 0xc37c, /*0x00-0x07*/
-  0xc37d, 0xc2f6, 0xbcb9, 0xc37e, 0xc380, 0xebda, 0xebdb, 0xd4e0, /*0x08-0x0f*/
-  0xc6ea, 0xc4d4, 0xebdf, 0xc5a7, 0xd9f5, 0xc381, 0xb2b1, 0xc382, /*0x10-0x17*/
-  0xebe4, 0xc383, 0xbdc5, 0xc384, 0xc385, 0xc386, 0xebe2, 0xc387, /*0x18-0x1f*/
-  0xc388, 0xc389, 0xc38a, 0xc38b, 0xc38c, 0xc38d, 0xc38e, 0xc38f, /*0x20-0x27*/
-  0xc390, 0xc391, 0xc392, 0xc393, 0xebe3, 0xc394, 0xc395, 0xb8ac, /*0x28-0x2f*/
-  0xc396, 0xcdd1, 0xebe5, 0xc397, 0xc398, 0xc399, 0xebe1, 0xc39a, /*0x30-0x37*/
-  0xc1b3, 0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f, 0xc6a2, 0xc3a0, /*0x38-0x3f*/
-  0xc440, 0xc441, 0xc442, 0xc443, 0xc444, 0xc445, 0xccf3, 0xc446, /*0x40-0x47*/
-  0xebe6, 0xc447, 0xc0b0, 0xd2b8, 0xebe7, 0xc448, 0xc449, 0xc44a, /*0x48-0x4f*/
-  0xb8af, 0xb8ad, 0xc44b, 0xebe8, 0xc7bb, 0xcdf3, 0xc44c, 0xc44d, /*0x50-0x57*/
-  0xc44e, 0xebea, 0xebeb, 0xc44f, 0xc450, 0xc451, 0xc452, 0xc453, /*0x58-0x5f*/
-  0xebed, 0xc454, 0xc455, 0xc456, 0xc457, 0xd0c8, 0xc458, 0xebf2, /*0x60-0x67*/
-  0xc459, 0xebee, 0xc45a, 0xc45b, 0xc45c, 0xebf1, 0xc8f9, 0xc45d, /*0x68-0x6f*/
-  0xd1fc, 0xebec, 0xc45e, 0xc45f, 0xebe9, 0xc460, 0xc461, 0xc462, /*0x70-0x77*/
-  0xc463, 0xb8b9, 0xcfd9, 0xc4e5, 0xebef, 0xebf0, 0xccda, 0xcdc8, /*0x78-0x7f*/
-  0xb0f2, 0xc464, 0xebf6, 0xc465, 0xc466, 0xc467, 0xc468, 0xc469, /*0x80-0x87*/
-  0xebf5, 0xc46a, 0xb2b2, 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xb8e0, /*0x88-0x8f*/
-  0xc46f, 0xebf7, 0xc470, 0xc471, 0xc472, 0xc473, 0xc474, 0xc475, /*0x90-0x97*/
-  0xb1ec, 0xc476, 0xc477, 0xccc5, 0xc4a4, 0xcfa5, 0xc478, 0xc479, /*0x98-0x9f*/
-  0xc47a, 0xc47b, 0xc47c, 0xebf9, 0xc47d, 0xc47e, 0xeca2, 0xc480, /*0xa0-0xa7*/
-  0xc5f2, 0xc481, 0xebfa, 0xc482, 0xc483, 0xc484, 0xc485, 0xc486, /*0xa8-0xaf*/
-  0xc487, 0xc488, 0xc489, 0xc9c5, 0xc48a, 0xc48b, 0xc48c, 0xc48d, /*0xb0-0xb7*/
-  0xc48e, 0xc48f, 0xe2df, 0xebfe, 0xc490, 0xc491, 0xc492, 0xc493, /*0xb8-0xbf*/
-  0xcdce, 0xeca1, 0xb1db, 0xd3b7, 0xc494, 0xc495, 0xd2dc, 0xc496, /*0xc0-0xc7*/
-  0xc497, 0xc498, 0xebfd, 0xc499, 0xebfb, 0xc49a, 0xc49b, 0xc49c, /*0xc8-0xcf*/
-  0xc49d, 0xc49e, 0xc49f, 0xc4a0, 0xc540, 0xc541, 0xc542, 0xc543, /*0xd0-0xd7*/
-  0xc544, 0xc545, 0xc546, 0xc547, 0xc548, 0xc549, 0xc54a, 0xc54b, /*0xd8-0xdf*/
-  0xc54c, 0xc54d, 0xc54e, 0xb3bc, 0xc54f, 0xc550, 0xc551, 0xeab0, /*0xe0-0xe7*/
-  0xc552, 0xc553, 0xd7d4, 0xc554, 0xf4ab, 0xb3f4, 0xc555, 0xc556, /*0xe8-0xef*/
-  0xc557, 0xc558, 0xc559, 0xd6c1, 0xd6c2, 0xc55a, 0xc55b, 0xc55c, /*0xf0-0xf7*/
-  0xc55d, 0xc55e, 0xc55f, 0xd5e9, 0xbeca, 0xc560, 0xf4a7, 0xc561, /*0xf8-0xff*/
-  /* 0x8200 */
-  0xd2a8, 0xf4a8, 0xf4a9, 0xc562, 0xf4aa, 0xbecb, 0xd3df, 0xc563, /*0x00-0x07*/
-  0xc564, 0xc565, 0xc566, 0xc567, 0xc9e0, 0xc9e1, 0xc568, 0xc569, /*0x08-0x0f*/
-  0xf3c2, 0xc56a, 0xcae6, 0xc56b, 0xccf2, 0xc56c, 0xc56d, 0xc56e, /*0x10-0x17*/
-  0xc56f, 0xc570, 0xc571, 0xe2b6, 0xcbb4, 0xc572, 0xcee8, 0xd6db, /*0x18-0x1f*/
-  0xc573, 0xf4ad, 0xf4ae, 0xf4af, 0xc574, 0xc575, 0xc576, 0xc577, /*0x20-0x27*/
-  0xf4b2, 0xc578, 0xbabd, 0xf4b3, 0xb0e3, 0xf4b0, 0xc579, 0xf4b1, /*0x28-0x2f*/
-  0xbda2, 0xb2d5, 0xc57a, 0xf4b6, 0xf4b7, 0xb6e6, 0xb2b0, 0xcfcf, /*0x30-0x37*/
-  0xf4b4, 0xb4ac, 0xc57b, 0xf4b5, 0xc57c, 0xc57d, 0xf4b8, 0xc57e, /*0x38-0x3f*/
-  0xc580, 0xc581, 0xc582, 0xc583, 0xf4b9, 0xc584, 0xc585, 0xcda7, /*0x40-0x47*/
-  0xc586, 0xf4ba, 0xc587, 0xf4bb, 0xc588, 0xc589, 0xc58a, 0xf4bc, /*0x48-0x4f*/
-  0xc58b, 0xc58c, 0xc58d, 0xc58e, 0xc58f, 0xc590, 0xc591, 0xc592, /*0x50-0x57*/
-  0xcbd2, 0xc593, 0xf4bd, 0xc594, 0xc595, 0xc596, 0xc597, 0xf4be, /*0x58-0x5f*/
-  0xc598, 0xc599, 0xc59a, 0xc59b, 0xc59c, 0xc59d, 0xc59e, 0xc59f, /*0x60-0x67*/
-  0xf4bf, 0xc5a0, 0xc640, 0xc641, 0xc642, 0xc643, 0xf4de, 0xc1bc, /*0x68-0x6f*/
-  0xbce8, 0xc644, 0xc9ab, 0xd1de, 0xe5f5, 0xc645, 0xc646, 0xc647, /*0x70-0x77*/
-  0xc648, 0xdcb3, 0xd2d5, 0xc649, 0xc64a, 0xdcb4, 0xb0ac, 0xdcb5, /*0x78-0x7f*/
-  0xc64b, 0xc64c, 0xbdda, 0xc64d, 0xdcb9, 0xc64e, 0xc64f, 0xc650, /*0x80-0x87*/
-  0xd8c2, 0xc651, 0xdcb7, 0xd3f3, 0xc652, 0xc9d6, 0xdcba, 0xdcb6, /*0x88-0x8f*/
-  0xc653, 0xdcbb, 0xc3a2, 0xc654, 0xc655, 0xc656, 0xc657, 0xdcbc, /*0x90-0x97*/
-  0xdcc5, 0xdcbd, 0xc658, 0xc659, 0xcedf, 0xd6a5, 0xc65a, 0xdccf, /*0x98-0x9f*/
-  0xc65b, 0xdccd, 0xc65c, 0xc65d, 0xdcd2, 0xbde6, 0xc2ab, 0xc65e, /*0xa0-0xa7*/
-  0xdcb8, 0xdccb, 0xdcce, 0xdcbe, 0xb7d2, 0xb0c5, 0xdcc7, 0xd0be, /*0xa8-0xaf*/
-  0xdcc1, 0xbba8, 0xc65f, 0xb7bc, 0xdccc, 0xc660, 0xc661, 0xdcc6, /*0xb0-0xb7*/
-  0xdcbf, 0xc7db, 0xc662, 0xc663, 0xc664, 0xd1bf, 0xdcc0, 0xc665, /*0xb8-0xbf*/
-  0xc666, 0xdcca, 0xc667, 0xc668, 0xdcd0, 0xc669, 0xc66a, 0xcead, /*0xc0-0xc7*/
-  0xdcc2, 0xc66b, 0xdcc3, 0xdcc8, 0xdcc9, 0xb2d4, 0xdcd1, 0xcbd5, /*0xc8-0xcf*/
-  0xc66c, 0xd4b7, 0xdcdb, 0xdcdf, 0xcca6, 0xdce6, 0xc66d, 0xc3e7, /*0xd0-0xd7*/
-  0xdcdc, 0xc66e, 0xc66f, 0xbfc1, 0xdcd9, 0xc670, 0xb0fa, 0xb9b6, /*0xd8-0xdf*/
-  0xdce5, 0xdcd3, 0xc671, 0xdcc4, 0xdcd6, 0xc8f4, 0xbfe0, 0xc672, /*0xe0-0xe7*/
-  0xc673, 0xc674, 0xc675, 0xc9bb, 0xc676, 0xc677, 0xc678, 0xb1bd, /*0xe8-0xef*/
-  0xc679, 0xd3a2, 0xc67a, 0xc67b, 0xdcda, 0xc67c, 0xc67d, 0xdcd5, /*0xf0-0xf7*/
-  0xc67e, 0xc6bb, 0xc680, 0xdcde, 0xc681, 0xc682, 0xc683, 0xc684, /*0xf8-0xff*/
-  /* 0x8300 */
-  0xc685, 0xd7c2, 0xc3af, 0xb7b6, 0xc7d1, 0xc3a9, 0xdce2, 0xdcd8, /*0x00-0x07*/
-  0xdceb, 0xdcd4, 0xc686, 0xc687, 0xdcdd, 0xc688, 0xbea5, 0xdcd7, /*0x08-0x0f*/
-  0xc689, 0xdce0, 0xc68a, 0xc68b, 0xdce3, 0xdce4, 0xc68c, 0xdcf8, /*0x10-0x17*/
-  0xc68d, 0xc68e, 0xdce1, 0xdda2, 0xdce7, 0xc68f, 0xc690, 0xc691, /*0x18-0x1f*/
-  0xc692, 0xc693, 0xc694, 0xc695, 0xc696, 0xc697, 0xc698, 0xbceb, /*0x20-0x27*/
-  0xb4c4, 0xc699, 0xc69a, 0xc3a3, 0xb2e7, 0xdcfa, 0xc69b, 0xdcf2, /*0x28-0x2f*/
-  0xc69c, 0xdcef, 0xc69d, 0xdcfc, 0xdcee, 0xd2f0, 0xb2e8, 0xc69e, /*0x30-0x37*/
-  0xc8d7, 0xc8e3, 0xdcfb, 0xc69f, 0xdced, 0xc6a0, 0xc740, 0xc741, /*0x38-0x3f*/
-  0xdcf7, 0xc742, 0xc743, 0xdcf5, 0xc744, 0xc745, 0xbea3, 0xdcf4, /*0x40-0x47*/
-  0xc746, 0xb2dd, 0xc747, 0xc748, 0xc749, 0xc74a, 0xc74b, 0xdcf3, /*0x48-0x4f*/
-  0xbcf6, 0xdce8, 0xbbc4, 0xc74c, 0xc0f3, 0xc74d, 0xc74e, 0xc74f, /*0x50-0x57*/
-  0xc750, 0xc751, 0xbcd4, 0xdce9, 0xdcea, 0xc752, 0xdcf1, 0xdcf6, /*0x58-0x5f*/
-  0xdcf9, 0xb5b4, 0xc753, 0xc8d9, 0xbbe7, 0xdcfe, 0xdcfd, 0xd3ab, /*0x60-0x67*/
-  0xdda1, 0xdda3, 0xdda5, 0xd2f1, 0xdda4, 0xdda6, 0xdda7, 0xd2a9, /*0x68-0x6f*/
-  0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a, 0xbac9, /*0x70-0x77*/
-  0xdda9, 0xc75b, 0xc75c, 0xddb6, 0xddb1, 0xddb4, 0xc75d, 0xc75e, /*0x78-0x7f*/
-  0xc75f, 0xc760, 0xc761, 0xc762, 0xc763, 0xddb0, 0xc6ce, 0xc764, /*0x80-0x87*/
-  0xc765, 0xc0f2, 0xc766, 0xc767, 0xc768, 0xc769, 0xc9af, 0xc76a, /*0x88-0x8f*/
-  0xc76b, 0xc76c, 0xdcec, 0xddae, 0xc76d, 0xc76e, 0xc76f, 0xc770, /*0x90-0x97*/
-  0xddb7, 0xc771, 0xc772, 0xdcf0, 0xddaf, 0xc773, 0xddb8, 0xc774, /*0x98-0x9f*/
-  0xddac, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a, 0xc77b, /*0xa0-0xa7*/
-  0xddb9, 0xddb3, 0xddad, 0xc4aa, 0xc77c, 0xc77d, 0xc77e, 0xc780, /*0xa8-0xaf*/
-  0xdda8, 0xc0b3, 0xc1ab, 0xddaa, 0xddab, 0xc781, 0xddb2, 0xbbf1, /*0xb0-0xb7*/
-  0xddb5, 0xd3a8, 0xddba, 0xc782, 0xddbb, 0xc3a7, 0xc783, 0xc784, /*0xb8-0xbf*/
-  0xddd2, 0xddbc, 0xc785, 0xc786, 0xc787, 0xddd1, 0xc788, 0xb9bd, /*0xc0-0xc7*/
-  0xc789, 0xc78a, 0xbed5, 0xc78b, 0xbefa, 0xc78c, 0xc78d, 0xbaca, /*0xc8-0xcf*/
-  0xc78e, 0xc78f, 0xc790, 0xc791, 0xddca, 0xc792, 0xddc5, 0xc793, /*0xd0-0xd7*/
-  0xddbf, 0xc794, 0xc795, 0xc796, 0xb2cb, 0xddc3, 0xc797, 0xddcb, /*0xd8-0xdf*/
-  0xb2a4, 0xddd5, 0xc798, 0xc799, 0xc79a, 0xddbe, 0xc79b, 0xc79c, /*0xe0-0xe7*/
-  0xc79d, 0xc6d0, 0xddd0, 0xc79e, 0xc79f, 0xc7a0, 0xc840, 0xc841, /*0xe8-0xef*/
-  0xddd4, 0xc1e2, 0xb7c6, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, /*0xf0-0xf7*/
-  0xddce, 0xddcf, 0xc847, 0xc848, 0xc849, 0xddc4, 0xc84a, 0xc84b, /*0xf8-0xff*/
-  /* 0x8400 */
-  0xc84c, 0xddbd, 0xc84d, 0xddcd, 0xccd1, 0xc84e, 0xddc9, 0xc84f, /*0x00-0x07*/
-  0xc850, 0xc851, 0xc852, 0xddc2, 0xc3c8, 0xc6bc, 0xceae, 0xddcc, /*0x08-0x0f*/
-  0xc853, 0xddc8, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, /*0x10-0x17*/
-  0xddc1, 0xc85a, 0xc85b, 0xc85c, 0xddc6, 0xc2dc, 0xc85d, 0xc85e, /*0x18-0x1f*/
-  0xc85f, 0xc860, 0xc861, 0xc862, 0xd3a9, 0xd3aa, 0xddd3, 0xcff4, /*0x20-0x27*/
-  0xc8f8, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869, /*0x28-0x2f*/
-  0xc86a, 0xdde6, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc870, /*0x30-0x37*/
-  0xddc7, 0xc871, 0xc872, 0xc873, 0xdde0, 0xc2e4, 0xc874, 0xc875, /*0x38-0x3f*/
-  0xc876, 0xc877, 0xc878, 0xc879, 0xc87a, 0xc87b, 0xdde1, 0xc87c, /*0x40-0x47*/
-  0xc87d, 0xc87e, 0xc880, 0xc881, 0xc882, 0xc883, 0xc884, 0xc885, /*0x48-0x4f*/
-  0xc886, 0xddd7, 0xc887, 0xc888, 0xc889, 0xc88a, 0xc88b, 0xd6f8, /*0x50-0x57*/
-  0xc88c, 0xddd9, 0xddd8, 0xb8f0, 0xddd6, 0xc88d, 0xc88e, 0xc88f, /*0x58-0x5f*/
-  0xc890, 0xc6cf, 0xc891, 0xb6ad, 0xc892, 0xc893, 0xc894, 0xc895, /*0x60-0x67*/
-  0xc896, 0xdde2, 0xc897, 0xbaf9, 0xd4e1, 0xdde7, 0xc898, 0xc899, /*0x68-0x6f*/
-  0xc89a, 0xb4d0, 0xc89b, 0xddda, 0xc89c, 0xbffb, 0xdde3, 0xc89d, /*0x70-0x77*/
-  0xdddf, 0xc89e, 0xdddd, 0xc89f, 0xc8a0, 0xc940, 0xc941, 0xc942, /*0x78-0x7f*/
-  0xc943, 0xc944, 0xb5d9, 0xc945, 0xc946, 0xc947, 0xc948, 0xdddb, /*0x80-0x87*/
-  0xdddc, 0xddde, 0xc949, 0xbdaf, 0xdde4, 0xc94a, 0xdde5, 0xc94b, /*0x88-0x8f*/
-  0xc94c, 0xc94d, 0xc94e, 0xc94f, 0xc950, 0xc951, 0xc952, 0xddf5, /*0x90-0x97*/
-  0xc953, 0xc3c9, 0xc954, 0xc955, 0xcbe2, 0xc956, 0xc957, 0xc958, /*0x98-0x9f*/
-  0xc959, 0xddf2, 0xc95a, 0xc95b, 0xc95c, 0xc95d, 0xc95e, 0xc95f, /*0xa0-0xa7*/
-  0xc960, 0xc961, 0xc962, 0xc963, 0xc964, 0xc965, 0xc966, 0xd8e1, /*0xa8-0xaf*/
-  0xc967, 0xc968, 0xc6d1, 0xc969, 0xddf4, 0xc96a, 0xc96b, 0xc96c, /*0xb0-0xb7*/
-  0xd5f4, 0xddf3, 0xddf0, 0xc96d, 0xc96e, 0xddec, 0xc96f, 0xddef, /*0xb8-0xbf*/
-  0xc970, 0xdde8, 0xc971, 0xc972, 0xd0ee, 0xc973, 0xc974, 0xc975, /*0xc0-0xc7*/
-  0xc976, 0xc8d8, 0xddee, 0xc977, 0xc978, 0xdde9, 0xc979, 0xc97a, /*0xc8-0xcf*/
-  0xddea, 0xcbf2, 0xc97b, 0xdded, 0xc97c, 0xc97d, 0xb1cd, 0xc97e, /*0xd0-0xd7*/
-  0xc980, 0xc981, 0xc982, 0xc983, 0xc984, 0xc0b6, 0xc985, 0xbcbb, /*0xd8-0xdf*/
-  0xddf1, 0xc986, 0xc987, 0xddf7, 0xc988, 0xddf6, 0xddeb, 0xc989, /*0xe0-0xe7*/
-  0xc98a, 0xc98b, 0xc98c, 0xc98d, 0xc5ee, 0xc98e, 0xc98f, 0xc990, /*0xe8-0xef*/
-  0xddfb, 0xc991, 0xc992, 0xc993, 0xc994, 0xc995, 0xc996, 0xc997, /*0xf0-0xf7*/
-  0xc998, 0xc999, 0xc99a, 0xc99b, 0xdea4, 0xc99c, 0xc99d, 0xdea3, /*0xf8-0xff*/
-  /* 0x8500 */
-  0xc99e, 0xc99f, 0xc9a0, 0xca40, 0xca41, 0xca42, 0xca43, 0xca44, /*0x00-0x07*/
-  0xca45, 0xca46, 0xca47, 0xca48, 0xddf8, 0xca49, 0xca4a, 0xca4b, /*0x08-0x0f*/
-  0xca4c, 0xc3ef, 0xca4d, 0xc2fb, 0xca4e, 0xca4f, 0xca50, 0xd5e1, /*0x10-0x17*/
-  0xca51, 0xca52, 0xceb5, 0xca53, 0xca54, 0xca55, 0xca56, 0xddfd, /*0x18-0x1f*/
-  0xca57, 0xb2cc, 0xca58, 0xca59, 0xca5a, 0xca5b, 0xca5c, 0xca5d, /*0x20-0x27*/
-  0xca5e, 0xca5f, 0xca60, 0xc4e8, 0xcadf, 0xca61, 0xca62, 0xca63, /*0x28-0x2f*/
-  0xca64, 0xca65, 0xca66, 0xca67, 0xca68, 0xca69, 0xca6a, 0xc7be, /*0x30-0x37*/
-  0xddfa, 0xddfc, 0xddfe, 0xdea2, 0xb0aa, 0xb1ce, 0xca6b, 0xca6c, /*0x38-0x3f*/
-  0xca6d, 0xca6e, 0xca6f, 0xdeac, 0xca70, 0xca71, 0xca72, 0xca73, /*0x40-0x47*/
-  0xdea6, 0xbdb6, 0xc8ef, 0xca74, 0xca75, 0xca76, 0xca77, 0xca78, /*0x48-0x4f*/
-  0xca79, 0xca7a, 0xca7b, 0xca7c, 0xca7d, 0xca7e, 0xdea1, 0xca80, /*0x50-0x57*/
-  0xca81, 0xdea5, 0xca82, 0xca83, 0xca84, 0xca85, 0xdea9, 0xca86, /*0x58-0x5f*/
-  0xca87, 0xca88, 0xca89, 0xca8a, 0xdea8, 0xca8b, 0xca8c, 0xca8d, /*0x60-0x67*/
-  0xdea7, 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca92, 0xca93, 0xca94, /*0x68-0x6f*/
-  0xca95, 0xca96, 0xdead, 0xca97, 0xd4cc, 0xca98, 0xca99, 0xca9a, /*0x70-0x77*/
-  0xca9b, 0xdeb3, 0xdeaa, 0xdeae, 0xca9c, 0xca9d, 0xc0d9, 0xca9e, /*0x78-0x7f*/
-  0xca9f, 0xcaa0, 0xcb40, 0xcb41, 0xb1a1, 0xdeb6, 0xcb42, 0xdeb1, /*0x80-0x87*/
-  0xcb43, 0xcb44, 0xcb45, 0xcb46, 0xcb47, 0xcb48, 0xcb49, 0xdeb2, /*0x88-0x8f*/
-  0xcb4a, 0xcb4b, 0xcb4c, 0xcb4d, 0xcb4e, 0xcb4f, 0xcb50, 0xcb51, /*0x90-0x97*/
-  0xcb52, 0xcb53, 0xcb54, 0xd1a6, 0xdeb5, 0xcb55, 0xcb56, 0xcb57, /*0x98-0x9f*/
-  0xcb58, 0xcb59, 0xcb5a, 0xcb5b, 0xdeaf, 0xcb5c, 0xcb5d, 0xcb5e, /*0xa0-0xa7*/
-  0xdeb0, 0xcb5f, 0xd0bd, 0xcb60, 0xcb61, 0xcb62, 0xdeb4, 0xcaed, /*0xa8-0xaf*/
-  0xdeb9, 0xcb63, 0xcb64, 0xcb65, 0xcb66, 0xcb67, 0xcb68, 0xdeb8, /*0xb0-0xb7*/
-  0xcb69, 0xdeb7, 0xcb6a, 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f, /*0xb8-0xbf*/
-  0xcb70, 0xdebb, 0xcb71, 0xcb72, 0xcb73, 0xcb74, 0xcb75, 0xcb76, /*0xc0-0xc7*/
-  0xcb77, 0xbde5, 0xcb78, 0xcb79, 0xcb7a, 0xcb7b, 0xcb7c, 0xb2d8, /*0xc8-0xcf*/
-  0xc3ea, 0xcb7d, 0xcb7e, 0xdeba, 0xcb80, 0xc5ba, 0xcb81, 0xcb82, /*0xd0-0xd7*/
-  0xcb83, 0xcb84, 0xcb85, 0xcb86, 0xdebc, 0xcb87, 0xcb88, 0xcb89, /*0xd8-0xdf*/
-  0xcb8a, 0xcb8b, 0xcb8c, 0xcb8d, 0xccd9, 0xcb8e, 0xcb8f, 0xcb90, /*0xe0-0xe7*/
-  0xcb91, 0xb7aa, 0xcb92, 0xcb93, 0xcb94, 0xcb95, 0xcb96, 0xcb97, /*0xe8-0xef*/
-  0xcb98, 0xcb99, 0xcb9a, 0xcb9b, 0xcb9c, 0xcb9d, 0xcb9e, 0xcb9f, /*0xf0-0xf7*/
-  0xcba0, 0xcc40, 0xcc41, 0xd4e5, 0xcc42, 0xcc43, 0xcc44, 0xdebd, /*0xf8-0xff*/
-  /* 0x8600 */
-  0xcc45, 0xcc46, 0xcc47, 0xcc48, 0xcc49, 0xdebf, 0xcc4a, 0xcc4b, /*0x00-0x07*/
-  0xcc4c, 0xcc4d, 0xcc4e, 0xcc4f, 0xcc50, 0xcc51, 0xcc52, 0xcc53, /*0x08-0x0f*/
-  0xcc54, 0xc4a2, 0xcc55, 0xcc56, 0xcc57, 0xcc58, 0xdec1, 0xcc59, /*0x10-0x17*/
-  0xcc5a, 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f, 0xcc60, 0xcc61, /*0x18-0x1f*/
-  0xcc62, 0xcc63, 0xcc64, 0xcc65, 0xcc66, 0xcc67, 0xcc68, 0xdebe, /*0x20-0x27*/
-  0xcc69, 0xdec0, 0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e, 0xcc6f, /*0x28-0x2f*/
-  0xcc70, 0xcc71, 0xcc72, 0xcc73, 0xcc74, 0xcc75, 0xcc76, 0xcc77, /*0x30-0x37*/
-  0xd5ba, 0xcc78, 0xcc79, 0xcc7a, 0xdec2, 0xcc7b, 0xcc7c, 0xcc7d, /*0x38-0x3f*/
-  0xcc7e, 0xcc80, 0xcc81, 0xcc82, 0xcc83, 0xcc84, 0xcc85, 0xcc86, /*0x40-0x47*/
-  0xcc87, 0xcc88, 0xcc89, 0xcc8a, 0xcc8b, 0xf2ae, 0xbba2, 0xc2b2, /*0x48-0x4f*/
-  0xc5b0, 0xc2c7, 0xcc8c, 0xcc8d, 0xf2af, 0xcc8e, 0xcc8f, 0xcc90, /*0x50-0x57*/
-  0xcc91, 0xcc92, 0xd0e9, 0xcc93, 0xcc94, 0xcc95, 0xd3dd, 0xcc96, /*0x58-0x5f*/
-  0xcc97, 0xcc98, 0xebbd, 0xcc99, 0xcc9a, 0xcc9b, 0xcc9c, 0xcc9d, /*0x60-0x67*/
-  0xcc9e, 0xcc9f, 0xcca0, 0xb3e6, 0xf2b0, 0xcd40, 0xf2b1, 0xcd41, /*0x68-0x6f*/
-  0xcd42, 0xcaad, 0xcd43, 0xcd44, 0xcd45, 0xcd46, 0xcd47, 0xcd48, /*0x70-0x77*/
-  0xcd49, 0xbae7, 0xf2b3, 0xf2b5, 0xf2b4, 0xcbe4, 0xcfba, 0xf2b2, /*0x78-0x7f*/
-  0xcab4, 0xd2cf, 0xc2ec, 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e, /*0x80-0x87*/
-  0xcd4f, 0xcd50, 0xcec3, 0xf2b8, 0xb0f6, 0xf2b7, 0xcd51, 0xcd52, /*0x88-0x8f*/
-  0xcd53, 0xcd54, 0xcd55, 0xf2be, 0xcd56, 0xb2cf, 0xcd57, 0xcd58, /*0x90-0x97*/
-  0xcd59, 0xcd5a, 0xcd5b, 0xcd5c, 0xd1c1, 0xf2ba, 0xcd5d, 0xcd5e, /*0x98-0x9f*/
-  0xcd5f, 0xcd60, 0xcd61, 0xf2bc, 0xd4e9, 0xcd62, 0xcd63, 0xf2bb, /*0xa0-0xa7*/
-  0xf2b6, 0xf2bf, 0xf2bd, 0xcd64, 0xf2b9, 0xcd65, 0xcd66, 0xf2c7, /*0xa8-0xaf*/
-  0xf2c4, 0xf2c6, 0xcd67, 0xcd68, 0xf2ca, 0xf2c2, 0xf2c0, 0xcd69, /*0xb0-0xb7*/
-  0xcd6a, 0xcd6b, 0xf2c5, 0xcd6c, 0xcd6d, 0xcd6e, 0xcd6f, 0xcd70, /*0xb8-0xbf*/
-  0xd6fb, 0xcd71, 0xcd72, 0xcd73, 0xf2c1, 0xcd74, 0xc7f9, 0xc9df, /*0xc0-0xc7*/
-  0xcd75, 0xf2c8, 0xb9c6, 0xb5b0, 0xcd76, 0xcd77, 0xf2c3, 0xf2c9, /*0xc8-0xcf*/
-  0xf2d0, 0xf2d6, 0xcd78, 0xcd79, 0xbbd7, 0xcd7a, 0xcd7b, 0xcd7c, /*0xd0-0xd7*/
-  0xf2d5, 0xcddc, 0xcd7d, 0xd6eb, 0xcd7e, 0xcd80, 0xf2d2, 0xf2d4, /*0xd8-0xdf*/
-  0xcd81, 0xcd82, 0xcd83, 0xcd84, 0xb8f2, 0xcd85, 0xcd86, 0xcd87, /*0xe0-0xe7*/
-  0xcd88, 0xf2cb, 0xcd89, 0xcd8a, 0xcd8b, 0xf2ce, 0xc2f9, 0xcd8c, /*0xe8-0xef*/
-  0xd5dd, 0xf2cc, 0xf2cd, 0xf2cf, 0xf2d3, 0xcd8d, 0xcd8e, 0xcd8f, /*0xf0-0xf7*/
-  0xf2d9, 0xd3bc, 0xcd90, 0xcd91, 0xcd92, 0xcd93, 0xb6ea, 0xcd94, /*0xf8-0xff*/
-  /* 0x8700 */
-  0xcaf1, 0xcd95, 0xb7e4, 0xf2d7, 0xcd96, 0xcd97, 0xcd98, 0xf2d8, /*0x00-0x07*/
-  0xf2da, 0xf2dd, 0xf2db, 0xcd99, 0xcd9a, 0xf2dc, 0xcd9b, 0xcd9c, /*0x08-0x0f*/
-  0xcd9d, 0xcd9e, 0xd1d1, 0xf2d1, 0xcd9f, 0xcdc9, 0xcda0, 0xcecf, /*0x10-0x17*/
-  0xd6a9, 0xce40, 0xf2e3, 0xce41, 0xc3db, 0xce42, 0xf2e0, 0xce43, /*0x18-0x1f*/
-  0xce44, 0xc0af, 0xf2ec, 0xf2de, 0xce45, 0xf2e1, 0xce46, 0xce47, /*0x20-0x27*/
-  0xce48, 0xf2e8, 0xce49, 0xce4a, 0xce4b, 0xce4c, 0xf2e2, 0xce4d, /*0x28-0x2f*/
-  0xce4e, 0xf2e7, 0xce4f, 0xce50, 0xf2e6, 0xce51, 0xce52, 0xf2e9, /*0x30-0x37*/
-  0xce53, 0xce54, 0xce55, 0xf2df, 0xce56, 0xce57, 0xf2e4, 0xf2ea, /*0x38-0x3f*/
-  0xce58, 0xce59, 0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce5e, 0xd3ac, /*0x40-0x47*/
-  0xf2e5, 0xb2f5, 0xce5f, 0xce60, 0xf2f2, 0xce61, 0xd0ab, 0xce62, /*0x48-0x4f*/
-  0xce63, 0xce64, 0xce65, 0xf2f5, 0xce66, 0xce67, 0xce68, 0xbbc8, /*0x50-0x57*/
-  0xce69, 0xf2f9, 0xce6a, 0xce6b, 0xce6c, 0xce6d, 0xce6e, 0xce6f, /*0x58-0x5f*/
-  0xf2f0, 0xce70, 0xce71, 0xf2f6, 0xf2f8, 0xf2fa, 0xce72, 0xce73, /*0x60-0x67*/
-  0xce74, 0xce75, 0xce76, 0xce77, 0xce78, 0xce79, 0xf2f3, 0xce7a, /*0x68-0x6f*/
-  0xf2f1, 0xce7b, 0xce7c, 0xce7d, 0xbafb, 0xce7e, 0xb5fb, 0xce80, /*0x70-0x77*/
-  0xce81, 0xce82, 0xce83, 0xf2ef, 0xf2f7, 0xf2ed, 0xf2ee, 0xce84, /*0x78-0x7f*/
-  0xce85, 0xce86, 0xf2eb, 0xf3a6, 0xce87, 0xf3a3, 0xce88, 0xce89, /*0x80-0x87*/
-  0xf3a2, 0xce8a, 0xce8b, 0xf2f4, 0xce8c, 0xc8da, 0xce8d, 0xce8e, /*0x88-0x8f*/
-  0xce8f, 0xce90, 0xce91, 0xf2fb, 0xce92, 0xce93, 0xce94, 0xf3a5, /*0x90-0x97*/
-  0xce95, 0xce96, 0xce97, 0xce98, 0xce99, 0xce9a, 0xce9b, 0xc3f8, /*0x98-0x9f*/
-  0xce9c, 0xce9d, 0xce9e, 0xce9f, 0xcea0, 0xcf40, 0xcf41, 0xcf42, /*0xa0-0xa7*/
-  0xf2fd, 0xcf43, 0xcf44, 0xf3a7, 0xf3a9, 0xf3a4, 0xcf45, 0xf2fc, /*0xa8-0xaf*/
-  0xcf46, 0xcf47, 0xcf48, 0xf3ab, 0xcf49, 0xf3aa, 0xcf4a, 0xcf4b, /*0xb0-0xb7*/
-  0xcf4c, 0xcf4d, 0xc2dd, 0xcf4e, 0xcf4f, 0xf3ae, 0xcf50, 0xcf51, /*0xb8-0xbf*/
-  0xf3b0, 0xcf52, 0xcf53, 0xcf54, 0xcf55, 0xcf56, 0xf3a1, 0xcf57, /*0xc0-0xc7*/
-  0xcf58, 0xcf59, 0xf3b1, 0xf3ac, 0xcf5a, 0xcf5b, 0xcf5c, 0xcf5d, /*0xc8-0xcf*/
-  0xcf5e, 0xf3af, 0xf2fe, 0xf3ad, 0xcf5f, 0xcf60, 0xcf61, 0xcf62, /*0xd0-0xd7*/
-  0xcf63, 0xcf64, 0xcf65, 0xf3b2, 0xcf66, 0xcf67, 0xcf68, 0xcf69, /*0xd8-0xdf*/
-  0xf3b4, 0xcf6a, 0xcf6b, 0xcf6c, 0xcf6d, 0xf3a8, 0xcf6e, 0xcf6f, /*0xe0-0xe7*/
-  0xcf70, 0xcf71, 0xf3b3, 0xcf72, 0xcf73, 0xcf74, 0xf3b5, 0xcf75, /*0xe8-0xef*/
-  0xcf76, 0xcf77, 0xcf78, 0xcf79, 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, /*0xf0-0xf7*/
-  0xcf7e, 0xd0b7, 0xcf80, 0xcf81, 0xcf82, 0xcf83, 0xf3b8, 0xcf84, /*0xf8-0xff*/
-  /* 0x8800 */
-  0xcf85, 0xcf86, 0xcf87, 0xd9f9, 0xcf88, 0xcf89, 0xcf8a, 0xcf8b, /*0x00-0x07*/
-  0xcf8c, 0xcf8d, 0xf3b9, 0xcf8e, 0xcf8f, 0xcf90, 0xcf91, 0xcf92, /*0x08-0x0f*/
-  0xcf93, 0xcf94, 0xcf95, 0xf3b7, 0xcf96, 0xc8e4, 0xf3b6, 0xcf97, /*0x10-0x17*/
-  0xcf98, 0xcf99, 0xcf9a, 0xf3ba, 0xcf9b, 0xcf9c, 0xcf9d, 0xcf9e, /*0x18-0x1f*/
-  0xcf9f, 0xf3bb, 0xb4c0, 0xcfa0, 0xd040, 0xd041, 0xd042, 0xd043, /*0x20-0x27*/
-  0xd044, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049, 0xd04a, 0xd04b, /*0x28-0x2f*/
-  0xd04c, 0xd04d, 0xeec3, 0xd04e, 0xd04f, 0xd050, 0xd051, 0xd052, /*0x30-0x37*/
-  0xd053, 0xf3bc, 0xd054, 0xd055, 0xf3bd, 0xd056, 0xd057, 0xd058, /*0x38-0x3f*/
-  0xd1aa, 0xd059, 0xd05a, 0xd05b, 0xf4ac, 0xd0c6, 0xd05c, 0xd05d, /*0x40-0x47*/
-  0xd05e, 0xd05f, 0xd060, 0xd061, 0xd0d0, 0xd1dc, 0xd062, 0xd063, /*0x48-0x4f*/
-  0xd064, 0xd065, 0xd066, 0xd067, 0xcfce, 0xd068, 0xd069, 0xbdd6, /*0x50-0x57*/
-  0xd06a, 0xd1c3, 0xd06b, 0xd06c, 0xd06d, 0xd06e, 0xd06f, 0xd070, /*0x58-0x5f*/
-  0xd071, 0xbae2, 0xe1e9, 0xd2c2, 0xf1c2, 0xb2b9, 0xd072, 0xd073, /*0x60-0x67*/
-  0xb1ed, 0xf1c3, 0xd074, 0xc9c0, 0xb3c4, 0xd075, 0xd9f2, 0xd076, /*0x68-0x6f*/
-  0xcba5, 0xd077, 0xf1c4, 0xd078, 0xd079, 0xd07a, 0xd07b, 0xd6d4, /*0x70-0x77*/
-  0xd07c, 0xd07d, 0xd07e, 0xd080, 0xd081, 0xf1c5, 0xf4c0, 0xf1c6, /*0x78-0x7f*/
-  0xd082, 0xd4ac, 0xf1c7, 0xd083, 0xb0c0, 0xf4c1, 0xd084, 0xd085, /*0x80-0x87*/
-  0xf4c2, 0xd086, 0xd087, 0xb4fc, 0xd088, 0xc5db, 0xd089, 0xd08a, /*0x88-0x8f*/
-  0xd08b, 0xd08c, 0xccbb, 0xd08d, 0xd08e, 0xd08f, 0xd0e4, 0xd090, /*0x90-0x97*/
-  0xd091, 0xd092, 0xd093, 0xd094, 0xcde0, 0xd095, 0xd096, 0xd097, /*0x98-0x9f*/
-  0xd098, 0xd099, 0xf1c8, 0xd09a, 0xd9f3, 0xd09b, 0xd09c, 0xd09d, /*0xa0-0xa7*/
-  0xd09e, 0xd09f, 0xd0a0, 0xb1bb, 0xd140, 0xcfae, 0xd141, 0xd142, /*0xa8-0xaf*/
-  0xd143, 0xb8a4, 0xd144, 0xd145, 0xd146, 0xd147, 0xd148, 0xf1ca, /*0xb0-0xb7*/
-  0xd149, 0xd14a, 0xd14b, 0xd14c, 0xf1cb, 0xd14d, 0xd14e, 0xd14f, /*0xb8-0xbf*/
-  0xd150, 0xb2c3, 0xc1d1, 0xd151, 0xd152, 0xd7b0, 0xf1c9, 0xd153, /*0xc0-0xc7*/
-  0xd154, 0xf1cc, 0xd155, 0xd156, 0xd157, 0xd158, 0xf1ce, 0xd159, /*0xc8-0xcf*/
-  0xd15a, 0xd15b, 0xd9f6, 0xd15c, 0xd2e1, 0xd4a3, 0xd15d, 0xd15e, /*0xd0-0xd7*/
-  0xf4c3, 0xc8b9, 0xd15f, 0xd160, 0xd161, 0xd162, 0xd163, 0xf4c4, /*0xd8-0xdf*/
-  0xd164, 0xd165, 0xf1cd, 0xf1cf, 0xbfe3, 0xf1d0, 0xd166, 0xd167, /*0xe0-0xe7*/
-  0xf1d4, 0xd168, 0xd169, 0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e, /*0xe8-0xef*/
-  0xf1d6, 0xf1d1, 0xd16f, 0xc9d1, 0xc5e1, 0xd170, 0xd171, 0xd172, /*0xf0-0xf7*/
-  0xc2e3, 0xb9fc, 0xd173, 0xd174, 0xf1d3, 0xd175, 0xf1d5, 0xd176, /*0xf8-0xff*/
-  /* 0x8900 */
-  0xd177, 0xd178, 0xb9d3, 0xd179, 0xd17a, 0xd17b, 0xd17c, 0xd17d, /*0x00-0x07*/
-  0xd17e, 0xd180, 0xf1db, 0xd181, 0xd182, 0xd183, 0xd184, 0xd185, /*0x08-0x0f*/
-  0xbad6, 0xd186, 0xb0fd, 0xf1d9, 0xd187, 0xd188, 0xd189, 0xd18a, /*0x10-0x17*/
-  0xd18b, 0xf1d8, 0xf1d2, 0xf1da, 0xd18c, 0xd18d, 0xd18e, 0xd18f, /*0x18-0x1f*/
-  0xd190, 0xf1d7, 0xd191, 0xd192, 0xd193, 0xc8ec, 0xd194, 0xd195, /*0x20-0x27*/
-  0xd196, 0xd197, 0xcdca, 0xf1dd, 0xd198, 0xd199, 0xd19a, 0xd19b, /*0x28-0x2f*/
-  0xe5bd, 0xd19c, 0xd19d, 0xd19e, 0xf1dc, 0xd19f, 0xf1de, 0xd1a0, /*0x30-0x37*/
-  0xd240, 0xd241, 0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, /*0x38-0x3f*/
-  0xd248, 0xf1df, 0xd249, 0xd24a, 0xcfe5, 0xd24b, 0xd24c, 0xd24d, /*0x40-0x47*/
-  0xd24e, 0xd24f, 0xd250, 0xd251, 0xd252, 0xd253, 0xd254, 0xd255, /*0x48-0x4f*/
-  0xd256, 0xd257, 0xd258, 0xd259, 0xd25a, 0xd25b, 0xd25c, 0xd25d, /*0x50-0x57*/
-  0xd25e, 0xd25f, 0xd260, 0xd261, 0xd262, 0xd263, 0xf4c5, 0xbdf3, /*0x58-0x5f*/
-  0xd264, 0xd265, 0xd266, 0xd267, 0xd268, 0xd269, 0xf1e0, 0xd26a, /*0x60-0x67*/
-  0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, 0xd270, 0xd271, 0xd272, /*0x68-0x6f*/
-  0xd273, 0xd274, 0xd275, 0xd276, 0xd277, 0xd278, 0xd279, 0xd27a, /*0x70-0x77*/
-  0xd27b, 0xd27c, 0xd27d, 0xf1e1, 0xd27e, 0xd280, 0xd281, 0xcef7, /*0x78-0x7f*/
-  0xd282, 0xd2aa, 0xd283, 0xf1fb, 0xd284, 0xd285, 0xb8b2, 0xd286, /*0x80-0x87*/
-  0xd287, 0xd288, 0xd289, 0xd28a, 0xd28b, 0xd28c, 0xd28d, 0xd28e, /*0x88-0x8f*/
-  0xd28f, 0xd290, 0xd291, 0xd292, 0xd293, 0xd294, 0xd295, 0xd296, /*0x90-0x97*/
-  0xd297, 0xd298, 0xd299, 0xd29a, 0xd29b, 0xd29c, 0xd29d, 0xd29e, /*0x98-0x9f*/
-  0xd29f, 0xd2a0, 0xd340, 0xd341, 0xd342, 0xd343, 0xd344, 0xd345, /*0xa0-0xa7*/
-  0xd346, 0xd347, 0xd348, 0xd349, 0xd34a, 0xd34b, 0xd34c, 0xd34d, /*0xa8-0xaf*/
-  0xd34e, 0xd34f, 0xd350, 0xd351, 0xd352, 0xd353, 0xd354, 0xd355, /*0xb0-0xb7*/
-  0xd356, 0xd357, 0xd358, 0xd359, 0xd35a, 0xd35b, 0xd35c, 0xd35d, /*0xb8-0xbf*/
-  0xd35e, 0xbcfb, 0xb9db, 0xd35f, 0xb9e6, 0xc3d9, 0xcad3, 0xeae8, /*0xc0-0xc7*/
-  0xc0c0, 0xbef5, 0xeae9, 0xeaea, 0xeaeb, 0xd360, 0xeaec, 0xeaed, /*0xc8-0xcf*/
-  0xeaee, 0xeaef, 0xbdc7, 0xd361, 0xd362, 0xd363, 0xf5fb, 0xd364, /*0xd0-0xd7*/
-  0xd365, 0xd366, 0xf5fd, 0xd367, 0xf5fe, 0xd368, 0xf5fc, 0xd369, /*0xd8-0xdf*/
-  0xd36a, 0xd36b, 0xd36c, 0xbde2, 0xd36d, 0xf6a1, 0xb4a5, 0xd36e, /*0xe0-0xe7*/
-  0xd36f, 0xd370, 0xd371, 0xf6a2, 0xd372, 0xd373, 0xd374, 0xf6a3, /*0xe8-0xef*/
-  0xd375, 0xd376, 0xd377, 0xecb2, 0xd378, 0xd379, 0xd37a, 0xd37b, /*0xf0-0xf7*/
-  0xd37c, 0xd37d, 0xd37e, 0xd380, 0xd381, 0xd382, 0xd383, 0xd384, /*0xf8-0xff*/
-  /* 0x8a00 */
-  0xd1d4, 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, 0xd38a, 0xd9ea, /*0x00-0x07*/
-  0xd38b, 0xd38c, 0xd38d, 0xd38e, 0xd38f, 0xd390, 0xd391, 0xd392, /*0x08-0x0f*/
-  0xd393, 0xd394, 0xd395, 0xd396, 0xd397, 0xd398, 0xd399, 0xd39a, /*0x10-0x17*/
-  0xd39b, 0xd39c, 0xd39d, 0xd39e, 0xd39f, 0xd3a0, 0xd440, 0xd441, /*0x18-0x1f*/
-  0xd442, 0xd443, 0xd444, 0xd445, 0xd446, 0xd447, 0xd448, 0xd449, /*0x20-0x27*/
-  0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e, 0xd44f, 0xd450, 0xd451, /*0x28-0x2f*/
-  0xd452, 0xd453, 0xd454, 0xd455, 0xd456, 0xd457, 0xd458, 0xd459, /*0x30-0x37*/
-  0xd45a, 0xd45b, 0xd45c, 0xd45d, 0xd45e, 0xd45f, 0xf6a4, 0xd460, /*0x38-0x3f*/
-  0xd461, 0xd462, 0xd463, 0xd464, 0xd465, 0xd466, 0xd467, 0xd468, /*0x40-0x47*/
-  0xeeba, 0xd469, 0xd46a, 0xd46b, 0xd46c, 0xd46d, 0xd46e, 0xd46f, /*0x48-0x4f*/
-  0xd470, 0xd471, 0xd472, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477, /*0x50-0x57*/
-  0xd478, 0xd479, 0xd47a, 0xd47b, 0xd47c, 0xd47d, 0xd47e, 0xd480, /*0x58-0x5f*/
-  0xd481, 0xd482, 0xd483, 0xd484, 0xd485, 0xd486, 0xd487, 0xd488, /*0x60-0x67*/
-  0xd489, 0xd48a, 0xd48b, 0xd48c, 0xd48d, 0xd48e, 0xd48f, 0xd490, /*0x68-0x6f*/
-  0xd491, 0xd492, 0xd493, 0xd494, 0xd495, 0xd496, 0xd497, 0xd498, /*0x70-0x77*/
-  0xd499, 0xd5b2, 0xd49a, 0xd49b, 0xd49c, 0xd49d, 0xd49e, 0xd49f, /*0x78-0x7f*/
-  0xd4a0, 0xd540, 0xd541, 0xd542, 0xd543, 0xd544, 0xd545, 0xd546, /*0x80-0x87*/
-  0xd547, 0xd3fe, 0xccdc, 0xd548, 0xd549, 0xd54a, 0xd54b, 0xd54c, /*0x88-0x8f*/
-  0xd54d, 0xd54e, 0xd54f, 0xcac4, 0xd550, 0xd551, 0xd552, 0xd553, /*0x90-0x97*/
-  0xd554, 0xd555, 0xd556, 0xd557, 0xd558, 0xd559, 0xd55a, 0xd55b, /*0x98-0x9f*/
-  0xd55c, 0xd55d, 0xd55e, 0xd55f, 0xd560, 0xd561, 0xd562, 0xd563, /*0xa0-0xa7*/
-  0xd564, 0xd565, 0xd566, 0xd567, 0xd568, 0xd569, 0xd56a, 0xd56b, /*0xa8-0xaf*/
-  0xd56c, 0xd56d, 0xd56e, 0xd56f, 0xd570, 0xd571, 0xd572, 0xd573, /*0xb0-0xb7*/
-  0xd574, 0xd575, 0xd576, 0xd577, 0xd578, 0xd579, 0xd57a, 0xd57b, /*0xb8-0xbf*/
-  0xd57c, 0xd57d, 0xd57e, 0xd580, 0xd581, 0xd582, 0xd583, 0xd584, /*0xc0-0xc7*/
-  0xd585, 0xd586, 0xd587, 0xd588, 0xd589, 0xd58a, 0xd58b, 0xd58c, /*0xc8-0xcf*/
-  0xd58d, 0xd58e, 0xd58f, 0xd590, 0xd591, 0xd592, 0xd593, 0xd594, /*0xd0-0xd7*/
-  0xd595, 0xd596, 0xd597, 0xd598, 0xd599, 0xd59a, 0xd59b, 0xd59c, /*0xd8-0xdf*/
-  0xd59d, 0xd59e, 0xd59f, 0xd5a0, 0xd640, 0xd641, 0xd642, 0xd643, /*0xe0-0xe7*/
-  0xd644, 0xd645, 0xd646, 0xd647, 0xd648, 0xd649, 0xd64a, 0xd64b, /*0xe8-0xef*/
-  0xd64c, 0xd64d, 0xd64e, 0xd64f, 0xd650, 0xd651, 0xd652, 0xd653, /*0xf0-0xf7*/
-  0xd654, 0xd655, 0xd656, 0xd657, 0xd658, 0xd659, 0xd65a, 0xd65b, /*0xf8-0xff*/
-  /* 0x8b00 */
-  0xd65c, 0xd65d, 0xd65e, 0xd65f, 0xd660, 0xd661, 0xd662, 0xe5c0, /*0x00-0x07*/
-  0xd663, 0xd664, 0xd665, 0xd666, 0xd667, 0xd668, 0xd669, 0xd66a, /*0x08-0x0f*/
-  0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f, 0xd670, 0xd671, 0xd672, /*0x10-0x17*/
-  0xd673, 0xd674, 0xd675, 0xd676, 0xd677, 0xd678, 0xd679, 0xd67a, /*0x18-0x1f*/
-  0xd67b, 0xd67c, 0xd67d, 0xd67e, 0xd680, 0xd681, 0xf6a5, 0xd682, /*0x20-0x27*/
-  0xd683, 0xd684, 0xd685, 0xd686, 0xd687, 0xd688, 0xd689, 0xd68a, /*0x28-0x2f*/
-  0xd68b, 0xd68c, 0xd68d, 0xd68e, 0xd68f, 0xd690, 0xd691, 0xd692, /*0x30-0x37*/
-  0xd693, 0xd694, 0xd695, 0xd696, 0xd697, 0xd698, 0xd699, 0xd69a, /*0x38-0x3f*/
-  0xd69b, 0xd69c, 0xd69d, 0xd69e, 0xd69f, 0xd6a0, 0xd740, 0xd741, /*0x40-0x47*/
-  0xd742, 0xd743, 0xd744, 0xd745, 0xd746, 0xd747, 0xd748, 0xd749, /*0x48-0x4f*/
-  0xd74a, 0xd74b, 0xd74c, 0xd74d, 0xd74e, 0xd74f, 0xd750, 0xd751, /*0x50-0x57*/
-  0xd752, 0xd753, 0xd754, 0xd755, 0xd756, 0xd757, 0xd758, 0xd759, /*0x58-0x5f*/
-  0xd75a, 0xd75b, 0xd75c, 0xd75d, 0xd75e, 0xd75f, 0xbeaf, 0xd760, /*0x60-0x67*/
-  0xd761, 0xd762, 0xd763, 0xd764, 0xc6a9, 0xd765, 0xd766, 0xd767, /*0x68-0x6f*/
-  0xd768, 0xd769, 0xd76a, 0xd76b, 0xd76c, 0xd76d, 0xd76e, 0xd76f, /*0x70-0x77*/
-  0xd770, 0xd771, 0xd772, 0xd773, 0xd774, 0xd775, 0xd776, 0xd777, /*0x78-0x7f*/
-  0xd778, 0xd779, 0xd77a, 0xd77b, 0xd77c, 0xd77d, 0xd77e, 0xd780, /*0x80-0x87*/
-  0xd781, 0xd782, 0xd783, 0xd784, 0xd785, 0xd786, 0xd787, 0xd788, /*0x88-0x8f*/
-  0xd789, 0xd78a, 0xd78b, 0xd78c, 0xd78d, 0xd78e, 0xd78f, 0xd790, /*0x90-0x97*/
-  0xd791, 0xd792, 0xd793, 0xd794, 0xd795, 0xd796, 0xd797, 0xd798, /*0x98-0x9f*/
-  0xdaa5, 0xbcc6, 0xb6a9, 0xb8bc, 0xc8cf, 0xbca5, 0xdaa6, 0xdaa7, /*0xa0-0xa7*/
-  0xccd6, 0xc8c3, 0xdaa8, 0xc6fd, 0xd799, 0xd1b5, 0xd2e9, 0xd1b6, /*0xa8-0xaf*/
-  0xbcc7, 0xd79a, 0xbdb2, 0xbbe4, 0xdaa9, 0xdaaa, 0xd1c8, 0xdaab, /*0xb0-0xb7*/
-  0xd0ed, 0xb6ef, 0xc2db, 0xd79b, 0xcbcf, 0xb7ed, 0xc9e8, 0xb7c3, /*0xb8-0xbf*/
-  0xbef7, 0xd6a4, 0xdaac, 0xdaad, 0xc6c0, 0xd7e7, 0xcab6, 0xd79c, /*0xc0-0xc7*/
-  0xd5a9, 0xcbdf, 0xd5ef, 0xdaae, 0xd6df, 0xb4ca, 0xdab0, 0xdaaf, /*0xc8-0xcf*/
-  0xd79d, 0xd2eb, 0xdab1, 0xdab2, 0xdab3, 0xcad4, 0xdab4, 0xcaab, /*0xd0-0xd7*/
-  0xdab5, 0xdab6, 0xb3cf, 0xd6ef, 0xdab7, 0xbbb0, 0xb5ae, 0xdab8, /*0xd8-0xdf*/
-  0xdab9, 0xb9ee, 0xd1af, 0xd2e8, 0xdaba, 0xb8c3, 0xcfea, 0xb2ef, /*0xe0-0xe7*/
-  0xdabb, 0xdabc, 0xd79e, 0xbdeb, 0xcedc, 0xd3ef, 0xdabd, 0xcef3, /*0xe8-0xef*/
-  0xdabe, 0xd3d5, 0xbbe5, 0xdabf, 0xcbb5, 0xcbd0, 0xdac0, 0xc7eb, /*0xf0-0xf7*/
-  0xd6ee, 0xdac1, 0xc5b5, 0xb6c1, 0xdac2, 0xb7cc, 0xbfce, 0xdac3, /*0xf8-0xff*/
-  /* 0x8c00 */
-  0xdac4, 0xcbad, 0xdac5, 0xb5f7, 0xdac6, 0xc1c2, 0xd7bb, 0xdac7, /*0x00-0x07*/
-  0xccb8, 0xd79f, 0xd2ea, 0xc4b1, 0xdac8, 0xb5fd, 0xbbd1, 0xdac9, /*0x08-0x0f*/
-  0xd0b3, 0xdaca, 0xdacb, 0xcebd, 0xdacc, 0xdacd, 0xdace, 0xb2f7, /*0x10-0x17*/
-  0xdad1, 0xdacf, 0xd1e8, 0xdad0, 0xc3d5, 0xdad2, 0xd7a0, 0xdad3, /*0x18-0x1f*/
-  0xdad4, 0xdad5, 0xd0bb, 0xd2a5, 0xb0f9, 0xdad6, 0xc7ab, 0xdad7, /*0x20-0x27*/
-  0xbdf7, 0xc3a1, 0xdad8, 0xdad9, 0xc3fd, 0xccb7, 0xdada, 0xdadb, /*0x28-0x2f*/
-  0xc0be, 0xc6d7, 0xdadc, 0xdadd, 0xc7b4, 0xdade, 0xdadf, 0xb9c8, /*0x30-0x37*/
-  0xd840, 0xd841, 0xd842, 0xd843, 0xd844, 0xd845, 0xd846, 0xd847, /*0x38-0x3f*/
-  0xd848, 0xbbed, 0xd849, 0xd84a, 0xd84b, 0xd84c, 0xb6b9, 0xf4f8, /*0x40-0x47*/
-  0xd84d, 0xf4f9, 0xd84e, 0xd84f, 0xcde3, 0xd850, 0xd851, 0xd852, /*0x48-0x4f*/
-  0xd853, 0xd854, 0xd855, 0xd856, 0xd857, 0xf5b9, 0xd858, 0xd859, /*0x50-0x57*/
-  0xd85a, 0xd85b, 0xebe0, 0xd85c, 0xd85d, 0xd85e, 0xd85f, 0xd860, /*0x58-0x5f*/
-  0xd861, 0xcff3, 0xbbbf, 0xd862, 0xd863, 0xd864, 0xd865, 0xd866, /*0x60-0x67*/
-  0xd867, 0xd868, 0xbac0, 0xd4a5, 0xd869, 0xd86a, 0xd86b, 0xd86c, /*0x68-0x6f*/
-  0xd86d, 0xd86e, 0xd86f, 0xe1d9, 0xd870, 0xd871, 0xd872, 0xd873, /*0x70-0x77*/
-  0xf5f4, 0xb1aa, 0xb2f2, 0xd874, 0xd875, 0xd876, 0xd877, 0xd878, /*0x78-0x7f*/
-  0xd879, 0xd87a, 0xf5f5, 0xd87b, 0xd87c, 0xf5f7, 0xd87d, 0xd87e, /*0x80-0x87*/
-  0xd880, 0xbad1, 0xf5f6, 0xd881, 0xc3b2, 0xd882, 0xd883, 0xd884, /*0x88-0x8f*/
-  0xd885, 0xd886, 0xd887, 0xd888, 0xf5f9, 0xd889, 0xd88a, 0xd88b, /*0x90-0x97*/
-  0xf5f8, 0xd88c, 0xd88d, 0xd88e, 0xd88f, 0xd890, 0xd891, 0xd892, /*0x98-0x9f*/
-  0xd893, 0xd894, 0xd895, 0xd896, 0xd897, 0xd898, 0xd899, 0xd89a, /*0xa0-0xa7*/
-  0xd89b, 0xd89c, 0xd89d, 0xd89e, 0xd89f, 0xd8a0, 0xd940, 0xd941, /*0xa8-0xaf*/
-  0xd942, 0xd943, 0xd944, 0xd945, 0xd946, 0xd947, 0xd948, 0xd949, /*0xb0-0xb7*/
-  0xd94a, 0xd94b, 0xd94c, 0xd94d, 0xd94e, 0xd94f, 0xd950, 0xd951, /*0xb8-0xbf*/
-  0xd952, 0xd953, 0xd954, 0xd955, 0xd956, 0xd957, 0xd958, 0xd959, /*0xc0-0xc7*/
-  0xd95a, 0xd95b, 0xd95c, 0xd95d, 0xd95e, 0xd95f, 0xd960, 0xd961, /*0xc8-0xcf*/
-  0xd962, 0xd963, 0xd964, 0xd965, 0xd966, 0xd967, 0xd968, 0xd969, /*0xd0-0xd7*/
-  0xd96a, 0xd96b, 0xd96c, 0xd96d, 0xd96e, 0xd96f, 0xd970, 0xd971, /*0xd8-0xdf*/
-  0xd972, 0xd973, 0xd974, 0xd975, 0xd976, 0xd977, 0xd978, 0xd979, /*0xe0-0xe7*/
-  0xd97a, 0xd97b, 0xd97c, 0xd97d, 0xd97e, 0xd980, 0xd981, 0xd982, /*0xe8-0xef*/
-  0xd983, 0xd984, 0xd985, 0xd986, 0xd987, 0xd988, 0xd989, 0xd98a, /*0xf0-0xf7*/
-  0xd98b, 0xd98c, 0xd98d, 0xd98e, 0xd98f, 0xd990, 0xd991, 0xd992, /*0xf8-0xff*/
-  /* 0x8d00 */
-  0xd993, 0xd994, 0xd995, 0xd996, 0xd997, 0xd998, 0xd999, 0xd99a, /*0x00-0x07*/
-  0xd99b, 0xd99c, 0xd99d, 0xd99e, 0xd99f, 0xd9a0, 0xda40, 0xda41, /*0x08-0x0f*/
-  0xda42, 0xda43, 0xda44, 0xda45, 0xda46, 0xda47, 0xda48, 0xda49, /*0x10-0x17*/
-  0xda4a, 0xda4b, 0xda4c, 0xda4d, 0xda4e, 0xb1b4, 0xd5ea, 0xb8ba, /*0x18-0x1f*/
-  0xda4f, 0xb9b1, 0xb2c6, 0xd4f0, 0xcfcd, 0xb0dc, 0xd5cb, 0xbbf5, /*0x20-0x27*/
-  0xd6ca, 0xb7b7, 0xccb0, 0xc6b6, 0xb1e1, 0xb9ba, 0xd6fc, 0xb9e1, /*0x28-0x2f*/
-  0xb7a1, 0xbcfa, 0xeada, 0xeadb, 0xccf9, 0xb9f3, 0xeadc, 0xb4fb, /*0x30-0x37*/
-  0xc3b3, 0xb7d1, 0xbad8, 0xeadd, 0xd4f4, 0xeade, 0xbcd6, 0xbbdf, /*0x38-0x3f*/
-  0xeadf, 0xc1de, 0xc2b8, 0xd4df, 0xd7ca, 0xeae0, 0xeae1, 0xeae4, /*0x40-0x47*/
-  0xeae2, 0xeae3, 0xc9de, 0xb8b3, 0xb6c4, 0xeae5, 0xcaea, 0xc9cd, /*0x48-0x4f*/
-  0xb4cd, 0xda50, 0xda51, 0xe2d9, 0xc5e2, 0xeae6, 0xc0b5, 0xda52, /*0x50-0x57*/
-  0xd7b8, 0xeae7, 0xd7ac, 0xc8fc, 0xd8d3, 0xd8cd, 0xd4de, 0xda53, /*0x58-0x5f*/
-  0xd4f9, 0xc9c4, 0xd3ae, 0xb8d3, 0xb3e0, 0xda54, 0xc9e2, 0xf4f6, /*0x60-0x67*/
-  0xda55, 0xda56, 0xda57, 0xbad5, 0xda58, 0xf4f7, 0xda59, 0xda5a, /*0x68-0x6f*/
-  0xd7df, 0xda5b, 0xda5c, 0xf4f1, 0xb8b0, 0xd5d4, 0xb8cf, 0xc6f0, /*0x70-0x77*/
-  0xda5d, 0xda5e, 0xda5f, 0xda60, 0xda61, 0xda62, 0xda63, 0xda64, /*0x78-0x7f*/
-  0xda65, 0xb3c3, 0xda66, 0xda67, 0xf4f2, 0xb3ac, 0xda68, 0xda69, /*0x80-0x87*/
-  0xda6a, 0xda6b, 0xd4bd, 0xc7f7, 0xda6c, 0xda6d, 0xda6e, 0xda6f, /*0x88-0x8f*/
-  0xda70, 0xf4f4, 0xda71, 0xda72, 0xf4f3, 0xda73, 0xda74, 0xda75, /*0x90-0x97*/
-  0xda76, 0xda77, 0xda78, 0xda79, 0xda7a, 0xda7b, 0xda7c, 0xcccb, /*0x98-0x9f*/
-  0xda7d, 0xda7e, 0xda80, 0xc8a4, 0xda81, 0xda82, 0xda83, 0xda84, /*0xa0-0xa7*/
-  0xda85, 0xda86, 0xda87, 0xda88, 0xda89, 0xda8a, 0xda8b, 0xda8c, /*0xa8-0xaf*/
-  0xda8d, 0xf4f5, 0xda8e, 0xd7e3, 0xc5bf, 0xf5c0, 0xda8f, 0xda90, /*0xb0-0xb7*/
-  0xf5bb, 0xda91, 0xf5c3, 0xda92, 0xf5c2, 0xda93, 0xd6ba, 0xf5c1, /*0xb8-0xbf*/
-  0xda94, 0xda95, 0xda96, 0xd4be, 0xf5c4, 0xda97, 0xf5cc, 0xda98, /*0xc0-0xc7*/
-  0xda99, 0xda9a, 0xda9b, 0xb0cf, 0xb5f8, 0xda9c, 0xf5c9, 0xf5ca, /*0xc8-0xcf*/
-  0xda9d, 0xc5dc, 0xda9e, 0xda9f, 0xdaa0, 0xdb40, 0xf5c5, 0xf5c6, /*0xd0-0xd7*/
-  0xdb41, 0xdb42, 0xf5c7, 0xf5cb, 0xdb43, 0xbee0, 0xf5c8, 0xb8fa, /*0xd8-0xdf*/
-  0xdb44, 0xdb45, 0xdb46, 0xf5d0, 0xf5d3, 0xdb47, 0xdb48, 0xdb49, /*0xe0-0xe7*/
-  0xbfe7, 0xdb4a, 0xb9f2, 0xf5bc, 0xf5cd, 0xdb4b, 0xdb4c, 0xc2b7, /*0xe8-0xef*/
-  0xdb4d, 0xdb4e, 0xdb4f, 0xccf8, 0xdb50, 0xbcf9, 0xdb51, 0xf5ce, /*0xf0-0xf7*/
-  0xf5cf, 0xf5d1, 0xb6e5, 0xf5d2, 0xdb52, 0xf5d5, 0xdb53, 0xdb54, /*0xf8-0xff*/
-  /* 0x8e00 */
-  0xdb55, 0xdb56, 0xdb57, 0xdb58, 0xdb59, 0xf5bd, 0xdb5a, 0xdb5b, /*0x00-0x07*/
-  0xdb5c, 0xf5d4, 0xd3bb, 0xdb5d, 0xb3ec, 0xdb5e, 0xdb5f, 0xcca4, /*0x08-0x0f*/
-  0xdb60, 0xdb61, 0xdb62, 0xdb63, 0xf5d6, 0xdb64, 0xdb65, 0xdb66, /*0x10-0x17*/
-  0xdb67, 0xdb68, 0xdb69, 0xdb6a, 0xdb6b, 0xf5d7, 0xbee1, 0xf5d8, /*0x18-0x1f*/
-  0xdb6c, 0xdb6d, 0xccdf, 0xf5db, 0xdb6e, 0xdb6f, 0xdb70, 0xdb71, /*0x20-0x27*/
-  0xdb72, 0xb2c8, 0xd7d9, 0xdb73, 0xf5d9, 0xdb74, 0xf5da, 0xf5dc, /*0x28-0x2f*/
-  0xdb75, 0xf5e2, 0xdb76, 0xdb77, 0xdb78, 0xf5e0, 0xdb79, 0xdb7a, /*0x30-0x37*/
-  0xdb7b, 0xf5df, 0xf5dd, 0xdb7c, 0xdb7d, 0xf5e1, 0xdb7e, 0xdb80, /*0x38-0x3f*/
-  0xf5de, 0xf5e4, 0xf5e5, 0xdb81, 0xcce3, 0xdb82, 0xdb83, 0xe5bf, /*0x40-0x47*/
-  0xb5b8, 0xf5e3, 0xf5e8, 0xcca3, 0xdb84, 0xdb85, 0xdb86, 0xdb87, /*0x48-0x4f*/
-  0xdb88, 0xf5e6, 0xf5e7, 0xdb89, 0xdb8a, 0xdb8b, 0xdb8c, 0xdb8d, /*0x50-0x57*/
-  0xdb8e, 0xf5be, 0xdb8f, 0xdb90, 0xdb91, 0xdb92, 0xdb93, 0xdb94, /*0x58-0x5f*/
-  0xdb95, 0xdb96, 0xdb97, 0xdb98, 0xdb99, 0xdb9a, 0xb1c4, 0xdb9b, /*0x60-0x67*/
-  0xdb9c, 0xf5bf, 0xdb9d, 0xdb9e, 0xb5c5, 0xb2e4, 0xdb9f, 0xf5ec, /*0x68-0x6f*/
-  0xf5e9, 0xdba0, 0xb6d7, 0xdc40, 0xf5ed, 0xdc41, 0xf5ea, 0xdc42, /*0x70-0x77*/
-  0xdc43, 0xdc44, 0xdc45, 0xdc46, 0xf5eb, 0xdc47, 0xdc48, 0xb4da, /*0x78-0x7f*/
-  0xdc49, 0xd4ea, 0xdc4a, 0xdc4b, 0xdc4c, 0xf5ee, 0xdc4d, 0xb3f9, /*0x80-0x87*/
-  0xdc4e, 0xdc4f, 0xdc50, 0xdc51, 0xdc52, 0xdc53, 0xdc54, 0xf5ef, /*0x88-0x8f*/
-  0xf5f1, 0xdc55, 0xdc56, 0xdc57, 0xf5f0, 0xdc58, 0xdc59, 0xdc5a, /*0x90-0x97*/
-  0xdc5b, 0xdc5c, 0xdc5d, 0xdc5e, 0xf5f2, 0xdc5f, 0xf5f3, 0xdc60, /*0x98-0x9f*/
-  0xdc61, 0xdc62, 0xdc63, 0xdc64, 0xdc65, 0xdc66, 0xdc67, 0xdc68, /*0xa0-0xa7*/
-  0xdc69, 0xdc6a, 0xdc6b, 0xc9ed, 0xb9aa, 0xdc6c, 0xdc6d, 0xc7fb, /*0xa8-0xaf*/
-  0xdc6e, 0xdc6f, 0xb6e3, 0xdc70, 0xdc71, 0xdc72, 0xdc73, 0xdc74, /*0xb0-0xb7*/
-  0xdc75, 0xdc76, 0xccc9, 0xdc77, 0xdc78, 0xdc79, 0xdc7a, 0xdc7b, /*0xb8-0xbf*/
-  0xdc7c, 0xdc7d, 0xdc7e, 0xdc80, 0xdc81, 0xdc82, 0xdc83, 0xdc84, /*0xc0-0xc7*/
-  0xdc85, 0xdc86, 0xdc87, 0xdc88, 0xdc89, 0xdc8a, 0xeaa6, 0xdc8b, /*0xc8-0xcf*/
-  0xdc8c, 0xdc8d, 0xdc8e, 0xdc8f, 0xdc90, 0xdc91, 0xdc92, 0xdc93, /*0xd0-0xd7*/
-  0xdc94, 0xdc95, 0xdc96, 0xdc97, 0xdc98, 0xdc99, 0xdc9a, 0xdc9b, /*0xd8-0xdf*/
-  0xdc9c, 0xdc9d, 0xdc9e, 0xdc9f, 0xdca0, 0xdd40, 0xdd41, 0xdd42, /*0xe0-0xe7*/
-  0xdd43, 0xdd44, 0xdd45, 0xdd46, 0xdd47, 0xdd48, 0xdd49, 0xdd4a, /*0xe8-0xef*/
-  0xdd4b, 0xdd4c, 0xdd4d, 0xdd4e, 0xdd4f, 0xdd50, 0xdd51, 0xdd52, /*0xf0-0xf7*/
-  0xdd53, 0xdd54, 0xdd55, 0xdd56, 0xdd57, 0xdd58, 0xdd59, 0xdd5a, /*0xf8-0xff*/
-  /* 0x8f00 */
-  0xdd5b, 0xdd5c, 0xdd5d, 0xdd5e, 0xdd5f, 0xdd60, 0xdd61, 0xdd62, /*0x00-0x07*/
-  0xdd63, 0xdd64, 0xdd65, 0xdd66, 0xdd67, 0xdd68, 0xdd69, 0xdd6a, /*0x08-0x0f*/
-  0xdd6b, 0xdd6c, 0xdd6d, 0xdd6e, 0xdd6f, 0xdd70, 0xdd71, 0xdd72, /*0x10-0x17*/
-  0xdd73, 0xdd74, 0xdd75, 0xdd76, 0xdd77, 0xdd78, 0xdd79, 0xdd7a, /*0x18-0x1f*/
-  0xdd7b, 0xdd7c, 0xdd7d, 0xdd7e, 0xdd80, 0xdd81, 0xdd82, 0xdd83, /*0x20-0x27*/
-  0xdd84, 0xdd85, 0xdd86, 0xdd87, 0xdd88, 0xdd89, 0xdd8a, 0xdd8b, /*0x28-0x2f*/
-  0xdd8c, 0xdd8d, 0xdd8e, 0xdd8f, 0xdd90, 0xdd91, 0xdd92, 0xdd93, /*0x30-0x37*/
-  0xdd94, 0xdd95, 0xdd96, 0xdd97, 0xdd98, 0xdd99, 0xdd9a, 0xdd9b, /*0x38-0x3f*/
-  0xdd9c, 0xdd9d, 0xdd9e, 0xdd9f, 0xdda0, 0xde40, 0xde41, 0xde42, /*0x40-0x47*/
-  0xde43, 0xde44, 0xde45, 0xde46, 0xde47, 0xde48, 0xde49, 0xde4a, /*0x48-0x4f*/
-  0xde4b, 0xde4c, 0xde4d, 0xde4e, 0xde4f, 0xde50, 0xde51, 0xde52, /*0x50-0x57*/
-  0xde53, 0xde54, 0xde55, 0xde56, 0xde57, 0xde58, 0xde59, 0xde5a, /*0x58-0x5f*/
-  0xde5b, 0xde5c, 0xde5d, 0xde5e, 0xde5f, 0xde60, 0xb3b5, 0xd4fe, /*0x60-0x67*/
-  0xb9ec, 0xd0f9, 0xde61, 0xe9ed, 0xd7aa, 0xe9ee, 0xc2d6, 0xc8ed, /*0x68-0x6f*/
-  0xbae4, 0xe9ef, 0xe9f0, 0xe9f1, 0xd6e1, 0xe9f2, 0xe9f3, 0xe9f5, /*0x70-0x77*/
-  0xe9f4, 0xe9f6, 0xe9f7, 0xc7e1, 0xe9f8, 0xd4d8, 0xe9f9, 0xbdce, /*0x78-0x7f*/
-  0xde62, 0xe9fa, 0xe9fb, 0xbdcf, 0xe9fc, 0xb8a8, 0xc1be, 0xe9fd, /*0x80-0x87*/
-  0xb1b2, 0xbbd4, 0xb9f5, 0xe9fe, 0xde63, 0xeaa1, 0xeaa2, 0xeaa3, /*0x88-0x8f*/
-  0xb7f8, 0xbcad, 0xde64, 0xcae4, 0xe0ce, 0xd4af, 0xcfbd, 0xd5b7, /*0x90-0x97*/
-  0xeaa4, 0xd5de, 0xeaa5, 0xd0c1, 0xb9bc, 0xde65, 0xb4c7, 0xb1d9, /*0x98-0x9f*/
-  0xde66, 0xde67, 0xde68, 0xc0b1, 0xde69, 0xde6a, 0xde6b, 0xde6c, /*0xa0-0xa7*/
-  0xb1e6, 0xb1e7, 0xde6d, 0xb1e8, 0xde6e, 0xde6f, 0xde70, 0xde71, /*0xa8-0xaf*/
-  0xb3bd, 0xc8e8, 0xde72, 0xde73, 0xde74, 0xde75, 0xe5c1, 0xde76, /*0xb0-0xb7*/
-  0xde77, 0xb1df, 0xde78, 0xde79, 0xde7a, 0xc1c9, 0xb4ef, 0xde7b, /*0xb8-0xbf*/
-  0xde7c, 0xc7a8, 0xd3d8, 0xde7d, 0xc6f9, 0xd1b8, 0xde7e, 0xb9fd, /*0xc0-0xc7*/
-  0xc2f5, 0xde80, 0xde81, 0xde82, 0xde83, 0xde84, 0xd3ad, 0xde85, /*0xc8-0xcf*/
-  0xd4cb, 0xbdfc, 0xde86, 0xe5c2, 0xb7b5, 0xe5c3, 0xde87, 0xde88, /*0xd0-0xd7*/
-  0xbbb9, 0xd5e2, 0xde89, 0xbdf8, 0xd4b6, 0xcea5, 0xc1ac, 0xb3d9, /*0xd8-0xdf*/
-  0xde8a, 0xde8b, 0xccf6, 0xde8c, 0xe5c6, 0xe5c4, 0xe5c8, 0xde8d, /*0xe0-0xe7*/
-  0xe5ca, 0xe5c7, 0xb5cf, 0xc6c8, 0xde8e, 0xb5fc, 0xe5c5, 0xde8f, /*0xe8-0xef*/
-  0xcaf6, 0xde90, 0xde91, 0xe5c9, 0xde92, 0xde93, 0xde94, 0xc3d4, /*0xf0-0xf7*/
-  0xb1c5, 0xbca3, 0xde95, 0xde96, 0xde97, 0xd7b7, 0xde98, 0xde99, /*0xf8-0xff*/
-  /* 0x9000 */
-  0xcdcb, 0xcbcd, 0xcaca, 0xccd3, 0xe5cc, 0xe5cb, 0xc4e6, 0xde9a, /*0x00-0x07*/
-  0xde9b, 0xd1a1, 0xd1b7, 0xe5cd, 0xde9c, 0xe5d0, 0xde9d, 0xcdb8, /*0x08-0x0f*/
-  0xd6f0, 0xe5cf, 0xb5dd, 0xde9e, 0xcdbe, 0xde9f, 0xe5d1, 0xb6ba, /*0x10-0x17*/
-  0xdea0, 0xdf40, 0xcda8, 0xb9e4, 0xdf41, 0xcac5, 0xb3d1, 0xcbd9, /*0x18-0x1f*/
-  0xd4ec, 0xe5d2, 0xb7ea, 0xdf42, 0xdf43, 0xdf44, 0xe5ce, 0xdf45, /*0x20-0x27*/
-  0xdf46, 0xdf47, 0xdf48, 0xdf49, 0xdf4a, 0xe5d5, 0xb4fe, 0xe5d6, /*0x28-0x2f*/
-  0xdf4b, 0xdf4c, 0xdf4d, 0xdf4e, 0xdf4f, 0xe5d3, 0xe5d4, 0xdf50, /*0x30-0x37*/
-  0xd2dd, 0xdf51, 0xdf52, 0xc2df, 0xb1c6, 0xdf53, 0xd3e2, 0xdf54, /*0x38-0x3f*/
-  0xdf55, 0xb6dd, 0xcbec, 0xdf56, 0xe5d7, 0xdf57, 0xdf58, 0xd3f6, /*0x40-0x47*/
-  0xdf59, 0xdf5a, 0xdf5b, 0xdf5c, 0xdf5d, 0xb1e9, 0xdf5e, 0xb6f4, /*0x48-0x4f*/
-  0xe5da, 0xe5d8, 0xe5d9, 0xb5c0, 0xdf5f, 0xdf60, 0xdf61, 0xd2c5, /*0x50-0x57*/
-  0xe5dc, 0xdf62, 0xdf63, 0xe5de, 0xdf64, 0xdf65, 0xdf66, 0xdf67, /*0x58-0x5f*/
-  0xdf68, 0xdf69, 0xe5dd, 0xc7b2, 0xdf6a, 0xd2a3, 0xdf6b, 0xdf6c, /*0x60-0x67*/
-  0xe5db, 0xdf6d, 0xdf6e, 0xdf6f, 0xdf70, 0xd4e2, 0xd5da, 0xdf71, /*0x68-0x6f*/
-  0xdf72, 0xdf73, 0xdf74, 0xdf75, 0xe5e0, 0xd7f1, 0xdf76, 0xdf77, /*0x70-0x77*/
-  0xdf78, 0xdf79, 0xdf7a, 0xdf7b, 0xdf7c, 0xe5e1, 0xdf7d, 0xb1dc, /*0x78-0x7f*/
-  0xd1fb, 0xdf7e, 0xe5e2, 0xe5e4, 0xdf80, 0xdf81, 0xdf82, 0xdf83, /*0x80-0x87*/
-  0xe5e3, 0xdf84, 0xdf85, 0xe5e5, 0xdf86, 0xdf87, 0xdf88, 0xdf89, /*0x88-0x8f*/
-  0xdf8a, 0xd2d8, 0xdf8b, 0xb5cb, 0xdf8c, 0xe7df, 0xdf8d, 0xdaf5, /*0x90-0x97*/
-  0xdf8e, 0xdaf8, 0xdf8f, 0xdaf6, 0xdf90, 0xdaf7, 0xdf91, 0xdf92, /*0x98-0x9f*/
-  0xdf93, 0xdafa, 0xd0cf, 0xc4c7, 0xdf94, 0xdf95, 0xb0ee, 0xdf96, /*0xa0-0xa7*/
-  0xdf97, 0xdf98, 0xd0b0, 0xdf99, 0xdaf9, 0xdf9a, 0xd3ca, 0xbaaa, /*0xa8-0xaf*/
-  0xdba2, 0xc7f1, 0xdf9b, 0xdafc, 0xdafb, 0xc9db, 0xdafd, 0xdf9c, /*0xb0-0xb7*/
-  0xdba1, 0xd7de, 0xdafe, 0xc1da, 0xdf9d, 0xdf9e, 0xdba5, 0xdf9f, /*0xb8-0xbf*/
-  0xdfa0, 0xd3f4, 0xe040, 0xe041, 0xdba7, 0xdba4, 0xe042, 0xdba8, /*0xc0-0xc7*/
-  0xe043, 0xe044, 0xbdbc, 0xe045, 0xe046, 0xe047, 0xc0c9, 0xdba3, /*0xc8-0xcf*/
-  0xdba6, 0xd6a3, 0xe048, 0xdba9, 0xe049, 0xe04a, 0xe04b, 0xdbad, /*0xd0-0xd7*/
-  0xe04c, 0xe04d, 0xe04e, 0xdbae, 0xdbac, 0xbac2, 0xe04f, 0xe050, /*0xd8-0xdf*/
-  0xe051, 0xbfa4, 0xdbab, 0xe052, 0xe053, 0xe054, 0xdbaa, 0xd4c7, /*0xe0-0xe7*/
-  0xb2bf, 0xe055, 0xe056, 0xdbaf, 0xe057, 0xb9f9, 0xe058, 0xdbb0, /*0xe8-0xef*/
-  0xe059, 0xe05a, 0xe05b, 0xe05c, 0xb3bb, 0xe05d, 0xe05e, 0xe05f, /*0xf0-0xf7*/
-  0xb5a6, 0xe060, 0xe061, 0xe062, 0xe063, 0xb6bc, 0xdbb1, 0xe064, /*0xf8-0xff*/
-  /* 0x9100 */
-  0xe065, 0xe066, 0xb6f5, 0xe067, 0xdbb2, 0xe068, 0xe069, 0xe06a, /*0x00-0x07*/
-  0xe06b, 0xe06c, 0xe06d, 0xe06e, 0xe06f, 0xe070, 0xe071, 0xe072, /*0x08-0x0f*/
-  0xe073, 0xe074, 0xe075, 0xe076, 0xe077, 0xe078, 0xe079, 0xe07a, /*0x10-0x17*/
-  0xe07b, 0xb1c9, 0xe07c, 0xe07d, 0xe07e, 0xe080, 0xdbb4, 0xe081, /*0x18-0x1f*/
-  0xe082, 0xe083, 0xdbb3, 0xdbb5, 0xe084, 0xe085, 0xe086, 0xe087, /*0x20-0x27*/
-  0xe088, 0xe089, 0xe08a, 0xe08b, 0xe08c, 0xe08d, 0xe08e, 0xdbb7, /*0x28-0x2f*/
-  0xe08f, 0xdbb6, 0xe090, 0xe091, 0xe092, 0xe093, 0xe094, 0xe095, /*0x30-0x37*/
-  0xe096, 0xdbb8, 0xe097, 0xe098, 0xe099, 0xe09a, 0xe09b, 0xe09c, /*0x38-0x3f*/
-  0xe09d, 0xe09e, 0xe09f, 0xdbb9, 0xe0a0, 0xe140, 0xdbba, 0xe141, /*0x40-0x47*/
-  0xe142, 0xd3cf, 0xf4fa, 0xc7f5, 0xd7c3, 0xc5e4, 0xf4fc, 0xf4fd, /*0x48-0x4f*/
-  0xf4fb, 0xe143, 0xbec6, 0xe144, 0xe145, 0xe146, 0xe147, 0xd0ef, /*0x50-0x57*/
-  0xe148, 0xe149, 0xb7d3, 0xe14a, 0xe14b, 0xd4cd, 0xccaa, 0xe14c, /*0x58-0x5f*/
-  0xe14d, 0xf5a2, 0xf5a1, 0xbaa8, 0xf4fe, 0xcbd6, 0xe14e, 0xe14f, /*0x60-0x67*/
-  0xe150, 0xf5a4, 0xc0d2, 0xe151, 0xb3ea, 0xe152, 0xcdaa, 0xf5a5, /*0x68-0x6f*/
-  0xf5a3, 0xbdb4, 0xf5a8, 0xe153, 0xf5a9, 0xbdcd, 0xc3b8, 0xbfe1, /*0x70-0x77*/
-  0xcbe1, 0xf5aa, 0xe154, 0xe155, 0xe156, 0xf5a6, 0xf5a7, 0xc4f0, /*0x78-0x7f*/
-  0xe157, 0xe158, 0xe159, 0xe15a, 0xe15b, 0xf5ac, 0xe15c, 0xb4bc, /*0x80-0x87*/
-  0xe15d, 0xd7ed, 0xe15e, 0xb4d7, 0xf5ab, 0xf5ae, 0xe15f, 0xe160, /*0x88-0x8f*/
-  0xf5ad, 0xf5af, 0xd0d1, 0xe161, 0xe162, 0xe163, 0xe164, 0xe165, /*0x90-0x97*/
-  0xe166, 0xe167, 0xc3d1, 0xc8a9, 0xe168, 0xe169, 0xe16a, 0xe16b, /*0x98-0x9f*/
-  0xe16c, 0xe16d, 0xf5b0, 0xf5b1, 0xe16e, 0xe16f, 0xe170, 0xe171, /*0xa0-0xa7*/
-  0xe172, 0xe173, 0xf5b2, 0xe174, 0xe175, 0xf5b3, 0xf5b4, 0xf5b5, /*0xa8-0xaf*/
-  0xe176, 0xe177, 0xe178, 0xe179, 0xf5b7, 0xf5b6, 0xe17a, 0xe17b, /*0xb0-0xb7*/
-  0xe17c, 0xe17d, 0xf5b8, 0xe17e, 0xe180, 0xe181, 0xe182, 0xe183, /*0xb8-0xbf*/
-  0xe184, 0xe185, 0xe186, 0xe187, 0xe188, 0xe189, 0xe18a, 0xb2c9, /*0xc0-0xc7*/
-  0xe18b, 0xd3d4, 0xcacd, 0xe18c, 0xc0ef, 0xd6d8, 0xd2b0, 0xc1bf, /*0xc8-0xcf*/
-  0xe18d, 0xbdf0, 0xe18e, 0xe18f, 0xe190, 0xe191, 0xe192, 0xe193, /*0xd0-0xd7*/
-  0xe194, 0xe195, 0xe196, 0xe197, 0xb8aa, 0xe198, 0xe199, 0xe19a, /*0xd8-0xdf*/
-  0xe19b, 0xe19c, 0xe19d, 0xe19e, 0xe19f, 0xe1a0, 0xe240, 0xe241, /*0xe0-0xe7*/
-  0xe242, 0xe243, 0xe244, 0xe245, 0xe246, 0xe247, 0xe248, 0xe249, /*0xe8-0xef*/
-  0xe24a, 0xe24b, 0xe24c, 0xe24d, 0xe24e, 0xe24f, 0xe250, 0xe251, /*0xf0-0xf7*/
-  0xe252, 0xe253, 0xe254, 0xe255, 0xe256, 0xe257, 0xe258, 0xe259, /*0xf8-0xff*/
-  /* 0x9200 */
-  0xe25a, 0xe25b, 0xe25c, 0xe25d, 0xe25e, 0xe25f, 0xe260, 0xe261, /*0x00-0x07*/
-  0xe262, 0xe263, 0xe264, 0xe265, 0xe266, 0xe267, 0xe268, 0xe269, /*0x08-0x0f*/
-  0xe26a, 0xe26b, 0xe26c, 0xe26d, 0xe26e, 0xe26f, 0xe270, 0xe271, /*0x10-0x17*/
-  0xe272, 0xe273, 0xe274, 0xe275, 0xe276, 0xe277, 0xe278, 0xe279, /*0x18-0x1f*/
-  0xe27a, 0xe27b, 0xe27c, 0xe27d, 0xe27e, 0xe280, 0xe281, 0xe282, /*0x20-0x27*/
-  0xe283, 0xe284, 0xe285, 0xe286, 0xe287, 0xe288, 0xe289, 0xe28a, /*0x28-0x2f*/
-  0xe28b, 0xe28c, 0xe28d, 0xe28e, 0xe28f, 0xe290, 0xe291, 0xe292, /*0x30-0x37*/
-  0xe293, 0xe294, 0xe295, 0xe296, 0xe297, 0xe298, 0xe299, 0xe29a, /*0x38-0x3f*/
-  0xe29b, 0xe29c, 0xe29d, 0xe29e, 0xe29f, 0xe2a0, 0xe340, 0xe341, /*0x40-0x47*/
-  0xe342, 0xe343, 0xe344, 0xe345, 0xe346, 0xe347, 0xe348, 0xe349, /*0x48-0x4f*/
-  0xe34a, 0xe34b, 0xe34c, 0xe34d, 0xe34e, 0xe34f, 0xe350, 0xe351, /*0x50-0x57*/
-  0xe352, 0xe353, 0xe354, 0xe355, 0xe356, 0xe357, 0xe358, 0xe359, /*0x58-0x5f*/
-  0xe35a, 0xe35b, 0xe35c, 0xe35d, 0xe35e, 0xe35f, 0xe360, 0xe361, /*0x60-0x67*/
-  0xe362, 0xe363, 0xe364, 0xe365, 0xe366, 0xe367, 0xe368, 0xe369, /*0x68-0x6f*/
-  0xe36a, 0xe36b, 0xe36c, 0xe36d, 0xbcf8, 0xe36e, 0xe36f, 0xe370, /*0x70-0x77*/
-  0xe371, 0xe372, 0xe373, 0xe374, 0xe375, 0xe376, 0xe377, 0xe378, /*0x78-0x7f*/
-  0xe379, 0xe37a, 0xe37b, 0xe37c, 0xe37d, 0xe37e, 0xe380, 0xe381, /*0x80-0x87*/
-  0xe382, 0xe383, 0xe384, 0xe385, 0xe386, 0xe387, 0xf6c6, 0xe388, /*0x88-0x8f*/
-  0xe389, 0xe38a, 0xe38b, 0xe38c, 0xe38d, 0xe38e, 0xe38f, 0xe390, /*0x90-0x97*/
-  0xe391, 0xe392, 0xe393, 0xe394, 0xe395, 0xe396, 0xe397, 0xe398, /*0x98-0x9f*/
-  0xe399, 0xe39a, 0xe39b, 0xe39c, 0xe39d, 0xe39e, 0xe39f, 0xe3a0, /*0xa0-0xa7*/
-  0xe440, 0xe441, 0xe442, 0xe443, 0xe444, 0xe445, 0xf6c7, 0xe446, /*0xa8-0xaf*/
-  0xe447, 0xe448, 0xe449, 0xe44a, 0xe44b, 0xe44c, 0xe44d, 0xe44e, /*0xb0-0xb7*/
-  0xe44f, 0xe450, 0xe451, 0xe452, 0xe453, 0xe454, 0xe455, 0xe456, /*0xb8-0xbf*/
-  0xe457, 0xe458, 0xe459, 0xe45a, 0xe45b, 0xe45c, 0xe45d, 0xe45e, /*0xc0-0xc7*/
-  0xf6c8, 0xe45f, 0xe460, 0xe461, 0xe462, 0xe463, 0xe464, 0xe465, /*0xc8-0xcf*/
-  0xe466, 0xe467, 0xe468, 0xe469, 0xe46a, 0xe46b, 0xe46c, 0xe46d, /*0xd0-0xd7*/
-  0xe46e, 0xe46f, 0xe470, 0xe471, 0xe472, 0xe473, 0xe474, 0xe475, /*0xd8-0xdf*/
-  0xe476, 0xe477, 0xe478, 0xe479, 0xe47a, 0xe47b, 0xe47c, 0xe47d, /*0xe0-0xe7*/
-  0xe47e, 0xe480, 0xe481, 0xe482, 0xe483, 0xe484, 0xe485, 0xe486, /*0xe8-0xef*/
-  0xe487, 0xe488, 0xe489, 0xe48a, 0xe48b, 0xe48c, 0xe48d, 0xe48e, /*0xf0-0xf7*/
-  0xe48f, 0xe490, 0xe491, 0xe492, 0xe493, 0xe494, 0xe495, 0xe496, /*0xf8-0xff*/
-  /* 0x9300 */
-  0xe497, 0xe498, 0xe499, 0xe49a, 0xe49b, 0xe49c, 0xe49d, 0xe49e, /*0x00-0x07*/
-  0xe49f, 0xe4a0, 0xe540, 0xe541, 0xe542, 0xe543, 0xe544, 0xe545, /*0x08-0x0f*/
-  0xe546, 0xe547, 0xe548, 0xe549, 0xe54a, 0xe54b, 0xe54c, 0xe54d, /*0x10-0x17*/
-  0xe54e, 0xe54f, 0xe550, 0xe551, 0xe552, 0xe553, 0xe554, 0xe555, /*0x18-0x1f*/
-  0xe556, 0xe557, 0xe558, 0xe559, 0xe55a, 0xe55b, 0xe55c, 0xe55d, /*0x20-0x27*/
-  0xe55e, 0xe55f, 0xe560, 0xe561, 0xe562, 0xe563, 0xe564, 0xe565, /*0x28-0x2f*/
-  0xe566, 0xe567, 0xe568, 0xe569, 0xe56a, 0xe56b, 0xe56c, 0xe56d, /*0x30-0x37*/
-  0xe56e, 0xe56f, 0xe570, 0xe571, 0xe572, 0xe573, 0xf6c9, 0xe574, /*0x38-0x3f*/
-  0xe575, 0xe576, 0xe577, 0xe578, 0xe579, 0xe57a, 0xe57b, 0xe57c, /*0x40-0x47*/
-  0xe57d, 0xe57e, 0xe580, 0xe581, 0xe582, 0xe583, 0xe584, 0xe585, /*0x48-0x4f*/
-  0xe586, 0xe587, 0xe588, 0xe589, 0xe58a, 0xe58b, 0xe58c, 0xe58d, /*0x50-0x57*/
-  0xe58e, 0xe58f, 0xe590, 0xe591, 0xe592, 0xe593, 0xe594, 0xe595, /*0x58-0x5f*/
-  0xe596, 0xe597, 0xe598, 0xe599, 0xe59a, 0xe59b, 0xe59c, 0xe59d, /*0x60-0x67*/
-  0xe59e, 0xe59f, 0xf6ca, 0xe5a0, 0xe640, 0xe641, 0xe642, 0xe643, /*0x68-0x6f*/
-  0xe644, 0xe645, 0xe646, 0xe647, 0xe648, 0xe649, 0xe64a, 0xe64b, /*0x70-0x77*/
-  0xe64c, 0xe64d, 0xe64e, 0xe64f, 0xe650, 0xe651, 0xe652, 0xe653, /*0x78-0x7f*/
-  0xe654, 0xe655, 0xe656, 0xe657, 0xe658, 0xe659, 0xe65a, 0xe65b, /*0x80-0x87*/
-  0xe65c, 0xe65d, 0xe65e, 0xe65f, 0xe660, 0xe661, 0xe662, 0xf6cc, /*0x88-0x8f*/
-  0xe663, 0xe664, 0xe665, 0xe666, 0xe667, 0xe668, 0xe669, 0xe66a, /*0x90-0x97*/
-  0xe66b, 0xe66c, 0xe66d, 0xe66e, 0xe66f, 0xe670, 0xe671, 0xe672, /*0x98-0x9f*/
-  0xe673, 0xe674, 0xe675, 0xe676, 0xe677, 0xe678, 0xe679, 0xe67a, /*0xa0-0xa7*/
-  0xe67b, 0xe67c, 0xe67d, 0xe67e, 0xe680, 0xe681, 0xe682, 0xe683, /*0xa8-0xaf*/
-  0xe684, 0xe685, 0xe686, 0xe687, 0xe688, 0xe689, 0xe68a, 0xe68b, /*0xb0-0xb7*/
-  0xe68c, 0xe68d, 0xe68e, 0xe68f, 0xe690, 0xe691, 0xe692, 0xe693, /*0xb8-0xbf*/
-  0xe694, 0xe695, 0xe696, 0xe697, 0xe698, 0xe699, 0xe69a, 0xe69b, /*0xc0-0xc7*/
-  0xe69c, 0xe69d, 0xf6cb, 0xe69e, 0xe69f, 0xe6a0, 0xe740, 0xe741, /*0xc8-0xcf*/
-  0xe742, 0xe743, 0xe744, 0xe745, 0xe746, 0xe747, 0xf7e9, 0xe748, /*0xd0-0xd7*/
-  0xe749, 0xe74a, 0xe74b, 0xe74c, 0xe74d, 0xe74e, 0xe74f, 0xe750, /*0xd8-0xdf*/
-  0xe751, 0xe752, 0xe753, 0xe754, 0xe755, 0xe756, 0xe757, 0xe758, /*0xe0-0xe7*/
-  0xe759, 0xe75a, 0xe75b, 0xe75c, 0xe75d, 0xe75e, 0xe75f, 0xe760, /*0xe8-0xef*/
-  0xe761, 0xe762, 0xe763, 0xe764, 0xe765, 0xe766, 0xe767, 0xe768, /*0xf0-0xf7*/
-  0xe769, 0xe76a, 0xe76b, 0xe76c, 0xe76d, 0xe76e, 0xe76f, 0xe770, /*0xf8-0xff*/
-  /* 0x9400 */
-  0xe771, 0xe772, 0xe773, 0xe774, 0xe775, 0xe776, 0xe777, 0xe778, /*0x00-0x07*/
-  0xe779, 0xe77a, 0xe77b, 0xe77c, 0xe77d, 0xe77e, 0xe780, 0xe781, /*0x08-0x0f*/
-  0xe782, 0xe783, 0xe784, 0xe785, 0xe786, 0xe787, 0xe788, 0xe789, /*0x10-0x17*/
-  0xe78a, 0xe78b, 0xe78c, 0xe78d, 0xe78e, 0xe78f, 0xe790, 0xe791, /*0x18-0x1f*/
-  0xe792, 0xe793, 0xe794, 0xe795, 0xe796, 0xe797, 0xe798, 0xe799, /*0x20-0x27*/
-  0xe79a, 0xe79b, 0xe79c, 0xe79d, 0xe79e, 0xe79f, 0xe7a0, 0xe840, /*0x28-0x2f*/
-  0xe841, 0xe842, 0xe843, 0xe844, 0xe845, 0xe846, 0xe847, 0xe848, /*0x30-0x37*/
-  0xe849, 0xe84a, 0xe84b, 0xe84c, 0xe84d, 0xe84e, 0xf6cd, 0xe84f, /*0x38-0x3f*/
-  0xe850, 0xe851, 0xe852, 0xe853, 0xe854, 0xe855, 0xe856, 0xe857, /*0x40-0x47*/
-  0xe858, 0xe859, 0xe85a, 0xe85b, 0xe85c, 0xe85d, 0xe85e, 0xe85f, /*0x48-0x4f*/
-  0xe860, 0xe861, 0xe862, 0xe863, 0xe864, 0xe865, 0xe866, 0xe867, /*0x50-0x57*/
-  0xe868, 0xe869, 0xe86a, 0xe86b, 0xe86c, 0xe86d, 0xe86e, 0xe86f, /*0x58-0x5f*/
-  0xe870, 0xe871, 0xe872, 0xe873, 0xe874, 0xe875, 0xe876, 0xe877, /*0x60-0x67*/
-  0xe878, 0xe879, 0xe87a, 0xf6ce, 0xe87b, 0xe87c, 0xe87d, 0xe87e, /*0x68-0x6f*/
-  0xe880, 0xe881, 0xe882, 0xe883, 0xe884, 0xe885, 0xe886, 0xe887, /*0x70-0x77*/
-  0xe888, 0xe889, 0xe88a, 0xe88b, 0xe88c, 0xe88d, 0xe88e, 0xe88f, /*0x78-0x7f*/
-  0xe890, 0xe891, 0xe892, 0xe893, 0xe894, 0xeec4, 0xeec5, 0xeec6, /*0x80-0x87*/
-  0xd5eb, 0xb6a4, 0xeec8, 0xeec7, 0xeec9, 0xeeca, 0xc7a5, 0xeecb, /*0x88-0x8f*/
-  0xeecc, 0xe895, 0xb7b0, 0xb5f6, 0xeecd, 0xeecf, 0xe896, 0xeece, /*0x90-0x97*/
-  0xe897, 0xb8c6, 0xeed0, 0xeed1, 0xeed2, 0xb6db, 0xb3ae, 0xd6d3, /*0x98-0x9f*/
-  0xc4c6, 0xb1b5, 0xb8d6, 0xeed3, 0xeed4, 0xd4bf, 0xc7d5, 0xbefb, /*0xa0-0xa7*/
-  0xced9, 0xb9b3, 0xeed6, 0xeed5, 0xeed8, 0xeed7, 0xc5a5, 0xeed9, /*0xa8-0xaf*/
-  0xeeda, 0xc7ae, 0xeedb, 0xc7af, 0xeedc, 0xb2a7, 0xeedd, 0xeede, /*0xb0-0xb7*/
-  0xeedf, 0xeee0, 0xeee1, 0xd7ea, 0xeee2, 0xeee3, 0xbcd8, 0xeee4, /*0xb8-0xbf*/
-  0xd3cb, 0xccfa, 0xb2ac, 0xc1e5, 0xeee5, 0xc7a6, 0xc3ad, 0xe898, /*0xc0-0xc7*/
-  0xeee6, 0xeee7, 0xeee8, 0xeee9, 0xeeea, 0xeeeb, 0xeeec, 0xe899, /*0xc8-0xcf*/
-  0xeeed, 0xeeee, 0xeeef, 0xe89a, 0xe89b, 0xeef0, 0xeef1, 0xeef2, /*0xd0-0xd7*/
-  0xeef4, 0xeef3, 0xe89c, 0xeef5, 0xcdad, 0xc2c1, 0xeef6, 0xeef7, /*0xd8-0xdf*/
-  0xeef8, 0xd5a1, 0xeef9, 0xcfb3, 0xeefa, 0xeefb, 0xe89d, 0xeefc, /*0xe0-0xe7*/
-  0xeefd, 0xefa1, 0xeefe, 0xefa2, 0xb8f5, 0xc3fa, 0xefa3, 0xefa4, /*0xe8-0xef*/
-  0xbdc2, 0xd2bf, 0xb2f9, 0xefa5, 0xefa6, 0xefa7, 0xd2f8, 0xefa8, /*0xf0-0xf7*/
-  0xd6fd, 0xefa9, 0xc6cc, 0xe89e, 0xefaa, 0xefab, 0xc1b4, 0xefac, /*0xf8-0xff*/
-  /* 0x9500 */
-  0xcffa, 0xcbf8, 0xefae, 0xefad, 0xb3fa, 0xb9f8, 0xefaf, 0xefb0, /*0x00-0x07*/
-  0xd0e2, 0xefb1, 0xefb2, 0xb7e6, 0xd0bf, 0xefb3, 0xefb4, 0xefb5, /*0x08-0x0f*/
-  0xc8f1, 0xcce0, 0xefb6, 0xefb7, 0xefb8, 0xefb9, 0xefba, 0xd5e0, /*0x10-0x17*/
-  0xefbb, 0xb4ed, 0xc3aa, 0xefbc, 0xe89f, 0xefbd, 0xefbe, 0xefbf, /*0x18-0x1f*/
-  0xe8a0, 0xcefd, 0xefc0, 0xc2e0, 0xb4b8, 0xd7b6, 0xbdf5, 0xe940, /*0x20-0x27*/
-  0xcfc7, 0xefc3, 0xefc1, 0xefc2, 0xefc4, 0xb6a7, 0xbcfc, 0xbee2, /*0x28-0x2f*/
-  0xc3cc, 0xefc5, 0xefc6, 0xe941, 0xefc7, 0xefcf, 0xefc8, 0xefc9, /*0x30-0x37*/
-  0xefca, 0xc7c2, 0xeff1, 0xb6cd, 0xefcb, 0xe942, 0xefcc, 0xefcd, /*0x38-0x3f*/
-  0xb6c6, 0xc3be, 0xefce, 0xe943, 0xefd0, 0xefd1, 0xefd2, 0xd5f2, /*0x40-0x47*/
-  0xe944, 0xefd3, 0xc4f7, 0xe945, 0xefd4, 0xc4f8, 0xefd5, 0xefd6, /*0x48-0x4f*/
-  0xb8e4, 0xb0f7, 0xefd7, 0xefd8, 0xefd9, 0xe946, 0xefda, 0xefdb, /*0x50-0x57*/
-  0xefdc, 0xefdd, 0xe947, 0xefde, 0xbeb5, 0xefe1, 0xefdf, 0xefe0, /*0x58-0x5f*/
-  0xe948, 0xefe2, 0xefe3, 0xc1cd, 0xefe4, 0xefe5, 0xefe6, 0xefe7, /*0x60-0x67*/
-  0xefe8, 0xefe9, 0xefea, 0xefeb, 0xefec, 0xc0d8, 0xe949, 0xefed, /*0x68-0x6f*/
-  0xc1ad, 0xefee, 0xefef, 0xeff0, 0xe94a, 0xe94b, 0xcfe2, 0xe94c, /*0x70-0x77*/
-  0xe94d, 0xe94e, 0xe94f, 0xe950, 0xe951, 0xe952, 0xe953, 0xb3a4, /*0x78-0x7f*/
-  0xe954, 0xe955, 0xe956, 0xe957, 0xe958, 0xe959, 0xe95a, 0xe95b, /*0x80-0x87*/
-  0xe95c, 0xe95d, 0xe95e, 0xe95f, 0xe960, 0xe961, 0xe962, 0xe963, /*0x88-0x8f*/
-  0xe964, 0xe965, 0xe966, 0xe967, 0xe968, 0xe969, 0xe96a, 0xe96b, /*0x90-0x97*/
-  0xe96c, 0xe96d, 0xe96e, 0xe96f, 0xe970, 0xe971, 0xe972, 0xe973, /*0x98-0x9f*/
-  0xe974, 0xe975, 0xe976, 0xe977, 0xe978, 0xe979, 0xe97a, 0xe97b, /*0xa0-0xa7*/
-  0xe97c, 0xe97d, 0xe97e, 0xe980, 0xe981, 0xe982, 0xe983, 0xe984, /*0xa8-0xaf*/
-  0xe985, 0xe986, 0xe987, 0xe988, 0xe989, 0xe98a, 0xe98b, 0xe98c, /*0xb0-0xb7*/
-  0xe98d, 0xe98e, 0xe98f, 0xe990, 0xe991, 0xe992, 0xe993, 0xe994, /*0xb8-0xbf*/
-  0xe995, 0xe996, 0xe997, 0xe998, 0xe999, 0xe99a, 0xe99b, 0xe99c, /*0xc0-0xc7*/
-  0xe99d, 0xe99e, 0xe99f, 0xe9a0, 0xea40, 0xea41, 0xea42, 0xea43, /*0xc8-0xcf*/
-  0xea44, 0xea45, 0xea46, 0xea47, 0xea48, 0xea49, 0xea4a, 0xea4b, /*0xd0-0xd7*/
-  0xea4c, 0xea4d, 0xea4e, 0xea4f, 0xea50, 0xea51, 0xea52, 0xea53, /*0xd8-0xdf*/
-  0xea54, 0xea55, 0xea56, 0xea57, 0xea58, 0xea59, 0xea5a, 0xea5b, /*0xe0-0xe7*/
-  0xc3c5, 0xe3c5, 0xc9c1, 0xe3c6, 0xea5c, 0xb1d5, 0xceca, 0xb4b3, /*0xe8-0xef*/
-  0xc8f2, 0xe3c7, 0xcfd0, 0xe3c8, 0xbce4, 0xe3c9, 0xe3ca, 0xc3c6, /*0xf0-0xf7*/
-  0xd5a2, 0xc4d6, 0xb9eb, 0xcec5, 0xe3cb, 0xc3f6, 0xe3cc, 0xea5d, /*0xf8-0xff*/
-  /* 0x9600 */
-  0xb7a7, 0xb8f3, 0xbad2, 0xe3cd, 0xe3ce, 0xd4c4, 0xe3cf, 0xea5e, /*0x00-0x07*/
-  0xe3d0, 0xd1cb, 0xe3d1, 0xe3d2, 0xe3d3, 0xe3d4, 0xd1d6, 0xe3d5, /*0x08-0x0f*/
-  0xb2fb, 0xc0bb, 0xe3d6, 0xea5f, 0xc0ab, 0xe3d7, 0xe3d8, 0xe3d9, /*0x10-0x17*/
-  0xea60, 0xe3da, 0xe3db, 0xea61, 0xb8b7, 0xdae2, 0xea62, 0xb6d3, /*0x18-0x1f*/
-  0xea63, 0xdae4, 0xdae3, 0xea64, 0xea65, 0xea66, 0xea67, 0xea68, /*0x20-0x27*/
-  0xea69, 0xea6a, 0xdae6, 0xea6b, 0xea6c, 0xea6d, 0xc8ee, 0xea6e, /*0x28-0x2f*/
-  0xea6f, 0xdae5, 0xb7c0, 0xd1f4, 0xd2f5, 0xd5f3, 0xbdd7, 0xea70, /*0x30-0x37*/
-  0xea71, 0xea72, 0xea73, 0xd7e8, 0xdae8, 0xdae7, 0xea74, 0xb0a2, /*0x38-0x3f*/
-  0xcdd3, 0xea75, 0xdae9, 0xea76, 0xb8bd, 0xbcca, 0xc2bd, 0xc2a4, /*0x40-0x47*/
-  0xb3c2, 0xdaea, 0xea77, 0xc2aa, 0xc4b0, 0xbdb5, 0xea78, 0xea79, /*0x48-0x4f*/
-  0xcfde, 0xea7a, 0xea7b, 0xea7c, 0xdaeb, 0xc9c2, 0xea7d, 0xea7e, /*0x50-0x57*/
-  0xea80, 0xea81, 0xea82, 0xb1dd, 0xea83, 0xea84, 0xea85, 0xdaec, /*0x58-0x5f*/
-  0xea86, 0xb6b8, 0xd4ba, 0xea87, 0xb3fd, 0xea88, 0xea89, 0xdaed, /*0x60-0x67*/
-  0xd4c9, 0xcfd5, 0xc5e3, 0xea8a, 0xdaee, 0xea8b, 0xea8c, 0xea8d, /*0x68-0x6f*/
-  0xea8e, 0xea8f, 0xdaef, 0xea90, 0xdaf0, 0xc1ea, 0xccd5, 0xcfdd, /*0x70-0x77*/
-  0xea91, 0xea92, 0xea93, 0xea94, 0xea95, 0xea96, 0xea97, 0xea98, /*0x78-0x7f*/
-  0xea99, 0xea9a, 0xea9b, 0xea9c, 0xea9d, 0xd3e7, 0xc2a1, 0xea9e, /*0x80-0x87*/
-  0xdaf1, 0xea9f, 0xeaa0, 0xcbe5, 0xeb40, 0xdaf2, 0xeb41, 0xcbe6, /*0x88-0x8f*/
-  0xd2fe, 0xeb42, 0xeb43, 0xeb44, 0xb8f4, 0xeb45, 0xeb46, 0xdaf3, /*0x90-0x97*/
-  0xb0af, 0xcfb6, 0xeb47, 0xeb48, 0xd5cf, 0xeb49, 0xeb4a, 0xeb4b, /*0x98-0x9f*/
-  0xeb4c, 0xeb4d, 0xeb4e, 0xeb4f, 0xeb50, 0xeb51, 0xeb52, 0xcbed, /*0xa0-0xa7*/
-  0xeb53, 0xeb54, 0xeb55, 0xeb56, 0xeb57, 0xeb58, 0xeb59, 0xeb5a, /*0xa8-0xaf*/
-  0xdaf4, 0xeb5b, 0xeb5c, 0xe3c4, 0xeb5d, 0xeb5e, 0xc1a5, 0xeb5f, /*0xb0-0xb7*/
-  0xeb60, 0xf6bf, 0xeb61, 0xeb62, 0xf6c0, 0xf6c1, 0xc4d1, 0xeb63, /*0xb8-0xbf*/
-  0xc8b8, 0xd1e3, 0xeb64, 0xeb65, 0xd0db, 0xd1c5, 0xbcaf, 0xb9cd, /*0xc0-0xc7*/
-  0xeb66, 0xeff4, 0xeb67, 0xeb68, 0xb4c6, 0xd3ba, 0xf6c2, 0xb3fb, /*0xc8-0xcf*/
-  0xeb69, 0xeb6a, 0xf6c3, 0xeb6b, 0xeb6c, 0xb5f1, 0xeb6d, 0xeb6e, /*0xd0-0xd7*/
-  0xeb6f, 0xeb70, 0xeb71, 0xeb72, 0xeb73, 0xeb74, 0xeb75, 0xeb76, /*0xd8-0xdf*/
-  0xf6c5, 0xeb77, 0xeb78, 0xeb79, 0xeb7a, 0xeb7b, 0xeb7c, 0xeb7d, /*0xe0-0xe7*/
-  0xd3ea, 0xf6a7, 0xd1a9, 0xeb7e, 0xeb80, 0xeb81, 0xeb82, 0xf6a9, /*0xe8-0xef*/
-  0xeb83, 0xeb84, 0xeb85, 0xf6a8, 0xeb86, 0xeb87, 0xc1e3, 0xc0d7, /*0xf0-0xf7*/
-  0xeb88, 0xb1a2, 0xeb89, 0xeb8a, 0xeb8b, 0xeb8c, 0xceed, 0xeb8d, /*0xf8-0xff*/
-  /* 0x9700 */
-  0xd0e8, 0xf6ab, 0xeb8e, 0xeb8f, 0xcff6, 0xeb90, 0xf6aa, 0xd5f0, /*0x00-0x07*/
-  0xf6ac, 0xc3b9, 0xeb91, 0xeb92, 0xeb93, 0xbbf4, 0xf6ae, 0xf6ad, /*0x08-0x0f*/
-  0xeb94, 0xeb95, 0xeb96, 0xc4de, 0xeb97, 0xeb98, 0xc1d8, 0xeb99, /*0x10-0x17*/
-  0xeb9a, 0xeb9b, 0xeb9c, 0xeb9d, 0xcbaa, 0xeb9e, 0xcfbc, 0xeb9f, /*0x18-0x1f*/
-  0xeba0, 0xec40, 0xec41, 0xec42, 0xec43, 0xec44, 0xec45, 0xec46, /*0x20-0x27*/
-  0xec47, 0xec48, 0xf6af, 0xec49, 0xec4a, 0xf6b0, 0xec4b, 0xec4c, /*0x28-0x2f*/
-  0xf6b1, 0xec4d, 0xc2b6, 0xec4e, 0xec4f, 0xec50, 0xec51, 0xec52, /*0x30-0x37*/
-  0xb0d4, 0xc5f9, 0xec53, 0xec54, 0xec55, 0xec56, 0xf6b2, 0xec57, /*0x38-0x3f*/
-  0xec58, 0xec59, 0xec5a, 0xec5b, 0xec5c, 0xec5d, 0xec5e, 0xec5f, /*0x40-0x47*/
-  0xec60, 0xec61, 0xec62, 0xec63, 0xec64, 0xec65, 0xec66, 0xec67, /*0x48-0x4f*/
-  0xec68, 0xec69, 0xc7e0, 0xf6a6, 0xec6a, 0xec6b, 0xbeb8, 0xec6c, /*0x50-0x57*/
-  0xec6d, 0xbeb2, 0xec6e, 0xb5e5, 0xec6f, 0xec70, 0xb7c7, 0xec71, /*0x58-0x5f*/
-  0xbfbf, 0xc3d2, 0xc3e6, 0xec72, 0xec73, 0xd8cc, 0xec74, 0xec75, /*0x60-0x67*/
-  0xec76, 0xb8ef, 0xec77, 0xec78, 0xec79, 0xec7a, 0xec7b, 0xec7c, /*0x68-0x6f*/
-  0xec7d, 0xec7e, 0xec80, 0xbdf9, 0xd1a5, 0xec81, 0xb0d0, 0xec82, /*0x70-0x77*/
-  0xec83, 0xec84, 0xec85, 0xec86, 0xf7b0, 0xec87, 0xec88, 0xec89, /*0x78-0x7f*/
-  0xec8a, 0xec8b, 0xec8c, 0xec8d, 0xec8e, 0xf7b1, 0xec8f, 0xec90, /*0x80-0x87*/
-  0xec91, 0xec92, 0xec93, 0xd0ac, 0xec94, 0xb0b0, 0xec95, 0xec96, /*0x88-0x8f*/
-  0xec97, 0xf7b2, 0xf7b3, 0xec98, 0xf7b4, 0xec99, 0xec9a, 0xec9b, /*0x90-0x97*/
-  0xc7ca, 0xec9c, 0xec9d, 0xec9e, 0xec9f, 0xeca0, 0xed40, 0xed41, /*0x98-0x9f*/
-  0xbecf, 0xed42, 0xed43, 0xf7b7, 0xed44, 0xed45, 0xed46, 0xed47, /*0xa0-0xa7*/
-  0xed48, 0xed49, 0xed4a, 0xf7b6, 0xed4b, 0xb1de, 0xed4c, 0xf7b5, /*0xa8-0xaf*/
-  0xed4d, 0xed4e, 0xf7b8, 0xed4f, 0xf7b9, 0xed50, 0xed51, 0xed52, /*0xb0-0xb7*/
-  0xed53, 0xed54, 0xed55, 0xed56, 0xed57, 0xed58, 0xed59, 0xed5a, /*0xb8-0xbf*/
-  0xed5b, 0xed5c, 0xed5d, 0xed5e, 0xed5f, 0xed60, 0xed61, 0xed62, /*0xc0-0xc7*/
-  0xed63, 0xed64, 0xed65, 0xed66, 0xed67, 0xed68, 0xed69, 0xed6a, /*0xc8-0xcf*/
-  0xed6b, 0xed6c, 0xed6d, 0xed6e, 0xed6f, 0xed70, 0xed71, 0xed72, /*0xd0-0xd7*/
-  0xed73, 0xed74, 0xed75, 0xed76, 0xed77, 0xed78, 0xed79, 0xed7a, /*0xd8-0xdf*/
-  0xed7b, 0xed7c, 0xed7d, 0xed7e, 0xed80, 0xed81, 0xcea4, 0xc8cd, /*0xe0-0xe7*/
-  0xed82, 0xbaab, 0xe8b8, 0xe8b9, 0xe8ba, 0xbec2, 0xed83, 0xed84, /*0xe8-0xef*/
-  0xed85, 0xed86, 0xed87, 0xd2f4, 0xed88, 0xd4cf, 0xc9d8, 0xed89, /*0xf0-0xf7*/
-  0xed8a, 0xed8b, 0xed8c, 0xed8d, 0xed8e, 0xed8f, 0xed90, 0xed91, /*0xf8-0xff*/
-  /* 0x9800 */
-  0xed92, 0xed93, 0xed94, 0xed95, 0xed96, 0xed97, 0xed98, 0xed99, /*0x00-0x07*/
-  0xed9a, 0xed9b, 0xed9c, 0xed9d, 0xed9e, 0xed9f, 0xeda0, 0xee40, /*0x08-0x0f*/
-  0xee41, 0xee42, 0xee43, 0xee44, 0xee45, 0xee46, 0xee47, 0xee48, /*0x10-0x17*/
-  0xee49, 0xee4a, 0xee4b, 0xee4c, 0xee4d, 0xee4e, 0xee4f, 0xee50, /*0x18-0x1f*/
-  0xee51, 0xee52, 0xee53, 0xee54, 0xee55, 0xee56, 0xee57, 0xee58, /*0x20-0x27*/
-  0xee59, 0xee5a, 0xee5b, 0xee5c, 0xee5d, 0xee5e, 0xee5f, 0xee60, /*0x28-0x2f*/
-  0xee61, 0xee62, 0xee63, 0xee64, 0xee65, 0xee66, 0xee67, 0xee68, /*0x30-0x37*/
-  0xee69, 0xee6a, 0xee6b, 0xee6c, 0xee6d, 0xee6e, 0xee6f, 0xee70, /*0x38-0x3f*/
-  0xee71, 0xee72, 0xee73, 0xee74, 0xee75, 0xee76, 0xee77, 0xee78, /*0x40-0x47*/
-  0xee79, 0xee7a, 0xee7b, 0xee7c, 0xee7d, 0xee7e, 0xee80, 0xee81, /*0x48-0x4f*/
-  0xee82, 0xee83, 0xee84, 0xee85, 0xee86, 0xee87, 0xee88, 0xee89, /*0x50-0x57*/
-  0xee8a, 0xee8b, 0xee8c, 0xee8d, 0xee8e, 0xee8f, 0xee90, 0xee91, /*0x58-0x5f*/
-  0xee92, 0xee93, 0xee94, 0xee95, 0xee96, 0xee97, 0xee98, 0xee99, /*0x60-0x67*/
-  0xee9a, 0xee9b, 0xee9c, 0xee9d, 0xee9e, 0xee9f, 0xeea0, 0xef40, /*0x68-0x6f*/
-  0xef41, 0xef42, 0xef43, 0xef44, 0xef45, 0xd2b3, 0xb6a5, 0xc7ea, /*0x70-0x77*/
-  0xf1fc, 0xcfee, 0xcbb3, 0xd0eb, 0xe7ef, 0xcde7, 0xb9cb, 0xb6d9, /*0x78-0x7f*/
-  0xf1fd, 0xb0e4, 0xcbcc, 0xf1fe, 0xd4a4, 0xc2ad, 0xc1ec, 0xc6c4, /*0x80-0x87*/
-  0xbeb1, 0xf2a1, 0xbcd5, 0xef46, 0xf2a2, 0xf2a3, 0xef47, 0xf2a4, /*0x88-0x8f*/
-  0xd2c3, 0xc6b5, 0xef48, 0xcdc7, 0xf2a5, 0xef49, 0xd3b1, 0xbfc5, /*0x90-0x97*/
-  0xcce2, 0xef4a, 0xf2a6, 0xf2a7, 0xd1d5, 0xb6ee, 0xf2a8, 0xf2a9, /*0x98-0x9f*/
-  0xb5df, 0xf2aa, 0xf2ab, 0xef4b, 0xb2fc, 0xf2ac, 0xf2ad, 0xc8a7, /*0xa0-0xa7*/
-  0xef4c, 0xef4d, 0xef4e, 0xef4f, 0xef50, 0xef51, 0xef52, 0xef53, /*0xa8-0xaf*/
-  0xef54, 0xef55, 0xef56, 0xef57, 0xef58, 0xef59, 0xef5a, 0xef5b, /*0xb0-0xb7*/
-  0xef5c, 0xef5d, 0xef5e, 0xef5f, 0xef60, 0xef61, 0xef62, 0xef63, /*0xb8-0xbf*/
-  0xef64, 0xef65, 0xef66, 0xef67, 0xef68, 0xef69, 0xef6a, 0xef6b, /*0xc0-0xc7*/
-  0xef6c, 0xef6d, 0xef6e, 0xef6f, 0xef70, 0xef71, 0xb7e7, 0xef72, /*0xc8-0xcf*/
-  0xef73, 0xeca9, 0xecaa, 0xecab, 0xef74, 0xecac, 0xef75, 0xef76, /*0xd0-0xd7*/
-  0xc6ae, 0xecad, 0xecae, 0xef77, 0xef78, 0xef79, 0xb7c9, 0xcab3, /*0xd8-0xdf*/
-  0xef7a, 0xef7b, 0xef7c, 0xef7d, 0xef7e, 0xef80, 0xef81, 0xe2b8, /*0xe0-0xe7*/
-  0xf7cf, 0xef82, 0xef83, 0xef84, 0xef85, 0xef86, 0xef87, 0xef88, /*0xe8-0xef*/
-  0xef89, 0xef8a, 0xef8b, 0xef8c, 0xef8d, 0xef8e, 0xef8f, 0xef90, /*0xf0-0xf7*/
-  0xef91, 0xef92, 0xef93, 0xef94, 0xef95, 0xef96, 0xef97, 0xef98, /*0xf8-0xff*/
-  /* 0x9900 */
-  0xef99, 0xef9a, 0xef9b, 0xef9c, 0xef9d, 0xef9e, 0xef9f, 0xefa0, /*0x00-0x07*/
-  0xf040, 0xf041, 0xf042, 0xf043, 0xf044, 0xf7d0, 0xf045, 0xf046, /*0x08-0x0f*/
-  0xb2cd, 0xf047, 0xf048, 0xf049, 0xf04a, 0xf04b, 0xf04c, 0xf04d, /*0x10-0x17*/
-  0xf04e, 0xf04f, 0xf050, 0xf051, 0xf052, 0xf053, 0xf054, 0xf055, /*0x18-0x1f*/
-  0xf056, 0xf057, 0xf058, 0xf059, 0xf05a, 0xf05b, 0xf05c, 0xf05d, /*0x20-0x27*/
-  0xf05e, 0xf05f, 0xf060, 0xf061, 0xf062, 0xf063, 0xf7d1, 0xf064, /*0x28-0x2f*/
-  0xf065, 0xf066, 0xf067, 0xf068, 0xf069, 0xf06a, 0xf06b, 0xf06c, /*0x30-0x37*/
-  0xf06d, 0xf06e, 0xf06f, 0xf070, 0xf071, 0xf072, 0xf073, 0xf074, /*0x38-0x3f*/
-  0xf075, 0xf076, 0xf077, 0xf078, 0xf079, 0xf07a, 0xf07b, 0xf07c, /*0x40-0x47*/
-  0xf07d, 0xf07e, 0xf080, 0xf081, 0xf082, 0xf083, 0xf084, 0xf085, /*0x48-0x4f*/
-  0xf086, 0xf087, 0xf088, 0xf089, 0xf7d3, 0xf7d2, 0xf08a, 0xf08b, /*0x50-0x57*/
-  0xf08c, 0xf08d, 0xf08e, 0xf08f, 0xf090, 0xf091, 0xf092, 0xf093, /*0x58-0x5f*/
-  0xf094, 0xf095, 0xf096, 0xe2bb, 0xf097, 0xbca2, 0xf098, 0xe2bc, /*0x60-0x67*/
-  0xe2bd, 0xe2be, 0xe2bf, 0xe2c0, 0xe2c1, 0xb7b9, 0xd2fb, 0xbda4, /*0x68-0x6f*/
-  0xcace, 0xb1a5, 0xcbc7, 0xf099, 0xe2c2, 0xb6fc, 0xc8c4, 0xe2c3, /*0x70-0x77*/
-  0xf09a, 0xf09b, 0xbdc8, 0xf09c, 0xb1fd, 0xe2c4, 0xf09d, 0xb6f6, /*0x78-0x7f*/
-  0xe2c5, 0xc4d9, 0xf09e, 0xf09f, 0xe2c6, 0xcfda, 0xb9dd, 0xe2c7, /*0x80-0x87*/
-  0xc0a1, 0xf0a0, 0xe2c8, 0xb2f6, 0xf140, 0xe2c9, 0xf141, 0xc1f3, /*0x88-0x8f*/
-  0xe2ca, 0xe2cb, 0xc2f8, 0xe2cc, 0xe2cd, 0xe2ce, 0xcad7, 0xd8b8, /*0x90-0x97*/
-  0xd9e5, 0xcfe3, 0xf142, 0xf143, 0xf144, 0xf145, 0xf146, 0xf147, /*0x98-0x9f*/
-  0xf148, 0xf149, 0xf14a, 0xf14b, 0xf14c, 0xf0a5, 0xf14d, 0xf14e, /*0xa0-0xa7*/
-  0xdcb0, 0xf14f, 0xf150, 0xf151, 0xf152, 0xf153, 0xf154, 0xf155, /*0xa8-0xaf*/
-  0xf156, 0xf157, 0xf158, 0xf159, 0xf15a, 0xf15b, 0xf15c, 0xf15d, /*0xb0-0xb7*/
-  0xf15e, 0xf15f, 0xf160, 0xf161, 0xf162, 0xf163, 0xf164, 0xf165, /*0xb8-0xbf*/
-  0xf166, 0xf167, 0xf168, 0xf169, 0xf16a, 0xf16b, 0xf16c, 0xf16d, /*0xc0-0xc7*/
-  0xf16e, 0xf16f, 0xf170, 0xf171, 0xf172, 0xf173, 0xf174, 0xf175, /*0xc8-0xcf*/
-  0xf176, 0xf177, 0xf178, 0xf179, 0xf17a, 0xf17b, 0xf17c, 0xf17d, /*0xd0-0xd7*/
-  0xf17e, 0xf180, 0xf181, 0xf182, 0xf183, 0xf184, 0xf185, 0xf186, /*0xd8-0xdf*/
-  0xf187, 0xf188, 0xf189, 0xf18a, 0xf18b, 0xf18c, 0xf18d, 0xf18e, /*0xe0-0xe7*/
-  0xf18f, 0xf190, 0xf191, 0xf192, 0xf193, 0xf194, 0xf195, 0xf196, /*0xe8-0xef*/
-  0xf197, 0xf198, 0xf199, 0xf19a, 0xf19b, 0xf19c, 0xf19d, 0xf19e, /*0xf0-0xf7*/
-  0xf19f, 0xf1a0, 0xf240, 0xf241, 0xf242, 0xf243, 0xf244, 0xf245, /*0xf8-0xff*/
-  /* 0x9a00 */
-  0xf246, 0xf247, 0xf248, 0xf249, 0xf24a, 0xf24b, 0xf24c, 0xf24d, /*0x00-0x07*/
-  0xf24e, 0xf24f, 0xf250, 0xf251, 0xf252, 0xf253, 0xf254, 0xf255, /*0x08-0x0f*/
-  0xf256, 0xf257, 0xf258, 0xf259, 0xf25a, 0xf25b, 0xf25c, 0xf25d, /*0x10-0x17*/
-  0xf25e, 0xf25f, 0xf260, 0xf261, 0xf262, 0xf263, 0xf264, 0xf265, /*0x18-0x1f*/
-  0xf266, 0xf267, 0xf268, 0xf269, 0xf26a, 0xf26b, 0xf26c, 0xf26d, /*0x20-0x27*/
-  0xf26e, 0xf26f, 0xf270, 0xf271, 0xf272, 0xf273, 0xf274, 0xf275, /*0x28-0x2f*/
-  0xf276, 0xf277, 0xf278, 0xf279, 0xf27a, 0xf27b, 0xf27c, 0xf27d, /*0x30-0x37*/
-  0xf27e, 0xf280, 0xf281, 0xf282, 0xf283, 0xf284, 0xf285, 0xf286, /*0x38-0x3f*/
-  0xf287, 0xf288, 0xf289, 0xf28a, 0xf28b, 0xf28c, 0xf28d, 0xf28e, /*0x40-0x47*/
-  0xf28f, 0xf290, 0xf291, 0xf292, 0xf293, 0xf294, 0xf295, 0xf296, /*0x48-0x4f*/
-  0xf297, 0xf298, 0xf299, 0xf29a, 0xf29b, 0xf29c, 0xf29d, 0xf29e, /*0x50-0x57*/
-  0xf29f, 0xf2a0, 0xf340, 0xf341, 0xf342, 0xf343, 0xf344, 0xf345, /*0x58-0x5f*/
-  0xf346, 0xf347, 0xf348, 0xf349, 0xf34a, 0xf34b, 0xf34c, 0xf34d, /*0x60-0x67*/
-  0xf34e, 0xf34f, 0xf350, 0xf351, 0xc2ed, 0xd4a6, 0xcdd4, 0xd1b1, /*0x68-0x6f*/
-  0xb3db, 0xc7fd, 0xf352, 0xb2b5, 0xc2bf, 0xe6e0, 0xcabb, 0xe6e1, /*0x70-0x77*/
-  0xe6e2, 0xbed4, 0xe6e3, 0xd7a4, 0xcdd5, 0xe6e5, 0xbcdd, 0xe6e4, /*0x78-0x7f*/
-  0xe6e6, 0xe6e7, 0xc2ee, 0xf353, 0xbdbe, 0xe6e8, 0xc2e6, 0xbaa7, /*0x80-0x87*/
-  0xe6e9, 0xf354, 0xe6ea, 0xb3d2, 0xd1e9, 0xf355, 0xf356, 0xbfa5, /*0x88-0x8f*/
-  0xe6eb, 0xc6ef, 0xe6ec, 0xe6ed, 0xf357, 0xf358, 0xe6ee, 0xc6ad, /*0x90-0x97*/
-  0xe6ef, 0xf359, 0xc9a7, 0xe6f0, 0xe6f1, 0xe6f2, 0xe5b9, 0xe6f3, /*0x98-0x9f*/
-  0xe6f4, 0xc2e2, 0xe6f5, 0xe6f6, 0xd6e8, 0xe6f7, 0xf35a, 0xe6f8, /*0xa0-0xa7*/
-  0xb9c7, 0xf35b, 0xf35c, 0xf35d, 0xf35e, 0xf35f, 0xf360, 0xf361, /*0xa8-0xaf*/
-  0xf7bb, 0xf7ba, 0xf362, 0xf363, 0xf364, 0xf365, 0xf7be, 0xf7bc, /*0xb0-0xb7*/
-  0xbaa1, 0xf366, 0xf7bf, 0xf367, 0xf7c0, 0xf368, 0xf369, 0xf36a, /*0xb8-0xbf*/
-  0xf7c2, 0xf7c1, 0xf7c4, 0xf36b, 0xf36c, 0xf7c3, 0xf36d, 0xf36e, /*0xc0-0xc7*/
-  0xf36f, 0xf370, 0xf371, 0xf7c5, 0xf7c6, 0xf372, 0xf373, 0xf374, /*0xc8-0xcf*/
-  0xf375, 0xf7c7, 0xf376, 0xcbe8, 0xf377, 0xf378, 0xf379, 0xf37a, /*0xd0-0xd7*/
-  0xb8df, 0xf37b, 0xf37c, 0xf37d, 0xf37e, 0xf380, 0xf381, 0xf7d4, /*0xd8-0xdf*/
-  0xf382, 0xf7d5, 0xf383, 0xf384, 0xf385, 0xf386, 0xf7d6, 0xf387, /*0xe0-0xe7*/
-  0xf388, 0xf389, 0xf38a, 0xf7d8, 0xf38b, 0xf7da, 0xf38c, 0xf7d7, /*0xe8-0xef*/
-  0xf38d, 0xf38e, 0xf38f, 0xf390, 0xf391, 0xf392, 0xf393, 0xf394, /*0xf0-0xf7*/
-  0xf395, 0xf7db, 0xf396, 0xf7d9, 0xf397, 0xf398, 0xf399, 0xf39a, /*0xf8-0xff*/
-  /* 0x9b00 */
-  0xf39b, 0xf39c, 0xf39d, 0xd7d7, 0xf39e, 0xf39f, 0xf3a0, 0xf440, /*0x00-0x07*/
-  0xf7dc, 0xf441, 0xf442, 0xf443, 0xf444, 0xf445, 0xf446, 0xf7dd, /*0x08-0x0f*/
-  0xf447, 0xf448, 0xf449, 0xf7de, 0xf44a, 0xf44b, 0xf44c, 0xf44d, /*0x10-0x17*/
-  0xf44e, 0xf44f, 0xf450, 0xf451, 0xf452, 0xf453, 0xf454, 0xf7df, /*0x18-0x1f*/
-  0xf455, 0xf456, 0xf457, 0xf7e0, 0xf458, 0xf459, 0xf45a, 0xf45b, /*0x20-0x27*/
-  0xf45c, 0xf45d, 0xf45e, 0xf45f, 0xf460, 0xf461, 0xf462, 0xdbcb, /*0x28-0x2f*/
-  0xf463, 0xf464, 0xd8aa, 0xf465, 0xf466, 0xf467, 0xf468, 0xf469, /*0x30-0x37*/
-  0xf46a, 0xf46b, 0xf46c, 0xe5f7, 0xb9ed, 0xf46d, 0xf46e, 0xf46f, /*0x38-0x3f*/
-  0xf470, 0xbffd, 0xbbea, 0xf7c9, 0xc6c7, 0xf7c8, 0xf471, 0xf7ca, /*0x40-0x47*/
-  0xf7cc, 0xf7cb, 0xf472, 0xf473, 0xf474, 0xf7cd, 0xf475, 0xceba, /*0x48-0x4f*/
-  0xf476, 0xf7ce, 0xf477, 0xf478, 0xc4a7, 0xf479, 0xf47a, 0xf47b, /*0x50-0x57*/
-  0xf47c, 0xf47d, 0xf47e, 0xf480, 0xf481, 0xf482, 0xf483, 0xf484, /*0x58-0x5f*/
-  0xf485, 0xf486, 0xf487, 0xf488, 0xf489, 0xf48a, 0xf48b, 0xf48c, /*0x60-0x67*/
-  0xf48d, 0xf48e, 0xf48f, 0xf490, 0xf491, 0xf492, 0xf493, 0xf494, /*0x68-0x6f*/
-  0xf495, 0xf496, 0xf497, 0xf498, 0xf499, 0xf49a, 0xf49b, 0xf49c, /*0x70-0x77*/
-  0xf49d, 0xf49e, 0xf49f, 0xf4a0, 0xf540, 0xf541, 0xf542, 0xf543, /*0x78-0x7f*/
-  0xf544, 0xf545, 0xf546, 0xf547, 0xf548, 0xf549, 0xf54a, 0xf54b, /*0x80-0x87*/
-  0xf54c, 0xf54d, 0xf54e, 0xf54f, 0xf550, 0xf551, 0xf552, 0xf553, /*0x88-0x8f*/
-  0xf554, 0xf555, 0xf556, 0xf557, 0xf558, 0xf559, 0xf55a, 0xf55b, /*0x90-0x97*/
-  0xf55c, 0xf55d, 0xf55e, 0xf55f, 0xf560, 0xf561, 0xf562, 0xf563, /*0x98-0x9f*/
-  0xf564, 0xf565, 0xf566, 0xf567, 0xf568, 0xf569, 0xf56a, 0xf56b, /*0xa0-0xa7*/
-  0xf56c, 0xf56d, 0xf56e, 0xf56f, 0xf570, 0xf571, 0xf572, 0xf573, /*0xa8-0xaf*/
-  0xf574, 0xf575, 0xf576, 0xf577, 0xf578, 0xf579, 0xf57a, 0xf57b, /*0xb0-0xb7*/
-  0xf57c, 0xf57d, 0xf57e, 0xf580, 0xf581, 0xf582, 0xf583, 0xf584, /*0xb8-0xbf*/
-  0xf585, 0xf586, 0xf587, 0xf588, 0xf589, 0xf58a, 0xf58b, 0xf58c, /*0xc0-0xc7*/
-  0xf58d, 0xf58e, 0xf58f, 0xf590, 0xf591, 0xf592, 0xf593, 0xf594, /*0xc8-0xcf*/
-  0xf595, 0xf596, 0xf597, 0xf598, 0xf599, 0xf59a, 0xf59b, 0xf59c, /*0xd0-0xd7*/
-  0xf59d, 0xf59e, 0xf59f, 0xf5a0, 0xf640, 0xf641, 0xf642, 0xf643, /*0xd8-0xdf*/
-  0xf644, 0xf645, 0xf646, 0xf647, 0xf648, 0xf649, 0xf64a, 0xf64b, /*0xe0-0xe7*/
-  0xf64c, 0xf64d, 0xf64e, 0xf64f, 0xf650, 0xf651, 0xf652, 0xf653, /*0xe8-0xef*/
-  0xf654, 0xf655, 0xf656, 0xf657, 0xf658, 0xf659, 0xf65a, 0xf65b, /*0xf0-0xf7*/
-  0xf65c, 0xf65d, 0xf65e, 0xf65f, 0xf660, 0xf661, 0xf662, 0xf663, /*0xf8-0xff*/
-  /* 0x9c00 */
-  0xf664, 0xf665, 0xf666, 0xf667, 0xf668, 0xf669, 0xf66a, 0xf66b, /*0x00-0x07*/
-  0xf66c, 0xf66d, 0xf66e, 0xf66f, 0xf670, 0xf671, 0xf672, 0xf673, /*0x08-0x0f*/
-  0xf674, 0xf675, 0xf676, 0xf677, 0xf678, 0xf679, 0xf67a, 0xf67b, /*0x10-0x17*/
-  0xf67c, 0xf67d, 0xf67e, 0xf680, 0xf681, 0xf682, 0xf683, 0xf684, /*0x18-0x1f*/
-  0xf685, 0xf686, 0xf687, 0xf688, 0xf689, 0xf68a, 0xf68b, 0xf68c, /*0x20-0x27*/
-  0xf68d, 0xf68e, 0xf68f, 0xf690, 0xf691, 0xf692, 0xf693, 0xf694, /*0x28-0x2f*/
-  0xf695, 0xf696, 0xf697, 0xf698, 0xf699, 0xf69a, 0xf69b, 0xf69c, /*0x30-0x37*/
-  0xf69d, 0xf69e, 0xf69f, 0xf6a0, 0xf740, 0xf741, 0xf742, 0xf743, /*0x38-0x3f*/
-  0xf744, 0xf745, 0xf746, 0xf747, 0xf748, 0xf749, 0xf74a, 0xf74b, /*0x40-0x47*/
-  0xf74c, 0xf74d, 0xf74e, 0xf74f, 0xf750, 0xf751, 0xf752, 0xf753, /*0x48-0x4f*/
-  0xf754, 0xf755, 0xf756, 0xf757, 0xf758, 0xf759, 0xf75a, 0xf75b, /*0x50-0x57*/
-  0xf75c, 0xf75d, 0xf75e, 0xf75f, 0xf760, 0xf761, 0xf762, 0xf763, /*0x58-0x5f*/
-  0xf764, 0xf765, 0xf766, 0xf767, 0xf768, 0xf769, 0xf76a, 0xf76b, /*0x60-0x67*/
-  0xf76c, 0xf76d, 0xf76e, 0xf76f, 0xf770, 0xf771, 0xf772, 0xf773, /*0x68-0x6f*/
-  0xf774, 0xf775, 0xf776, 0xf777, 0xf778, 0xf779, 0xf77a, 0xf77b, /*0x70-0x77*/
-  0xf77c, 0xf77d, 0xf77e, 0xf780, 0xd3e3, 0xf781, 0xf782, 0xf6cf, /*0x78-0x7f*/
-  0xf783, 0xc2b3, 0xf6d0, 0xf784, 0xf785, 0xf6d1, 0xf6d2, 0xf6d3, /*0x80-0x87*/
-  0xf6d4, 0xf786, 0xf787, 0xf6d6, 0xf788, 0xb1ab, 0xf6d7, 0xf789, /*0x88-0x8f*/
-  0xf6d8, 0xf6d9, 0xf6da, 0xf78a, 0xf6db, 0xf6dc, 0xf78b, 0xf78c, /*0x90-0x97*/
-  0xf78d, 0xf78e, 0xf6dd, 0xf6de, 0xcfca, 0xf78f, 0xf6df, 0xf6e0, /*0x98-0x9f*/
-  0xf6e1, 0xf6e2, 0xf6e3, 0xf6e4, 0xc0f0, 0xf6e5, 0xf6e6, 0xf6e7, /*0xa0-0xa7*/
-  0xf6e8, 0xf6e9, 0xf790, 0xf6ea, 0xf791, 0xf6eb, 0xf6ec, 0xf792, /*0xa8-0xaf*/
-  0xf6ed, 0xf6ee, 0xf6ef, 0xf6f0, 0xf6f1, 0xf6f2, 0xf6f3, 0xf6f4, /*0xb0-0xb7*/
-  0xbea8, 0xf793, 0xf6f5, 0xf6f6, 0xf6f7, 0xf6f8, 0xf794, 0xf795, /*0xb8-0xbf*/
-  0xf796, 0xf797, 0xf798, 0xc8fa, 0xf6f9, 0xf6fa, 0xf6fb, 0xf6fc, /*0xc0-0xc7*/
-  0xf799, 0xf79a, 0xf6fd, 0xf6fe, 0xf7a1, 0xf7a2, 0xf7a3, 0xf7a4, /*0xc8-0xcf*/
-  0xf7a5, 0xf79b, 0xf79c, 0xf7a6, 0xf7a7, 0xf7a8, 0xb1ee, 0xf7a9, /*0xd0-0xd7*/
-  0xf7aa, 0xf7ab, 0xf79d, 0xf79e, 0xf7ac, 0xf7ad, 0xc1db, 0xf7ae, /*0xd8-0xdf*/
-  0xf79f, 0xf7a0, 0xf7af, 0xf840, 0xf841, 0xf842, 0xf843, 0xf844, /*0xe0-0xe7*/
-  0xf845, 0xf846, 0xf847, 0xf848, 0xf849, 0xf84a, 0xf84b, 0xf84c, /*0xe8-0xef*/
-  0xf84d, 0xf84e, 0xf84f, 0xf850, 0xf851, 0xf852, 0xf853, 0xf854, /*0xf0-0xf7*/
-  0xf855, 0xf856, 0xf857, 0xf858, 0xf859, 0xf85a, 0xf85b, 0xf85c, /*0xf8-0xff*/
-  /* 0x9d00 */
-  0xf85d, 0xf85e, 0xf85f, 0xf860, 0xf861, 0xf862, 0xf863, 0xf864, /*0x00-0x07*/
-  0xf865, 0xf866, 0xf867, 0xf868, 0xf869, 0xf86a, 0xf86b, 0xf86c, /*0x08-0x0f*/
-  0xf86d, 0xf86e, 0xf86f, 0xf870, 0xf871, 0xf872, 0xf873, 0xf874, /*0x10-0x17*/
-  0xf875, 0xf876, 0xf877, 0xf878, 0xf879, 0xf87a, 0xf87b, 0xf87c, /*0x18-0x1f*/
-  0xf87d, 0xf87e, 0xf880, 0xf881, 0xf882, 0xf883, 0xf884, 0xf885, /*0x20-0x27*/
-  0xf886, 0xf887, 0xf888, 0xf889, 0xf88a, 0xf88b, 0xf88c, 0xf88d, /*0x28-0x2f*/
-  0xf88e, 0xf88f, 0xf890, 0xf891, 0xf892, 0xf893, 0xf894, 0xf895, /*0x30-0x37*/
-  0xf896, 0xf897, 0xf898, 0xf899, 0xf89a, 0xf89b, 0xf89c, 0xf89d, /*0x38-0x3f*/
-  0xf89e, 0xf89f, 0xf8a0, 0xf940, 0xf941, 0xf942, 0xf943, 0xf944, /*0x40-0x47*/
-  0xf945, 0xf946, 0xf947, 0xf948, 0xf949, 0xf94a, 0xf94b, 0xf94c, /*0x48-0x4f*/
-  0xf94d, 0xf94e, 0xf94f, 0xf950, 0xf951, 0xf952, 0xf953, 0xf954, /*0x50-0x57*/
-  0xf955, 0xf956, 0xf957, 0xf958, 0xf959, 0xf95a, 0xf95b, 0xf95c, /*0x58-0x5f*/
-  0xf95d, 0xf95e, 0xf95f, 0xf960, 0xf961, 0xf962, 0xf963, 0xf964, /*0x60-0x67*/
-  0xf965, 0xf966, 0xf967, 0xf968, 0xf969, 0xf96a, 0xf96b, 0xf96c, /*0x68-0x6f*/
-  0xf96d, 0xf96e, 0xf96f, 0xf970, 0xf971, 0xf972, 0xf973, 0xf974, /*0x70-0x77*/
-  0xf975, 0xf976, 0xf977, 0xf978, 0xf979, 0xf97a, 0xf97b, 0xf97c, /*0x78-0x7f*/
-  0xf97d, 0xf97e, 0xf980, 0xf981, 0xf982, 0xf983, 0xf984, 0xf985, /*0x80-0x87*/
-  0xf986, 0xf987, 0xf988, 0xf989, 0xf98a, 0xf98b, 0xf98c, 0xf98d, /*0x88-0x8f*/
-  0xf98e, 0xf98f, 0xf990, 0xf991, 0xf992, 0xf993, 0xf994, 0xf995, /*0x90-0x97*/
-  0xf996, 0xf997, 0xf998, 0xf999, 0xf99a, 0xf99b, 0xf99c, 0xf99d, /*0x98-0x9f*/
-  0xf99e, 0xf99f, 0xf9a0, 0xfa40, 0xfa41, 0xfa42, 0xfa43, 0xfa44, /*0xa0-0xa7*/
-  0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49, 0xfa4a, 0xfa4b, 0xfa4c, /*0xa8-0xaf*/
-  0xfa4d, 0xfa4e, 0xfa4f, 0xfa50, 0xfa51, 0xfa52, 0xfa53, 0xfa54, /*0xb0-0xb7*/
-  0xfa55, 0xfa56, 0xfa57, 0xfa58, 0xfa59, 0xfa5a, 0xfa5b, 0xfa5c, /*0xb8-0xbf*/
-  0xfa5d, 0xfa5e, 0xfa5f, 0xfa60, 0xfa61, 0xfa62, 0xfa63, 0xfa64, /*0xc0-0xc7*/
-  0xfa65, 0xfa66, 0xfa67, 0xfa68, 0xfa69, 0xfa6a, 0xfa6b, 0xfa6c, /*0xc8-0xcf*/
-  0xfa6d, 0xfa6e, 0xfa6f, 0xfa70, 0xfa71, 0xfa72, 0xfa73, 0xfa74, /*0xd0-0xd7*/
-  0xfa75, 0xfa76, 0xfa77, 0xfa78, 0xfa79, 0xfa7a, 0xfa7b, 0xfa7c, /*0xd8-0xdf*/
-  0xfa7d, 0xfa7e, 0xfa80, 0xfa81, 0xfa82, 0xfa83, 0xfa84, 0xfa85, /*0xe0-0xe7*/
-  0xfa86, 0xfa87, 0xfa88, 0xfa89, 0xfa8a, 0xfa8b, 0xfa8c, 0xfa8d, /*0xe8-0xef*/
-  0xfa8e, 0xfa8f, 0xfa90, 0xfa91, 0xfa92, 0xfa93, 0xfa94, 0xfa95, /*0xf0-0xf7*/
-  0xfa96, 0xfa97, 0xfa98, 0xfa99, 0xfa9a, 0xfa9b, 0xfa9c, 0xfa9d, /*0xf8-0xff*/
-  /* 0x9e00 */
-  0xfa9e, 0xfa9f, 0xfaa0, 0xfb40, 0xfb41, 0xfb42, 0xfb43, 0xfb44, /*0x00-0x07*/
-  0xfb45, 0xfb46, 0xfb47, 0xfb48, 0xfb49, 0xfb4a, 0xfb4b, 0xfb4c, /*0x08-0x0f*/
-  0xfb4d, 0xfb4e, 0xfb4f, 0xfb50, 0xfb51, 0xfb52, 0xfb53, 0xfb54, /*0x10-0x17*/
-  0xfb55, 0xfb56, 0xfb57, 0xfb58, 0xfb59, 0xfb5a, 0xfb5b, 0xc4f1, /*0x18-0x1f*/
-  0xf0af, 0xbca6, 0xf0b0, 0xc3f9, 0xfb5c, 0xc5b8, 0xd1bb, 0xfb5d, /*0x20-0x27*/
-  0xf0b1, 0xf0b2, 0xf0b3, 0xf0b4, 0xf0b5, 0xd1bc, 0xfb5e, 0xd1ec, /*0x28-0x2f*/
-  0xfb5f, 0xf0b7, 0xf0b6, 0xd4a7, 0xfb60, 0xcdd2, 0xf0b8, 0xf0ba, /*0x30-0x37*/
-  0xf0b9, 0xf0bb, 0xf0bc, 0xfb61, 0xfb62, 0xb8eb, 0xf0bd, 0xbae8, /*0x38-0x3f*/
-  0xfb63, 0xf0be, 0xf0bf, 0xbee9, 0xf0c0, 0xb6ec, 0xf0c1, 0xf0c2, /*0x40-0x47*/
-  0xf0c3, 0xf0c4, 0xc8b5, 0xf0c5, 0xf0c6, 0xfb64, 0xf0c7, 0xc5f4, /*0x48-0x4f*/
-  0xfb65, 0xf0c8, 0xfb66, 0xfb67, 0xfb68, 0xf0c9, 0xfb69, 0xf0ca, /*0x50-0x57*/
-  0xf7bd, 0xfb6a, 0xf0cb, 0xf0cc, 0xf0cd, 0xfb6b, 0xf0ce, 0xfb6c, /*0x58-0x5f*/
-  0xfb6d, 0xfb6e, 0xfb6f, 0xf0cf, 0xbad7, 0xfb70, 0xf0d0, 0xf0d1, /*0x60-0x67*/
-  0xf0d2, 0xf0d3, 0xf0d4, 0xf0d5, 0xf0d6, 0xf0d8, 0xfb71, 0xfb72, /*0x68-0x6f*/
-  0xd3a5, 0xf0d7, 0xfb73, 0xf0d9, 0xfb74, 0xfb75, 0xfb76, 0xfb77, /*0x70-0x77*/
-  0xfb78, 0xfb79, 0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d, 0xf5ba, 0xc2b9, /*0x78-0x7f*/
-  0xfb7e, 0xfb80, 0xf7e4, 0xfb81, 0xfb82, 0xfb83, 0xfb84, 0xf7e5, /*0x80-0x87*/
-  0xf7e6, 0xfb85, 0xfb86, 0xf7e7, 0xfb87, 0xfb88, 0xfb89, 0xfb8a, /*0x88-0x8f*/
-  0xfb8b, 0xfb8c, 0xf7e8, 0xc2b4, 0xfb8d, 0xfb8e, 0xfb8f, 0xfb90, /*0x90-0x97*/
-  0xfb91, 0xfb92, 0xfb93, 0xfb94, 0xfb95, 0xf7ea, 0xfb96, 0xf7eb, /*0x98-0x9f*/
-  0xfb97, 0xfb98, 0xfb99, 0xfb9a, 0xfb9b, 0xfb9c, 0xc2f3, 0xfb9d, /*0xa0-0xa7*/
-  0xfb9e, 0xfb9f, 0xfba0, 0xfc40, 0xfc41, 0xfc42, 0xfc43, 0xfc44, /*0xa8-0xaf*/
-  0xfc45, 0xfc46, 0xfc47, 0xfc48, 0xf4f0, 0xfc49, 0xfc4a, 0xfc4b, /*0xb0-0xb7*/
-  0xf4ef, 0xfc4c, 0xfc4d, 0xc2e9, 0xfc4e, 0xf7e1, 0xf7e2, 0xfc4f, /*0xb8-0xbf*/
-  0xfc50, 0xfc51, 0xfc52, 0xfc53, 0xbbc6, 0xfc54, 0xfc55, 0xfc56, /*0xc0-0xc7*/
-  0xfc57, 0xd9e4, 0xfc58, 0xfc59, 0xfc5a, 0xcaf2, 0xc0e8, 0xf0a4, /*0xc8-0xcf*/
-  0xfc5b, 0xbada, 0xfc5c, 0xfc5d, 0xc7ad, 0xfc5e, 0xfc5f, 0xfc60, /*0xd0-0xd7*/
-  0xc4ac, 0xfc61, 0xfc62, 0xf7ec, 0xf7ed, 0xf7ee, 0xfc63, 0xf7f0, /*0xd8-0xdf*/
-  0xf7ef, 0xfc64, 0xf7f1, 0xfc65, 0xfc66, 0xf7f4, 0xfc67, 0xf7f3, /*0xe0-0xe7*/
-  0xfc68, 0xf7f2, 0xf7f5, 0xfc69, 0xfc6a, 0xfc6b, 0xfc6c, 0xf7f6, /*0xe8-0xef*/
-  0xfc6d, 0xfc6e, 0xfc6f, 0xfc70, 0xfc71, 0xfc72, 0xfc73, 0xfc74, /*0xf0-0xf7*/
-  0xfc75, 0xede9, 0xfc76, 0xedea, 0xedeb, 0xfc77, 0xf6bc, 0xfc78, /*0xf8-0xff*/
-  /* 0x9f00 */
-  0xfc79, 0xfc7a, 0xfc7b, 0xfc7c, 0xfc7d, 0xfc7e, 0xfc80, 0xfc81, /*0x00-0x07*/
-  0xfc82, 0xfc83, 0xfc84, 0xf6bd, 0xfc85, 0xf6be, 0xb6a6, 0xfc86, /*0x08-0x0f*/
-  0xd8be, 0xfc87, 0xfc88, 0xb9c4, 0xfc89, 0xfc8a, 0xfc8b, 0xd8bb, /*0x10-0x17*/
-  0xfc8c, 0xdcb1, 0xfc8d, 0xfc8e, 0xfc8f, 0xfc90, 0xfc91, 0xfc92, /*0x18-0x1f*/
-  0xcaf3, 0xfc93, 0xf7f7, 0xfc94, 0xfc95, 0xfc96, 0xfc97, 0xfc98, /*0x20-0x27*/
-  0xfc99, 0xfc9a, 0xfc9b, 0xfc9c, 0xf7f8, 0xfc9d, 0xfc9e, 0xf7f9, /*0x28-0x2f*/
-  0xfc9f, 0xfca0, 0xfd40, 0xfd41, 0xfd42, 0xfd43, 0xfd44, 0xf7fb, /*0x30-0x37*/
-  0xfd45, 0xf7fa, 0xfd46, 0xb1c7, 0xfd47, 0xf7fc, 0xf7fd, 0xfd48, /*0x38-0x3f*/
-  0xfd49, 0xfd4a, 0xfd4b, 0xfd4c, 0xf7fe, 0xfd4d, 0xfd4e, 0xfd4f, /*0x40-0x47*/
-  0xfd50, 0xfd51, 0xfd52, 0xfd53, 0xfd54, 0xfd55, 0xfd56, 0xfd57, /*0x48-0x4f*/
-  0xc6eb, 0xecb4, 0xfd58, 0xfd59, 0xfd5a, 0xfd5b, 0xfd5c, 0xfd5d, /*0x50-0x57*/
-  0xfd5e, 0xfd5f, 0xfd60, 0xfd61, 0xfd62, 0xfd63, 0xfd64, 0xfd65, /*0x58-0x5f*/
-  0xfd66, 0xfd67, 0xfd68, 0xfd69, 0xfd6a, 0xfd6b, 0xfd6c, 0xfd6d, /*0x60-0x67*/
-  0xfd6e, 0xfd6f, 0xfd70, 0xfd71, 0xfd72, 0xfd73, 0xfd74, 0xfd75, /*0x68-0x6f*/
-  0xfd76, 0xfd77, 0xfd78, 0xfd79, 0xfd7a, 0xfd7b, 0xfd7c, 0xfd7d, /*0x70-0x77*/
-  0xfd7e, 0xfd80, 0xfd81, 0xfd82, 0xfd83, 0xfd84, 0xfd85, 0xb3dd, /*0x78-0x7f*/
-  0xf6b3, 0xfd86, 0xfd87, 0xf6b4, 0xc1e4, 0xf6b5, 0xf6b6, 0xf6b7, /*0x80-0x87*/
-  0xf6b8, 0xf6b9, 0xf6ba, 0xc8a3, 0xf6bb, 0xfd88, 0xfd89, 0xfd8a, /*0x88-0x8f*/
-  0xfd8b, 0xfd8c, 0xfd8d, 0xfd8e, 0xfd8f, 0xfd90, 0xfd91, 0xfd92, /*0x90-0x97*/
-  0xfd93, 0xc1fa, 0xb9a8, 0xede8, 0xfd94, 0xfd95, 0xfd96, 0xb9ea, /*0x98-0x9f*/
-  0xd9df, 0xfd97, 0xfd98, 0xfd99, 0xfd9a, 0xfd9b, 0x0000, 0x0000, /*0xa0-0xa7*/
-};
-static const unsigned short cp936ext_page1f2f[32] = {
-  0x0000, 0xfd9d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfd9e, 0x0000, 0x0000, /*0x90-0x97*/
-};
-static const unsigned short cp936ext_page1f3c[24] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfd9f, /*0xe0-0xe7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xe8-0xef*/
-  0x0000, 0xfda0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xf0-0xf7*/
-};
-static const unsigned short cp936ext_page1f41[40] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0xfe40, 0xfe41, 0xfe42, 0xfe43, /*0x08-0x0f*/
-  0x0000, 0xfe44, 0x0000, 0xfe45, 0xfe46, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/
-  0xfe47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe48, /*0x18-0x1f*/
-  0xfe49, 0xfe4a, 0x0000, 0xfe4b, 0xfe4c, 0x0000, 0x0000, 0xfe4d, /*0x20-0x27*/
-  0xfe4e, 0xfe4f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-};
-static const unsigned short cp936ext_page1fc6[64] = {
-  0xa955, 0xa6f2, 0x0000, 0xa6f4, 0xa6f5, 0xa6e0, 0xa6e1, 0xa6f0, /*0x30-0x37*/
-  0xa6f1, 0xa6e2, 0xa6e3, 0xa6ee, 0xa6ef, 0xa6e6, 0xa6e7, 0xa6e4, /*0x38-0x3f*/
-  0xa6e5, 0xa6e8, 0xa6e9, 0xa6ea, 0xa6eb, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-  0x0000, 0xa968, 0xa969, 0xa96a, 0xa96b, 0xa96c, 0xa96d, 0xa96e, /*0x48-0x4f*/
-  0xa96f, 0xa970, 0xa971, 0x0000, 0xa972, 0xa973, 0xa974, 0xa975, /*0x50-0x57*/
-  0x0000, 0xa976, 0xa977, 0xa978, 0xa979, 0xa97a, 0xa97b, 0xa97c, /*0x58-0x5f*/
-  0xa97d, 0xa97e, 0xa980, 0xa981, 0xa982, 0xa983, 0xa984, 0x0000, /*0x60-0x67*/
-  0xa985, 0xa986, 0xa987, 0xa988, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/
-};
-static const unsigned short cp936ext_page1fe0[96] = {
-  0x0000, 0xa3a1, 0xa3a2, 0xa3a3, 0xa1e7, 0xa3a5, 0xa3a6, 0xa3a7, /*0x00-0x07*/
-  0xa3a8, 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, /*0x08-0x0f*/
-  0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, /*0x10-0x17*/
-  0xa3b8, 0xa3b9, 0xa3ba, 0xa3bb, 0xa3bc, 0xa3bd, 0xa3be, 0xa3bf, /*0x18-0x1f*/
-  0xa3c0, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c6, 0xa3c7, /*0x20-0x27*/
-  0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd, 0xa3ce, 0xa3cf, /*0x28-0x2f*/
-  0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5, 0xa3d6, 0xa3d7, /*0x30-0x37*/
-  0xa3d8, 0xa3d9, 0xa3da, 0xa3db, 0xa3dc, 0xa3dd, 0xa3de, 0xa3df, /*0x38-0x3f*/
-  0xa3e0, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5, 0xa3e6, 0xa3e7, /*0x40-0x47*/
-  0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed, 0xa3ee, 0xa3ef, /*0x48-0x4f*/
-  0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5, 0xa3f6, 0xa3f7, /*0x50-0x57*/
-  0xa3f8, 0xa3f9, 0xa3fa, 0xa3fb, 0xa3fc, 0xa3fd, 0xa1ab, 0x0000, /*0x58-0x5f*/
-};
-static const unsigned short cp936ext_page1ffc[8] = {
-  0xa1e9, 0xa1ea, 0xa956, 0xa3fe, 0xa957, 0xa3a4, 0x0000, 0x0000, /*0xe0-0xe7*/
-};
-
-static int
-cp936ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    unsigned short c = 0;
-    if (wc >= 0x00a0 && wc < 0x0170)
-      c = cp936ext_page0014[wc-0x00a0];
-    else if (wc >= 0x01c8 && wc < 0x01e0)
-      c = cp936ext_page0039[wc-0x01c8];
-    else if (wc >= 0x0250 && wc < 0x0268)
-      c = cp936ext_page004a[wc-0x0250];
-    else if (wc >= 0x02c0 && wc < 0x02e0)
-      c = cp936ext_page0058[wc-0x02c0];
-    else if (wc >= 0x0390 && wc < 0x03d0)
-      c = cp936ext_page0072[wc-0x0390];
-    else if (wc >= 0x0400 && wc < 0x0458)
-      c = cp936ext_page0080[wc-0x0400];
-    else if (wc >= 0x2010 && wc < 0x2040)
-      c = cp936ext_page0402[wc-0x2010];
-    else if (wc >= 0x2100 && wc < 0x21a0)
-      c = cp936ext_page0420[wc-0x2100];
-    else if (wc >= 0x2208 && wc < 0x22c0)
-      c = cp936ext_page0441[wc-0x2208];
-    else if (wc == 0x2312)
-      c = 0xa1d0;
-    else if (wc >= 0x2460 && wc < 0x24a0)
-      c = cp936ext_page048c[wc-0x2460];
-    else if (wc >= 0x2500 && wc < 0x25e8)
-      c = cp936ext_page04a0[wc-0x2500];
-    else if (wc >= 0x2600 && wc < 0x2648)
-      c = cp936ext_page04c0[wc-0x2600];
-    else if (wc >= 0x3000 && wc < 0x3130)
-      c = cp936ext_page0600[wc-0x3000];
-    else if (wc >= 0x3220 && wc < 0x3238)
-      c = cp936ext_page0644[wc-0x3220];
-    else if (wc == 0x32a3)
-      c = 0xa949;
-    else if (wc >= 0x3388 && wc < 0x33d8)
-      c = cp936ext_page0671[wc-0x3388];
-    else if (wc >= 0x4e00 && wc < 0x9fa8)
-      c = cp936ext_page09c0[wc-0x4e00];
-    else if (wc == 0xf92c)
-      c = 0xfd9c;
-    else if (wc >= 0xf978 && wc < 0xf998)
-      c = cp936ext_page1f2f[wc-0xf978];
-    else if (wc >= 0xf9e0 && wc < 0xf9f8)
-      c = cp936ext_page1f3c[wc-0xf9e0];
-    else if (wc >= 0xfa08 && wc < 0xfa30)
-      c = cp936ext_page1f41[wc-0xfa08];
-    else if (wc >= 0xfe30 && wc < 0xfe70)
-      c = cp936ext_page1fc6[wc-0xfe30];
-    else if (wc >= 0xff00 && wc < 0xff60)
-      c = cp936ext_page1fe0[wc-0xff00];
-    else if (wc >= 0xffe0 && wc < 0xffe8)
-      c = cp936ext_page1ffc[wc-0xffe0];
-    if (c != 0) {
-      r[0] = (c >> 8); r[1] = (c & 0xff);
-      return 2;
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
-
-#endif /* CP936 */
-
-#endif /* __APPLE__  WIN32 */
-
-/*
- * End of "$Id$".
- */
diff --git a/common/fltk/src/xutf8/lcUniConv/gb2312.h b/common/fltk/src/xutf8/lcUniConv/gb2312.h
deleted file mode 100644
index acd21be..0000000
--- a/common/fltk/src/xutf8/lcUniConv/gb2312.h
+++ /dev/null
@@ -1,2556 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/gb2312.h,v 1.5 2003/05/27 22:26:29 tsi Exp $ */
-
-/*
- * GB2312.1980-0
- */
-#ifdef NEED_TOWC
-static const unsigned short gb2312_2uni_page21[831] = {
-  /* 0x21 */
-  0x3000, 0x3001, 0x3002, 0x30fb, 0x02c9, 0x02c7, 0x00a8, 0x3003,
-  0x3005, 0x2015, 0xff5e, 0x2016, 0x2026, 0x2018, 0x2019, 0x201c,
-  0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c,
-  0x300d, 0x300e, 0x300f, 0x3016, 0x3017, 0x3010, 0x3011, 0x00b1,
-  0x00d7, 0x00f7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220f, 0x222a,
-  0x2229, 0x2208, 0x2237, 0x221a, 0x22a5, 0x2225, 0x2220, 0x2312,
-  0x2299, 0x222b, 0x222e, 0x2261, 0x224c, 0x2248, 0x223d, 0x221d,
-  0x2260, 0x226e, 0x226f, 0x2264, 0x2265, 0x221e, 0x2235, 0x2234,
-  0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xff04, 0x00a4,
-  0xffe0, 0xffe1, 0x2030, 0x00a7, 0x2116, 0x2606, 0x2605, 0x25cb,
-  0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2,
-  0x203b, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013,
-  /* 0x22 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f,
-  0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497,
-  0x2498, 0x2499, 0x249a, 0x249b, 0x2474, 0x2475, 0x2476, 0x2477,
-  0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f,
-  0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487,
-  0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467,
-  0x2468, 0x2469, 0xfffd, 0xfffd, 0x3220, 0x3221, 0x3222, 0x3223,
-  0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0xfffd, 0xfffd,
-  0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167,
-  0x2168, 0x2169, 0x216a, 0x216b, 0xfffd, 0xfffd,
-  /* 0x23 */
-  0xff01, 0xff02, 0xff03, 0xffe5, 0xff05, 0xff06, 0xff07, 0xff08,
-  0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10,
-  0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18,
-  0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20,
-  0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28,
-  0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
-  0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38,
-  0xff39, 0xff3a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40,
-  0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48,
-  0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50,
-  0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58,
-  0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3,
-  /* 0x24 */
-  0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
-  0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050,
-  0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
-  0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060,
-  0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
-  0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070,
-  0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
-  0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080,
-  0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
-  0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090,
-  0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x25 */
-  0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8,
-  0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
-  0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8,
-  0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
-  0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8,
-  0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
-  0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8,
-  0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
-  0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8,
-  0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
-  0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x26 */
-  0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
-  0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
-  0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
-  0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
-  0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x27 */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
-  0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
-  0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e,
-  0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
-  0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
-  0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e,
-  0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x28 */
-  0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0113, 0x00e9, 0x011b, 0x00e8,
-  0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2,
-  0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x01dc,
-  0x00fc, 0x00ea, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3105, 0x3106, 0x3107, 0x3108,
-  0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110,
-  0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118,
-  0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120,
-  0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128,
-  0x3129, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x29 */
-  0xfffd, 0xfffd, 0xfffd, 0x2500, 0x2501, 0x2502, 0x2503, 0x2504,
-  0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250a, 0x250b, 0x250c,
-  0x250d, 0x250e, 0x250f, 0x2510, 0x2511, 0x2512, 0x2513, 0x2514,
-  0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251a, 0x251b, 0x251c,
-  0x251d, 0x251e, 0x251f, 0x2520, 0x2521, 0x2522, 0x2523, 0x2524,
-  0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c,
-  0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534,
-  0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c,
-  0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544,
-  0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b,
-};
-static const unsigned short gb2312_2uni_page30[6768] = {
-  /* 0x30 */
-  0x554a, 0x963f, 0x57c3, 0x6328, 0x54ce, 0x5509, 0x54c0, 0x7691,
-  0x764c, 0x853c, 0x77ee, 0x827e, 0x788d, 0x7231, 0x9698, 0x978d,
-  0x6c28, 0x5b89, 0x4ffa, 0x6309, 0x6697, 0x5cb8, 0x80fa, 0x6848,
-  0x80ae, 0x6602, 0x76ce, 0x51f9, 0x6556, 0x71ac, 0x7ff1, 0x8884,
-  0x50b2, 0x5965, 0x61ca, 0x6fb3, 0x82ad, 0x634c, 0x6252, 0x53ed,
-  0x5427, 0x7b06, 0x516b, 0x75a4, 0x5df4, 0x62d4, 0x8dcb, 0x9776,
-  0x628a, 0x8019, 0x575d, 0x9738, 0x7f62, 0x7238, 0x767d, 0x67cf,
-  0x767e, 0x6446, 0x4f70, 0x8d25, 0x62dc, 0x7a17, 0x6591, 0x73ed,
-  0x642c, 0x6273, 0x822c, 0x9881, 0x677f, 0x7248, 0x626e, 0x62cc,
-  0x4f34, 0x74e3, 0x534a, 0x529e, 0x7eca, 0x90a6, 0x5e2e, 0x6886,
-  0x699c, 0x8180, 0x7ed1, 0x68d2, 0x78c5, 0x868c, 0x9551, 0x508d,
-  0x8c24, 0x82de, 0x80de, 0x5305, 0x8912, 0x5265,
-  /* 0x31 */
-  0x8584, 0x96f9, 0x4fdd, 0x5821, 0x9971, 0x5b9d, 0x62b1, 0x62a5,
-  0x66b4, 0x8c79, 0x9c8d, 0x7206, 0x676f, 0x7891, 0x60b2, 0x5351,
-  0x5317, 0x8f88, 0x80cc, 0x8d1d, 0x94a1, 0x500d, 0x72c8, 0x5907,
-  0x60eb, 0x7119, 0x88ab, 0x5954, 0x82ef, 0x672c, 0x7b28, 0x5d29,
-  0x7ef7, 0x752d, 0x6cf5, 0x8e66, 0x8ff8, 0x903c, 0x9f3b, 0x6bd4,
-  0x9119, 0x7b14, 0x5f7c, 0x78a7, 0x84d6, 0x853d, 0x6bd5, 0x6bd9,
-  0x6bd6, 0x5e01, 0x5e87, 0x75f9, 0x95ed, 0x655d, 0x5f0a, 0x5fc5,
-  0x8f9f, 0x58c1, 0x81c2, 0x907f, 0x965b, 0x97ad, 0x8fb9, 0x7f16,
-  0x8d2c, 0x6241, 0x4fbf, 0x53d8, 0x535e, 0x8fa8, 0x8fa9, 0x8fab,
-  0x904d, 0x6807, 0x5f6a, 0x8198, 0x8868, 0x9cd6, 0x618b, 0x522b,
-  0x762a, 0x5f6c, 0x658c, 0x6fd2, 0x6ee8, 0x5bbe, 0x6448, 0x5175,
-  0x51b0, 0x67c4, 0x4e19, 0x79c9, 0x997c, 0x70b3,
-  /* 0x32 */
-  0x75c5, 0x5e76, 0x73bb, 0x83e0, 0x64ad, 0x62e8, 0x94b5, 0x6ce2,
-  0x535a, 0x52c3, 0x640f, 0x94c2, 0x7b94, 0x4f2f, 0x5e1b, 0x8236,
-  0x8116, 0x818a, 0x6e24, 0x6cca, 0x9a73, 0x6355, 0x535c, 0x54fa,
-  0x8865, 0x57e0, 0x4e0d, 0x5e03, 0x6b65, 0x7c3f, 0x90e8, 0x6016,
-  0x64e6, 0x731c, 0x88c1, 0x6750, 0x624d, 0x8d22, 0x776c, 0x8e29,
-  0x91c7, 0x5f69, 0x83dc, 0x8521, 0x9910, 0x53c2, 0x8695, 0x6b8b,
-  0x60ed, 0x60e8, 0x707f, 0x82cd, 0x8231, 0x4ed3, 0x6ca7, 0x85cf,
-  0x64cd, 0x7cd9, 0x69fd, 0x66f9, 0x8349, 0x5395, 0x7b56, 0x4fa7,
-  0x518c, 0x6d4b, 0x5c42, 0x8e6d, 0x63d2, 0x53c9, 0x832c, 0x8336,
-  0x67e5, 0x78b4, 0x643d, 0x5bdf, 0x5c94, 0x5dee, 0x8be7, 0x62c6,
-  0x67f4, 0x8c7a, 0x6400, 0x63ba, 0x8749, 0x998b, 0x8c17, 0x7f20,
-  0x94f2, 0x4ea7, 0x9610, 0x98a4, 0x660c, 0x7316,
-  /* 0x33 */
-  0x573a, 0x5c1d, 0x5e38, 0x957f, 0x507f, 0x80a0, 0x5382, 0x655e,
-  0x7545, 0x5531, 0x5021, 0x8d85, 0x6284, 0x949e, 0x671d, 0x5632,
-  0x6f6e, 0x5de2, 0x5435, 0x7092, 0x8f66, 0x626f, 0x64a4, 0x63a3,
-  0x5f7b, 0x6f88, 0x90f4, 0x81e3, 0x8fb0, 0x5c18, 0x6668, 0x5ff1,
-  0x6c89, 0x9648, 0x8d81, 0x886c, 0x6491, 0x79f0, 0x57ce, 0x6a59,
-  0x6210, 0x5448, 0x4e58, 0x7a0b, 0x60e9, 0x6f84, 0x8bda, 0x627f,
-  0x901e, 0x9a8b, 0x79e4, 0x5403, 0x75f4, 0x6301, 0x5319, 0x6c60,
-  0x8fdf, 0x5f1b, 0x9a70, 0x803b, 0x9f7f, 0x4f88, 0x5c3a, 0x8d64,
-  0x7fc5, 0x65a5, 0x70bd, 0x5145, 0x51b2, 0x866b, 0x5d07, 0x5ba0,
-  0x62bd, 0x916c, 0x7574, 0x8e0c, 0x7a20, 0x6101, 0x7b79, 0x4ec7,
-  0x7ef8, 0x7785, 0x4e11, 0x81ed, 0x521d, 0x51fa, 0x6a71, 0x53a8,
-  0x8e87, 0x9504, 0x96cf, 0x6ec1, 0x9664, 0x695a,
-  /* 0x34 */
-  0x7840, 0x50a8, 0x77d7, 0x6410, 0x89e6, 0x5904, 0x63e3, 0x5ddd,
-  0x7a7f, 0x693d, 0x4f20, 0x8239, 0x5598, 0x4e32, 0x75ae, 0x7a97,
-  0x5e62, 0x5e8a, 0x95ef, 0x521b, 0x5439, 0x708a, 0x6376, 0x9524,
-  0x5782, 0x6625, 0x693f, 0x9187, 0x5507, 0x6df3, 0x7eaf, 0x8822,
-  0x6233, 0x7ef0, 0x75b5, 0x8328, 0x78c1, 0x96cc, 0x8f9e, 0x6148,
-  0x74f7, 0x8bcd, 0x6b64, 0x523a, 0x8d50, 0x6b21, 0x806a, 0x8471,
-  0x56f1, 0x5306, 0x4ece, 0x4e1b, 0x51d1, 0x7c97, 0x918b, 0x7c07,
-  0x4fc3, 0x8e7f, 0x7be1, 0x7a9c, 0x6467, 0x5d14, 0x50ac, 0x8106,
-  0x7601, 0x7cb9, 0x6dec, 0x7fe0, 0x6751, 0x5b58, 0x5bf8, 0x78cb,
-  0x64ae, 0x6413, 0x63aa, 0x632b, 0x9519, 0x642d, 0x8fbe, 0x7b54,
-  0x7629, 0x6253, 0x5927, 0x5446, 0x6b79, 0x50a3, 0x6234, 0x5e26,
-  0x6b86, 0x4ee3, 0x8d37, 0x888b, 0x5f85, 0x902e,
-  /* 0x35 */
-  0x6020, 0x803d, 0x62c5, 0x4e39, 0x5355, 0x90f8, 0x63b8, 0x80c6,
-  0x65e6, 0x6c2e, 0x4f46, 0x60ee, 0x6de1, 0x8bde, 0x5f39, 0x86cb,
-  0x5f53, 0x6321, 0x515a, 0x8361, 0x6863, 0x5200, 0x6363, 0x8e48,
-  0x5012, 0x5c9b, 0x7977, 0x5bfc, 0x5230, 0x7a3b, 0x60bc, 0x9053,
-  0x76d7, 0x5fb7, 0x5f97, 0x7684, 0x8e6c, 0x706f, 0x767b, 0x7b49,
-  0x77aa, 0x51f3, 0x9093, 0x5824, 0x4f4e, 0x6ef4, 0x8fea, 0x654c,
-  0x7b1b, 0x72c4, 0x6da4, 0x7fdf, 0x5ae1, 0x62b5, 0x5e95, 0x5730,
-  0x8482, 0x7b2c, 0x5e1d, 0x5f1f, 0x9012, 0x7f14, 0x98a0, 0x6382,
-  0x6ec7, 0x7898, 0x70b9, 0x5178, 0x975b, 0x57ab, 0x7535, 0x4f43,
-  0x7538, 0x5e97, 0x60e6, 0x5960, 0x6dc0, 0x6bbf, 0x7889, 0x53fc,
-  0x96d5, 0x51cb, 0x5201, 0x6389, 0x540a, 0x9493, 0x8c03, 0x8dcc,
-  0x7239, 0x789f, 0x8776, 0x8fed, 0x8c0d, 0x53e0,
-  /* 0x36 */
-  0x4e01, 0x76ef, 0x53ee, 0x9489, 0x9876, 0x9f0e, 0x952d, 0x5b9a,
-  0x8ba2, 0x4e22, 0x4e1c, 0x51ac, 0x8463, 0x61c2, 0x52a8, 0x680b,
-  0x4f97, 0x606b, 0x51bb, 0x6d1e, 0x515c, 0x6296, 0x6597, 0x9661,
-  0x8c46, 0x9017, 0x75d8, 0x90fd, 0x7763, 0x6bd2, 0x728a, 0x72ec,
-  0x8bfb, 0x5835, 0x7779, 0x8d4c, 0x675c, 0x9540, 0x809a, 0x5ea6,
-  0x6e21, 0x5992, 0x7aef, 0x77ed, 0x953b, 0x6bb5, 0x65ad, 0x7f0e,
-  0x5806, 0x5151, 0x961f, 0x5bf9, 0x58a9, 0x5428, 0x8e72, 0x6566,
-  0x987f, 0x56e4, 0x949d, 0x76fe, 0x9041, 0x6387, 0x54c6, 0x591a,
-  0x593a, 0x579b, 0x8eb2, 0x6735, 0x8dfa, 0x8235, 0x5241, 0x60f0,
-  0x5815, 0x86fe, 0x5ce8, 0x9e45, 0x4fc4, 0x989d, 0x8bb9, 0x5a25,
-  0x6076, 0x5384, 0x627c, 0x904f, 0x9102, 0x997f, 0x6069, 0x800c,
-  0x513f, 0x8033, 0x5c14, 0x9975, 0x6d31, 0x4e8c,
-  /* 0x37 */
-  0x8d30, 0x53d1, 0x7f5a, 0x7b4f, 0x4f10, 0x4e4f, 0x9600, 0x6cd5,
-  0x73d0, 0x85e9, 0x5e06, 0x756a, 0x7ffb, 0x6a0a, 0x77fe, 0x9492,
-  0x7e41, 0x51e1, 0x70e6, 0x53cd, 0x8fd4, 0x8303, 0x8d29, 0x72af,
-  0x996d, 0x6cdb, 0x574a, 0x82b3, 0x65b9, 0x80aa, 0x623f, 0x9632,
-  0x59a8, 0x4eff, 0x8bbf, 0x7eba, 0x653e, 0x83f2, 0x975e, 0x5561,
-  0x98de, 0x80a5, 0x532a, 0x8bfd, 0x5420, 0x80ba, 0x5e9f, 0x6cb8,
-  0x8d39, 0x82ac, 0x915a, 0x5429, 0x6c1b, 0x5206, 0x7eb7, 0x575f,
-  0x711a, 0x6c7e, 0x7c89, 0x594b, 0x4efd, 0x5fff, 0x6124, 0x7caa,
-  0x4e30, 0x5c01, 0x67ab, 0x8702, 0x5cf0, 0x950b, 0x98ce, 0x75af,
-  0x70fd, 0x9022, 0x51af, 0x7f1d, 0x8bbd, 0x5949, 0x51e4, 0x4f5b,
-  0x5426, 0x592b, 0x6577, 0x80a4, 0x5b75, 0x6276, 0x62c2, 0x8f90,
-  0x5e45, 0x6c1f, 0x7b26, 0x4f0f, 0x4fd8, 0x670d,
-  /* 0x38 */
-  0x6d6e, 0x6daa, 0x798f, 0x88b1, 0x5f17, 0x752b, 0x629a, 0x8f85,
-  0x4fef, 0x91dc, 0x65a7, 0x812f, 0x8151, 0x5e9c, 0x8150, 0x8d74,
-  0x526f, 0x8986, 0x8d4b, 0x590d, 0x5085, 0x4ed8, 0x961c, 0x7236,
-  0x8179, 0x8d1f, 0x5bcc, 0x8ba3, 0x9644, 0x5987, 0x7f1a, 0x5490,
-  0x5676, 0x560e, 0x8be5, 0x6539, 0x6982, 0x9499, 0x76d6, 0x6e89,
-  0x5e72, 0x7518, 0x6746, 0x67d1, 0x7aff, 0x809d, 0x8d76, 0x611f,
-  0x79c6, 0x6562, 0x8d63, 0x5188, 0x521a, 0x94a2, 0x7f38, 0x809b,
-  0x7eb2, 0x5c97, 0x6e2f, 0x6760, 0x7bd9, 0x768b, 0x9ad8, 0x818f,
-  0x7f94, 0x7cd5, 0x641e, 0x9550, 0x7a3f, 0x544a, 0x54e5, 0x6b4c,
-  0x6401, 0x6208, 0x9e3d, 0x80f3, 0x7599, 0x5272, 0x9769, 0x845b,
-  0x683c, 0x86e4, 0x9601, 0x9694, 0x94ec, 0x4e2a, 0x5404, 0x7ed9,
-  0x6839, 0x8ddf, 0x8015, 0x66f4, 0x5e9a, 0x7fb9,
-  /* 0x39 */
-  0x57c2, 0x803f, 0x6897, 0x5de5, 0x653b, 0x529f, 0x606d, 0x9f9a,
-  0x4f9b, 0x8eac, 0x516c, 0x5bab, 0x5f13, 0x5de9, 0x6c5e, 0x62f1,
-  0x8d21, 0x5171, 0x94a9, 0x52fe, 0x6c9f, 0x82df, 0x72d7, 0x57a2,
-  0x6784, 0x8d2d, 0x591f, 0x8f9c, 0x83c7, 0x5495, 0x7b8d, 0x4f30,
-  0x6cbd, 0x5b64, 0x59d1, 0x9f13, 0x53e4, 0x86ca, 0x9aa8, 0x8c37,
-  0x80a1, 0x6545, 0x987e, 0x56fa, 0x96c7, 0x522e, 0x74dc, 0x5250,
-  0x5be1, 0x6302, 0x8902, 0x4e56, 0x62d0, 0x602a, 0x68fa, 0x5173,
-  0x5b98, 0x51a0, 0x89c2, 0x7ba1, 0x9986, 0x7f50, 0x60ef, 0x704c,
-  0x8d2f, 0x5149, 0x5e7f, 0x901b, 0x7470, 0x89c4, 0x572d, 0x7845,
-  0x5f52, 0x9f9f, 0x95fa, 0x8f68, 0x9b3c, 0x8be1, 0x7678, 0x6842,
-  0x67dc, 0x8dea, 0x8d35, 0x523d, 0x8f8a, 0x6eda, 0x68cd, 0x9505,
-  0x90ed, 0x56fd, 0x679c, 0x88f9, 0x8fc7, 0x54c8,
-  /* 0x3a */
-  0x9ab8, 0x5b69, 0x6d77, 0x6c26, 0x4ea5, 0x5bb3, 0x9a87, 0x9163,
-  0x61a8, 0x90af, 0x97e9, 0x542b, 0x6db5, 0x5bd2, 0x51fd, 0x558a,
-  0x7f55, 0x7ff0, 0x64bc, 0x634d, 0x65f1, 0x61be, 0x608d, 0x710a,
-  0x6c57, 0x6c49, 0x592f, 0x676d, 0x822a, 0x58d5, 0x568e, 0x8c6a,
-  0x6beb, 0x90dd, 0x597d, 0x8017, 0x53f7, 0x6d69, 0x5475, 0x559d,
-  0x8377, 0x83cf, 0x6838, 0x79be, 0x548c, 0x4f55, 0x5408, 0x76d2,
-  0x8c89, 0x9602, 0x6cb3, 0x6db8, 0x8d6b, 0x8910, 0x9e64, 0x8d3a,
-  0x563f, 0x9ed1, 0x75d5, 0x5f88, 0x72e0, 0x6068, 0x54fc, 0x4ea8,
-  0x6a2a, 0x8861, 0x6052, 0x8f70, 0x54c4, 0x70d8, 0x8679, 0x9e3f,
-  0x6d2a, 0x5b8f, 0x5f18, 0x7ea2, 0x5589, 0x4faf, 0x7334, 0x543c,
-  0x539a, 0x5019, 0x540e, 0x547c, 0x4e4e, 0x5ffd, 0x745a, 0x58f6,
-  0x846b, 0x80e1, 0x8774, 0x72d0, 0x7cca, 0x6e56,
-  /* 0x3b */
-  0x5f27, 0x864e, 0x552c, 0x62a4, 0x4e92, 0x6caa, 0x6237, 0x82b1,
-  0x54d7, 0x534e, 0x733e, 0x6ed1, 0x753b, 0x5212, 0x5316, 0x8bdd,
-  0x69d0, 0x5f8a, 0x6000, 0x6dee, 0x574f, 0x6b22, 0x73af, 0x6853,
-  0x8fd8, 0x7f13, 0x6362, 0x60a3, 0x5524, 0x75ea, 0x8c62, 0x7115,
-  0x6da3, 0x5ba6, 0x5e7b, 0x8352, 0x614c, 0x9ec4, 0x78fa, 0x8757,
-  0x7c27, 0x7687, 0x51f0, 0x60f6, 0x714c, 0x6643, 0x5e4c, 0x604d,
-  0x8c0e, 0x7070, 0x6325, 0x8f89, 0x5fbd, 0x6062, 0x86d4, 0x56de,
-  0x6bc1, 0x6094, 0x6167, 0x5349, 0x60e0, 0x6666, 0x8d3f, 0x79fd,
-  0x4f1a, 0x70e9, 0x6c47, 0x8bb3, 0x8bf2, 0x7ed8, 0x8364, 0x660f,
-  0x5a5a, 0x9b42, 0x6d51, 0x6df7, 0x8c41, 0x6d3b, 0x4f19, 0x706b,
-  0x83b7, 0x6216, 0x60d1, 0x970d, 0x8d27, 0x7978, 0x51fb, 0x573e,
-  0x57fa, 0x673a, 0x7578, 0x7a3d, 0x79ef, 0x7b95,
-  /* 0x3c */
-  0x808c, 0x9965, 0x8ff9, 0x6fc0, 0x8ba5, 0x9e21, 0x59ec, 0x7ee9,
-  0x7f09, 0x5409, 0x6781, 0x68d8, 0x8f91, 0x7c4d, 0x96c6, 0x53ca,
-  0x6025, 0x75be, 0x6c72, 0x5373, 0x5ac9, 0x7ea7, 0x6324, 0x51e0,
-  0x810a, 0x5df1, 0x84df, 0x6280, 0x5180, 0x5b63, 0x4f0e, 0x796d,
-  0x5242, 0x60b8, 0x6d4e, 0x5bc4, 0x5bc2, 0x8ba1, 0x8bb0, 0x65e2,
-  0x5fcc, 0x9645, 0x5993, 0x7ee7, 0x7eaa, 0x5609, 0x67b7, 0x5939,
-  0x4f73, 0x5bb6, 0x52a0, 0x835a, 0x988a, 0x8d3e, 0x7532, 0x94be,
-  0x5047, 0x7a3c, 0x4ef7, 0x67b6, 0x9a7e, 0x5ac1, 0x6b7c, 0x76d1,
-  0x575a, 0x5c16, 0x7b3a, 0x95f4, 0x714e, 0x517c, 0x80a9, 0x8270,
-  0x5978, 0x7f04, 0x8327, 0x68c0, 0x67ec, 0x78b1, 0x7877, 0x62e3,
-  0x6361, 0x7b80, 0x4fed, 0x526a, 0x51cf, 0x8350, 0x69db, 0x9274,
-  0x8df5, 0x8d31, 0x89c1, 0x952e, 0x7bad, 0x4ef6,
-  /* 0x3d */
-  0x5065, 0x8230, 0x5251, 0x996f, 0x6e10, 0x6e85, 0x6da7, 0x5efa,
-  0x50f5, 0x59dc, 0x5c06, 0x6d46, 0x6c5f, 0x7586, 0x848b, 0x6868,
-  0x5956, 0x8bb2, 0x5320, 0x9171, 0x964d, 0x8549, 0x6912, 0x7901,
-  0x7126, 0x80f6, 0x4ea4, 0x90ca, 0x6d47, 0x9a84, 0x5a07, 0x56bc,
-  0x6405, 0x94f0, 0x77eb, 0x4fa5, 0x811a, 0x72e1, 0x89d2, 0x997a,
-  0x7f34, 0x7ede, 0x527f, 0x6559, 0x9175, 0x8f7f, 0x8f83, 0x53eb,
-  0x7a96, 0x63ed, 0x63a5, 0x7686, 0x79f8, 0x8857, 0x9636, 0x622a,
-  0x52ab, 0x8282, 0x6854, 0x6770, 0x6377, 0x776b, 0x7aed, 0x6d01,
-  0x7ed3, 0x89e3, 0x59d0, 0x6212, 0x85c9, 0x82a5, 0x754c, 0x501f,
-  0x4ecb, 0x75a5, 0x8beb, 0x5c4a, 0x5dfe, 0x7b4b, 0x65a4, 0x91d1,
-  0x4eca, 0x6d25, 0x895f, 0x7d27, 0x9526, 0x4ec5, 0x8c28, 0x8fdb,
-  0x9773, 0x664b, 0x7981, 0x8fd1, 0x70ec, 0x6d78,
-  /* 0x3e */
-  0x5c3d, 0x52b2, 0x8346, 0x5162, 0x830e, 0x775b, 0x6676, 0x9cb8,
-  0x4eac, 0x60ca, 0x7cbe, 0x7cb3, 0x7ecf, 0x4e95, 0x8b66, 0x666f,
-  0x9888, 0x9759, 0x5883, 0x656c, 0x955c, 0x5f84, 0x75c9, 0x9756,
-  0x7adf, 0x7ade, 0x51c0, 0x70af, 0x7a98, 0x63ea, 0x7a76, 0x7ea0,
-  0x7396, 0x97ed, 0x4e45, 0x7078, 0x4e5d, 0x9152, 0x53a9, 0x6551,
-  0x65e7, 0x81fc, 0x8205, 0x548e, 0x5c31, 0x759a, 0x97a0, 0x62d8,
-  0x72d9, 0x75bd, 0x5c45, 0x9a79, 0x83ca, 0x5c40, 0x5480, 0x77e9,
-  0x4e3e, 0x6cae, 0x805a, 0x62d2, 0x636e, 0x5de8, 0x5177, 0x8ddd,
-  0x8e1e, 0x952f, 0x4ff1, 0x53e5, 0x60e7, 0x70ac, 0x5267, 0x6350,
-  0x9e43, 0x5a1f, 0x5026, 0x7737, 0x5377, 0x7ee2, 0x6485, 0x652b,
-  0x6289, 0x6398, 0x5014, 0x7235, 0x89c9, 0x51b3, 0x8bc0, 0x7edd,
-  0x5747, 0x83cc, 0x94a7, 0x519b, 0x541b, 0x5cfb,
-  /* 0x3f */
-  0x4fca, 0x7ae3, 0x6d5a, 0x90e1, 0x9a8f, 0x5580, 0x5496, 0x5361,
-  0x54af, 0x5f00, 0x63e9, 0x6977, 0x51ef, 0x6168, 0x520a, 0x582a,
-  0x52d8, 0x574e, 0x780d, 0x770b, 0x5eb7, 0x6177, 0x7ce0, 0x625b,
-  0x6297, 0x4ea2, 0x7095, 0x8003, 0x62f7, 0x70e4, 0x9760, 0x5777,
-  0x82db, 0x67ef, 0x68f5, 0x78d5, 0x9897, 0x79d1, 0x58f3, 0x54b3,
-  0x53ef, 0x6e34, 0x514b, 0x523b, 0x5ba2, 0x8bfe, 0x80af, 0x5543,
-  0x57a6, 0x6073, 0x5751, 0x542d, 0x7a7a, 0x6050, 0x5b54, 0x63a7,
-  0x62a0, 0x53e3, 0x6263, 0x5bc7, 0x67af, 0x54ed, 0x7a9f, 0x82e6,
-  0x9177, 0x5e93, 0x88e4, 0x5938, 0x57ae, 0x630e, 0x8de8, 0x80ef,
-  0x5757, 0x7b77, 0x4fa9, 0x5feb, 0x5bbd, 0x6b3e, 0x5321, 0x7b50,
-  0x72c2, 0x6846, 0x77ff, 0x7736, 0x65f7, 0x51b5, 0x4e8f, 0x76d4,
-  0x5cbf, 0x7aa5, 0x8475, 0x594e, 0x9b41, 0x5080,
-  /* 0x40 */
-  0x9988, 0x6127, 0x6e83, 0x5764, 0x6606, 0x6346, 0x56f0, 0x62ec,
-  0x6269, 0x5ed3, 0x9614, 0x5783, 0x62c9, 0x5587, 0x8721, 0x814a,
-  0x8fa3, 0x5566, 0x83b1, 0x6765, 0x8d56, 0x84dd, 0x5a6a, 0x680f,
-  0x62e6, 0x7bee, 0x9611, 0x5170, 0x6f9c, 0x8c30, 0x63fd, 0x89c8,
-  0x61d2, 0x7f06, 0x70c2, 0x6ee5, 0x7405, 0x6994, 0x72fc, 0x5eca,
-  0x90ce, 0x6717, 0x6d6a, 0x635e, 0x52b3, 0x7262, 0x8001, 0x4f6c,
-  0x59e5, 0x916a, 0x70d9, 0x6d9d, 0x52d2, 0x4e50, 0x96f7, 0x956d,
-  0x857e, 0x78ca, 0x7d2f, 0x5121, 0x5792, 0x64c2, 0x808b, 0x7c7b,
-  0x6cea, 0x68f1, 0x695e, 0x51b7, 0x5398, 0x68a8, 0x7281, 0x9ece,
-  0x7bf1, 0x72f8, 0x79bb, 0x6f13, 0x7406, 0x674e, 0x91cc, 0x9ca4,
-  0x793c, 0x8389, 0x8354, 0x540f, 0x6817, 0x4e3d, 0x5389, 0x52b1,
-  0x783e, 0x5386, 0x5229, 0x5088, 0x4f8b, 0x4fd0,
-  /* 0x41 */
-  0x75e2, 0x7acb, 0x7c92, 0x6ca5, 0x96b6, 0x529b, 0x7483, 0x54e9,
-  0x4fe9, 0x8054, 0x83b2, 0x8fde, 0x9570, 0x5ec9, 0x601c, 0x6d9f,
-  0x5e18, 0x655b, 0x8138, 0x94fe, 0x604b, 0x70bc, 0x7ec3, 0x7cae,
-  0x51c9, 0x6881, 0x7cb1, 0x826f, 0x4e24, 0x8f86, 0x91cf, 0x667e,
-  0x4eae, 0x8c05, 0x64a9, 0x804a, 0x50da, 0x7597, 0x71ce, 0x5be5,
-  0x8fbd, 0x6f66, 0x4e86, 0x6482, 0x9563, 0x5ed6, 0x6599, 0x5217,
-  0x88c2, 0x70c8, 0x52a3, 0x730e, 0x7433, 0x6797, 0x78f7, 0x9716,
-  0x4e34, 0x90bb, 0x9cde, 0x6dcb, 0x51db, 0x8d41, 0x541d, 0x62ce,
-  0x73b2, 0x83f1, 0x96f6, 0x9f84, 0x94c3, 0x4f36, 0x7f9a, 0x51cc,
-  0x7075, 0x9675, 0x5cad, 0x9886, 0x53e6, 0x4ee4, 0x6e9c, 0x7409,
-  0x69b4, 0x786b, 0x998f, 0x7559, 0x5218, 0x7624, 0x6d41, 0x67f3,
-  0x516d, 0x9f99, 0x804b, 0x5499, 0x7b3c, 0x7abf,
-  /* 0x42 */
-  0x9686, 0x5784, 0x62e2, 0x9647, 0x697c, 0x5a04, 0x6402, 0x7bd3,
-  0x6f0f, 0x964b, 0x82a6, 0x5362, 0x9885, 0x5e90, 0x7089, 0x63b3,
-  0x5364, 0x864f, 0x9c81, 0x9e93, 0x788c, 0x9732, 0x8def, 0x8d42,
-  0x9e7f, 0x6f5e, 0x7984, 0x5f55, 0x9646, 0x622e, 0x9a74, 0x5415,
-  0x94dd, 0x4fa3, 0x65c5, 0x5c65, 0x5c61, 0x7f15, 0x8651, 0x6c2f,
-  0x5f8b, 0x7387, 0x6ee4, 0x7eff, 0x5ce6, 0x631b, 0x5b6a, 0x6ee6,
-  0x5375, 0x4e71, 0x63a0, 0x7565, 0x62a1, 0x8f6e, 0x4f26, 0x4ed1,
-  0x6ca6, 0x7eb6, 0x8bba, 0x841d, 0x87ba, 0x7f57, 0x903b, 0x9523,
-  0x7ba9, 0x9aa1, 0x88f8, 0x843d, 0x6d1b, 0x9a86, 0x7edc, 0x5988,
-  0x9ebb, 0x739b, 0x7801, 0x8682, 0x9a6c, 0x9a82, 0x561b, 0x5417,
-  0x57cb, 0x4e70, 0x9ea6, 0x5356, 0x8fc8, 0x8109, 0x7792, 0x9992,
-  0x86ee, 0x6ee1, 0x8513, 0x66fc, 0x6162, 0x6f2b,
-  /* 0x43 */
-  0x8c29, 0x8292, 0x832b, 0x76f2, 0x6c13, 0x5fd9, 0x83bd, 0x732b,
-  0x8305, 0x951a, 0x6bdb, 0x77db, 0x94c6, 0x536f, 0x8302, 0x5192,
-  0x5e3d, 0x8c8c, 0x8d38, 0x4e48, 0x73ab, 0x679a, 0x6885, 0x9176,
-  0x9709, 0x7164, 0x6ca1, 0x7709, 0x5a92, 0x9541, 0x6bcf, 0x7f8e,
-  0x6627, 0x5bd0, 0x59b9, 0x5a9a, 0x95e8, 0x95f7, 0x4eec, 0x840c,
-  0x8499, 0x6aac, 0x76df, 0x9530, 0x731b, 0x68a6, 0x5b5f, 0x772f,
-  0x919a, 0x9761, 0x7cdc, 0x8ff7, 0x8c1c, 0x5f25, 0x7c73, 0x79d8,
-  0x89c5, 0x6ccc, 0x871c, 0x5bc6, 0x5e42, 0x68c9, 0x7720, 0x7ef5,
-  0x5195, 0x514d, 0x52c9, 0x5a29, 0x7f05, 0x9762, 0x82d7, 0x63cf,
-  0x7784, 0x85d0, 0x79d2, 0x6e3a, 0x5e99, 0x5999, 0x8511, 0x706d,
-  0x6c11, 0x62bf, 0x76bf, 0x654f, 0x60af, 0x95fd, 0x660e, 0x879f,
-  0x9e23, 0x94ed, 0x540d, 0x547d, 0x8c2c, 0x6478,
-  /* 0x44 */
-  0x6479, 0x8611, 0x6a21, 0x819c, 0x78e8, 0x6469, 0x9b54, 0x62b9,
-  0x672b, 0x83ab, 0x58a8, 0x9ed8, 0x6cab, 0x6f20, 0x5bde, 0x964c,
-  0x8c0b, 0x725f, 0x67d0, 0x62c7, 0x7261, 0x4ea9, 0x59c6, 0x6bcd,
-  0x5893, 0x66ae, 0x5e55, 0x52df, 0x6155, 0x6728, 0x76ee, 0x7766,
-  0x7267, 0x7a46, 0x62ff, 0x54ea, 0x5450, 0x94a0, 0x90a3, 0x5a1c,
-  0x7eb3, 0x6c16, 0x4e43, 0x5976, 0x8010, 0x5948, 0x5357, 0x7537,
-  0x96be, 0x56ca, 0x6320, 0x8111, 0x607c, 0x95f9, 0x6dd6, 0x5462,
-  0x9981, 0x5185, 0x5ae9, 0x80fd, 0x59ae, 0x9713, 0x502a, 0x6ce5,
-  0x5c3c, 0x62df, 0x4f60, 0x533f, 0x817b, 0x9006, 0x6eba, 0x852b,
-  0x62c8, 0x5e74, 0x78be, 0x64b5, 0x637b, 0x5ff5, 0x5a18, 0x917f,
-  0x9e1f, 0x5c3f, 0x634f, 0x8042, 0x5b7d, 0x556e, 0x954a, 0x954d,
-  0x6d85, 0x60a8, 0x67e0, 0x72de, 0x51dd, 0x5b81,
-  /* 0x45 */
-  0x62e7, 0x6cde, 0x725b, 0x626d, 0x94ae, 0x7ebd, 0x8113, 0x6d53,
-  0x519c, 0x5f04, 0x5974, 0x52aa, 0x6012, 0x5973, 0x6696, 0x8650,
-  0x759f, 0x632a, 0x61e6, 0x7cef, 0x8bfa, 0x54e6, 0x6b27, 0x9e25,
-  0x6bb4, 0x85d5, 0x5455, 0x5076, 0x6ca4, 0x556a, 0x8db4, 0x722c,
-  0x5e15, 0x6015, 0x7436, 0x62cd, 0x6392, 0x724c, 0x5f98, 0x6e43,
-  0x6d3e, 0x6500, 0x6f58, 0x76d8, 0x78d0, 0x76fc, 0x7554, 0x5224,
-  0x53db, 0x4e53, 0x5e9e, 0x65c1, 0x802a, 0x80d6, 0x629b, 0x5486,
-  0x5228, 0x70ae, 0x888d, 0x8dd1, 0x6ce1, 0x5478, 0x80da, 0x57f9,
-  0x88f4, 0x8d54, 0x966a, 0x914d, 0x4f69, 0x6c9b, 0x55b7, 0x76c6,
-  0x7830, 0x62a8, 0x70f9, 0x6f8e, 0x5f6d, 0x84ec, 0x68da, 0x787c,
-  0x7bf7, 0x81a8, 0x670b, 0x9e4f, 0x6367, 0x78b0, 0x576f, 0x7812,
-  0x9739, 0x6279, 0x62ab, 0x5288, 0x7435, 0x6bd7,
-  /* 0x46 */
-  0x5564, 0x813e, 0x75b2, 0x76ae, 0x5339, 0x75de, 0x50fb, 0x5c41,
-  0x8b6c, 0x7bc7, 0x504f, 0x7247, 0x9a97, 0x98d8, 0x6f02, 0x74e2,
-  0x7968, 0x6487, 0x77a5, 0x62fc, 0x9891, 0x8d2b, 0x54c1, 0x8058,
-  0x4e52, 0x576a, 0x82f9, 0x840d, 0x5e73, 0x51ed, 0x74f6, 0x8bc4,
-  0x5c4f, 0x5761, 0x6cfc, 0x9887, 0x5a46, 0x7834, 0x9b44, 0x8feb,
-  0x7c95, 0x5256, 0x6251, 0x94fa, 0x4ec6, 0x8386, 0x8461, 0x83e9,
-  0x84b2, 0x57d4, 0x6734, 0x5703, 0x666e, 0x6d66, 0x8c31, 0x66dd,
-  0x7011, 0x671f, 0x6b3a, 0x6816, 0x621a, 0x59bb, 0x4e03, 0x51c4,
-  0x6f06, 0x67d2, 0x6c8f, 0x5176, 0x68cb, 0x5947, 0x6b67, 0x7566,
-  0x5d0e, 0x8110, 0x9f50, 0x65d7, 0x7948, 0x7941, 0x9a91, 0x8d77,
-  0x5c82, 0x4e5e, 0x4f01, 0x542f, 0x5951, 0x780c, 0x5668, 0x6c14,
-  0x8fc4, 0x5f03, 0x6c7d, 0x6ce3, 0x8bab, 0x6390,
-  /* 0x47 */
-  0x6070, 0x6d3d, 0x7275, 0x6266, 0x948e, 0x94c5, 0x5343, 0x8fc1,
-  0x7b7e, 0x4edf, 0x8c26, 0x4e7e, 0x9ed4, 0x94b1, 0x94b3, 0x524d,
-  0x6f5c, 0x9063, 0x6d45, 0x8c34, 0x5811, 0x5d4c, 0x6b20, 0x6b49,
-  0x67aa, 0x545b, 0x8154, 0x7f8c, 0x5899, 0x8537, 0x5f3a, 0x62a2,
-  0x6a47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77a7, 0x4e54, 0x4fa8,
-  0x5de7, 0x9798, 0x64ac, 0x7fd8, 0x5ced, 0x4fcf, 0x7a8d, 0x5207,
-  0x8304, 0x4e14, 0x602f, 0x7a83, 0x94a6, 0x4fb5, 0x4eb2, 0x79e6,
-  0x7434, 0x52e4, 0x82b9, 0x64d2, 0x79bd, 0x5bdd, 0x6c81, 0x9752,
-  0x8f7b, 0x6c22, 0x503e, 0x537f, 0x6e05, 0x64ce, 0x6674, 0x6c30,
-  0x60c5, 0x9877, 0x8bf7, 0x5e86, 0x743c, 0x7a77, 0x79cb, 0x4e18,
-  0x90b1, 0x7403, 0x6c42, 0x56da, 0x914b, 0x6cc5, 0x8d8b, 0x533a,
-  0x86c6, 0x66f2, 0x8eaf, 0x5c48, 0x9a71, 0x6e20,
-  /* 0x48 */
-  0x53d6, 0x5a36, 0x9f8b, 0x8da3, 0x53bb, 0x5708, 0x98a7, 0x6743,
-  0x919b, 0x6cc9, 0x5168, 0x75ca, 0x62f3, 0x72ac, 0x5238, 0x529d,
-  0x7f3a, 0x7094, 0x7638, 0x5374, 0x9e4a, 0x69b7, 0x786e, 0x96c0,
-  0x88d9, 0x7fa4, 0x7136, 0x71c3, 0x5189, 0x67d3, 0x74e4, 0x58e4,
-  0x6518, 0x56b7, 0x8ba9, 0x9976, 0x6270, 0x7ed5, 0x60f9, 0x70ed,
-  0x58ec, 0x4ec1, 0x4eba, 0x5fcd, 0x97e7, 0x4efb, 0x8ba4, 0x5203,
-  0x598a, 0x7eab, 0x6254, 0x4ecd, 0x65e5, 0x620e, 0x8338, 0x84c9,
-  0x8363, 0x878d, 0x7194, 0x6eb6, 0x5bb9, 0x7ed2, 0x5197, 0x63c9,
-  0x67d4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5b7a, 0x5982, 0x8fb1,
-  0x4e73, 0x6c5d, 0x5165, 0x8925, 0x8f6f, 0x962e, 0x854a, 0x745e,
-  0x9510, 0x95f0, 0x6da6, 0x82e5, 0x5f31, 0x6492, 0x6d12, 0x8428,
-  0x816e, 0x9cc3, 0x585e, 0x8d5b, 0x4e09, 0x53c1,
-  /* 0x49 */
-  0x4f1e, 0x6563, 0x6851, 0x55d3, 0x4e27, 0x6414, 0x9a9a, 0x626b,
-  0x5ac2, 0x745f, 0x8272, 0x6da9, 0x68ee, 0x50e7, 0x838e, 0x7802,
-  0x6740, 0x5239, 0x6c99, 0x7eb1, 0x50bb, 0x5565, 0x715e, 0x7b5b,
-  0x6652, 0x73ca, 0x82eb, 0x6749, 0x5c71, 0x5220, 0x717d, 0x886b,
-  0x95ea, 0x9655, 0x64c5, 0x8d61, 0x81b3, 0x5584, 0x6c55, 0x6247,
-  0x7f2e, 0x5892, 0x4f24, 0x5546, 0x8d4f, 0x664c, 0x4e0a, 0x5c1a,
-  0x88f3, 0x68a2, 0x634e, 0x7a0d, 0x70e7, 0x828d, 0x52fa, 0x97f6,
-  0x5c11, 0x54e8, 0x90b5, 0x7ecd, 0x5962, 0x8d4a, 0x86c7, 0x820c,
-  0x820d, 0x8d66, 0x6444, 0x5c04, 0x6151, 0x6d89, 0x793e, 0x8bbe,
-  0x7837, 0x7533, 0x547b, 0x4f38, 0x8eab, 0x6df1, 0x5a20, 0x7ec5,
-  0x795e, 0x6c88, 0x5ba1, 0x5a76, 0x751a, 0x80be, 0x614e, 0x6e17,
-  0x58f0, 0x751f, 0x7525, 0x7272, 0x5347, 0x7ef3,
-  /* 0x4a */
-  0x7701, 0x76db, 0x5269, 0x80dc, 0x5723, 0x5e08, 0x5931, 0x72ee,
-  0x65bd, 0x6e7f, 0x8bd7, 0x5c38, 0x8671, 0x5341, 0x77f3, 0x62fe,
-  0x65f6, 0x4ec0, 0x98df, 0x8680, 0x5b9e, 0x8bc6, 0x53f2, 0x77e2,
-  0x4f7f, 0x5c4e, 0x9a76, 0x59cb, 0x5f0f, 0x793a, 0x58eb, 0x4e16,
-  0x67ff, 0x4e8b, 0x62ed, 0x8a93, 0x901d, 0x52bf, 0x662f, 0x55dc,
-  0x566c, 0x9002, 0x4ed5, 0x4f8d, 0x91ca, 0x9970, 0x6c0f, 0x5e02,
-  0x6043, 0x5ba4, 0x89c6, 0x8bd5, 0x6536, 0x624b, 0x9996, 0x5b88,
-  0x5bff, 0x6388, 0x552e, 0x53d7, 0x7626, 0x517d, 0x852c, 0x67a2,
-  0x68b3, 0x6b8a, 0x6292, 0x8f93, 0x53d4, 0x8212, 0x6dd1, 0x758f,
-  0x4e66, 0x8d4e, 0x5b70, 0x719f, 0x85af, 0x6691, 0x66d9, 0x7f72,
-  0x8700, 0x9ecd, 0x9f20, 0x5c5e, 0x672f, 0x8ff0, 0x6811, 0x675f,
-  0x620d, 0x7ad6, 0x5885, 0x5eb6, 0x6570, 0x6f31,
-  /* 0x4b */
-  0x6055, 0x5237, 0x800d, 0x6454, 0x8870, 0x7529, 0x5e05, 0x6813,
-  0x62f4, 0x971c, 0x53cc, 0x723d, 0x8c01, 0x6c34, 0x7761, 0x7a0e,
-  0x542e, 0x77ac, 0x987a, 0x821c, 0x8bf4, 0x7855, 0x6714, 0x70c1,
-  0x65af, 0x6495, 0x5636, 0x601d, 0x79c1, 0x53f8, 0x4e1d, 0x6b7b,
-  0x8086, 0x5bfa, 0x55e3, 0x56db, 0x4f3a, 0x4f3c, 0x9972, 0x5df3,
-  0x677e, 0x8038, 0x6002, 0x9882, 0x9001, 0x5b8b, 0x8bbc, 0x8bf5,
-  0x641c, 0x8258, 0x64de, 0x55fd, 0x82cf, 0x9165, 0x4fd7, 0x7d20,
-  0x901f, 0x7c9f, 0x50f3, 0x5851, 0x6eaf, 0x5bbf, 0x8bc9, 0x8083,
-  0x9178, 0x849c, 0x7b97, 0x867d, 0x968b, 0x968f, 0x7ee5, 0x9ad3,
-  0x788e, 0x5c81, 0x7a57, 0x9042, 0x96a7, 0x795f, 0x5b59, 0x635f,
-  0x7b0b, 0x84d1, 0x68ad, 0x5506, 0x7f29, 0x7410, 0x7d22, 0x9501,
-  0x6240, 0x584c, 0x4ed6, 0x5b83, 0x5979, 0x5854,
-  /* 0x4c */
-  0x736d, 0x631e, 0x8e4b, 0x8e0f, 0x80ce, 0x82d4, 0x62ac, 0x53f0,
-  0x6cf0, 0x915e, 0x592a, 0x6001, 0x6c70, 0x574d, 0x644a, 0x8d2a,
-  0x762b, 0x6ee9, 0x575b, 0x6a80, 0x75f0, 0x6f6d, 0x8c2d, 0x8c08,
-  0x5766, 0x6bef, 0x8892, 0x78b3, 0x63a2, 0x53f9, 0x70ad, 0x6c64,
-  0x5858, 0x642a, 0x5802, 0x68e0, 0x819b, 0x5510, 0x7cd6, 0x5018,
-  0x8eba, 0x6dcc, 0x8d9f, 0x70eb, 0x638f, 0x6d9b, 0x6ed4, 0x7ee6,
-  0x8404, 0x6843, 0x9003, 0x6dd8, 0x9676, 0x8ba8, 0x5957, 0x7279,
-  0x85e4, 0x817e, 0x75bc, 0x8a8a, 0x68af, 0x5254, 0x8e22, 0x9511,
-  0x63d0, 0x9898, 0x8e44, 0x557c, 0x4f53, 0x66ff, 0x568f, 0x60d5,
-  0x6d95, 0x5243, 0x5c49, 0x5929, 0x6dfb, 0x586b, 0x7530, 0x751c,
-  0x606c, 0x8214, 0x8146, 0x6311, 0x6761, 0x8fe2, 0x773a, 0x8df3,
-  0x8d34, 0x94c1, 0x5e16, 0x5385, 0x542c, 0x70c3,
-  /* 0x4d */
-  0x6c40, 0x5ef7, 0x505c, 0x4ead, 0x5ead, 0x633a, 0x8247, 0x901a,
-  0x6850, 0x916e, 0x77b3, 0x540c, 0x94dc, 0x5f64, 0x7ae5, 0x6876,
-  0x6345, 0x7b52, 0x7edf, 0x75db, 0x5077, 0x6295, 0x5934, 0x900f,
-  0x51f8, 0x79c3, 0x7a81, 0x56fe, 0x5f92, 0x9014, 0x6d82, 0x5c60,
-  0x571f, 0x5410, 0x5154, 0x6e4d, 0x56e2, 0x63a8, 0x9893, 0x817f,
-  0x8715, 0x892a, 0x9000, 0x541e, 0x5c6f, 0x81c0, 0x62d6, 0x6258,
-  0x8131, 0x9e35, 0x9640, 0x9a6e, 0x9a7c, 0x692d, 0x59a5, 0x62d3,
-  0x553e, 0x6316, 0x54c7, 0x86d9, 0x6d3c, 0x5a03, 0x74e6, 0x889c,
-  0x6b6a, 0x5916, 0x8c4c, 0x5f2f, 0x6e7e, 0x73a9, 0x987d, 0x4e38,
-  0x70f7, 0x5b8c, 0x7897, 0x633d, 0x665a, 0x7696, 0x60cb, 0x5b9b,
-  0x5a49, 0x4e07, 0x8155, 0x6c6a, 0x738b, 0x4ea1, 0x6789, 0x7f51,
-  0x5f80, 0x65fa, 0x671b, 0x5fd8, 0x5984, 0x5a01,
-  /* 0x4e */
-  0x5dcd, 0x5fae, 0x5371, 0x97e6, 0x8fdd, 0x6845, 0x56f4, 0x552f,
-  0x60df, 0x4e3a, 0x6f4d, 0x7ef4, 0x82c7, 0x840e, 0x59d4, 0x4f1f,
-  0x4f2a, 0x5c3e, 0x7eac, 0x672a, 0x851a, 0x5473, 0x754f, 0x80c3,
-  0x5582, 0x9b4f, 0x4f4d, 0x6e2d, 0x8c13, 0x5c09, 0x6170, 0x536b,
-  0x761f, 0x6e29, 0x868a, 0x6587, 0x95fb, 0x7eb9, 0x543b, 0x7a33,
-  0x7d0a, 0x95ee, 0x55e1, 0x7fc1, 0x74ee, 0x631d, 0x8717, 0x6da1,
-  0x7a9d, 0x6211, 0x65a1, 0x5367, 0x63e1, 0x6c83, 0x5deb, 0x545c,
-  0x94a8, 0x4e4c, 0x6c61, 0x8bec, 0x5c4b, 0x65e0, 0x829c, 0x68a7,
-  0x543e, 0x5434, 0x6bcb, 0x6b66, 0x4e94, 0x6342, 0x5348, 0x821e,
-  0x4f0d, 0x4fae, 0x575e, 0x620a, 0x96fe, 0x6664, 0x7269, 0x52ff,
-  0x52a1, 0x609f, 0x8bef, 0x6614, 0x7199, 0x6790, 0x897f, 0x7852,
-  0x77fd, 0x6670, 0x563b, 0x5438, 0x9521, 0x727a,
-  /* 0x4f */
-  0x7a00, 0x606f, 0x5e0c, 0x6089, 0x819d, 0x5915, 0x60dc, 0x7184,
-  0x70ef, 0x6eaa, 0x6c50, 0x7280, 0x6a84, 0x88ad, 0x5e2d, 0x4e60,
-  0x5ab3, 0x559c, 0x94e3, 0x6d17, 0x7cfb, 0x9699, 0x620f, 0x7ec6,
-  0x778e, 0x867e, 0x5323, 0x971e, 0x8f96, 0x6687, 0x5ce1, 0x4fa0,
-  0x72ed, 0x4e0b, 0x53a6, 0x590f, 0x5413, 0x6380, 0x9528, 0x5148,
-  0x4ed9, 0x9c9c, 0x7ea4, 0x54b8, 0x8d24, 0x8854, 0x8237, 0x95f2,
-  0x6d8e, 0x5f26, 0x5acc, 0x663e, 0x9669, 0x73b0, 0x732e, 0x53bf,
-  0x817a, 0x9985, 0x7fa1, 0x5baa, 0x9677, 0x9650, 0x7ebf, 0x76f8,
-  0x53a2, 0x9576, 0x9999, 0x7bb1, 0x8944, 0x6e58, 0x4e61, 0x7fd4,
-  0x7965, 0x8be6, 0x60f3, 0x54cd, 0x4eab, 0x9879, 0x5df7, 0x6a61,
-  0x50cf, 0x5411, 0x8c61, 0x8427, 0x785d, 0x9704, 0x524a, 0x54ee,
-  0x56a3, 0x9500, 0x6d88, 0x5bb5, 0x6dc6, 0x6653,
-  /* 0x50 */
-  0x5c0f, 0x5b5d, 0x6821, 0x8096, 0x5578, 0x7b11, 0x6548, 0x6954,
-  0x4e9b, 0x6b47, 0x874e, 0x978b, 0x534f, 0x631f, 0x643a, 0x90aa,
-  0x659c, 0x80c1, 0x8c10, 0x5199, 0x68b0, 0x5378, 0x87f9, 0x61c8,
-  0x6cc4, 0x6cfb, 0x8c22, 0x5c51, 0x85aa, 0x82af, 0x950c, 0x6b23,
-  0x8f9b, 0x65b0, 0x5ffb, 0x5fc3, 0x4fe1, 0x8845, 0x661f, 0x8165,
-  0x7329, 0x60fa, 0x5174, 0x5211, 0x578b, 0x5f62, 0x90a2, 0x884c,
-  0x9192, 0x5e78, 0x674f, 0x6027, 0x59d3, 0x5144, 0x51f6, 0x80f8,
-  0x5308, 0x6c79, 0x96c4, 0x718a, 0x4f11, 0x4fee, 0x7f9e, 0x673d,
-  0x55c5, 0x9508, 0x79c0, 0x8896, 0x7ee3, 0x589f, 0x620c, 0x9700,
-  0x865a, 0x5618, 0x987b, 0x5f90, 0x8bb8, 0x84c4, 0x9157, 0x53d9,
-  0x65ed, 0x5e8f, 0x755c, 0x6064, 0x7d6e, 0x5a7f, 0x7eea, 0x7eed,
-  0x8f69, 0x55a7, 0x5ba3, 0x60ac, 0x65cb, 0x7384,
-  /* 0x51 */
-  0x9009, 0x7663, 0x7729, 0x7eda, 0x9774, 0x859b, 0x5b66, 0x7a74,
-  0x96ea, 0x8840, 0x52cb, 0x718f, 0x5faa, 0x65ec, 0x8be2, 0x5bfb,
-  0x9a6f, 0x5de1, 0x6b89, 0x6c5b, 0x8bad, 0x8baf, 0x900a, 0x8fc5,
-  0x538b, 0x62bc, 0x9e26, 0x9e2d, 0x5440, 0x4e2b, 0x82bd, 0x7259,
-  0x869c, 0x5d16, 0x8859, 0x6daf, 0x96c5, 0x54d1, 0x4e9a, 0x8bb6,
-  0x7109, 0x54bd, 0x9609, 0x70df, 0x6df9, 0x76d0, 0x4e25, 0x7814,
-  0x8712, 0x5ca9, 0x5ef6, 0x8a00, 0x989c, 0x960e, 0x708e, 0x6cbf,
-  0x5944, 0x63a9, 0x773c, 0x884d, 0x6f14, 0x8273, 0x5830, 0x71d5,
-  0x538c, 0x781a, 0x96c1, 0x5501, 0x5f66, 0x7130, 0x5bb4, 0x8c1a,
-  0x9a8c, 0x6b83, 0x592e, 0x9e2f, 0x79e7, 0x6768, 0x626c, 0x4f6f,
-  0x75a1, 0x7f8a, 0x6d0b, 0x9633, 0x6c27, 0x4ef0, 0x75d2, 0x517b,
-  0x6837, 0x6f3e, 0x9080, 0x8170, 0x5996, 0x7476,
-  /* 0x52 */
-  0x6447, 0x5c27, 0x9065, 0x7a91, 0x8c23, 0x59da, 0x54ac, 0x8200,
-  0x836f, 0x8981, 0x8000, 0x6930, 0x564e, 0x8036, 0x7237, 0x91ce,
-  0x51b6, 0x4e5f, 0x9875, 0x6396, 0x4e1a, 0x53f6, 0x66f3, 0x814b,
-  0x591c, 0x6db2, 0x4e00, 0x58f9, 0x533b, 0x63d6, 0x94f1, 0x4f9d,
-  0x4f0a, 0x8863, 0x9890, 0x5937, 0x9057, 0x79fb, 0x4eea, 0x80f0,
-  0x7591, 0x6c82, 0x5b9c, 0x59e8, 0x5f5d, 0x6905, 0x8681, 0x501a,
-  0x5df2, 0x4e59, 0x77e3, 0x4ee5, 0x827a, 0x6291, 0x6613, 0x9091,
-  0x5c79, 0x4ebf, 0x5f79, 0x81c6, 0x9038, 0x8084, 0x75ab, 0x4ea6,
-  0x88d4, 0x610f, 0x6bc5, 0x5fc6, 0x4e49, 0x76ca, 0x6ea2, 0x8be3,
-  0x8bae, 0x8c0a, 0x8bd1, 0x5f02, 0x7ffc, 0x7fcc, 0x7ece, 0x8335,
-  0x836b, 0x56e0, 0x6bb7, 0x97f3, 0x9634, 0x59fb, 0x541f, 0x94f6,
-  0x6deb, 0x5bc5, 0x996e, 0x5c39, 0x5f15, 0x9690,
-  /* 0x53 */
-  0x5370, 0x82f1, 0x6a31, 0x5a74, 0x9e70, 0x5e94, 0x7f28, 0x83b9,
-  0x8424, 0x8425, 0x8367, 0x8747, 0x8fce, 0x8d62, 0x76c8, 0x5f71,
-  0x9896, 0x786c, 0x6620, 0x54df, 0x62e5, 0x4f63, 0x81c3, 0x75c8,
-  0x5eb8, 0x96cd, 0x8e0a, 0x86f9, 0x548f, 0x6cf3, 0x6d8c, 0x6c38,
-  0x607f, 0x52c7, 0x7528, 0x5e7d, 0x4f18, 0x60a0, 0x5fe7, 0x5c24,
-  0x7531, 0x90ae, 0x94c0, 0x72b9, 0x6cb9, 0x6e38, 0x9149, 0x6709,
-  0x53cb, 0x53f3, 0x4f51, 0x91c9, 0x8bf1, 0x53c8, 0x5e7c, 0x8fc2,
-  0x6de4, 0x4e8e, 0x76c2, 0x6986, 0x865e, 0x611a, 0x8206, 0x4f59,
-  0x4fde, 0x903e, 0x9c7c, 0x6109, 0x6e1d, 0x6e14, 0x9685, 0x4e88,
-  0x5a31, 0x96e8, 0x4e0e, 0x5c7f, 0x79b9, 0x5b87, 0x8bed, 0x7fbd,
-  0x7389, 0x57df, 0x828b, 0x90c1, 0x5401, 0x9047, 0x55bb, 0x5cea,
-  0x5fa1, 0x6108, 0x6b32, 0x72f1, 0x80b2, 0x8a89,
-  /* 0x54 */
-  0x6d74, 0x5bd3, 0x88d5, 0x9884, 0x8c6b, 0x9a6d, 0x9e33, 0x6e0a,
-  0x51a4, 0x5143, 0x57a3, 0x8881, 0x539f, 0x63f4, 0x8f95, 0x56ed,
-  0x5458, 0x5706, 0x733f, 0x6e90, 0x7f18, 0x8fdc, 0x82d1, 0x613f,
-  0x6028, 0x9662, 0x66f0, 0x7ea6, 0x8d8a, 0x8dc3, 0x94a5, 0x5cb3,
-  0x7ca4, 0x6708, 0x60a6, 0x9605, 0x8018, 0x4e91, 0x90e7, 0x5300,
-  0x9668, 0x5141, 0x8fd0, 0x8574, 0x915d, 0x6655, 0x97f5, 0x5b55,
-  0x531d, 0x7838, 0x6742, 0x683d, 0x54c9, 0x707e, 0x5bb0, 0x8f7d,
-  0x518d, 0x5728, 0x54b1, 0x6512, 0x6682, 0x8d5e, 0x8d43, 0x810f,
-  0x846c, 0x906d, 0x7cdf, 0x51ff, 0x85fb, 0x67a3, 0x65e9, 0x6fa1,
-  0x86a4, 0x8e81, 0x566a, 0x9020, 0x7682, 0x7076, 0x71e5, 0x8d23,
-  0x62e9, 0x5219, 0x6cfd, 0x8d3c, 0x600e, 0x589e, 0x618e, 0x66fe,
-  0x8d60, 0x624e, 0x55b3, 0x6e23, 0x672d, 0x8f67,
-  /* 0x55 */
-  0x94e1, 0x95f8, 0x7728, 0x6805, 0x69a8, 0x548b, 0x4e4d, 0x70b8,
-  0x8bc8, 0x6458, 0x658b, 0x5b85, 0x7a84, 0x503a, 0x5be8, 0x77bb,
-  0x6be1, 0x8a79, 0x7c98, 0x6cbe, 0x76cf, 0x65a9, 0x8f97, 0x5d2d,
-  0x5c55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7ad9, 0x6e5b, 0x7efd,
-  0x6a1f, 0x7ae0, 0x5f70, 0x6f33, 0x5f20, 0x638c, 0x6da8, 0x6756,
-  0x4e08, 0x5e10, 0x8d26, 0x4ed7, 0x80c0, 0x7634, 0x969c, 0x62db,
-  0x662d, 0x627e, 0x6cbc, 0x8d75, 0x7167, 0x7f69, 0x5146, 0x8087,
-  0x53ec, 0x906e, 0x6298, 0x54f2, 0x86f0, 0x8f99, 0x8005, 0x9517,
-  0x8517, 0x8fd9, 0x6d59, 0x73cd, 0x659f, 0x771f, 0x7504, 0x7827,
-  0x81fb, 0x8d1e, 0x9488, 0x4fa6, 0x6795, 0x75b9, 0x8bca, 0x9707,
-  0x632f, 0x9547, 0x9635, 0x84b8, 0x6323, 0x7741, 0x5f81, 0x72f0,
-  0x4e89, 0x6014, 0x6574, 0x62ef, 0x6b63, 0x653f,
-  /* 0x56 */
-  0x5e27, 0x75c7, 0x90d1, 0x8bc1, 0x829d, 0x679d, 0x652f, 0x5431,
-  0x8718, 0x77e5, 0x80a2, 0x8102, 0x6c41, 0x4e4b, 0x7ec7, 0x804c,
-  0x76f4, 0x690d, 0x6b96, 0x6267, 0x503c, 0x4f84, 0x5740, 0x6307,
-  0x6b62, 0x8dbe, 0x53ea, 0x65e8, 0x7eb8, 0x5fd7, 0x631a, 0x63b7,
-  0x81f3, 0x81f4, 0x7f6e, 0x5e1c, 0x5cd9, 0x5236, 0x667a, 0x79e9,
-  0x7a1a, 0x8d28, 0x7099, 0x75d4, 0x6ede, 0x6cbb, 0x7a92, 0x4e2d,
-  0x76c5, 0x5fe0, 0x949f, 0x8877, 0x7ec8, 0x79cd, 0x80bf, 0x91cd,
-  0x4ef2, 0x4f17, 0x821f, 0x5468, 0x5dde, 0x6d32, 0x8bcc, 0x7ca5,
-  0x8f74, 0x8098, 0x5e1a, 0x5492, 0x76b1, 0x5b99, 0x663c, 0x9aa4,
-  0x73e0, 0x682a, 0x86db, 0x6731, 0x732a, 0x8bf8, 0x8bdb, 0x9010,
-  0x7af9, 0x70db, 0x716e, 0x62c4, 0x77a9, 0x5631, 0x4e3b, 0x8457,
-  0x67f1, 0x52a9, 0x86c0, 0x8d2e, 0x94f8, 0x7b51,
-  /* 0x57 */
-  0x4f4f, 0x6ce8, 0x795d, 0x9a7b, 0x6293, 0x722a, 0x62fd, 0x4e13,
-  0x7816, 0x8f6c, 0x64b0, 0x8d5a, 0x7bc6, 0x6869, 0x5e84, 0x88c5,
-  0x5986, 0x649e, 0x58ee, 0x72b6, 0x690e, 0x9525, 0x8ffd, 0x8d58,
-  0x5760, 0x7f00, 0x8c06, 0x51c6, 0x6349, 0x62d9, 0x5353, 0x684c,
-  0x7422, 0x8301, 0x914c, 0x5544, 0x7740, 0x707c, 0x6d4a, 0x5179,
-  0x54a8, 0x8d44, 0x59ff, 0x6ecb, 0x6dc4, 0x5b5c, 0x7d2b, 0x4ed4,
-  0x7c7d, 0x6ed3, 0x5b50, 0x81ea, 0x6e0d, 0x5b57, 0x9b03, 0x68d5,
-  0x8e2a, 0x5b97, 0x7efc, 0x603b, 0x7eb5, 0x90b9, 0x8d70, 0x594f,
-  0x63cd, 0x79df, 0x8db3, 0x5352, 0x65cf, 0x7956, 0x8bc5, 0x963b,
-  0x7ec4, 0x94bb, 0x7e82, 0x5634, 0x9189, 0x6700, 0x7f6a, 0x5c0a,
-  0x9075, 0x6628, 0x5de6, 0x4f50, 0x67de, 0x505a, 0x4f5c, 0x5750,
-  0x5ea7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x58 */
-  0x4e8d, 0x4e0c, 0x5140, 0x4e10, 0x5eff, 0x5345, 0x4e15, 0x4e98,
-  0x4e1e, 0x9b32, 0x5b6c, 0x5669, 0x4e28, 0x79ba, 0x4e3f, 0x5315,
-  0x4e47, 0x592d, 0x723b, 0x536e, 0x6c10, 0x56df, 0x80e4, 0x9997,
-  0x6bd3, 0x777e, 0x9f17, 0x4e36, 0x4e9f, 0x9f10, 0x4e5c, 0x4e69,
-  0x4e93, 0x8288, 0x5b5b, 0x556c, 0x560f, 0x4ec4, 0x538d, 0x539d,
-  0x53a3, 0x53a5, 0x53ae, 0x9765, 0x8d5d, 0x531a, 0x53f5, 0x5326,
-  0x532e, 0x533e, 0x8d5c, 0x5366, 0x5363, 0x5202, 0x5208, 0x520e,
-  0x522d, 0x5233, 0x523f, 0x5240, 0x524c, 0x525e, 0x5261, 0x525c,
-  0x84af, 0x527d, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, 0x7f54,
-  0x4ebb, 0x4ec3, 0x4ec9, 0x4ec2, 0x4ee8, 0x4ee1, 0x4eeb, 0x4ede,
-  0x4f1b, 0x4ef3, 0x4f22, 0x4f64, 0x4ef5, 0x4f25, 0x4f27, 0x4f09,
-  0x4f2b, 0x4f5e, 0x4f67, 0x6538, 0x4f5a, 0x4f5d,
-  /* 0x59 */
-  0x4f5f, 0x4f57, 0x4f32, 0x4f3d, 0x4f76, 0x4f74, 0x4f91, 0x4f89,
-  0x4f83, 0x4f8f, 0x4f7e, 0x4f7b, 0x4faa, 0x4f7c, 0x4fac, 0x4f94,
-  0x4fe6, 0x4fe8, 0x4fea, 0x4fc5, 0x4fda, 0x4fe3, 0x4fdc, 0x4fd1,
-  0x4fdf, 0x4ff8, 0x5029, 0x504c, 0x4ff3, 0x502c, 0x500f, 0x502e,
-  0x502d, 0x4ffe, 0x501c, 0x500c, 0x5025, 0x5028, 0x507e, 0x5043,
-  0x5055, 0x5048, 0x504e, 0x506c, 0x507b, 0x50a5, 0x50a7, 0x50a9,
-  0x50ba, 0x50d6, 0x5106, 0x50ed, 0x50ec, 0x50e6, 0x50ee, 0x5107,
-  0x510b, 0x4edd, 0x6c3d, 0x4f58, 0x4f65, 0x4fce, 0x9fa0, 0x6c46,
-  0x7c74, 0x516e, 0x5dfd, 0x9ec9, 0x9998, 0x5181, 0x5914, 0x52f9,
-  0x530d, 0x8a07, 0x5310, 0x51eb, 0x5919, 0x5155, 0x4ea0, 0x5156,
-  0x4eb3, 0x886e, 0x88a4, 0x4eb5, 0x8114, 0x88d2, 0x7980, 0x5b34,
-  0x8803, 0x7fb8, 0x51ab, 0x51b1, 0x51bd, 0x51bc,
-  /* 0x5a */
-  0x51c7, 0x5196, 0x51a2, 0x51a5, 0x8ba0, 0x8ba6, 0x8ba7, 0x8baa,
-  0x8bb4, 0x8bb5, 0x8bb7, 0x8bc2, 0x8bc3, 0x8bcb, 0x8bcf, 0x8bce,
-  0x8bd2, 0x8bd3, 0x8bd4, 0x8bd6, 0x8bd8, 0x8bd9, 0x8bdc, 0x8bdf,
-  0x8be0, 0x8be4, 0x8be8, 0x8be9, 0x8bee, 0x8bf0, 0x8bf3, 0x8bf6,
-  0x8bf9, 0x8bfc, 0x8bff, 0x8c00, 0x8c02, 0x8c04, 0x8c07, 0x8c0c,
-  0x8c0f, 0x8c11, 0x8c12, 0x8c14, 0x8c15, 0x8c16, 0x8c19, 0x8c1b,
-  0x8c18, 0x8c1d, 0x8c1f, 0x8c20, 0x8c21, 0x8c25, 0x8c27, 0x8c2a,
-  0x8c2b, 0x8c2e, 0x8c2f, 0x8c32, 0x8c33, 0x8c35, 0x8c36, 0x5369,
-  0x537a, 0x961d, 0x9622, 0x9621, 0x9631, 0x962a, 0x963d, 0x963c,
-  0x9642, 0x9649, 0x9654, 0x965f, 0x9667, 0x966c, 0x9672, 0x9674,
-  0x9688, 0x968d, 0x9697, 0x96b0, 0x9097, 0x909b, 0x909d, 0x9099,
-  0x90ac, 0x90a1, 0x90b4, 0x90b3, 0x90b6, 0x90ba,
-  /* 0x5b */
-  0x90b8, 0x90b0, 0x90cf, 0x90c5, 0x90be, 0x90d0, 0x90c4, 0x90c7,
-  0x90d3, 0x90e6, 0x90e2, 0x90dc, 0x90d7, 0x90db, 0x90eb, 0x90ef,
-  0x90fe, 0x9104, 0x9122, 0x911e, 0x9123, 0x9131, 0x912f, 0x9139,
-  0x9143, 0x9146, 0x520d, 0x5942, 0x52a2, 0x52ac, 0x52ad, 0x52be,
-  0x54ff, 0x52d0, 0x52d6, 0x52f0, 0x53df, 0x71ee, 0x77cd, 0x5ef4,
-  0x51f5, 0x51fc, 0x9b2f, 0x53b6, 0x5f01, 0x755a, 0x5def, 0x574c,
-  0x57a9, 0x57a1, 0x587e, 0x58bc, 0x58c5, 0x58d1, 0x5729, 0x572c,
-  0x572a, 0x5733, 0x5739, 0x572e, 0x572f, 0x575c, 0x573b, 0x5742,
-  0x5769, 0x5785, 0x576b, 0x5786, 0x577c, 0x577b, 0x5768, 0x576d,
-  0x5776, 0x5773, 0x57ad, 0x57a4, 0x578c, 0x57b2, 0x57cf, 0x57a7,
-  0x57b4, 0x5793, 0x57a0, 0x57d5, 0x57d8, 0x57da, 0x57d9, 0x57d2,
-  0x57b8, 0x57f4, 0x57ef, 0x57f8, 0x57e4, 0x57dd,
-  /* 0x5c */
-  0x580b, 0x580d, 0x57fd, 0x57ed, 0x5800, 0x581e, 0x5819, 0x5844,
-  0x5820, 0x5865, 0x586c, 0x5881, 0x5889, 0x589a, 0x5880, 0x99a8,
-  0x9f19, 0x61ff, 0x8279, 0x827d, 0x827f, 0x828f, 0x828a, 0x82a8,
-  0x8284, 0x828e, 0x8291, 0x8297, 0x8299, 0x82ab, 0x82b8, 0x82be,
-  0x82b0, 0x82c8, 0x82ca, 0x82e3, 0x8298, 0x82b7, 0x82ae, 0x82cb,
-  0x82cc, 0x82c1, 0x82a9, 0x82b4, 0x82a1, 0x82aa, 0x829f, 0x82c4,
-  0x82ce, 0x82a4, 0x82e1, 0x8309, 0x82f7, 0x82e4, 0x830f, 0x8307,
-  0x82dc, 0x82f4, 0x82d2, 0x82d8, 0x830c, 0x82fb, 0x82d3, 0x8311,
-  0x831a, 0x8306, 0x8314, 0x8315, 0x82e0, 0x82d5, 0x831c, 0x8351,
-  0x835b, 0x835c, 0x8308, 0x8392, 0x833c, 0x8334, 0x8331, 0x839b,
-  0x835e, 0x832f, 0x834f, 0x8347, 0x8343, 0x835f, 0x8340, 0x8317,
-  0x8360, 0x832d, 0x833a, 0x8333, 0x8366, 0x8365,
-  /* 0x5d */
-  0x8368, 0x831b, 0x8369, 0x836c, 0x836a, 0x836d, 0x836e, 0x83b0,
-  0x8378, 0x83b3, 0x83b4, 0x83a0, 0x83aa, 0x8393, 0x839c, 0x8385,
-  0x837c, 0x83b6, 0x83a9, 0x837d, 0x83b8, 0x837b, 0x8398, 0x839e,
-  0x83a8, 0x83ba, 0x83bc, 0x83c1, 0x8401, 0x83e5, 0x83d8, 0x5807,
-  0x8418, 0x840b, 0x83dd, 0x83fd, 0x83d6, 0x841c, 0x8438, 0x8411,
-  0x8406, 0x83d4, 0x83df, 0x840f, 0x8403, 0x83f8, 0x83f9, 0x83ea,
-  0x83c5, 0x83c0, 0x8426, 0x83f0, 0x83e1, 0x845c, 0x8451, 0x845a,
-  0x8459, 0x8473, 0x8487, 0x8488, 0x847a, 0x8489, 0x8478, 0x843c,
-  0x8446, 0x8469, 0x8476, 0x848c, 0x848e, 0x8431, 0x846d, 0x84c1,
-  0x84cd, 0x84d0, 0x84e6, 0x84bd, 0x84d3, 0x84ca, 0x84bf, 0x84ba,
-  0x84e0, 0x84a1, 0x84b9, 0x84b4, 0x8497, 0x84e5, 0x84e3, 0x850c,
-  0x750d, 0x8538, 0x84f0, 0x8539, 0x851f, 0x853a,
-  /* 0x5e */
-  0x8556, 0x853b, 0x84ff, 0x84fc, 0x8559, 0x8548, 0x8568, 0x8564,
-  0x855e, 0x857a, 0x77a2, 0x8543, 0x8572, 0x857b, 0x85a4, 0x85a8,
-  0x8587, 0x858f, 0x8579, 0x85ae, 0x859c, 0x8585, 0x85b9, 0x85b7,
-  0x85b0, 0x85d3, 0x85c1, 0x85dc, 0x85ff, 0x8627, 0x8605, 0x8629,
-  0x8616, 0x863c, 0x5efe, 0x5f08, 0x593c, 0x5941, 0x8037, 0x5955,
-  0x595a, 0x5958, 0x530f, 0x5c22, 0x5c25, 0x5c2c, 0x5c34, 0x624c,
-  0x626a, 0x629f, 0x62bb, 0x62ca, 0x62da, 0x62d7, 0x62ee, 0x6322,
-  0x62f6, 0x6339, 0x634b, 0x6343, 0x63ad, 0x63f6, 0x6371, 0x637a,
-  0x638e, 0x63b4, 0x636d, 0x63ac, 0x638a, 0x6369, 0x63ae, 0x63bc,
-  0x63f2, 0x63f8, 0x63e0, 0x63ff, 0x63c4, 0x63de, 0x63ce, 0x6452,
-  0x63c6, 0x63be, 0x6445, 0x6441, 0x640b, 0x641b, 0x6420, 0x640c,
-  0x6426, 0x6421, 0x645e, 0x6484, 0x646d, 0x6496,
-  /* 0x5f */
-  0x647a, 0x64b7, 0x64b8, 0x6499, 0x64ba, 0x64c0, 0x64d0, 0x64d7,
-  0x64e4, 0x64e2, 0x6509, 0x6525, 0x652e, 0x5f0b, 0x5fd2, 0x7519,
-  0x5f11, 0x535f, 0x53f1, 0x53fd, 0x53e9, 0x53e8, 0x53fb, 0x5412,
-  0x5416, 0x5406, 0x544b, 0x5452, 0x5453, 0x5454, 0x5456, 0x5443,
-  0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, 0x5477,
-  0x5471, 0x5464, 0x549a, 0x549b, 0x5484, 0x5476, 0x5466, 0x549d,
-  0x54d0, 0x54ad, 0x54c2, 0x54b4, 0x54d2, 0x54a7, 0x54a6, 0x54d3,
-  0x54d4, 0x5472, 0x54a3, 0x54d5, 0x54bb, 0x54bf, 0x54cc, 0x54d9,
-  0x54da, 0x54dc, 0x54a9, 0x54aa, 0x54a4, 0x54dd, 0x54cf, 0x54de,
-  0x551b, 0x54e7, 0x5520, 0x54fd, 0x5514, 0x54f3, 0x5522, 0x5523,
-  0x550f, 0x5511, 0x5527, 0x552a, 0x5567, 0x558f, 0x55b5, 0x5549,
-  0x556d, 0x5541, 0x5555, 0x553f, 0x5550, 0x553c,
-  /* 0x60 */
-  0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, 0x555c,
-  0x558b, 0x55d2, 0x5583, 0x55b1, 0x55b9, 0x5588, 0x5581, 0x559f,
-  0x557e, 0x55d6, 0x5591, 0x557b, 0x55df, 0x55bd, 0x55be, 0x5594,
-  0x5599, 0x55ea, 0x55f7, 0x55c9, 0x561f, 0x55d1, 0x55eb, 0x55ec,
-  0x55d4, 0x55e6, 0x55dd, 0x55c4, 0x55ef, 0x55e5, 0x55f2, 0x55f3,
-  0x55cc, 0x55cd, 0x55e8, 0x55f5, 0x55e4, 0x8f94, 0x561e, 0x5608,
-  0x560c, 0x5601, 0x5624, 0x5623, 0x55fe, 0x5600, 0x5627, 0x562d,
-  0x5658, 0x5639, 0x5657, 0x562c, 0x564d, 0x5662, 0x5659, 0x565c,
-  0x564c, 0x5654, 0x5686, 0x5664, 0x5671, 0x566b, 0x567b, 0x567c,
-  0x5685, 0x5693, 0x56af, 0x56d4, 0x56d7, 0x56dd, 0x56e1, 0x56f5,
-  0x56eb, 0x56f9, 0x56ff, 0x5704, 0x570a, 0x5709, 0x571c, 0x5e0f,
-  0x5e19, 0x5e14, 0x5e11, 0x5e31, 0x5e3b, 0x5e3c,
-  /* 0x61 */
-  0x5e37, 0x5e44, 0x5e54, 0x5e5b, 0x5e5e, 0x5e61, 0x5c8c, 0x5c7a,
-  0x5c8d, 0x5c90, 0x5c96, 0x5c88, 0x5c98, 0x5c99, 0x5c91, 0x5c9a,
-  0x5c9c, 0x5cb5, 0x5ca2, 0x5cbd, 0x5cac, 0x5cab, 0x5cb1, 0x5ca3,
-  0x5cc1, 0x5cb7, 0x5cc4, 0x5cd2, 0x5ce4, 0x5ccb, 0x5ce5, 0x5d02,
-  0x5d03, 0x5d27, 0x5d26, 0x5d2e, 0x5d24, 0x5d1e, 0x5d06, 0x5d1b,
-  0x5d58, 0x5d3e, 0x5d34, 0x5d3d, 0x5d6c, 0x5d5b, 0x5d6f, 0x5d5d,
-  0x5d6b, 0x5d4b, 0x5d4a, 0x5d69, 0x5d74, 0x5d82, 0x5d99, 0x5d9d,
-  0x8c73, 0x5db7, 0x5dc5, 0x5f73, 0x5f77, 0x5f82, 0x5f87, 0x5f89,
-  0x5f8c, 0x5f95, 0x5f99, 0x5f9c, 0x5fa8, 0x5fad, 0x5fb5, 0x5fbc,
-  0x8862, 0x5f61, 0x72ad, 0x72b0, 0x72b4, 0x72b7, 0x72b8, 0x72c3,
-  0x72c1, 0x72ce, 0x72cd, 0x72d2, 0x72e8, 0x72ef, 0x72e9, 0x72f2,
-  0x72f4, 0x72f7, 0x7301, 0x72f3, 0x7303, 0x72fa,
-  /* 0x62 */
-  0x72fb, 0x7317, 0x7313, 0x7321, 0x730a, 0x731e, 0x731d, 0x7315,
-  0x7322, 0x7339, 0x7325, 0x732c, 0x7338, 0x7331, 0x7350, 0x734d,
-  0x7357, 0x7360, 0x736c, 0x736f, 0x737e, 0x821b, 0x5925, 0x98e7,
-  0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996a, 0x996b,
-  0x996c, 0x9974, 0x9977, 0x997d, 0x9980, 0x9984, 0x9987, 0x998a,
-  0x998d, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5e80, 0x5e91,
-  0x5e8b, 0x5e96, 0x5ea5, 0x5ea0, 0x5eb9, 0x5eb5, 0x5ebe, 0x5eb3,
-  0x8d53, 0x5ed2, 0x5ed1, 0x5edb, 0x5ee8, 0x5eea, 0x81ba, 0x5fc4,
-  0x5fc9, 0x5fd6, 0x5fcf, 0x6003, 0x5fee, 0x6004, 0x5fe1, 0x5fe4,
-  0x5ffe, 0x6005, 0x6006, 0x5fea, 0x5fed, 0x5ff8, 0x6019, 0x6035,
-  0x6026, 0x601b, 0x600f, 0x600d, 0x6029, 0x602b, 0x600a, 0x603f,
-  0x6021, 0x6078, 0x6079, 0x607b, 0x607a, 0x6042,
-  /* 0x63 */
-  0x606a, 0x607d, 0x6096, 0x609a, 0x60ad, 0x609d, 0x6083, 0x6092,
-  0x608c, 0x609b, 0x60ec, 0x60bb, 0x60b1, 0x60dd, 0x60d8, 0x60c6,
-  0x60da, 0x60b4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60f4, 0x6100,
-  0x610e, 0x612b, 0x614a, 0x6175, 0x61ac, 0x6194, 0x61a7, 0x61b7,
-  0x61d4, 0x61f5, 0x5fdd, 0x96b3, 0x95e9, 0x95eb, 0x95f1, 0x95f3,
-  0x95f5, 0x95f6, 0x95fc, 0x95fe, 0x9603, 0x9604, 0x9606, 0x9608,
-  0x960a, 0x960b, 0x960c, 0x960d, 0x960f, 0x9612, 0x9615, 0x9616,
-  0x9617, 0x9619, 0x961a, 0x4e2c, 0x723f, 0x6215, 0x6c35, 0x6c54,
-  0x6c5c, 0x6c4a, 0x6ca3, 0x6c85, 0x6c90, 0x6c94, 0x6c8c, 0x6c68,
-  0x6c69, 0x6c74, 0x6c76, 0x6c86, 0x6ca9, 0x6cd0, 0x6cd4, 0x6cad,
-  0x6cf7, 0x6cf8, 0x6cf1, 0x6cd7, 0x6cb2, 0x6ce0, 0x6cd6, 0x6cfa,
-  0x6ceb, 0x6cee, 0x6cb1, 0x6cd3, 0x6cef, 0x6cfe,
-  /* 0x64 */
-  0x6d39, 0x6d27, 0x6d0c, 0x6d43, 0x6d48, 0x6d07, 0x6d04, 0x6d19,
-  0x6d0e, 0x6d2b, 0x6d4d, 0x6d2e, 0x6d35, 0x6d1a, 0x6d4f, 0x6d52,
-  0x6d54, 0x6d33, 0x6d91, 0x6d6f, 0x6d9e, 0x6da0, 0x6d5e, 0x6d93,
-  0x6d94, 0x6d5c, 0x6d60, 0x6d7c, 0x6d63, 0x6e1a, 0x6dc7, 0x6dc5,
-  0x6dde, 0x6e0e, 0x6dbf, 0x6de0, 0x6e11, 0x6de6, 0x6ddd, 0x6dd9,
-  0x6e16, 0x6dab, 0x6e0c, 0x6dae, 0x6e2b, 0x6e6e, 0x6e4e, 0x6e6b,
-  0x6eb2, 0x6e5f, 0x6e86, 0x6e53, 0x6e54, 0x6e32, 0x6e25, 0x6e44,
-  0x6edf, 0x6eb1, 0x6e98, 0x6ee0, 0x6f2d, 0x6ee2, 0x6ea5, 0x6ea7,
-  0x6ebd, 0x6ebb, 0x6eb7, 0x6ed7, 0x6eb4, 0x6ecf, 0x6e8f, 0x6ec2,
-  0x6e9f, 0x6f62, 0x6f46, 0x6f47, 0x6f24, 0x6f15, 0x6ef9, 0x6f2f,
-  0x6f36, 0x6f4b, 0x6f74, 0x6f2a, 0x6f09, 0x6f29, 0x6f89, 0x6f8d,
-  0x6f8c, 0x6f78, 0x6f72, 0x6f7c, 0x6f7a, 0x6fd1,
-  /* 0x65 */
-  0x6fc9, 0x6fa7, 0x6fb9, 0x6fb6, 0x6fc2, 0x6fe1, 0x6fee, 0x6fde,
-  0x6fe0, 0x6fef, 0x701a, 0x7023, 0x701b, 0x7039, 0x7035, 0x704f,
-  0x705e, 0x5b80, 0x5b84, 0x5b95, 0x5b93, 0x5ba5, 0x5bb8, 0x752f,
-  0x9a9e, 0x6434, 0x5be4, 0x5bee, 0x8930, 0x5bf0, 0x8e47, 0x8b07,
-  0x8fb6, 0x8fd3, 0x8fd5, 0x8fe5, 0x8fee, 0x8fe4, 0x8fe9, 0x8fe6,
-  0x8ff3, 0x8fe8, 0x9005, 0x9004, 0x900b, 0x9026, 0x9011, 0x900d,
-  0x9016, 0x9021, 0x9035, 0x9036, 0x902d, 0x902f, 0x9044, 0x9051,
-  0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905b, 0x66b9, 0x9074,
-  0x907d, 0x9082, 0x9088, 0x9083, 0x908b, 0x5f50, 0x5f57, 0x5f56,
-  0x5f58, 0x5c3b, 0x54ab, 0x5c50, 0x5c59, 0x5b71, 0x5c63, 0x5c66,
-  0x7fbc, 0x5f2a, 0x5f29, 0x5f2d, 0x8274, 0x5f3c, 0x9b3b, 0x5c6e,
-  0x5981, 0x5983, 0x598d, 0x59a9, 0x59aa, 0x59a3,
-  /* 0x66 */
-  0x5997, 0x59ca, 0x59ab, 0x599e, 0x59a4, 0x59d2, 0x59b2, 0x59af,
-  0x59d7, 0x59be, 0x5a05, 0x5a06, 0x59dd, 0x5a08, 0x59e3, 0x59d8,
-  0x59f9, 0x5a0c, 0x5a09, 0x5a32, 0x5a34, 0x5a11, 0x5a23, 0x5a13,
-  0x5a40, 0x5a67, 0x5a4a, 0x5a55, 0x5a3c, 0x5a62, 0x5a75, 0x80ec,
-  0x5aaa, 0x5a9b, 0x5a77, 0x5a7a, 0x5abe, 0x5aeb, 0x5ab2, 0x5ad2,
-  0x5ad4, 0x5ab8, 0x5ae0, 0x5ae3, 0x5af1, 0x5ad6, 0x5ae6, 0x5ad8,
-  0x5adc, 0x5b09, 0x5b17, 0x5b16, 0x5b32, 0x5b37, 0x5b40, 0x5c15,
-  0x5c1c, 0x5b5a, 0x5b65, 0x5b73, 0x5b51, 0x5b53, 0x5b62, 0x9a75,
-  0x9a77, 0x9a78, 0x9a7a, 0x9a7f, 0x9a7d, 0x9a80, 0x9a81, 0x9a85,
-  0x9a88, 0x9a8a, 0x9a90, 0x9a92, 0x9a93, 0x9a96, 0x9a98, 0x9a9b,
-  0x9a9c, 0x9a9d, 0x9a9f, 0x9aa0, 0x9aa2, 0x9aa3, 0x9aa5, 0x9aa7,
-  0x7e9f, 0x7ea1, 0x7ea3, 0x7ea5, 0x7ea8, 0x7ea9,
-  /* 0x67 */
-  0x7ead, 0x7eb0, 0x7ebe, 0x7ec0, 0x7ec1, 0x7ec2, 0x7ec9, 0x7ecb,
-  0x7ecc, 0x7ed0, 0x7ed4, 0x7ed7, 0x7edb, 0x7ee0, 0x7ee1, 0x7ee8,
-  0x7eeb, 0x7eee, 0x7eef, 0x7ef1, 0x7ef2, 0x7f0d, 0x7ef6, 0x7efa,
-  0x7efb, 0x7efe, 0x7f01, 0x7f02, 0x7f03, 0x7f07, 0x7f08, 0x7f0b,
-  0x7f0c, 0x7f0f, 0x7f11, 0x7f12, 0x7f17, 0x7f19, 0x7f1c, 0x7f1b,
-  0x7f1f, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27,
-  0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2f, 0x7f30, 0x7f31, 0x7f32,
-  0x7f33, 0x7f35, 0x5e7a, 0x757f, 0x5ddb, 0x753e, 0x9095, 0x738e,
-  0x7391, 0x73ae, 0x73a2, 0x739f, 0x73cf, 0x73c2, 0x73d1, 0x73b7,
-  0x73b3, 0x73c0, 0x73c9, 0x73c8, 0x73e5, 0x73d9, 0x987c, 0x740a,
-  0x73e9, 0x73e7, 0x73de, 0x73ba, 0x73f2, 0x740f, 0x742a, 0x745b,
-  0x7426, 0x7425, 0x7428, 0x7430, 0x742e, 0x742c,
-  /* 0x68 */
-  0x741b, 0x741a, 0x7441, 0x745c, 0x7457, 0x7455, 0x7459, 0x7477,
-  0x746d, 0x747e, 0x749c, 0x748e, 0x7480, 0x7481, 0x7487, 0x748b,
-  0x749e, 0x74a8, 0x74a9, 0x7490, 0x74a7, 0x74d2, 0x74ba, 0x97ea,
-  0x97eb, 0x97ec, 0x674c, 0x6753, 0x675e, 0x6748, 0x6769, 0x67a5,
-  0x6787, 0x676a, 0x6773, 0x6798, 0x67a7, 0x6775, 0x67a8, 0x679e,
-  0x67ad, 0x678b, 0x6777, 0x677c, 0x67f0, 0x6809, 0x67d8, 0x680a,
-  0x67e9, 0x67b0, 0x680c, 0x67d9, 0x67b5, 0x67da, 0x67b3, 0x67dd,
-  0x6800, 0x67c3, 0x67b8, 0x67e2, 0x680e, 0x67c1, 0x67fd, 0x6832,
-  0x6833, 0x6860, 0x6861, 0x684e, 0x6862, 0x6844, 0x6864, 0x6883,
-  0x681d, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683e, 0x684a,
-  0x6849, 0x6829, 0x68b5, 0x688f, 0x6874, 0x6877, 0x6893, 0x686b,
-  0x68c2, 0x696e, 0x68fc, 0x691f, 0x6920, 0x68f9,
-  /* 0x69 */
-  0x6924, 0x68f0, 0x690b, 0x6901, 0x6957, 0x68e3, 0x6910, 0x6971,
-  0x6939, 0x6960, 0x6942, 0x695d, 0x6984, 0x696b, 0x6980, 0x6998,
-  0x6978, 0x6934, 0x69cc, 0x6987, 0x6988, 0x69ce, 0x6989, 0x6966,
-  0x6963, 0x6979, 0x699b, 0x69a7, 0x69bb, 0x69ab, 0x69ad, 0x69d4,
-  0x69b1, 0x69c1, 0x69ca, 0x69df, 0x6995, 0x69e0, 0x698d, 0x69ff,
-  0x6a2f, 0x69ed, 0x6a17, 0x6a18, 0x6a65, 0x69f2, 0x6a44, 0x6a3e,
-  0x6aa0, 0x6a50, 0x6a5b, 0x6a35, 0x6a8e, 0x6a79, 0x6a3d, 0x6a28,
-  0x6a58, 0x6a7c, 0x6a91, 0x6a90, 0x6aa9, 0x6a97, 0x6aab, 0x7337,
-  0x7352, 0x6b81, 0x6b82, 0x6b87, 0x6b84, 0x6b92, 0x6b93, 0x6b8d,
-  0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x8f6b, 0x8f6d, 0x8f71, 0x8f72,
-  0x8f73, 0x8f75, 0x8f76, 0x8f78, 0x8f77, 0x8f79, 0x8f7a, 0x8f7c,
-  0x8f7e, 0x8f81, 0x8f82, 0x8f84, 0x8f87, 0x8f8b,
-  /* 0x6a */
-  0x8f8d, 0x8f8e, 0x8f8f, 0x8f98, 0x8f9a, 0x8ece, 0x620b, 0x6217,
-  0x621b, 0x621f, 0x6222, 0x6221, 0x6225, 0x6224, 0x622c, 0x81e7,
-  0x74ef, 0x74f4, 0x74ff, 0x750f, 0x7511, 0x7513, 0x6534, 0x65ee,
-  0x65ef, 0x65f0, 0x660a, 0x6619, 0x6772, 0x6603, 0x6615, 0x6600,
-  0x7085, 0x66f7, 0x661d, 0x6634, 0x6631, 0x6636, 0x6635, 0x8006,
-  0x665f, 0x6654, 0x6641, 0x664f, 0x6656, 0x6661, 0x6657, 0x6677,
-  0x6684, 0x668c, 0x66a7, 0x669d, 0x66be, 0x66db, 0x66dc, 0x66e6,
-  0x66e9, 0x8d32, 0x8d33, 0x8d36, 0x8d3b, 0x8d3d, 0x8d40, 0x8d45,
-  0x8d46, 0x8d48, 0x8d49, 0x8d47, 0x8d4d, 0x8d55, 0x8d59, 0x89c7,
-  0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x726e,
-  0x729f, 0x725d, 0x7266, 0x726f, 0x727e, 0x727f, 0x7284, 0x728b,
-  0x728d, 0x728f, 0x7292, 0x6308, 0x6332, 0x63b0,
-  /* 0x6b */
-  0x643f, 0x64d8, 0x8004, 0x6bea, 0x6bf3, 0x6bfd, 0x6bf5, 0x6bf9,
-  0x6c05, 0x6c07, 0x6c06, 0x6c0d, 0x6c15, 0x6c18, 0x6c19, 0x6c1a,
-  0x6c21, 0x6c29, 0x6c24, 0x6c2a, 0x6c32, 0x6535, 0x6555, 0x656b,
-  0x724d, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809f, 0x809c,
-  0x8093, 0x80bc, 0x670a, 0x80bd, 0x80b1, 0x80ab, 0x80ad, 0x80b4,
-  0x80b7, 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80db, 0x80c2, 0x80c4,
-  0x80d9, 0x80cd, 0x80d7, 0x6710, 0x80dd, 0x80eb, 0x80f1, 0x80f4,
-  0x80ed, 0x810d, 0x810e, 0x80f2, 0x80fc, 0x6715, 0x8112, 0x8c5a,
-  0x8136, 0x811e, 0x812c, 0x8118, 0x8132, 0x8148, 0x814c, 0x8153,
-  0x8174, 0x8159, 0x815a, 0x8171, 0x8160, 0x8169, 0x817c, 0x817d,
-  0x816d, 0x8167, 0x584d, 0x5ab5, 0x8188, 0x8182, 0x8191, 0x6ed5,
-  0x81a3, 0x81aa, 0x81cc, 0x6726, 0x81ca, 0x81bb,
-  /* 0x6c */
-  0x81c1, 0x81a6, 0x6b24, 0x6b37, 0x6b39, 0x6b43, 0x6b46, 0x6b59,
-  0x98d1, 0x98d2, 0x98d3, 0x98d5, 0x98d9, 0x98da, 0x6bb3, 0x5f40,
-  0x6bc2, 0x89f3, 0x6590, 0x9f51, 0x6593, 0x65bc, 0x65c6, 0x65c4,
-  0x65c3, 0x65cc, 0x65ce, 0x65d2, 0x65d6, 0x7080, 0x709c, 0x7096,
-  0x709d, 0x70bb, 0x70c0, 0x70b7, 0x70ab, 0x70b1, 0x70e8, 0x70ca,
-  0x7110, 0x7113, 0x7116, 0x712f, 0x7131, 0x7173, 0x715c, 0x7168,
-  0x7145, 0x7172, 0x714a, 0x7178, 0x717a, 0x7198, 0x71b3, 0x71b5,
-  0x71a8, 0x71a0, 0x71e0, 0x71d4, 0x71e7, 0x71f9, 0x721d, 0x7228,
-  0x706c, 0x7118, 0x7166, 0x71b9, 0x623e, 0x623d, 0x6243, 0x6248,
-  0x6249, 0x793b, 0x7940, 0x7946, 0x7949, 0x795b, 0x795c, 0x7953,
-  0x795a, 0x7962, 0x7957, 0x7960, 0x796f, 0x7967, 0x797a, 0x7985,
-  0x798a, 0x799a, 0x79a7, 0x79b3, 0x5fd1, 0x5fd0,
-  /* 0x6d */
-  0x603c, 0x605d, 0x605a, 0x6067, 0x6041, 0x6059, 0x6063, 0x60ab,
-  0x6106, 0x610d, 0x615d, 0x61a9, 0x619d, 0x61cb, 0x61d1, 0x6206,
-  0x8080, 0x807f, 0x6c93, 0x6cf6, 0x6dfc, 0x77f6, 0x77f8, 0x7800,
-  0x7809, 0x7817, 0x7818, 0x7811, 0x65ab, 0x782d, 0x781c, 0x781d,
-  0x7839, 0x783a, 0x783b, 0x781f, 0x783c, 0x7825, 0x782c, 0x7823,
-  0x7829, 0x784e, 0x786d, 0x7856, 0x7857, 0x7826, 0x7850, 0x7847,
-  0x784c, 0x786a, 0x789b, 0x7893, 0x789a, 0x7887, 0x789c, 0x78a1,
-  0x78a3, 0x78b2, 0x78b9, 0x78a5, 0x78d4, 0x78d9, 0x78c9, 0x78ec,
-  0x78f2, 0x7905, 0x78f4, 0x7913, 0x7924, 0x791e, 0x7934, 0x9f9b,
-  0x9ef9, 0x9efb, 0x9efc, 0x76f1, 0x7704, 0x770d, 0x76f9, 0x7707,
-  0x7708, 0x771a, 0x7722, 0x7719, 0x772d, 0x7726, 0x7735, 0x7738,
-  0x7750, 0x7751, 0x7747, 0x7743, 0x775a, 0x7768,
-  /* 0x6e */
-  0x7762, 0x7765, 0x777f, 0x778d, 0x777d, 0x7780, 0x778c, 0x7791,
-  0x779f, 0x77a0, 0x77b0, 0x77b5, 0x77bd, 0x753a, 0x7540, 0x754e,
-  0x754b, 0x7548, 0x755b, 0x7572, 0x7579, 0x7583, 0x7f58, 0x7f61,
-  0x7f5f, 0x8a48, 0x7f68, 0x7f74, 0x7f71, 0x7f79, 0x7f81, 0x7f7e,
-  0x76cd, 0x76e5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948b, 0x948a,
-  0x948c, 0x948d, 0x948f, 0x9490, 0x9494, 0x9497, 0x9495, 0x949a,
-  0x949b, 0x949c, 0x94a3, 0x94a4, 0x94ab, 0x94aa, 0x94ad, 0x94ac,
-  0x94af, 0x94b0, 0x94b2, 0x94b4, 0x94b6, 0x94b7, 0x94b8, 0x94b9,
-  0x94ba, 0x94bc, 0x94bd, 0x94bf, 0x94c4, 0x94c8, 0x94c9, 0x94ca,
-  0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, 0x94d5,
-  0x94d6, 0x94d7, 0x94d9, 0x94d8, 0x94db, 0x94de, 0x94df, 0x94e0,
-  0x94e2, 0x94e4, 0x94e5, 0x94e7, 0x94e8, 0x94ea,
-  /* 0x6f */
-  0x94e9, 0x94eb, 0x94ee, 0x94ef, 0x94f3, 0x94f4, 0x94f5, 0x94f7,
-  0x94f9, 0x94fc, 0x94fd, 0x94ff, 0x9503, 0x9502, 0x9506, 0x9507,
-  0x9509, 0x950a, 0x950d, 0x950e, 0x950f, 0x9512, 0x9513, 0x9514,
-  0x9515, 0x9516, 0x9518, 0x951b, 0x951d, 0x951e, 0x951f, 0x9522,
-  0x952a, 0x952b, 0x9529, 0x952c, 0x9531, 0x9532, 0x9534, 0x9536,
-  0x9537, 0x9538, 0x953c, 0x953e, 0x953f, 0x9542, 0x9535, 0x9544,
-  0x9545, 0x9546, 0x9549, 0x954c, 0x954e, 0x954f, 0x9552, 0x9553,
-  0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955b, 0x955e, 0x955f,
-  0x955d, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568,
-  0x9569, 0x956a, 0x956b, 0x956c, 0x956f, 0x9571, 0x9572, 0x9573,
-  0x953a, 0x77e7, 0x77ec, 0x96c9, 0x79d5, 0x79ed, 0x79e3, 0x79eb,
-  0x7a06, 0x5d47, 0x7a03, 0x7a02, 0x7a1e, 0x7a14,
-  /* 0x70 */
-  0x7a39, 0x7a37, 0x7a51, 0x9ecf, 0x99a5, 0x7a70, 0x7688, 0x768e,
-  0x7693, 0x7699, 0x76a4, 0x74de, 0x74e0, 0x752c, 0x9e20, 0x9e22,
-  0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e32, 0x9e31, 0x9e36,
-  0x9e38, 0x9e37, 0x9e39, 0x9e3a, 0x9e3e, 0x9e41, 0x9e42, 0x9e44,
-  0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4b, 0x9e4c, 0x9e4e, 0x9e51,
-  0x9e55, 0x9e57, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5e, 0x9e63, 0x9e66,
-  0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e71, 0x9e6d,
-  0x9e73, 0x7592, 0x7594, 0x7596, 0x75a0, 0x759d, 0x75ac, 0x75a3,
-  0x75b3, 0x75b4, 0x75b8, 0x75c4, 0x75b1, 0x75b0, 0x75c3, 0x75c2,
-  0x75d6, 0x75cd, 0x75e3, 0x75e8, 0x75e6, 0x75e4, 0x75eb, 0x75e7,
-  0x7603, 0x75f1, 0x75fc, 0x75ff, 0x7610, 0x7600, 0x7605, 0x760c,
-  0x7617, 0x760a, 0x7625, 0x7618, 0x7615, 0x7619,
-  /* 0x71 */
-  0x761b, 0x763c, 0x7622, 0x7620, 0x7640, 0x762d, 0x7630, 0x763f,
-  0x7635, 0x7643, 0x763e, 0x7633, 0x764d, 0x765e, 0x7654, 0x765c,
-  0x7656, 0x766b, 0x766f, 0x7fca, 0x7ae6, 0x7a78, 0x7a79, 0x7a80,
-  0x7a86, 0x7a88, 0x7a95, 0x7aa6, 0x7aa0, 0x7aac, 0x7aa8, 0x7aad,
-  0x7ab3, 0x8864, 0x8869, 0x8872, 0x887d, 0x887f, 0x8882, 0x88a2,
-  0x88c6, 0x88b7, 0x88bc, 0x88c9, 0x88e2, 0x88ce, 0x88e3, 0x88e5,
-  0x88f1, 0x891a, 0x88fc, 0x88e8, 0x88fe, 0x88f0, 0x8921, 0x8919,
-  0x8913, 0x891b, 0x890a, 0x8934, 0x892b, 0x8936, 0x8941, 0x8966,
-  0x897b, 0x758b, 0x80e5, 0x76b2, 0x76b4, 0x77dc, 0x8012, 0x8014,
-  0x8016, 0x801c, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, 0x8029,
-  0x8028, 0x8031, 0x800b, 0x8035, 0x8043, 0x8046, 0x804d, 0x8052,
-  0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883,
-  /* 0x72 */
-  0x9889, 0x988c, 0x988d, 0x988f, 0x9894, 0x989a, 0x989b, 0x989e,
-  0x989f, 0x98a1, 0x98a2, 0x98a5, 0x98a6, 0x864d, 0x8654, 0x866c,
-  0x866e, 0x867f, 0x867a, 0x867c, 0x867b, 0x86a8, 0x868d, 0x868b,
-  0x86ac, 0x869d, 0x86a7, 0x86a3, 0x86aa, 0x8693, 0x86a9, 0x86b6,
-  0x86c4, 0x86b5, 0x86ce, 0x86b0, 0x86ba, 0x86b1, 0x86af, 0x86c9,
-  0x86cf, 0x86b4, 0x86e9, 0x86f1, 0x86f2, 0x86ed, 0x86f3, 0x86d0,
-  0x8713, 0x86de, 0x86f4, 0x86df, 0x86d8, 0x86d1, 0x8703, 0x8707,
-  0x86f8, 0x8708, 0x870a, 0x870d, 0x8709, 0x8723, 0x873b, 0x871e,
-  0x8725, 0x872e, 0x871a, 0x873e, 0x8748, 0x8734, 0x8731, 0x8729,
-  0x8737, 0x873f, 0x8782, 0x8722, 0x877d, 0x877e, 0x877b, 0x8760,
-  0x8770, 0x874c, 0x876e, 0x878b, 0x8753, 0x8763, 0x877c, 0x8764,
-  0x8759, 0x8765, 0x8793, 0x87af, 0x87a8, 0x87d2,
-  /* 0x73 */
-  0x87c6, 0x8788, 0x8785, 0x87ad, 0x8797, 0x8783, 0x87ab, 0x87e5,
-  0x87ac, 0x87b5, 0x87b3, 0x87cb, 0x87d3, 0x87bd, 0x87d1, 0x87c0,
-  0x87ca, 0x87db, 0x87ea, 0x87e0, 0x87ee, 0x8816, 0x8813, 0x87fe,
-  0x880a, 0x881b, 0x8821, 0x8839, 0x883c, 0x7f36, 0x7f42, 0x7f44,
-  0x7f45, 0x8210, 0x7afa, 0x7afd, 0x7b08, 0x7b03, 0x7b04, 0x7b15,
-  0x7b0a, 0x7b2b, 0x7b0f, 0x7b47, 0x7b38, 0x7b2a, 0x7b19, 0x7b2e,
-  0x7b31, 0x7b20, 0x7b25, 0x7b24, 0x7b33, 0x7b3e, 0x7b1e, 0x7b58,
-  0x7b5a, 0x7b45, 0x7b75, 0x7b4c, 0x7b5d, 0x7b60, 0x7b6e, 0x7b7b,
-  0x7b62, 0x7b72, 0x7b71, 0x7b90, 0x7ba6, 0x7ba7, 0x7bb8, 0x7bac,
-  0x7b9d, 0x7ba8, 0x7b85, 0x7baa, 0x7b9c, 0x7ba2, 0x7bab, 0x7bb4,
-  0x7bd1, 0x7bc1, 0x7bcc, 0x7bdd, 0x7bda, 0x7be5, 0x7be6, 0x7bea,
-  0x7c0c, 0x7bfe, 0x7bfc, 0x7c0f, 0x7c16, 0x7c0b,
-  /* 0x74 */
-  0x7c1f, 0x7c2a, 0x7c26, 0x7c38, 0x7c41, 0x7c40, 0x81fe, 0x8201,
-  0x8202, 0x8204, 0x81ec, 0x8844, 0x8221, 0x8222, 0x8223, 0x822d,
-  0x822f, 0x8228, 0x822b, 0x8238, 0x823b, 0x8233, 0x8234, 0x823e,
-  0x8244, 0x8249, 0x824b, 0x824f, 0x825a, 0x825f, 0x8268, 0x887e,
-  0x8885, 0x8888, 0x88d8, 0x88df, 0x895e, 0x7f9d, 0x7f9f, 0x7fa7,
-  0x7faf, 0x7fb0, 0x7fb2, 0x7c7c, 0x6549, 0x7c91, 0x7c9d, 0x7c9c,
-  0x7c9e, 0x7ca2, 0x7cb2, 0x7cbc, 0x7cbd, 0x7cc1, 0x7cc7, 0x7ccc,
-  0x7ccd, 0x7cc8, 0x7cc5, 0x7cd7, 0x7ce8, 0x826e, 0x66a8, 0x7fbf,
-  0x7fce, 0x7fd5, 0x7fe5, 0x7fe1, 0x7fe6, 0x7fe9, 0x7fee, 0x7ff3,
-  0x7cf8, 0x7d77, 0x7da6, 0x7dae, 0x7e47, 0x7e9b, 0x9eb8, 0x9eb4,
-  0x8d73, 0x8d84, 0x8d94, 0x8d91, 0x8db1, 0x8d67, 0x8d6d, 0x8c47,
-  0x8c49, 0x914a, 0x9150, 0x914e, 0x914f, 0x9164,
-  /* 0x75 */
-  0x9162, 0x9161, 0x9170, 0x9169, 0x916f, 0x917d, 0x917e, 0x9172,
-  0x9174, 0x9179, 0x918c, 0x9185, 0x9190, 0x918d, 0x9191, 0x91a2,
-  0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b5, 0x91b4, 0x91ba,
-  0x8c55, 0x9e7e, 0x8db8, 0x8deb, 0x8e05, 0x8e59, 0x8e69, 0x8db5,
-  0x8dbf, 0x8dbc, 0x8dba, 0x8dc4, 0x8dd6, 0x8dd7, 0x8dda, 0x8dde,
-  0x8dce, 0x8dcf, 0x8ddb, 0x8dc6, 0x8dec, 0x8df7, 0x8df8, 0x8de3,
-  0x8df9, 0x8dfb, 0x8de4, 0x8e09, 0x8dfd, 0x8e14, 0x8e1d, 0x8e1f,
-  0x8e2c, 0x8e2e, 0x8e23, 0x8e2f, 0x8e3a, 0x8e40, 0x8e39, 0x8e35,
-  0x8e3d, 0x8e31, 0x8e49, 0x8e41, 0x8e42, 0x8e51, 0x8e52, 0x8e4a,
-  0x8e70, 0x8e76, 0x8e7c, 0x8e6f, 0x8e74, 0x8e85, 0x8e8f, 0x8e94,
-  0x8e90, 0x8e9c, 0x8e9e, 0x8c78, 0x8c82, 0x8c8a, 0x8c85, 0x8c98,
-  0x8c94, 0x659b, 0x89d6, 0x89de, 0x89da, 0x89dc,
-  /* 0x76 */
-  0x89e5, 0x89eb, 0x89ef, 0x8a3e, 0x8b26, 0x9753, 0x96e9, 0x96f3,
-  0x96ef, 0x9706, 0x9701, 0x9708, 0x970f, 0x970e, 0x972a, 0x972d,
-  0x9730, 0x973e, 0x9f80, 0x9f83, 0x9f85, 0x9f86, 0x9f87, 0x9f88,
-  0x9f89, 0x9f8a, 0x9f8c, 0x9efe, 0x9f0b, 0x9f0d, 0x96b9, 0x96bc,
-  0x96bd, 0x96ce, 0x96d2, 0x77bf, 0x96e0, 0x928e, 0x92ae, 0x92c8,
-  0x933e, 0x936a, 0x93ca, 0x938f, 0x943e, 0x946b, 0x9c7f, 0x9c82,
-  0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x7a23, 0x9c8b, 0x9c8e, 0x9c90,
-  0x9c91, 0x9c92, 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9e, 0x9c9f,
-  0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8,
-  0x9ca9, 0x9cab, 0x9cad, 0x9cae, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3,
-  0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd,
-  0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cca, 0x9ccb,
-  /* 0x77 */
-  0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd3, 0x9cd4, 0x9cd5,
-  0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc, 0x9cdd, 0x9cdf, 0x9ce2, 0x977c,
-  0x9785, 0x9791, 0x9792, 0x9794, 0x97af, 0x97ab, 0x97a3, 0x97b2,
-  0x97b4, 0x9ab1, 0x9ab0, 0x9ab7, 0x9e58, 0x9ab6, 0x9aba, 0x9abc,
-  0x9ac1, 0x9ac0, 0x9ac5, 0x9ac2, 0x9acb, 0x9acc, 0x9ad1, 0x9b45,
-  0x9b43, 0x9b47, 0x9b49, 0x9b48, 0x9b4d, 0x9b51, 0x98e8, 0x990d,
-  0x992e, 0x9955, 0x9954, 0x9adf, 0x9ae1, 0x9ae6, 0x9aef, 0x9aeb,
-  0x9afb, 0x9aed, 0x9af9, 0x9b08, 0x9b0f, 0x9b13, 0x9b1f, 0x9b23,
-  0x9ebd, 0x9ebe, 0x7e3b, 0x9e82, 0x9e87, 0x9e88, 0x9e8b, 0x9e92,
-  0x93d6, 0x9e9d, 0x9e9f, 0x9edb, 0x9edc, 0x9edd, 0x9ee0, 0x9edf,
-  0x9ee2, 0x9ee9, 0x9ee7, 0x9ee5, 0x9eea, 0x9eef, 0x9f22, 0x9f2c,
-  0x9f2f, 0x9f39, 0x9f37, 0x9f3d, 0x9f3e, 0x9f44,
-};
-
-static int
-gb2312_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = (s[0] & 0x7F);
-  if ((c1 >= 0x21 && c1 <= 0x29) || (c1 >= 0x30 && c1 <= 0x77)) {
-    if (n >= 2) {
-      unsigned char c2 = (s[1] & 0x7F);
-      if (c2 >= 0x21 && c2 < 0x7f) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        unsigned short wc = 0xfffd;
-        if (i < 1410) {
-          if (i < 831)
-            wc = gb2312_2uni_page21[i];
-        } else {
-          if (i < 8178)
-            wc = gb2312_2uni_page30[i-1410];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-static const unsigned short gb2312_2charset[7445] = {
-  0x2168, 0x216c, 0x2127, 0x2163, 0x2140, 0x2141, 0x2824, 0x2822,
-  0x2828, 0x2826, 0x283a, 0x282c, 0x282a, 0x2830, 0x282e, 0x2142,
-  0x2834, 0x2832, 0x2839, 0x2821, 0x2825, 0x2827, 0x2829, 0x282d,
-  0x2831, 0x2823, 0x282b, 0x282f, 0x2833, 0x2835, 0x2836, 0x2837,
-  0x2838, 0x2126, 0x2125, 0x2621, 0x2622, 0x2623, 0x2624, 0x2625,
-  0x2626, 0x2627, 0x2628, 0x2629, 0x262a, 0x262b, 0x262c, 0x262d,
-  0x262e, 0x262f, 0x2630, 0x2631, 0x2632, 0x2633, 0x2634, 0x2635,
-  0x2636, 0x2637, 0x2638, 0x2641, 0x2642, 0x2643, 0x2644, 0x2645,
-  0x2646, 0x2647, 0x2648, 0x2649, 0x264a, 0x264b, 0x264c, 0x264d,
-  0x264e, 0x264f, 0x2650, 0x2651, 0x2652, 0x2653, 0x2654, 0x2655,
-  0x2656, 0x2657, 0x2658, 0x2727, 0x2721, 0x2722, 0x2723, 0x2724,
-  0x2725, 0x2726, 0x2728, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d,
-  0x272e, 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735,
-  0x2736, 0x2737, 0x2738, 0x2739, 0x273a, 0x273b, 0x273c, 0x273d,
-  0x273e, 0x273f, 0x2740, 0x2741, 0x2751, 0x2752, 0x2753, 0x2754,
-  0x2755, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c, 0x275d,
-  0x275e, 0x275f, 0x2760, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765,
-  0x2766, 0x2767, 0x2768, 0x2769, 0x276a, 0x276b, 0x276c, 0x276d,
-  0x276e, 0x276f, 0x2770, 0x2771, 0x2757, 0x212a, 0x212c, 0x212e,
-  0x212f, 0x2130, 0x2131, 0x212d, 0x216b, 0x2164, 0x2165, 0x2179,
-  0x2166, 0x216d, 0x2271, 0x2272, 0x2273, 0x2274, 0x2275, 0x2276,
-  0x2277, 0x2278, 0x2279, 0x227a, 0x227b, 0x227c, 0x217b, 0x217c,
-  0x217a, 0x217d, 0x214a, 0x2147, 0x2146, 0x214c, 0x2158, 0x215e,
-  0x214f, 0x214e, 0x2144, 0x2145, 0x2149, 0x2148, 0x2152, 0x2153,
-  0x2160, 0x215f, 0x2143, 0x214b, 0x2157, 0x2156, 0x2155, 0x2159,
-  0x2154, 0x215c, 0x215d, 0x215a, 0x215b, 0x2151, 0x214d, 0x2150,
-  0x2259, 0x225a, 0x225b, 0x225c, 0x225d, 0x225e, 0x225f, 0x2260,
-  0x2261, 0x2262, 0x2245, 0x2246, 0x2247, 0x2248, 0x2249, 0x224a,
-  0x224b, 0x224c, 0x224d, 0x224e, 0x224f, 0x2250, 0x2251, 0x2252,
-  0x2253, 0x2254, 0x2255, 0x2256, 0x2257, 0x2258, 0x2231, 0x2232,
-  0x2233, 0x2234, 0x2235, 0x2236, 0x2237, 0x2238, 0x2239, 0x223a,
-  0x223b, 0x223c, 0x223d, 0x223e, 0x223f, 0x2240, 0x2241, 0x2242,
-  0x2243, 0x2244, 0x2924, 0x2925, 0x2926, 0x2927, 0x2928, 0x2929,
-  0x292a, 0x292b, 0x292c, 0x292d, 0x292e, 0x292f, 0x2930, 0x2931,
-  0x2932, 0x2933, 0x2934, 0x2935, 0x2936, 0x2937, 0x2938, 0x2939,
-  0x293a, 0x293b, 0x293c, 0x293d, 0x293e, 0x293f, 0x2940, 0x2941,
-  0x2942, 0x2943, 0x2944, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949,
-  0x294a, 0x294b, 0x294c, 0x294d, 0x294e, 0x294f, 0x2950, 0x2951,
-  0x2952, 0x2953, 0x2954, 0x2955, 0x2956, 0x2957, 0x2958, 0x2959,
-  0x295a, 0x295b, 0x295c, 0x295d, 0x295e, 0x295f, 0x2960, 0x2961,
-  0x2962, 0x2963, 0x2964, 0x2965, 0x2966, 0x2967, 0x2968, 0x2969,
-  0x296a, 0x296b, 0x296c, 0x296d, 0x296e, 0x296f, 0x2176, 0x2175,
-  0x2178, 0x2177, 0x2174, 0x2173, 0x2170, 0x2172, 0x2171, 0x216f,
-  0x216e, 0x2162, 0x2161, 0x2121, 0x2122, 0x2123, 0x2128, 0x2129,
-  0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, 0x213a, 0x213b,
-  0x213e, 0x213f, 0x217e, 0x2132, 0x2133, 0x213c, 0x213d, 0x2421,
-  0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429,
-  0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431,
-  0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439,
-  0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441,
-  0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449,
-  0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451,
-  0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459,
-  0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461,
-  0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469,
-  0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471,
-  0x2472, 0x2473, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526,
-  0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c, 0x252d, 0x252e,
-  0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536,
-  0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c, 0x253d, 0x253e,
-  0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546,
-  0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e,
-  0x254f, 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556,
-  0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
-  0x255f, 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566,
-  0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e,
-  0x256f, 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576,
-  0x2124, 0x2845, 0x2846, 0x2847, 0x2848, 0x2849, 0x284a, 0x284b,
-  0x284c, 0x284d, 0x284e, 0x284f, 0x2850, 0x2851, 0x2852, 0x2853,
-  0x2854, 0x2855, 0x2856, 0x2857, 0x2858, 0x2859, 0x285a, 0x285b,
-  0x285c, 0x285d, 0x285e, 0x285f, 0x2860, 0x2861, 0x2862, 0x2863,
-  0x2864, 0x2865, 0x2866, 0x2867, 0x2868, 0x2869, 0x2265, 0x2266,
-  0x2267, 0x2268, 0x2269, 0x226a, 0x226b, 0x226c, 0x226d, 0x226e,
-  0x523b, 0x3621, 0x465f, 0x4d72, 0x5549, 0x487d, 0x494f, 0x4f42,
-  0x5822, 0x323b, 0x536b, 0x5824, 0x3373, 0x5728, 0x4752, 0x5827,
-  0x4a40, 0x4770, 0x317b, 0x5235, 0x3454, 0x362b, 0x4b3f, 0x5829,
-  0x362a, 0x413d, 0x514f, 0x4925, 0x582d, 0x3876, 0x513e, 0x635c,
-  0x5650, 0x3761, 0x342e, 0x4159, 0x583c, 0x4d68, 0x3524, 0x4e2a,
-  0x5677, 0x4076, 0x3e59, 0x582f, 0x444b, 0x3e43, 0x5831, 0x4334,
-  0x5265, 0x562e, 0x4e5a, 0x5527, 0x3a75, 0x3726, 0x4056, 0x4639,
-  0x4552, 0x4747, 0x3954, 0x334b, 0x5252, 0x583f, 0x3e45, 0x4672,
-  0x5232, 0x4f30, 0x4f67, 0x4a69, 0x5840, 0x4272, 0x4252, 0x4869,
-  0x472c, 0x414b, 0x5368, 0x5579, 0x4a42, 0x367e, 0x5821, 0x535a,
-  0x3f77, 0x5446, 0x3b25, 0x5841, 0x4e65, 0x3e2e, 0x5828, 0x5147,
-  0x5029, 0x583d, 0x596f, 0x4d76, 0x3f3a, 0x3d3b, 0x3a25, 0x5260,
-  0x327a, 0x3a60, 0x4436, 0x4f6d, 0x3e29, 0x4d24, 0x4141, 0x4757,
-  0x5971, 0x5974, 0x484b, 0x5869, 0x525a, 0x4a32, 0x484a, 0x586c,
-  0x586a, 0x5846, 0x3d76, 0x464d, 0x3370, 0x586b, 0x3d71, 0x3d69,
-  0x4854, 0x3453, 0x4258, 0x3256, 0x5750, 0x4a4b, 0x4b7b, 0x554c,
-  0x3836, 0x4f49, 0x595a, 0x5870, 0x472a, 0x586e, 0x347a, 0x416e,
-  0x5254, 0x586d, 0x5247, 0x586f, 0x4347, 0x5176, 0x5659, 0x5872,
-  0x5875, 0x3c7e, 0x3c5b, 0x484e, 0x375d, 0x3742, 0x4673, 0x5878,
-  0x5241, 0x4e69, 0x3c3f, 0x377c, 0x3725, 0x505d, 0x565a, 0x5345,
-  0x3b6f, 0x3b61, 0x5871, 0x4921, 0x4e30, 0x342b, 0x5873, 0x494b,
-  0x5876, 0x4257, 0x5877, 0x4e31, 0x5879, 0x322e, 0x3940, 0x5923,
-  0x3069, 0x4166, 0x496c, 0x4b45, 0x4b46, 0x5924, 0x3568, 0x352b,
-  0x4e3b, 0x354d, 0x5721, 0x5774, 0x5353, 0x4c65, 0x3a4e, 0x5922,
-  0x595c, 0x5360, 0x587d, 0x3770, 0x5777, 0x587e, 0x587a, 0x5921,
-  0x4463, 0x5336, 0x5874, 0x595d, 0x587b, 0x4565, 0x4050, 0x5170,
-  0x305b, 0x3c51, 0x5926, 0x5925, 0x592c, 0x592e, 0x592b, 0x4a39,
-  0x5929, 0x5636, 0x335e, 0x5928, 0x407d, 0x4a4c, 0x592a, 0x5927,
-  0x5930, 0x3631, 0x3929, 0x5240, 0x4f40, 0x4242, 0x3d44, 0x556c,
-  0x3260, 0x4748, 0x3f6b, 0x592d, 0x592f, 0x4e6a, 0x3a6e, 0x4756,
-  0x3163, 0x3459, 0x366d, 0x5934, 0x3f21, 0x595e, 0x474e, 0x407e,
-  0x5938, 0x4b57, 0x377d, 0x5935, 0x5937, 0x3123, 0x5361, 0x5939,
-  0x5045, 0x5936, 0x5931, 0x5932, 0x4129, 0x5933, 0x3c73, 0x505e,
-  0x3829, 0x3e63, 0x593d, 0x593a, 0x3033, 0x5942, 0x5944, 0x3136,
-  0x593f, 0x3539, 0x3e73, 0x4c48, 0x3a72, 0x5250, 0x5943, 0x3d68,
-  0x332b, 0x5945, 0x3e6b, 0x5946, 0x593b, 0x445f, 0x593e, 0x5941,
-  0x5940, 0x552e, 0x5635, 0x4763, 0x5948, 0x3c59, 0x594a, 0x593c,
-  0x594b, 0x462b, 0x5949, 0x5776, 0x4d23, 0x3d21, 0x594c, 0x453c,
-  0x4d35, 0x594d, 0x5947, 0x3325, 0x3f7e, 0x3835, 0x407c, 0x3078,
-  0x3476, 0x594e, 0x594f, 0x3422, 0x5950, 0x345f, 0x3041, 0x5951,
-  0x4935, 0x4f71, 0x5952, 0x4145, 0x5956, 0x492e, 0x5955, 0x5954,
-  0x5957, 0x4b5b, 0x3d29, 0x4627, 0x5953, 0x5958, 0x5959, 0x4865,
-  0x405c, 0x3679, 0x5823, 0x544a, 0x542a, 0x5056, 0x3364, 0x5557,
-  0x4f48, 0x3962, 0x3f4b, 0x4362, 0x3652, 0x4d43, 0x596e, 0x5970,
-  0x3533, 0x3635, 0x3e24, 0x486b, 0x482b, 0x304b, 0x392b, 0x4179,
-  0x5962, 0x403c, 0x3932, 0x3958, 0x504b, 0x3178, 0x4664, 0x3e5f,
-  0x3564, 0x5748, 0x5178, 0x3c66, 0x4a5e, 0x3c3d, 0x5966, 0x5867,
-  0x445a, 0x3854, 0x483d, 0x3261, 0x5459, 0x4330, 0x4361, 0x5a22,
-  0x485f, 0x5034, 0x3e7c, 0x4529, 0x395a, 0x5a23, 0x5429, 0x5a24,
-  0x597b, 0x362c, 0x376b, 0x3179, 0x597c, 0x3365, 0x3e76, 0x3f76,
-  0x5231, 0x4064, 0x3633, 0x597e, 0x597d, 0x3e3b, 0x4660, 0x573c,
-  0x5a21, 0x4139, 0x3572, 0x4168, 0x3c75, 0x3455, 0x415d, 0x447d,
-  0x3c38, 0x3732, 0x376f, 0x596c, 0x463e, 0x3f2d, 0x3b4b, 0x354a,
-  0x5b49, 0x5057, 0x4d39, 0x303c, 0x3376, 0x3b77, 0x5b4a, 0x3a2f,
-  0x5464, 0x3536, 0x3573, 0x5856, 0x4850, 0x3756, 0x4750, 0x5857,
-  0x3f2f, 0x5b3b, 0x5858, 0x504c, 0x3b2e, 0x6b3e, 0x4150, 0x4175,
-  0x5472, 0x3855, 0x3434, 0x3375, 0x493e, 0x4550, 0x4559, 0x407b,
-  0x3170, 0x5859, 0x394e, 0x353d, 0x585a, 0x5646, 0x4b22, 0x482f,
-  0x4932, 0x344c, 0x3f4c, 0x3974, 0x585b, 0x585c, 0x3667, 0x3c41,
-  0x4c6a, 0x4f77, 0x585d, 0x4730, 0x3950, 0x3d23, 0x4c5e, 0x464a,
-  0x5860, 0x585e, 0x585f, 0x307e, 0x3e67, 0x4a23, 0x3c74, 0x3831,
-  0x386e, 0x5862, 0x3d4b, 0x5864, 0x5863, 0x457c, 0x5865, 0x5866,
-  0x4126, 0x4830, 0x306c, 0x3926, 0x3c53, 0x4e71, 0x5b3d, 0x4153,
-  0x362f, 0x567a, 0x452c, 0x3d59, 0x5b3e, 0x5b3f, 0x4078, 0x3e22,
-  0x404d, 0x5b40, 0x4a46, 0x322a, 0x5342, 0x4363, 0x512b, 0x5b42,
-  0x4055, 0x5b43, 0x3f31, 0x443c, 0x475a, 0x5b44, 0x5968, 0x4957,
-  0x3934, 0x4e70, 0x5448, 0x307c, 0x3452, 0x5059, 0x5969, 0x5e4b,
-  0x596b, 0x5830, 0x3b2f, 0x3131, 0x3357, 0x584e, 0x5451, 0x3d33,
-  0x3f6f, 0x4f3b, 0x5850, 0x374b, 0x5851, 0x4625, 0x4778, 0x523d,
-  0x5852, 0x4464, 0x4a2e, 0x4727, 0x5826, 0x497d, 0x4e67, 0x3b5c,
-  0x306b, 0x3b2a, 0x502d, 0x3130, 0x5764, 0x573f, 0x3525, 0x4274,
-  0x444f, 0x3229, 0x3237, 0x3165, 0x5f32, 0x553c, 0x3f28, 0x422c,
-  0x5855, 0x4231, 0x5854, 0x4e54, 0x5a60, 0x4e40, 0x5834, 0x432e,
-  0x5321, 0x4e23, 0x3c34, 0x4834, 0x4251, 0x3e6d, 0x5036, 0x5a61,
-  0x4764, 0x3327, 0x3672, 0x4c7c, 0x407a, 0x4077, 0x5139, 0x5161,
-  0x5847, 0x325e, 0x4065, 0x3a71, 0x5848, 0x542d, 0x4f61, 0x5849,
-  0x584a, 0x4f43, 0x3378, 0x3e47, 0x584b, 0x5b4c, 0x4825, 0x4f58,
-  0x487e, 0x324e, 0x5356, 0x3266, 0x3c30, 0x5351, 0x4b2b, 0x3734,
-  0x3722, 0x4a65, 0x4821, 0x4a5c, 0x3164, 0x5070, 0x4551, 0x5b45,
-  0x357e, 0x3f5a, 0x3945, 0x3e64, 0x416d, 0x5f36, 0x5f35, 0x563b,
-  0x3d50, 0x5559, 0x3048, 0x3623, 0x3f49, 0x4c28, 0x5f33, 0x4a37,
-  0x5352, 0x584f, 0x5236, 0x3a45, 0x4b3e, 0x4c3e, 0x5f37, 0x3570,
-  0x5f34, 0x5375, 0x3354, 0x3877, 0x5f3a, 0x3a4f, 0x3c2a, 0x3575,
-  0x4d2c, 0x437b, 0x3a73, 0x4074, 0x4d42, 0x4f72, 0x5f38, 0x4f45,
-  0x4240, 0x5f39, 0x4270, 0x3e7d, 0x415f, 0x4d4c, 0x5277, 0x374d,
-  0x5f41, 0x5f44, 0x3771, 0x3049, 0x3656, 0x3754, 0x3a2c, 0x4c7d,
-  0x3f54, 0x4b31, 0x4674, 0x5628, 0x5f45, 0x4e62, 0x3333, 0x4e7c,
-  0x3435, 0x4e47, 0x3a70, 0x4e61, 0x513d, 0x5f40, 0x3474, 0x334a,
-  0x3866, 0x5f3b, 0x4445, 0x5f3c, 0x5f3d, 0x5f3e, 0x453b, 0x5f3f,
-  0x5f42, 0x5431, 0x5f43, 0x473a, 0x4e58, 0x4458, 0x5f4a, 0x5f4f,
-  0x565c, 0x5f49, 0x5f5a, 0x4e36, 0x3a47, 0x5f4e, 0x5f48, 0x455e,
-  0x496b, 0x3a74, 0x437c, 0x3e57, 0x5f46, 0x5f4d, 0x4558, 0x5526,
-  0x3a4d, 0x3e4c, 0x533d, 0x3840, 0x5664, 0x5f47, 0x393e, 0x3f27,
-  0x417c, 0x5f4b, 0x5f4c, 0x5f50, 0x5f5b, 0x5f65, 0x5f57, 0x5f56,
-  0x5749, 0x5f63, 0x5f64, 0x656b, 0x5227, 0x5f52, 0x3f29, 0x545b,
-  0x3f48, 0x5f54, 0x4f4c, 0x5f5d, 0x514a, 0x5f5e, 0x3027, 0x4637,
-  0x5f53, 0x3a65, 0x365f, 0x4d5b, 0x397e, 0x5455, 0x5f5f, 0x4f6c,
-  0x3025, 0x5f67, 0x5f51, 0x5146, 0x5f55, 0x5f58, 0x5f59, 0x5f5c,
-  0x3b29, 0x5f60, 0x5f61, 0x5f62, 0x5f66, 0x5f68, 0x5334, 0x3867,
-  0x4536, 0x5f6a, 0x495a, 0x4128, 0x4444, 0x3f5e, 0x4f78, 0x555c,
-  0x5f6e, 0x3238, 0x3a5f, 0x5f6c, 0x5b41, 0x5164, 0x4b74, 0x343d,
-  0x3026, 0x5f71, 0x4c46, 0x5f72, 0x5f6d, 0x5f69, 0x5f6b, 0x5f6f,
-  0x5f70, 0x3b3d, 0x5f73, 0x5f74, 0x3b23, 0x4a5b, 0x4e28, 0x6027,
-  0x332a, 0x6026, 0x6021, 0x5f7e, 0x4d59, 0x5f7c, 0x5f7a, 0x3f50,
-  0x5744, 0x494c, 0x5f78, 0x3021, 0x5f7d, 0x5f7b, 0x6022, 0x6028,
-  0x3748, 0x4621, 0x4936, 0x4032, 0x5f75, 0x453e, 0x5844, 0x5f79,
-  0x4476, 0x6023, 0x6024, 0x6025, 0x5025, 0x6034, 0x4c64, 0x6031,
-  0x3f26, 0x602f, 0x4e39, 0x602b, 0x4946, 0x402e, 0x602e, 0x3a6d,
-  0x3a30, 0x6029, 0x5f76, 0x6033, 0x6038, 0x342d, 0x6039, 0x4f32,
-  0x3a48, 0x6030, 0x507a, 0x602c, 0x547b, 0x5f77, 0x4567, 0x602d,
-  0x5377, 0x6036, 0x6037, 0x6044, 0x5061, 0x603c, 0x6049, 0x604a,
-  0x603e, 0x602a, 0x4924, 0x6041, 0x6032, 0x4a48, 0x6043, 0x6035,
-  0x4e4b, 0x4b43, 0x604d, 0x6046, 0x6042, 0x604b, 0x603a, 0x603f,
-  0x6040, 0x6045, 0x6047, 0x6048, 0x604c, 0x603b, 0x4b54, 0x6055,
-  0x6056, 0x6052, 0x6050, 0x3c4e, 0x6051, 0x3842, 0x5845, 0x506a,
-  0x426f, 0x604f, 0x603d, 0x6054, 0x6053, 0x6057, 0x605c, 0x6058,
-  0x5676, 0x3330, 0x576c, 0x4b3b, 0x605a, 0x4e7b, 0x3a59, 0x6061,
-  0x605d, 0x522d, 0x6062, 0x605b, 0x6059, 0x605f, 0x6060, 0x605e,
-  0x6064, 0x4677, 0x582c, 0x546b, 0x6066, 0x4a49, 0x6065, 0x3841,
-  0x6067, 0x6068, 0x6069, 0x6063, 0x3a3f, 0x4c67, 0x606a, 0x4f79,
-  0x606b, 0x4842, 0x3d40, 0x4452, 0x606c, 0x606d, 0x4774, 0x4b44,
-  0x606e, 0x3b58, 0x5836, 0x5272, 0x606f, 0x4d45, 0x365a, 0x6071,
-  0x5430, 0x4027, 0x3451, 0x4e27, 0x6070, 0x6072, 0x394c, 0x397a,
-  0x4d3c, 0x6073, 0x4654, 0x6074, 0x5432, 0x4826, 0x6076, 0x6075,
-  0x6077, 0x4d41, 0x4a25, 0x545a, 0x5b57, 0x5b59, 0x5b58, 0x3967,
-  0x5b5c, 0x5b5d, 0x3558, 0x5b5a, 0x5b5b, 0x3321, 0x5b5f, 0x3b78,
-  0x5637, 0x5b60, 0x3e79, 0x373b, 0x5b50, 0x4c2e, 0x3f32, 0x3b35,
-  0x5778, 0x3f53, 0x3f69, 0x3c61, 0x4c33, 0x5b5e, 0x3053, 0x4e6b,
-  0x3758, 0x5739, 0x4642, 0x4024, 0x4c39, 0x5b67, 0x5b61, 0x463a,
-  0x5b63, 0x5b68, 0x4577, 0x5b6a, 0x5b69, 0x3f40, 0x5b66, 0x5b65,
-  0x3439, 0x402c, 0x4222, 0x5b62, 0x5b64, 0x504d, 0x5b6d, 0x405d,
-  0x5b72, 0x3662, 0x5b73, 0x5b52, 0x3938, 0x542b, 0x5b6c, 0x3f51,
-  0x5b70, 0x5b51, 0x3566, 0x5b6b, 0x3f65, 0x5b6e, 0x5b71, 0x5b79,
-  0x3921, 0x3023, 0x4271, 0x3347, 0x5b6f, 0x5b78, 0x4652, 0x5b74,
-  0x5b75, 0x5b77, 0x5b76, 0x5b7e, 0x5372, 0x323a, 0x5b7d, 0x5c24,
-  0x5b7b, 0x5b7a, 0x5b7c, 0x4560, 0x3b79, 0x5c23, 0x5c25, 0x4c43,
-  0x3651, 0x5d40, 0x5c21, 0x5c22, 0x4735, 0x3669, 0x5c27, 0x5c26,
-  0x5c29, 0x3124, 0x354c, 0x3f30, 0x515f, 0x3642, 0x5c28, 0x4b7a,
-  0x6b73, 0x4b5c, 0x4b7e, 0x4c41, 0x487b, 0x5c2a, 0x4c6e, 0x5c2b,
-  0x5b53, 0x5c2f, 0x5c2c, 0x3e33, 0x4a7b, 0x5c2d, 0x494a, 0x4439,
-  0x473d, 0x5c2e, 0x5476, 0x5066, 0x442b, 0x3655, 0x5b54, 0x315a,
-  0x5b55, 0x5b56, 0x3a3e, 0x4840, 0x4a3f, 0x4849, 0x5733, 0x4979,
-  0x3f47, 0x3a78, 0x523c, 0x623a, 0x3426, 0x3138, 0x3834, 0x4f44,
-  0x5967, 0x4f26, 0x4d62, 0x596d, 0x3660, 0x5239, 0x393b, 0x6239,
-  0x6237, 0x3473, 0x4c6c, 0x4c2b, 0x3772, 0x5832, 0x516b, 0x3a3b,
-  0x4a27, 0x4d37, 0x5244, 0x3f64, 0x3c50, 0x3661, 0x5e45, 0x5e46,
-  0x5b3c, 0x5159, 0x4666, 0x444e, 0x376e, 0x375c, 0x3f7c, 0x5760,
-  0x4675, 0x313c, 0x5e48, 0x3d31, 0x4c57, 0x5e4a, 0x5e49, 0x356c,
-  0x495d, 0x3042, 0x452e, 0x452b, 0x444c, 0x3c69, 0x4b7d, 0x3a43,
-  0x6579, 0x4867, 0x657a, 0x4d7d, 0x5731, 0x383e, 0x4268, 0x4851,
-  0x657b, 0x364a, 0x3c4b, 0x517d, 0x6621, 0x436e, 0x6624, 0x657e,
-  0x6625, 0x4d57, 0x3741, 0x657c, 0x657d, 0x6623, 0x445d, 0x6628,
-  0x6627, 0x4343, 0x465e, 0x662a, 0x4437, 0x6622, 0x4a3c, 0x3d63,
-  0x3943, 0x6626, 0x5055, 0x4e2f, 0x6629, 0x6630, 0x5226, 0x3d2a,
-  0x662d, 0x662f, 0x4051, 0x524c, 0x3c27, 0x6631, 0x5276, 0x574b,
-  0x4d7e, 0x4d5e, 0x4226, 0x662b, 0x662c, 0x3d3f, 0x662e, 0x6633,
-  0x6632, 0x6636, 0x6638, 0x446f, 0x4448, 0x3e6a, 0x496f, 0x6637,
-  0x3670, 0x4364, 0x5369, 0x6634, 0x6635, 0x4822, 0x663d, 0x6639,
-  0x4645, 0x4d71, 0x663b, 0x663c, 0x3b69, 0x663e, 0x663a, 0x4037,
-  0x5324, 0x663f, 0x4974, 0x6643, 0x6644, 0x5076, 0x433d, 0x4344,
-  0x6642, 0x6641, 0x6647, 0x4f31, 0x6b74, 0x664a, 0x6645, 0x3c5e,
-  0x4929, 0x3c35, 0x4f53, 0x6648, 0x6649, 0x664e, 0x6650, 0x6651,
-  0x664b, 0x3555, 0x664c, 0x664f, 0x445b, 0x6646, 0x664d, 0x6652,
-  0x6654, 0x6653, 0x6655, 0x5978, 0x6656, 0x6657, 0x5753, 0x665d,
-  0x665e, 0x3f57, 0x5450, 0x5756, 0x3466, 0x4b6f, 0x665a, 0x5843,
-  0x574e, 0x5022, 0x434f, 0x665f, 0x3c3e, 0x3942, 0x665b, 0x5127,
-  0x3a22, 0x424f, 0x582b, 0x4a6b, 0x656e, 0x665c, 0x3775, 0x4866,
-  0x4475, 0x6532, 0x447e, 0x4b7c, 0x6533, 0x552c, 0x536e, 0x4a58,
-  0x3032, 0x4b4e, 0x4d6a, 0x3a6a, 0x6535, 0x6534, 0x575a, 0x3959,
-  0x5666, 0x3628, 0x4d70, 0x524b, 0x3126, 0x4a35, 0x3368, 0x4973,
-  0x3f4d, 0x507b, 0x4a52, 0x6536, 0x3b42, 0x4f5c, 0x392c, 0x5457,
-  0x3a26, 0x5167, 0x4f7c, 0x3c52, 0x6537, 0x485d, 0x3f6d, 0x3176,
-  0x4b5e, 0x3c45, 0x3c44, 0x527a, 0x435c, 0x3f5c, 0x383b, 0x4342,
-  0x3a2e, 0x5422, 0x475e, 0x442f, 0x326c, 0x3951, 0x653b, 0x4148,
-  0x552f, 0x653c, 0x653e, 0x3467, 0x3654, 0x4b42, 0x5130, 0x353c,
-  0x4a59, 0x3762, 0x4964, 0x3d2b, 0x4e3e, 0x5770, 0x5021, 0x4959,
-  0x367b, 0x6658, 0x3c62, 0x333e, 0x4950, 0x6659, 0x3322, 0x5e4c,
-  0x5348, 0x5e4d, 0x5222, 0x5e4e, 0x3e4d, 0x5e4f, 0x4a2c, 0x527c,
-  0x335f, 0x656a, 0x4461, 0x3e21, 0x4e32, 0x4472, 0x3e56, 0x4628,
-  0x3263, 0x3e53, 0x477c, 0x4c6b, 0x3d6c, 0x4e5d, 0x4a3a, 0x4641,
-  0x656c, 0x503c, 0x5539, 0x656d, 0x4a74, 0x4d40, 0x4245, 0x656f,
-  0x4244, 0x6570, 0x6578, 0x4d4d, 0x493d, 0x5259, 0x6128, 0x536c,
-  0x4b6a, 0x4671, 0x612c, 0x6127, 0x6129, 0x612a, 0x612f, 0x326d,
-  0x612b, 0x385a, 0x612d, 0x612e, 0x6130, 0x353a, 0x6131, 0x6133,
-  0x6138, 0x5152, 0x6136, 0x6135, 0x416b, 0x6137, 0x5440, 0x6132,
-  0x613a, 0x3036, 0x6134, 0x3f79, 0x6139, 0x613b, 0x613e, 0x613c,
-  0x5645, 0x4f3f, 0x613d, 0x613f, 0x424d, 0x366b, 0x5378, 0x474d,
-  0x3765, 0x3e7e, 0x6140, 0x6141, 0x6147, 0x3367, 0x4669, 0x345e,
-  0x5142, 0x6148, 0x6146, 0x6145, 0x6143, 0x6142, 0x3140, 0x5538,
-  0x6144, 0x614b, 0x614c, 0x614a, 0x6f7a, 0x6153, 0x6152, 0x4736,
-  0x6149, 0x614e, 0x6150, 0x6154, 0x6151, 0x614d, 0x614f, 0x6155,
-  0x6156, 0x6157, 0x6158, 0x615a, 0x615b, 0x4e21, 0x675d, 0x3428,
-  0x565d, 0x5132, 0x3332, 0x3924, 0x5773, 0x4749, 0x3e5e, 0x392e,
-  0x4e57, 0x326e, 0x5b4f, 0x3c3a, 0x5251, 0x4b48, 0x304d, 0x4f6f,
-  0x5963, 0x3d6d, 0x3152, 0x4a50, 0x323c, 0x4b27, 0x372b, 0x4a26,
-  0x4f23, 0x6078, 0x554a, 0x607b, 0x607a, 0x4541, 0x4c7b, 0x4131,
-  0x6079, 0x5663, 0x322f, 0x5644, 0x355b, 0x3478, 0x5621, 0x4f2f,
-  0x306f, 0x607c, 0x6121, 0x3323, 0x607d, 0x607e, 0x4331, 0x435d,
-  0x6122, 0x3779, 0x3b4f, 0x6123, 0x443b, 0x6124, 0x6125, 0x6126,
-  0x3431, 0x3849, 0x463d, 0x446a, 0x3222, 0x5052, 0x675b, 0x3b43,
-  0x5357, 0x5344, 0x3963, 0x624f, 0x572f, 0x476c, 0x3153, 0x3432,
-  0x6251, 0x5072, 0x422e, 0x6250, 0x3f62, 0x5326, 0x3557, 0x6252,
-  0x356a, 0x436d, 0x387d, 0x382e, 0x4553, 0x374f, 0x6254, 0x6253,
-  0x3648, 0x5779, 0x4d25, 0x6258, 0x6256, 0x4a7c, 0x3f35, 0x5339,
-  0x6255, 0x6257, 0x412e, 0x4048, 0x625b, 0x625a, 0x402a, 0x414e,
-  0x625c, 0x625d, 0x625e, 0x5b48, 0x5153, 0x4d22, 0x3d28, 0x5e43,
-  0x5825, 0x3f2a, 0x5b4d, 0x526c, 0x467a, 0x452a, 0x5e44, 0x3157,
-  0x5f2e, 0x4a3d, 0x5f31, 0x392d, 0x527d, 0x3825, 0x3a6b, 0x335a,
-  0x355c, 0x5545, 0x4356, 0x4f52, 0x3b21, 0x6573, 0x6572, 0x6574,
-  0x4d64, 0x4875, 0x352f, 0x473f, 0x6576, 0x6c30, 0x6566, 0x3969,
-  0x3531, 0x423c, 0x6568, 0x6567, 0x6569, 0x524d, 0x616a, 0x504e,
-  0x4d2e, 0x5165, 0x324a, 0x316b, 0x3172, 0x456d, 0x5543, 0x5330,
-  0x615c, 0x615d, 0x525b, 0x3339, 0x314b, 0x4d79, 0x5577, 0x615e,
-  0x3e36, 0x347d, 0x615f, 0x3a5c, 0x6160, 0x3b32, 0x4249, 0x6161,
-  0x506c, 0x4d3d, 0x6162, 0x3543, 0x4547, 0x6163, 0x6164, 0x5379,
-  0x6165, 0x512d, 0x6166, 0x4e22, 0x6167, 0x3542, 0x6168, 0x3b55,
-  0x5044, 0x6260, 0x3158, 0x5264, 0x6261, 0x3c49, 0x484c, 0x6263,
-  0x6c7e, 0x6c7d, 0x5f2f, 0x6262, 0x563e, 0x4d7c, 0x4326, 0x6343,
-  0x5652, 0x6267, 0x6268, 0x5347, 0x626c, 0x3f6c, 0x626d, 0x6265,
-  0x3340, 0x446e, 0x626e, 0x5043, 0x3a76, 0x6269, 0x375e, 0x3b33,
-  0x4c2c, 0x4b4b, 0x6264, 0x6266, 0x626a, 0x626b, 0x6277, 0x6274,
-  0x5475, 0x6273, 0x452d, 0x557a, 0x4542, 0x3240, 0x626f, 0x6272,
-  0x412f, 0x4b3c, 0x3521, 0x6279, 0x3c31, 0x6271, 0x5054, 0x5439,
-  0x6275, 0x3956, 0x6276, 0x4753, 0x6270, 0x575c, 0x6d21, 0x6278,
-  0x6d25, 0x627e, 0x4a51, 0x4135, 0x3b50, 0x3f56, 0x3a63, 0x4b21,
-  0x6d26, 0x6d23, 0x6d22, 0x3b56, 0x6d27, 0x5074, 0x6d24, 0x3a5e,
-  0x3677, 0x6321, 0x3632, 0x4c71, 0x3927, 0x4f22, 0x4721, 0x3f52,
-  0x3671, 0x627a, 0x627b, 0x627d, 0x627c, 0x4455, 0x6322, 0x5341,
-  0x6327, 0x4744, 0x4f24, 0x6329, 0x3a37, 0x6328, 0x3b5a, 0x6323,
-  0x6324, 0x632a, 0x6326, 0x4e72, 0x5346, 0x3b3c, 0x5443, 0x447a,
-  0x6d28, 0x507c, 0x6325, 0x4375, 0x632d, 0x312f, 0x6332, 0x3c42,
-  0x632c, 0x353f, 0x4769, 0x6330, 0x3e2a, 0x4d6f, 0x3b73, 0x4c68,
-  0x632f, 0x6331, 0x4f27, 0x632e, 0x4e29, 0x3b5d, 0x356b, 0x3e65,
-  0x3252, 0x334d, 0x3139, 0x632b, 0x3251, 0x352c, 0x395f, 0x3668,
-  0x4f6b, 0x6337, 0x3b4c, 0x4847, 0x504a, 0x6338, 0x336e, 0x6d29,
-  0x537a, 0x5364, 0x6d2a, 0x6339, 0x5262, 0x6335, 0x535e, 0x3850,
-  0x6333, 0x6336, 0x375f, 0x6334, 0x4022, 0x633a, 0x5438, 0x3448,
-  0x633b, 0x3b45, 0x4977, 0x4965, 0x443d, 0x6d2b, 0x427d, 0x3b5b,
-  0x3f2e, 0x4e3f, 0x633c, 0x3f36, 0x316f, 0x5477, 0x633e, 0x6d2d,
-  0x633f, 0x3a29, 0x6d2c, 0x633d, 0x6340, 0x3a36, 0x362e, 0x5038,
-  0x3043, 0x6d2e, 0x6d2f, 0x4041, 0x6341, 0x4533, 0x6342, 0x5c32,
-  0x6d30, 0x386a, 0x4e6c, 0x6a27, 0x5067, 0x4a79, 0x4856, 0x4f37,
-  0x3349, 0x4e52, 0x3d64, 0x635e, 0x3b72, 0x6a28, 0x553d, 0x465d,
-  0x6a29, 0x6a2a, 0x6a2c, 0x6a2b, 0x6a2e, 0x6a2d, 0x3d58, 0x6a2f,
-  0x423e, 0x3441, 0x3477, 0x3b27, 0x6c66, 0x6c65, 0x373f, 0x4b79,
-  0x3162, 0x6c67, 0x4948, 0x6c68, 0x6c69, 0x4a56, 0x5e50, 0x3245,
-  0x547a, 0x464b, 0x3047, 0x3472, 0x4853, 0x4d50, 0x3f38, 0x3f5b,
-  0x4724, 0x5634, 0x4029, 0x5e51, 0x4928, 0x516f, 0x4524, 0x3067,
-  0x3336, 0x4845, 0x3062, 0x3776, 0x457a, 0x3673, 0x5552, 0x3350,
-  0x3c3c, 0x332d, 0x3e71, 0x3051, 0x5256, 0x4a63, 0x5725, 0x4d36,
-  0x3636, 0x3f39, 0x555b, 0x3827, 0x4557, 0x5e52, 0x3f59, 0x4255,
-  0x4740, 0x3b24, 0x3128, 0x456a, 0x457b, 0x4c27, 0x3127, 0x3556,
-  0x4428, 0x5e53, 0x513a, 0x3369, 0x4372, 0x3777, 0x5674, 0x3523,
-  0x3270, 0x4434, 0x4469, 0x402d, 0x5e54, 0x3068, 0x4544, 0x4160,
-  0x3955, 0x3e5c, 0x4d58, 0x304e, 0x4d4f, 0x5e56, 0x3e50, 0x573e,
-  0x5e55, 0x5550, 0x305d, 0x4462, 0x4223, 0x3c70, 0x5335, 0x4039,
-  0x4521, 0x3226, 0x5471, 0x4028, 0x4a43, 0x5e57, 0x557c, 0x3930,
-  0x482d, 0x4b29, 0x5e59, 0x3f3d, 0x4634, 0x5727, 0x4a30, 0x4443,
-  0x3356, 0x3952, 0x5638, 0x6a7c, 0x3034, 0x3f66, 0x4c74, 0x4d5a,
-  0x563f, 0x424e, 0x4e4e, 0x4c22, 0x502e, 0x4453, 0x3532, 0x5e58,
-  0x5575, 0x3c37, 0x3b53, 0x3024, 0x4532, 0x346c, 0x5571, 0x6a7d,
-  0x5e5a, 0x4d26, 0x4d6c, 0x4e66, 0x5e5c, 0x4d31, 0x4026, 0x573d,
-  0x5e5b, 0x3046, 0x3a34, 0x4953, 0x4473, 0x3e68, 0x3236, 0x404c,
-  0x4b70, 0x3c71, 0x3b3b, 0x3537, 0x4575, 0x5e66, 0x5e63, 0x3e5d,
-  0x5e5f, 0x3437, 0x3d5d, 0x5e60, 0x446d, 0x4f46, 0x3560, 0x365e,
-  0x4a5a, 0x3574, 0x5e65, 0x5546, 0x5e61, 0x4c4d, 0x467e, 0x4545,
-  0x5234, 0x3e72, 0x4253, 0x4c3d, 0x3338, 0x3d53, 0x3f58, 0x4d46,
-  0x515a, 0x346b, 0x5e64, 0x5e5d, 0x5e67, 0x6a7e, 0x4230, 0x5e62,
-  0x5640, 0x3527, 0x3274, 0x5e68, 0x5e72, 0x5e6d, 0x5e71, 0x4860,
-  0x5761, 0x5e6f, 0x4368, 0x4c61, 0x3265, 0x523e, 0x5e6e, 0x5e6b,
-  0x4e55, 0x3427, 0x3f2b, 0x3e3e, 0x3d52, 0x5e69, 0x542e, 0x5e5e,
-  0x5e6a, 0x403f, 0x5e6c, 0x3273, 0x3869, 0x4227, 0x3d41, 0x5e75,
-  0x5e78, 0x322b, 0x3424, 0x346a, 0x4926, 0x5e76, 0x4b51, 0x3863,
-  0x5e77, 0x5e7a, 0x5e79, 0x4c42, 0x3061, 0x346e, 0x653a, 0x502f,
-  0x326b, 0x6b21, 0x5e74, 0x4963, 0x5e73, 0x305a, 0x5221, 0x3177,
-  0x4c2f, 0x5e70, 0x4b24, 0x552a, 0x5e7b, 0x345d, 0x4426, 0x5e7d,
-  0x437e, 0x4421, 0x5f21, 0x414c, 0x5e7c, 0x3e6f, 0x4632, 0x3345,
-  0x4876, 0x4b3a, 0x5e7e, 0x5f24, 0x5732, 0x3337, 0x4143, 0x474b,
-  0x3225, 0x3469, 0x572b, 0x446c, 0x5f22, 0x5f23, 0x5f25, 0x3a33,
-  0x5f26, 0x405e, 0x4943, 0x3259, 0x4766, 0x5f27, 0x475c, 0x5f28,
-  0x6b22, 0x4b53, 0x5f2a, 0x5f29, 0x3241, 0x454a, 0x5f2b, 0x545c,
-  0x4841, 0x5f2c, 0x3e70, 0x5f2d, 0x5627, 0x6a37, 0x6b36, 0x4a55,
-  0x587c, 0x3844, 0x3925, 0x3745, 0x557e, 0x394a, 0x5027, 0x744d,
-  0x3550, 0x4374, 0x3e48, 0x6b37, 0x303d, 0x3d4c, 0x4132, 0x3156,
-  0x3328, 0x3852, 0x4922, 0x3658, 0x6b38, 0x3e34, 0x4a7d, 0x4743,
-  0x557b, 0x3773, 0x4e44, 0x552b, 0x3173, 0x6c33, 0x305f, 0x6c35,
-  0x3637, 0x414f, 0x757a, 0x5031, 0x5565, 0x4e53, 0x3d6f, 0x3362,
-  0x382b, 0x5536, 0x6d3d, 0x364f, 0x4b39, 0x5042, 0x373d, 0x6c36,
-  0x4a29, 0x4554, 0x6c39, 0x6c38, 0x4243, 0x6c37, 0x507d, 0x6c3a,
-  0x6c3b, 0x5765, 0x6c3c, 0x6c3d, 0x466c, 0x4e5e, 0x3c48, 0x4855,
-  0x3529, 0x3e49, 0x563c, 0x5467, 0x512e, 0x5071, 0x6a38, 0x6a39,
-  0x6a3a, 0x3a35, 0x4a31, 0x3f75, 0x4d7a, 0x6a40, 0x303a, 0x6a3e,
-  0x4025, 0x6a3b, 0x327d, 0x4377, 0x3b68, 0x5257, 0x4e74, 0x6a3f,
-  0x6a3c, 0x6a43, 0x5047, 0x5333, 0x343a, 0x4341, 0x5772, 0x5551,
-  0x4a47, 0x6a45, 0x6a44, 0x6a47, 0x6a46, 0x5667, 0x4f54, 0x6a4b,
-  0x3b4e, 0x3d7a, 0x494e, 0x6a4c, 0x4939, 0x4f7e, 0x6a4a, 0x544e,
-  0x6a4d, 0x6a4f, 0x4d6d, 0x6a49, 0x6a4e, 0x4e6e, 0x3b5e, 0x333f,
-  0x4655, 0x3e30, 0x4e7a, 0x4767, 0x3e27, 0x6a50, 0x5647, 0x4140,
-  0x545d, 0x6a51, 0x4f3e, 0x6a52, 0x4a6e, 0x452f, 0x3035, 0x6a54,
-  0x6a53, 0x745f, 0x443a, 0x3129, 0x655f, 0x6a55, 0x4a6f, 0x6a56,
-  0x6a57, 0x4658, 0x6a58, 0x6a59, 0x543b, 0x477a, 0x5237, 0x387c,
-  0x6a42, 0x325c, 0x427c, 0x5478, 0x4c66, 0x576e, 0x5442, 0x5350,
-  0x6b43, 0x4573, 0x377e, 0x6b54, 0x4b37, 0x6b5e, 0x404a, 0x4d7b,
-  0x332f, 0x465a, 0x6b7c, 0x443e, 0x4e34, 0x4429, 0x313e, 0x547d,
-  0x4a75, 0x566c, 0x4653, 0x3664, 0x3b7a, 0x5060, 0x4931, 0x5453,
-  0x4828, 0x384b, 0x683e, 0x493c, 0x683b, 0x406e, 0x5053, 0x3244,
-  0x3465, 0x683c, 0x5548, 0x3645, 0x683d, 0x4a78, 0x385c, 0x4c75,
-  0x4034, 0x516e, 0x683f, 0x6842, 0x3a3c, 0x312d, 0x3d5c, 0x6a3d,
-  0x6843, 0x6846, 0x684b, 0x684c, 0x4b49, 0x3065, 0x3c2b, 0x3939,
-  0x6841, 0x4d77, 0x684a, 0x4e76, 0x556d, 0x4156, 0x6844, 0x4336,
-  0x397b, 0x5626, 0x6848, 0x4a60, 0x5466, 0x6840, 0x6845, 0x6847,
-  0x4739, 0x3763, 0x6849, 0x3f5d, 0x6852, 0x6857, 0x6855, 0x3c5c,
-  0x3c4f, 0x685b, 0x685e, 0x685a, 0x317a, 0x3058, 0x4433, 0x384c,
-  0x4662, 0x483e, 0x4861, 0x684f, 0x6854, 0x6856, 0x3971, 0x6858,
-  0x5775, 0x447b, 0x685c, 0x3269, 0x6851, 0x3c6d, 0x3f42, 0x684d,
-  0x5679, 0x4178, 0x3271, 0x685f, 0x4a41, 0x6859, 0x5524, 0x316a,
-  0x553b, 0x684e, 0x6850, 0x3630, 0x6853, 0x685d, 0x4038, 0x4a77,
-  0x4b28, 0x465c, 0x4075, 0x6869, 0x5023, 0x6872, 0x566a, 0x6860,
-  0x6861, 0x5179, 0x3a4b, 0x3879, 0x3871, 0x5454, 0x686f, 0x686e,
-  0x686c, 0x3970, 0x4c52, 0x6866, 0x4e26, 0x3f72, 0x3038, 0x6871,
-  0x6870, 0x5740, 0x6864, 0x4d29, 0x4923, 0x3b38, 0x3d5b, 0x686a,
-  0x6862, 0x6863, 0x6865, 0x3535, 0x6867, 0x4745, 0x686b, 0x686d,
-  0x3d30, 0x572e, 0x6878, 0x6875, 0x4d30, 0x6876, 0x413a, 0x6868,
-  0x4337, 0x3070, 0x6874, 0x6877, 0x3923, 0x4952, 0x434e, 0x4e60,
-  0x4066, 0x4b73, 0x4c5d, 0x5035, 0x4a61, 0x6873, 0x3c6c, 0x6879,
-  0x435e, 0x4665, 0x3977, 0x3074, 0x5758, 0x3c2c, 0x456f, 0x4c44,
-  0x6926, 0x492d, 0x6922, 0x4062, 0x3f43, 0x687e, 0x3957, 0x687b,
-  0x6924, 0x524e, 0x6923, 0x5632, 0x5735, 0x6927, 0x3d37, 0x687c,
-  0x687d, 0x6921, 0x4d56, 0x522c, 0x6932, 0x6929, 0x342a, 0x343b,
-  0x692b, 0x5028, 0x6925, 0x337e, 0x692c, 0x4063, 0x692a, 0x6939,
-  0x6938, 0x692e, 0x687a, 0x6928, 0x3f2c, 0x6931, 0x693a, 0x4225,
-  0x692f, 0x3845, 0x692d, 0x535c, 0x6934, 0x6935, 0x6937, 0x6947,
-  0x4046, 0x6945, 0x6930, 0x693b, 0x3071, 0x693c, 0x5525, 0x693e,
-  0x693f, 0x6941, 0x4171, 0x4836, 0x693d, 0x6942, 0x6943, 0x6933,
-  0x6936, 0x3b31, 0x6940, 0x3c77, 0x6944, 0x6946, 0x694a, 0x694e,
-  0x325b, 0x6948, 0x372e, 0x694b, 0x694c, 0x5541, 0x4423, 0x6958,
-  0x3a61, 0x6949, 0x5323, 0x6954, 0x6957, 0x6950, 0x694f, 0x4741,
-  0x6952, 0x6959, 0x3348, 0x6953, 0x4f70, 0x694d, 0x3377, 0x6956,
-  0x695a, 0x4c34, 0x4f2d, 0x6955, 0x695c, 0x695b, 0x695e, 0x6951,
-  0x695d, 0x695f, 0x434a, 0x4737, 0x344e, 0x3b36, 0x5040, 0x6c23,
-  0x4537, 0x537b, 0x6c24, 0x6c25, 0x465b, 0x3f6e, 0x6c26, 0x6c27,
-  0x502a, 0x4738, 0x3868, 0x6c28, 0x5639, 0x557d, 0x344b, 0x323d,
-  0x4e64, 0x4667, 0x4d61, 0x3475, 0x4b40, 0x3c5f, 0x6962, 0x6963,
-  0x516a, 0x6965, 0x3479, 0x6964, 0x5133, 0x4a62, 0x3250, 0x6968,
-  0x6966, 0x6967, 0x5633, 0x6969, 0x696a, 0x696b, 0x696c, 0x6c2f,
-  0x4539, 0x364e, 0x5273, 0x356e, 0x3b59, 0x6c31, 0x5263, 0x4e63,
-  0x4438, 0x433f, 0x363e, 0x5839, 0x3148, 0x314f, 0x3151, 0x457e,
-  0x3150, 0x432b, 0x5531, 0x6b24, 0x3a41, 0x4c3a, 0x6b25, 0x6b27,
-  0x6b28, 0x6b26, 0x6b29, 0x6b2b, 0x6b2a, 0x6b2c, 0x4a4f, 0x5835,
-  0x4371, 0x4325, 0x4678, 0x6b2d, 0x444a, 0x6b2e, 0x6b2f, 0x6b30,
-  0x3755, 0x377a, 0x6b31, 0x4762, 0x6b33, 0x3a24, 0x5175, 0x3031,
-  0x6b32, 0x6b34, 0x352a, 0x4248, 0x4768, 0x6b35, 0x4b2e, 0x635f,
-  0x5340, 0x595b, 0x4d21, 0x562d, 0x4773, 0x5960, 0x3b63, 0x3a3a,
-  0x6362, 0x4f2b, 0x6360, 0x4947, 0x3a39, 0x5134, 0x6361, 0x486a,
-  0x392f, 0x3d2d, 0x3358, 0x4e5b, 0x4c40, 0x6368, 0x6369, 0x4d74,
-  0x4c2d, 0x3c33, 0x636a, 0x636b, 0x505a, 0x467b, 0x375a, 0x475f,
-  0x524a, 0x4e56, 0x6364, 0x636c, 0x4972, 0x3341, 0x6367, 0x4663,
-  0x6365, 0x6d33, 0x6366, 0x4933, 0x4566, 0x3935, 0x433b, 0x6363,
-  0x453d, 0x4124, 0x4259, 0x3257, 0x636d, 0x3b26, 0x442d, 0x6370,
-  0x3e5a, 0x637b, 0x6375, 0x3a53, 0x3750, 0x534d, 0x564e, 0x5553,
-  0x3941, 0x5534, 0x5158, 0x5039, 0x4776, 0x482a, 0x3234, 0x435a,
-  0x636e, 0x637c, 0x636f, 0x3728, 0x6377, 0x6374, 0x373a, 0x4522,
-  0x6376, 0x455d, 0x3228, 0x467c, 0x4460, 0x5722, 0x4061, 0x6379,
-  0x637a, 0x637d, 0x4c29, 0x6373, 0x533e, 0x3143, 0x6d34, 0x6371,
-  0x6372, 0x6378, 0x503a, 0x4643, 0x5473, 0x637e, 0x3d60, 0x6427,
-  0x6426, 0x5173, 0x6423, 0x6429, 0x4877, 0x4f34, 0x6428, 0x642e,
-  0x4265, 0x3634, 0x3d72, 0x6422, 0x3a69, 0x642a, 0x642c, 0x367d,
-  0x565e, 0x6432, 0x642d, 0x6421, 0x3b6e, 0x4d5d, 0x4722, 0x4549,
-  0x4177, 0x6424, 0x4733, 0x3d2c, 0x3d3d, 0x6425, 0x5747, 0x3262,
-  0x642b, 0x3c43, 0x642f, 0x3b6b, 0x6430, 0x4528, 0x6431, 0x5563,
-  0x3f23, 0x643a, 0x6437, 0x643b, 0x643d, 0x4656, 0x3a46, 0x404b,
-  0x3821, 0x6434, 0x5421, 0x3a23, 0x3d7e, 0x643c, 0x4d3f, 0x4479,
-  0x4f7b, 0x4966, 0x533f, 0x4f51, 0x6433, 0x6438, 0x6439, 0x4c69,
-  0x4c4e, 0x4054, 0x6435, 0x4130, 0x6436, 0x4e50, 0x3b41, 0x3553,
-  0x4873, 0x3d27, 0x5547, 0x492c, 0x3822, 0x644a, 0x644c, 0x5144,
-  0x523a, 0x3a2d, 0x3a54, 0x6443, 0x356d, 0x574d, 0x6440, 0x4f7d,
-  0x643f, 0x415c, 0x4c4a, 0x4a67, 0x4457, 0x4c54, 0x6448, 0x6447,
-  0x6441, 0x6444, 0x352d, 0x5359, 0x6446, 0x5279, 0x3463, 0x3b34,
-  0x496e, 0x343e, 0x3b6c, 0x514d, 0x4c6d, 0x6d35, 0x4765, 0x5428,
-  0x644b, 0x5755, 0x6442, 0x3d25, 0x6445, 0x5366, 0x6449, 0x4978,
-  0x643e, 0x5365, 0x477e, 0x3649, 0x547c, 0x3233, 0x6457, 0x4e42,
-  0x644d, 0x4e3c, 0x385b, 0x6456, 0x3f4a, 0x534e, 0x436c, 0x4548,
-  0x6458, 0x4d44, 0x644f, 0x6454, 0x6455, 0x3a7e, 0x4f66, 0x553f,
-  0x6452, 0x6450, 0x644e, 0x4d65, 0x4a2a, 0x4023, 0x3d26, 0x6453,
-  0x3848, 0x6467, 0x5434, 0x645b, 0x416f, 0x6469, 0x5267, 0x645f,
-  0x6460, 0x4f2a, 0x4b5d, 0x645a, 0x6451, 0x6465, 0x485c, 0x6463,
-  0x4467, 0x6462, 0x6461, 0x337c, 0x6468, 0x3561, 0x574c, 0x6466,
-  0x3b2c, 0x5752, 0x4c4f, 0x6b78, 0x6464, 0x3976, 0x564d, 0x6459,
-  0x645c, 0x427a, 0x645e, 0x424b, 0x4044, 0x4250, 0x3175, 0x4c32,
-  0x354e, 0x646f, 0x462f, 0x4661, 0x6475, 0x4229, 0x406c, 0x515d,
-  0x646e, 0x442e, 0x646d, 0x6476, 0x6474, 0x427e, 0x645d, 0x6470,
-  0x4a7e, 0x5544, 0x6471, 0x517a, 0x646b, 0x646c, 0x6472, 0x4e2b,
-  0x454b, 0x4731, 0x423a, 0x646a, 0x414a, 0x4c36, 0x3331, 0x647b,
-  0x6473, 0x647a, 0x647d, 0x647c, 0x334e, 0x333a, 0x6477, 0x6479,
-  0x6478, 0x456c, 0x403d, 0x5468, 0x6522, 0x3044, 0x6524, 0x6523,
-  0x3c24, 0x6525, 0x6521, 0x647e, 0x3174, 0x6528, 0x6529, 0x6526,
-  0x6527, 0x652a, 0x4659, 0x652b, 0x652d, 0x652c, 0x652f, 0x652e,
-  0x3960, 0x6530, 0x6531, 0x3b70, 0x6c61, 0x4370, 0x3546, 0x3b52,
-  0x4169, 0x546e, 0x3e44, 0x5746, 0x5456, 0x3253, 0x6c3e, 0x6a41,
-  0x422f, 0x3436, 0x5157, 0x3334, 0x4832, 0x3f3b, 0x6c40, 0x564b,
-  0x6c3f, 0x6c41, 0x6c45, 0x3e66, 0x4c3f, 0x455a, 0x3e3c, 0x6c46,
-  0x317e, 0x6c44, 0x5528, 0x3563, 0x6c42, 0x4136, 0x3363, 0x6c43,
-  0x4b38, 0x4043, 0x4c7e, 0x4152, 0x6c48, 0x3a66, 0x4053, 0x5672,
-  0x514c, 0x3f3e, 0x3733, 0x4955, 0x6c47, 0x3b62, 0x4c4c, 0x3d7d,
-  0x4848, 0x4f29, 0x4d69, 0x456b, 0x3769, 0x5149, 0x3a38, 0x6c49,
-  0x6c4a, 0x3b40, 0x6c4b, 0x6c62, 0x313a, 0x3759, 0x3d39, 0x6c4c,
-  0x5166, 0x6c4d, 0x483b, 0x6c51, 0x6c53, 0x3b4d, 0x3c65, 0x6c4f,
-  0x4937, 0x433a, 0x6c63, 0x5555, 0x6c50, 0x5673, 0x6c52, 0x6c4e,
-  0x6c54, 0x6c55, 0x493f, 0x4f28, 0x505c, 0x512c, 0x485b, 0x6c56,
-  0x4e75, 0x4a6c, 0x6c5a, 0x6c59, 0x303e, 0x6c57, 0x6c58, 0x6c64,
-  0x483c, 0x4147, 0x6c5c, 0x5160, 0x6c5b, 0x546f, 0x6c5d, 0x5b46,
-  0x6c5e, 0x312c, 0x6c5f, 0x6c60, 0x5726, 0x4540, 0x6b3c, 0x302e,
-  0x3e74, 0x3838, 0x522f, 0x3056, 0x3579, 0x5833, 0x4b2c, 0x635d,
-  0x462c, 0x3066, 0x4546, 0x6b39, 0x6b3a, 0x6b3b, 0x5140, 0x4523,
-  0x6a72, 0x4432, 0x4435, 0x404e, 0x6a73, 0x4441, 0x4e6f, 0x6a70,
-  0x6a74, 0x497c, 0x4723, 0x4c58, 0x4e7e, 0x6a75, 0x6a76, 0x4f2c,
-  0x4067, 0x6a77, 0x363f, 0x6a78, 0x6a79, 0x6a7a, 0x6a7b, 0x6a71,
-  0x482e, 0x616b, 0x3738, 0x616c, 0x616d, 0x5734, 0x616e, 0x616f,
-  0x534c, 0x6171, 0x3f71, 0x6170, 0x3552, 0x3137, 0x6173, 0x6172,
-  0x3a7c, 0x6174, 0x3937, 0x3e51, 0x447c, 0x3a5d, 0x3d46, 0x6175,
-  0x6177, 0x3640, 0x4f41, 0x4a28, 0x6176, 0x5578, 0x537c, 0x6178,
-  0x617c, 0x6179, 0x617a, 0x406a, 0x617e, 0x6221, 0x4047, 0x617b,
-  0x617d, 0x6225, 0x4154, 0x6223, 0x6228, 0x327e, 0x6222, 0x434d,
-  0x3242, 0x6227, 0x6226, 0x6224, 0x6229, 0x622b, 0x5049, 0x566d,
-  0x4328, 0x622c, 0x4f57, 0x622e, 0x3a6f, 0x6960, 0x622d, 0x622a,
-  0x3b2b, 0x5433, 0x6230, 0x622f, 0x6961, 0x6231, 0x6232, 0x6233,
-  0x4c21, 0x6234, 0x6235, 0x507e, 0x424a, 0x5371, 0x4d75, 0x6760,
-  0x6761, 0x3e41, 0x426a, 0x6764, 0x6763, 0x4d66, 0x4335, 0x6762,
-  0x3b37, 0x4f56, 0x4161, 0x6769, 0x6768, 0x6774, 0x3223, 0x676a,
-  0x6766, 0x676c, 0x676b, 0x493a, 0x5564, 0x6765, 0x3729, 0x6767,
-  0x676e, 0x6773, 0x5669, 0x676d, 0x6772, 0x6771, 0x3060, 0x6775,
-  0x4772, 0x4045, 0x406d, 0x4170, 0x6770, 0x6776, 0x4b76, 0x6822,
-  0x6821, 0x5741, 0x677a, 0x6779, 0x677b, 0x6777, 0x677e, 0x677d,
-  0x677c, 0x4155, 0x4759, 0x457d, 0x4543, 0x476d, 0x6823, 0x6826,
-  0x6825, 0x6827, 0x3a77, 0x6778, 0x6824, 0x4870, 0x492a, 0x6829,
-  0x3965, 0x517e, 0x6828, 0x682a, 0x682d, 0x682e, 0x4127, 0x682f,
-  0x6830, 0x682c, 0x6834, 0x682b, 0x6831, 0x6835, 0x6832, 0x6833,
-  0x6837, 0x6836, 0x394f, 0x702c, 0x702d, 0x4630, 0x306a, 0x483f,
-  0x4d5f, 0x4e4d, 0x6a31, 0x6a32, 0x463f, 0x3449, 0x6a33, 0x5567,
-  0x5d79, 0x6a34, 0x6a35, 0x6a36, 0x384a, 0x5f30, 0x4975, 0x4c70,
-  0x497a, 0x497b, 0x5343, 0x4b26, 0x3826, 0x702e, 0x3142, 0x6538,
-  0x4c6f, 0x5349, 0x3c57, 0x496a, 0x3567, 0x4450, 0x3569, 0x6e2e,
-  0x3b2d, 0x675e, 0x6e2f, 0x3329, 0x6e32, 0x6e31, 0x3d67, 0x6e30,
-  0x4e37, 0x454f, 0x4174, 0x5b4e, 0x6e33, 0x5073, 0x4254, 0x4668,
-  0x372c, 0x6e34, 0x336b, 0x3b7b, 0x6e35, 0x675c, 0x6e36, 0x3d2e,
-  0x7162, 0x4a68, 0x5249, 0x705a, 0x705b, 0x705c, 0x4146, 0x386d,
-  0x3e4e, 0x705e, 0x4531, 0x705d, 0x5171, 0x7060, 0x304c, 0x3d6a,
-  0x525f, 0x705f, 0x342f, 0x3768, 0x7066, 0x7065, 0x4623, 0x7061,
-  0x7062, 0x3443, 0x7063, 0x556e, 0x4c5b, 0x3e52, 0x3c32, 0x7068,
-  0x7067, 0x7064, 0x3221, 0x5622, 0x5338, 0x3e37, 0x482c, 0x706a,
-  0x5177, 0x564c, 0x3a5b, 0x7069, 0x363b, 0x4d34, 0x4626, 0x4121,
-  0x706b, 0x706e, 0x706d, 0x7070, 0x706c, 0x3b3e, 0x706f, 0x4c35,
-  0x7072, 0x3355, 0x3154, 0x7073, 0x7074, 0x7076, 0x3461, 0x7071,
-  0x7077, 0x707a, 0x7078, 0x7075, 0x707d, 0x7079, 0x707c, 0x707e,
-  0x7121, 0x4e41, 0x7124, 0x7123, 0x4176, 0x707b, 0x4a5d, 0x3471,
-  0x3171, 0x4c31, 0x7126, 0x7127, 0x712c, 0x554e, 0x7129, 0x4833,
-  0x7122, 0x712b, 0x7128, 0x7125, 0x712a, 0x3029, 0x712d, 0x712f,
-  0x7131, 0x7130, 0x712e, 0x5122, 0x7132, 0x7133, 0x396f, 0x3547,
-  0x3057, 0x3059, 0x546d, 0x3544, 0x3d54, 0x3b4a, 0x7027, 0x385e,
-  0x7028, 0x3028, 0x7029, 0x4d6e, 0x702a, 0x702b, 0x4624, 0x5665,
-  0x7164, 0x7165, 0x4373, 0x535b, 0x5651, 0x4568, 0x532f, 0x5266,
-  0x6e41, 0x303b, 0x5535, 0x514e, 0x3c60, 0x3a50, 0x3f78, 0x3847,
-  0x3541, 0x454c, 0x4a22, 0x434b, 0x6e42, 0x443f, 0x3622, 0x6d6c,
-  0x4324, 0x5631, 0x4f60, 0x6d6f, 0x454e, 0x365c, 0x4a21, 0x6d6d,
-  0x6d70, 0x6d71, 0x433c, 0x3f34, 0x6d6e, 0x6d74, 0x6d72, 0x5566,
-  0x435f, 0x6d73, 0x6d76, 0x5523, 0x5123, 0x6d75, 0x4350, 0x6d77,
-  0x3f74, 0x3e6c, 0x6d78, 0x4c77, 0x515b, 0x5745, 0x5576, 0x6d7c,
-  0x6d7b, 0x6d79, 0x6d7a, 0x6d7d, 0x3e26, 0x4b2f, 0x6e21, 0x363d,
-  0x6e22, 0x4440, 0x6d7e, 0x3d5e, 0x3247, 0x3643, 0x6e25, 0x583a,
-  0x6e23, 0x6e26, 0x4369, 0x3372, 0x6e27, 0x6e24, 0x4f39, 0x6e28,
-  0x4277, 0x6e29, 0x6e2a, 0x5e2b, 0x4633, 0x4746, 0x5675, 0x3549,
-  0x4b32, 0x6e2b, 0x4d2b, 0x6e2c, 0x5530, 0x6e2d, 0x7644, 0x5b47,
-  0x3423, 0x432c, 0x7166, 0x4a38, 0x5253, 0x562a, 0x6f72, 0x3e58,
-  0x3d43, 0x6f73, 0x364c, 0x302b, 0x4a2f, 0x6d36, 0x6d37, 0x4e79,
-  0x372f, 0x3f73, 0x6d38, 0x426b, 0x4930, 0x6d39, 0x4676, 0x3f33,
-  0x6d3c, 0x4578, 0x5150, 0x5729, 0x6d3a, 0x6d3b, 0x5162, 0x6d3f,
-  0x6d40, 0x6d44, 0x6d48, 0x6d46, 0x6d4e, 0x5568, 0x6d49, 0x6d47,
-  0x6d3e, 0x4569, 0x4646, 0x4969, 0x5452, 0x6d41, 0x6d42, 0x6d43,
-  0x6d45, 0x4079, 0x3421, 0x3968, 0x6d50, 0x6d51, 0x6d4a, 0x6d4f,
-  0x4e78, 0x4b36, 0x6d4c, 0x6d4d, 0x4f75, 0x6d52, 0x4172, 0x5332,
-  0x6d4b, 0x4837, 0x3c6f, 0x4570, 0x6d56, 0x356f, 0x4235, 0x302d,
-  0x4b69, 0x312e, 0x6d54, 0x4d6b, 0x3562, 0x6d55, 0x6d53, 0x6d57,
-  0x357a, 0x6d58, 0x6d59, 0x6d5c, 0x314c, 0x4576, 0x3c6e, 0x6d5a,
-  0x4c3c, 0x326a, 0x6d5b, 0x446b, 0x3445, 0x3075, 0x6d5f, 0x405a,
-  0x3468, 0x454d, 0x6d5d, 0x3f44, 0x6d5e, 0x4425, 0x6d60, 0x6d61,
-  0x6d63, 0x4157, 0x3b47, 0x3d38, 0x6d62, 0x6d64, 0x6d66, 0x6d65,
-  0x6d67, 0x4a3e, 0x6c6a, 0x4071, 0x4967, 0x6c6b, 0x466e, 0x6c6c,
-  0x466d, 0x6c6d, 0x6c70, 0x5766, 0x6c73, 0x6c71, 0x6c6e, 0x6c6f,
-  0x5723, 0x4971, 0x4b6e, 0x6c74, 0x6c72, 0x4f69, 0x6c76, 0x4631,
-  0x3c40, 0x6c75, 0x353b, 0x3b76, 0x6c77, 0x5977, 0x3d7b, 0x423b,
-  0x6c78, 0x6c79, 0x3823, 0x6c7a, 0x6c7b, 0x6c7c, 0x536d, 0x582e,
-  0x406b, 0x475d, 0x3a4c, 0x5063, 0x4b3d, 0x4d3a, 0x3851, 0x317c,
-  0x476f, 0x5656, 0x3f46, 0x436b, 0x6f75, 0x4358, 0x5762, 0x6f77,
-  0x3353, 0x4758, 0x516d, 0x5648, 0x6f78, 0x6f76, 0x3b7d, 0x3346,
-  0x3d55, 0x5246, 0x3b60, 0x4f21, 0x6f7c, 0x6f7b, 0x6f79, 0x334c,
-  0x4954, 0x4b30, 0x6f7e, 0x305e, 0x5649, 0x6f7d, 0x336d, 0x7655,
-  0x4e48, 0x7022, 0x7021, 0x353e, 0x3c5a, 0x3b7c, 0x3865, 0x4442,
-  0x7023, 0x4b6b, 0x7026, 0x5128, 0x3e3f, 0x476e, 0x7136, 0x7137,
-  0x3f55, 0x3429, 0x7138, 0x4d3b, 0x4754, 0x552d, 0x7139, 0x713a,
-  0x474f, 0x5224, 0x564f, 0x713b, 0x3d51, 0x3430, 0x3e3d, 0x345c,
-  0x4e51, 0x3f5f, 0x713d, 0x3f7a, 0x713c, 0x713f, 0x713e, 0x7140,
-  0x7141, 0x417e, 0x4122, 0x4a7a, 0x553e, 0x3e3a, 0x3e39, 0x5542,
-  0x3f22, 0x4d2f, 0x7135, 0x3d5f, 0x364b, 0x5671, 0x7343, 0x7344,
-  0x384d, 0x7346, 0x7347, 0x304a, 0x7345, 0x7349, 0x4b71, 0x734b,
-  0x5026, 0x314a, 0x7348, 0x734f, 0x3551, 0x7357, 0x7352, 0x7354,
-  0x7353, 0x377b, 0x313f, 0x734e, 0x734a, 0x355a, 0x7350, 0x7351,
-  0x7355, 0x734d, 0x3c63, 0x417d, 0x7356, 0x735a, 0x734c, 0x3548,
-  0x3d6e, 0x735c, 0x3724, 0x3f70, 0x567e, 0x4d32, 0x3470, 0x325f,
-  0x7358, 0x7359, 0x4938, 0x735d, 0x735e, 0x7361, 0x735f, 0x7363,
-  0x7362, 0x735b, 0x3f6a, 0x336f, 0x7360, 0x4729, 0x3c72, 0x736b,
-  0x393f, 0x7364, 0x322d, 0x3b7e, 0x4b63, 0x736d, 0x7369, 0x395c,
-  0x736e, 0x7365, 0x7366, 0x736a, 0x4261, 0x736c, 0x736f, 0x7368,
-  0x3c7d, 0x4f64, 0x7370, 0x7367, 0x7372, 0x572d, 0x462a, 0x7373,
-  0x7371, 0x4228, 0x385d, 0x7375, 0x7374, 0x345b, 0x7376, 0x7377,
-  0x7378, 0x403a, 0x4069, 0x4571, 0x737b, 0x737a, 0x3458, 0x737e,
-  0x7379, 0x737c, 0x737d, 0x7421, 0x7423, 0x3b49, 0x7422, 0x7424,
-  0x323e, 0x7426, 0x7425, 0x3c2e, 0x4357, 0x5961, 0x4060, 0x744c,
-  0x5751, 0x375b, 0x744e, 0x4123, 0x4649, 0x3456, 0x5533, 0x7450,
-  0x744f, 0x7451, 0x4b5a, 0x7452, 0x5441, 0x5660, 0x3760, 0x4138,
-  0x413b, 0x7453, 0x3e2c, 0x3462, 0x7454, 0x7455, 0x3e2b, 0x7456,
-  0x745b, 0x7457, 0x745a, 0x3a7d, 0x7458, 0x7459, 0x3862, 0x4c47,
-  0x745c, 0x325a, 0x4353, 0x5463, 0x3f37, 0x745d, 0x4534, 0x7469,
-  0x4f35, 0x4e49, 0x4b58, 0x4b77, 0x3d74, 0x574f, 0x405b, 0x5075,
-  0x746a, 0x746b, 0x746c, 0x7763, 0x3731, 0x746d, 0x576b, 0x746e,
-  0x6679, 0x3e40, 0x667a, 0x3a6c, 0x667b, 0x4f4b, 0x667c, 0x543c,
-  0x3c36, 0x667d, 0x667e, 0x3c4d, 0x4852, 0x4e33, 0x6721, 0x343f,
-  0x6722, 0x4934, 0x3859, 0x4449, 0x575d, 0x425a, 0x3757, 0x563d,
-  0x4e46, 0x3744, 0x4526, 0x6723, 0x4f5f, 0x6724, 0x6725, 0x6726,
-  0x4137, 0x5769, 0x4970, 0x4f38, 0x562f, 0x5655, 0x6727, 0x306d,
-  0x6728, 0x6729, 0x495c, 0x526f, 0x3e2d, 0x672a, 0x3073, 0x485e,
-  0x3d61, 0x672b, 0x4846, 0x672c, 0x3b66, 0x3878, 0x5124, 0x672d,
-  0x4267, 0x3e78, 0x3d4a, 0x4d33, 0x672e, 0x672f, 0x3e6e, 0x5065,
-  0x4b67, 0x4c50, 0x3c4c, 0x6730, 0x3c28, 0x5077, 0x6731, 0x5078,
-  0x6732, 0x6733, 0x3442, 0x6734, 0x6735, 0x497e, 0x4e2c, 0x4360,
-  0x6737, 0x3141, 0x3371, 0x6738, 0x6739, 0x575b, 0x5540, 0x673a,
-  0x424c, 0x573a, 0x673b, 0x673c, 0x673d, 0x3c6a, 0x4365, 0x4042,
-  0x673e, 0x673f, 0x3c29, 0x6740, 0x6741, 0x6736, 0x3650, 0x6742,
-  0x6743, 0x6744, 0x3b3a, 0x355e, 0x4246, 0x3160, 0x6745, 0x5435,
-  0x6746, 0x383f, 0x6748, 0x6747, 0x376c, 0x6749, 0x3278, 0x674a,
-  0x674b, 0x674c, 0x674d, 0x674e, 0x674f, 0x6750, 0x5327, 0x4b75,
-  0x6751, 0x6752, 0x6753, 0x6754, 0x4949, 0x6755, 0x6756, 0x6757,
-  0x6758, 0x6759, 0x3d49, 0x675a, 0x733e, 0x3857, 0x4831, 0x733f,
-  0x7340, 0x7341, 0x395e, 0x4d78, 0x5868, 0x3a31, 0x425e, 0x6e37,
-  0x3723, 0x6e39, 0x6e38, 0x3055, 0x6e3b, 0x5556, 0x576f, 0x5643,
-  0x6e3d, 0x4a70, 0x6e3c, 0x6e3e, 0x6e40, 0x6e3f, 0x5172, 0x473c,
-  0x4340, 0x3861, 0x4167, 0x7446, 0x505f, 0x7447, 0x4f5b, 0x483a,
-  0x7448, 0x7449, 0x744a, 0x744b, 0x597a, 0x387e, 0x6571, 0x5370,
-  0x7460, 0x4e4c, 0x3361, 0x7134, 0x526e, 0x7461, 0x4f68, 0x7462,
-  0x474c, 0x3554, 0x3464, 0x7464, 0x7463, 0x7465, 0x7466, 0x7467,
-  0x3a32, 0x303f, 0x7468, 0x372d, 0x526d, 0x522b, 0x404f, 0x3f3c,
-  0x6b23, 0x555f, 0x6a48, 0x7173, 0x3678, 0x4b23, 0x444d, 0x7167,
-  0x7168, 0x387b, 0x7169, 0x3a44, 0x5445, 0x3052, 0x716a, 0x716b,
-  0x716c, 0x716d, 0x716e, 0x716f, 0x7171, 0x7170, 0x4555, 0x7172,
-  0x367a, 0x7174, 0x522e, 0x5e47, 0x4b4a, 0x335c, 0x3522, 0x3922,
-  0x4474, 0x7175, 0x7176, 0x4144, 0x417b, 0x5630, 0x7177, 0x7178,
-  0x412a, 0x4638, 0x3e5b, 0x7179, 0x344f, 0x717a, 0x6d32, 0x6d31,
-  0x4b60, 0x525e, 0x4b41, 0x5558, 0x4862, 0x405f, 0x3c21, 0x6b41,
-  0x5024, 0x5662, 0x3647, 0x3858, 0x6b40, 0x384e, 0x6b3f, 0x3326,
-  0x3949, 0x562b, 0x3774, 0x374a, 0x3c67, 0x373e, 0x6b46, 0x6b47,
-  0x3039, 0x3f4f, 0x6b45, 0x537d, 0x6b48, 0x6b49, 0x374e, 0x6b42,
-  0x6b44, 0x4976, 0x5657, 0x554d, 0x5032, 0x6b4f, 0x4e38, 0x6b50,
-  0x3528, 0x3133, 0x6b52, 0x4c25, 0x4556, 0x6b53, 0x6b51, 0x455f,
-  0x6b4e, 0x4a24, 0x6b55, 0x307b, 0x3a7a, 0x5837, 0x7163, 0x6b4a,
-  0x6b4b, 0x6b4c, 0x6b4d, 0x6b56, 0x6640, 0x6b59, 0x3f68, 0x5248,
-  0x6b57, 0x6b5c, 0x386c, 0x6b58, 0x3d3a, 0x5058, 0x3037, 0x6b5d,
-  0x445c, 0x562c, 0x3460, 0x4276, 0x3c39, 0x6b5a, 0x6b5b, 0x5460,
-  0x466a, 0x4454, 0x6b5f, 0x4527, 0x5975, 0x3231, 0x6b64, 0x3d45,
-  0x6b62, 0x6b63, 0x382c, 0x4d51, 0x6b65, 0x6b61, 0x4133, 0x4622,
-  0x4c73, 0x6b66, 0x4030, 0x5238, 0x6b67, 0x382f, 0x382d, 0x6b68,
-  0x473b, 0x4d73, 0x6b6a, 0x6b6b, 0x6b6d, 0x5048, 0x6b72, 0x6b6e,
-  0x6b71, 0x4879, 0x517c, 0x6b6c, 0x6b69, 0x3839, 0x4f59, 0x4465,
-  0x6b6f, 0x6b70, 0x4c5a, 0x4d48, 0x3072, 0x6b76, 0x6b75, 0x3232,
-  0x3860, 0x6b77, 0x316c, 0x4c45, 0x4424, 0x4f25, 0x6b79, 0x6c22,
-  0x4572, 0x6b7a, 0x4945, 0x625f, 0x6b7e, 0x4d4e, 0x6c21, 0x315b,
-  0x5337, 0x525c, 0x6b7d, 0x6b7b, 0x333c, 0x6a30, 0x5754, 0x742b,
-  0x3374, 0x5641, 0x5642, 0x5569, 0x3e4a, 0x7427, 0x5228, 0x7428,
-  0x7429, 0x742a, 0x3e4b, 0x535f, 0x4960, 0x4961, 0x7342, 0x4a66,
-  0x4c72, 0x6236, 0x4b34, 0x4e68, 0x565b, 0x742d, 0x742e, 0x742f,
-  0x7432, 0x3a3d, 0x7433, 0x3063, 0x7430, 0x7431, 0x3d22, 0x3255,
-  0x7436, 0x7437, 0x3666, 0x3230, 0x4f4f, 0x7434, 0x342c, 0x7435,
-  0x7438, 0x7439, 0x4d27, 0x743a, 0x743b, 0x743c, 0x4b52, 0x743d,
-  0x743e, 0x743f, 0x745e, 0x413c, 0x3c68, 0x492b, 0x515e, 0x6575,
-  0x5c33, 0x5255, 0x5c34, 0x302c, 0x5c35, 0x3d5a, 0x5c39, 0x5842,
-  0x5c37, 0x5373, 0x4956, 0x5c3a, 0x5c36, 0x5c3b, 0x4322, 0x5c3c,
-  0x5c45, 0x5c3d, 0x4e5f, 0x5625, 0x5c4f, 0x5c4d, 0x5c52, 0x3d66,
-  0x422b, 0x5c38, 0x5c4b, 0x5c4e, 0x5c3e, 0x3752, 0x3045, 0x5c47,
-  0x503e, 0x5c41, 0x3b28, 0x373c, 0x5c4c, 0x5c46, 0x5c3f, 0x475b,
-  0x513f, 0x5c40, 0x5c4a, 0x5c50, 0x4e2d, 0x5c42, 0x5c43, 0x5c48,
-  0x5c49, 0x3254, 0x5c51, 0x4b55, 0x5437, 0x5c5b, 0x5c5f, 0x4c26,
-  0x5c66, 0x4367, 0x5c5c, 0x3f41, 0x5c59, 0x307a, 0x3936, 0x5c65,
-  0x5c53, 0x5c44, 0x5c56, 0x4874, 0x3f60, 0x493b, 0x313d, 0x5322,
-  0x5c5a, 0x5c55, 0x463b, 0x5c5e, 0x5742, 0x432f, 0x3736, 0x4751,
-  0x4329, 0x5c62, 0x5c58, 0x5c6b, 0x5c54, 0x5c5d, 0x3e25, 0x5c57,
-  0x5c60, 0x5c63, 0x5c64, 0x5c78, 0x5c61, 0x5d22, 0x5c67, 0x3c6b,
-  0x3444, 0x4323, 0x3267, 0x5c7a, 0x5c72, 0x5c6f, 0x5c7c, 0x5c6e,
-  0x5270, 0x3268, 0x4857, 0x4863, 0x5c7b, 0x5c6d, 0x5c77, 0x5c75,
-  0x3e23, 0x5c74, 0x325d, 0x5c73, 0x3c76, 0x5c68, 0x3b44, 0x4073,
-  0x3c54, 0x5c69, 0x5c6a, 0x5c71, 0x5c76, 0x5c79, 0x3534, 0x4859,
-  0x3b67, 0x5c7e, 0x5c7d, 0x532b, 0x5d21, 0x5d23, 0x5d25, 0x5271,
-  0x5d24, 0x5d26, 0x5d27, 0x5229, 0x3a49, 0x5d29, 0x5d36, 0x5d31,
-  0x5d34, 0x5d30, 0x464e, 0x4072, 0x492f, 0x5c6c, 0x5d2e, 0x5d37,
-  0x5c70, 0x5d2f, 0x5d38, 0x5d2c, 0x5d39, 0x5d33, 0x5d2d, 0x442a,
-  0x5d28, 0x4033, 0x412b, 0x5d2a, 0x5d2b, 0x5d32, 0x3b71, 0x5d35,
-  0x5328, 0x5d3a, 0x5d3b, 0x4327, 0x5d52, 0x5d3c, 0x5d51, 0x393d,
-  0x3e55, 0x3e7a, 0x3a4a, 0x5d4a, 0x5d45, 0x5d3f, 0x324b, 0x5d43,
-  0x5d4b, 0x3224, 0x5d55, 0x5d3e, 0x4650, 0x5d50, 0x5d54, 0x4162,
-  0x3746, 0x5d4e, 0x5d4f, 0x5d44, 0x5d3d, 0x5d4d, 0x4c51, 0x5d49,
-  0x5d42, 0x4348, 0x463c, 0x4e2e, 0x5d4c, 0x5d48, 0x5d41, 0x5d46,
-  0x425c, 0x5329, 0x532a, 0x5d53, 0x4f74, 0x4878, 0x5d66, 0x5d47,
-  0x5d60, 0x4264, 0x5d61, 0x5d57, 0x5678, 0x5d59, 0x5d58, 0x3870,
-  0x5d56, 0x464f, 0x362d, 0x5d62, 0x3a79, 0x5461, 0x5d67, 0x3450,
-  0x5d5a, 0x3f7b, 0x5d63, 0x5d5f, 0x5d5d, 0x3559, 0x5d5b, 0x5d5c,
-  0x5d5e, 0x3d2f, 0x5d64, 0x5d65, 0x5d75, 0x4349, 0x4b62, 0x5d72,
-  0x5861, 0x4651, 0x5d74, 0x5574, 0x5d73, 0x5d70, 0x5d6c, 0x5d6f,
-  0x5d68, 0x506e, 0x4858, 0x5d6e, 0x5d69, 0x5d6a, 0x4b72, 0x5d6d,
-  0x314d, 0x4036, 0x3c3b, 0x5d71, 0x5d77, 0x5d76, 0x5d6b, 0x456e,
-  0x5d7b, 0x5e24, 0x5e23, 0x5d78, 0x436f, 0x427b, 0x5561, 0x4e35,
-  0x5d7d, 0x324c, 0x4468, 0x4a5f, 0x473e, 0x5d7a, 0x5d7c, 0x5d7e,
-  0x5e22, 0x302a, 0x314e, 0x5e2c, 0x5e26, 0x3d36, 0x486f, 0x5e21,
-  0x5e25, 0x5e29, 0x5e28, 0x5e27, 0x5e2d, 0x544c, 0x5e33, 0x5e2a,
-  0x5e2e, 0x4059, 0x3121, 0x5e36, 0x5e31, 0x5e32, 0x5126, 0x5e35,
-  0x5e2f, 0x5e30, 0x503d, 0x5e34, 0x4a6d, 0x5e39, 0x5e38, 0x5e37,
-  0x5e3b, 0x3d65, 0x3258, 0x436a, 0x5e3a, 0x453a, 0x5e3c, 0x4c59,
-  0x372a, 0x5465, 0x5e3d, 0x5e3f, 0x4422, 0x5e41, 0x5e3e, 0x5e40,
-  0x553a, 0x5e42, 0x722e, 0x3b22, 0x4232, 0x4530, 0x4247, 0x722f,
-  0x5069, 0x535d, 0x6b3d, 0x3366, 0x7230, 0x7231, 0x4a2d, 0x3a67,
-  0x7233, 0x7235, 0x7234, 0x4b64, 0x4f3a, 0x7232, 0x4a34, 0x524f,
-  0x426c, 0x4e43, 0x7238, 0x3076, 0x7237, 0x723e, 0x324f, 0x5141,
-  0x723a, 0x723c, 0x5469, 0x723b, 0x7236, 0x723f, 0x723d, 0x7239,
-  0x7247, 0x7244, 0x7246, 0x724a, 0x7242, 0x7240, 0x7245, 0x567b,
-  0x7241, 0x4779, 0x495f, 0x7248, 0x3946, 0x3530, 0x7243, 0x7249,
-  0x7250, 0x7256, 0x3b57, 0x7255, 0x4d5c, 0x566b, 0x7252, 0x7254,
-  0x3872, 0x724b, 0x724e, 0x4279, 0x555d, 0x724c, 0x724d, 0x724f,
-  0x7253, 0x7259, 0x533c, 0x366a, 0x4a71, 0x3764, 0x7257, 0x7258,
-  0x725a, 0x725d, 0x725b, 0x725c, 0x5151, 0x7251, 0x4d49, 0x4e4f,
-  0x5629, 0x7263, 0x435b, 0x7260, 0x402f, 0x726c, 0x725e, 0x7261,
-  0x7268, 0x7262, 0x7267, 0x7266, 0x7269, 0x725f, 0x7264, 0x726a,
-  0x532c, 0x7265, 0x3275, 0x7272, 0x502b, 0x7275, 0x3b48, 0x7279,
-  0x7270, 0x7276, 0x7278, 0x727a, 0x7273, 0x7271, 0x3a7b, 0x357b,
-  0x726f, 0x7277, 0x726d, 0x726e, 0x726b, 0x7326, 0x7323, 0x7322,
-  0x7274, 0x485a, 0x727b, 0x7325, 0x4378, 0x727d, 0x7327, 0x7329,
-  0x7324, 0x727c, 0x732b, 0x732a, 0x425d, 0x732e, 0x7330, 0x7321,
-  0x7331, 0x732c, 0x732f, 0x727e, 0x732d, 0x7332, 0x7334, 0x7328,
-  0x7333, 0x7335, 0x5037, 0x7338, 0x5979, 0x7339, 0x7337, 0x4864,
-  0x7336, 0x733a, 0x733b, 0x3440, 0x6e43, 0x733c, 0x733d, 0x512a,
-  0x742c, 0x5046, 0x5050, 0x515c, 0x4f4e, 0x3d56, 0x5143, 0x3a62,
-  0x6169, 0x5242, 0x7142, 0x3239, 0x316d, 0x7143, 0x4940, 0x3344,
-  0x5972, 0x4b25, 0x7144, 0x5654, 0x7145, 0x7440, 0x7146, 0x542c,
-  0x7147, 0x3040, 0x7441, 0x7442, 0x347c, 0x455b, 0x4c3b, 0x5064,
-  0x4d60, 0x7148, 0x5973, 0x313b, 0x4f2e, 0x3824, 0x714a, 0x714b,
-  0x3243, 0x4151, 0x5730, 0x7149, 0x714c, 0x714e, 0x5976, 0x5261,
-  0x5423, 0x7443, 0x4839, 0x7444, 0x714d, 0x714f, 0x3f63, 0x7150,
-  0x7154, 0x7156, 0x7151, 0x4951, 0x4561, 0x4263, 0x397c, 0x7153,
-  0x7155, 0x3953, 0x715b, 0x3a56, 0x307d, 0x7159, 0x7158, 0x7152,
-  0x715a, 0x7157, 0x486c, 0x4d4a, 0x715d, 0x653d, 0x715c, 0x715e,
-  0x715f, 0x4f65, 0x7445, 0x3d73, 0x7160, 0x7161, 0x4e77, 0x522a,
-  0x717b, 0x3832, 0x3c7b, 0x395b, 0x3966, 0x4359, 0x4a53, 0x6a68,
-  0x4040, 0x3e75, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d, 0x6a6e,
-  0x6a6f, 0x3d47, 0x757b, 0x757d, 0x757e, 0x757c, 0x3d62, 0x7621,
-  0x3425, 0x7622, 0x7623, 0x6c32, 0x5154, 0x596a, 0x7624, 0x6e3a,
-  0x5532, 0x537e, 0x4c5c, 0x4a44, 0x6540, 0x7625, 0x3e2f, 0x4629,
-  0x5a25, 0x3c46, 0x3629, 0x383c, 0x484f, 0x3c25, 0x5a26, 0x5a27,
-  0x4c56, 0x4843, 0x5a28, 0x467d, 0x5135, 0x5269, 0x5136, 0x3c47,
-  0x3d32, 0x3b64, 0x5a29, 0x5a2a, 0x5148, 0x5a2b, 0x506d, 0x366f,
-  0x425b, 0x4b4f, 0x376d, 0x4968, 0x3743, 0x3e77, 0x5624, 0x5a2c,
-  0x5a2d, 0x4640, 0x5767, 0x4a36, 0x5529, 0x4b5f, 0x556f, 0x5a2e,
-  0x565f, 0x344a, 0x5a30, 0x5a2f, 0x526b, 0x5a31, 0x5a32, 0x5a33,
-  0x4a54, 0x5a34, 0x4a2b, 0x5a35, 0x5a36, 0x334f, 0x566f, 0x5a37,
-  0x3b30, 0x352e, 0x5a38, 0x5a39, 0x396e, 0x512f, 0x5268, 0x5a3a,
-  0x3843, 0x4f6a, 0x326f, 0x5a3b, 0x5a3c, 0x3d6b, 0x4e5c, 0x536f,
-  0x5a3d, 0x4e73, 0x5a3e, 0x5355, 0x3b65, 0x5a3f, 0x4b35, 0x4b50,
-  0x5a40, 0x476b, 0x566e, 0x5a41, 0x4535, 0x3641, 0x5a42, 0x374c,
-  0x3f4e, 0x5a43, 0x5a44, 0x4b2d, 0x5a45, 0x3577, 0x5a46, 0x4142,
-  0x573b, 0x5a47, 0x4c38, 0x526a, 0x4431, 0x5a48, 0x357d, 0x3b51,
-  0x5a49, 0x5033, 0x5a4a, 0x5a4b, 0x4e3d, 0x5a4c, 0x5a4d, 0x5a4e,
-  0x3277, 0x5a51, 0x5a4f, 0x5168, 0x5a50, 0x4355, 0x5a52, 0x5a53,
-  0x5a54, 0x5a55, 0x503b, 0x5225, 0x3079, 0x5a56, 0x472b, 0x5a57,
-  0x3d77, 0x4321, 0x5a58, 0x5a59, 0x437d, 0x4c37, 0x5a5a, 0x5a5b,
-  0x403e, 0x4657, 0x5a5c, 0x5a5d, 0x4734, 0x5a5e, 0x5a5f, 0x3948,
-  0x3b6d, 0x3639, 0x7478, 0x7479, 0x4d63, 0x7539, 0x6b60, 0x4f73,
-  0x3b3f, 0x3a40, 0x5425, 0x6159, 0x7574, 0x312a, 0x3272, 0x7575,
-  0x7577, 0x3a51, 0x7576, 0x4332, 0x7579, 0x7578, 0x3134, 0x556a,
-  0x383a, 0x3931, 0x3246, 0x5470, 0x4f4d, 0x305c, 0x554b, 0x3b75,
-  0x564a, 0x3737, 0x4c30, 0x4636, 0x3161, 0x393a, 0x567c, 0x3961,
-  0x3721, 0x3c7a, 0x6a5a, 0x6a5b, 0x4c79, 0x3973, 0x6a5c, 0x347b,
-  0x4333, 0x3751, 0x3a58, 0x6a5d, 0x5474, 0x6a5e, 0x3c56, 0x3b5f,
-  0x6a5f, 0x415e, 0x4238, 0x545f, 0x574a, 0x6a60, 0x6a61, 0x6a64,
-  0x6a62, 0x6a63, 0x495e, 0x3833, 0x3644, 0x6a65, 0x4a6a, 0x494d,
-  0x344d, 0x6259, 0x4562, 0x6a66, 0x4035, 0x5738, 0x6a67, 0x572c,
-  0x487c, 0x5853, 0x584d, 0x545e, 0x5479, 0x4944, 0x532e, 0x3853,
-  0x3360, 0x4962, 0x7476, 0x3a55, 0x7477, 0x575f, 0x7471, 0x3830,
-  0x5554, 0x384f, 0x4670, 0x3343, 0x7472, 0x332c, 0x543d, 0x4777,
-  0x7474, 0x7473, 0x4c4b, 0x4824, 0x7475, 0x5763, 0x453f, 0x7540,
-  0x753b, 0x7543, 0x7542, 0x563a, 0x7541, 0x543e, 0x7544, 0x754c,
-  0x304f, 0x3578, 0x7549, 0x754a, 0x455c, 0x7545, 0x7546, 0x7547,
-  0x754b, 0x3e60, 0x7548, 0x387a, 0x7550, 0x7553, 0x3f67, 0x3972,
-  0x753c, 0x754d, 0x4237, 0x4c78, 0x3c79, 0x754e, 0x754f, 0x7551,
-  0x3665, 0x7552, 0x7555, 0x753d, 0x7554, 0x533b, 0x336c, 0x4c24,
-  0x7556, 0x7557, 0x3e61, 0x7558, 0x4c5f, 0x755b, 0x3248, 0x5759,
-  0x7559, 0x755a, 0x755c, 0x7562, 0x7560, 0x755f, 0x755d, 0x7561,
-  0x755e, 0x7564, 0x7565, 0x4c63, 0x653f, 0x3538, 0x7563, 0x7568,
-  0x4c23, 0x7566, 0x7567, 0x753e, 0x3144, 0x753f, 0x3545, 0x3264,
-  0x756c, 0x7569, 0x3657, 0x756d, 0x756a, 0x756b, 0x345a, 0x546a,
-  0x756e, 0x3379, 0x756f, 0x7571, 0x7570, 0x7572, 0x7573, 0x496d,
-  0x392a, 0x477b, 0x3663, 0x4c49, 0x6a26, 0x3335, 0x547e, 0x396c,
-  0x5079, 0x696d, 0x572a, 0x696e, 0x4256, 0x486d, 0x3a64, 0x696f,
-  0x6970, 0x6971, 0x5661, 0x6972, 0x6973, 0x6975, 0x6974, 0x6976,
-  0x6977, 0x4761, 0x6978, 0x5458, 0x6979, 0x3d4e, 0x697a, 0x697b,
-  0x3d4f, 0x697c, 0x3828, 0x413e, 0x697d, 0x3132, 0x3b54, 0x3975,
-  0x697e, 0x6a21, 0x6a22, 0x6a23, 0x3778, 0x3c2d, 0x4a64, 0x604e,
-  0x542f, 0x4f3d, 0x5537, 0x6a24, 0x555e, 0x6a25, 0x5041, 0x393c,
-  0x3447, 0x3159, 0x4031, 0x3166, 0x3167, 0x3168, 0x333d, 0x4868,
-  0x6541, 0x315f, 0x4149, 0x346f, 0x4728, 0x5358, 0x4679, 0x5138,
-  0x397d, 0x4275, 0x532d, 0x544b, 0x3d7c, 0x6542, 0x3735, 0x6543,
-  0x3b39, 0x5562, 0x3d78, 0x5436, 0x4e25, 0x412c, 0x3359, 0x4c76,
-  0x6546, 0x6544, 0x6548, 0x654a, 0x6547, 0x354f, 0x4648, 0x357c,
-  0x6545, 0x4a76, 0x6549, 0x4354, 0x3145, 0x3c23, 0x5737, 0x4d4b,
-  0x4b4d, 0x4a4a, 0x4c53, 0x654c, 0x654b, 0x4466, 0x5121, 0x5137,
-  0x654d, 0x6550, 0x4d38, 0x5670, 0x654f, 0x355d, 0x4d3e, 0x6551,
-  0x363a, 0x4d28, 0x3964, 0x4a45, 0x3351, 0x4b59, 0x546c, 0x6552,
-  0x376a, 0x654e, 0x6555, 0x347e, 0x6556, 0x6553, 0x6554, 0x525d,
-  0x425f, 0x3146, 0x5362, 0x365d, 0x4b6c, 0x6557, 0x5376, 0x3169,
-  0x3674, 0x655a, 0x6558, 0x6559, 0x3540, 0x5245, 0x655c, 0x655e,
-  0x655d, 0x4732, 0x5223, 0x655b, 0x5462, 0x555a, 0x6560, 0x5771,
-  0x6561, 0x315c, 0x517b, 0x6562, 0x6564, 0x6563, 0x6565, 0x5258,
-  0x354b, 0x675f, 0x5a75, 0x5a78, 0x5a76, 0x5a77, 0x5a7a, 0x504f,
-  0x4447, 0x306e, 0x5030, 0x5a79, 0x534a, 0x3a2a, 0x5b22, 0x4771,
-  0x5a7c, 0x5a7b, 0x495b, 0x5a7d, 0x5b21, 0x575e, 0x5a7e, 0x415a,
-  0x5b25, 0x5374, 0x5b27, 0x5b24, 0x5b28, 0x3d3c, 0x4049, 0x5b23,
-  0x5b26, 0x5623, 0x5b29, 0x5b2d, 0x5b2e, 0x5b2c, 0x3a42, 0x3f24,
-  0x5b2b, 0x5b2a, 0x5447, 0x323f, 0x5b2f, 0x3979, 0x5b30, 0x333b,
-  0x3526, 0x363c, 0x5b31, 0x3675, 0x5b32, 0x3149, 0x5b34, 0x5b33,
-  0x5b35, 0x5b37, 0x5b36, 0x5b38, 0x5b39, 0x5b3a, 0x534f, 0x747a,
-  0x4775, 0x5743, 0x4564, 0x747c, 0x747d, 0x747b, 0x3e46, 0x506f,
-  0x3753, 0x544d, 0x4c2a, 0x7522, 0x7521, 0x3a28, 0x747e, 0x4b56,
-  0x7524, 0x4052, 0x336a, 0x4d2a, 0x7525, 0x7523, 0x3d34, 0x7528,
-  0x7529, 0x3d4d, 0x4338, 0x3f61, 0x4b61, 0x752a, 0x7526, 0x7527,
-  0x4470, 0x752c, 0x343c, 0x576d, 0x3457, 0x752b, 0x752e, 0x752d,
-  0x752f, 0x5051, 0x4351, 0x4829, 0x7530, 0x7531, 0x7532, 0x7533,
-  0x7534, 0x7535, 0x7537, 0x7536, 0x7538, 0x3249, 0x5354, 0x4a4d,
-  0x406f, 0x5658, 0x5230, 0x413f, 0x3d70, 0x382a, 0x3c78, 0x7646,
-  0x7647, 0x7648, 0x7649, 0x764a, 0x764c, 0x764b, 0x7769, 0x764d,
-  0x764e, 0x6e44, 0x6e45, 0x6e46, 0x556b, 0x3624, 0x6e48, 0x6e47,
-  0x6e49, 0x6e4a, 0x4725, 0x6e4b, 0x6e4c, 0x3730, 0x3576, 0x6e4d,
-  0x6e4f, 0x6e4e, 0x3846, 0x6e50, 0x6e51, 0x6e52, 0x365b, 0x332e,
-  0x5653, 0x4446, 0x3135, 0x3856, 0x6e53, 0x6e54, 0x543f, 0x4755,
-  0x3e7b, 0x4e59, 0x3933, 0x6e56, 0x6e55, 0x6e58, 0x6e57, 0x4525,
-  0x6e59, 0x6e5a, 0x472e, 0x6e5b, 0x472f, 0x6e5c, 0x3227, 0x6e5d,
-  0x6e5e, 0x6e5f, 0x6e60, 0x6e61, 0x576a, 0x6e62, 0x6e63, 0x3c58,
-  0x6e64, 0x534b, 0x4c7a, 0x322c, 0x4165, 0x6e65, 0x4726, 0x432d,
-  0x6e66, 0x6e67, 0x6e68, 0x6e69, 0x6e6a, 0x6e6b, 0x6e6c, 0x6e6d,
-  0x6e6e, 0x6e6f, 0x6e70, 0x6e71, 0x6e72, 0x6e74, 0x6e73, 0x6e75,
-  0x4d2d, 0x4241, 0x6e76, 0x6e77, 0x6e78, 0x5521, 0x6e79, 0x4f33,
-  0x6e7a, 0x6e7b, 0x6e7c, 0x6e7d, 0x6f21, 0x6e7e, 0x6f22, 0x3875,
-  0x437a, 0x6f23, 0x6f24, 0x3d42, 0x523f, 0x3279, 0x6f25, 0x6f26,
-  0x6f27, 0x5278, 0x6f28, 0x567d, 0x6f29, 0x464c, 0x6f2a, 0x6f2b,
-  0x4134, 0x6f2c, 0x4f7a, 0x4b78, 0x6f2e, 0x6f2d, 0x337a, 0x3978,
-  0x6f2f, 0x6f30, 0x5062, 0x6f31, 0x6f32, 0x3766, 0x503f, 0x6f33,
-  0x6f34, 0x6f35, 0x4871, 0x4c60, 0x6f36, 0x6f37, 0x6f38, 0x6f39,
-  0x6f3a, 0x5560, 0x6f3b, 0x346d, 0x432a, 0x6f3c, 0x6f3d, 0x6f3e,
-  0x6f3f, 0x4e7d, 0x6f40, 0x4260, 0x3438, 0x5736, 0x3d75, 0x4f47,
-  0x6f43, 0x6f41, 0x6f42, 0x6f44, 0x3627, 0x3c7c, 0x3e62, 0x434c,
-  0x6f45, 0x6f46, 0x6f47, 0x6f4f, 0x6f48, 0x6f49, 0x6f4a, 0x4742,
-  0x6f71, 0x364d, 0x6f4b, 0x6f4c, 0x6f4d, 0x3646, 0x433e, 0x6f4e,
-  0x6f50, 0x6f51, 0x6f52, 0x5572, 0x6f53, 0x4477, 0x6f54, 0x4478,
-  0x6f55, 0x6f56, 0x3864, 0x3077, 0x6f57, 0x6f58, 0x6f59, 0x6f5a,
-  0x6f5b, 0x6f5c, 0x6f5d, 0x6f5e, 0x3e35, 0x6f61, 0x6f5f, 0x6f60,
-  0x6f62, 0x6f63, 0x414d, 0x6f64, 0x6f65, 0x6f66, 0x6f67, 0x6f68,
-  0x6f69, 0x6f6a, 0x6f6b, 0x6f6c, 0x4058, 0x6f6d, 0x412d, 0x6f6e,
-  0x6f6f, 0x6f70, 0x4f62, 0x3324, 0x4345, 0x6345, 0x4941, 0x6346,
-  0x3155, 0x4e4a, 0x3433, 0x4872, 0x6347, 0x4f50, 0x6348, 0x3c64,
-  0x6349, 0x634a, 0x4346, 0x5522, 0x4456, 0x396b, 0x4e45, 0x634b,
-  0x4376, 0x634c, 0x3727, 0x3873, 0x3a52, 0x634d, 0x634e, 0x5444,
-  0x634f, 0x6350, 0x514b, 0x6351, 0x6352, 0x6353, 0x6354, 0x5156,
-  0x6355, 0x327b, 0x403b, 0x6356, 0x402b, 0x6357, 0x6358, 0x6359,
-  0x635a, 0x635b, 0x3837, 0x5a62, 0x3653, 0x5a64, 0x5a63, 0x5a66,
-  0x486e, 0x5a65, 0x3740, 0x5174, 0x5275, 0x5573, 0x3d57, 0x5768,
-  0x5a68, 0x5a67, 0x3022, 0x4d53, 0x5a69, 0x383d, 0x3c4a, 0x423d,
-  0x4224, 0x3342, 0x5a6a, 0x422a, 0x4430, 0x3d35, 0x4f5e, 0x5a6b,
-  0x4942, 0x315d, 0x5a6c, 0x3638, 0x543a, 0x337d, 0x5a6d, 0x5449,
-  0x4f55, 0x4563, 0x5a6e, 0x5a6f, 0x5a70, 0x416a, 0x4c55, 0x4f5d,
-  0x5367, 0x4221, 0x5a71, 0x4b65, 0x5a72, 0x4b66, 0x527e, 0x3874,
-  0x5a73, 0x302f, 0x4f36, 0x554f, 0x4b6d, 0x5a74, 0x6344, 0x4125,
-  0x763f, 0x7640, 0x7641, 0x4451, 0x4838, 0x5163, 0x505b, 0x5145,
-  0x3c2f, 0x394d, 0x6f74, 0x3446, 0x533a, 0x7642, 0x337b, 0x7643,
-  0x3571, 0x7645, 0x536a, 0x7627, 0x5129, 0x7629, 0x7628, 0x4163,
-  0x4057, 0x3122, 0x4e6d, 0x5068, 0x762b, 0x4f76, 0x762a, 0x5570,
-  0x762c, 0x4339, 0x3b74, 0x762e, 0x762d, 0x445e, 0x4158, 0x4b2a,
-  0x4f3c, 0x762f, 0x7630, 0x7631, 0x4236, 0x3054, 0x4579, 0x7632,
-  0x4760, 0x7626, 0x3e38, 0x3e32, 0x3565, 0x3747, 0x3f3f, 0x4352,
-  0x4366, 0x584c, 0x386f, 0x3d79, 0x5125, 0x3050, 0x7730, 0x7731,
-  0x502c, 0x3030, 0x7732, 0x7733, 0x7734, 0x474a, 0x3e4f, 0x7737,
-  0x7736, 0x315e, 0x7735, 0x7738, 0x7739, 0x4e24, 0x484d, 0x3a2b,
-  0x6838, 0x6839, 0x683a, 0x3e42, 0x5274, 0x544f, 0x4958, 0x5233,
-  0x3625, 0x476a, 0x717c, 0x4f6e, 0x4b33, 0x506b, 0x676f, 0x4d67,
-  0x394b, 0x3659, 0x717d, 0x3064, 0x4b4c, 0x717e, 0x5424, 0x422d,
-  0x416c, 0x4644, 0x3e31, 0x7221, 0x3c55, 0x7222, 0x7223, 0x7224,
-  0x5243, 0x4635, 0x4d47, 0x7225, 0x5331, 0x3f45, 0x4c62, 0x7226,
-  0x7227, 0x5155, 0x366e, 0x7228, 0x7229, 0x355f, 0x722a, 0x722b,
-  0x327c, 0x722c, 0x722d, 0x4827, 0x3767, 0x6c29, 0x6c2a, 0x6c2b,
-  0x6c2c, 0x462e, 0x6c2d, 0x6c2e, 0x3749, 0x4a33, 0x6238, 0x774f,
-  0x7750, 0x324d, 0x7751, 0x7753, 0x7752, 0x623b, 0x3c22, 0x623c,
-  0x623d, 0x623e, 0x623f, 0x6240, 0x6241, 0x3739, 0x527b, 0x3d24,
-  0x4a4e, 0x3125, 0x4b47, 0x6242, 0x367c, 0x4844, 0x6243, 0x3d48,
-  0x317d, 0x6244, 0x3676, 0x6245, 0x4459, 0x6246, 0x4f5a, 0x395d,
-  0x6247, 0x4021, 0x6248, 0x3276, 0x6249, 0x4173, 0x624a, 0x624b,
-  0x4278, 0x624c, 0x624d, 0x624e, 0x4a57, 0x5838, 0x5965, 0x4f63,
-  0x7025, 0x5c30, 0x426d, 0x5426, 0x4d54, 0x5131, 0x335b, 0x477d,
-  0x3235, 0x423f, 0x6660, 0x4a3b, 0x6661, 0x6662, 0x3e54, 0x6663,
-  0x5724, 0x4d55, 0x6665, 0x3c5d, 0x6664, 0x6666, 0x6667, 0x426e,
-  0x3d3e, 0x6668, 0x4266, 0x3a27, 0x6669, 0x666a, 0x3352, 0x5169,
-  0x3f25, 0x666b, 0x466f, 0x666c, 0x666d, 0x666e, 0x462d, 0x666f,
-  0x4927, 0x6670, 0x6671, 0x6672, 0x6539, 0x6673, 0x6674, 0x4262,
-  0x6675, 0x6676, 0x5668, 0x6677, 0x6678, 0x3947, 0x773b, 0x773a,
-  0x773e, 0x773c, 0x3a21, 0x773f, 0x7740, 0x7742, 0x7741, 0x7744,
-  0x7743, 0x7745, 0x7746, 0x7747, 0x4b68, 0x385f, 0x7754, 0x7755,
-  0x7756, 0x7758, 0x775a, 0x7757, 0x775b, 0x7759, 0x5757, 0x775c,
-  0x775d, 0x775e, 0x775f, 0x7760, 0x5b4b, 0x582a, 0x6577, 0x396d,
-  0x3f7d, 0x3b6a, 0x7749, 0x4647, 0x7748, 0x774a, 0x774c, 0x774b,
-  0x774d, 0x4e3a, 0x774e, 0x4427, 0x5363, 0x764f, 0x4233, 0x7650,
-  0x7651, 0x7652, 0x7653, 0x7654, 0x7656, 0x312b, 0x7657, 0x7658,
-  0x7659, 0x765a, 0x765b, 0x765c, 0x765d, 0x765e, 0x4f4a, 0x765f,
-  0x7660, 0x7661, 0x7662, 0x7663, 0x7664, 0x4070, 0x7665, 0x7666,
-  0x7667, 0x7668, 0x7669, 0x766a, 0x766b, 0x766c, 0x766d, 0x766e,
-  0x766f, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x3e28, 0x7675,
-  0x7676, 0x7677, 0x7678, 0x487a, 0x7679, 0x767a, 0x767b, 0x767c,
-  0x767d, 0x767e, 0x7721, 0x7722, 0x7723, 0x7724, 0x7725, 0x7726,
-  0x7727, 0x7728, 0x316e, 0x7729, 0x772a, 0x772b, 0x772c, 0x772d,
-  0x415b, 0x772e, 0x772f, 0x4471, 0x702f, 0x3c26, 0x7030, 0x4379,
-  0x4538, 0x513b, 0x7031, 0x7032, 0x7033, 0x7034, 0x7035, 0x513c,
-  0x516c, 0x7037, 0x7036, 0x5427, 0x4d52, 0x7038, 0x703a, 0x7039,
-  0x703b, 0x703c, 0x386b, 0x703d, 0x3a68, 0x703e, 0x703f, 0x3e69,
-  0x7040, 0x366c, 0x7041, 0x7042, 0x7043, 0x7044, 0x4835, 0x7045,
-  0x7046, 0x7047, 0x4574, 0x7048, 0x7049, 0x704a, 0x773d, 0x704b,
-  0x704c, 0x704d, 0x704e, 0x704f, 0x3a57, 0x7050, 0x7051, 0x7052,
-  0x7053, 0x7054, 0x7055, 0x7056, 0x7058, 0x5325, 0x7057, 0x7059,
-  0x753a, 0x4239, 0x7764, 0x7765, 0x7766, 0x7767, 0x7768, 0x4234,
-  0x776a, 0x776b, 0x4273, 0x7470, 0x746f, 0x4269, 0x7761, 0x7762,
-  0x3b46, 0x5964, 0x4a72, 0x4068, 0x7024, 0x3a5a, 0x472d, 0x442c,
-  0x776c, 0x776d, 0x776e, 0x7770, 0x776f, 0x7771, 0x7774, 0x7773,
-  0x7772, 0x7775, 0x7776, 0x6d69, 0x6d6a, 0x6d6b, 0x763c, 0x763d,
-  0x763e, 0x3626, 0x583e, 0x3944, 0x583b, 0x5c31, 0x4a73, 0x7777,
-  0x7778, 0x7779, 0x777b, 0x777a, 0x3147, 0x777c, 0x777d, 0x777e,
-  0x466b, 0x6c34, 0x335d, 0x7633, 0x7634, 0x4164, 0x7635, 0x7636,
-  0x7637, 0x7638, 0x7639, 0x763a, 0x4823, 0x763b, 0x417a, 0x3928,
-  0x6d68, 0x396a, 0x595f, 0x2321, 0x2322, 0x2323, 0x2167, 0x2325,
-  0x2326, 0x2327, 0x2328, 0x2329, 0x232a, 0x232b, 0x232c, 0x232d,
-  0x232e, 0x232f, 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335,
-  0x2336, 0x2337, 0x2338, 0x2339, 0x233a, 0x233b, 0x233c, 0x233d,
-  0x233e, 0x233f, 0x2340, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345,
-  0x2346, 0x2347, 0x2348, 0x2349, 0x234a, 0x234b, 0x234c, 0x234d,
-  0x234e, 0x234f, 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355,
-  0x2356, 0x2357, 0x2358, 0x2359, 0x235a, 0x235b, 0x235c, 0x235d,
-  0x235e, 0x235f, 0x2360, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365,
-  0x2366, 0x2367, 0x2368, 0x2369, 0x236a, 0x236b, 0x236c, 0x236d,
-  0x236e, 0x236f, 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375,
-  0x2376, 0x2377, 0x2378, 0x2379, 0x237a, 0x237b, 0x237c, 0x237d,
-  0x212b, 0x2169, 0x216a, 0x237e, 0x2324,
-};
-
-static const Summary16 gb2312_uni2indx_page00[70] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0190 }, {    3, 0x0003 },
-  {    5, 0x0000 }, {    5, 0x0080 }, {    6, 0x3703 }, {   13, 0x168c },
-  /* 0x0100 */
-  {   19, 0x0002 }, {   20, 0x0808 }, {   22, 0x0800 }, {   23, 0x0000 },
-  {   23, 0x2000 }, {   24, 0x0000 }, {   24, 0x0800 }, {   25, 0x0000 },
-  {   25, 0x0000 }, {   25, 0x0000 }, {   25, 0x0000 }, {   25, 0x0000 },
-  {   25, 0x4000 }, {   26, 0x1555 }, {   33, 0x0000 }, {   33, 0x0000 },
-  /* 0x0200 */
-  {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 },
-  {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 },
-  {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 },
-  {   33, 0x0280 }, {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 },
-  /* 0x0300 */
-  {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 },
-  {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 },
-  {   35, 0x0000 }, {   35, 0xfffe }, {   50, 0x03fb }, {   59, 0xfffe },
-  {   74, 0x03fb }, {   83, 0x0000 }, {   83, 0x0000 }, {   83, 0x0000 },
-  /* 0x0400 */
-  {   83, 0x0002 }, {   84, 0xffff }, {  100, 0xffff }, {  116, 0xffff },
-  {  132, 0xffff }, {  148, 0x0002 },
-};
-static const Summary16 gb2312_uni2indx_page20[101] = {
-  /* 0x2000 */
-  {  149, 0x0000 }, {  149, 0x3360 }, {  155, 0x0040 }, {  156, 0x080d },
-  {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 },
-  {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 },
-  {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 },
-  /* 0x2100 */
-  {  160, 0x0008 }, {  161, 0x0040 }, {  162, 0x0000 }, {  162, 0x0000 },
-  {  162, 0x0000 }, {  162, 0x0000 }, {  162, 0x0fff }, {  174, 0x0000 },
-  {  174, 0x0000 }, {  174, 0x000f }, {  178, 0x0000 }, {  178, 0x0000 },
-  {  178, 0x0000 }, {  178, 0x0000 }, {  178, 0x0000 }, {  178, 0x0000 },
-  /* 0x2200 */
-  {  178, 0x8100 }, {  180, 0x6402 }, {  184, 0x4fa1 }, {  192, 0x20f0 },
-  {  197, 0x1100 }, {  199, 0x0000 }, {  199, 0xc033 }, {  205, 0x0000 },
-  {  205, 0x0000 }, {  205, 0x0200 }, {  206, 0x0020 }, {  207, 0x0000 },
-  {  207, 0x0000 }, {  207, 0x0000 }, {  207, 0x0000 }, {  207, 0x0000 },
-  /* 0x2300 */
-  {  207, 0x0000 }, {  207, 0x0004 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  /* 0x2400 */
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x03ff }, {  218, 0xfff0 },
-  {  230, 0xffff }, {  246, 0x0fff }, {  258, 0x0000 }, {  258, 0x0000 },
-  {  258, 0x0000 }, {  258, 0x0000 }, {  258, 0x0000 }, {  258, 0x0000 },
-  /* 0x2500 */
-  {  258, 0xffff }, {  274, 0xffff }, {  290, 0xffff }, {  306, 0xffff },
-  {  322, 0x0fff }, {  334, 0x0000 }, {  334, 0x0000 }, {  334, 0x0000 },
-  {  334, 0x0000 }, {  334, 0x0000 }, {  334, 0x0003 }, {  336, 0x000c },
-  {  338, 0xc8c0 }, {  343, 0x0000 }, {  343, 0x0000 }, {  343, 0x0000 },
-  /* 0x2600 */
-  {  343, 0x0060 }, {  345, 0x0000 }, {  345, 0x0000 }, {  345, 0x0000 },
-  {  345, 0x0005 },
-};
-static const Summary16 gb2312_uni2indx_page30[35] = {
-  /* 0x3000 */
-  {  347, 0xff2f }, {  360, 0x00fb }, {  367, 0x0000 }, {  367, 0x0000 },
-  {  367, 0xfffe }, {  382, 0xffff }, {  398, 0xffff }, {  414, 0xffff },
-  {  430, 0xffff }, {  446, 0x000f }, {  450, 0xfffe }, {  465, 0xffff },
-  {  481, 0xffff }, {  497, 0xffff }, {  513, 0xffff }, {  529, 0x087f },
-  /* 0x3100 */
-  {  537, 0xffe0 }, {  548, 0xffff }, {  564, 0x03ff }, {  574, 0x0000 },
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 },
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 },
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 },
-  /* 0x3200 */
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x03ff },
-};
-static const Summary16 gb2312_uni2indx_page4e[1263] = {
-  /* 0x4e00 */
-  {  584, 0x7f8b }, {  595, 0x7f7b }, {  608, 0x3db4 }, {  617, 0xef55 },
-  {  628, 0xfba8 }, {  638, 0xf35d }, {  649, 0x0243 }, {  653, 0x400b },
-  {  657, 0xfb40 }, {  665, 0x8d3e }, {  674, 0x7bf7 }, {  687, 0x8c2c },
-  {  693, 0x6eff }, {  706, 0xe3fa }, {  717, 0x1d3a }, {  725, 0xa8ed },
-  /* 0x4f00 */
-  {  734, 0xe602 }, {  740, 0xcf83 }, {  749, 0x8cf5 }, {  758, 0x3555 },
-  {  766, 0xe048 }, {  771, 0xffab }, {  784, 0x92b9 }, {  792, 0xd859 },
-  {  800, 0xab18 }, {  807, 0x2892 }, {  812, 0xd7e9 }, {  823, 0x8020 },
-  {  825, 0xc438 }, {  831, 0xf583 }, {  840, 0xe74a }, {  849, 0x450a },
-  /* 0x5000 */
-  {  854, 0xb000 }, {  857, 0x9714 }, {  864, 0x7762 }, {  873, 0x5400 },
-  {  876, 0xd188 }, {  882, 0x1420 }, {  885, 0x1020 }, {  887, 0xc8c0 },
-  {  892, 0x2121 }, {  896, 0x0000 }, {  896, 0x13a8 }, {  902, 0x0c04 },
-  {  905, 0x8000 }, {  906, 0x0440 }, {  908, 0x70c0 }, {  913, 0x0828 },
-  /* 0x5100 */
-  {  916, 0x08c0 }, {  919, 0x0004 }, {  920, 0x0002 }, {  921, 0x8000 },
-  {  922, 0x2b7b }, {  932, 0x1472 }, {  938, 0x7924 }, {  945, 0x3bfb },
-  {  957, 0x3327 }, {  965, 0x1ae4 }, {  972, 0x9835 }, {  979, 0x38ef },
-  {  989, 0x9ad1 }, {  997, 0x2802 }, { 1000, 0xa813 }, { 1006, 0xbf69 },
-  /* 0x5200 */
-  { 1017, 0x65cf }, { 1027, 0x2fc6 }, { 1036, 0x6b11 }, { 1043, 0xafc9 },
-  { 1053, 0x340f }, { 1060, 0x5053 }, { 1066, 0x86a2 }, { 1072, 0xa004 },
-  { 1075, 0x0106 }, { 1078, 0xe809 }, { 1084, 0x3f0f }, { 1094, 0xc00e },
-  { 1099, 0x0a88 }, { 1103, 0x8145 }, { 1108, 0x0010 }, { 1109, 0xc601 },
-  /* 0x5300 */
-  { 1114, 0xa161 }, { 1120, 0x26e1 }, { 1127, 0x444b }, { 1133, 0xce00 },
-  { 1138, 0xc7aa }, { 1147, 0xd4ee }, { 1157, 0xcadf }, { 1168, 0x85bb },
-  { 1177, 0x3a74 }, { 1185, 0xa520 }, { 1190, 0x436c }, { 1197, 0x8840 },
-  { 1200, 0x3f06 }, { 1208, 0x8bd2 }, { 1216, 0xff79 }, { 1229, 0x3bef },
-  /* 0x5400 */
-  { 1241, 0xf75a }, { 1252, 0xe8ef }, { 1263, 0xfbcb }, { 1275, 0x5b36 },
-  { 1284, 0x0d49 }, { 1290, 0x1bfd }, { 1301, 0x0154 }, { 1305, 0x39ee },
-  { 1315, 0xd855 }, { 1323, 0x2e75 }, { 1332, 0xbfd8 }, { 1343, 0xa91a },
-  { 1350, 0xf3d7 }, { 1362, 0xf6bf }, { 1375, 0x67e0 }, { 1383, 0xb40c },
-  /* 0x5500 */
-  { 1389, 0x82c2 }, { 1394, 0x0813 }, { 1398, 0xd49d }, { 1407, 0xd08b },
-  { 1414, 0x065a }, { 1420, 0x1061 }, { 1424, 0x74f2 }, { 1433, 0x59e0 },
-  { 1440, 0x8f9f }, { 1451, 0xb312 }, { 1458, 0x0080 }, { 1459, 0x6aaa },
-  { 1467, 0x3230 }, { 1472, 0xb05e }, { 1480, 0x9d7a }, { 1490, 0x60ac },
-  /* 0x5600 */
-  { 1496, 0xd303 }, { 1503, 0xc900 }, { 1507, 0x3098 }, { 1512, 0x8a56 },
-  { 1519, 0x7000 }, { 1522, 0x1390 }, { 1527, 0x1f14 }, { 1534, 0x1842 },
-  { 1538, 0xc060 }, { 1542, 0x0008 }, { 1543, 0x8008 }, { 1545, 0x1080 },
-  { 1547, 0x0400 }, { 1548, 0xec90 }, { 1555, 0x2817 }, { 1561, 0xe633 },
-  /* 0x5700 */
-  { 1570, 0x0758 }, { 1576, 0x9000 }, { 1578, 0xf708 }, { 1586, 0x4e09 },
-  { 1592, 0xf485 }, { 1600, 0xfc83 }, { 1609, 0xaf53 }, { 1619, 0x18c8 },
-  { 1624, 0x187c }, { 1631, 0x080c }, { 1634, 0x6adf }, { 1645, 0x0114 },
-  { 1648, 0xc80c }, { 1653, 0xa734 }, { 1661, 0xa011 }, { 1665, 0x2710 },
-  /* 0x5800 */
-  { 1670, 0x28c5 }, { 1676, 0x4222 }, { 1680, 0x0413 }, { 1684, 0x0021 },
-  { 1686, 0x3010 }, { 1689, 0x4112 }, { 1693, 0x1820 }, { 1696, 0x4000 },
-  { 1697, 0x022b }, { 1702, 0xc60c }, { 1708, 0x0300 }, { 1710, 0x1000 },
-  { 1711, 0x0022 }, { 1713, 0x0022 }, { 1715, 0x5810 }, { 1719, 0x0249 },
-  /* 0x5900 */
-  { 1723, 0xa094 }, { 1728, 0x9670 }, { 1735, 0xeeb0 }, { 1744, 0x1792 },
-  { 1751, 0xcb96 }, { 1760, 0x05f2 }, { 1767, 0x0025 }, { 1770, 0x2358 },
-  { 1776, 0x25de }, { 1785, 0x42cc }, { 1791, 0xcf38 }, { 1800, 0x4a04 },
-  { 1804, 0x0c40 }, { 1807, 0x359f }, { 1817, 0x1128 }, { 1821, 0x8a00 },
-  /* 0x5a00 */
-  { 1824, 0x13fa }, { 1833, 0x910a }, { 1838, 0x0229 }, { 1842, 0x1056 },
-  { 1847, 0x0641 }, { 1851, 0x0420 }, { 1853, 0x0484 }, { 1856, 0x84f0 },
-  { 1862, 0x0000 }, { 1862, 0x0c04 }, { 1865, 0x0400 }, { 1866, 0x412c },
-  { 1871, 0x1206 }, { 1875, 0x1154 }, { 1880, 0x0a4b }, { 1886, 0x0002 },
-  /* 0x5b00 */
-  { 1887, 0x0200 }, { 1888, 0x00c0 }, { 1890, 0x0000 }, { 1890, 0x0094 },
-  { 1893, 0x0001 }, { 1894, 0xbfbb }, { 1907, 0x167c }, { 1915, 0x242b },
-  { 1921, 0x9bbb }, { 1932, 0x7fa8 }, { 1942, 0x0c7f }, { 1951, 0xe379 },
-  { 1961, 0x10f4 }, { 1967, 0xe00d }, { 1973, 0x4132 }, { 1978, 0x9f01 },
-  /* 0x5c00 */
-  { 1985, 0x8652 }, { 1991, 0x3572 }, { 1999, 0x10b4 }, { 2004, 0xff12 },
-  { 2014, 0xcf27 }, { 2024, 0x4223 }, { 2029, 0xc06b }, { 2036, 0x8602 },
-  { 2040, 0x3106 }, { 2045, 0x1fd3 }, { 2055, 0x3a0c }, { 2061, 0xa1aa },
-  { 2068, 0x0812 }, { 2071, 0x0204 }, { 2073, 0x2572 }, { 2080, 0x0801 },
-  /* 0x5d00 */
-  { 2082, 0x40cc }, { 2087, 0x4850 }, { 2091, 0x62d0 }, { 2097, 0x6010 },
-  { 2100, 0x1c80 }, { 2104, 0x2900 }, { 2107, 0x9a00 }, { 2111, 0x0010 },
-  { 2112, 0x0004 }, { 2113, 0x2200 }, { 2115, 0x0000 }, { 2115, 0x0080 },
-  { 2116, 0x2020 }, { 2118, 0x6800 }, { 2121, 0xcbe6 }, { 2131, 0x609e },
-  /* 0x5e00 */
-  { 2138, 0x916e }, { 2146, 0x3f73 }, { 2157, 0x60c0 }, { 2161, 0x3982 },
-  { 2167, 0x1034 }, { 2171, 0x4830 }, { 2175, 0x0006 }, { 2177, 0xbd5c },
-  { 2187, 0x8cd1 }, { 2194, 0xd6fb }, { 2206, 0x20e1 }, { 2211, 0x43e8 },
-  { 2218, 0x0600 }, { 2220, 0x084e }, { 2225, 0x0500 }, { 2227, 0xc4d0 },
-  /* 0x5f00 */
-  { 2233, 0x8d1f }, { 2242, 0x89aa }, { 2249, 0xa6e1 }, { 2257, 0x1602 },
-  { 2261, 0x0001 }, { 2262, 0x21ed }, { 2270, 0x3656 }, { 2278, 0x1a8b },
-  { 2285, 0x1fb7 }, { 2296, 0x13a5 }, { 2303, 0x6502 }, { 2308, 0x30a0 },
-  { 2312, 0xb278 }, { 2320, 0x23c7 }, { 2328, 0x6c93 }, { 2336, 0xe922 },
-  /* 0x6000 */
-  { 2343, 0xe47f }, { 2354, 0x3a74 }, { 2362, 0x8fe3 }, { 2372, 0x9820 },
-  { 2376, 0x280e }, { 2381, 0x2625 }, { 2387, 0xbf9c }, { 2398, 0xbf49 },
-  { 2408, 0x3218 }, { 2413, 0xac54 }, { 2420, 0xb949 }, { 2428, 0x1916 },
-  { 2434, 0x0c60 }, { 2438, 0xb522 }, { 2445, 0xfbc1 }, { 2455, 0x0659 },
-  /* 0x6100 */
-  { 2461, 0xe343 }, { 2469, 0x8420 }, { 2472, 0x08d9 }, { 2478, 0x8000 },
-  { 2479, 0x5500 }, { 2483, 0x2022 }, { 2486, 0x0184 }, { 2489, 0x00a1 },
-  { 2492, 0x4800 }, { 2494, 0x2010 }, { 2496, 0x1380 }, { 2500, 0x4080 },
-  { 2502, 0x0d04 }, { 2506, 0x0016 }, { 2509, 0x0040 }, { 2510, 0x8020 },
-  /* 0x6200 */
-  { 2512, 0xfd40 }, { 2520, 0x8de7 }, { 2530, 0x5436 }, { 2537, 0xe098 },
-  { 2543, 0x7b8b }, { 2553, 0x091e }, { 2559, 0xfec8 }, { 2569, 0xd249 },
-  { 2576, 0x0611 }, { 2580, 0x8dee }, { 2590, 0x1937 }, { 2598, 0xba22 },
-  { 2605, 0x77f4 }, { 2616, 0x9fdd }, { 2628, 0xf3ec }, { 2639, 0xf0da },
-  /* 0x6300 */
-  { 2648, 0x4386 }, { 2654, 0xec42 }, { 2661, 0x8d3f }, { 2671, 0x2604 },
-  { 2675, 0xfa6c }, { 2685, 0xc021 }, { 2689, 0x628e }, { 2696, 0x0cc2 },
-  { 2701, 0xd785 }, { 2710, 0x0145 }, { 2714, 0x77ad }, { 2725, 0x5599 },
-  { 2733, 0xe250 }, { 2739, 0x4045 }, { 2743, 0x260b }, { 2749, 0xa154 },
-  /* 0x6400 */
-  { 2755, 0x9827 }, { 2762, 0x5819 }, { 2768, 0x3443 }, { 2774, 0xa410 },
-  { 2778, 0x05f2 }, { 2785, 0x4114 }, { 2789, 0x2280 }, { 2792, 0x0700 },
-  { 2795, 0x00b4 }, { 2799, 0x4266 }, { 2805, 0x7210 }, { 2810, 0x15a1 },
-  { 2816, 0x6025 }, { 2821, 0x4185 }, { 2826, 0x0054 }, { 2829, 0x0000 },
-  /* 0x6500 */
-  { 2829, 0x0201 }, { 2831, 0x0104 }, { 2833, 0xc820 }, { 2837, 0xcb70 },
-  { 2845, 0x9320 }, { 2850, 0x6a62 }, { 2857, 0x184c }, { 2862, 0x0095 },
-  { 2866, 0x1880 }, { 2869, 0x9a8b }, { 2877, 0xaab2 }, { 2885, 0x3201 },
-  { 2889, 0xd87a }, { 2898, 0x00c4 }, { 2901, 0xf3e5 }, { 2912, 0x04c3 },
-  /* 0x6600 */
-  { 2917, 0xd44d }, { 2925, 0xa238 }, { 2931, 0xa1a1 }, { 2937, 0x5072 },
-  { 2943, 0x980a }, { 2948, 0x84fc }, { 2956, 0xc152 }, { 2962, 0x44d1 },
-  { 2968, 0x1094 }, { 2972, 0x20c2 }, { 2976, 0x4180 }, { 2979, 0x4210 },
-  { 2982, 0x0000 }, { 2982, 0x3a00 }, { 2986, 0x0240 }, { 2988, 0xd29d },
-  /* 0x6700 */
-  { 2997, 0x2f01 }, { 3003, 0xa8b1 }, { 3010, 0xbd40 }, { 3017, 0x2432 },
-  { 3022, 0xd34d }, { 3031, 0xd04b }, { 3038, 0xa723 }, { 3046, 0xd0ad },
-  { 3054, 0x0a92 }, { 3059, 0x75a1 }, { 3067, 0xadac }, { 3076, 0x01e9 },
-  { 3082, 0x801a }, { 3086, 0x771f }, { 3097, 0x9225 }, { 3103, 0xa01b },
-  /* 0x6800 */
-  { 3109, 0xdfa1 }, { 3119, 0x20ca }, { 3124, 0x0602 }, { 3127, 0x738c },
-  { 3135, 0x577f }, { 3147, 0x003b }, { 3152, 0x0bff }, { 3163, 0x00d0 },
-  { 3166, 0x806a }, { 3171, 0x0088 }, { 3173, 0xa1c4 }, { 3179, 0x0029 },
-  { 3182, 0x2a05 }, { 3187, 0x0524 }, { 3191, 0x4009 }, { 3194, 0x1623 },
-  /* 0x6900 */
-  { 3200, 0x6822 }, { 3205, 0x8005 }, { 3208, 0x2011 }, { 3211, 0xa211 },
-  { 3216, 0x0004 }, { 3217, 0x6490 }, { 3222, 0x4849 }, { 3227, 0x1382 },
-  { 3232, 0x23d5 }, { 3240, 0x1930 }, { 3245, 0x2980 }, { 3249, 0x0892 },
-  { 3253, 0x5402 }, { 3257, 0x8811 }, { 3261, 0x2001 }, { 3263, 0xa004 },
-  /* 0x6a00 */
-  { 3266, 0x0400 }, { 3267, 0x8180 }, { 3270, 0x8502 }, { 3274, 0x6022 },
-  { 3278, 0x0090 }, { 3280, 0x0b01 }, { 3284, 0x0022 }, { 3286, 0x1202 },
-  { 3289, 0x4011 }, { 3292, 0x0083 }, { 3295, 0x1a01 }, { 3299, 0x0000 },
-  { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 },
-  /* 0x6b00 */
-  { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x009f }, { 3305, 0x4684 },
-  { 3310, 0x12c8 }, { 3315, 0x0200 }, { 3316, 0x04fc }, { 3323, 0x1a00 },
-  { 3326, 0x2ede }, { 3336, 0x0c4c }, { 3341, 0x0402 }, { 3343, 0x80b8 },
-  { 3348, 0xa826 }, { 3354, 0x0afc }, { 3362, 0x8c02 }, { 3366, 0x2228 },
-  /* 0x6c00 */
-  { 3370, 0xa0e0 }, { 3375, 0x8f7b }, { 3386, 0xc7d6 }, { 3396, 0x2135 },
-  { 3402, 0x06c7 }, { 3409, 0xf8b1 }, { 3418, 0x0713 }, { 3424, 0x6255 },
-  { 3431, 0x936e }, { 3440, 0x8a19 }, { 3446, 0x6efa }, { 3457, 0xfb0e },
-  { 3467, 0x1630 }, { 3472, 0x48f9 }, { 3480, 0xcd2f }, { 3490, 0x7deb },
-  /* 0x6d00 */
-  { 3502, 0x5892 }, { 3508, 0x4e84 }, { 3514, 0x4ca0 }, { 3519, 0x7a2e },
-  { 3528, 0xedea }, { 3539, 0x561e }, { 3547, 0xc649 }, { 3554, 0x1190 },
-  { 3558, 0x5324 }, { 3564, 0xe83a }, { 3572, 0xcfdb }, { 3584, 0x8124 },
-  { 3588, 0x18f1 }, { 3595, 0x6342 }, { 3601, 0x5853 }, { 3608, 0x1a8a },
-  /* 0x6e00 */
-  { 3614, 0x7420 }, { 3619, 0x24d3 }, { 3626, 0xaa3b }, { 3635, 0x0514 },
-  { 3639, 0x6018 }, { 3643, 0x8958 }, { 3649, 0x4800 }, { 3651, 0xc000 },
-  { 3653, 0x8268 }, { 3658, 0x9101 }, { 3662, 0x84a4 }, { 3667, 0x2cd6 },
-  { 3675, 0x8886 }, { 3680, 0xc4ba }, { 3688, 0x0377 }, { 3696, 0x0210 },
-  /* 0x6f00 */
-  { 3698, 0x8244 }, { 3702, 0x0038 }, { 3705, 0xae11 }, { 3712, 0x404a },
-  { 3716, 0x28c0 }, { 3720, 0x5100 }, { 3723, 0x6044 }, { 3727, 0x1514 },
-  { 3732, 0x7310 }, { 3738, 0x1000 }, { 3739, 0x0082 }, { 3741, 0x0248 },
-  { 3744, 0x0205 }, { 3747, 0x4006 }, { 3750, 0xc003 }, { 3754, 0x0000 },
-  /* 0x7000 */
-  { 3754, 0x0000 }, { 3754, 0x0c02 }, { 3757, 0x0008 }, { 3758, 0x0220 },
-  { 3760, 0x9000 }, { 3762, 0x4000 }, { 3763, 0xb800 }, { 3767, 0xd161 },
-  { 3774, 0x4621 }, { 3779, 0x3274 }, { 3786, 0xf800 }, { 3791, 0x3b8a },
-  { 3799, 0x050f }, { 3805, 0x8b00 }, { 3809, 0xbbd0 }, { 3818, 0x2280 },
-  /* 0x7100 */
-  { 3821, 0x0600 }, { 3823, 0x0769 }, { 3830, 0x8040 }, { 3832, 0x0043 },
-  { 3835, 0x5420 }, { 3839, 0x5000 }, { 3841, 0x41d0 }, { 3846, 0x250c },
-  { 3851, 0x8410 }, { 3854, 0x8310 }, { 3858, 0x1101 }, { 3861, 0x0228 },
-  { 3864, 0x4008 }, { 3866, 0x0030 }, { 3868, 0x40a1 }, { 3872, 0x0200 },
-  /* 0x7200 */
-  { 3873, 0x0040 }, { 3874, 0x2000 }, { 3875, 0x1500 }, { 3878, 0xabe3 },
-  { 3888, 0x3180 }, { 3892, 0xaa44 }, { 3898, 0xc2c6 }, { 3905, 0xc624 },
-  { 3911, 0xac13 }, { 3918, 0x8004 }, { 3920, 0xb000 }, { 3923, 0x03d1 },
-  { 3929, 0x611e }, { 3936, 0x4285 }, { 3941, 0xf303 }, { 3949, 0x1d9f },
-  /* 0x7300 */
-  { 3959, 0x440a }, { 3963, 0x78e8 }, { 3971, 0x5e26 }, { 3979, 0xc392 },
-  { 3986, 0x2000 }, { 3987, 0x0085 }, { 3990, 0xb001 }, { 3994, 0x4000 },
-  { 3995, 0x4a90 }, { 4000, 0x8842 }, { 4004, 0xca04 }, { 4009, 0x0c8d },
-  { 4015, 0xa705 }, { 4022, 0x4203 }, { 4026, 0x22a1 }, { 4031, 0x0004 },
-  /* 0x7400 */
-  { 4032, 0x8668 }, { 4038, 0x0c01 }, { 4041, 0x5564 }, { 4048, 0x1079 },
-  { 4054, 0x0002 }, { 4055, 0xdea0 }, { 4063, 0x2000 }, { 4064, 0x40c1 },
-  { 4068, 0x488b }, { 4074, 0x5001 }, { 4077, 0x0380 }, { 4080, 0x0400 },
-  { 4081, 0x0000 }, { 4081, 0x5004 }, { 4084, 0xc05d }, { 4091, 0x80d0 },
-  /* 0x7500 */
-  { 4095, 0xa010 }, { 4098, 0x970a }, { 4105, 0xbb20 }, { 4112, 0x4daf },
-  { 4122, 0xd921 }, { 4129, 0x1e10 }, { 4134, 0x0460 }, { 4137, 0x8314 },
-  { 4142, 0x8848 }, { 4146, 0xa6d6 }, { 4155, 0xd83b }, { 4164, 0x733f },
-  { 4175, 0x27bc }, { 4184, 0x4974 }, { 4191, 0x0ddc }, { 4199, 0x9213 },
-  /* 0x7600 */
-  { 4205, 0x142b }, { 4211, 0x8ba1 }, { 4218, 0x2e75 }, { 4227, 0xd139 },
-  { 4235, 0x3009 }, { 4239, 0x5050 }, { 4243, 0x8808 }, { 4246, 0x6900 },
-  { 4250, 0x49d4 }, { 4257, 0x024a }, { 4261, 0x4010 }, { 4263, 0x8016 },
-  { 4267, 0xe564 }, { 4275, 0x89d7 }, { 4284, 0xc020 }, { 4287, 0x5316 },
-  /* 0x7700 */
-  { 4294, 0x2b92 }, { 4301, 0x8600 }, { 4304, 0xa345 }, { 4311, 0x15e0 },
-  { 4317, 0x008b }, { 4321, 0x0c03 }, { 4325, 0x196e }, { 4333, 0xe200 },
-  { 4337, 0x7031 }, { 4343, 0x8006 }, { 4346, 0x16a5 }, { 4353, 0xa829 },
-  { 4359, 0x2000 }, { 4360, 0x1880 }, { 4363, 0x7aac }, { 4372, 0xe148 },
-  /* 0x7800 */
-  { 4378, 0x3207 }, { 4384, 0xb5d6 }, { 4394, 0x32e8 }, { 4401, 0x5f91 },
-  { 4410, 0x50a1 }, { 4415, 0x20e5 }, { 4421, 0x7c00 }, { 4426, 0x1080 },
-  { 4428, 0x7280 }, { 4433, 0x9d8a }, { 4441, 0x00aa }, { 4445, 0x421f },
-  { 4452, 0x0e22 }, { 4457, 0x0231 }, { 4461, 0x1100 }, { 4463, 0x0494 },
-  /* 0x7900 */
-  { 4467, 0x0022 }, { 4469, 0x4008 }, { 4471, 0x0010 }, { 4472, 0x5c10 },
-  { 4477, 0x0343 }, { 4482, 0xfcc8 }, { 4491, 0xa1a5 }, { 4498, 0x0580 },
-  { 4501, 0x8433 }, { 4507, 0x0400 }, { 4508, 0x0080 }, { 4509, 0x6e08 },
-  { 4515, 0x2a4b }, { 4522, 0x8126 }, { 4527, 0xaad8 }, { 4535, 0x2901 },
-  /* 0x7a00 */
-  { 4539, 0x684d }, { 4546, 0x4490 }, { 4550, 0x0009 }, { 4552, 0xba88 },
-  { 4559, 0x0040 }, { 4560, 0x0082 }, { 4562, 0x0000 }, { 4562, 0x87d1 },
-  { 4570, 0x215b }, { 4577, 0xb1e6 }, { 4586, 0x3161 }, { 4592, 0x8008 },
-  { 4594, 0x0800 }, { 4595, 0xc240 }, { 4599, 0xa069 }, { 4605, 0xa600 },
-  /* 0x7b00 */
-  { 4609, 0x8d58 }, { 4616, 0x4a32 }, { 4622, 0x5d71 }, { 4631, 0x550a },
-  { 4637, 0x9aa0 }, { 4643, 0x2d57 }, { 4652, 0x4005 }, { 4655, 0x4aa6 },
-  { 4662, 0x2021 }, { 4665, 0x30b1 }, { 4671, 0x3fc6 }, { 4681, 0x0112 },
-  { 4684, 0x10c2 }, { 4688, 0x260a }, { 4693, 0x4462 }, { 4698, 0x5082 },
-  /* 0x7c00 */
-  { 4702, 0x9880 }, { 4706, 0x8040 }, { 4708, 0x04c0 }, { 4711, 0x8100 },
-  { 4713, 0x2003 }, { 4716, 0x0000 }, { 4716, 0x0000 }, { 4716, 0x3818 },
-  { 4721, 0x0200 }, { 4722, 0xf1a6 }, { 4731, 0x4434 }, { 4736, 0x720e },
-  { 4743, 0x35a2 }, { 4750, 0x92e0 }, { 4756, 0x8101 }, { 4759, 0x0900 },
-  /* 0x7d00 */
-  { 4761, 0x0400 }, { 4762, 0x0000 }, { 4762, 0x8885 }, { 4767, 0x0000 },
-  { 4767, 0x0000 }, { 4767, 0x0000 }, { 4767, 0x4000 }, { 4768, 0x0080 },
-  { 4769, 0x0000 }, { 4769, 0x0000 }, { 4769, 0x4040 }, { 4771, 0x0000 },
-  { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 },
-  /* 0x7e00 */
-  { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0800 },
-  { 4772, 0x0082 }, { 4774, 0x0000 }, { 4774, 0x0000 }, { 4774, 0x0000 },
-  { 4774, 0x0004 }, { 4775, 0x8800 }, { 4777, 0xbfff }, { 4792, 0xe7ef },
-  { 4805, 0xffff }, { 4821, 0xffbf }, { 4836, 0xefef }, { 4850, 0xfdff },
-  /* 0x7f00 */
-  { 4865, 0xfbff }, { 4880, 0xbffe }, { 4894, 0xffff }, { 4910, 0x057f },
-  { 4919, 0x0034 }, { 4922, 0x85b3 }, { 4930, 0x4706 }, { 4936, 0x4216 },
-  { 4941, 0x5402 }, { 4945, 0xe410 }, { 4950, 0x8092 }, { 4954, 0xb305 },
-  { 4961, 0x5422 }, { 4966, 0x8130 }, { 4970, 0x4263 }, { 4976, 0x180b },
-  /* 0x8000 */
-  { 4981, 0x387b }, { 4990, 0x13f5 }, { 4999, 0x07e5 }, { 5007, 0xa9ea },
-  { 5016, 0x3c4c }, { 5023, 0x0514 }, { 5027, 0x0600 }, { 5029, 0x8002 },
-  { 5031, 0x1ad9 }, { 5039, 0xbd48 }, { 5047, 0xee37 }, { 5058, 0xf496 },
-  { 5067, 0x705f }, { 5076, 0x7ec0 }, { 5084, 0xbfb2 }, { 5095, 0x355f },
-  /* 0x8100 */
-  { 5105, 0xe644 }, { 5112, 0x455f }, { 5121, 0x9000 }, { 5123, 0x4146 },
-  { 5128, 0x1d40 }, { 5133, 0x063b }, { 5140, 0x62a1 }, { 5146, 0xfe13 },
-  { 5156, 0x8505 }, { 5161, 0x3902 }, { 5166, 0x0548 }, { 5170, 0x0c08 },
-  { 5173, 0x144f }, { 5180, 0x0000 }, { 5180, 0x3488 }, { 5185, 0x5818 },
-  /* 0x8200 */
-  { 5190, 0x3077 }, { 5198, 0xd815 }, { 5205, 0xbd0e }, { 5214, 0x4bfb },
-  { 5225, 0x8a90 }, { 5230, 0x8500 }, { 5233, 0xc100 }, { 5236, 0xe61d },
-  { 5245, 0xed14 }, { 5253, 0xb386 }, { 5261, 0xff72 }, { 5273, 0x639b },
-  { 5282, 0xfd92 }, { 5292, 0xd9be }, { 5303, 0x887b }, { 5311, 0x0a92 },
-  /* 0x8300 */
-  { 5316, 0xd3fe }, { 5328, 0x1cb2 }, { 5335, 0xb980 }, { 5341, 0x177a },
-  { 5350, 0x82c9 }, { 5356, 0xdc17 }, { 5365, 0xfffb }, { 5380, 0x3980 },
-  { 5385, 0x4260 }, { 5389, 0x590c }, { 5395, 0x0f01 }, { 5400, 0x37df },
-  { 5412, 0x94a3 }, { 5419, 0xb150 }, { 5425, 0x0623 }, { 5430, 0x2307 },
-  /* 0x8400 */
-  { 5436, 0xf85a }, { 5445, 0x3102 }, { 5449, 0x01f0 }, { 5454, 0x3102 },
-  { 5458, 0x0040 }, { 5459, 0x1e82 }, { 5465, 0x3a0a }, { 5471, 0x056a },
-  { 5477, 0x5b84 }, { 5484, 0x1280 }, { 5487, 0x8002 }, { 5489, 0xa714 },
-  { 5496, 0x2612 }, { 5501, 0xa04b }, { 5507, 0x1069 }, { 5512, 0x9001 },
-  /* 0x8500 */
-  { 5515, 0x1000 }, { 5516, 0x848a }, { 5521, 0x1802 }, { 5524, 0x3f80 },
-  { 5531, 0x0708 }, { 5535, 0x4240 }, { 5538, 0x0110 }, { 5540, 0x4e14 },
-  { 5546, 0x80b0 }, { 5550, 0x1800 }, { 5552, 0xc510 }, { 5557, 0x0281 },
-  { 5560, 0x8202 }, { 5563, 0x1029 }, { 5567, 0x0210 }, { 5569, 0x8800 },
-  /* 0x8600 */
-  { 5571, 0x0020 }, { 5572, 0x0042 }, { 5574, 0x0280 }, { 5576, 0x1100 },
-  { 5578, 0xe000 }, { 5581, 0x4413 }, { 5586, 0x5804 }, { 5590, 0xfe02 },
-  { 5598, 0x3c07 }, { 5605, 0x3028 }, { 5609, 0x9798 }, { 5617, 0x0473 },
-  { 5623, 0xced1 }, { 5632, 0xcb13 }, { 5640, 0x6210 }, { 5644, 0x431f },
-  /* 0x8700 */
-  { 5652, 0x278d }, { 5660, 0x55ac }, { 5668, 0x422e }, { 5674, 0xc892 },
-  { 5680, 0x5380 }, { 5685, 0x0288 }, { 5688, 0x4039 }, { 5693, 0x7851 },
-  { 5700, 0x292c }, { 5706, 0x8088 }, { 5709, 0xb900 }, { 5714, 0x2428 },
-  { 5718, 0x0c41 }, { 5722, 0x080e }, { 5726, 0x4421 }, { 5730, 0x4200 },
-  /* 0x8800 */
-  { 5732, 0x0408 }, { 5734, 0x0868 }, { 5738, 0x0006 }, { 5740, 0x1204 },
-  { 5743, 0x3031 }, { 5748, 0x0290 }, { 5751, 0x5b3e }, { 5761, 0xe085 },
-  { 5767, 0x2936 }, { 5774, 0x1044 }, { 5777, 0x2814 }, { 5781, 0x1082 },
-  { 5784, 0x4266 }, { 5790, 0x8334 }, { 5796, 0x013c }, { 5801, 0x531b },
-  /* 0x8900 */
-  { 5809, 0x0404 }, { 5811, 0x0e0d }, { 5817, 0x0c22 }, { 5821, 0x0051 },
-  { 5824, 0x0012 }, { 5826, 0xc000 }, { 5828, 0x0040 }, { 5829, 0x8800 },
-  { 5831, 0x004a }, { 5834, 0x0000 }, { 5834, 0x0000 }, { 5834, 0x0000 },
-  { 5834, 0xdff6 }, { 5847, 0x5447 }, { 5854, 0x8868 }, { 5859, 0x0008 },
-  /* 0x8a00 */
-  { 5860, 0x0081 }, { 5862, 0x0000 }, { 5862, 0x0000 }, { 5862, 0x4000 },
-  { 5863, 0x0100 }, { 5864, 0x0000 }, { 5864, 0x0000 }, { 5864, 0x0200 },
-  { 5865, 0x0600 }, { 5867, 0x0008 }, { 5868, 0x0000 }, { 5868, 0x0000 },
-  { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 },
-  /* 0x8b00 */
-  { 5868, 0x0080 }, { 5869, 0x0000 }, { 5869, 0x0040 }, { 5870, 0x0000 },
-  { 5870, 0x0000 }, { 5870, 0x0000 }, { 5870, 0x1040 }, { 5872, 0x0000 },
-  { 5872, 0x0000 }, { 5872, 0x0000 }, { 5872, 0xefff }, { 5887, 0xf7fd },
-  { 5901, 0xff7f }, { 5916, 0xfffe }, { 5931, 0xfbff }, { 5946, 0xffff },
-  /* 0x8c00 */
-  { 5962, 0xfdff }, { 5977, 0xbfff }, { 5992, 0xffff }, { 6008, 0x00ff },
-  { 6016, 0x12c2 }, { 6021, 0x0420 }, { 6023, 0x0c06 }, { 6027, 0x0708 },
-  { 6031, 0x1624 }, { 6036, 0x0110 }, { 6038, 0x0000 }, { 6038, 0x0000 },
-  { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 },
-  /* 0x8d00 */
-  { 6038, 0x0000 }, { 6038, 0xe000 }, { 6041, 0xfffe }, { 6056, 0xffff },
-  { 6072, 0xffff }, { 6088, 0x7f79 }, { 6100, 0x28df }, { 6109, 0x00f9 },
-  { 6115, 0x0c32 }, { 6120, 0x8012 }, { 6123, 0x0008 }, { 6124, 0xd53a },
-  { 6133, 0xd858 }, { 6140, 0xecc2 }, { 6148, 0x9d18 }, { 6155, 0x2fa8 },
-  /* 0x8e00 */
-  { 6163, 0x9620 }, { 6168, 0xe010 }, { 6172, 0xd60c }, { 6179, 0x2622 },
-  { 6184, 0x0f97 }, { 6193, 0x0206 }, { 6196, 0xb240 }, { 6201, 0x9055 },
-  { 6207, 0x80a2 }, { 6211, 0x5011 }, { 6215, 0x9800 }, { 6218, 0x0404 },
-  { 6220, 0x4000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 },
-  /* 0x8f00 */
-  { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 },
-  { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0xfbc0 }, { 6230, 0xffff },
-  { 6246, 0xeffe }, { 6260, 0xdffb }, { 6274, 0x0b08 }, { 6278, 0x6243 },
-  { 6284, 0x41b6 }, { 6291, 0xfb3b }, { 6303, 0x6f74 }, { 6313, 0x2389 },
-  /* 0x9000 */
-  { 6319, 0xae7f }, { 6331, 0xecd7 }, { 6342, 0xe047 }, { 6349, 0x5960 },
-  { 6355, 0xa096 }, { 6361, 0x098f }, { 6368, 0x612c }, { 6374, 0xa030 },
-  { 6378, 0x090d }, { 6383, 0x2aaa }, { 6390, 0xd44e }, { 6398, 0x4f7b },
-  { 6409, 0xc4b2 }, { 6416, 0x388b }, { 6423, 0xa9c6 }, { 6431, 0x6110 },
-  /* 0x9100 */
-  { 6435, 0x0014 }, { 6437, 0x4200 }, { 6439, 0x800c }, { 6442, 0x0202 },
-  { 6444, 0xfe48 }, { 6453, 0x6485 }, { 6459, 0xd63e }, { 6469, 0xe3f7 },
-  { 6481, 0x3aa0 }, { 6487, 0x0c07 }, { 6492, 0xe40c }, { 6498, 0x0430 },
-  { 6501, 0xf680 }, { 6508, 0x1002 }, { 6510, 0x0000 }, { 6510, 0x0000 },
-  /* 0x9200 */
-  { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 },
-  { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0010 },
-  { 6511, 0x4000 }, { 6512, 0x0000 }, { 6512, 0x4000 }, { 6513, 0x0000 },
-  { 6513, 0x0100 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 },
-  /* 0x9300 */
-  { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x4000 },
-  { 6515, 0x0000 }, { 6515, 0x0000 }, { 6515, 0x0400 }, { 6516, 0x0000 },
-  { 6516, 0x8000 }, { 6517, 0x0000 }, { 6517, 0x0000 }, { 6517, 0x0000 },
-  { 6517, 0x0400 }, { 6518, 0x0040 }, { 6519, 0x0000 }, { 6519, 0x0000 },
-  /* 0x9400 */
-  { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x4000 },
-  { 6520, 0x0000 }, { 6520, 0x0000 }, { 6520, 0x0800 }, { 6521, 0x0000 },
-  { 6521, 0xffe0 }, { 6532, 0xfebd }, { 6545, 0xffff }, { 6561, 0xffff },
-  { 6577, 0x7f7f }, { 6591, 0xfbe7 }, { 6604, 0xffbf }, { 6619, 0xf7ff },
-  /* 0x9500 */
-  { 6634, 0xffff }, { 6650, 0xefff }, { 6665, 0xff7e }, { 6679, 0xdff7 },
-  { 6693, 0xf6f7 }, { 6706, 0xfbdf }, { 6720, 0xbffe }, { 6734, 0x804f },
-  { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 },
-  { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0xef00 }, { 6747, 0x7fff },
-  /* 0x9600 */
-  { 6762, 0xff7f }, { 6777, 0xb6f7 }, { 6789, 0x4406 }, { 6793, 0xb87e },
-  { 6803, 0x3bf5 }, { 6814, 0x8831 }, { 6819, 0x1796 }, { 6827, 0x00f4 },
-  { 6832, 0xa960 }, { 6838, 0x1391 }, { 6844, 0x0080 }, { 6845, 0x7249 },
-  { 6852, 0xf2f3 }, { 6863, 0x0024 }, { 6865, 0x8701 }, { 6870, 0x42c8 },
-  /* 0x9700 */
-  { 6875, 0xe3d3 }, { 6885, 0x5048 }, { 6889, 0x2400 }, { 6891, 0x4305 },
-  { 6896, 0x0000 }, { 6896, 0x4a4c }, { 6902, 0x0227 }, { 6907, 0x1058 },
-  { 6911, 0x2820 }, { 6914, 0x0116 }, { 6918, 0xa809 }, { 6923, 0x0014 },
-  { 6925, 0x0000 }, { 6925, 0x0000 }, { 6925, 0x3ec0 }, { 6932, 0x0068 },
-  /* 0x9800 */
-  { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 },
-  { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0xffe0 },
-  { 6946, 0xb7ff }, { 6960, 0xfddb }, { 6973, 0x00f7 }, { 6980, 0x0000 },
-  { 6980, 0x4000 }, { 6981, 0xc72e }, { 6990, 0x0180 }, { 6992, 0x0000 },
-  /* 0x9900 */
-  { 6992, 0x2000 }, { 6993, 0x0001 }, { 6994, 0x4000 }, { 6995, 0x0000 },
-  { 6995, 0x0000 }, { 6995, 0x0030 }, { 6997, 0xffa8 }, { 7008, 0xb4f7 },
-  { 7019, 0xadf3 }, { 7030, 0x03ff }, { 7040, 0x0120 }, { 7042, 0x0000 },
-  { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 },
-  /* 0x9a00 */
-  { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 },
-  { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0xf000 }, { 7046, 0xfffb },
-  { 7061, 0x9df7 }, { 7073, 0xfdcf }, { 7086, 0x01bf }, { 7094, 0x15c3 },
-  { 7101, 0x1827 }, { 7107, 0x810a }, { 7111, 0xa842 }, { 7116, 0x0a00 },
-  /* 0x9b00 */
-  { 7118, 0x8108 }, { 7121, 0x8008 }, { 7123, 0x8008 }, { 7125, 0x1804 },
-  { 7128, 0xa3be }, { 7138, 0x0012 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  /* 0x9c00 */
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x9000 },
-  { 7142, 0x69e6 }, { 7151, 0xdc37 }, { 7161, 0x6bff }, { 7174, 0x3dff },
-  { 7187, 0xfcf8 }, { 7198, 0xf3f9 }, { 7210, 0x0004 },
-};
-static const Summary16 gb2312_uni2indx_page9e[27] = {
-  /* 0x9e00 */
-  { 7211, 0x0000 }, { 7211, 0x8000 }, { 7212, 0xbf6f }, { 7225, 0xe7ee },
-  { 7237, 0xdffe }, { 7251, 0x5da2 }, { 7259, 0x3fd8 }, { 7269, 0xc00b },
-  { 7274, 0x0984 }, { 7278, 0xa00c }, { 7282, 0x0040 }, { 7283, 0x6910 },
-  { 7288, 0xe210 }, { 7293, 0xb912 }, { 7300, 0x86a5 }, { 7307, 0x5a00 },
-  /* 0x9f00 */
-  { 7311, 0x6800 }, { 7314, 0x0289 }, { 7318, 0x9005 }, { 7322, 0x6a80 },
-  { 7327, 0x0010 }, { 7328, 0x0003 }, { 7330, 0x0000 }, { 7330, 0x8000 },
-  { 7331, 0x1ff9 }, { 7342, 0x8e00 }, { 7346, 0x0001 },
-};
-static const Summary16 gb2312_uni2indx_pageff[15] = {
-  /* 0xff00 */
-  { 7347, 0xfffe }, { 7362, 0xffff }, { 7378, 0xffff }, { 7394, 0xffff },
-  { 7410, 0xffff }, { 7426, 0x7fff }, { 7441, 0x0000 }, { 7441, 0x0000 },
-  { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 },
-  { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x002b },
-};
-
-static int
-gb2312_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0460)
-      summary = &gb2312_uni2indx_page00[(wc>>4)];
-    else if (wc >= 0x2000 && wc < 0x2650)
-      summary = &gb2312_uni2indx_page20[(wc>>4)-0x200];
-    else if (wc >= 0x3000 && wc < 0x3230)
-      summary = &gb2312_uni2indx_page30[(wc>>4)-0x300];
-    else if (wc >= 0x4e00 && wc < 0x9cf0)
-      summary = &gb2312_uni2indx_page4e[(wc>>4)-0x4e0];
-    else if (wc >= 0x9e00 && wc < 0x9fb0)
-      summary = &gb2312_uni2indx_page9e[(wc>>4)-0x9e0];
-    else if (wc >= 0xff00 && wc < 0xfff0)
-      summary = &gb2312_uni2indx_pageff[(wc>>4)-0xff0];
-    if (summary) {
-      unsigned short used = summary->used;
-      unsigned int i = wc & 0x0f;
-      if (used & ((unsigned short) 1 << i)) {
-        unsigned short c;
-        /* Keep in `used' only the bits 0..i-1. */
-        used &= ((unsigned short) 1 << i) - 1;
-        /* Add `summary->indx' and the number of bits set in `used'. */
-        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-        used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-        used = (used & 0x00ff) + (used >> 8);
-        c = gb2312_2charset[summary->indx + used];
-        r[0] = (c >> 8); r[1] = (c & 0xff);
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/gbk_tab_to_h.c b/common/fltk/src/xutf8/lcUniConv/gbk_tab_to_h.c
deleted file mode 100644
index 0df9637..0000000
--- a/common/fltk/src/xutf8/lcUniConv/gbk_tab_to_h.c
+++ /dev/null
@@ -1,1020 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cjk_tab_to_h.c,v 1.2 2000/12/04 18:49:31 dawes Exp $ */
-
-/* 2009-02-17 <sparkaround@gmail.com>: Create gbk_tab_to_h.c from 
- * cjk_tab_to_h.c to generate GBK(cp936ext) table correctly.
- *
- *
- * Generates a CJK character set table from a .TXT table as found on
- * ftp.unicode.org or in the X nls directory.
- * Examples:
- *
- *   ./gbk_tab_to_h CP936EXT cp936ext > cp936ext.h < CP936EXT.TXT
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-
-typedef struct {
-  int start;
-  int end;
-} Block;
-
-typedef struct {
-  int rows;    /* number of possible values for the 1st byte */
-  int cols;    /* number of possible values for the 2nd byte */
-  int (*row_byte) (int row); /* returns the 1st byte value for a given row */
-  int (*col_byte) (int col); /* returns the 2nd byte value for a given col */
-  int (*byte_row) (int byte); /* converts a 1st byte value to a row, else -1 */
-  int (*byte_col) (int byte); /* converts a 2nd byte value to a col, else -1 */
-  const char* check_row_expr; /* format string for 1st byte value checking */
-  const char* check_col_expr; /* format string for 2nd byte value checking */
-  const char* byte_row_expr; /* format string for 1st byte value to row */
-  const char* byte_col_expr; /* format string for 2nd byte value to col */
-  int** charset2uni; /* charset2uni[0..rows-1][0..cols-1] is valid */
-  /* You'll understand the terms "row" and "col" when you buy Ken Lunde's book.
-     Once a row is fixed, choosing a "col" is the same as choosing a "cell". */
-  int* charsetpage; /* charsetpage[0..rows]: how large is a page for a row */
-  int ncharsetblocks;
-  Block* charsetblocks; /* blocks[0..nblocks-1] */
-  int* uni2charset; /* uni2charset[0x0000..0xffff] */
-} Encoding;
-
-/*
- * Outputs the file title.
- */
-static void output_title (const char *charsetname)
-{
-  printf("\n");
-  printf("/*\n");
-  printf(" * %s\n", charsetname);
-  printf(" */\n");
-  printf("\n");
-}
-
-/*
- * Reads the charset2uni table from standard input.
- */
-static void read_table (Encoding* enc)
-{
-  int row, col, i, i1, i2, c, j;
-
-  enc->charset2uni = (int**) malloc(enc->rows*sizeof(int*));
-  for (row = 0; row < enc->rows; row++)
-    enc->charset2uni[row] = (int*) malloc(enc->cols*sizeof(int));
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++)
-      enc->charset2uni[row][col] = 0xfffd;
-
-  c = getc(stdin);
-  ungetc(c,stdin);
-  if (c == '#') {
-    /* Read a unicode.org style .TXT file. */
-    for (;;) {
-      c = getc(stdin);
-      if (c == EOF)
-        break;
-      if (c == '\n' || c == ' ' || c == '\t')
-        continue;
-      if (c == '#') {
-        do { c = getc(stdin); } while (!(c == EOF || c == '\n'));
-        continue;
-      }
-      ungetc(c,stdin);
-      if (scanf("0x%x", &j) != 1)
-        exit(1);
-      i1 = j >> 8;
-      i2 = j & 0xff;
-      row = enc->byte_row(i1);
-      col = enc->byte_col(i2);
-      if (row < 0 || col < 0) {
-        fprintf(stderr, "lost entry for %02x %02x\n", i1, i2);
-        exit(1);
-      }
-      if (scanf(" 0x%x", &enc->charset2uni[row][col]) != 1)
-        exit(1);
-    }
-  } else {
-    /* Read a table of hexadecimal Unicode values. */
-    for (i1 = 32; i1 < 132; i1++)
-      for (i2 = 32; i2 < 132; i2++) {
-        i = scanf("%x", &j);
-        if (i == EOF)
-          goto read_done;
-        if (i != 1)
-          exit(1);
-        if (j < 0 || j == 0xffff)
-          j = 0xfffd;
-        if (j != 0xfffd) {
-          if (enc->byte_row(i1) < 0 || enc->byte_col(i2) < 0) {
-            fprintf(stderr, "lost entry at %02x %02x\n", i1, i2);
-            exit (1);
-          }
-          enc->charset2uni[enc->byte_row(i1)][enc->byte_col(i2)] = j;
-        }
-      }
-   read_done: ;
-  }
-}
-
-/*
- * Computes the charsetpage[0..rows] array.
- */
-static void find_charset2uni_pages (Encoding* enc)
-{
-  int row, col;
-
-  enc->charsetpage = (int*) malloc((enc->rows+1)*sizeof(int));
-
-  for (row = 0; row <= enc->rows; row++)
-    enc->charsetpage[row] = 0;
-
-  for (row = 0; row < enc->rows; row++) {
-    int used = 0;
-    for (col = 0; col < enc->cols; col++)
-      if (enc->charset2uni[row][col] != 0xfffd)
-        used = col+1;
-    enc->charsetpage[row] = used;
-  }
-}
-
-/*
- * Fills in nblocks and blocks.
- */
-static void find_charset2uni_blocks (Encoding* enc)
-{
-  int n, row, lastrow;
-
-  enc->charsetblocks = (Block*) malloc(enc->rows*sizeof(Block));
-
-  n = 0;
-  for (row = 0; row < enc->rows; row++)
-    if (enc->charsetpage[row] > 0 && (row == 0 || enc->charsetpage[row-1] == 0)) {
-      for (lastrow = row; enc->charsetpage[lastrow+1] > 0; lastrow++);
-      enc->charsetblocks[n].start = row * enc->cols;
-      enc->charsetblocks[n].end = lastrow * enc->cols + enc->charsetpage[lastrow];
-      n++;
-    }
-  enc->ncharsetblocks = n;
-}
-
-/*
- * Outputs the charset to unicode table and function.
- */
-static void output_charset2uni (const char* name, Encoding* enc)
-{
-  int row, col, lastrow, col_max, i, i1_min, i1_max;
-
-  find_charset2uni_pages(enc);
-
-  find_charset2uni_blocks(enc);
-
-  for (row = 0; row < enc->rows; row++)
-    if (enc->charsetpage[row] > 0) {
-      if (row == 0 || enc->charsetpage[row-1] == 0) {
-        /* Start a new block. */
-        for (lastrow = row; enc->charsetpage[lastrow+1] > 0; lastrow++);
-        printf("static const unsigned short %s_2uni_page%02x[%d] = {\n",
-               name, enc->row_byte(row),
-               (lastrow-row) * enc->cols + enc->charsetpage[lastrow]);
-      }
-      printf("  /""* 0x%02x *""/\n ", enc->row_byte(row));
-      col_max = (enc->charsetpage[row+1] > 0 ? enc->cols : enc->charsetpage[row]);
-      for (col = 0; col < col_max; col++) {
-        printf(" 0x%04x,", enc->charset2uni[row][col]);
-        if ((col % 8) == 7 && (col+1 < col_max)) printf("\n ");
-      }
-      printf("\n");
-      if (enc->charsetpage[row+1] == 0) {
-        /* End a block. */
-        printf("};\n");
-      }
-    }
-  printf("\n");
-
-  printf("static int\n");
-  printf("%s_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)\n", name);
-  printf("{\n");
-  printf("  unsigned char c1 = s[0];\n");
-  printf("  if (");
-  for (i = 0; i < enc->ncharsetblocks; i++) {
-    i1_min = enc->row_byte(enc->charsetblocks[i].start / enc->cols);
-    i1_max = enc->row_byte((enc->charsetblocks[i].end-1) / enc->cols);
-    if (i > 0)
-      printf(" || ");
-    if (i1_min == i1_max)
-      printf("(c1 == 0x%02x)", i1_min);
-    else
-      printf("(c1 >= 0x%02x && c1 <= 0x%02x)", i1_min, i1_max);
-  }
-  printf(") {\n");
-  printf("    if (n >= 2) {\n");
-  printf("      unsigned char c2 = s[1];\n");
-  printf("      if (");
-  printf(enc->check_col_expr, "c2");
-  printf(") {\n");
-  printf("        unsigned int i = %d * (", enc->cols);
-  printf(enc->byte_row_expr, "c1");
-  printf(") + (");
-  printf(enc->byte_col_expr, "c2");
-  printf(");\n");
-  printf("        unsigned short wc = 0xfffd;\n");
-  for (i = 0; i < enc->ncharsetblocks; i++) {
-    printf("        ");
-    if (i > 0)
-      printf("} else ");
-    if (i < enc->ncharsetblocks-1)
-      printf("if (i < %d) ", enc->charsetblocks[i+1].start);
-    printf("{\n");
-    printf("          if (i < %d)\n", enc->charsetblocks[i].end);
-    printf("            wc = %s_2uni_page%02x[i", name, enc->row_byte(enc->charsetblocks[i].start / enc->cols));
-    if (enc->charsetblocks[i].start > 0)
-      printf("-%d", enc->charsetblocks[i].start);
-    printf("];\n");
-  }
-  printf("        }\n");
-  printf("        if (wc != 0xfffd) {\n");
-  printf("          *pwc = (ucs4_t) wc;\n");
-  printf("          return 2;\n");
-  printf("        }\n");
-  printf("      }\n");
-  printf("      return RET_ILSEQ;\n");
-  printf("    }\n");
-  printf("    return RET_TOOFEW(0);\n");
-  printf("  }\n");
-  printf("  return RET_ILSEQ;\n");
-  printf("}\n");
-  printf("\n");
-}
-
-/*
- * Computes the uni2charset[0x0000..0xffff] array.
- */
-static void invert (Encoding* enc)
-{
-  int row, col, j;
-
-  enc->uni2charset = (int*) malloc(0x10000*sizeof(int));
-
-  for (j = 0; j < 0x10000; j++)
-    enc->uni2charset[j] = 0;
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        enc->uni2charset[j] = 0x100 * enc->row_byte(row) + enc->col_byte(col);
-    }
-}
-
-/*
- * Outputs the unicode to charset table and function, using a linear array.
- * (Suitable if the table is dense.)
- */
-static void output_uni2charset_dense (const char* name, Encoding* enc)
-{
-  /* Like in 8bit_tab_to_h.c */
-  bool pages[0x100];
-  int line[0x2000];
-  int tableno;
-  struct { int minline; int maxline; int usecount; } tables[0x2000];
-  bool first;
-  int row, col, j, p, j1, j2, t;
-
-  for (p = 0; p < 0x100; p++)
-    pages[p] = false;
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        pages[j>>8] = true;
-    }
-  for (j1 = 0; j1 < 0x2000; j1++) {
-    bool all_invalid = true;
-    for (j2 = 0; j2 < 8; j2++) {
-      j = 8*j1+j2;
-      if (enc->uni2charset[j] != 0)
-        all_invalid = false;
-    }
-    if (all_invalid)
-      line[j1] = -1;
-    else
-      line[j1] = 0;
-  }
-  tableno = 0;
-  for (j1 = 0; j1 < 0x2000; j1++) {
-    if (line[j1] >= 0) {
-      if (tableno > 0
-          && ((j1 > 0 && line[j1-1] == tableno-1)
-              || ((tables[tableno-1].maxline >> 5) == (j1 >> 5)
-                  && j1 - tables[tableno-1].maxline <= 8))) {
-        line[j1] = tableno-1;
-        tables[tableno-1].maxline = j1;
-      } else {
-        tableno++;
-        line[j1] = tableno-1;
-        tables[tableno-1].minline = tables[tableno-1].maxline = j1;
-      }
-    }
-  }
-  for (t = 0; t < tableno; t++) {
-    tables[t].usecount = 0;
-    j1 = 8*tables[t].minline;
-    j2 = 8*(tables[t].maxline+1);
-    for (j = j1; j < j2; j++)
-      if (enc->uni2charset[j] != 0)
-        tables[t].usecount++;
-  }
-  {
-    p = -1;
-    for (t = 0; t < tableno; t++)
-      if (tables[t].usecount > 1) {
-        /* p = tables[t].minline >> 5; */
-        p = tables[t].minline ;
-        /* printf("static const unsigned short %s_page%02x[%d] = {\n", name, p, 8*(tables[t].maxline-tables[t].minline+1)); */
-        printf("static const unsigned short %s_page%04x[%d] = {\n", name, p, 8*(tables[t].maxline-tables[t].minline+1));
-        for (j1 = tables[t].minline; j1 <= tables[t].maxline; j1++) {
-          if ((j1 % 0x20) == 0 && j1 > tables[t].minline)
-            printf("  /* 0x%04x */\n", 8*j1);
-          printf(" ");
-          for (j2 = 0; j2 < 8; j2++) {
-            j = 8*j1+j2;
-            printf(" 0x%04x,", enc->uni2charset[j]);
-          }
-          printf(" /*0x%02x-0x%02x*/\n", 8*(j1 % 0x20), 8*(j1 % 0x20)+7);
-        }
-        printf("};\n");
-      }
-    if (p >= 0)
-      printf("\n");
-  }
-  printf("static int\n%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", name);
-  printf("{\n");
-  printf("  if (n >= 2) {\n");
-  printf("    unsigned short c = 0;\n");
-  first = true;
-  for (j1 = 0; j1 < 0x2000;) {
-    t = line[j1];
-    for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++);
-    if (t >= 0) {
-      if (j1 != tables[t].minline) abort();
-      if (j2 > tables[t].maxline+1) abort();
-      j2 = tables[t].maxline+1;
-      if (first)
-        printf("    ");
-      else
-        printf("    else ");
-      first = false;
-      if (tables[t].usecount == 0) abort();
-      if (tables[t].usecount == 1) {
-        if (j2 != j1+1) abort();
-        for (j = 8*j1; j < 8*j2; j++)
-          if (enc->uni2charset[j] != 0) {
-            printf("if (wc == 0x%04x)\n      c = 0x%02x;\n", j, enc->uni2charset[j]);
-            break;
-          }
-      } else {
-        if (j1 == 0) {
-          printf("if (wc < 0x%04x)", 8*j2);
-        } else {
-          printf("if (wc >= 0x%04x && wc < 0x%04x)", 8*j1, 8*j2);
-        }
-        /* printf("\n      c = %s_page%02x[wc", name, j1 >> 5); */
-        printf("\n      c = %s_page%04x[wc", name, j1);
-        if (tables[t].minline > 0)
-          printf("-0x%04x", 8*j1);
-        printf("];\n");
-      }
-    }
-    j1 = j2;
-  }
-  printf("    if (c != 0) {\n");
-  printf("      r[0] = (c >> 8); r[1] = (c & 0xff);\n");
-  printf("      return 2;\n");
-  printf("    }\n");
-  printf("    return RET_ILSEQ;\n");
-  printf("  }\n");
-  printf("  return RET_TOOSMALL;\n");
-  printf("}\n");
-}
-
-/*
- * Outputs the unicode to charset table and function, using a packed array.
- * (Suitable if the table is sparse.)
- */
-static void output_uni2charset_sparse (const char* name, Encoding* enc)
-{
-  bool pages[0x100];
-  Block pageblocks[0x100]; int npageblocks;
-  int indx2charset[0x10000];
-  int summary_indx[0x1000];
-  int summary_used[0x1000];
-  int i, row, col, j, p, j1, j2, indx;
-
-  /* Fill pages[0x100]. */
-  for (p = 0; p < 0x100; p++)
-    pages[p] = false;
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        pages[j>>8] = true;
-    }
-
-#if 0
-  for (p = 0; p < 0x100; p++)
-    if (pages[p]) {
-      printf("static const unsigned short %s_page%02x[256] = {\n", name, p);
-      for (j1 = 0; j1 < 32; j1++) {
-        printf("  ");
-        for (j2 = 0; j2 < 8; j2++)
-          printf("0x%04x, ", enc->uni2charset[256*p+8*j1+j2]);
-        printf("/""*0x%02x-0x%02x*""/\n", 8*j1, 8*j1+7);
-      }
-      printf("};\n");
-    }
-  printf("\n");
-#endif
-
-  /* Fill summary_indx[] and summary_used[]. */
-  indx = 0;
-  for (j1 = 0; j1 < 0x1000; j1++) {
-    summary_indx[j1] = indx;
-    summary_used[j1] = 0;
-    for (j2 = 0; j2 < 16; j2++) {
-      j = 16*j1+j2;
-      if (enc->uni2charset[j] != 0) {
-        indx2charset[indx++] = enc->uni2charset[j];
-        summary_used[j1] |= (1 << j2);
-      }
-    }
-  }
-
-  /* Fill npageblocks and pageblocks[]. */
-  npageblocks = 0;
-  for (p = 0; p < 0x100; ) {
-    if (pages[p] && (p == 0 || !pages[p-1])) {
-      pageblocks[npageblocks].start = 16*p;
-      do p++; while (p < 0x100 && pages[p]);
-      j1 = 16*p;
-      while (summary_used[j1-1] == 0) j1--;
-      pageblocks[npageblocks].end = j1;
-      npageblocks++;
-    } else
-      p++;
-  }
-
-  printf("static const unsigned short %s_2charset[%d] = {\n", name, indx);
-  for (i = 0; i < indx; ) {
-    if ((i % 8) == 0) printf(" ");
-    printf(" 0x%04x,", indx2charset[i]);
-    i++;
-    if ((i % 8) == 0 || i == indx) printf("\n");
-  }
-  printf("};\n");
-  printf("\n");
-  for (i = 0; i < npageblocks; i++) {
-    printf("static const Summary16 %s_uni2indx_page%02x[%d] = {\n", name,
-           pageblocks[i].start/16, pageblocks[i].end-pageblocks[i].start);
-    for (j1 = pageblocks[i].start; j1 < pageblocks[i].end; ) {
-      if (((16*j1) % 0x100) == 0) printf("  /""* 0x%04x *""/\n", 16*j1);
-      if ((j1 % 4) == 0) printf(" ");
-      printf(" { %4d, 0x%04x },", summary_indx[j1], summary_used[j1]);
-      j1++;
-      if ((j1 % 4) == 0 || j1 == pageblocks[i].end) printf("\n");
-    }
-    printf("};\n");
-  }
-  printf("\n");
-
-  printf("static int\n");
-  printf("%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", name);
-  printf("{\n");
-  printf("  if (n >= 2) {\n");
-  printf("    const Summary16 *summary = NULL;\n");
-  for (i = 0; i < npageblocks; i++) {
-    printf("    ");
-    if (i > 0)
-      printf("else ");
-    printf("if (wc >= 0x%04x && wc < 0x%04x)\n",
-           16*pageblocks[i].start, 16*pageblocks[i].end);
-    printf("      summary = &%s_uni2indx_page%02x[(wc>>4)", name,
-           pageblocks[i].start/16);
-    if (pageblocks[i].start > 0)
-      printf("-0x%03x", pageblocks[i].start);
-    printf("];\n");
-  }
-  printf("    if (summary) {\n");
-  printf("      unsigned short used = summary->used;\n");
-  printf("      unsigned int i = wc & 0x0f;\n");
-  printf("      if (used & ((unsigned short) 1 << i)) {\n");
-  printf("        unsigned short c;\n");
-  printf("        /* Keep in `used' only the bits 0..i-1. */\n");
-  printf("        used &= ((unsigned short) 1 << i) - 1;\n");
-  printf("        /* Add `summary->indx' and the number of bits set in `used'. */\n");
-  printf("        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);\n");
-  printf("        used = (used & 0x3333) + ((used & 0xcccc) >> 2);\n");
-  printf("        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);\n");
-  printf("        used = (used & 0x00ff) + (used >> 8);\n");
-  printf("        c = %s_2charset[summary->indx + used];\n", name);
-  printf("        r[0] = (c >> 8); r[1] = (c & 0xff);\n");
-  printf("        return 2;\n");
-  printf("      }\n");
-  printf("    }\n");
-  printf("    return RET_ILSEQ;\n");
-  printf("  }\n");
-  printf("  return RET_TOOSMALL;\n");
-  printf("}\n");
-}
-
-/* ISO-2022/EUC specifics */
-
-static int row_byte_normal (int row) { return 0x21+row; }
-static int col_byte_normal (int col) { return 0x21+col; }
-static int byte_row_normal (int byte) { return byte-0x21; }
-static int byte_col_normal (int byte) { return byte-0x21; }
-
-static void do_normal (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Note: On first sight, the jisx0212_2charset[] table seems to be in order,
-   starting from the charset=0x3021/uni=0x4e02 pair. But it's only mostly in
-   order. There are 75 out-of-order values, scattered all throughout the table.
- */
-
-static void do_normal_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-/* CNS 11643 specifics - trick to put two tables into one */
-
-static int row_byte_cns11643 (int row) {
-  return 0x100 * (row / 94) + (row % 94) + 0x21;
-}
-static int byte_row_cns11643 (int byte) {
-  return (byte >= 0x100 && byte < 0x200 ? byte-0x121 :
-          byte >= 0x200 && byte < 0x300 ? byte-0x221+94 :
-          byte >= 0x300 && byte < 0x400 ? byte-0x321+2*94 :
-          -1);
-}
-
-static void do_cns11643_only_uni2charset (const char* name)
-{
-  Encoding enc;
-  int j, x;
-
-  enc.rows = 3*94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_cns11643;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_cns11643;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  invert(&enc);
-  /* Move the 2 plane bits into the unused bits 15 and 7. */
-  for (j = 0; j < 0x10000; j++) {
-    x = enc.uni2charset[j];
-    if (x != 0) {
-      if (x & 0x8080) abort();
-      switch (x >> 16) {
-        case 0: /* plane 1 */ x = (x & 0xffff) | 0x0000; break;
-        case 1: /* plane 2 */ x = (x & 0xffff) | 0x0080; break;
-        case 2: /* plane 3 */ x = (x & 0xffff) | 0x8000; break;
-        default: abort();
-      }
-      enc.uni2charset[j] = x;
-    }
-  }
-  output_uni2charset_sparse(name,&enc);
-}
-
-/* GBK specifics */
-
-static int row_byte_gbk1 (int row) {
-  return 0x81+row;
-}
-static int col_byte_gbk1 (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_gbk1 (int byte) {
-  if (byte >= 0x81 && byte < 0xff)
-    return byte-0x81;
-  else
-    return -1;
-}
-static int byte_col_gbk1 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xff)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_gbk1 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_dense(name,&enc);
-}
-
-static void do_gbk1_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-static int row_byte_gbk2 (int row) {
-  return 0x81+row;
-}
-static int col_byte_gbk2 (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_gbk2 (int byte) {
-  if (byte >= 0x81 && byte < 0xff)
-    return byte-0x81;
-  else
-    return -1;
-}
-static int byte_col_gbk2 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xa1)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_gbk2_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 96;
-  enc.row_byte = row_byte_gbk2;
-  enc.col_byte = col_byte_gbk2;
-  enc.byte_row = byte_row_gbk2;
-  enc.byte_col = byte_col_gbk2;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xa1)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-static void do_gbk1_only_uni2charset (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* KSC 5601 specifics */
-
-/*
- * Reads the charset2uni table from standard input.
- */
-static void read_table_ksc5601 (Encoding* enc)
-{
-  int row, col, i, i1, i2, c, j;
-
-  enc->charset2uni = (int**) malloc(enc->rows*sizeof(int*));
-  for (row = 0; row < enc->rows; row++)
-    enc->charset2uni[row] = (int*) malloc(enc->cols*sizeof(int));
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++)
-      enc->charset2uni[row][col] = 0xfffd;
-
-  c = getc(stdin);
-  ungetc(c,stdin);
-  if (c == '#') {
-    /* Read a unicode.org style .TXT file. */
-    for (;;) {
-      c = getc(stdin);
-      if (c == EOF)
-        break;
-      if (c == '\n' || c == ' ' || c == '\t')
-        continue;
-      if (c == '#') {
-        do { c = getc(stdin); } while (!(c == EOF || c == '\n'));
-        continue;
-      }
-      ungetc(c,stdin);
-      if (scanf("0x%x", &j) != 1)
-        exit(1);
-      i1 = j >> 8;
-      i2 = j & 0xff;
-      if (scanf(" 0x%x", &j) != 1)
-        exit(1);
-      /* Take only the range covered by KS C 5601.1987-0 = KS C 5601.1989-0
-         = KS X 1001.1992, ignore the rest. */
-      if (!(i1 >= 128+33 && i1 < 128+127 && i2 >= 128+33 && i2 < 128+127))
-        continue;  /* KSC5601 specific */
-      i1 &= 0x7f;  /* KSC5601 specific */
-      i2 &= 0x7f;  /* KSC5601 specific */
-      row = enc->byte_row(i1);
-      col = enc->byte_col(i2);
-      if (row < 0 || col < 0) {
-        fprintf(stderr, "lost entry for %02x %02x\n", i1, i2);
-        exit(1);
-      }
-      enc->charset2uni[row][col] = j;
-    }
-  } else {
-    /* Read a table of hexadecimal Unicode values. */
-    for (i1 = 33; i1 < 127; i1++)
-      for (i2 = 33; i2 < 127; i2++) {
-        i = scanf("%x", &j);
-        if (i == EOF)
-          goto read_done;
-        if (i != 1)
-          exit(1);
-        if (j < 0 || j == 0xffff)
-          j = 0xfffd;
-        if (j != 0xfffd) {
-          if (enc->byte_row(i1) < 0 || enc->byte_col(i2) < 0) {
-            fprintf(stderr, "lost entry at %02x %02x\n", i1, i2);
-            exit (1);
-          }
-          enc->charset2uni[enc->byte_row(i1)][enc->byte_col(i2)] = j;
-        }
-      }
-   read_done: ;
-  }
-}
-
-static void do_ksc5601 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table_ksc5601(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Big5 specifics */
-
-static int row_byte_big5 (int row) {
-  return 0xa1+row;
-}
-static int col_byte_big5 (int col) {
-  return (col >= 0x3f ? 0x62 : 0x40) + col;
-}
-static int byte_row_big5 (int byte) {
-  if (byte >= 0xa1 && byte < 0xff)
-    return byte-0xa1;
-  else
-    return -1;
-}
-static int byte_col_big5 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0xa1 && byte < 0xff)
-    return byte-0x62;
-  else
-    return -1;
-}
-
-static void do_big5 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 157;
-  enc.row_byte = row_byte_big5;
-  enc.col_byte = col_byte_big5;
-  enc.byte_row = byte_row_big5;
-  enc.byte_col = byte_col_big5;
-  enc.check_row_expr = "%1$s >= 0xa1 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0xa1 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0xa1";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0xa1 ? 0x62 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Johab Hangul specifics */
-
-static int row_byte_johab_hangul (int row) {
-  return 0x84+row;
-}
-static int col_byte_johab_hangul (int col) {
-  return (col >= 0x3e ? 0x43 : 0x41) + col;
-}
-static int byte_row_johab_hangul (int byte) {
-  if (byte >= 0x84 && byte < 0xd4)
-    return byte-0x84;
-  else
-    return -1;
-}
-static int byte_col_johab_hangul (int byte) {
-  if (byte >= 0x41 && byte < 0x7f)
-    return byte-0x41;
-  else if (byte >= 0x81 && byte < 0xff)
-    return byte-0x43;
-  else
-    return -1;
-}
-
-static void do_johab_hangul (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 80;
-  enc.cols = 188;
-  enc.row_byte = row_byte_johab_hangul;
-  enc.col_byte = col_byte_johab_hangul;
-  enc.byte_row = byte_row_johab_hangul;
-  enc.byte_col = byte_col_johab_hangul;
-  enc.check_row_expr = "%1$s >= 0x84 && %1$s < 0xd4";
-  enc.check_col_expr = "(%1$s >= 0x41 && %1$s < 0x7f) || (%1$s >= 0x81 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x84";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x81 ? 0x43 : 0x41)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_dense(name,&enc);
-}
-
-/* SJIS specifics */
-
-static int row_byte_sjis (int row) {
-  return (row >= 0x1f ? 0xc1 : 0x81) + row;
-}
-static int col_byte_sjis (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_sjis (int byte) {
-  if (byte >= 0x81 && byte < 0xa0)
-    return byte-0x81;
-  else if (byte >= 0xe0)
-    return byte-0xc1;
-  else
-    return -1;
-}
-static int byte_col_sjis (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xfd)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_sjis (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 188;
-  enc.row_byte = row_byte_sjis;
-  enc.col_byte = col_byte_sjis;
-  enc.byte_row = byte_row_sjis;
-  enc.byte_col = byte_col_sjis;
-  enc.check_row_expr = "(%1$s >= 0x81 && %1$s < 0xa0) || (%1$s >= 0xe0)";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xfd)";
-  enc.byte_row_expr = "%1$s - (%1$s >= 0xe0 ? 0xc1 : 0x81)";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Main program */
-
-int main (int argc, char *argv[])
-{
-  const char* charsetname;
-  const char* name;
-
-  if (argc != 3)
-    exit(1);
-  charsetname = argv[1];
-  name = argv[2];
-
-  output_title(charsetname);
-
-  if (!strcmp(name,"gb2312") || !strcmp(name,"gb12345ext")
-      || !strcmp(name,"jisx0208") || !strcmp(name,"jisx0212"))
-    do_normal(name);
-  else if (!strcmp(name,"cns11643_1") || !strcmp(name,"cns11643_2")
-           || !strcmp(name,"cns11643_3"))
-    do_normal_only_charset2uni(name);
-  else if (!strcmp(name,"cns11643_inv"))
-    do_cns11643_only_uni2charset(name);
-  else if (!strcmp(name,"gbkext1"))
-    do_gbk1_only_charset2uni(name);
-  else if (!strcmp(name,"gbkext2"))
-    do_gbk2_only_charset2uni(name);
-  else if (!strcmp(name,"gbkext_inv"))
-    do_gbk1_only_uni2charset(name);
-  else if (!strcmp(name,"cp936ext"))
-    do_gbk1(name);
-  else if (!strcmp(name,"ksc5601"))
-    do_ksc5601(name);
-  else if (!strcmp(name,"big5") || !strcmp(name,"cp950ext"))
-    do_big5(name);
-  else if (!strcmp(name,"johab_hangul"))
-    do_johab_hangul(name);
-  else if (!strcmp(name,"cp932ext"))
-    do_sjis(name);
-  else
-    exit(1);
-
-  return 0;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/georgian_academy.h b/common/fltk/src/xutf8/lcUniConv/georgian_academy.h
deleted file mode 100644
index a847c52..0000000
--- a/common/fltk/src/xutf8/lcUniConv/georgian_academy.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/georgian_academy.h,v 1.3 2000/11/29 17:40:29 dawes Exp $ */
-
-/*
- * GEORGIAN-ACADEMY
- */
-
-static const unsigned short georgian_academy_2uni[32] = {
-  /* 0x80 */
-  0x0080, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f,
-  /* 0x90 */
-  0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178,
-};
-
-static int
-georgian_academy_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0x80 && c < 0xa0)
-    *pwc = (ucs4_t) georgian_academy_2uni[c-0x80];
-  else if (c >= 0xc0 && c < 0xe7)
-    *pwc = (ucs4_t) c + 0x1010;
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-
-static const unsigned char georgian_academy_page00[32] = {
-  0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */
-  0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */
-};
-static const unsigned char georgian_academy_page01[72] = {
-  0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-};
-static const unsigned char georgian_academy_page02[32] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-};
-static const unsigned char georgian_academy_page20[48] = {
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-
-static int
-georgian_academy_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x0080 && wc < 0x00a0)
-    c = georgian_academy_page00[wc-0x0080];
-  else if ((wc >= 0x00a0 && wc < 0x00c0) || (wc >= 0x00e7 && wc < 0x0100))
-    c = wc;
-  else if (wc >= 0x0150 && wc < 0x0198)
-    c = georgian_academy_page01[wc-0x0150];
-  else if (wc >= 0x02c0 && wc < 0x02e0)
-    c = georgian_academy_page02[wc-0x02c0];
-  else if (wc >= 0x10d0 && wc < 0x10f7)
-    c = wc-0x1010;
-  else if (wc >= 0x2010 && wc < 0x2040)
-    c = georgian_academy_page20[wc-0x2010];
-  else if (wc == 0x2122)
-    c = 0x99;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/georgian_ps.h b/common/fltk/src/xutf8/lcUniConv/georgian_ps.h
deleted file mode 100644
index e7220d0..0000000
--- a/common/fltk/src/xutf8/lcUniConv/georgian_ps.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/georgian_ps.h,v 1.3 2000/11/29 17:40:29 dawes Exp $ */
-
-/*
- * GEORGIAN-PS
- */
-
-static const unsigned short georgian_ps_2uni_1[32] = {
-  /* 0x80 */
-  0x0080, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f,
-  /* 0x90 */
-  0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178,
-};
-static const unsigned short georgian_ps_2uni_2[39] = {
-  /* 0xc0 */
-  0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10f1,
-  0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10f2, 0x10dd,
-  /* 0xd0 */
-  0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10f3, 0x10e3, 0x10e4,
-  0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec,
-  /* 0xe0 */
-  0x10ed, 0x10ee, 0x10f4, 0x10ef, 0x10f0, 0x10f5,
-};
-
-static int
-georgian_ps_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0x80 && c < 0xa0)
-    *pwc = (ucs4_t) georgian_ps_2uni_1[c-0x80];
-  else if (c >= 0xc0 && c < 0xe6)
-    *pwc = (ucs4_t) georgian_ps_2uni_2[c-0xc0];
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-
-static const unsigned char georgian_ps_page00[32] = {
-  0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */
-  0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */
-};
-static const unsigned char georgian_ps_page01[72] = {
-  0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-};
-static const unsigned char georgian_ps_page02[32] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-};
-static const unsigned char georgian_ps_page10[40] = {
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc8, /* 0xd0-0xd7 */
-  0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xcf, 0xd0, 0xd1, /* 0xd8-0xdf */
-  0xd2, 0xd3, 0xd4, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, /* 0xe0-0xe7 */
-  0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe3, /* 0xe8-0xef */
-  0xe4, 0xc7, 0xce, 0xd5, 0xe2, 0xe5, 0x00, 0x00, /* 0xf0-0xf7 */
-};
-static const unsigned char georgian_ps_page20[48] = {
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-
-static int
-georgian_ps_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x0080 && wc < 0x00a0)
-    c = georgian_ps_page00[wc-0x0080];
-  else if ((wc >= 0x00a0 && wc < 0x00c0) || (wc >= 0x00e6 && wc < 0x0100))
-    c = wc;
-  else if (wc >= 0x0150 && wc < 0x0198)
-    c = georgian_ps_page01[wc-0x0150];
-  else if (wc >= 0x02c0 && wc < 0x02e0)
-    c = georgian_ps_page02[wc-0x02c0];
-  else if (wc >= 0x10d0 && wc < 0x10f8)
-    c = georgian_ps_page10[wc-0x10d0];
-  else if (wc >= 0x2010 && wc < 0x2040)
-    c = georgian_ps_page20[wc-0x2010];
-  else if (wc == 0x2122)
-    c = 0x99;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_1.h b/common/fltk/src/xutf8/lcUniConv/iso8859_1.h
deleted file mode 100644
index a600899..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_1.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_1.h,v 1.3 2000/11/29 17:40:30 dawes Exp $ */
-
-/*
- * ISO-8859-1
- */
-
-static int
-iso8859_1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  *pwc = (ucs4_t) c;
-  return 1;
-}
-
-static int
-iso8859_1_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (wc < 0x0100) {
-    *r = wc;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_10.h b/common/fltk/src/xutf8/lcUniConv/iso8859_10.h
deleted file mode 100644
index 94e1c69..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_10.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_10.h,v 1.3 2000/11/29 17:40:30 dawes Exp $ */
-
-/*
- * ISO-8859-10
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_10_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7,
-  0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a,
-  /* 0xb0 */
-  0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7,
-  0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b,
-  /* 0xc0 */
-  0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
-  0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf,
-  /* 0xd0 */
-  0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168,
-  0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
-  /* 0xe0 */
-  0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
-  0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169,
-  0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138,
-};
-
-static int
-iso8859_10_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_10_2uni[c-0xa0];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_10_page00[224] = {
-  0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-  0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, /* 0xc0-0xc7 */
-  0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
-  0xd0, 0x00, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */
-  0xd8, 0x00, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */
-  0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, /* 0xe0-0xe7 */
-  0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0xf0, 0x00, 0x00, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */
-  0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */
-  0xa9, 0xb9, 0xa2, 0xb2, 0x00, 0x00, 0xcc, 0xec, /* 0x10-0x17 */
-  0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0xa3, 0xb3, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0xa5, 0xb5, 0xa4, 0xb4, 0x00, 0x00, 0xc7, 0xe7, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xb6, /* 0x30-0x37 */
-  0xff, 0x00, 0x00, 0xa8, 0xb8, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0xaf, 0xbf, 0xd2, 0xf2, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xaa, 0xba, 0x00, 0x00, 0x00, 0x00, 0xab, 0xbb, /* 0x60-0x67 */
-  0xd7, 0xf7, 0xae, 0xbe, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, 0x00, /* 0x78-0x7f */
-};
-
-static int
-iso8859_10_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0180)
-    c = iso8859_10_page00[wc-0x00a0];
-  else if (wc == 0x2015)
-    c = 0xbd;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_11.h b/common/fltk/src/xutf8/lcUniConv/iso8859_11.h
deleted file mode 100644
index 0d4d126..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_11.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_11.h,v 1.2 2002/10/09 16:38:19 tsi Exp $ */
-
-/*
- * ISO8859-11
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_11_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
-  0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
-  /* 0xb0 */
-  0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
-  0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
-  /* 0xc0 */
-  0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
-  0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
-  /* 0xd0 */
-  0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
-  0x0e38, 0x0e39, 0x0e3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e3f,
-  /* 0xe0 */
-  0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
-  0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
-  /* 0xf0 */
-  0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
-  0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-};
-
-static int
-iso8859_11_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else if (c < 0xa0) {
-  }
-  else {
-    unsigned short wc = iso8859_11_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_11_page0e[96] = {
-  0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */
-  0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */
-  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */
-  0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-};
-
-static int
-iso8859_11_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080 || wc == 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x0e00 && wc < 0x0e60)
-    c = iso8859_11_page0e[wc-0x0e00];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_13.h b/common/fltk/src/xutf8/lcUniConv/iso8859_13.h
deleted file mode 100644
index 1f4ccd0..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_13.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_13.h,v 1.2 2000/11/28 16:10:26 dawes Exp $ */
-
-/*
- * ISO-8859-13
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_13_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7,
-  0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7,
-  0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6,
-  /* 0xc0 */
-  0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112,
-  0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b,
-  /* 0xd0 */
-  0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7,
-  0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df,
-  /* 0xe0 */
-  0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113,
-  0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c,
-  /* 0xf0 */
-  0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7,
-  0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019,
-};
-
-static int
-iso8859_13_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_13_2uni[c-0xa0];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_13_page00[224] = {
-  0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0xc4, 0xc5, 0xaf, 0x00, /* 0xc0-0xc7 */
-  0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0xd3, 0x00, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */
-  0xa8, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0xe4, 0xe5, 0xbf, 0x00, /* 0xe0-0xe7 */
-  0x00, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0xf3, 0x00, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */
-  0xb8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0xc2, 0xe2, 0x00, 0x00, 0xc0, 0xe0, 0xc3, 0xe3, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0xc7, 0xe7, 0x00, 0x00, 0xcb, 0xeb, /* 0x10-0x17 */
-  0xc6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0xce, 0xee, 0x00, 0x00, 0xc1, 0xe1, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xed, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0xcf, 0xef, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0xd9, 0xf9, 0xd1, 0xf1, 0xd2, 0xf2, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0xd4, 0xf4, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xba, /* 0x50-0x57 */
-  0x00, 0x00, 0xda, 0xfa, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0xca, 0xea, 0xdd, 0xfd, 0xde, 0xfe, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_13_page20[8] = {
-  0x00, 0xff, 0x00, 0x00, 0xb4, 0xa1, 0xa5, 0x00, /* 0x18-0x1f */
-};
-
-static int
-iso8859_13_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0180)
-    c = iso8859_13_page00[wc-0x00a0];
-  else if (wc >= 0x2018 && wc < 0x2020)
-    c = iso8859_13_page20[wc-0x2018];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_14.h b/common/fltk/src/xutf8/lcUniConv/iso8859_14.h
deleted file mode 100644
index b36b6b9..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_14.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_14.h,v 1.3 2000/11/29 17:40:30 dawes Exp $ */
-
-/*
- * ISO-8859-14
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_14_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7,
-  0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178,
-  /* 0xb0 */
-  0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56,
-  0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61,
-  /* 0xc0 */
-  0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
-  0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
-  /* 0xd0 */
-  0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a,
-  0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b,
-  0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff,
-};
-
-static int
-iso8859_14_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0xa0)
-    *pwc = (ucs4_t) iso8859_14_2uni[c-0xa0];
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_14_page00[96] = {
-  0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0x00, 0x00, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
-  0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x00, 0xff, /* 0xf8-0xff */
-};
-static const unsigned char iso8859_14_page01_0[32] = {
-  0x00, 0x00, 0xa4, 0xa5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-};
-static const unsigned char iso8859_14_page01_1[16] = {
-  0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, 0xde, 0xfe, /* 0x70-0x77 */
-  0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_14_page1e_0[136] = {
-  0x00, 0x00, 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0xa6, 0xab, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb1, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0xb4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb9, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xbb, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0x00, 0x00, /* 0x80-0x87 */
-};
-static const unsigned char iso8859_14_page1e_1[8] = {
-  0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
-};
-
-static int
-iso8859_14_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0100)
-    c = iso8859_14_page00[wc-0x00a0];
-  else if (wc >= 0x0108 && wc < 0x0128)
-    c = iso8859_14_page01_0[wc-0x0108];
-  else if (wc >= 0x0170 && wc < 0x0180)
-    c = iso8859_14_page01_1[wc-0x0170];
-  else if (wc >= 0x1e00 && wc < 0x1e88)
-    c = iso8859_14_page1e_0[wc-0x1e00];
-  else if (wc >= 0x1ef0 && wc < 0x1ef8)
-    c = iso8859_14_page1e_1[wc-0x1ef0];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_15.h b/common/fltk/src/xutf8/lcUniConv/iso8859_15.h
deleted file mode 100644
index 99d5ceb..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_15.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_15.h,v 1.3 2000/11/29 17:40:31 dawes Exp $ */
-
-/*
- * ISO-8859-15
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_15_2uni[32] = {
-  /* 0xa0 */
-  0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7,
-  0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7,
-  0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf,
-};
-
-static int
-iso8859_15_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0xa0 && c < 0xc0)
-    *pwc = (ucs4_t) iso8859_15_2uni[c-0xa0];
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_15_page00[32] = {
-  0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0xb9, 0xba, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0xb8-0xbf */
-};
-static const unsigned char iso8859_15_page01[48] = {
-  0x00, 0x00, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0xbe, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb8, 0x00, /* 0x78-0x7f */
-};
-
-static int
-iso8859_15_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00c0)
-    c = iso8859_15_page00[wc-0x00a0];
-  else if (wc >= 0x00c0 && wc < 0x0100)
-    c = wc;
-  else if (wc >= 0x0150 && wc < 0x0180)
-    c = iso8859_15_page01[wc-0x0150];
-  else if (wc == 0x20ac)
-    c = 0xa4;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_16.h b/common/fltk/src/xutf8/lcUniConv/iso8859_16.h
deleted file mode 100644
index 5b3f870..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_16.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_16.h,v 1.4 2003/07/15 17:33:45 pascal Exp $ */
-
-/*
- * ISO-8859-16
- */
-
-static const unsigned short iso8859_16_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7,
-  0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7,
-  0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c,
-  /* 0xc0 */
-  0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7,
-  0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
-  /* 0xd0 */
-  0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a,
-  0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b,
-  0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff,
-};
-
-static int
-iso8859_16_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_16_2uni[c-0xa0];
-  return 1;
-}
-
-static const unsigned char iso8859_16_page00[224] = {
-  0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0xab, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0xc6, 0xc7, /* 0xc0-0xc7 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
-  0x00, 0x00, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0x00, /* 0xd0-0xd7 */
-  0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0xe6, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0x00, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0x00, /* 0xf0-0xf7 */
-  0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */
-  /* 0x0100 */
-  0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xa2, 0xc5, 0xe5, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0xb2, 0xb9, 0x00, 0x00, /* 0x08-0x0f */
-  0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0xd5, 0xf5, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0xbe, 0xac, 0xae, 0xaf, 0xbf, 0xb4, 0xb8, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_16_page02[8] = {
-  0xaa, 0xba, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-};
-static const unsigned char iso8859_16_page20[8] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xa5, 0x00, /* 0x18-0x1f */
-};
-
-static int
-iso8859_16_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0180)
-    c = iso8859_16_page00[wc-0x00a0];
-  else if (wc >= 0x0218 && wc < 0x0220)
-    c = iso8859_16_page02[wc-0x0218];
-  else if (wc >= 0x2018 && wc < 0x2020)
-    c = iso8859_16_page20[wc-0x2018];
-  else if (wc == 0x20ac)
-    c = 0xa4;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_2.h b/common/fltk/src/xutf8/lcUniConv/iso8859_2.h
deleted file mode 100644
index 28c5f10..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_2.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_2.h,v 1.3 2000/11/29 17:40:31 dawes Exp $ */
-
-/*
- * ISO-8859-2
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_2_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7,
-  0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b,
-  /* 0xb0 */
-  0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7,
-  0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c,
-  /* 0xc0 */
-  0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7,
-  0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e,
-  /* 0xd0 */
-  0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7,
-  0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df,
-  /* 0xe0 */
-  0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7,
-  0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f,
-  /* 0xf0 */
-  0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7,
-  0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9,
-};
-
-static int
-iso8859_2_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_2_2uni[c-0xa0];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_2_page00[224] = {
-  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-  0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */
-  0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */
-  0x00, 0x00, 0xda, 0x00, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */
-  0x00, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */
-  0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */
-  0x00, 0x00, 0xfa, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xb1, 0xc6, 0xe6, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0xcf, 0xef, /* 0x08-0x0f */
-  0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0xca, 0xea, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0xc5, 0xe5, 0x00, 0x00, 0xa5, 0xb5, 0x00, /* 0x38-0x3f */
-  0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0xd2, /* 0x40-0x47 */
-  0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0xd5, 0xf5, 0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00, /* 0x50-0x57 */
-  0xd8, 0xf8, 0xa6, 0xb6, 0x00, 0x00, 0xaa, 0xba, /* 0x58-0x5f */
-  0xa9, 0xb9, 0xde, 0xfe, 0xab, 0xbb, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf9, /* 0x68-0x6f */
-  0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0xac, 0xbc, 0xaf, 0xbf, 0xae, 0xbe, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_2_page02[32] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0xa2, 0xff, 0x00, 0xb2, 0x00, 0xbd, 0x00, 0x00, /* 0xd8-0xdf */
-};
-
-/*
-static int
-iso8859_2_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0180)
-    c = iso8859_2_page00[wc-0x00a0];
-  else if (wc >= 0x02c0 && wc < 0x02e0)
-    c = iso8859_2_page02[wc-0x02c0];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-*/
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_3.h b/common/fltk/src/xutf8/lcUniConv/iso8859_3.h
deleted file mode 100644
index b2f3c71..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_3.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_3.h,v 1.3 2000/11/29 17:40:31 dawes Exp $ */
-
-/*
- * ISO-8859-3
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_3_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0xfffd, 0x0124, 0x00a7,
-  0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0xfffd, 0x017b,
-  /* 0xb0 */
-  0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7,
-  0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0xfffd, 0x017c,
-  /* 0xc0 */
-  0x00c0, 0x00c1, 0x00c2, 0xfffd, 0x00c4, 0x010a, 0x0108, 0x00c7,
-  0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
-  /* 0xd0 */
-  0xfffd, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7,
-  0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0xfffd, 0x00e4, 0x010b, 0x0109, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0xfffd, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7,
-  0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9,
-};
-
-static int
-iso8859_3_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = iso8859_3_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_3_page00[96] = {
-  0xa0, 0x00, 0x00, 0xa3, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-  0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7, /* 0xb0-0xb7 */
-  0xb8, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */
-  0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
-  0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */
-  0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */
-  0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-};
-static const unsigned char iso8859_3_page01[120] = {
-  0xc6, 0xe6, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0xd8, 0xf8, 0xab, 0xbb, /* 0x18-0x1f */
-  0xd5, 0xf5, 0x00, 0x00, 0xa6, 0xb6, 0xa1, 0xb1, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0xa9, 0xb9, 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, 0xaa, 0xba, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0xdd, 0xfd, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_3_page02[8] = {
-  0xa2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-};
-
-static int
-iso8859_3_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0100)
-    c = iso8859_3_page00[wc-0x00a0];
-  else if (wc >= 0x0108 && wc < 0x0180)
-    c = iso8859_3_page01[wc-0x0108];
-  else if (wc >= 0x02d8 && wc < 0x02e0)
-    c = iso8859_3_page02[wc-0x02d8];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_4.h b/common/fltk/src/xutf8/lcUniConv/iso8859_4.h
deleted file mode 100644
index c5e261f..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_4.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_4.h,v 1.3 2000/11/29 17:40:31 dawes Exp $ */
-
-/*
- * ISO-8859-4
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_4_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7,
-  0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af,
-  /* 0xb0 */
-  0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7,
-  0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b,
-  /* 0xc0 */
-  0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
-  0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a,
-  /* 0xd0 */
-  0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
-  0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df,
-  /* 0xe0 */
-  0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
-  0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b,
-  /* 0xf0 */
-  0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
-  0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9,
-};
-
-static int
-iso8859_4_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_4_2uni[c-0xa0];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_4_page00[224] = {
-  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0xaf, /* 0xa8-0xaf */
-  0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, /* 0xc0-0xc7 */
-  0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */
-  0xd8, 0x00, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */
-  0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, /* 0xe0-0xe7 */
-  0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */
-  0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */
-  0xd0, 0xf0, 0xaa, 0xba, 0x00, 0x00, 0xcc, 0xec, /* 0x10-0x17 */
-  0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0xab, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0xa5, 0xb5, 0xcf, 0xef, 0x00, 0x00, 0xc7, 0xe7, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xf3, /* 0x30-0x37 */
-  0xa2, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0xbd, 0xbf, 0xd2, 0xf2, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0xb3, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xa9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, /* 0x60-0x67 */
-  0xdd, 0xfd, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xbe, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_4_page02[32] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0xff, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-};
-
-static int
-iso8859_4_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0180)
-    c = iso8859_4_page00[wc-0x00a0];
-  else if (wc >= 0x02c0 && wc < 0x02e0)
-    c = iso8859_4_page02[wc-0x02c0];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_5.h b/common/fltk/src/xutf8/lcUniConv/iso8859_5.h
deleted file mode 100644
index 6d19701..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_5.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_5.h,v 1.3 2000/11/29 17:40:32 dawes Exp $ */
-
-/*
- * ISO-8859-5
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_5_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
-  0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f,
-  /* 0xb0 */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
-  0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
-  /* 0xc0 */
-  0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
-  0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
-  /* 0xd0 */
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
-  0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
-  /* 0xe0 */
-  0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
-  0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
-  /* 0xf0 */
-  0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
-  0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f,
-};
-
-static int
-iso8859_5_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_5_2uni[c-0xa0];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_5_page00[16] = {
-  0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-};
-static const unsigned char iso8859_5_page04[96] = {
-  0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */
-  0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x08-0x0f */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */
-  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x38-0x3f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */
-  0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff, /* 0x58-0x5f */
-};
-
-static int
-iso8859_5_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00b0)
-    c = iso8859_5_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x0460)
-    c = iso8859_5_page04[wc-0x0400];
-  else if (wc == 0x2116)
-    c = 0xf0;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_6.h b/common/fltk/src/xutf8/lcUniConv/iso8859_6.h
deleted file mode 100644
index bcff119..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_6.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_6.h,v 1.3 2000/11/29 17:40:32 dawes Exp $ */
-
-/*
- * ISO-8859-6
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_6_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0xfffd, 0xfffd, 0xfffd, 0x00a4, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x060c, 0x00ad, 0xfffd, 0xfffd,
-  /* 0xb0 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0x061b, 0xfffd, 0xfffd, 0xfffd, 0x061f,
-  /* 0xc0 */
-  0xfffd, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
-  0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
-  /* 0xd0 */
-  0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
-  0x0638, 0x0639, 0x063a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xe0 */
-  0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
-  0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f,
-  /* 0xf0 */
-  0x0650, 0x0651, 0x0652, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-};
-
-static int
-iso8859_6_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = iso8859_6_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_6_page00[16] = {
-  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-};
-static const unsigned char iso8859_6_page06[80] = {
-  0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */
-  0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */
-  0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */
-  0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-};
-
-static int
-iso8859_6_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00b0)
-    c = iso8859_6_page00[wc-0x00a0];
-  else if (wc >= 0x0608 && wc < 0x0658)
-    c = iso8859_6_page06[wc-0x0608];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_7.h b/common/fltk/src/xutf8/lcUniConv/iso8859_7.h
deleted file mode 100644
index c85a687..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_7.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_7.h,v 1.3 2000/11/29 17:40:32 dawes Exp $ */
-
-/*
- * ISO-8859-7
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_7_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x2018, 0x2019, 0x00a3, 0xfffd, 0xfffd, 0x00a6, 0x00a7,
-  0x00a8, 0x00a9, 0xfffd, 0x00ab, 0x00ac, 0x00ad, 0xfffd, 0x2015,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7,
-  0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f,
-  /* 0xc0 */
-  0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
-  0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
-  /* 0xd0 */
-  0x03a0, 0x03a1, 0xfffd, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7,
-  0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af,
-  /* 0xe0 */
-  0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
-  0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
-  /* 0xf0 */
-  0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7,
-  0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0xfffd,
-};
-
-static int
-iso8859_7_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = iso8859_7_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_7_page00[32] = {
-  0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0x00, 0x00, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */
-};
-static const unsigned char iso8859_7_page03[80] = {
-  0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0x00, /* 0x80-0x87 */
-  0xb8, 0xb9, 0xba, 0x00, 0xbc, 0x00, 0xbe, 0xbf, /* 0x88-0x8f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x90-0x97 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x98-0x9f */
-  0xd0, 0xd1, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xa0-0xa7 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xa8-0xaf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xb0-0xb7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xb8-0xbf */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xc0-0xc7 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xc8-0xcf */
-};
-static const unsigned char iso8859_7_page20[16] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, /* 0x10-0x17 */
-  0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-};
-
-static int
-iso8859_7_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00c0)
-    c = iso8859_7_page00[wc-0x00a0];
-  else if (wc >= 0x0380 && wc < 0x03d0)
-    c = iso8859_7_page03[wc-0x0380];
-  else if (wc >= 0x2010 && wc < 0x2020)
-    c = iso8859_7_page20[wc-0x2010];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_8.h b/common/fltk/src/xutf8/lcUniConv/iso8859_8.h
deleted file mode 100644
index a31e2ac..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_8.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_8.h,v 1.3 2000/11/29 17:40:32 dawes Exp $ */
-
-/*
- * ISO-8859-8
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_8_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0xfffd, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
-  0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
-  0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0xfffd,
-  /* 0xc0 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xd0 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2017,
-  /* 0xe0 */
-  0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
-  0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
-  /* 0xf0 */
-  0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
-  0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0x200e, 0x200f, 0xfffd,
-};
-
-static int
-iso8859_8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0xa0) {
-    unsigned short wc = iso8859_8_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  else {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_8_page00[88] = {
-  0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, /* 0xf0-0xf7 */
-};
-static const unsigned char iso8859_8_page05[32] = {
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xd0-0xd7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xd8-0xdf */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xe0-0xe7 */
-  0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-};
-static const unsigned char iso8859_8_page20[16] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x10-0x17 */
-};
-
-static int
-iso8859_8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00f8)
-    c = iso8859_8_page00[wc-0x00a0];
-  else if (wc >= 0x05d0 && wc < 0x05f0)
-    c = iso8859_8_page05[wc-0x05d0];
-  else if (wc >= 0x2008 && wc < 0x2018)
-    c = iso8859_8_page20[wc-0x2008];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_9.h b/common/fltk/src/xutf8/lcUniConv/iso8859_9.h
deleted file mode 100644
index 0986c22..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_9.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_9.h,v 1.3 2000/11/29 17:40:32 dawes Exp $ */
-
-/*
- * ISO-8859-9
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_9_2uni[48] = {
-  /* 0xd0 */
-  0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
-  0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
-  0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff,
-};
-
-static int
-iso8859_9_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0xd0)
-    *pwc = (ucs4_t) iso8859_9_2uni[c-0xd0];
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_9_page00[48] = {
-  0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */
-};
-static const unsigned char iso8859_9_page01[72] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, /* 0x58-0x5f */
-};
-
-static int
-iso8859_9_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00d0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00d0 && wc < 0x0100)
-    c = iso8859_9_page00[wc-0x00d0];
-  else if (wc >= 0x0118 && wc < 0x0160)
-    c = iso8859_9_page01[wc-0x0118];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/iso8859_9e.h b/common/fltk/src/xutf8/lcUniConv/iso8859_9e.h
deleted file mode 100644
index a5a0b60..0000000
--- a/common/fltk/src/xutf8/lcUniConv/iso8859_9e.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_9e.h,v 1.3 2000/11/28 16:10:28 dawes Exp $ */
-
-/*
- * ISO-8859-9E
- */
-
-static const unsigned short iso8859_9e_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x017d, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x012c, 0x00a7,
-  0x016c, 0x00a9, 0x01e6, 0x00ab, 0x014a, 0x00ad, 0x00ae, 0x01d1,
-  /* 0xb0 */
-  0x00b0, 0x017e, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x012d, 0x00b7,
-  0x016d, 0x00b9, 0x01e7, 0x00bb, 0x014b, 0x00bd, 0x0178, 0x01d2,
-  /* 0xc0 */
-  0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x018f, 0x00c7,
-  0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
-  /* 0xd0 */
-  0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00dd,
-  0x019f, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x0259, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00fd,
-  0x0275, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff,
-};
-
-static int
-iso8859_9e_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0xa0)
-    *pwc = (ucs4_t) iso8859_9e_2uni[c-0xa0];
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-
-static const unsigned char iso8859_9e_page00[96] = {
-  0xa0, 0x00, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0xab, 0x00, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
-  0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0xb9, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x00, 0xc7, /* 0xc0-0xc7 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
-  0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */
-  0x00, 0xd9, 0xda, 0xdb, 0xdc, 0xd7, 0x00, 0xdf, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x00, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */
-  0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0xf7, 0x00, 0xff, /* 0xf8-0xff */
-};
-static const unsigned char iso8859_9e_page01[136] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00, /* 0x28-0x2f */
-  0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0xa8, 0xb8, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0xbe, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xb1, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, /* 0x88-0x8f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, /* 0x98-0x9f */
-};
-static const unsigned char iso8859_9e_page01_d[24] = {
-  0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xba, /* 0xe0-0xe7 */
-};
-  
-static int
-iso8859_9e_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0100)
-    c = iso8859_9e_page00[wc-0x00a0];
-  else if (wc >= 0x0118 && wc < 0x01a0)
-    c = iso8859_9e_page01[wc-0x0118];
-  else if (wc >= 0x01d0 && wc < 0x01e8)
-    c = iso8859_9e_page01_d[wc-0x01d0];
-  else if (wc == 0x0259)
-    c = 0xe6;
-  else if (wc == 0x0275)
-    c = 0xf8;
-  else if (wc == 0x20ac)
-    c = 0xa4;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/jisx0201.h b/common/fltk/src/xutf8/lcUniConv/jisx0201.h
deleted file mode 100644
index 1c7a851..0000000
--- a/common/fltk/src/xutf8/lcUniConv/jisx0201.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/jisx0201.h,v 1.3 2000/11/29 17:40:33 dawes Exp $ */
-
-/*
- * JISX0201.1976-0
- */
-#ifdef NEED_TOWC
-
-static int
-jisx0201_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    if (c == 0x5c)
-      *pwc = (ucs4_t) 0x00a5;
-    else if (c == 0x7e)
-      *pwc = (ucs4_t) 0x203e;
-    else
-      *pwc = (ucs4_t) c;
-    return 1;
-  } else {
-    if (c >= 0xa1 && c < 0xe0) {
-      *pwc = (ucs4_t) c + 0xfec0;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-
-static int
-jisx0201_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (wc < 0x0080 && !(wc == 0x005c || wc == 0x007e)) {
-    *r = wc;
-    return 1;
-  }
-  if (wc == 0x00a5) {
-    *r = 0x5c;
-    return 1;
-  }
-  if (wc == 0x203e) {
-    *r = 0x7e;
-    return 1;
-  }
-  if (wc >= 0xff61 && wc < 0xffa0) {
-    *r = wc - 0xfec0;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/jisx0208.h b/common/fltk/src/xutf8/lcUniConv/jisx0208.h
deleted file mode 100644
index 37db915..0000000
--- a/common/fltk/src/xutf8/lcUniConv/jisx0208.h
+++ /dev/null
@@ -1,2401 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/jisx0208.h,v 1.6 2003/05/27 22:26:31 tsi Exp $ */
-
-/*
- * JISX0208.1990-0
- */
-#ifdef NEED_TOWC
-
-static const unsigned short jisx0208_2uni_page21[690] = {
-  /* 0x21 */
-  0x3000, 0x3001, 0x3002, 0xff0c, 0xff0e, 0x30fb, 0xff1a, 0xff1b,
-  0xff1f, 0xff01, 0x309b, 0x309c, 0x00b4, 0xff40, 0x00a8, 0xff3e,
-  0xffe3, 0xff3f, 0x30fd, 0x30fe, 0x309d, 0x309e, 0x3003, 0x4edd,
-  0x3005, 0x3006, 0x3007, 0x30fc, 0x2015, 0x2010, 0xff0f, 0xff3c,
-  0x301c, 0x2016, 0xff5c, 0x2026, 0x2025, 0x2018, 0x2019, 0x201c,
-  0x201d, 0xff08, 0xff09, 0x3014, 0x3015, 0xff3b, 0xff3d, 0xff5b,
-  0xff5d, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e,
-  0x300f, 0x3010, 0x3011, 0xff0b, 0x2212, 0x00b1, 0x00d7, 0x00f7,
-  0xff1d, 0x2260, 0xff1c, 0xff1e, 0x2266, 0x2267, 0x221e, 0x2234,
-  0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xffe5, 0xff04,
-  0x00a2, 0x00a3, 0xff05, 0xff03, 0xff06, 0xff0a, 0xff20, 0x00a7,
-  0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7,
-  /* 0x22 */
-  0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x203b,
-  0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, 0x222a,
-  0x2229, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x2227, 0x2228, 0x00ac, 0x21d2, 0x21d4, 0x2200, 0x2203,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207,
-  0x2261, 0x2252, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, 0x2235,
-  0x222b, 0x222c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x212b, 0x2030, 0x266f, 0x266d, 0x266a, 0x2020, 0x2021,
-  0x00b6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x25ef,
-  /* 0x23 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xff10,
-  0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18,
-  0xff19, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28,
-  0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
-  0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38,
-  0xff39, 0xff3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48,
-  0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50,
-  0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58,
-  0xff59, 0xff5a, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x24 */
-  0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
-  0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050,
-  0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
-  0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060,
-  0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
-  0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070,
-  0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
-  0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080,
-  0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
-  0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090,
-  0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x25 */
-  0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8,
-  0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
-  0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8,
-  0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
-  0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8,
-  0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
-  0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8,
-  0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
-  0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8,
-  0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
-  0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x26 */
-  0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
-  0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
-  0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
-  0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
-  0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x27 */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
-  0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
-  0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e,
-  0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
-  0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
-  0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e,
-  0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x28 */
-  0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c,
-  0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b,
-  0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f,
-  0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542,
-};
-static const unsigned short jisx0208_2uni_page30[6398] = {
-  /* 0x30 */
-  0x4e9c, 0x5516, 0x5a03, 0x963f, 0x54c0, 0x611b, 0x6328, 0x59f6,
-  0x9022, 0x8475, 0x831c, 0x7a50, 0x60aa, 0x63e1, 0x6e25, 0x65ed,
-  0x8466, 0x82a6, 0x9bf5, 0x6893, 0x5727, 0x65a1, 0x6271, 0x5b9b,
-  0x59d0, 0x867b, 0x98f4, 0x7d62, 0x7dbe, 0x9b8e, 0x6216, 0x7c9f,
-  0x88b7, 0x5b89, 0x5eb5, 0x6309, 0x6697, 0x6848, 0x95c7, 0x978d,
-  0x674f, 0x4ee5, 0x4f0a, 0x4f4d, 0x4f9d, 0x5049, 0x56f2, 0x5937,
-  0x59d4, 0x5a01, 0x5c09, 0x60df, 0x610f, 0x6170, 0x6613, 0x6905,
-  0x70ba, 0x754f, 0x7570, 0x79fb, 0x7dad, 0x7def, 0x80c3, 0x840e,
-  0x8863, 0x8b02, 0x9055, 0x907a, 0x533b, 0x4e95, 0x4ea5, 0x57df,
-  0x80b2, 0x90c1, 0x78ef, 0x4e00, 0x58f1, 0x6ea2, 0x9038, 0x7a32,
-  0x8328, 0x828b, 0x9c2f, 0x5141, 0x5370, 0x54bd, 0x54e1, 0x56e0,
-  0x59fb, 0x5f15, 0x98f2, 0x6deb, 0x80e4, 0x852d,
-  /* 0x31 */
-  0x9662, 0x9670, 0x96a0, 0x97fb, 0x540b, 0x53f3, 0x5b87, 0x70cf,
-  0x7fbd, 0x8fc2, 0x96e8, 0x536f, 0x9d5c, 0x7aba, 0x4e11, 0x7893,
-  0x81fc, 0x6e26, 0x5618, 0x5504, 0x6b1d, 0x851a, 0x9c3b, 0x59e5,
-  0x53a9, 0x6d66, 0x74dc, 0x958f, 0x5642, 0x4e91, 0x904b, 0x96f2,
-  0x834f, 0x990c, 0x53e1, 0x55b6, 0x5b30, 0x5f71, 0x6620, 0x66f3,
-  0x6804, 0x6c38, 0x6cf3, 0x6d29, 0x745b, 0x76c8, 0x7a4e, 0x9834,
-  0x82f1, 0x885b, 0x8a60, 0x92ed, 0x6db2, 0x75ab, 0x76ca, 0x99c5,
-  0x60a6, 0x8b01, 0x8d8a, 0x95b2, 0x698e, 0x53ad, 0x5186, 0x5712,
-  0x5830, 0x5944, 0x5bb4, 0x5ef6, 0x6028, 0x63a9, 0x63f4, 0x6cbf,
-  0x6f14, 0x708e, 0x7114, 0x7159, 0x71d5, 0x733f, 0x7e01, 0x8276,
-  0x82d1, 0x8597, 0x9060, 0x925b, 0x9d1b, 0x5869, 0x65bc, 0x6c5a,
-  0x7525, 0x51f9, 0x592e, 0x5965, 0x5f80, 0x5fdc,
-  /* 0x32 */
-  0x62bc, 0x65fa, 0x6a2a, 0x6b27, 0x6bb4, 0x738b, 0x7fc1, 0x8956,
-  0x9d2c, 0x9d0e, 0x9ec4, 0x5ca1, 0x6c96, 0x837b, 0x5104, 0x5c4b,
-  0x61b6, 0x81c6, 0x6876, 0x7261, 0x4e59, 0x4ffa, 0x5378, 0x6069,
-  0x6e29, 0x7a4f, 0x97f3, 0x4e0b, 0x5316, 0x4eee, 0x4f55, 0x4f3d,
-  0x4fa1, 0x4f73, 0x52a0, 0x53ef, 0x5609, 0x590f, 0x5ac1, 0x5bb6,
-  0x5be1, 0x79d1, 0x6687, 0x679c, 0x67b6, 0x6b4c, 0x6cb3, 0x706b,
-  0x73c2, 0x798d, 0x79be, 0x7a3c, 0x7b87, 0x82b1, 0x82db, 0x8304,
-  0x8377, 0x83ef, 0x83d3, 0x8766, 0x8ab2, 0x5629, 0x8ca8, 0x8fe6,
-  0x904e, 0x971e, 0x868a, 0x4fc4, 0x5ce8, 0x6211, 0x7259, 0x753b,
-  0x81e5, 0x82bd, 0x86fe, 0x8cc0, 0x96c5, 0x9913, 0x99d5, 0x4ecb,
-  0x4f1a, 0x89e3, 0x56de, 0x584a, 0x58ca, 0x5efb, 0x5feb, 0x602a,
-  0x6094, 0x6062, 0x61d0, 0x6212, 0x62d0, 0x6539,
-  /* 0x33 */
-  0x9b41, 0x6666, 0x68b0, 0x6d77, 0x7070, 0x754c, 0x7686, 0x7d75,
-  0x82a5, 0x87f9, 0x958b, 0x968e, 0x8c9d, 0x51f1, 0x52be, 0x5916,
-  0x54b3, 0x5bb3, 0x5d16, 0x6168, 0x6982, 0x6daf, 0x788d, 0x84cb,
-  0x8857, 0x8a72, 0x93a7, 0x9ab8, 0x6d6c, 0x99a8, 0x86d9, 0x57a3,
-  0x67ff, 0x86ce, 0x920e, 0x5283, 0x5687, 0x5404, 0x5ed3, 0x62e1,
-  0x64b9, 0x683c, 0x6838, 0x6bbb, 0x7372, 0x78ba, 0x7a6b, 0x899a,
-  0x89d2, 0x8d6b, 0x8f03, 0x90ed, 0x95a3, 0x9694, 0x9769, 0x5b66,
-  0x5cb3, 0x697d, 0x984d, 0x984e, 0x639b, 0x7b20, 0x6a2b, 0x6a7f,
-  0x68b6, 0x9c0d, 0x6f5f, 0x5272, 0x559d, 0x6070, 0x62ec, 0x6d3b,
-  0x6e07, 0x6ed1, 0x845b, 0x8910, 0x8f44, 0x4e14, 0x9c39, 0x53f6,
-  0x691b, 0x6a3a, 0x9784, 0x682a, 0x515c, 0x7ac3, 0x84b2, 0x91dc,
-  0x938c, 0x565b, 0x9d28, 0x6822, 0x8305, 0x8431,
-  /* 0x34 */
-  0x7ca5, 0x5208, 0x82c5, 0x74e6, 0x4e7e, 0x4f83, 0x51a0, 0x5bd2,
-  0x520a, 0x52d8, 0x52e7, 0x5dfb, 0x559a, 0x582a, 0x59e6, 0x5b8c,
-  0x5b98, 0x5bdb, 0x5e72, 0x5e79, 0x60a3, 0x611f, 0x6163, 0x61be,
-  0x63db, 0x6562, 0x67d1, 0x6853, 0x68fa, 0x6b3e, 0x6b53, 0x6c57,
-  0x6f22, 0x6f97, 0x6f45, 0x74b0, 0x7518, 0x76e3, 0x770b, 0x7aff,
-  0x7ba1, 0x7c21, 0x7de9, 0x7f36, 0x7ff0, 0x809d, 0x8266, 0x839e,
-  0x89b3, 0x8acc, 0x8cab, 0x9084, 0x9451, 0x9593, 0x9591, 0x95a2,
-  0x9665, 0x97d3, 0x9928, 0x8218, 0x4e38, 0x542b, 0x5cb8, 0x5dcc,
-  0x73a9, 0x764c, 0x773c, 0x5ca9, 0x7feb, 0x8d0b, 0x96c1, 0x9811,
-  0x9854, 0x9858, 0x4f01, 0x4f0e, 0x5371, 0x559c, 0x5668, 0x57fa,
-  0x5947, 0x5b09, 0x5bc4, 0x5c90, 0x5e0c, 0x5e7e, 0x5fcc, 0x63ee,
-  0x673a, 0x65d7, 0x65e2, 0x671f, 0x68cb, 0x68c4,
-  /* 0x35 */
-  0x6a5f, 0x5e30, 0x6bc5, 0x6c17, 0x6c7d, 0x757f, 0x7948, 0x5b63,
-  0x7a00, 0x7d00, 0x5fbd, 0x898f, 0x8a18, 0x8cb4, 0x8d77, 0x8ecc,
-  0x8f1d, 0x98e2, 0x9a0e, 0x9b3c, 0x4e80, 0x507d, 0x5100, 0x5993,
-  0x5b9c, 0x622f, 0x6280, 0x64ec, 0x6b3a, 0x72a0, 0x7591, 0x7947,
-  0x7fa9, 0x87fb, 0x8abc, 0x8b70, 0x63ac, 0x83ca, 0x97a0, 0x5409,
-  0x5403, 0x55ab, 0x6854, 0x6a58, 0x8a70, 0x7827, 0x6775, 0x9ecd,
-  0x5374, 0x5ba2, 0x811a, 0x8650, 0x9006, 0x4e18, 0x4e45, 0x4ec7,
-  0x4f11, 0x53ca, 0x5438, 0x5bae, 0x5f13, 0x6025, 0x6551, 0x673d,
-  0x6c42, 0x6c72, 0x6ce3, 0x7078, 0x7403, 0x7a76, 0x7aae, 0x7b08,
-  0x7d1a, 0x7cfe, 0x7d66, 0x65e7, 0x725b, 0x53bb, 0x5c45, 0x5de8,
-  0x62d2, 0x62e0, 0x6319, 0x6e20, 0x865a, 0x8a31, 0x8ddd, 0x92f8,
-  0x6f01, 0x79a6, 0x9b5a, 0x4ea8, 0x4eab, 0x4eac,
-  /* 0x36 */
-  0x4f9b, 0x4fa0, 0x50d1, 0x5147, 0x7af6, 0x5171, 0x51f6, 0x5354,
-  0x5321, 0x537f, 0x53eb, 0x55ac, 0x5883, 0x5ce1, 0x5f37, 0x5f4a,
-  0x602f, 0x6050, 0x606d, 0x631f, 0x6559, 0x6a4b, 0x6cc1, 0x72c2,
-  0x72ed, 0x77ef, 0x80f8, 0x8105, 0x8208, 0x854e, 0x90f7, 0x93e1,
-  0x97ff, 0x9957, 0x9a5a, 0x4ef0, 0x51dd, 0x5c2d, 0x6681, 0x696d,
-  0x5c40, 0x66f2, 0x6975, 0x7389, 0x6850, 0x7c81, 0x50c5, 0x52e4,
-  0x5747, 0x5dfe, 0x9326, 0x65a4, 0x6b23, 0x6b3d, 0x7434, 0x7981,
-  0x79bd, 0x7b4b, 0x7dca, 0x82b9, 0x83cc, 0x887f, 0x895f, 0x8b39,
-  0x8fd1, 0x91d1, 0x541f, 0x9280, 0x4e5d, 0x5036, 0x53e5, 0x533a,
-  0x72d7, 0x7396, 0x77e9, 0x82e6, 0x8eaf, 0x99c6, 0x99c8, 0x99d2,
-  0x5177, 0x611a, 0x865e, 0x55b0, 0x7a7a, 0x5076, 0x5bd3, 0x9047,
-  0x9685, 0x4e32, 0x6adb, 0x91e7, 0x5c51, 0x5c48,
-  /* 0x37 */
-  0x6398, 0x7a9f, 0x6c93, 0x9774, 0x8f61, 0x7aaa, 0x718a, 0x9688,
-  0x7c82, 0x6817, 0x7e70, 0x6851, 0x936c, 0x52f2, 0x541b, 0x85ab,
-  0x8a13, 0x7fa4, 0x8ecd, 0x90e1, 0x5366, 0x8888, 0x7941, 0x4fc2,
-  0x50be, 0x5211, 0x5144, 0x5553, 0x572d, 0x73ea, 0x578b, 0x5951,
-  0x5f62, 0x5f84, 0x6075, 0x6176, 0x6167, 0x61a9, 0x63b2, 0x643a,
-  0x656c, 0x666f, 0x6842, 0x6e13, 0x7566, 0x7a3d, 0x7cfb, 0x7d4c,
-  0x7d99, 0x7e4b, 0x7f6b, 0x830e, 0x834a, 0x86cd, 0x8a08, 0x8a63,
-  0x8b66, 0x8efd, 0x981a, 0x9d8f, 0x82b8, 0x8fce, 0x9be8, 0x5287,
-  0x621f, 0x6483, 0x6fc0, 0x9699, 0x6841, 0x5091, 0x6b20, 0x6c7a,
-  0x6f54, 0x7a74, 0x7d50, 0x8840, 0x8a23, 0x6708, 0x4ef6, 0x5039,
-  0x5026, 0x5065, 0x517c, 0x5238, 0x5263, 0x55a7, 0x570f, 0x5805,
-  0x5acc, 0x5efa, 0x61b2, 0x61f8, 0x62f3, 0x6372,
-  /* 0x38 */
-  0x691c, 0x6a29, 0x727d, 0x72ac, 0x732e, 0x7814, 0x786f, 0x7d79,
-  0x770c, 0x80a9, 0x898b, 0x8b19, 0x8ce2, 0x8ed2, 0x9063, 0x9375,
-  0x967a, 0x9855, 0x9a13, 0x9e78, 0x5143, 0x539f, 0x53b3, 0x5e7b,
-  0x5f26, 0x6e1b, 0x6e90, 0x7384, 0x73fe, 0x7d43, 0x8237, 0x8a00,
-  0x8afa, 0x9650, 0x4e4e, 0x500b, 0x53e4, 0x547c, 0x56fa, 0x59d1,
-  0x5b64, 0x5df1, 0x5eab, 0x5f27, 0x6238, 0x6545, 0x67af, 0x6e56,
-  0x72d0, 0x7cca, 0x88b4, 0x80a1, 0x80e1, 0x83f0, 0x864e, 0x8a87,
-  0x8de8, 0x9237, 0x96c7, 0x9867, 0x9f13, 0x4e94, 0x4e92, 0x4f0d,
-  0x5348, 0x5449, 0x543e, 0x5a2f, 0x5f8c, 0x5fa1, 0x609f, 0x68a7,
-  0x6a8e, 0x745a, 0x7881, 0x8a9e, 0x8aa4, 0x8b77, 0x9190, 0x4e5e,
-  0x9bc9, 0x4ea4, 0x4f7c, 0x4faf, 0x5019, 0x5016, 0x5149, 0x516c,
-  0x529f, 0x52b9, 0x52fe, 0x539a, 0x53e3, 0x5411,
-  /* 0x39 */
-  0x540e, 0x5589, 0x5751, 0x57a2, 0x597d, 0x5b54, 0x5b5d, 0x5b8f,
-  0x5de5, 0x5de7, 0x5df7, 0x5e78, 0x5e83, 0x5e9a, 0x5eb7, 0x5f18,
-  0x6052, 0x614c, 0x6297, 0x62d8, 0x63a7, 0x653b, 0x6602, 0x6643,
-  0x66f4, 0x676d, 0x6821, 0x6897, 0x69cb, 0x6c5f, 0x6d2a, 0x6d69,
-  0x6e2f, 0x6e9d, 0x7532, 0x7687, 0x786c, 0x7a3f, 0x7ce0, 0x7d05,
-  0x7d18, 0x7d5e, 0x7db1, 0x8015, 0x8003, 0x80af, 0x80b1, 0x8154,
-  0x818f, 0x822a, 0x8352, 0x884c, 0x8861, 0x8b1b, 0x8ca2, 0x8cfc,
-  0x90ca, 0x9175, 0x9271, 0x783f, 0x92fc, 0x95a4, 0x964d, 0x9805,
-  0x9999, 0x9ad8, 0x9d3b, 0x525b, 0x52ab, 0x53f7, 0x5408, 0x58d5,
-  0x62f7, 0x6fe0, 0x8c6a, 0x8f5f, 0x9eb9, 0x514b, 0x523b, 0x544a,
-  0x56fd, 0x7a40, 0x9177, 0x9d60, 0x9ed2, 0x7344, 0x6f09, 0x8170,
-  0x7511, 0x5ffd, 0x60da, 0x9aa8, 0x72db, 0x8fbc,
-  /* 0x3a */
-  0x6b64, 0x9803, 0x4eca, 0x56f0, 0x5764, 0x58be, 0x5a5a, 0x6068,
-  0x61c7, 0x660f, 0x6606, 0x6839, 0x68b1, 0x6df7, 0x75d5, 0x7d3a,
-  0x826e, 0x9b42, 0x4e9b, 0x4f50, 0x53c9, 0x5506, 0x5d6f, 0x5de6,
-  0x5dee, 0x67fb, 0x6c99, 0x7473, 0x7802, 0x8a50, 0x9396, 0x88df,
-  0x5750, 0x5ea7, 0x632b, 0x50b5, 0x50ac, 0x518d, 0x6700, 0x54c9,
-  0x585e, 0x59bb, 0x5bb0, 0x5f69, 0x624d, 0x63a1, 0x683d, 0x6b73,
-  0x6e08, 0x707d, 0x91c7, 0x7280, 0x7815, 0x7826, 0x796d, 0x658e,
-  0x7d30, 0x83dc, 0x88c1, 0x8f09, 0x969b, 0x5264, 0x5728, 0x6750,
-  0x7f6a, 0x8ca1, 0x51b4, 0x5742, 0x962a, 0x583a, 0x698a, 0x80b4,
-  0x54b2, 0x5d0e, 0x57fc, 0x7895, 0x9dfa, 0x4f5c, 0x524a, 0x548b,
-  0x643e, 0x6628, 0x6714, 0x67f5, 0x7a84, 0x7b56, 0x7d22, 0x932f,
-  0x685c, 0x9bad, 0x7b39, 0x5319, 0x518a, 0x5237,
-  /* 0x3b */
-  0x5bdf, 0x62f6, 0x64ae, 0x64e6, 0x672d, 0x6bba, 0x85a9, 0x96d1,
-  0x7690, 0x9bd6, 0x634c, 0x9306, 0x9bab, 0x76bf, 0x6652, 0x4e09,
-  0x5098, 0x53c2, 0x5c71, 0x60e8, 0x6492, 0x6563, 0x685f, 0x71e6,
-  0x73ca, 0x7523, 0x7b97, 0x7e82, 0x8695, 0x8b83, 0x8cdb, 0x9178,
-  0x9910, 0x65ac, 0x66ab, 0x6b8b, 0x4ed5, 0x4ed4, 0x4f3a, 0x4f7f,
-  0x523a, 0x53f8, 0x53f2, 0x55e3, 0x56db, 0x58eb, 0x59cb, 0x59c9,
-  0x59ff, 0x5b50, 0x5c4d, 0x5e02, 0x5e2b, 0x5fd7, 0x601d, 0x6307,
-  0x652f, 0x5b5c, 0x65af, 0x65bd, 0x65e8, 0x679d, 0x6b62, 0x6b7b,
-  0x6c0f, 0x7345, 0x7949, 0x79c1, 0x7cf8, 0x7d19, 0x7d2b, 0x80a2,
-  0x8102, 0x81f3, 0x8996, 0x8a5e, 0x8a69, 0x8a66, 0x8a8c, 0x8aee,
-  0x8cc7, 0x8cdc, 0x96cc, 0x98fc, 0x6b6f, 0x4e8b, 0x4f3c, 0x4f8d,
-  0x5150, 0x5b57, 0x5bfa, 0x6148, 0x6301, 0x6642,
-  /* 0x3c */
-  0x6b21, 0x6ecb, 0x6cbb, 0x723e, 0x74bd, 0x75d4, 0x78c1, 0x793a,
-  0x800c, 0x8033, 0x81ea, 0x8494, 0x8f9e, 0x6c50, 0x9e7f, 0x5f0f,
-  0x8b58, 0x9d2b, 0x7afa, 0x8ef8, 0x5b8d, 0x96eb, 0x4e03, 0x53f1,
-  0x57f7, 0x5931, 0x5ac9, 0x5ba4, 0x6089, 0x6e7f, 0x6f06, 0x75be,
-  0x8cea, 0x5b9f, 0x8500, 0x7be0, 0x5072, 0x67f4, 0x829d, 0x5c61,
-  0x854a, 0x7e1e, 0x820e, 0x5199, 0x5c04, 0x6368, 0x8d66, 0x659c,
-  0x716e, 0x793e, 0x7d17, 0x8005, 0x8b1d, 0x8eca, 0x906e, 0x86c7,
-  0x90aa, 0x501f, 0x52fa, 0x5c3a, 0x6753, 0x707c, 0x7235, 0x914c,
-  0x91c8, 0x932b, 0x82e5, 0x5bc2, 0x5f31, 0x60f9, 0x4e3b, 0x53d6,
-  0x5b88, 0x624b, 0x6731, 0x6b8a, 0x72e9, 0x73e0, 0x7a2e, 0x816b,
-  0x8da3, 0x9152, 0x9996, 0x5112, 0x53d7, 0x546a, 0x5bff, 0x6388,
-  0x6a39, 0x7dac, 0x9700, 0x56da, 0x53ce, 0x5468,
-  /* 0x3d */
-  0x5b97, 0x5c31, 0x5dde, 0x4fee, 0x6101, 0x62fe, 0x6d32, 0x79c0,
-  0x79cb, 0x7d42, 0x7e4d, 0x7fd2, 0x81ed, 0x821f, 0x8490, 0x8846,
-  0x8972, 0x8b90, 0x8e74, 0x8f2f, 0x9031, 0x914b, 0x916c, 0x96c6,
-  0x919c, 0x4ec0, 0x4f4f, 0x5145, 0x5341, 0x5f93, 0x620e, 0x67d4,
-  0x6c41, 0x6e0b, 0x7363, 0x7e26, 0x91cd, 0x9283, 0x53d4, 0x5919,
-  0x5bbf, 0x6dd1, 0x795d, 0x7e2e, 0x7c9b, 0x587e, 0x719f, 0x51fa,
-  0x8853, 0x8ff0, 0x4fca, 0x5cfb, 0x6625, 0x77ac, 0x7ae3, 0x821c,
-  0x99ff, 0x51c6, 0x5faa, 0x65ec, 0x696f, 0x6b89, 0x6df3, 0x6e96,
-  0x6f64, 0x76fe, 0x7d14, 0x5de1, 0x9075, 0x9187, 0x9806, 0x51e6,
-  0x521d, 0x6240, 0x6691, 0x66d9, 0x6e1a, 0x5eb6, 0x7dd2, 0x7f72,
-  0x66f8, 0x85af, 0x85f7, 0x8af8, 0x52a9, 0x53d9, 0x5973, 0x5e8f,
-  0x5f90, 0x6055, 0x92e4, 0x9664, 0x50b7, 0x511f,
-  /* 0x3e */
-  0x52dd, 0x5320, 0x5347, 0x53ec, 0x54e8, 0x5546, 0x5531, 0x5617,
-  0x5968, 0x59be, 0x5a3c, 0x5bb5, 0x5c06, 0x5c0f, 0x5c11, 0x5c1a,
-  0x5e84, 0x5e8a, 0x5ee0, 0x5f70, 0x627f, 0x6284, 0x62db, 0x638c,
-  0x6377, 0x6607, 0x660c, 0x662d, 0x6676, 0x677e, 0x68a2, 0x6a1f,
-  0x6a35, 0x6cbc, 0x6d88, 0x6e09, 0x6e58, 0x713c, 0x7126, 0x7167,
-  0x75c7, 0x7701, 0x785d, 0x7901, 0x7965, 0x79f0, 0x7ae0, 0x7b11,
-  0x7ca7, 0x7d39, 0x8096, 0x83d6, 0x848b, 0x8549, 0x885d, 0x88f3,
-  0x8a1f, 0x8a3c, 0x8a54, 0x8a73, 0x8c61, 0x8cde, 0x91a4, 0x9266,
-  0x937e, 0x9418, 0x969c, 0x9798, 0x4e0a, 0x4e08, 0x4e1e, 0x4e57,
-  0x5197, 0x5270, 0x57ce, 0x5834, 0x58cc, 0x5b22, 0x5e38, 0x60c5,
-  0x64fe, 0x6761, 0x6756, 0x6d44, 0x72b6, 0x7573, 0x7a63, 0x84b8,
-  0x8b72, 0x91b8, 0x9320, 0x5631, 0x57f4, 0x98fe,
-  /* 0x3f */
-  0x62ed, 0x690d, 0x6b96, 0x71ed, 0x7e54, 0x8077, 0x8272, 0x89e6,
-  0x98df, 0x8755, 0x8fb1, 0x5c3b, 0x4f38, 0x4fe1, 0x4fb5, 0x5507,
-  0x5a20, 0x5bdd, 0x5be9, 0x5fc3, 0x614e, 0x632f, 0x65b0, 0x664b,
-  0x68ee, 0x699b, 0x6d78, 0x6df1, 0x7533, 0x75b9, 0x771f, 0x795e,
-  0x79e6, 0x7d33, 0x81e3, 0x82af, 0x85aa, 0x89aa, 0x8a3a, 0x8eab,
-  0x8f9b, 0x9032, 0x91dd, 0x9707, 0x4eba, 0x4ec1, 0x5203, 0x5875,
-  0x58ec, 0x5c0b, 0x751a, 0x5c3d, 0x814e, 0x8a0a, 0x8fc5, 0x9663,
-  0x976d, 0x7b25, 0x8acf, 0x9808, 0x9162, 0x56f3, 0x53a8, 0x9017,
-  0x5439, 0x5782, 0x5e25, 0x63a8, 0x6c34, 0x708a, 0x7761, 0x7c8b,
-  0x7fe0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968f, 0x745e,
-  0x9ac4, 0x5d07, 0x5d69, 0x6570, 0x67a2, 0x8da8, 0x96db, 0x636e,
-  0x6749, 0x6919, 0x83c5, 0x9817, 0x96c0, 0x88fe,
-  /* 0x40 */
-  0x6f84, 0x647a, 0x5bf8, 0x4e16, 0x702c, 0x755d, 0x662f, 0x51c4,
-  0x5236, 0x52e2, 0x59d3, 0x5f81, 0x6027, 0x6210, 0x653f, 0x6574,
-  0x661f, 0x6674, 0x68f2, 0x6816, 0x6b63, 0x6e05, 0x7272, 0x751f,
-  0x76db, 0x7cbe, 0x8056, 0x58f0, 0x88fd, 0x897f, 0x8aa0, 0x8a93,
-  0x8acb, 0x901d, 0x9192, 0x9752, 0x9759, 0x6589, 0x7a0e, 0x8106,
-  0x96bb, 0x5e2d, 0x60dc, 0x621a, 0x65a5, 0x6614, 0x6790, 0x77f3,
-  0x7a4d, 0x7c4d, 0x7e3e, 0x810a, 0x8cac, 0x8d64, 0x8de1, 0x8e5f,
-  0x78a9, 0x5207, 0x62d9, 0x63a5, 0x6442, 0x6298, 0x8a2d, 0x7a83,
-  0x7bc0, 0x8aac, 0x96ea, 0x7d76, 0x820c, 0x8749, 0x4ed9, 0x5148,
-  0x5343, 0x5360, 0x5ba3, 0x5c02, 0x5c16, 0x5ddd, 0x6226, 0x6247,
-  0x64b0, 0x6813, 0x6834, 0x6cc9, 0x6d45, 0x6d17, 0x67d3, 0x6f5c,
-  0x714e, 0x717d, 0x65cb, 0x7a7f, 0x7bad, 0x7dda,
-  /* 0x41 */
-  0x7e4a, 0x7fa8, 0x817a, 0x821b, 0x8239, 0x85a6, 0x8a6e, 0x8cce,
-  0x8df5, 0x9078, 0x9077, 0x92ad, 0x9291, 0x9583, 0x9bae, 0x524d,
-  0x5584, 0x6f38, 0x7136, 0x5168, 0x7985, 0x7e55, 0x81b3, 0x7cce,
-  0x564c, 0x5851, 0x5ca8, 0x63aa, 0x66fe, 0x66fd, 0x695a, 0x72d9,
-  0x758f, 0x758e, 0x790e, 0x7956, 0x79df, 0x7c97, 0x7d20, 0x7d44,
-  0x8607, 0x8a34, 0x963b, 0x9061, 0x9f20, 0x50e7, 0x5275, 0x53cc,
-  0x53e2, 0x5009, 0x55aa, 0x58ee, 0x594f, 0x723d, 0x5b8b, 0x5c64,
-  0x531d, 0x60e3, 0x60f3, 0x635c, 0x6383, 0x633f, 0x63bb, 0x64cd,
-  0x65e9, 0x66f9, 0x5de3, 0x69cd, 0x69fd, 0x6f15, 0x71e5, 0x4e89,
-  0x75e9, 0x76f8, 0x7a93, 0x7cdf, 0x7dcf, 0x7d9c, 0x8061, 0x8349,
-  0x8358, 0x846c, 0x84bc, 0x85fb, 0x88c5, 0x8d70, 0x9001, 0x906d,
-  0x9397, 0x971c, 0x9a12, 0x50cf, 0x5897, 0x618e,
-  /* 0x42 */
-  0x81d3, 0x8535, 0x8d08, 0x9020, 0x4fc3, 0x5074, 0x5247, 0x5373,
-  0x606f, 0x6349, 0x675f, 0x6e2c, 0x8db3, 0x901f, 0x4fd7, 0x5c5e,
-  0x8cca, 0x65cf, 0x7d9a, 0x5352, 0x8896, 0x5176, 0x63c3, 0x5b58,
-  0x5b6b, 0x5c0a, 0x640d, 0x6751, 0x905c, 0x4ed6, 0x591a, 0x592a,
-  0x6c70, 0x8a51, 0x553e, 0x5815, 0x59a5, 0x60f0, 0x6253, 0x67c1,
-  0x8235, 0x6955, 0x9640, 0x99c4, 0x9a28, 0x4f53, 0x5806, 0x5bfe,
-  0x8010, 0x5cb1, 0x5e2f, 0x5f85, 0x6020, 0x614b, 0x6234, 0x66ff,
-  0x6cf0, 0x6ede, 0x80ce, 0x817f, 0x82d4, 0x888b, 0x8cb8, 0x9000,
-  0x902e, 0x968a, 0x9edb, 0x9bdb, 0x4ee3, 0x53f0, 0x5927, 0x7b2c,
-  0x918d, 0x984c, 0x9df9, 0x6edd, 0x7027, 0x5353, 0x5544, 0x5b85,
-  0x6258, 0x629e, 0x62d3, 0x6ca2, 0x6fef, 0x7422, 0x8a17, 0x9438,
-  0x6fc1, 0x8afe, 0x8338, 0x51e7, 0x86f8, 0x53ea,
-  /* 0x43 */
-  0x53e9, 0x4f46, 0x9054, 0x8fb0, 0x596a, 0x8131, 0x5dfd, 0x7aea,
-  0x8fbf, 0x68da, 0x8c37, 0x72f8, 0x9c48, 0x6a3d, 0x8ab0, 0x4e39,
-  0x5358, 0x5606, 0x5766, 0x62c5, 0x63a2, 0x65e6, 0x6b4e, 0x6de1,
-  0x6e5b, 0x70ad, 0x77ed, 0x7aef, 0x7baa, 0x7dbb, 0x803d, 0x80c6,
-  0x86cb, 0x8a95, 0x935b, 0x56e3, 0x58c7, 0x5f3e, 0x65ad, 0x6696,
-  0x6a80, 0x6bb5, 0x7537, 0x8ac7, 0x5024, 0x77e5, 0x5730, 0x5f1b,
-  0x6065, 0x667a, 0x6c60, 0x75f4, 0x7a1a, 0x7f6e, 0x81f4, 0x8718,
-  0x9045, 0x99b3, 0x7bc9, 0x755c, 0x7af9, 0x7b51, 0x84c4, 0x9010,
-  0x79e9, 0x7a92, 0x8336, 0x5ae1, 0x7740, 0x4e2d, 0x4ef2, 0x5b99,
-  0x5fe0, 0x62bd, 0x663c, 0x67f1, 0x6ce8, 0x866b, 0x8877, 0x8a3b,
-  0x914e, 0x92f3, 0x99d0, 0x6a17, 0x7026, 0x732a, 0x82e7, 0x8457,
-  0x8caf, 0x4e01, 0x5146, 0x51cb, 0x558b, 0x5bf5,
-  /* 0x44 */
-  0x5e16, 0x5e33, 0x5e81, 0x5f14, 0x5f35, 0x5f6b, 0x5fb4, 0x61f2,
-  0x6311, 0x66a2, 0x671d, 0x6f6e, 0x7252, 0x753a, 0x773a, 0x8074,
-  0x8139, 0x8178, 0x8776, 0x8abf, 0x8adc, 0x8d85, 0x8df3, 0x929a,
-  0x9577, 0x9802, 0x9ce5, 0x52c5, 0x6357, 0x76f4, 0x6715, 0x6c88,
-  0x73cd, 0x8cc3, 0x93ae, 0x9673, 0x6d25, 0x589c, 0x690e, 0x69cc,
-  0x8ffd, 0x939a, 0x75db, 0x901a, 0x585a, 0x6802, 0x63b4, 0x69fb,
-  0x4f43, 0x6f2c, 0x67d8, 0x8fbb, 0x8526, 0x7db4, 0x9354, 0x693f,
-  0x6f70, 0x576a, 0x58f7, 0x5b2c, 0x7d2c, 0x722a, 0x540a, 0x91e3,
-  0x9db4, 0x4ead, 0x4f4e, 0x505c, 0x5075, 0x5243, 0x8c9e, 0x5448,
-  0x5824, 0x5b9a, 0x5e1d, 0x5e95, 0x5ead, 0x5ef7, 0x5f1f, 0x608c,
-  0x62b5, 0x633a, 0x63d0, 0x68af, 0x6c40, 0x7887, 0x798e, 0x7a0b,
-  0x7de0, 0x8247, 0x8a02, 0x8ae6, 0x8e44, 0x9013,
-  /* 0x45 */
-  0x90b8, 0x912d, 0x91d8, 0x9f0e, 0x6ce5, 0x6458, 0x64e2, 0x6575,
-  0x6ef4, 0x7684, 0x7b1b, 0x9069, 0x93d1, 0x6eba, 0x54f2, 0x5fb9,
-  0x64a4, 0x8f4d, 0x8fed, 0x9244, 0x5178, 0x586b, 0x5929, 0x5c55,
-  0x5e97, 0x6dfb, 0x7e8f, 0x751c, 0x8cbc, 0x8ee2, 0x985b, 0x70b9,
-  0x4f1d, 0x6bbf, 0x6fb1, 0x7530, 0x96fb, 0x514e, 0x5410, 0x5835,
-  0x5857, 0x59ac, 0x5c60, 0x5f92, 0x6597, 0x675c, 0x6e21, 0x767b,
-  0x83df, 0x8ced, 0x9014, 0x90fd, 0x934d, 0x7825, 0x783a, 0x52aa,
-  0x5ea6, 0x571f, 0x5974, 0x6012, 0x5012, 0x515a, 0x51ac, 0x51cd,
-  0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5b95, 0x5cf6, 0x5d8b,
-  0x60bc, 0x6295, 0x642d, 0x6771, 0x6843, 0x68bc, 0x68df, 0x76d7,
-  0x6dd8, 0x6e6f, 0x6d9b, 0x706f, 0x71c8, 0x5f53, 0x75d8, 0x7977,
-  0x7b49, 0x7b54, 0x7b52, 0x7cd6, 0x7d71, 0x5230,
-  /* 0x46 */
-  0x8463, 0x8569, 0x85e4, 0x8a0e, 0x8b04, 0x8c46, 0x8e0f, 0x9003,
-  0x900f, 0x9419, 0x9676, 0x982d, 0x9a30, 0x95d8, 0x50cd, 0x52d5,
-  0x540c, 0x5802, 0x5c0e, 0x61a7, 0x649e, 0x6d1e, 0x77b3, 0x7ae5,
-  0x80f4, 0x8404, 0x9053, 0x9285, 0x5ce0, 0x9d07, 0x533f, 0x5f97,
-  0x5fb3, 0x6d9c, 0x7279, 0x7763, 0x79bf, 0x7be4, 0x6bd2, 0x72ec,
-  0x8aad, 0x6803, 0x6a61, 0x51f8, 0x7a81, 0x6934, 0x5c4a, 0x9cf6,
-  0x82eb, 0x5bc5, 0x9149, 0x701e, 0x5678, 0x5c6f, 0x60c7, 0x6566,
-  0x6c8c, 0x8c5a, 0x9041, 0x9813, 0x5451, 0x66c7, 0x920d, 0x5948,
-  0x90a3, 0x5185, 0x4e4d, 0x51ea, 0x8599, 0x8b0e, 0x7058, 0x637a,
-  0x934b, 0x6962, 0x99b4, 0x7e04, 0x7577, 0x5357, 0x6960, 0x8edf,
-  0x96e3, 0x6c5d, 0x4e8c, 0x5c3c, 0x5f10, 0x8fe9, 0x5302, 0x8cd1,
-  0x8089, 0x8679, 0x5eff, 0x65e5, 0x4e73, 0x5165,
-  /* 0x47 */
-  0x5982, 0x5c3f, 0x97ee, 0x4efb, 0x598a, 0x5fcd, 0x8a8d, 0x6fe1,
-  0x79b0, 0x7962, 0x5be7, 0x8471, 0x732b, 0x71b1, 0x5e74, 0x5ff5,
-  0x637b, 0x649a, 0x71c3, 0x7c98, 0x4e43, 0x5efc, 0x4e4b, 0x57dc,
-  0x56a2, 0x60a9, 0x6fc3, 0x7d0d, 0x80fd, 0x8133, 0x81bf, 0x8fb2,
-  0x8997, 0x86a4, 0x5df4, 0x628a, 0x64ad, 0x8987, 0x6777, 0x6ce2,
-  0x6d3e, 0x7436, 0x7834, 0x5a46, 0x7f75, 0x82ad, 0x99ac, 0x4ff3,
-  0x5ec3, 0x62dd, 0x6392, 0x6557, 0x676f, 0x76c3, 0x724c, 0x80cc,
-  0x80ba, 0x8f29, 0x914d, 0x500d, 0x57f9, 0x5a92, 0x6885, 0x6973,
-  0x7164, 0x72fd, 0x8cb7, 0x58f2, 0x8ce0, 0x966a, 0x9019, 0x877f,
-  0x79e4, 0x77e7, 0x8429, 0x4f2f, 0x5265, 0x535a, 0x62cd, 0x67cf,
-  0x6cca, 0x767d, 0x7b94, 0x7c95, 0x8236, 0x8584, 0x8feb, 0x66dd,
-  0x6f20, 0x7206, 0x7e1b, 0x83ab, 0x99c1, 0x9ea6,
-  /* 0x48 */
-  0x51fd, 0x7bb1, 0x7872, 0x7bb8, 0x8087, 0x7b48, 0x6ae8, 0x5e61,
-  0x808c, 0x7551, 0x7560, 0x516b, 0x9262, 0x6e8c, 0x767a, 0x9197,
-  0x9aea, 0x4f10, 0x7f70, 0x629c, 0x7b4f, 0x95a5, 0x9ce9, 0x567a,
-  0x5859, 0x86e4, 0x96bc, 0x4f34, 0x5224, 0x534a, 0x53cd, 0x53db,
-  0x5e06, 0x642c, 0x6591, 0x677f, 0x6c3e, 0x6c4e, 0x7248, 0x72af,
-  0x73ed, 0x7554, 0x7e41, 0x822c, 0x85e9, 0x8ca9, 0x7bc4, 0x91c6,
-  0x7169, 0x9812, 0x98ef, 0x633d, 0x6669, 0x756a, 0x76e4, 0x78d0,
-  0x8543, 0x86ee, 0x532a, 0x5351, 0x5426, 0x5983, 0x5e87, 0x5f7c,
-  0x60b2, 0x6249, 0x6279, 0x62ab, 0x6590, 0x6bd4, 0x6ccc, 0x75b2,
-  0x76ae, 0x7891, 0x79d8, 0x7dcb, 0x7f77, 0x80a5, 0x88ab, 0x8ab9,
-  0x8cbb, 0x907f, 0x975e, 0x98db, 0x6a0b, 0x7c38, 0x5099, 0x5c3e,
-  0x5fae, 0x6787, 0x6bd8, 0x7435, 0x7709, 0x7f8e,
-  /* 0x49 */
-  0x9f3b, 0x67ca, 0x7a17, 0x5339, 0x758b, 0x9aed, 0x5f66, 0x819d,
-  0x83f1, 0x8098, 0x5f3c, 0x5fc5, 0x7562, 0x7b46, 0x903c, 0x6867,
-  0x59eb, 0x5a9b, 0x7d10, 0x767e, 0x8b2c, 0x4ff5, 0x5f6a, 0x6a19,
-  0x6c37, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8a55, 0x8c79, 0x5edf,
-  0x63cf, 0x75c5, 0x79d2, 0x82d7, 0x9328, 0x92f2, 0x849c, 0x86ed,
-  0x9c2d, 0x54c1, 0x5f6c, 0x658c, 0x6d5c, 0x7015, 0x8ca7, 0x8cd3,
-  0x983b, 0x654f, 0x74f6, 0x4e0d, 0x4ed8, 0x57e0, 0x592b, 0x5a66,
-  0x5bcc, 0x51a8, 0x5e03, 0x5e9c, 0x6016, 0x6276, 0x6577, 0x65a7,
-  0x666e, 0x6d6e, 0x7236, 0x7b26, 0x8150, 0x819a, 0x8299, 0x8b5c,
-  0x8ca0, 0x8ce6, 0x8d74, 0x961c, 0x9644, 0x4fae, 0x64ab, 0x6b66,
-  0x821e, 0x8461, 0x856a, 0x90e8, 0x5c01, 0x6953, 0x98a8, 0x847a,
-  0x8557, 0x4f0f, 0x526f, 0x5fa9, 0x5e45, 0x670d,
-  /* 0x4a */
-  0x798f, 0x8179, 0x8907, 0x8986, 0x6df5, 0x5f17, 0x6255, 0x6cb8,
-  0x4ecf, 0x7269, 0x9b92, 0x5206, 0x543b, 0x5674, 0x58b3, 0x61a4,
-  0x626e, 0x711a, 0x596e, 0x7c89, 0x7cde, 0x7d1b, 0x96f0, 0x6587,
-  0x805e, 0x4e19, 0x4f75, 0x5175, 0x5840, 0x5e63, 0x5e73, 0x5f0a,
-  0x67c4, 0x4e26, 0x853d, 0x9589, 0x965b, 0x7c73, 0x9801, 0x50fb,
-  0x58c1, 0x7656, 0x78a7, 0x5225, 0x77a5, 0x8511, 0x7b86, 0x504f,
-  0x5909, 0x7247, 0x7bc7, 0x7de8, 0x8fba, 0x8fd4, 0x904d, 0x4fbf,
-  0x52c9, 0x5a29, 0x5f01, 0x97ad, 0x4fdd, 0x8217, 0x92ea, 0x5703,
-  0x6355, 0x6b69, 0x752b, 0x88dc, 0x8f14, 0x7a42, 0x52df, 0x5893,
-  0x6155, 0x620a, 0x66ae, 0x6bcd, 0x7c3f, 0x83e9, 0x5023, 0x4ff8,
-  0x5305, 0x5446, 0x5831, 0x5949, 0x5b9d, 0x5cf0, 0x5cef, 0x5d29,
-  0x5e96, 0x62b1, 0x6367, 0x653e, 0x65b9, 0x670b,
-  /* 0x4b */
-  0x6cd5, 0x6ce1, 0x70f9, 0x7832, 0x7e2b, 0x80de, 0x82b3, 0x840c,
-  0x84ec, 0x8702, 0x8912, 0x8a2a, 0x8c4a, 0x90a6, 0x92d2, 0x98fd,
-  0x9cf3, 0x9d6c, 0x4e4f, 0x4ea1, 0x508d, 0x5256, 0x574a, 0x59a8,
-  0x5e3d, 0x5fd8, 0x5fd9, 0x623f, 0x66b4, 0x671b, 0x67d0, 0x68d2,
-  0x5192, 0x7d21, 0x80aa, 0x81a8, 0x8b00, 0x8c8c, 0x8cbf, 0x927e,
-  0x9632, 0x5420, 0x982c, 0x5317, 0x50d5, 0x535c, 0x58a8, 0x64b2,
-  0x6734, 0x7267, 0x7766, 0x7a46, 0x91e6, 0x52c3, 0x6ca1, 0x6b86,
-  0x5800, 0x5e4c, 0x5954, 0x672c, 0x7ffb, 0x51e1, 0x76c6, 0x6469,
-  0x78e8, 0x9b54, 0x9ebb, 0x57cb, 0x59b9, 0x6627, 0x679a, 0x6bce,
-  0x54e9, 0x69d9, 0x5e55, 0x819c, 0x6795, 0x9baa, 0x67fe, 0x9c52,
-  0x685d, 0x4ea6, 0x4fe3, 0x53c8, 0x62b9, 0x672b, 0x6cab, 0x8fc4,
-  0x4fad, 0x7e6d, 0x9ebf, 0x4e07, 0x6162, 0x6e80,
-  /* 0x4c */
-  0x6f2b, 0x8513, 0x5473, 0x672a, 0x9b45, 0x5df3, 0x7b95, 0x5cac,
-  0x5bc6, 0x871c, 0x6e4a, 0x84d1, 0x7a14, 0x8108, 0x5999, 0x7c8d,
-  0x6c11, 0x7720, 0x52d9, 0x5922, 0x7121, 0x725f, 0x77db, 0x9727,
-  0x9d61, 0x690b, 0x5a7f, 0x5a18, 0x51a5, 0x540d, 0x547d, 0x660e,
-  0x76df, 0x8ff7, 0x9298, 0x9cf4, 0x59ea, 0x725d, 0x6ec5, 0x514d,
-  0x68c9, 0x7dbf, 0x7dec, 0x9762, 0x9eba, 0x6478, 0x6a21, 0x8302,
-  0x5984, 0x5b5f, 0x6bdb, 0x731b, 0x76f2, 0x7db2, 0x8017, 0x8499,
-  0x5132, 0x6728, 0x9ed9, 0x76ee, 0x6762, 0x52ff, 0x9905, 0x5c24,
-  0x623b, 0x7c7e, 0x8cb0, 0x554f, 0x60b6, 0x7d0b, 0x9580, 0x5301,
-  0x4e5f, 0x51b6, 0x591c, 0x723a, 0x8036, 0x91ce, 0x5f25, 0x77e2,
-  0x5384, 0x5f79, 0x7d04, 0x85ac, 0x8a33, 0x8e8d, 0x9756, 0x67f3,
-  0x85ae, 0x9453, 0x6109, 0x6108, 0x6cb9, 0x7652,
-  /* 0x4d */
-  0x8aed, 0x8f38, 0x552f, 0x4f51, 0x512a, 0x52c7, 0x53cb, 0x5ba5,
-  0x5e7d, 0x60a0, 0x6182, 0x63d6, 0x6709, 0x67da, 0x6e67, 0x6d8c,
-  0x7336, 0x7337, 0x7531, 0x7950, 0x88d5, 0x8a98, 0x904a, 0x9091,
-  0x90f5, 0x96c4, 0x878d, 0x5915, 0x4e88, 0x4f59, 0x4e0e, 0x8a89,
-  0x8f3f, 0x9810, 0x50ad, 0x5e7c, 0x5996, 0x5bb9, 0x5eb8, 0x63da,
-  0x63fa, 0x64c1, 0x66dc, 0x694a, 0x69d8, 0x6d0b, 0x6eb6, 0x7194,
-  0x7528, 0x7aaf, 0x7f8a, 0x8000, 0x8449, 0x84c9, 0x8981, 0x8b21,
-  0x8e0a, 0x9065, 0x967d, 0x990a, 0x617e, 0x6291, 0x6b32, 0x6c83,
-  0x6d74, 0x7fcc, 0x7ffc, 0x6dc0, 0x7f85, 0x87ba, 0x88f8, 0x6765,
-  0x83b1, 0x983c, 0x96f7, 0x6d1b, 0x7d61, 0x843d, 0x916a, 0x4e71,
-  0x5375, 0x5d50, 0x6b04, 0x6feb, 0x85cd, 0x862d, 0x89a7, 0x5229,
-  0x540f, 0x5c65, 0x674e, 0x68a8, 0x7406, 0x7483,
-  /* 0x4e */
-  0x75e2, 0x88cf, 0x88e1, 0x91cc, 0x96e2, 0x9678, 0x5f8b, 0x7387,
-  0x7acb, 0x844e, 0x63a0, 0x7565, 0x5289, 0x6d41, 0x6e9c, 0x7409,
-  0x7559, 0x786b, 0x7c92, 0x9686, 0x7adc, 0x9f8d, 0x4fb6, 0x616e,
-  0x65c5, 0x865c, 0x4e86, 0x4eae, 0x50da, 0x4e21, 0x51cc, 0x5bee,
-  0x6599, 0x6881, 0x6dbc, 0x731f, 0x7642, 0x77ad, 0x7a1c, 0x7ce7,
-  0x826f, 0x8ad2, 0x907c, 0x91cf, 0x9675, 0x9818, 0x529b, 0x7dd1,
-  0x502b, 0x5398, 0x6797, 0x6dcb, 0x71d0, 0x7433, 0x81e8, 0x8f2a,
-  0x96a3, 0x9c57, 0x9e9f, 0x7460, 0x5841, 0x6d99, 0x7d2f, 0x985e,
-  0x4ee4, 0x4f36, 0x4f8b, 0x51b7, 0x52b1, 0x5dba, 0x601c, 0x73b2,
-  0x793c, 0x82d3, 0x9234, 0x96b7, 0x96f6, 0x970a, 0x9e97, 0x9f62,
-  0x66a6, 0x6b74, 0x5217, 0x52a3, 0x70c8, 0x88c2, 0x5ec9, 0x604b,
-  0x6190, 0x6f23, 0x7149, 0x7c3e, 0x7df4, 0x806f,
-  /* 0x4f */
-  0x84ee, 0x9023, 0x932c, 0x5442, 0x9b6f, 0x6ad3, 0x7089, 0x8cc2,
-  0x8def, 0x9732, 0x52b4, 0x5a41, 0x5eca, 0x5f04, 0x6717, 0x697c,
-  0x6994, 0x6d6a, 0x6f0f, 0x7262, 0x72fc, 0x7bed, 0x8001, 0x807e,
-  0x874b, 0x90ce, 0x516d, 0x9e93, 0x7984, 0x808b, 0x9332, 0x8ad6,
-  0x502d, 0x548c, 0x8a71, 0x6b6a, 0x8cc4, 0x8107, 0x60d1, 0x67a0,
-  0x9df2, 0x4e99, 0x4e98, 0x9c10, 0x8a6b, 0x85c1, 0x8568, 0x6900,
-  0x6e7e, 0x7897, 0x8155, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x50 */
-  0x5f0c, 0x4e10, 0x4e15, 0x4e2a, 0x4e31, 0x4e36, 0x4e3c, 0x4e3f,
-  0x4e42, 0x4e56, 0x4e58, 0x4e82, 0x4e85, 0x8c6b, 0x4e8a, 0x8212,
-  0x5f0d, 0x4e8e, 0x4e9e, 0x4e9f, 0x4ea0, 0x4ea2, 0x4eb0, 0x4eb3,
-  0x4eb6, 0x4ece, 0x4ecd, 0x4ec4, 0x4ec6, 0x4ec2, 0x4ed7, 0x4ede,
-  0x4eed, 0x4edf, 0x4ef7, 0x4f09, 0x4f5a, 0x4f30, 0x4f5b, 0x4f5d,
-  0x4f57, 0x4f47, 0x4f76, 0x4f88, 0x4f8f, 0x4f98, 0x4f7b, 0x4f69,
-  0x4f70, 0x4f91, 0x4f6f, 0x4f86, 0x4f96, 0x5118, 0x4fd4, 0x4fdf,
-  0x4fce, 0x4fd8, 0x4fdb, 0x4fd1, 0x4fda, 0x4fd0, 0x4fe4, 0x4fe5,
-  0x501a, 0x5028, 0x5014, 0x502a, 0x5025, 0x5005, 0x4f1c, 0x4ff6,
-  0x5021, 0x5029, 0x502c, 0x4ffe, 0x4fef, 0x5011, 0x5006, 0x5043,
-  0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505a, 0x5056, 0x506c,
-  0x5078, 0x5080, 0x509a, 0x5085, 0x50b4, 0x50b2,
-  /* 0x51 */
-  0x50c9, 0x50ca, 0x50b3, 0x50c2, 0x50d6, 0x50de, 0x50e5, 0x50ed,
-  0x50e3, 0x50ee, 0x50f9, 0x50f5, 0x5109, 0x5101, 0x5102, 0x5116,
-  0x5115, 0x5114, 0x511a, 0x5121, 0x513a, 0x5137, 0x513c, 0x513b,
-  0x513f, 0x5140, 0x5152, 0x514c, 0x5154, 0x5162, 0x7af8, 0x5169,
-  0x516a, 0x516e, 0x5180, 0x5182, 0x56d8, 0x518c, 0x5189, 0x518f,
-  0x5191, 0x5193, 0x5195, 0x5196, 0x51a4, 0x51a6, 0x51a2, 0x51a9,
-  0x51aa, 0x51ab, 0x51b3, 0x51b1, 0x51b2, 0x51b0, 0x51b5, 0x51bd,
-  0x51c5, 0x51c9, 0x51db, 0x51e0, 0x8655, 0x51e9, 0x51ed, 0x51f0,
-  0x51f5, 0x51fe, 0x5204, 0x520b, 0x5214, 0x520e, 0x5227, 0x522a,
-  0x522e, 0x5233, 0x5239, 0x524f, 0x5244, 0x524b, 0x524c, 0x525e,
-  0x5254, 0x526a, 0x5274, 0x5269, 0x5273, 0x527f, 0x527d, 0x528d,
-  0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8fa8,
-  /* 0x52 */
-  0x8fa7, 0x52ac, 0x52ad, 0x52bc, 0x52b5, 0x52c1, 0x52cd, 0x52d7,
-  0x52de, 0x52e3, 0x52e6, 0x98ed, 0x52e0, 0x52f3, 0x52f5, 0x52f8,
-  0x52f9, 0x5306, 0x5308, 0x7538, 0x530d, 0x5310, 0x530f, 0x5315,
-  0x531a, 0x5323, 0x532f, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346,
-  0x5345, 0x4e17, 0x5349, 0x534d, 0x51d6, 0x535e, 0x5369, 0x536e,
-  0x5918, 0x537b, 0x5377, 0x5382, 0x5396, 0x53a0, 0x53a6, 0x53a5,
-  0x53ae, 0x53b0, 0x53b6, 0x53c3, 0x7c12, 0x96d9, 0x53df, 0x66fc,
-  0x71ee, 0x53ee, 0x53e8, 0x53ed, 0x53fa, 0x5401, 0x543d, 0x5440,
-  0x542c, 0x542d, 0x543c, 0x542e, 0x5436, 0x5429, 0x541d, 0x544e,
-  0x548f, 0x5475, 0x548e, 0x545f, 0x5471, 0x5477, 0x5470, 0x5492,
-  0x547b, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54c7, 0x54a2,
-  0x54b8, 0x54a5, 0x54ac, 0x54c4, 0x54c8, 0x54a8,
-  /* 0x53 */
-  0x54ab, 0x54c2, 0x54a4, 0x54be, 0x54bc, 0x54d8, 0x54e5, 0x54e6,
-  0x550f, 0x5514, 0x54fd, 0x54ee, 0x54ed, 0x54fa, 0x54e2, 0x5539,
-  0x5540, 0x5563, 0x554c, 0x552e, 0x555c, 0x5545, 0x5556, 0x5557,
-  0x5538, 0x5533, 0x555d, 0x5599, 0x5580, 0x54af, 0x558a, 0x559f,
-  0x557b, 0x557e, 0x5598, 0x559e, 0x55ae, 0x557c, 0x5583, 0x55a9,
-  0x5587, 0x55a8, 0x55da, 0x55c5, 0x55df, 0x55c4, 0x55dc, 0x55e4,
-  0x55d4, 0x5614, 0x55f7, 0x5616, 0x55fe, 0x55fd, 0x561b, 0x55f9,
-  0x564e, 0x5650, 0x71df, 0x5634, 0x5636, 0x5632, 0x5638, 0x566b,
-  0x5664, 0x562f, 0x566c, 0x566a, 0x5686, 0x5680, 0x568a, 0x56a0,
-  0x5694, 0x568f, 0x56a5, 0x56ae, 0x56b6, 0x56b4, 0x56c2, 0x56bc,
-  0x56c1, 0x56c3, 0x56c0, 0x56c8, 0x56ce, 0x56d1, 0x56d3, 0x56d7,
-  0x56ee, 0x56f9, 0x5700, 0x56ff, 0x5704, 0x5709,
-  /* 0x54 */
-  0x5708, 0x570b, 0x570d, 0x5713, 0x5718, 0x5716, 0x55c7, 0x571c,
-  0x5726, 0x5737, 0x5738, 0x574e, 0x573b, 0x5740, 0x574f, 0x5769,
-  0x57c0, 0x5788, 0x5761, 0x577f, 0x5789, 0x5793, 0x57a0, 0x57b3,
-  0x57a4, 0x57aa, 0x57b0, 0x57c3, 0x57c6, 0x57d4, 0x57d2, 0x57d3,
-  0x580a, 0x57d6, 0x57e3, 0x580b, 0x5819, 0x581d, 0x5872, 0x5821,
-  0x5862, 0x584b, 0x5870, 0x6bc0, 0x5852, 0x583d, 0x5879, 0x5885,
-  0x58b9, 0x589f, 0x58ab, 0x58ba, 0x58de, 0x58bb, 0x58b8, 0x58ae,
-  0x58c5, 0x58d3, 0x58d1, 0x58d7, 0x58d9, 0x58d8, 0x58e5, 0x58dc,
-  0x58e4, 0x58df, 0x58ef, 0x58fa, 0x58f9, 0x58fb, 0x58fc, 0x58fd,
-  0x5902, 0x590a, 0x5910, 0x591b, 0x68a6, 0x5925, 0x592c, 0x592d,
-  0x5932, 0x5938, 0x593e, 0x7ad2, 0x5955, 0x5950, 0x594e, 0x595a,
-  0x5958, 0x5962, 0x5960, 0x5967, 0x596c, 0x5969,
-  /* 0x55 */
-  0x5978, 0x5981, 0x599d, 0x4f5e, 0x4fab, 0x59a3, 0x59b2, 0x59c6,
-  0x59e8, 0x59dc, 0x598d, 0x59d9, 0x59da, 0x5a25, 0x5a1f, 0x5a11,
-  0x5a1c, 0x5a09, 0x5a1a, 0x5a40, 0x5a6c, 0x5a49, 0x5a35, 0x5a36,
-  0x5a62, 0x5a6a, 0x5a9a, 0x5abc, 0x5abe, 0x5acb, 0x5ac2, 0x5abd,
-  0x5ae3, 0x5ad7, 0x5ae6, 0x5ae9, 0x5ad6, 0x5afa, 0x5afb, 0x5b0c,
-  0x5b0b, 0x5b16, 0x5b32, 0x5ad0, 0x5b2a, 0x5b36, 0x5b3e, 0x5b43,
-  0x5b45, 0x5b40, 0x5b51, 0x5b55, 0x5b5a, 0x5b5b, 0x5b65, 0x5b69,
-  0x5b70, 0x5b73, 0x5b75, 0x5b78, 0x6588, 0x5b7a, 0x5b80, 0x5b83,
-  0x5ba6, 0x5bb8, 0x5bc3, 0x5bc7, 0x5bc9, 0x5bd4, 0x5bd0, 0x5be4,
-  0x5be6, 0x5be2, 0x5bde, 0x5be5, 0x5beb, 0x5bf0, 0x5bf6, 0x5bf3,
-  0x5c05, 0x5c07, 0x5c08, 0x5c0d, 0x5c13, 0x5c20, 0x5c22, 0x5c28,
-  0x5c38, 0x5c39, 0x5c41, 0x5c46, 0x5c4e, 0x5c53,
-  /* 0x56 */
-  0x5c50, 0x5c4f, 0x5b71, 0x5c6c, 0x5c6e, 0x4e62, 0x5c76, 0x5c79,
-  0x5c8c, 0x5c91, 0x5c94, 0x599b, 0x5cab, 0x5cbb, 0x5cb6, 0x5cbc,
-  0x5cb7, 0x5cc5, 0x5cbe, 0x5cc7, 0x5cd9, 0x5ce9, 0x5cfd, 0x5cfa,
-  0x5ced, 0x5d8c, 0x5cea, 0x5d0b, 0x5d15, 0x5d17, 0x5d5c, 0x5d1f,
-  0x5d1b, 0x5d11, 0x5d14, 0x5d22, 0x5d1a, 0x5d19, 0x5d18, 0x5d4c,
-  0x5d52, 0x5d4e, 0x5d4b, 0x5d6c, 0x5d73, 0x5d76, 0x5d87, 0x5d84,
-  0x5d82, 0x5da2, 0x5d9d, 0x5dac, 0x5dae, 0x5dbd, 0x5d90, 0x5db7,
-  0x5dbc, 0x5dc9, 0x5dcd, 0x5dd3, 0x5dd2, 0x5dd6, 0x5ddb, 0x5deb,
-  0x5df2, 0x5df5, 0x5e0b, 0x5e1a, 0x5e19, 0x5e11, 0x5e1b, 0x5e36,
-  0x5e37, 0x5e44, 0x5e43, 0x5e40, 0x5e4e, 0x5e57, 0x5e54, 0x5e5f,
-  0x5e62, 0x5e64, 0x5e47, 0x5e75, 0x5e76, 0x5e7a, 0x9ebc, 0x5e7f,
-  0x5ea0, 0x5ec1, 0x5ec2, 0x5ec8, 0x5ed0, 0x5ecf,
-  /* 0x57 */
-  0x5ed6, 0x5ee3, 0x5edd, 0x5eda, 0x5edb, 0x5ee2, 0x5ee1, 0x5ee8,
-  0x5ee9, 0x5eec, 0x5ef1, 0x5ef3, 0x5ef0, 0x5ef4, 0x5ef8, 0x5efe,
-  0x5f03, 0x5f09, 0x5f5d, 0x5f5c, 0x5f0b, 0x5f11, 0x5f16, 0x5f29,
-  0x5f2d, 0x5f38, 0x5f41, 0x5f48, 0x5f4c, 0x5f4e, 0x5f2f, 0x5f51,
-  0x5f56, 0x5f57, 0x5f59, 0x5f61, 0x5f6d, 0x5f73, 0x5f77, 0x5f83,
-  0x5f82, 0x5f7f, 0x5f8a, 0x5f88, 0x5f91, 0x5f87, 0x5f9e, 0x5f99,
-  0x5f98, 0x5fa0, 0x5fa8, 0x5fad, 0x5fbc, 0x5fd6, 0x5ffb, 0x5fe4,
-  0x5ff8, 0x5ff1, 0x5fdd, 0x60b3, 0x5fff, 0x6021, 0x6060, 0x6019,
-  0x6010, 0x6029, 0x600e, 0x6031, 0x601b, 0x6015, 0x602b, 0x6026,
-  0x600f, 0x603a, 0x605a, 0x6041, 0x606a, 0x6077, 0x605f, 0x604a,
-  0x6046, 0x604d, 0x6063, 0x6043, 0x6064, 0x6042, 0x606c, 0x606b,
-  0x6059, 0x6081, 0x608d, 0x60e7, 0x6083, 0x609a,
-  /* 0x58 */
-  0x6084, 0x609b, 0x6096, 0x6097, 0x6092, 0x60a7, 0x608b, 0x60e1,
-  0x60b8, 0x60e0, 0x60d3, 0x60b4, 0x5ff0, 0x60bd, 0x60c6, 0x60b5,
-  0x60d8, 0x614d, 0x6115, 0x6106, 0x60f6, 0x60f7, 0x6100, 0x60f4,
-  0x60fa, 0x6103, 0x6121, 0x60fb, 0x60f1, 0x610d, 0x610e, 0x6147,
-  0x613e, 0x6128, 0x6127, 0x614a, 0x613f, 0x613c, 0x612c, 0x6134,
-  0x613d, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615a,
-  0x616b, 0x6174, 0x616f, 0x6165, 0x6171, 0x615f, 0x615d, 0x6153,
-  0x6175, 0x6199, 0x6196, 0x6187, 0x61ac, 0x6194, 0x619a, 0x618a,
-  0x6191, 0x61ab, 0x61ae, 0x61cc, 0x61ca, 0x61c9, 0x61f7, 0x61c8,
-  0x61c3, 0x61c6, 0x61ba, 0x61cb, 0x7f79, 0x61cd, 0x61e6, 0x61e3,
-  0x61f6, 0x61fa, 0x61f4, 0x61ff, 0x61fd, 0x61fc, 0x61fe, 0x6200,
-  0x6208, 0x6209, 0x620d, 0x620c, 0x6214, 0x621b,
-  /* 0x59 */
-  0x621e, 0x6221, 0x622a, 0x622e, 0x6230, 0x6232, 0x6233, 0x6241,
-  0x624e, 0x625e, 0x6263, 0x625b, 0x6260, 0x6268, 0x627c, 0x6282,
-  0x6289, 0x627e, 0x6292, 0x6293, 0x6296, 0x62d4, 0x6283, 0x6294,
-  0x62d7, 0x62d1, 0x62bb, 0x62cf, 0x62ff, 0x62c6, 0x64d4, 0x62c8,
-  0x62dc, 0x62cc, 0x62ca, 0x62c2, 0x62c7, 0x629b, 0x62c9, 0x630c,
-  0x62ee, 0x62f1, 0x6327, 0x6302, 0x6308, 0x62ef, 0x62f5, 0x6350,
-  0x633e, 0x634d, 0x641c, 0x634f, 0x6396, 0x638e, 0x6380, 0x63ab,
-  0x6376, 0x63a3, 0x638f, 0x6389, 0x639f, 0x63b5, 0x636b, 0x6369,
-  0x63be, 0x63e9, 0x63c0, 0x63c6, 0x63e3, 0x63c9, 0x63d2, 0x63f6,
-  0x63c4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651d,
-  0x6417, 0x6428, 0x640f, 0x6467, 0x646f, 0x6476, 0x644e, 0x652a,
-  0x6495, 0x6493, 0x64a5, 0x64a9, 0x6488, 0x64bc,
-  /* 0x5a */
-  0x64da, 0x64d2, 0x64c5, 0x64c7, 0x64bb, 0x64d8, 0x64c2, 0x64f1,
-  0x64e7, 0x8209, 0x64e0, 0x64e1, 0x62ac, 0x64e3, 0x64ef, 0x652c,
-  0x64f6, 0x64f4, 0x64f2, 0x64fa, 0x6500, 0x64fd, 0x6518, 0x651c,
-  0x6505, 0x6524, 0x6523, 0x652b, 0x6534, 0x6535, 0x6537, 0x6536,
-  0x6538, 0x754b, 0x6548, 0x6556, 0x6555, 0x654d, 0x6558, 0x655e,
-  0x655d, 0x6572, 0x6578, 0x6582, 0x6583, 0x8b8a, 0x659b, 0x659f,
-  0x65ab, 0x65b7, 0x65c3, 0x65c6, 0x65c1, 0x65c4, 0x65cc, 0x65d2,
-  0x65db, 0x65d9, 0x65e0, 0x65e1, 0x65f1, 0x6772, 0x660a, 0x6603,
-  0x65fb, 0x6773, 0x6635, 0x6636, 0x6634, 0x661c, 0x664f, 0x6644,
-  0x6649, 0x6641, 0x665e, 0x665d, 0x6664, 0x6667, 0x6668, 0x665f,
-  0x6662, 0x6670, 0x6683, 0x6688, 0x668e, 0x6689, 0x6684, 0x6698,
-  0x669d, 0x66c1, 0x66b9, 0x66c9, 0x66be, 0x66bc,
-  /* 0x5b */
-  0x66c4, 0x66b8, 0x66d6, 0x66da, 0x66e0, 0x663f, 0x66e6, 0x66e9,
-  0x66f0, 0x66f5, 0x66f7, 0x670f, 0x6716, 0x671e, 0x6726, 0x6727,
-  0x9738, 0x672e, 0x673f, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746,
-  0x675e, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67a9,
-  0x677c, 0x676a, 0x678c, 0x678b, 0x67a6, 0x67a1, 0x6785, 0x67b7,
-  0x67ef, 0x67b4, 0x67ec, 0x67b3, 0x67e9, 0x67b8, 0x67e4, 0x67de,
-  0x67dd, 0x67e2, 0x67ee, 0x67b9, 0x67ce, 0x67c6, 0x67e7, 0x6a9c,
-  0x681e, 0x6846, 0x6829, 0x6840, 0x684d, 0x6832, 0x684e, 0x68b3,
-  0x682b, 0x6859, 0x6863, 0x6877, 0x687f, 0x689f, 0x688f, 0x68ad,
-  0x6894, 0x689d, 0x689b, 0x6883, 0x6aae, 0x68b9, 0x6874, 0x68b5,
-  0x68a0, 0x68ba, 0x690f, 0x688d, 0x687e, 0x6901, 0x68ca, 0x6908,
-  0x68d8, 0x6922, 0x6926, 0x68e1, 0x690c, 0x68cd,
-  /* 0x5c */
-  0x68d4, 0x68e7, 0x68d5, 0x6936, 0x6912, 0x6904, 0x68d7, 0x68e3,
-  0x6925, 0x68f9, 0x68e0, 0x68ef, 0x6928, 0x692a, 0x691a, 0x6923,
-  0x6921, 0x68c6, 0x6979, 0x6977, 0x695c, 0x6978, 0x696b, 0x6954,
-  0x697e, 0x696e, 0x6939, 0x6974, 0x693d, 0x6959, 0x6930, 0x6961,
-  0x695e, 0x695d, 0x6981, 0x696a, 0x69b2, 0x69ae, 0x69d0, 0x69bf,
-  0x69c1, 0x69d3, 0x69be, 0x69ce, 0x5be8, 0x69ca, 0x69dd, 0x69bb,
-  0x69c3, 0x69a7, 0x6a2e, 0x6991, 0x69a0, 0x699c, 0x6995, 0x69b4,
-  0x69de, 0x69e8, 0x6a02, 0x6a1b, 0x69ff, 0x6b0a, 0x69f9, 0x69f2,
-  0x69e7, 0x6a05, 0x69b1, 0x6a1e, 0x69ed, 0x6a14, 0x69eb, 0x6a0a,
-  0x6a12, 0x6ac1, 0x6a23, 0x6a13, 0x6a44, 0x6a0c, 0x6a72, 0x6a36,
-  0x6a78, 0x6a47, 0x6a62, 0x6a59, 0x6a66, 0x6a48, 0x6a38, 0x6a22,
-  0x6a90, 0x6a8d, 0x6aa0, 0x6a84, 0x6aa2, 0x6aa3,
-  /* 0x5d */
-  0x6a97, 0x8617, 0x6abb, 0x6ac3, 0x6ac2, 0x6ab8, 0x6ab3, 0x6aac,
-  0x6ade, 0x6ad1, 0x6adf, 0x6aaa, 0x6ada, 0x6aea, 0x6afb, 0x6b05,
-  0x8616, 0x6afa, 0x6b12, 0x6b16, 0x9b31, 0x6b1f, 0x6b38, 0x6b37,
-  0x76dc, 0x6b39, 0x98ee, 0x6b47, 0x6b43, 0x6b49, 0x6b50, 0x6b59,
-  0x6b54, 0x6b5b, 0x6b5f, 0x6b61, 0x6b78, 0x6b79, 0x6b7f, 0x6b80,
-  0x6b84, 0x6b83, 0x6b8d, 0x6b98, 0x6b95, 0x6b9e, 0x6ba4, 0x6baa,
-  0x6bab, 0x6baf, 0x6bb2, 0x6bb1, 0x6bb3, 0x6bb7, 0x6bbc, 0x6bc6,
-  0x6bcb, 0x6bd3, 0x6bdf, 0x6bec, 0x6beb, 0x6bf3, 0x6bef, 0x9ebe,
-  0x6c08, 0x6c13, 0x6c14, 0x6c1b, 0x6c24, 0x6c23, 0x6c5e, 0x6c55,
-  0x6c62, 0x6c6a, 0x6c82, 0x6c8d, 0x6c9a, 0x6c81, 0x6c9b, 0x6c7e,
-  0x6c68, 0x6c73, 0x6c92, 0x6c90, 0x6cc4, 0x6cf1, 0x6cd3, 0x6cbd,
-  0x6cd7, 0x6cc5, 0x6cdd, 0x6cae, 0x6cb1, 0x6cbe,
-  /* 0x5e */
-  0x6cba, 0x6cdb, 0x6cef, 0x6cd9, 0x6cea, 0x6d1f, 0x884d, 0x6d36,
-  0x6d2b, 0x6d3d, 0x6d38, 0x6d19, 0x6d35, 0x6d33, 0x6d12, 0x6d0c,
-  0x6d63, 0x6d93, 0x6d64, 0x6d5a, 0x6d79, 0x6d59, 0x6d8e, 0x6d95,
-  0x6fe4, 0x6d85, 0x6df9, 0x6e15, 0x6e0a, 0x6db5, 0x6dc7, 0x6de6,
-  0x6db8, 0x6dc6, 0x6dec, 0x6dde, 0x6dcc, 0x6de8, 0x6dd2, 0x6dc5,
-  0x6dfa, 0x6dd9, 0x6de4, 0x6dd5, 0x6dea, 0x6dee, 0x6e2d, 0x6e6e,
-  0x6e2e, 0x6e19, 0x6e72, 0x6e5f, 0x6e3e, 0x6e23, 0x6e6b, 0x6e2b,
-  0x6e76, 0x6e4d, 0x6e1f, 0x6e43, 0x6e3a, 0x6e4e, 0x6e24, 0x6eff,
-  0x6e1d, 0x6e38, 0x6e82, 0x6eaa, 0x6e98, 0x6ec9, 0x6eb7, 0x6ed3,
-  0x6ebd, 0x6eaf, 0x6ec4, 0x6eb2, 0x6ed4, 0x6ed5, 0x6e8f, 0x6ea5,
-  0x6ec2, 0x6e9f, 0x6f41, 0x6f11, 0x704c, 0x6eec, 0x6ef8, 0x6efe,
-  0x6f3f, 0x6ef2, 0x6f31, 0x6eef, 0x6f32, 0x6ecc,
-  /* 0x5f */
-  0x6f3e, 0x6f13, 0x6ef7, 0x6f86, 0x6f7a, 0x6f78, 0x6f81, 0x6f80,
-  0x6f6f, 0x6f5b, 0x6ff3, 0x6f6d, 0x6f82, 0x6f7c, 0x6f58, 0x6f8e,
-  0x6f91, 0x6fc2, 0x6f66, 0x6fb3, 0x6fa3, 0x6fa1, 0x6fa4, 0x6fb9,
-  0x6fc6, 0x6faa, 0x6fdf, 0x6fd5, 0x6fec, 0x6fd4, 0x6fd8, 0x6ff1,
-  0x6fee, 0x6fdb, 0x7009, 0x700b, 0x6ffa, 0x7011, 0x7001, 0x700f,
-  0x6ffe, 0x701b, 0x701a, 0x6f74, 0x701d, 0x7018, 0x701f, 0x7030,
-  0x703e, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70af, 0x70f1,
-  0x70ac, 0x70b8, 0x70b3, 0x70ae, 0x70df, 0x70cb, 0x70dd, 0x70d9,
-  0x7109, 0x70fd, 0x711c, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166,
-  0x7162, 0x714c, 0x7156, 0x716c, 0x718f, 0x71fb, 0x7184, 0x7195,
-  0x71a8, 0x71ac, 0x71d7, 0x71b9, 0x71be, 0x71d2, 0x71c9, 0x71d4,
-  0x71ce, 0x71e0, 0x71ec, 0x71e7, 0x71f5, 0x71fc,
-  /* 0x60 */
-  0x71f9, 0x71ff, 0x720d, 0x7210, 0x721b, 0x7228, 0x722d, 0x722c,
-  0x7230, 0x7232, 0x723b, 0x723c, 0x723f, 0x7240, 0x7246, 0x724b,
-  0x7258, 0x7274, 0x727e, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296,
-  0x72a2, 0x72a7, 0x72b9, 0x72b2, 0x72c3, 0x72c6, 0x72c4, 0x72ce,
-  0x72d2, 0x72e2, 0x72e0, 0x72e1, 0x72f9, 0x72f7, 0x500f, 0x7317,
-  0x730a, 0x731c, 0x7316, 0x731d, 0x7334, 0x732f, 0x7329, 0x7325,
-  0x733e, 0x734e, 0x734f, 0x9ed8, 0x7357, 0x736a, 0x7368, 0x7370,
-  0x7378, 0x7375, 0x737b, 0x737a, 0x73c8, 0x73b3, 0x73ce, 0x73bb,
-  0x73c0, 0x73e5, 0x73ee, 0x73de, 0x74a2, 0x7405, 0x746f, 0x7425,
-  0x73f8, 0x7432, 0x743a, 0x7455, 0x743f, 0x745f, 0x7459, 0x7441,
-  0x745c, 0x7469, 0x7470, 0x7463, 0x746a, 0x7476, 0x747e, 0x748b,
-  0x749e, 0x74a7, 0x74ca, 0x74cf, 0x74d4, 0x73f1,
-  /* 0x61 */
-  0x74e0, 0x74e3, 0x74e7, 0x74e9, 0x74ee, 0x74f2, 0x74f0, 0x74f1,
-  0x74f8, 0x74f7, 0x7504, 0x7503, 0x7505, 0x750c, 0x750e, 0x750d,
-  0x7515, 0x7513, 0x751e, 0x7526, 0x752c, 0x753c, 0x7544, 0x754d,
-  0x754a, 0x7549, 0x755b, 0x7546, 0x755a, 0x7569, 0x7564, 0x7567,
-  0x756b, 0x756d, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758a,
-  0x7589, 0x7582, 0x7594, 0x759a, 0x759d, 0x75a5, 0x75a3, 0x75c2,
-  0x75b3, 0x75c3, 0x75b5, 0x75bd, 0x75b8, 0x75bc, 0x75b1, 0x75cd,
-  0x75ca, 0x75d2, 0x75d9, 0x75e3, 0x75de, 0x75fe, 0x75ff, 0x75fc,
-  0x7601, 0x75f0, 0x75fa, 0x75f2, 0x75f3, 0x760b, 0x760d, 0x7609,
-  0x761f, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630,
-  0x763b, 0x7647, 0x7648, 0x7646, 0x765c, 0x7658, 0x7661, 0x7662,
-  0x7668, 0x7669, 0x766a, 0x7667, 0x766c, 0x7670,
-  /* 0x62 */
-  0x7672, 0x7676, 0x7678, 0x767c, 0x7680, 0x7683, 0x7688, 0x768b,
-  0x768e, 0x7696, 0x7693, 0x7699, 0x769a, 0x76b0, 0x76b4, 0x76b8,
-  0x76b9, 0x76ba, 0x76c2, 0x76cd, 0x76d6, 0x76d2, 0x76de, 0x76e1,
-  0x76e5, 0x76e7, 0x76ea, 0x862f, 0x76fb, 0x7708, 0x7707, 0x7704,
-  0x7729, 0x7724, 0x771e, 0x7725, 0x7726, 0x771b, 0x7737, 0x7738,
-  0x7747, 0x775a, 0x7768, 0x776b, 0x775b, 0x7765, 0x777f, 0x777e,
-  0x7779, 0x778e, 0x778b, 0x7791, 0x77a0, 0x779e, 0x77b0, 0x77b6,
-  0x77b9, 0x77bf, 0x77bc, 0x77bd, 0x77bb, 0x77c7, 0x77cd, 0x77d7,
-  0x77da, 0x77dc, 0x77e3, 0x77ee, 0x77fc, 0x780c, 0x7812, 0x7926,
-  0x7820, 0x792a, 0x7845, 0x788e, 0x7874, 0x7886, 0x787c, 0x789a,
-  0x788c, 0x78a3, 0x78b5, 0x78aa, 0x78af, 0x78d1, 0x78c6, 0x78cb,
-  0x78d4, 0x78be, 0x78bc, 0x78c5, 0x78ca, 0x78ec,
-  /* 0x63 */
-  0x78e7, 0x78da, 0x78fd, 0x78f4, 0x7907, 0x7912, 0x7911, 0x7919,
-  0x792c, 0x792b, 0x7940, 0x7960, 0x7957, 0x795f, 0x795a, 0x7955,
-  0x7953, 0x797a, 0x797f, 0x798a, 0x799d, 0x79a7, 0x9f4b, 0x79aa,
-  0x79ae, 0x79b3, 0x79b9, 0x79ba, 0x79c9, 0x79d5, 0x79e7, 0x79ec,
-  0x79e1, 0x79e3, 0x7a08, 0x7a0d, 0x7a18, 0x7a19, 0x7a20, 0x7a1f,
-  0x7980, 0x7a31, 0x7a3b, 0x7a3e, 0x7a37, 0x7a43, 0x7a57, 0x7a49,
-  0x7a61, 0x7a62, 0x7a69, 0x9f9d, 0x7a70, 0x7a79, 0x7a7d, 0x7a88,
-  0x7a97, 0x7a95, 0x7a98, 0x7a96, 0x7aa9, 0x7ac8, 0x7ab0, 0x7ab6,
-  0x7ac5, 0x7ac4, 0x7abf, 0x9083, 0x7ac7, 0x7aca, 0x7acd, 0x7acf,
-  0x7ad5, 0x7ad3, 0x7ad9, 0x7ada, 0x7add, 0x7ae1, 0x7ae2, 0x7ae6,
-  0x7aed, 0x7af0, 0x7b02, 0x7b0f, 0x7b0a, 0x7b06, 0x7b33, 0x7b18,
-  0x7b19, 0x7b1e, 0x7b35, 0x7b28, 0x7b36, 0x7b50,
-  /* 0x64 */
-  0x7b7a, 0x7b04, 0x7b4d, 0x7b0b, 0x7b4c, 0x7b45, 0x7b75, 0x7b65,
-  0x7b74, 0x7b67, 0x7b70, 0x7b71, 0x7b6c, 0x7b6e, 0x7b9d, 0x7b98,
-  0x7b9f, 0x7b8d, 0x7b9c, 0x7b9a, 0x7b8b, 0x7b92, 0x7b8f, 0x7b5d,
-  0x7b99, 0x7bcb, 0x7bc1, 0x7bcc, 0x7bcf, 0x7bb4, 0x7bc6, 0x7bdd,
-  0x7be9, 0x7c11, 0x7c14, 0x7be6, 0x7be5, 0x7c60, 0x7c00, 0x7c07,
-  0x7c13, 0x7bf3, 0x7bf7, 0x7c17, 0x7c0d, 0x7bf6, 0x7c23, 0x7c27,
-  0x7c2a, 0x7c1f, 0x7c37, 0x7c2b, 0x7c3d, 0x7c4c, 0x7c43, 0x7c54,
-  0x7c4f, 0x7c40, 0x7c50, 0x7c58, 0x7c5f, 0x7c64, 0x7c56, 0x7c65,
-  0x7c6c, 0x7c75, 0x7c83, 0x7c90, 0x7ca4, 0x7cad, 0x7ca2, 0x7cab,
-  0x7ca1, 0x7ca8, 0x7cb3, 0x7cb2, 0x7cb1, 0x7cae, 0x7cb9, 0x7cbd,
-  0x7cc0, 0x7cc5, 0x7cc2, 0x7cd8, 0x7cd2, 0x7cdc, 0x7ce2, 0x9b3b,
-  0x7cef, 0x7cf2, 0x7cf4, 0x7cf6, 0x7cfa, 0x7d06,
-  /* 0x65 */
-  0x7d02, 0x7d1c, 0x7d15, 0x7d0a, 0x7d45, 0x7d4b, 0x7d2e, 0x7d32,
-  0x7d3f, 0x7d35, 0x7d46, 0x7d73, 0x7d56, 0x7d4e, 0x7d72, 0x7d68,
-  0x7d6e, 0x7d4f, 0x7d63, 0x7d93, 0x7d89, 0x7d5b, 0x7d8f, 0x7d7d,
-  0x7d9b, 0x7dba, 0x7dae, 0x7da3, 0x7db5, 0x7dc7, 0x7dbd, 0x7dab,
-  0x7e3d, 0x7da2, 0x7daf, 0x7ddc, 0x7db8, 0x7d9f, 0x7db0, 0x7dd8,
-  0x7ddd, 0x7de4, 0x7dde, 0x7dfb, 0x7df2, 0x7de1, 0x7e05, 0x7e0a,
-  0x7e23, 0x7e21, 0x7e12, 0x7e31, 0x7e1f, 0x7e09, 0x7e0b, 0x7e22,
-  0x7e46, 0x7e66, 0x7e3b, 0x7e35, 0x7e39, 0x7e43, 0x7e37, 0x7e32,
-  0x7e3a, 0x7e67, 0x7e5d, 0x7e56, 0x7e5e, 0x7e59, 0x7e5a, 0x7e79,
-  0x7e6a, 0x7e69, 0x7e7c, 0x7e7b, 0x7e83, 0x7dd5, 0x7e7d, 0x8fae,
-  0x7e7f, 0x7e88, 0x7e89, 0x7e8c, 0x7e92, 0x7e90, 0x7e93, 0x7e94,
-  0x7e96, 0x7e8e, 0x7e9b, 0x7e9c, 0x7f38, 0x7f3a,
-  /* 0x66 */
-  0x7f45, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f50, 0x7f51, 0x7f55, 0x7f54,
-  0x7f58, 0x7f5f, 0x7f60, 0x7f68, 0x7f69, 0x7f67, 0x7f78, 0x7f82,
-  0x7f86, 0x7f83, 0x7f88, 0x7f87, 0x7f8c, 0x7f94, 0x7f9e, 0x7f9d,
-  0x7f9a, 0x7fa3, 0x7faf, 0x7fb2, 0x7fb9, 0x7fae, 0x7fb6, 0x7fb8,
-  0x8b71, 0x7fc5, 0x7fc6, 0x7fca, 0x7fd5, 0x7fd4, 0x7fe1, 0x7fe6,
-  0x7fe9, 0x7ff3, 0x7ff9, 0x98dc, 0x8006, 0x8004, 0x800b, 0x8012,
-  0x8018, 0x8019, 0x801c, 0x8021, 0x8028, 0x803f, 0x803b, 0x804a,
-  0x8046, 0x8052, 0x8058, 0x805a, 0x805f, 0x8062, 0x8068, 0x8073,
-  0x8072, 0x8070, 0x8076, 0x8079, 0x807d, 0x807f, 0x8084, 0x8086,
-  0x8085, 0x809b, 0x8093, 0x809a, 0x80ad, 0x5190, 0x80ac, 0x80db,
-  0x80e5, 0x80d9, 0x80dd, 0x80c4, 0x80da, 0x80d6, 0x8109, 0x80ef,
-  0x80f1, 0x811b, 0x8129, 0x8123, 0x812f, 0x814b,
-  /* 0x67 */
-  0x968b, 0x8146, 0x813e, 0x8153, 0x8151, 0x80fc, 0x8171, 0x816e,
-  0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818a, 0x8180, 0x8182,
-  0x81a0, 0x8195, 0x81a4, 0x81a3, 0x815f, 0x8193, 0x81a9, 0x81b0,
-  0x81b5, 0x81be, 0x81b8, 0x81bd, 0x81c0, 0x81c2, 0x81ba, 0x81c9,
-  0x81cd, 0x81d1, 0x81d9, 0x81d8, 0x81c8, 0x81da, 0x81df, 0x81e0,
-  0x81e7, 0x81fa, 0x81fb, 0x81fe, 0x8201, 0x8202, 0x8205, 0x8207,
-  0x820a, 0x820d, 0x8210, 0x8216, 0x8229, 0x822b, 0x8238, 0x8233,
-  0x8240, 0x8259, 0x8258, 0x825d, 0x825a, 0x825f, 0x8264, 0x8262,
-  0x8268, 0x826a, 0x826b, 0x822e, 0x8271, 0x8277, 0x8278, 0x827e,
-  0x828d, 0x8292, 0x82ab, 0x829f, 0x82bb, 0x82ac, 0x82e1, 0x82e3,
-  0x82df, 0x82d2, 0x82f4, 0x82f3, 0x82fa, 0x8393, 0x8303, 0x82fb,
-  0x82f9, 0x82de, 0x8306, 0x82dc, 0x8309, 0x82d9,
-  /* 0x68 */
-  0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350,
-  0x8345, 0x832f, 0x832b, 0x8317, 0x8318, 0x8385, 0x839a, 0x83aa,
-  0x839f, 0x83a2, 0x8396, 0x8323, 0x838e, 0x8387, 0x838a, 0x837c,
-  0x83b5, 0x8373, 0x8375, 0x83a0, 0x8389, 0x83a8, 0x83f4, 0x8413,
-  0x83eb, 0x83ce, 0x83fd, 0x8403, 0x83d8, 0x840b, 0x83c1, 0x83f7,
-  0x8407, 0x83e0, 0x83f2, 0x840d, 0x8422, 0x8420, 0x83bd, 0x8438,
-  0x8506, 0x83fb, 0x846d, 0x842a, 0x843c, 0x855a, 0x8484, 0x8477,
-  0x846b, 0x84ad, 0x846e, 0x8482, 0x8469, 0x8446, 0x842c, 0x846f,
-  0x8479, 0x8435, 0x84ca, 0x8462, 0x84b9, 0x84bf, 0x849f, 0x84d9,
-  0x84cd, 0x84bb, 0x84da, 0x84d0, 0x84c1, 0x84c6, 0x84d6, 0x84a1,
-  0x8521, 0x84ff, 0x84f4, 0x8517, 0x8518, 0x852c, 0x851f, 0x8515,
-  0x8514, 0x84fc, 0x8540, 0x8563, 0x8558, 0x8548,
-  /* 0x69 */
-  0x8541, 0x8602, 0x854b, 0x8555, 0x8580, 0x85a4, 0x8588, 0x8591,
-  0x858a, 0x85a8, 0x856d, 0x8594, 0x859b, 0x85ea, 0x8587, 0x859c,
-  0x8577, 0x857e, 0x8590, 0x85c9, 0x85ba, 0x85cf, 0x85b9, 0x85d0,
-  0x85d5, 0x85dd, 0x85e5, 0x85dc, 0x85f9, 0x860a, 0x8613, 0x860b,
-  0x85fe, 0x85fa, 0x8606, 0x8622, 0x861a, 0x8630, 0x863f, 0x864d,
-  0x4e55, 0x8654, 0x865f, 0x8667, 0x8671, 0x8693, 0x86a3, 0x86a9,
-  0x86aa, 0x868b, 0x868c, 0x86b6, 0x86af, 0x86c4, 0x86c6, 0x86b0,
-  0x86c9, 0x8823, 0x86ab, 0x86d4, 0x86de, 0x86e9, 0x86ec, 0x86df,
-  0x86db, 0x86ef, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86fb,
-  0x8711, 0x8709, 0x870d, 0x86f9, 0x870a, 0x8734, 0x873f, 0x8737,
-  0x873b, 0x8725, 0x8729, 0x871a, 0x8760, 0x875f, 0x8778, 0x874c,
-  0x874e, 0x8774, 0x8757, 0x8768, 0x876e, 0x8759,
-  /* 0x6a */
-  0x8753, 0x8763, 0x876a, 0x8805, 0x87a2, 0x879f, 0x8782, 0x87af,
-  0x87cb, 0x87bd, 0x87c0, 0x87d0, 0x96d6, 0x87ab, 0x87c4, 0x87b3,
-  0x87c7, 0x87c6, 0x87bb, 0x87ef, 0x87f2, 0x87e0, 0x880f, 0x880d,
-  0x87fe, 0x87f6, 0x87f7, 0x880e, 0x87d2, 0x8811, 0x8816, 0x8815,
-  0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883b, 0x8844,
-  0x8842, 0x8852, 0x8859, 0x885e, 0x8862, 0x886b, 0x8881, 0x887e,
-  0x889e, 0x8875, 0x887d, 0x88b5, 0x8872, 0x8882, 0x8897, 0x8892,
-  0x88ae, 0x8899, 0x88a2, 0x888d, 0x88a4, 0x88b0, 0x88bf, 0x88b1,
-  0x88c3, 0x88c4, 0x88d4, 0x88d8, 0x88d9, 0x88dd, 0x88f9, 0x8902,
-  0x88fc, 0x88f4, 0x88e8, 0x88f2, 0x8904, 0x890c, 0x890a, 0x8913,
-  0x8943, 0x891e, 0x8925, 0x892a, 0x892b, 0x8941, 0x8944, 0x893b,
-  0x8936, 0x8938, 0x894c, 0x891d, 0x8960, 0x895e,
-  /* 0x6b */
-  0x8966, 0x8964, 0x896d, 0x896a, 0x896f, 0x8974, 0x8977, 0x897e,
-  0x8983, 0x8988, 0x898a, 0x8993, 0x8998, 0x89a1, 0x89a9, 0x89a6,
-  0x89ac, 0x89af, 0x89b2, 0x89ba, 0x89bd, 0x89bf, 0x89c0, 0x89da,
-  0x89dc, 0x89dd, 0x89e7, 0x89f4, 0x89f8, 0x8a03, 0x8a16, 0x8a10,
-  0x8a0c, 0x8a1b, 0x8a1d, 0x8a25, 0x8a36, 0x8a41, 0x8a5b, 0x8a52,
-  0x8a46, 0x8a48, 0x8a7c, 0x8a6d, 0x8a6c, 0x8a62, 0x8a85, 0x8a82,
-  0x8a84, 0x8aa8, 0x8aa1, 0x8a91, 0x8aa5, 0x8aa6, 0x8a9a, 0x8aa3,
-  0x8ac4, 0x8acd, 0x8ac2, 0x8ada, 0x8aeb, 0x8af3, 0x8ae7, 0x8ae4,
-  0x8af1, 0x8b14, 0x8ae0, 0x8ae2, 0x8af7, 0x8ade, 0x8adb, 0x8b0c,
-  0x8b07, 0x8b1a, 0x8ae1, 0x8b16, 0x8b10, 0x8b17, 0x8b20, 0x8b33,
-  0x97ab, 0x8b26, 0x8b2b, 0x8b3e, 0x8b28, 0x8b41, 0x8b4c, 0x8b4f,
-  0x8b4e, 0x8b49, 0x8b56, 0x8b5b, 0x8b5a, 0x8b6b,
-  /* 0x6c */
-  0x8b5f, 0x8b6c, 0x8b6f, 0x8b74, 0x8b7d, 0x8b80, 0x8b8c, 0x8b8e,
-  0x8b92, 0x8b93, 0x8b96, 0x8b99, 0x8b9a, 0x8c3a, 0x8c41, 0x8c3f,
-  0x8c48, 0x8c4c, 0x8c4e, 0x8c50, 0x8c55, 0x8c62, 0x8c6c, 0x8c78,
-  0x8c7a, 0x8c82, 0x8c89, 0x8c85, 0x8c8a, 0x8c8d, 0x8c8e, 0x8c94,
-  0x8c7c, 0x8c98, 0x621d, 0x8cad, 0x8caa, 0x8cbd, 0x8cb2, 0x8cb3,
-  0x8cae, 0x8cb6, 0x8cc8, 0x8cc1, 0x8ce4, 0x8ce3, 0x8cda, 0x8cfd,
-  0x8cfa, 0x8cfb, 0x8d04, 0x8d05, 0x8d0a, 0x8d07, 0x8d0f, 0x8d0d,
-  0x8d10, 0x9f4e, 0x8d13, 0x8ccd, 0x8d14, 0x8d16, 0x8d67, 0x8d6d,
-  0x8d71, 0x8d73, 0x8d81, 0x8d99, 0x8dc2, 0x8dbe, 0x8dba, 0x8dcf,
-  0x8dda, 0x8dd6, 0x8dcc, 0x8ddb, 0x8dcb, 0x8dea, 0x8deb, 0x8ddf,
-  0x8de3, 0x8dfc, 0x8e08, 0x8e09, 0x8dff, 0x8e1d, 0x8e1e, 0x8e10,
-  0x8e1f, 0x8e42, 0x8e35, 0x8e30, 0x8e34, 0x8e4a,
-  /* 0x6d */
-  0x8e47, 0x8e49, 0x8e4c, 0x8e50, 0x8e48, 0x8e59, 0x8e64, 0x8e60,
-  0x8e2a, 0x8e63, 0x8e55, 0x8e76, 0x8e72, 0x8e7c, 0x8e81, 0x8e87,
-  0x8e85, 0x8e84, 0x8e8b, 0x8e8a, 0x8e93, 0x8e91, 0x8e94, 0x8e99,
-  0x8eaa, 0x8ea1, 0x8eac, 0x8eb0, 0x8ec6, 0x8eb1, 0x8ebe, 0x8ec5,
-  0x8ec8, 0x8ecb, 0x8edb, 0x8ee3, 0x8efc, 0x8efb, 0x8eeb, 0x8efe,
-  0x8f0a, 0x8f05, 0x8f15, 0x8f12, 0x8f19, 0x8f13, 0x8f1c, 0x8f1f,
-  0x8f1b, 0x8f0c, 0x8f26, 0x8f33, 0x8f3b, 0x8f39, 0x8f45, 0x8f42,
-  0x8f3e, 0x8f4c, 0x8f49, 0x8f46, 0x8f4e, 0x8f57, 0x8f5c, 0x8f62,
-  0x8f63, 0x8f64, 0x8f9c, 0x8f9f, 0x8fa3, 0x8fad, 0x8faf, 0x8fb7,
-  0x8fda, 0x8fe5, 0x8fe2, 0x8fea, 0x8fef, 0x9087, 0x8ff4, 0x9005,
-  0x8ff9, 0x8ffa, 0x9011, 0x9015, 0x9021, 0x900d, 0x901e, 0x9016,
-  0x900b, 0x9027, 0x9036, 0x9035, 0x9039, 0x8ff8,
-  /* 0x6e */
-  0x904f, 0x9050, 0x9051, 0x9052, 0x900e, 0x9049, 0x903e, 0x9056,
-  0x9058, 0x905e, 0x9068, 0x906f, 0x9076, 0x96a8, 0x9072, 0x9082,
-  0x907d, 0x9081, 0x9080, 0x908a, 0x9089, 0x908f, 0x90a8, 0x90af,
-  0x90b1, 0x90b5, 0x90e2, 0x90e4, 0x6248, 0x90db, 0x9102, 0x9112,
-  0x9119, 0x9132, 0x9130, 0x914a, 0x9156, 0x9158, 0x9163, 0x9165,
-  0x9169, 0x9173, 0x9172, 0x918b, 0x9189, 0x9182, 0x91a2, 0x91ab,
-  0x91af, 0x91aa, 0x91b5, 0x91b4, 0x91ba, 0x91c0, 0x91c1, 0x91c9,
-  0x91cb, 0x91d0, 0x91d6, 0x91df, 0x91e1, 0x91db, 0x91fc, 0x91f5,
-  0x91f6, 0x921e, 0x91ff, 0x9214, 0x922c, 0x9215, 0x9211, 0x925e,
-  0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923f, 0x924b,
-  0x9250, 0x929c, 0x9296, 0x9293, 0x929b, 0x925a, 0x92cf, 0x92b9,
-  0x92b7, 0x92e9, 0x930f, 0x92fa, 0x9344, 0x932e,
-  /* 0x6f */
-  0x9319, 0x9322, 0x931a, 0x9323, 0x933a, 0x9335, 0x933b, 0x935c,
-  0x9360, 0x937c, 0x936e, 0x9356, 0x93b0, 0x93ac, 0x93ad, 0x9394,
-  0x93b9, 0x93d6, 0x93d7, 0x93e8, 0x93e5, 0x93d8, 0x93c3, 0x93dd,
-  0x93d0, 0x93c8, 0x93e4, 0x941a, 0x9414, 0x9413, 0x9403, 0x9407,
-  0x9410, 0x9436, 0x942b, 0x9435, 0x9421, 0x943a, 0x9441, 0x9452,
-  0x9444, 0x945b, 0x9460, 0x9462, 0x945e, 0x946a, 0x9229, 0x9470,
-  0x9475, 0x9477, 0x947d, 0x945a, 0x947c, 0x947e, 0x9481, 0x947f,
-  0x9582, 0x9587, 0x958a, 0x9594, 0x9596, 0x9598, 0x9599, 0x95a0,
-  0x95a8, 0x95a7, 0x95ad, 0x95bc, 0x95bb, 0x95b9, 0x95be, 0x95ca,
-  0x6ff6, 0x95c3, 0x95cd, 0x95cc, 0x95d5, 0x95d4, 0x95d6, 0x95dc,
-  0x95e1, 0x95e5, 0x95e2, 0x9621, 0x9628, 0x962e, 0x962f, 0x9642,
-  0x964c, 0x964f, 0x964b, 0x9677, 0x965c, 0x965e,
-  /* 0x70 */
-  0x965d, 0x965f, 0x9666, 0x9672, 0x966c, 0x968d, 0x9698, 0x9695,
-  0x9697, 0x96aa, 0x96a7, 0x96b1, 0x96b2, 0x96b0, 0x96b4, 0x96b6,
-  0x96b8, 0x96b9, 0x96ce, 0x96cb, 0x96c9, 0x96cd, 0x894d, 0x96dc,
-  0x970d, 0x96d5, 0x96f9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970e,
-  0x9711, 0x970f, 0x9716, 0x9719, 0x9724, 0x972a, 0x9730, 0x9739,
-  0x973d, 0x973e, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975c,
-  0x9760, 0x9764, 0x9766, 0x9768, 0x52d2, 0x976b, 0x9771, 0x9779,
-  0x9785, 0x977c, 0x9781, 0x977a, 0x9786, 0x978b, 0x978f, 0x9790,
-  0x979c, 0x97a8, 0x97a6, 0x97a3, 0x97b3, 0x97b4, 0x97c3, 0x97c6,
-  0x97c8, 0x97cb, 0x97dc, 0x97ed, 0x9f4f, 0x97f2, 0x7adf, 0x97f6,
-  0x97f5, 0x980f, 0x980c, 0x9838, 0x9824, 0x9821, 0x9837, 0x983d,
-  0x9846, 0x984f, 0x984b, 0x986b, 0x986f, 0x9870,
-  /* 0x71 */
-  0x9871, 0x9874, 0x9873, 0x98aa, 0x98af, 0x98b1, 0x98b6, 0x98c4,
-  0x98c3, 0x98c6, 0x98e9, 0x98eb, 0x9903, 0x9909, 0x9912, 0x9914,
-  0x9918, 0x9921, 0x991d, 0x991e, 0x9924, 0x9920, 0x992c, 0x992e,
-  0x993d, 0x993e, 0x9942, 0x9949, 0x9945, 0x9950, 0x994b, 0x9951,
-  0x9952, 0x994c, 0x9955, 0x9997, 0x9998, 0x99a5, 0x99ad, 0x99ae,
-  0x99bc, 0x99df, 0x99db, 0x99dd, 0x99d8, 0x99d1, 0x99ed, 0x99ee,
-  0x99f1, 0x99f2, 0x99fb, 0x99f8, 0x9a01, 0x9a0f, 0x9a05, 0x99e2,
-  0x9a19, 0x9a2b, 0x9a37, 0x9a45, 0x9a42, 0x9a40, 0x9a43, 0x9a3e,
-  0x9a55, 0x9a4d, 0x9a5b, 0x9a57, 0x9a5f, 0x9a62, 0x9a65, 0x9a64,
-  0x9a69, 0x9a6b, 0x9a6a, 0x9aad, 0x9ab0, 0x9abc, 0x9ac0, 0x9acf,
-  0x9ad1, 0x9ad3, 0x9ad4, 0x9ade, 0x9adf, 0x9ae2, 0x9ae3, 0x9ae6,
-  0x9aef, 0x9aeb, 0x9aee, 0x9af4, 0x9af1, 0x9af7,
-  /* 0x72 */
-  0x9afb, 0x9b06, 0x9b18, 0x9b1a, 0x9b1f, 0x9b22, 0x9b23, 0x9b25,
-  0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2e, 0x9b2f, 0x9b32, 0x9b44,
-  0x9b43, 0x9b4f, 0x9b4d, 0x9b4e, 0x9b51, 0x9b58, 0x9b74, 0x9b93,
-  0x9b83, 0x9b91, 0x9b96, 0x9b97, 0x9b9f, 0x9ba0, 0x9ba8, 0x9bb4,
-  0x9bc0, 0x9bca, 0x9bb9, 0x9bc6, 0x9bcf, 0x9bd1, 0x9bd2, 0x9be3,
-  0x9be2, 0x9be4, 0x9bd4, 0x9be1, 0x9c3a, 0x9bf2, 0x9bf1, 0x9bf0,
-  0x9c15, 0x9c14, 0x9c09, 0x9c13, 0x9c0c, 0x9c06, 0x9c08, 0x9c12,
-  0x9c0a, 0x9c04, 0x9c2e, 0x9c1b, 0x9c25, 0x9c24, 0x9c21, 0x9c30,
-  0x9c47, 0x9c32, 0x9c46, 0x9c3e, 0x9c5a, 0x9c60, 0x9c67, 0x9c76,
-  0x9c78, 0x9ce7, 0x9cec, 0x9cf0, 0x9d09, 0x9d08, 0x9ceb, 0x9d03,
-  0x9d06, 0x9d2a, 0x9d26, 0x9daf, 0x9d23, 0x9d1f, 0x9d44, 0x9d15,
-  0x9d12, 0x9d41, 0x9d3f, 0x9d3e, 0x9d46, 0x9d48,
-  /* 0x73 */
-  0x9d5d, 0x9d5e, 0x9d64, 0x9d51, 0x9d50, 0x9d59, 0x9d72, 0x9d89,
-  0x9d87, 0x9dab, 0x9d6f, 0x9d7a, 0x9d9a, 0x9da4, 0x9da9, 0x9db2,
-  0x9dc4, 0x9dc1, 0x9dbb, 0x9db8, 0x9dba, 0x9dc6, 0x9dcf, 0x9dc2,
-  0x9dd9, 0x9dd3, 0x9df8, 0x9de6, 0x9ded, 0x9def, 0x9dfd, 0x9e1a,
-  0x9e1b, 0x9e1e, 0x9e75, 0x9e79, 0x9e7d, 0x9e81, 0x9e88, 0x9e8b,
-  0x9e8c, 0x9e92, 0x9e95, 0x9e91, 0x9e9d, 0x9ea5, 0x9ea9, 0x9eb8,
-  0x9eaa, 0x9ead, 0x9761, 0x9ecc, 0x9ece, 0x9ecf, 0x9ed0, 0x9ed4,
-  0x9edc, 0x9ede, 0x9edd, 0x9ee0, 0x9ee5, 0x9ee8, 0x9eef, 0x9ef4,
-  0x9ef6, 0x9ef7, 0x9ef9, 0x9efb, 0x9efc, 0x9efd, 0x9f07, 0x9f08,
-  0x76b7, 0x9f15, 0x9f21, 0x9f2c, 0x9f3e, 0x9f4a, 0x9f52, 0x9f54,
-  0x9f63, 0x9f5f, 0x9f60, 0x9f61, 0x9f66, 0x9f67, 0x9f6c, 0x9f6a,
-  0x9f77, 0x9f72, 0x9f76, 0x9f95, 0x9f9c, 0x9fa0,
-  /* 0x74 */
-  0x582f, 0x69c7, 0x9059, 0x7464, 0x51dc, 0x7199,
-};
-
-static int
-jisx0208_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = (s[0] & 0x7F);
-  if ((c1 >= 0x21 && c1 <= 0x28) || (c1 >= 0x30 && c1 <= 0x74)) {
-    if (n >= 2) {
-      unsigned char c2 = (s[1] & 0x7F);
-      if (c2 >= 0x21 && c2 < 0x7f) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        unsigned short wc = 0xfffd;
-        if (i < 1410) {
-          if (i < 690)
-            wc = jisx0208_2uni_page21[i];
-        } else {
-          if (i < 7808)
-            wc = jisx0208_2uni_page30[i-1410];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-static const unsigned short jisx0208_2charset[6879] = {
-  0x2140, 0x2171, 0x2172, 0x2178, 0x212f, 0x224c, 0x216b, 0x215e,
-  0x212d, 0x2279, 0x215f, 0x2160, 0x2621, 0x2622, 0x2623, 0x2624,
-  0x2625, 0x2626, 0x2627, 0x2628, 0x2629, 0x262a, 0x262b, 0x262c,
-  0x262d, 0x262e, 0x262f, 0x2630, 0x2631, 0x2632, 0x2633, 0x2634,
-  0x2635, 0x2636, 0x2637, 0x2638, 0x2641, 0x2642, 0x2643, 0x2644,
-  0x2645, 0x2646, 0x2647, 0x2648, 0x2649, 0x264a, 0x264b, 0x264c,
-  0x264d, 0x264e, 0x264f, 0x2650, 0x2651, 0x2652, 0x2653, 0x2654,
-  0x2655, 0x2656, 0x2657, 0x2658, 0x2727, 0x2721, 0x2722, 0x2723,
-  0x2724, 0x2725, 0x2726, 0x2728, 0x2729, 0x272a, 0x272b, 0x272c,
-  0x272d, 0x272e, 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734,
-  0x2735, 0x2736, 0x2737, 0x2738, 0x2739, 0x273a, 0x273b, 0x273c,
-  0x273d, 0x273e, 0x273f, 0x2740, 0x2741, 0x2751, 0x2752, 0x2753,
-  0x2754, 0x2755, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c,
-  0x275d, 0x275e, 0x275f, 0x2760, 0x2761, 0x2762, 0x2763, 0x2764,
-  0x2765, 0x2766, 0x2767, 0x2768, 0x2769, 0x276a, 0x276b, 0x276c,
-  0x276d, 0x276e, 0x276f, 0x2770, 0x2771, 0x2757, 0x213e, 0x213d,
-  0x2142, 0x2146, 0x2147, 0x2148, 0x2149, 0x2277, 0x2278, 0x2145,
-  0x2144, 0x2273, 0x216c, 0x216d, 0x2228, 0x216e, 0x2272, 0x222b,
-  0x222c, 0x222a, 0x222d, 0x224d, 0x224e, 0x224f, 0x225f, 0x2250,
-  0x2260, 0x223a, 0x223b, 0x215d, 0x2265, 0x2267, 0x2167, 0x225c,
-  0x224a, 0x224b, 0x2241, 0x2240, 0x2269, 0x226a, 0x2168, 0x2268,
-  0x2266, 0x2262, 0x2162, 0x2261, 0x2165, 0x2166, 0x2263, 0x2264,
-  0x223e, 0x223f, 0x223c, 0x223d, 0x225d, 0x225e, 0x2821, 0x282c,
-  0x2822, 0x282d, 0x2823, 0x282e, 0x2824, 0x282f, 0x2826, 0x2831,
-  0x2825, 0x2830, 0x2827, 0x283c, 0x2837, 0x2832, 0x2829, 0x283e,
-  0x2839, 0x2834, 0x2828, 0x2838, 0x283d, 0x2833, 0x282a, 0x283a,
-  0x283f, 0x2835, 0x282b, 0x283b, 0x2840, 0x2836, 0x2223, 0x2222,
-  0x2225, 0x2224, 0x2227, 0x2226, 0x2221, 0x217e, 0x217b, 0x217d,
-  0x217c, 0x227e, 0x217a, 0x2179, 0x216a, 0x2169, 0x2276, 0x2275,
-  0x2274, 0x2121, 0x2122, 0x2123, 0x2137, 0x2139, 0x213a, 0x213b,
-  0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159,
-  0x215a, 0x215b, 0x2229, 0x222e, 0x214c, 0x214d, 0x2141, 0x2421,
-  0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429,
-  0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431,
-  0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439,
-  0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441,
-  0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449,
-  0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451,
-  0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459,
-  0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461,
-  0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469,
-  0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471,
-  0x2472, 0x2473, 0x212b, 0x212c, 0x2135, 0x2136, 0x2521, 0x2522,
-  0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a,
-  0x252b, 0x252c, 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532,
-  0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a,
-  0x253b, 0x253c, 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542,
-  0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a,
-  0x254b, 0x254c, 0x254d, 0x254e, 0x254f, 0x2550, 0x2551, 0x2552,
-  0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a,
-  0x255b, 0x255c, 0x255d, 0x255e, 0x255f, 0x2560, 0x2561, 0x2562,
-  0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a,
-  0x256b, 0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572,
-  0x2573, 0x2574, 0x2575, 0x2576, 0x2126, 0x213c, 0x2133, 0x2134,
-  0x306c, 0x437a, 0x3c37, 0x4b7c, 0x3e66, 0x3b30, 0x3e65, 0x323c,
-  0x4954, 0x4d3f, 0x5022, 0x312f, 0x336e, 0x5023, 0x4024, 0x5242,
-  0x3556, 0x4a3a, 0x3e67, 0x4e3e, 0x4a42, 0x5024, 0x4366, 0x5025,
-  0x367a, 0x5026, 0x345d, 0x4330, 0x3c67, 0x5027, 0x5028, 0x5029,
-  0x4735, 0x3557, 0x4737, 0x4663, 0x3843, 0x4b33, 0x6949, 0x502a,
-  0x3e68, 0x502b, 0x3235, 0x3665, 0x3870, 0x4c69, 0x5626, 0x4d70,
-  0x467d, 0x3425, 0x3535, 0x502c, 0x502d, 0x4e3b, 0x4d3d, 0x4168,
-  0x502f, 0x3b76, 0x4673, 0x5032, 0x313e, 0x385f, 0x385e, 0x3066,
-  0x4f4b, 0x4f4a, 0x3a33, 0x3021, 0x5033, 0x5034, 0x5035, 0x4b34,
-  0x5036, 0x3872, 0x3067, 0x4b72, 0x357c, 0x357d, 0x357e, 0x4462,
-  0x4e3c, 0x5037, 0x5038, 0x5039, 0x3f4d, 0x3d3a, 0x3f4e, 0x503e,
-  0x503c, 0x503d, 0x3558, 0x3a23, 0x3270, 0x503b, 0x503a, 0x4a29,
-  0x3b46, 0x3b45, 0x423e, 0x503f, 0x4955, 0x4067, 0x2138, 0x5040,
-  0x5042, 0x4265, 0x4e61, 0x304a, 0x5041, 0x323e, 0x3644, 0x4367,
-  0x376f, 0x5043, 0x4724, 0x346b, 0x5044, 0x304b, 0x3860, 0x346c,
-  0x497a, 0x4832, 0x3559, 0x3271, 0x5067, 0x4541, 0x476c, 0x5046,
-  0x483c, 0x4e62, 0x3f2d, 0x3b47, 0x3b77, 0x3240, 0x4451, 0x4322,
-  0x504a, 0x304c, 0x4463, 0x3d3b, 0x3a34, 0x4d24, 0x424e, 0x323f,
-  0x5049, 0x4d3e, 0x5045, 0x5047, 0x3a6e, 0x5048, 0x5524, 0x5050,
-  0x5053, 0x5051, 0x3242, 0x4a3b, 0x504b, 0x504f, 0x3873, 0x3b48,
-  0x3426, 0x5054, 0x504c, 0x4e63, 0x3b78, 0x504d, 0x5052, 0x5055,
-  0x504e, 0x3621, 0x304d, 0x3622, 0x3241, 0x5525, 0x4b79, 0x496e,
-  0x3874, 0x3f2f, 0x4e37, 0x4a58, 0x3738, 0x4225, 0x3264, 0x3d53,
-  0x5059, 0x505e, 0x505c, 0x5057, 0x422f, 0x505a, 0x505d, 0x505b,
-  0x4a5d, 0x5058, 0x3f2e, 0x4b73, 0x505f, 0x5060, 0x3d24, 0x506d,
-  0x4750, 0x4936, 0x5068, 0x4a70, 0x3236, 0x506c, 0x5066, 0x506f,
-  0x4152, 0x3844, 0x475c, 0x6047, 0x506e, 0x455d, 0x5063, 0x3876,
-  0x3875, 0x5061, 0x3c5a, 0x5069, 0x4a6f, 0x434d, 0x5065, 0x3771,
-  0x5062, 0x506a, 0x5064, 0x4e51, 0x506b, 0x4f41, 0x3666, 0x3770,
-  0x5070, 0x5071, 0x5075, 0x304e, 0x4a50, 0x5074, 0x5073, 0x5077,
-  0x5076, 0x4464, 0x3772, 0x5078, 0x3c45, 0x4226, 0x4465, 0x3676,
-  0x5079, 0x3536, 0x507a, 0x507c, 0x4b35, 0x3766, 0x3b31, 0x4877,
-  0x507b, 0x3a45, 0x4d43, 0x507e, 0x5123, 0x507d, 0x3a44, 0x3d7d,
-  0x3739, 0x5124, 0x364f, 0x5121, 0x5122, 0x462f, 0x417c, 0x3623,
-  0x4b4d, 0x5125, 0x4e3d, 0x5126, 0x5129, 0x5127, 0x414e, 0x5128,
-  0x512a, 0x512c, 0x512b, 0x4a48, 0x3537, 0x512e, 0x512f, 0x322f,
-  0x512d, 0x3c74, 0x5132, 0x5131, 0x5130, 0x5056, 0x5133, 0x3d7e,
-  0x5134, 0x4d25, 0x4c59, 0x5136, 0x5135, 0x5138, 0x5137, 0x5139,
-  0x513a, 0x3074, 0x3835, 0x373b, 0x3d3c, 0x437b, 0x3624, 0x4068,
-  0x3877, 0x396e, 0x513c, 0x4c48, 0x4546, 0x3b79, 0x513b, 0x513d,
-  0x455e, 0x3375, 0x513e, 0x467e, 0x4134, 0x5140, 0x5141, 0x482c,
-  0x3878, 0x4f3b, 0x5142, 0x3626, 0x4a3c, 0x4236, 0x3671, 0x4535,
-  0x3773, 0x5143, 0x5144, 0x4662, 0x315f, 0x5147, 0x3a7d, 0x5146,
-  0x3a46, 0x5148, 0x666e, 0x5149, 0x4b41, 0x514a, 0x514b, 0x514c,
-  0x3e69, 0x3c4c, 0x3427, 0x514f, 0x514d, 0x4c3d, 0x514e, 0x495a,
-  0x5150, 0x5151, 0x5152, 0x455f, 0x5156, 0x5154, 0x5155, 0x5153,
-  0x3a63, 0x5157, 0x4c6a, 0x4e64, 0x5158, 0x4028, 0x5159, 0x3d5a,
-  0x515a, 0x437c, 0x4e3f, 0x4560, 0x5245, 0x515b, 0x7425, 0x3645,
-  0x515c, 0x4b5e, 0x3d68, 0x427c, 0x515e, 0x4664, 0x515f, 0x5160,
-  0x332e, 0x5161, 0x3627, 0x464c, 0x317a, 0x3d50, 0x4821, 0x5162,
-  0x4561, 0x3f4f, 0x5163, 0x4a2c, 0x405a, 0x3422, 0x3429, 0x5164,
-  0x5166, 0x373a, 0x5165, 0x4e73, 0x3d69, 0x483d, 0x4a4c, 0x5167,
-  0x4d78, 0x5168, 0x5169, 0x457e, 0x516a, 0x4029, 0x3a7e, 0x3774,
-  0x516b, 0x3b49, 0x396f, 0x4466, 0x516d, 0x4227, 0x3a6f, 0x516e,
-  0x516f, 0x4130, 0x516c, 0x5171, 0x4b36, 0x3964, 0x5170, 0x3775,
-  0x3a5e, 0x476d, 0x5174, 0x5172, 0x497b, 0x3e6a, 0x517b, 0x3364,
-  0x5175, 0x5173, 0x414f, 0x5177, 0x5176, 0x3344, 0x3760, 0x517c,
-  0x4e2d, 0x5178, 0x517d, 0x517a, 0x5179, 0x4e4f, 0x3879, 0x3243,
-  0x4e74, 0x3d75, 0x4558, 0x3965, 0x5222, 0x5223, 0x4e65, 0x4f2b,
-  0x5225, 0x387a, 0x5224, 0x332f, 0x5226, 0x4b56, 0x443c, 0x4d26,
-  0x4a59, 0x5227, 0x7055, 0x4630, 0x5228, 0x342a, 0x4c33, 0x3e21,
-  0x5229, 0x4a67, 0x522d, 0x402a, 0x522a, 0x3650, 0x522b, 0x342b,
-  0x372e, 0x522e, 0x522f, 0x5230, 0x5231, 0x3c5b, 0x387b, 0x4c5e,
-  0x4c68, 0x4677, 0x4a71, 0x5232, 0x5233, 0x5235, 0x5237, 0x5236,
-  0x5238, 0x323d, 0x4b4c, 0x3a7c, 0x5239, 0x4159, 0x3e22, 0x3629,
-  0x523a, 0x485b, 0x523b, 0x523c, 0x523d, 0x523e, 0x4924, 0x3668,
-  0x3065, 0x463f, 0x523f, 0x3d3d, 0x4069, 0x5241, 0x5240, 0x3e23,
-  0x3861, 0x5243, 0x483e, 0x5244, 0x485c, 0x4234, 0x426e, 0x3628,
-  0x466e, 0x4331, 0x476e, 0x4b4e, 0x5246, 0x406a, 0x3735, 0x5247,
-  0x5248, 0x312c, 0x3075, 0x346d, 0x4228, 0x3551, 0x4d71, 0x524b,
-  0x3237, 0x524a, 0x362a, 0x524c, 0x4c71, 0x524d, 0x4e52, 0x387c,
-  0x3836, 0x524e, 0x5250, 0x524f, 0x3f5f, 0x3139, 0x315e, 0x5251,
-  0x5252, 0x3837, 0x5253, 0x356e, 0x3b32, 0x5254, 0x4b74, 0x3a35,
-  0x355a, 0x4d27, 0x4150, 0x483f, 0x3c7d, 0x3d47, 0x3c68, 0x3c75,
-  0x3d76, 0x4840, 0x5257, 0x3143, 0x4151, 0x387d, 0x3845, 0x3667,
-  0x525b, 0x4321, 0x427e, 0x362b, 0x3e24, 0x525c, 0x525a, 0x3244,
-  0x4266, 0x3c38, 0x3b4b, 0x3126, 0x3370, 0x3966, 0x3b4a, 0x525d,
-  0x525e, 0x3549, 0x3346, 0x3967, 0x3548, 0x445f, 0x3125, 0x4631,
-  0x4c3e, 0x3921, 0x4d79, 0x4547, 0x387e, 0x372f, 0x5267, 0x3663,
-  0x4b4a, 0x485d, 0x5266, 0x345e, 0x5261, 0x5262, 0x5264, 0x5265,
-  0x355b, 0x3f61, 0x4a2d, 0x5263, 0x525f, 0x3863, 0x5260, 0x4f24,
-  0x4a72, 0x4468, 0x3862, 0x3970, 0x5268, 0x465d, 0x526c, 0x3c7e,
-  0x3c76, 0x526f, 0x526d, 0x4c23, 0x526a, 0x5273, 0x526e, 0x5271,
-  0x3846, 0x4c3f, 0x5272, 0x5274, 0x5276, 0x3a70, 0x4f42, 0x526b,
-  0x5269, 0x5275, 0x5270, 0x5278, 0x5323, 0x527a, 0x527e, 0x5321,
-  0x527b, 0x533e, 0x3a69, 0x3331, 0x5279, 0x5325, 0x3076, 0x5324,
-  0x3025, 0x494a, 0x5322, 0x527c, 0x5277, 0x527d, 0x3a48, 0x5326,
-  0x3077, 0x532f, 0x5327, 0x5328, 0x3e25, 0x4b69, 0x532d, 0x532c,
-  0x452f, 0x532e, 0x532b, 0x3134, 0x3a36, 0x3f30, 0x5329, 0x4562,
-  0x532a, 0x3022, 0x5334, 0x4d23, 0x3e27, 0x533a, 0x5339, 0x5330,
-  0x4243, 0x5331, 0x426f, 0x5336, 0x3e26, 0x5333, 0x4c64, 0x373c,
-  0x5337, 0x5338, 0x5335, 0x533b, 0x5332, 0x5341, 0x5346, 0x5342,
-  0x533d, 0x5347, 0x4131, 0x5349, 0x3922, 0x533f, 0x437d, 0x5343,
-  0x533c, 0x342d, 0x346e, 0x3365, 0x5344, 0x5340, 0x3776, 0x534a,
-  0x5348, 0x4153, 0x354a, 0x362c, 0x5345, 0x3674, 0x3144, 0x534e,
-  0x534c, 0x5427, 0x5351, 0x534b, 0x534f, 0x534d, 0x3b4c, 0x5350,
-  0x5353, 0x5358, 0x5356, 0x5355, 0x4332, 0x3245, 0x5352, 0x5354,
-  0x3e28, 0x3133, 0x5357, 0x325e, 0x5362, 0x3e7c, 0x535e, 0x535c,
-  0x535d, 0x535f, 0x313d, 0x4139, 0x5359, 0x535a, 0x337a, 0x5361,
-  0x346f, 0x5364, 0x5360, 0x5363, 0x4a2e, 0x4655, 0x4838, 0x5366,
-  0x5365, 0x3345, 0x5367, 0x536a, 0x5369, 0x5368, 0x4739, 0x536b,
-  0x536c, 0x536e, 0x536d, 0x5370, 0x5373, 0x5371, 0x536f, 0x5372,
-  0x5374, 0x5375, 0x5376, 0x5377, 0x5378, 0x5145, 0x3c7c, 0x3b4d,
-  0x3273, 0x3078, 0x4344, 0x5379, 0x3a24, 0x304f, 0x3f5e, 0x537a,
-  0x3847, 0x3971, 0x537c, 0x537b, 0x4a60, 0x537d, 0x5421, 0x537e,
-  0x5422, 0x5423, 0x3777, 0x3160, 0x5424, 0x5426, 0x5425, 0x5428,
-  0x455a, 0x5429, 0x3035, 0x3a5f, 0x373d, 0x434f, 0x542a, 0x542b,
-  0x542d, 0x542e, 0x3a64, 0x3651, 0x4b37, 0x542c, 0x542f, 0x3a41,
-  0x3923, 0x5433, 0x3a25, 0x4333, 0x5430, 0x445a, 0x5434, 0x3f62,
-  0x5432, 0x5435, 0x373f, 0x5436, 0x5437, 0x3924, 0x3340, 0x5439,
-  0x543a, 0x543b, 0x5438, 0x5431, 0x543c, 0x543d, 0x4b64, 0x3e6b,
-  0x543f, 0x5440, 0x543e, 0x5442, 0x4738, 0x3068, 0x4956, 0x5443,
-  0x3e7d, 0x3c39, 0x475d, 0x3470, 0x3a6b, 0x4b59, 0x4632, 0x3778,
-  0x424f, 0x5441, 0x5444, 0x4244, 0x5445, 0x5446, 0x5448, 0x4469,
-  0x342e, 0x7421, 0x3161, 0x4a73, 0x3e6c, 0x4548, 0x3a66, 0x544e,
-  0x4a3d, 0x4e5d, 0x3274, 0x544a, 0x413a, 0x544d, 0x4563, 0x4549,
-  0x4564, 0x4839, 0x444d, 0x3a49, 0x5449, 0x3176, 0x4536, 0x544b,
-  0x5447, 0x3f50, 0x544f, 0x3d4e, 0x362d, 0x5450, 0x4a68, 0x417d,
-  0x4446, 0x5452, 0x4b4f, 0x5453, 0x5458, 0x4a2f, 0x5457, 0x5451,
-  0x5454, 0x5456, 0x3a26, 0x4a49, 0x5459, 0x4345, 0x3275, 0x3e6d,
-  0x545b, 0x545a, 0x3968, 0x545c, 0x545e, 0x545d, 0x5460, 0x5455,
-  0x5462, 0x5461, 0x545f, 0x3b4e, 0x3f51, 0x4154, 0x5463, 0x403c,
-  0x306d, 0x4764, 0x445b, 0x5465, 0x5464, 0x5466, 0x5467, 0x5468,
-  0x5469, 0x4a51, 0x546a, 0x3246, 0x546b, 0x4d3c, 0x3330, 0x5249,
-  0x3d48, 0x423f, 0x546c, 0x4c6b, 0x4c34, 0x546e, 0x4267, 0x4537,
-  0x4240, 0x4957, 0x546f, 0x5470, 0x317b, 0x3c3a, 0x5471, 0x3050,
-  0x5472, 0x5473, 0x3162, 0x3471, 0x4660, 0x4a74, 0x5477, 0x4155,
-  0x5476, 0x3740, 0x4b5b, 0x5475, 0x4565, 0x5479, 0x5478, 0x547b,
-  0x547a, 0x317c, 0x547c, 0x3e29, 0x547e, 0x4325, 0x547d, 0x4a33,
-  0x3d77, 0x455b, 0x5521, 0x3925, 0x5522, 0x4721, 0x485e, 0x4c51,
-  0x4725, 0x552b, 0x3538, 0x4d45, 0x4c2f, 0x562c, 0x5523, 0x5526,
-  0x4245, 0x4b38, 0x454a, 0x5527, 0x4b65, 0x3a4a, 0x3e2a, 0x5528,
-  0x3b50, 0x3b4f, 0x3039, 0x3848, 0x402b, 0x3051, 0x552c, 0x552d,
-  0x552a, 0x3138, 0x342f, 0x5529, 0x4c45, 0x4931, 0x3028, 0x3079,
-  0x3b51, 0x3052, 0x3023, 0x5532, 0x5530, 0x4c3c, 0x5533, 0x5531,
-  0x552f, 0x3f31, 0x552e, 0x4a5a, 0x3864, 0x5537, 0x5538, 0x3e2b,
-  0x5534, 0x4f2c, 0x474c, 0x5536, 0x3a27, 0x5539, 0x4958, 0x553a,
-  0x5535, 0x4c3b, 0x475e, 0x553b, 0x4932, 0x553c, 0x5540, 0x553d,
-  0x3247, 0x553f, 0x3c3b, 0x553e, 0x3779, 0x554c, 0x5545, 0x5542,
-  0x4364, 0x5541, 0x5543, 0x5544, 0x5546, 0x5547, 0x3472, 0x5549,
-  0x5548, 0x554a, 0x3e6e, 0x554d, 0x445c, 0x3145, 0x554b, 0x554e,
-  0x554f, 0x5552, 0x5550, 0x5551, 0x3b52, 0x5553, 0x3926, 0x5554,
-  0x3b7a, 0x4238, 0x5555, 0x5556, 0x3b5a, 0x3927, 0x4c52, 0x3528,
-  0x3849, 0x5557, 0x3358, 0x5558, 0x4239, 0x5559, 0x5623, 0x555a,
-  0x555b, 0x555c, 0x555e, 0x555f, 0x5560, 0x4270, 0x3127, 0x3c69,
-  0x3042, 0x4157, 0x3430, 0x3c35, 0x3928, 0x4566, 0x3d21, 0x3431,
-  0x4368, 0x446a, 0x3038, 0x3539, 0x4a75, 0x3c42, 0x3552, 0x406b,
-  0x3c3c, 0x4d28, 0x5561, 0x355c, 0x3a4b, 0x3332, 0x3163, 0x3e2c,
-  0x3248, 0x5562, 0x4d46, 0x3d49, 0x3c64, 0x5563, 0x3473, 0x4652,
-  0x4c29, 0x5564, 0x5565, 0x4959, 0x5567, 0x3428, 0x3677, 0x5566,
-  0x3432, 0x3f32, 0x556b, 0x3b21, 0x3249, 0x556a, 0x5568, 0x556c,
-  0x5569, 0x472b, 0x5c4d, 0x3f33, 0x556d, 0x4e40, 0x556e, 0x5570,
-  0x437e, 0x556f, 0x4023, 0x3b7b, 0x4250, 0x3c77, 0x4975, 0x406c,
-  0x3c4d, 0x5571, 0x3e2d, 0x5572, 0x5573, 0x3053, 0x423a, 0x3f52,
-  0x5574, 0x4633, 0x3e2e, 0x3e2f, 0x5575, 0x406d, 0x3e30, 0x5576,
-  0x5577, 0x4c60, 0x5578, 0x3646, 0x3d22, 0x5579, 0x557a, 0x3c5c,
-  0x3f2c, 0x4674, 0x3f54, 0x4878, 0x4722, 0x3649, 0x557b, 0x356f,
-  0x557c, 0x367e, 0x464f, 0x3230, 0x3b53, 0x557d, 0x5622, 0x5621,
-  0x367d, 0x557e, 0x4538, 0x4230, 0x454b, 0x3c48, 0x4158, 0x4d7a,
-  0x5624, 0x5625, 0x4656, 0x3b33, 0x5627, 0x5628, 0x5629, 0x3474,
-  0x562a, 0x562b, 0x322c, 0x413b, 0x3464, 0x562d, 0x4c28, 0x4252,
-  0x3359, 0x562f, 0x5631, 0x345f, 0x562e, 0x5630, 0x5633, 0x5632,
-  0x5634, 0x5635, 0x463d, 0x362e, 0x3265, 0x5636, 0x563b, 0x5639,
-  0x4a77, 0x4a76, 0x4567, 0x5638, 0x3d54, 0x5637, 0x3f72, 0x563c,
-  0x3a6a, 0x5642, 0x5643, 0x563d, 0x3333, 0x563e, 0x5647, 0x5646,
-  0x5645, 0x5641, 0x5640, 0x5644, 0x4a78, 0x564b, 0x5648, 0x564a,
-  0x4d72, 0x5649, 0x563f, 0x3f73, 0x564c, 0x3a37, 0x564d, 0x564e,
-  0x5651, 0x5650, 0x564f, 0x4568, 0x563a, 0x5657, 0x5653, 0x5652,
-  0x5654, 0x5655, 0x5658, 0x4e66, 0x5659, 0x5656, 0x565a, 0x3460,
-  0x565b, 0x565d, 0x565c, 0x565e, 0x565f, 0x406e, 0x3d23, 0x3d64,
-  0x4163, 0x3929, 0x3a38, 0x392a, 0x3570, 0x5660, 0x3a39, 0x384a,
-  0x5661, 0x4c26, 0x4743, 0x5662, 0x392b, 0x342c, 0x4327, 0x3652,
-  0x3b54, 0x495b, 0x4841, 0x5663, 0x3475, 0x5666, 0x4421, 0x5665,
-  0x5664, 0x5667, 0x446b, 0x3f63, 0x3b55, 0x404a, 0x4253, 0x3522,
-  0x4422, 0x5668, 0x5669, 0x3e6f, 0x4b39, 0x566c, 0x566b, 0x566a,
-  0x497d, 0x5673, 0x4b5a, 0x566d, 0x566f, 0x4b6b, 0x566e, 0x5670,
-  0x4828, 0x5671, 0x4a3e, 0x5672, 0x3433, 0x4a3f, 0x472f, 0x5674,
-  0x5675, 0x392c, 0x3434, 0x5676, 0x3838, 0x4d44, 0x4d29, 0x3476,
-  0x5678, 0x4423, 0x392d, 0x3e31, 0x485f, 0x3e32, 0x3d78, 0x446c,
-  0x4a79, 0x4539, 0x392e, 0x495c, 0x5679, 0x4559, 0x3a42, 0x384b,
-  0x446d, 0x3043, 0x3d6e, 0x392f, 0x4d47, 0x567a, 0x567b, 0x4751,
-  0x567c, 0x4e77, 0x4f2d, 0x567e, 0x567d, 0x3347, 0x5721, 0x5724,
-  0x5725, 0x5723, 0x4940, 0x3e33, 0x5727, 0x5726, 0x5722, 0x5728,
-  0x5729, 0x572a, 0x572d, 0x572b, 0x572c, 0x572e, 0x3164, 0x446e,
-  0x572f, 0x377a, 0x3276, 0x4736, 0x5730, 0x467b, 0x4a5b, 0x5731,
-  0x4f2e, 0x5732, 0x4a40, 0x5735, 0x5021, 0x5031, 0x3c30, 0x4675,
-  0x5736, 0x355d, 0x4424, 0x307a, 0x5737, 0x4a26, 0x3930, 0x4350,
-  0x446f, 0x4c6f, 0x3839, 0x384c, 0x5738, 0x5739, 0x573f, 0x3c65,
-  0x4425, 0x362f, 0x573a, 0x492b, 0x4346, 0x573b, 0x573c, 0x3630,
-  0x573d, 0x573e, 0x5740, 0x4576, 0x5741, 0x5742, 0x5743, 0x5734,
-  0x5733, 0x5744, 0x3741, 0x4927, 0x3a4c, 0x4937, 0x4426, 0x494b,
-  0x5745, 0x3e34, 0x3146, 0x5746, 0x5747, 0x4c72, 0x4860, 0x574a,
-  0x317d, 0x402c, 0x5749, 0x5748, 0x3742, 0x4254, 0x574e, 0x574c,
-  0x574b, 0x4e27, 0x3865, 0x3d79, 0x574d, 0x454c, 0x3d3e, 0x4640,
-  0x5751, 0x5750, 0x574f, 0x5752, 0x3866, 0x5753, 0x497c, 0x3d5b,
-  0x5754, 0x4879, 0x4641, 0x4427, 0x4530, 0x5755, 0x352b, 0x3f34,
-  0x492c, 0x3477, 0x4726, 0x5756, 0x3b56, 0x4b3a, 0x4b3b, 0x317e,
-  0x575b, 0x4369, 0x5758, 0x3277, 0x582d, 0x575a, 0x4730, 0x5759,
-  0x5757, 0x397a, 0x575d, 0x5763, 0x5769, 0x5761, 0x455c, 0x5766,
-  0x495d, 0x5760, 0x5765, 0x4e67, 0x3b57, 0x4255, 0x575e, 0x355e,
-  0x5768, 0x402d, 0x3165, 0x5762, 0x3278, 0x5767, 0x3631, 0x5764,
-  0x576a, 0x576c, 0x5776, 0x5774, 0x5771, 0x5770, 0x4e78, 0x5772,
-  0x3632, 0x3931, 0x3d7a, 0x5779, 0x576b, 0x576f, 0x575f, 0x327a,
-  0x5773, 0x5775, 0x4351, 0x3a28, 0x3238, 0x576d, 0x5778, 0x5777,
-  0x3633, 0x4229, 0x3366, 0x3743, 0x576e, 0x577a, 0x577d, 0x5821,
-  0x3c3d, 0x5827, 0x4470, 0x577b, 0x5825, 0x3279, 0x5823, 0x5824,
-  0x577e, 0x5822, 0x3867, 0x4d2a, 0x3435, 0x3159, 0x5826, 0x473a,
-  0x302d, 0x4861, 0x575c, 0x582c, 0x5830, 0x4c65, 0x5829, 0x4569,
-  0x582e, 0x3e70, 0x582f, 0x4657, 0x4f47, 0x582b, 0x5831, 0x397b,
-  0x404b, 0x3054, 0x582a, 0x5828, 0x415a, 0x577c, 0x3b34, 0x4246,
-  0x583d, 0x415b, 0x5838, 0x5835, 0x5836, 0x3c66, 0x5839, 0x583c,
-  0x5837, 0x3d25, 0x583a, 0x5834, 0x4c7c, 0x4c7b, 0x583e, 0x583f,
-  0x3055, 0x5833, 0x3672, 0x3026, 0x3436, 0x583b, 0x5843, 0x5842,
-  0x5847, 0x5848, 0x5846, 0x5849, 0x5841, 0x5845, 0x584a, 0x584b,
-  0x5840, 0x3b7c, 0x5844, 0x4256, 0x3932, 0x5832, 0x3f35, 0x5858,
-  0x4a69, 0x584e, 0x584f, 0x5850, 0x5857, 0x5856, 0x4b7d, 0x3437,
-  0x5854, 0x3745, 0x3334, 0x5851, 0x4e38, 0x5853, 0x3056, 0x5855,
-  0x584c, 0x5852, 0x5859, 0x3744, 0x584d, 0x4d5d, 0x4d2b, 0x585c,
-  0x5860, 0x417e, 0x4e79, 0x5861, 0x585e, 0x585b, 0x585a, 0x585f,
-  0x4a30, 0x4634, 0x3746, 0x5862, 0x585d, 0x5863, 0x377b, 0x3231,
-  0x586b, 0x3438, 0x5869, 0x586a, 0x3a29, 0x5868, 0x5866, 0x5865,
-  0x586c, 0x5864, 0x586e, 0x327b, 0x5870, 0x586f, 0x4428, 0x5873,
-  0x5871, 0x5867, 0x377c, 0x5872, 0x5876, 0x5875, 0x5877, 0x5874,
-  0x5878, 0x5879, 0x587a, 0x4a6a, 0x587c, 0x587b, 0x3d3f, 0x402e,
-  0x3266, 0x327c, 0x587d, 0x303f, 0x404c, 0x587e, 0x6c43, 0x5921,
-  0x3761, 0x5922, 0x406f, 0x5923, 0x5924, 0x353a, 0x5925, 0x5926,
-  0x5927, 0x4257, 0x384d, 0x4c61, 0x4b3c, 0x3d6a, 0x5928, 0x4070,
-  0x6e3d, 0x4862, 0x3c6a, 0x3a4d, 0x5929, 0x4247, 0x4a27, 0x4271,
-  0x592c, 0x592a, 0x592d, 0x592b, 0x592e, 0x4a31, 0x3037, 0x495e,
-  0x4863, 0x592f, 0x5932, 0x3e35, 0x353b, 0x5930, 0x5937, 0x3e36,
-  0x5931, 0x4744, 0x4d5e, 0x5933, 0x5934, 0x5938, 0x456a, 0x5935,
-  0x3933, 0x405e, 0x5946, 0x4834, 0x4272, 0x4864, 0x5a2d, 0x4a7a,
-  0x4471, 0x4b75, 0x593b, 0x3221, 0x436a, 0x5944, 0x4334, 0x593e,
-  0x5945, 0x5940, 0x5947, 0x5943, 0x5942, 0x476f, 0x593c, 0x327d,
-  0x593a, 0x3571, 0x4273, 0x5936, 0x5939, 0x3934, 0x405b, 0x3e37,
-  0x5941, 0x4752, 0x3572, 0x3348, 0x3367, 0x3f21, 0x5949, 0x594e,
-  0x594a, 0x377d, 0x594f, 0x3b22, 0x3969, 0x3d26, 0x593d, 0x3b7d,
-  0x594c, 0x3b58, 0x594d, 0x3044, 0x5948, 0x4429, 0x3573, 0x3634,
-  0x594b, 0x3027, 0x3a43, 0x3f36, 0x4472, 0x4854, 0x5951, 0x415e,
-  0x422a, 0x3b2b, 0x5952, 0x5954, 0x5950, 0x4a61, 0x443d, 0x415c,
-  0x4a7b, 0x3c4e, 0x5960, 0x595f, 0x3f78, 0x377e, 0x5959, 0x3e39,
-  0x4668, 0x4731, 0x5957, 0x415d, 0x3c78, 0x595c, 0x3e38, 0x5956,
-  0x595b, 0x4753, 0x5955, 0x3721, 0x335d, 0x595d, 0x4e2b, 0x3a4e,
-  0x4335, 0x595a, 0x405c, 0x3935, 0x3f64, 0x3166, 0x413c, 0x5958,
-  0x3545, 0x3747, 0x444f, 0x595e, 0x415f, 0x5961, 0x5963, 0x4237,
-  0x5969, 0x5964, 0x5966, 0x4941, 0x4473, 0x5967, 0x4d2c, 0x4d48,
-  0x3439, 0x302e, 0x5965, 0x5962, 0x3478, 0x3167, 0x5968, 0x4d49,
-  0x596c, 0x423b, 0x5973, 0x596d, 0x596a, 0x5971, 0x5953, 0x596e,
-  0x5972, 0x4842, 0x456b, 0x596b, 0x596f, 0x3748, 0x3a71, 0x405d,
-  0x5977, 0x4526, 0x5974, 0x4b60, 0x5975, 0x5976, 0x4c4e, 0x4022,
-  0x3762, 0x597d, 0x3b35, 0x597a, 0x5979, 0x4732, 0x4635, 0x4531,
-  0x597b, 0x597c, 0x496f, 0x4745, 0x3b23, 0x4071, 0x4b50, 0x3349,
-  0x5a25, 0x597e, 0x4d4a, 0x5a27, 0x5a23, 0x5a24, 0x4160, 0x5a22,
-  0x593f, 0x5a26, 0x5a21, 0x5a2b, 0x5a2c, 0x4527, 0x5a2e, 0x3b24,
-  0x5a29, 0x353c, 0x5a2f, 0x5a28, 0x5a33, 0x5a32, 0x5a31, 0x5a34,
-  0x5a36, 0x3e71, 0x5a35, 0x5a39, 0x5a37, 0x5a38, 0x5970, 0x5a3b,
-  0x5a3a, 0x5978, 0x5a3c, 0x5a30, 0x3b59, 0x5a3d, 0x5a3e, 0x5a40,
-  0x5a3f, 0x5a41, 0x327e, 0x3936, 0x4a7c, 0x402f, 0x384e, 0x5a43,
-  0x5a46, 0x4952, 0x355f, 0x5a45, 0x5a44, 0x4754, 0x5a47, 0x3635,
-  0x5a49, 0x5a48, 0x343a, 0x3b36, 0x4658, 0x3749, 0x3f74, 0x5a4a,
-  0x4030, 0x4528, 0x495f, 0x5a4b, 0x5a4c, 0x5a4d, 0x4a38, 0x555d,
-  0x4046, 0x494c, 0x3a58, 0x4865, 0x4843, 0x454d, 0x4e41, 0x5a4f,
-  0x3c50, 0x5a50, 0x3036, 0x3654, 0x404d, 0x4960, 0x5a51, 0x3b42,
-  0x4347, 0x3b5b, 0x3f37, 0x5a52, 0x4a7d, 0x3177, 0x3b5c, 0x5a55,
-  0x5a53, 0x5a56, 0x4e39, 0x5a54, 0x407b, 0x5a57, 0x4232, 0x5a58,
-  0x347a, 0x5a5a, 0x5a59, 0x5a5b, 0x5a5c, 0x347b, 0x467c, 0x4336,
-  0x356c, 0x3b5d, 0x4161, 0x3d5c, 0x3030, 0x5a5d, 0x3222, 0x5a61,
-  0x3937, 0x5a60, 0x3a2b, 0x3e3a, 0x5a5f, 0x3e3b, 0x4c40, 0x3a2a,
-  0x3057, 0x404e, 0x5a66, 0x4031, 0x3147, 0x3d55, 0x4b66, 0x3a72,
-  0x3e3c, 0x4027, 0x5a65, 0x5a63, 0x5a64, 0x436b, 0x5b26, 0x5a6a,
-  0x3b7e, 0x3938, 0x5a68, 0x5a69, 0x3f38, 0x5a67, 0x3b2f, 0x5a6c,
-  0x5a6b, 0x5a70, 0x5a71, 0x5a6d, 0x3322, 0x5a6e, 0x5a6f, 0x4855,
-  0x4961, 0x374a, 0x5a72, 0x4032, 0x3e3d, 0x4352, 0x3647, 0x5a73,
-  0x5a77, 0x324b, 0x5a74, 0x5a76, 0x5a75, 0x3d6b, 0x4348, 0x3045,
-  0x5a78, 0x5a79, 0x442a, 0x4e71, 0x3b43, 0x4a6b, 0x4b3d, 0x5b22,
-  0x5a7b, 0x5a7e, 0x5a7d, 0x5a7a, 0x5b21, 0x465e, 0x5a7c, 0x5b23,
-  0x3d6c, 0x5b24, 0x4d4b, 0x4778, 0x5b25, 0x5b27, 0x5b28, 0x5b29,
-  0x364a, 0x3148, 0x3939, 0x5b2a, 0x5b2b, 0x3d71, 0x4162, 0x5258,
-  0x413e, 0x413d, 0x4258, 0x3a47, 0x5072, 0x376e, 0x4d2d, 0x4a7e,
-  0x497e, 0x5b2c, 0x3a73, 0x443f, 0x5b2d, 0x4f2f, 0x4b3e, 0x442b,
-  0x5b2e, 0x347c, 0x5b2f, 0x5b30, 0x4c5a, 0x4c24, 0x4b76, 0x4b5c,
-  0x3b25, 0x5b32, 0x3c6b, 0x4b51, 0x5b34, 0x5b37, 0x5b36, 0x3479,
-  0x3560, 0x5b33, 0x5b35, 0x5b38, 0x3f79, 0x4d7b, 0x3049, 0x3a60,
-  0x423c, 0x3c5d, 0x3e73, 0x5b3b, 0x454e, 0x5b39, 0x422b, 0x5b3a,
-  0x3e72, 0x4c5d, 0x5b3c, 0x5b3d, 0x4d68, 0x5b42, 0x393a, 0x4755,
-  0x5b3f, 0x456c, 0x5a5e, 0x5a62, 0x354f, 0x4747, 0x5b41, 0x3e3e,
-  0x4844, 0x5b47, 0x487a, 0x5b3e, 0x5b44, 0x5b43, 0x404f, 0x4b6d,
-  0x4e53, 0x4b67, 0x324c, 0x3b5e, 0x4f48, 0x5b46, 0x3f75, 0x5b45,
-  0x5b40, 0x384f, 0x5b4c, 0x5b4a, 0x324d, 0x5b48, 0x5b4e, 0x5b54,
-  0x4248, 0x4a41, 0x5b56, 0x4922, 0x5b55, 0x4770, 0x4b3f, 0x343b,
-  0x4077, 0x3d40, 0x4453, 0x4d2e, 0x5b51, 0x5b50, 0x5b52, 0x5b4f,
-  0x5b57, 0x5b4d, 0x5b4b, 0x5b53, 0x5b49, 0x436c, 0x4c78, 0x3c46,
-  0x3a74, 0x3a3a, 0x4b6f, 0x3341, 0x444e, 0x464a, 0x3149, 0x4072,
-  0x4034, 0x372a, 0x5b59, 0x393b, 0x337c, 0x5b5b, 0x3374, 0x5b61,
-  0x5b5e, 0x4073, 0x334b, 0x3a2c, 0x334a, 0x3a4f, 0x5b5c, 0x3765,
-  0x374b, 0x456d, 0x5b5a, 0x3046, 0x5b5d, 0x5b5f, 0x364d, 0x372c,
-  0x343c, 0x354b, 0x5b62, 0x3a79, 0x4b71, 0x3b37, 0x5b63, 0x4930,
-  0x5b6f, 0x3233, 0x5b64, 0x5b75, 0x5b65, 0x4e42, 0x5b6c, 0x475f,
-  0x5b74, 0x5b67, 0x3034, 0x5b69, 0x393c, 0x5b6b, 0x5b6a, 0x5b66,
-  0x5b71, 0x3e3f, 0x546d, 0x3868, 0x4d7c, 0x5b68, 0x4474, 0x3323,
-  0x3a2d, 0x5b60, 0x5b70, 0x3361, 0x5b6e, 0x5b72, 0x456e, 0x347e,
-  0x5c32, 0x4c49, 0x5b77, 0x347d, 0x5b7e, 0x4b40, 0x5c21, 0x5c23,
-  0x5c27, 0x5b79, 0x432a, 0x456f, 0x5c2b, 0x5b7c, 0x5c28, 0x5c22,
-  0x3f39, 0x5c2c, 0x4033, 0x5c2a, 0x343d, 0x4f50, 0x5b76, 0x5c26,
-  0x3058, 0x5b78, 0x4c3a, 0x5b7d, 0x3f22, 0x4447, 0x5b73, 0x5c25,
-  0x3f7a, 0x5c2f, 0x3371, 0x3821, 0x5c31, 0x5b7a, 0x5c30, 0x5c29,
-  0x5b7b, 0x5c2d, 0x5c2e, 0x5c3f, 0x464e, 0x5c24, 0x5c3b, 0x5c3d,
-  0x4458, 0x4d4c, 0x4976, 0x5c38, 0x424a, 0x5c3e, 0x413f, 0x5c35,
-  0x5c42, 0x5c41, 0x466f, 0x5c40, 0x466a, 0x5c44, 0x5c37, 0x3648,
-  0x5c3a, 0x3d5d, 0x4760, 0x5c3c, 0x364b, 0x5c34, 0x5c36, 0x5c33,
-  0x4f30, 0x335a, 0x5c39, 0x5c43, 0x3335, 0x3a67, 0x315d, 0x5c54,
-  0x4f31, 0x5c57, 0x3f3a, 0x5c56, 0x5c55, 0x5c52, 0x5c46, 0x5c63,
-  0x5c45, 0x5c58, 0x5c50, 0x5c4b, 0x5c48, 0x5c49, 0x5c51, 0x7422,
-  0x5c4e, 0x393d, 0x4448, 0x4164, 0x5c4c, 0x5c47, 0x5c4a, 0x4d4d,
-  0x4b6a, 0x5c4f, 0x5c59, 0x5c61, 0x5c5a, 0x5c67, 0x5c65, 0x5c60,
-  0x5c5f, 0x4450, 0x4165, 0x5c5d, 0x5c5b, 0x5c62, 0x5c68, 0x4875,
-  0x5c6e, 0x5c69, 0x5c6c, 0x5c66, 0x4374, 0x4938, 0x5c5c, 0x5c64,
-  0x3e40, 0x4c4f, 0x5c78, 0x5c6b, 0x3822, 0x3223, 0x335f, 0x5c53,
-  0x3e41, 0x5c70, 0x5c77, 0x3c79, 0x3372, 0x432e, 0x5c6d, 0x5c72,
-  0x5c76, 0x3636, 0x354c, 0x5c74, 0x3521, 0x464b, 0x5c73, 0x5c75,
-  0x5c6f, 0x5c71, 0x3360, 0x4349, 0x5c7c, 0x5c7a, 0x3869, 0x5c79,
-  0x5d21, 0x5b58, 0x5c7b, 0x5c7d, 0x5c7e, 0x5d2c, 0x5d28, 0x5b6d,
-  0x5d27, 0x5d26, 0x5d23, 0x5c6a, 0x5d25, 0x5d24, 0x5d2a, 0x4f26,
-  0x5d2d, 0x367b, 0x5d29, 0x5d2b, 0x4827, 0x5d2e, 0x5d32, 0x5d2f,
-  0x4d73, 0x5d30, 0x5c5e, 0x5d33, 0x5d34, 0x3135, 0x5d36, 0x3767,
-  0x3c21, 0x3655, 0x3224, 0x4d5f, 0x5d38, 0x5d37, 0x5d3a, 0x353d,
-  0x3656, 0x343e, 0x5d3d, 0x5d3c, 0x5d3e, 0x324e, 0x4337, 0x5d3f,
-  0x343f, 0x5d41, 0x5d40, 0x5d42, 0x5d43, 0x5d44, 0x3b5f, 0x4035,
-  0x3a21, 0x4970, 0x4a62, 0x4f44, 0x3b75, 0x3a50, 0x4e72, 0x5d45,
-  0x5d46, 0x3b60, 0x5d47, 0x5d48, 0x5d4a, 0x5d49, 0x4b58, 0x3d5e,
-  0x3c6c, 0x3b44, 0x5d4b, 0x5d4d, 0x3f23, 0x5d4c, 0x5d4e, 0x5d4f,
-  0x5d50, 0x5d51, 0x5d52, 0x5d54, 0x5d53, 0x5d55, 0x3225, 0x434a,
-  0x5d56, 0x3b26, 0x334c, 0x5d57, 0x4542, 0x544c, 0x3523, 0x5d58,
-  0x5d59, 0x4a6c, 0x4b68, 0x4647, 0x5d5a, 0x4866, 0x487b, 0x4c53,
-  0x5d5b, 0x5d5d, 0x5d5c, 0x5d5f, 0x5d5e, 0x5d61, 0x3b61, 0x4c31,
-  0x5d62, 0x5d63, 0x3524, 0x5d64, 0x5d66, 0x5d65, 0x3f65, 0x4939,
-  0x314a, 0x4845, 0x4475, 0x3d41, 0x3561, 0x4846, 0x3c2e, 0x5d68,
-  0x3440, 0x3178, 0x4672, 0x5d67, 0x393e, 0x4353, 0x5d69, 0x5d71,
-  0x5d6a, 0x4241, 0x3562, 0x5d72, 0x3768, 0x3525, 0x5d70, 0x5d6e,
-  0x5d6b, 0x4d60, 0x4440, 0x4659, 0x5d6c, 0x5d74, 0x5d73, 0x3723,
-  0x322d, 0x3a3b, 0x5d6d, 0x5d6f, 0x4b57, 0x4274, 0x4b77, 0x5d7c,
-  0x5d7d, 0x324f, 0x4a28, 0x4c7d, 0x5e21, 0x3c23, 0x3e42, 0x5d78,
-  0x5d7e, 0x3168, 0x3637, 0x5d75, 0x5d7a, 0x4074, 0x4771, 0x4867,
-  0x5d77, 0x4b21, 0x5d79, 0x5e24, 0x5e22, 0x5d7b, 0x4b22, 0x4748,
-  0x3563, 0x4525, 0x436d, 0x5e25, 0x5e23, 0x4259, 0x5d76, 0x314b,
-  0x4d4e, 0x5e30, 0x5e2f, 0x4076, 0x5e2c, 0x4d6c, 0x4636, 0x5e26,
-  0x4445, 0x314c, 0x393f, 0x5e29, 0x3d27, 0x5e2e, 0x5e2d, 0x5e28,
-  0x5e2b, 0x3368, 0x5e2a, 0x4749, 0x4e2e, 0x3e74, 0x4075, 0x5e36,
-  0x5e34, 0x494d, 0x5e31, 0x5e33, 0x313a, 0x3940, 0x4f32, 0x333d,
-  0x4962, 0x4d61, 0x3324, 0x3f3b, 0x5e35, 0x5e3a, 0x3e43, 0x4d30,
-  0x5e37, 0x5e32, 0x5e38, 0x4e5e, 0x4573, 0x4642, 0x3336, 0x3155,
-  0x5e3e, 0x5e41, 0x4e43, 0x4d64, 0x5e48, 0x5e42, 0x5e3f, 0x4e54,
-  0x5e45, 0x3d4a, 0x5e47, 0x5e4c, 0x4571, 0x5e4a, 0x5e44, 0x4338,
-  0x5e4b, 0x5e40, 0x5e46, 0x5e4d, 0x307c, 0x5e43, 0x5e4e, 0x3f3c,
-  0x3d5f, 0x4a25, 0x3a2e, 0x5e3b, 0x5e49, 0x453a, 0x4036, 0x3369,
-  0x3a51, 0x3e44, 0x5e3d, 0x3d42, 0x374c, 0x5e3c, 0x5e52, 0x3d6d,
-  0x383a, 0x5e61, 0x5e5b, 0x3574, 0x454f, 0x5e56, 0x5e5f, 0x302f,
-  0x3132, 0x3239, 0x5e58, 0x422c, 0x5e4f, 0x5e51, 0x3941, 0x5e62,
-  0x5e5d, 0x5e55, 0x5e5c, 0x4c2b, 0x5e5a, 0x5e5e, 0x3850, 0x3e45,
-  0x4339, 0x5e54, 0x4d2f, 0x5e57, 0x5e50, 0x4572, 0x5e53, 0x5e59,
-  0x4f51, 0x3c3e, 0x4b7e, 0x5e63, 0x482e, 0x5e6f, 0x383b, 0x3d60,
-  0x5e65, 0x4e2f, 0x3942, 0x5e72, 0x306e, 0x5e70, 0x5e64, 0x5e6a,
-  0x5e6c, 0x4d4f, 0x5e67, 0x452e, 0x5e69, 0x5e71, 0x5e6b, 0x4c47,
-  0x5e66, 0x3c22, 0x5e7e, 0x336a, 0x5e68, 0x5e6d, 0x5e6e, 0x426c,
-  0x425a, 0x5e76, 0x5e7c, 0x5e7a, 0x4529, 0x5f23, 0x5e77, 0x5e78,
-  0x5e60, 0x3579, 0x493a, 0x3c3f, 0x3977, 0x4f33, 0x5e74, 0x5f22,
-  0x3169, 0x4166, 0x4779, 0x3441, 0x4e7a, 0x4c21, 0x4452, 0x5e7b,
-  0x5e7d, 0x4132, 0x5f21, 0x5e79, 0x5e73, 0x3443, 0x3769, 0x5f2f,
-  0x5f2a, 0x4078, 0x3363, 0x3d61, 0x5f33, 0x5f2c, 0x442c, 0x5f29,
-  0x4459, 0x5f4c, 0x5f26, 0x5f25, 0x5f2e, 0x5f28, 0x5f27, 0x5f2d,
-  0x4021, 0x5f24, 0x5f30, 0x5f31, 0x3442, 0x5f36, 0x5f35, 0x5f37,
-  0x5f3a, 0x4543, 0x5f34, 0x5f38, 0x3763, 0x4279, 0x5f32, 0x473b,
-  0x5f39, 0x5f3e, 0x5f3c, 0x5f3f, 0x5f42, 0x5f3b, 0x396a, 0x4728,
-  0x5e39, 0x4d74, 0x5f3d, 0x5f41, 0x4275, 0x5f40, 0x5f2b, 0x6f69,
-  0x5f45, 0x5f49, 0x5f47, 0x5f43, 0x5f44, 0x5f48, 0x5f46, 0x494e,
-  0x5f4e, 0x5f4b, 0x5f4a, 0x5f4d, 0x4654, 0x5f4f, 0x4375, 0x426d,
-  0x4025, 0x5f50, 0x5f52, 0x5f51, 0x5e75, 0x5f53, 0x4667, 0x5f54,
-  0x3250, 0x4574, 0x3325, 0x3564, 0x3c5e, 0x3a52, 0x4f27, 0x3f66,
-  0x316a, 0x5f56, 0x5f55, 0x5f59, 0x433a, 0x5f5c, 0x5f57, 0x5f5b,
-  0x5f5a, 0x4540, 0x3059, 0x4e75, 0x5f5e, 0x3128, 0x5f60, 0x5f5f,
-  0x5f5d, 0x5f58, 0x4b23, 0x5f62, 0x5f61, 0x316b, 0x5f64, 0x4a32,
-  0x5f63, 0x4c35, 0x3e47, 0x4133, 0x3e46, 0x4e7b, 0x5f6a, 0x4079,
-  0x5f66, 0x5f6b, 0x316c, 0x5f69, 0x4761, 0x5f65, 0x5f68, 0x3e48,
-  0x4851, 0x5f6c, 0x3c51, 0x407a, 0x5f6f, 0x5f67, 0x3727, 0x5f6d,
-  0x4d50, 0x5f70, 0x7426, 0x3d4f, 0x5f71, 0x5f72, 0x472e, 0x5f74,
-  0x5f75, 0x4733, 0x4575, 0x5f77, 0x5f79, 0x4e55, 0x5f76, 0x5f78,
-  0x316d, 0x5f73, 0x535b, 0x5f7a, 0x4167, 0x3b38, 0x5f7c, 0x5f7b,
-  0x3f24, 0x5259, 0x5f7d, 0x6021, 0x5f6e, 0x5f7e, 0x6022, 0x477a,
-  0x6023, 0x6024, 0x6025, 0x6026, 0x445e, 0x6028, 0x6027, 0x6029,
-  0x602a, 0x3c5f, 0x4963, 0x4c6c, 0x602b, 0x602c, 0x4156, 0x3c24,
-  0x602d, 0x602e, 0x602f, 0x4a52, 0x4847, 0x6030, 0x4757, 0x442d,
-  0x6031, 0x3267, 0x356d, 0x4c46, 0x4c36, 0x3234, 0x4f34, 0x4b52,
-  0x4a2a, 0x4037, 0x6032, 0x4643, 0x3823, 0x6033, 0x3a54, 0x6035,
-  0x6034, 0x6036, 0x6037, 0x6038, 0x353e, 0x6039, 0x603a, 0x3824,
-  0x4848, 0x603c, 0x3e75, 0x603b, 0x3638, 0x603d, 0x603f, 0x603e,
-  0x6040, 0x3851, 0x6041, 0x3669, 0x4140, 0x397d, 0x6043, 0x6044,
-  0x6042, 0x3c6d, 0x4648, 0x3639, 0x6046, 0x432c, 0x6045, 0x4f35,
-  0x4762, 0x6049, 0x604b, 0x6048, 0x4c54, 0x604a, 0x604c, 0x4e44,
-  0x6050, 0x604f, 0x4376, 0x472d, 0x3825, 0x604e, 0x604d, 0x4d31,
-  0x4d32, 0x6051, 0x316e, 0x3976, 0x3b62, 0x6052, 0x6053, 0x6055,
-  0x3d43, 0x6057, 0x6056, 0x6058, 0x334d, 0x605a, 0x6059, 0x605c,
-  0x605b, 0x383c, 0x4e28, 0x364c, 0x3226, 0x366a, 0x3461, 0x4e68,
-  0x605e, 0x6060, 0x6061, 0x3251, 0x605d, 0x3b39, 0x4441, 0x605f,
-  0x6064, 0x3c6e, 0x6062, 0x373e, 0x4849, 0x6063, 0x607e, 0x6069,
-  0x383d, 0x3565, 0x6066, 0x4d7d, 0x4e30, 0x4276, 0x6068, 0x606a,
-  0x4e56, 0x3657, 0x487c, 0x474a, 0x606b, 0x606d, 0x6070, 0x606c,
-  0x606f, 0x386a, 0x314d, 0x6071, 0x3f70, 0x606e, 0x4e5c, 0x6074,
-  0x7424, 0x6072, 0x6075, 0x6067, 0x6073, 0x3a3c, 0x6076, 0x6077,
-  0x4d7e, 0x6078, 0x6079, 0x6065, 0x607a, 0x3444, 0x3c25, 0x607b,
-  0x607c, 0x607d, 0x313b, 0x6121, 0x493b, 0x6122, 0x3424, 0x6123,
-  0x6124, 0x6125, 0x6127, 0x6128, 0x6126, 0x4953, 0x612a, 0x6129,
-  0x612c, 0x612b, 0x612d, 0x612e, 0x6130, 0x612f, 0x3979, 0x6132,
-  0x6131, 0x3445, 0x3f53, 0x453c, 0x6133, 0x4038, 0x3b3a, 0x3179,
-  0x6134, 0x4d51, 0x4a63, 0x6135, 0x4544, 0x4d33, 0x3943, 0x3f3d,
-  0x434b, 0x5234, 0x442e, 0x3268, 0x6136, 0x6137, 0x613c, 0x613a,
-  0x6139, 0x5a42, 0x3326, 0x6138, 0x305a, 0x482a, 0x484a, 0x4e31,
-  0x613d, 0x613b, 0x435c, 0x4026, 0x482b, 0x492d, 0x613f, 0x4e2c,
-  0x374d, 0x6140, 0x613e, 0x4856, 0x6141, 0x6142, 0x305b, 0x3e76,
-  0x6147, 0x6144, 0x466d, 0x6143, 0x3526, 0x614a, 0x6145, 0x6146,
-  0x6149, 0x6148, 0x4925, 0x4142, 0x4141, 0x353f, 0x614b, 0x614c,
-  0x614d, 0x614f, 0x614e, 0x3156, 0x6157, 0x4868, 0x6151, 0x6153,
-  0x6155, 0x3f3e, 0x6156, 0x6154, 0x3c40, 0x6150, 0x6152, 0x4942,
-  0x3e49, 0x6159, 0x6158, 0x615a, 0x3c26, 0x3a2f, 0x4577, 0x615b,
-  0x444b, 0x615d, 0x4e21, 0x615c, 0x4169, 0x6162, 0x6164, 0x6165,
-  0x4354, 0x6163, 0x6160, 0x615e, 0x615f, 0x6161, 0x6168, 0x6166,
-  0x6167, 0x6169, 0x616b, 0x616c, 0x616d, 0x616e, 0x616a, 0x6170,
-  0x616f, 0x6171, 0x4e45, 0x6174, 0x6172, 0x6173, 0x3462, 0x4c7e,
-  0x4a4a, 0x6176, 0x6175, 0x6177, 0x6178, 0x617c, 0x6179, 0x617a,
-  0x617b, 0x617d, 0x617e, 0x6221, 0x6222, 0x6223, 0x482f, 0x4550,
-  0x6224, 0x4772, 0x4934, 0x6225, 0x6226, 0x452a, 0x3327, 0x3944,
-  0x6227, 0x6228, 0x6229, 0x3b29, 0x622b, 0x622a, 0x622c, 0x622d,
-  0x4869, 0x622e, 0x622f, 0x7369, 0x6230, 0x6231, 0x6232, 0x3b2e,
-  0x6233, 0x4756, 0x4b5f, 0x314e, 0x3157, 0x6234, 0x6236, 0x6235,
-  0x4570, 0x4039, 0x5d39, 0x6237, 0x4c41, 0x6238, 0x3446, 0x4857,
-  0x6239, 0x623a, 0x623b, 0x4c5c, 0x4c55, 0x443e, 0x416a, 0x623d,
-  0x3d62, 0x3e4a, 0x6240, 0x623f, 0x623e, 0x487d, 0x3447, 0x3829,
-  0x6246, 0x6243, 0x3f3f, 0x4c32, 0x6242, 0x6244, 0x6245, 0x6241,
-  0x6247, 0x6248, 0x442f, 0x3463, 0x4365, 0x6249, 0x624a, 0x624d,
-  0x3f67, 0x4644, 0x624e, 0x4b53, 0x624b, 0x624c, 0x6251, 0x6250,
-  0x624f, 0x6253, 0x6252, 0x6254, 0x6256, 0x6255, 0x4a4d, 0x3d56,
-  0x4e46, 0x6257, 0x4637, 0x6258, 0x6259, 0x625d, 0x625b, 0x625c,
-  0x625a, 0x625e, 0x625f, 0x6260, 0x6261, 0x4c37, 0x6262, 0x4c70,
-  0x6263, 0x434e, 0x476a, 0x366b, 0x433b, 0x6264, 0x363a, 0x4050,
-  0x6265, 0x3a3d, 0x6266, 0x6267, 0x3826, 0x3a55, 0x6269, 0x4556,
-  0x3a56, 0x354e, 0x4b24, 0x474b, 0x4557, 0x395c, 0x626b, 0x3e4b,
-  0x4e32, 0x3945, 0x3827, 0x4823, 0x626d, 0x626f, 0x386b, 0x626e,
-  0x4476, 0x6271, 0x3337, 0x626c, 0x486a, 0x3130, 0x3a6c, 0x4f52,
-  0x6270, 0x6272, 0x4a4b, 0x4059, 0x6274, 0x6275, 0x6273, 0x334e,
-  0x627b, 0x627a, 0x3c27, 0x627c, 0x6277, 0x627d, 0x6278, 0x4858,
-  0x6276, 0x6279, 0x6322, 0x6321, 0x4b61, 0x627e, 0x306b, 0x6324,
-  0x6323, 0x3e4c, 0x6325, 0x4143, 0x6327, 0x6326, 0x6328, 0x6268,
-  0x626a, 0x632a, 0x6329, 0x3c28, 0x4e69, 0x3c52, 0x632b, 0x3737,
-  0x3540, 0x3527, 0x3b63, 0x4d34, 0x6331, 0x6330, 0x4144, 0x632d,
-  0x632f, 0x3d4b, 0x3f40, 0x632e, 0x632c, 0x472a, 0x3e4d, 0x493c,
-  0x3a57, 0x4578, 0x6332, 0x6333, 0x6349, 0x3658, 0x4f3d, 0x4135,
-  0x6334, 0x3252, 0x4477, 0x4a21, 0x6335, 0x357a, 0x6336, 0x6338,
-  0x6339, 0x4729, 0x633a, 0x633b, 0x633c, 0x3659, 0x3253, 0x4645,
-  0x3d28, 0x3b64, 0x633d, 0x3d29, 0x324a, 0x4943, 0x633e, 0x486b,
-  0x4145, 0x6341, 0x6342, 0x4769, 0x3f41, 0x633f, 0x4361, 0x6340,
-  0x3e4e, 0x305c, 0x3529, 0x6343, 0x4478, 0x6344, 0x4047, 0x4c2d,
-  0x4923, 0x6345, 0x6346, 0x4355, 0x4e47, 0x6348, 0x6347, 0x3c6f,
-  0x634a, 0x3070, 0x634d, 0x634b, 0x3254, 0x374e, 0x634c, 0x3946,
-  0x3972, 0x4a66, 0x634e, 0x4b54, 0x6350, 0x4051, 0x314f, 0x323a,
-  0x302c, 0x634f, 0x6351, 0x6352, 0x3e77, 0x6353, 0x334f, 0x6355,
-  0x376a, 0x3566, 0x6356, 0x3675, 0x6357, 0x407c, 0x464d, 0x4060,
-  0x3a75, 0x6358, 0x4362, 0x416b, 0x635a, 0x635c, 0x6359, 0x635b,
-  0x3722, 0x635d, 0x3726, 0x3567, 0x4d52, 0x635f, 0x6360, 0x312e,
-  0x6363, 0x3376, 0x6362, 0x6361, 0x6365, 0x635e, 0x6366, 0x4e29,
-  0x6367, 0x6368, 0x5474, 0x636a, 0x6369, 0x636b, 0x636c, 0x4e35,
-  0x636d, 0x706f, 0x3e4f, 0x636e, 0x636f, 0x3d57, 0x4638, 0x6370,
-  0x4328, 0x6371, 0x433c, 0x6372, 0x3625, 0x513f, 0x435d, 0x3c33,
-  0x3448, 0x6373, 0x6422, 0x6376, 0x3568, 0x6375, 0x6424, 0x6374,
-  0x3e50, 0x6378, 0x6379, 0x452b, 0x637a, 0x335e, 0x3f5a, 0x4964,
-  0x637c, 0x4268, 0x6377, 0x637b, 0x637d, 0x3a7b, 0x6426, 0x492e,
-  0x4826, 0x4579, 0x365a, 0x6425, 0x6423, 0x4835, 0x637e, 0x435e,
-  0x457b, 0x457a, 0x3a76, 0x6438, 0x6428, 0x642a, 0x642d, 0x642e,
-  0x642b, 0x642c, 0x6429, 0x6427, 0x6421, 0x4a4f, 0x3255, 0x6435,
-  0x6432, 0x6437, 0x6436, 0x4773, 0x4c27, 0x3b3b, 0x6430, 0x6439,
-  0x6434, 0x6433, 0x642f, 0x6431, 0x3449, 0x433d, 0x407d, 0x4822,
-  0x643e, 0x4824, 0x4061, 0x643b, 0x484f, 0x643f, 0x4a53, 0x435b,
-  0x643a, 0x643c, 0x643d, 0x6440, 0x3c44, 0x4646, 0x6445, 0x6444,
-  0x6441, 0x4f36, 0x644a, 0x644e, 0x644b, 0x6447, 0x6448, 0x644d,
-  0x6442, 0x5255, 0x6449, 0x6443, 0x644c, 0x6452, 0x344a, 0x644f,
-  0x6450, 0x6451, 0x6454, 0x6453, 0x4876, 0x6455, 0x4e7c, 0x4a6d,
-  0x645a, 0x6457, 0x6456, 0x4052, 0x6459, 0x645b, 0x6458, 0x645f,
-  0x645c, 0x645d, 0x6446, 0x645e, 0x6460, 0x6461, 0x4a46, 0x6462,
-  0x4c62, 0x364e, 0x3729, 0x6463, 0x4a34, 0x3f68, 0x4c30, 0x6464,
-  0x4e33, 0x4774, 0x4146, 0x4734, 0x3d4d, 0x3040, 0x6469, 0x6467,
-  0x6465, 0x3421, 0x3e51, 0x646a, 0x6468, 0x6466, 0x646e, 0x646d,
-  0x646c, 0x646b, 0x646f, 0x6470, 0x403a, 0x6471, 0x6473, 0x6472,
-  0x3852, 0x4138, 0x6475, 0x457c, 0x6474, 0x6476, 0x4a35, 0x416c,
-  0x3947, 0x6477, 0x4e48, 0x6479, 0x647a, 0x647b, 0x647c, 0x3b65,
-  0x647d, 0x374f, 0x356a, 0x352a, 0x6521, 0x4c73, 0x3948, 0x647e,
-  0x6524, 0x4c66, 0x473c, 0x4933, 0x3d63, 0x6523, 0x3c53, 0x3949,
-  0x3b66, 0x3569, 0x4a36, 0x6522, 0x4147, 0x4b42, 0x3a77, 0x3b67,
-  0x445d, 0x6527, 0x4e5f, 0x3a59, 0x6528, 0x3f42, 0x652a, 0x3e52,
-  0x3a30, 0x6529, 0x3d2a, 0x383e, 0x4148, 0x6525, 0x652b, 0x6526,
-  0x3750, 0x652e, 0x6532, 0x376b, 0x652d, 0x6536, 0x394a, 0x4d6d,
-  0x303c, 0x6533, 0x356b, 0x6530, 0x6531, 0x457d, 0x652f, 0x652c,
-  0x3328, 0x4064, 0x3828, 0x6538, 0x6535, 0x6537, 0x6534, 0x3751,
-  0x4233, 0x6539, 0x416e, 0x6546, 0x6542, 0x653c, 0x6540, 0x3c7a,
-  0x305d, 0x653b, 0x6543, 0x6547, 0x394b, 0x4c56, 0x4456, 0x653d,
-  0x6545, 0x653a, 0x433e, 0x653f, 0x303d, 0x4c4a, 0x653e, 0x365b,
-  0x486c, 0x416d, 0x4e50, 0x3d6f, 0x656e, 0x6548, 0x407e, 0x6544,
-  0x6549, 0x654b, 0x4479, 0x654e, 0x654a, 0x4a54, 0x344b, 0x4c4b,
-  0x305e, 0x654d, 0x4e7d, 0x654c, 0x316f, 0x466c, 0x654f, 0x6556,
-  0x6550, 0x6557, 0x6553, 0x477b, 0x3c4a, 0x6555, 0x6552, 0x6558,
-  0x6551, 0x3d44, 0x4b25, 0x3d4c, 0x6554, 0x6560, 0x655c, 0x655f,
-  0x655d, 0x6561, 0x655b, 0x6541, 0x4053, 0x484b, 0x655e, 0x6559,
-  0x4121, 0x3752, 0x3d2b, 0x3f25, 0x4136, 0x6564, 0x6566, 0x6567,
-  0x6563, 0x6565, 0x655a, 0x6562, 0x656a, 0x6569, 0x4b7a, 0x372b,
-  0x6568, 0x656c, 0x656b, 0x656f, 0x6571, 0x3b3c, 0x656d, 0x6572,
-  0x6573, 0x6574, 0x657a, 0x453b, 0x6576, 0x6575, 0x6577, 0x6578,
-  0x6579, 0x657b, 0x657c, 0x344c, 0x657d, 0x657e, 0x6621, 0x6622,
-  0x6623, 0x6624, 0x6625, 0x6626, 0x6628, 0x6627, 0x6629, 0x662a,
-  0x662b, 0x662e, 0x662c, 0x662d, 0x3a61, 0x3753, 0x4356, 0x4833,
-  0x3d70, 0x474d, 0x486d, 0x662f, 0x586d, 0x6630, 0x6632, 0x4d65,
-  0x6631, 0x6634, 0x6633, 0x4d53, 0x6635, 0x487e, 0x6636, 0x6639,
-  0x6638, 0x6637, 0x663a, 0x3732, 0x4122, 0x3541, 0x663e, 0x663b,
-  0x663c, 0x663f, 0x6640, 0x663d, 0x3129, 0x3227, 0x6642, 0x6643,
-  0x6644, 0x4d62, 0x3d2c, 0x6646, 0x6645, 0x3f69, 0x6647, 0x6648,
-  0x6649, 0x3465, 0x344d, 0x664a, 0x664b, 0x4b5d, 0x4d63, 0x4d54,
-  0x4f37, 0x394d, 0x664e, 0x3c54, 0x664d, 0x664f, 0x3c29, 0x4251,
-  0x6650, 0x394c, 0x4c57, 0x6651, 0x6652, 0x6653, 0x6654, 0x6655,
-  0x3c2a, 0x4c6d, 0x6657, 0x433f, 0x6656, 0x6659, 0x6658, 0x665a,
-  0x403b, 0x665b, 0x665c, 0x4a39, 0x665d, 0x416f, 0x665e, 0x665f,
-  0x4e7e, 0x6662, 0x6661, 0x6660, 0x4430, 0x6663, 0x3f26, 0x6664,
-  0x6665, 0x4f38, 0x6666, 0x6667, 0x6669, 0x6668, 0x4825, 0x4679,
-  0x4f3e, 0x4829, 0x666b, 0x3e53, 0x492a, 0x666c, 0x666a, 0x344e,
-  0x3854, 0x3b68, 0x486e, 0x382a, 0x4b43, 0x666f, 0x666d, 0x394e,
-  0x394f, 0x3069, 0x3a68, 0x4759, 0x305f, 0x6674, 0x4340, 0x4758,
-  0x425b, 0x6676, 0x6672, 0x6675, 0x6670, 0x6673, 0x4b26, 0x3855,
-  0x307d, 0x6671, 0x6678, 0x6679, 0x4639, 0x363b, 0x6726, 0x473d,
-  0x3b69, 0x363c, 0x4048, 0x4f46, 0x4c2e, 0x6677, 0x4054, 0x3553,
-  0x667a, 0x667c, 0x667b, 0x667d, 0x4326, 0x473e, 0x4431, 0x6723,
-  0x6722, 0x667e, 0x3f55, 0x4965, 0x6725, 0x6724, 0x3950, 0x4f53,
-  0x6735, 0x6729, 0x672a, 0x3c70, 0x6728, 0x3978, 0x6727, 0x672b,
-  0x4432, 0x4a22, 0x4123, 0x425c, 0x672f, 0x6730, 0x672c, 0x672d,
-  0x672e, 0x3951, 0x6736, 0x6732, 0x4966, 0x4b6c, 0x4928, 0x6731,
-  0x6734, 0x6733, 0x4b44, 0x6737, 0x6738, 0x4137, 0x6739, 0x673b,
-  0x673f, 0x673c, 0x673a, 0x473f, 0x673d, 0x673e, 0x3232, 0x6745,
-  0x6740, 0x6741, 0x6742, 0x4221, 0x6744, 0x6743, 0x6746, 0x6747,
-  0x6748, 0x3f43, 0x3269, 0x6749, 0x4e57, 0x3c2b, 0x3d2d, 0x3b6a,
-  0x4357, 0x674a, 0x674b, 0x3131, 0x674c, 0x674d, 0x674e, 0x674f,
-  0x6750, 0x363d, 0x5a2a, 0x6751, 0x4065, 0x6752, 0x3c4b, 0x6753,
-  0x5030, 0x6754, 0x4a5e, 0x345c, 0x4124, 0x3d58, 0x4971, 0x3d2e,
-  0x6755, 0x3952, 0x6756, 0x484c, 0x6764, 0x6758, 0x4249, 0x4775,
-  0x383f, 0x6757, 0x4125, 0x6759, 0x447a, 0x675b, 0x675a, 0x675d,
-  0x675c, 0x675e, 0x6760, 0x675f, 0x344f, 0x6761, 0x6762, 0x6763,
-  0x3a31, 0x4e49, 0x6765, 0x3f27, 0x3170, 0x6766, 0x6767, 0x6768,
-  0x3072, 0x6769, 0x676a, 0x4967, 0x3c47, 0x676c, 0x3329, 0x3032,
-  0x676b, 0x676e, 0x474e, 0x3f44, 0x3256, 0x4b27, 0x375d, 0x365c,
-  0x676d, 0x326a, 0x3423, 0x3171, 0x6772, 0x4e6a, 0x425d, 0x4944,
-  0x677e, 0x3257, 0x677c, 0x677a, 0x6771, 0x676f, 0x6770, 0x3c63,
-  0x366c, 0x4377, 0x4651, 0x3151, 0x6774, 0x6773, 0x6779, 0x6775,
-  0x6778, 0x4c50, 0x6777, 0x3258, 0x337d, 0x677b, 0x677d, 0x3754,
-  0x6823, 0x682c, 0x682d, 0x302b, 0x6834, 0x3071, 0x682b, 0x682a,
-  0x6825, 0x6824, 0x6822, 0x6821, 0x4363, 0x427b, 0x6827, 0x6826,
-  0x6829, 0x4170, 0x3755, 0x3141, 0x6828, 0x3953, 0x4171, 0x683a,
-  0x683b, 0x3259, 0x322e, 0x6838, 0x682e, 0x6836, 0x683d, 0x6837,
-  0x6835, 0x6776, 0x6833, 0x682f, 0x3450, 0x6831, 0x683c, 0x6832,
-  0x683e, 0x6830, 0x477c, 0x4d69, 0x6839, 0x684f, 0x6847, 0x3f7b,
-  0x3546, 0x365d, 0x6842, 0x325b, 0x3e54, 0x6845, 0x3a5a, 0x4551,
-  0x684a, 0x4a6e, 0x6841, 0x325a, 0x3856, 0x4929, 0x684b, 0x683f,
-  0x6848, 0x6852, 0x6843, 0x6844, 0x463a, 0x6849, 0x6846, 0x4b28,
-  0x684c, 0x3060, 0x6840, 0x684e, 0x684d, 0x476b, 0x6854, 0x685f,
-  0x337e, 0x6862, 0x6850, 0x6855, 0x4d6e, 0x685e, 0x4d55, 0x4e2a,
-  0x4378, 0x336b, 0x4972, 0x6864, 0x4621, 0x3031, 0x685d, 0x6859,
-  0x4172, 0x6853, 0x685b, 0x6860, 0x472c, 0x302a, 0x6858, 0x6861,
-  0x4978, 0x685c, 0x6857, 0x3e55, 0x3d2f, 0x3c2c, 0x4c58, 0x4947,
-  0x6867, 0x6870, 0x685a, 0x3377, 0x3e78, 0x6865, 0x686a, 0x4173,
-  0x6866, 0x686d, 0x435f, 0x686e, 0x4d56, 0x6863, 0x3338, 0x6869,
-  0x686c, 0x4c2c, 0x686f, 0x6868, 0x686b, 0x4b29, 0x4f21, 0x6873,
-  0x687a, 0x6872, 0x3c43, 0x6851, 0x4a4e, 0x4c22, 0x6879, 0x6878,
-  0x6874, 0x6875, 0x3136, 0x6877, 0x6871, 0x4455, 0x6876, 0x307e,
-  0x4222, 0x4a43, 0x687b, 0x6921, 0x4859, 0x687e, 0x3e56, 0x3c49,
-  0x6923, 0x363e, 0x6924, 0x4979, 0x687d, 0x6856, 0x687c, 0x4f4f,
-  0x4622, 0x4973, 0x692b, 0x6931, 0x6932, 0x6925, 0x4776, 0x692f,
-  0x6927, 0x6929, 0x6933, 0x6928, 0x692c, 0x3172, 0x4665, 0x692d,
-  0x6930, 0x6926, 0x4126, 0x692a, 0x3b27, 0x3f45, 0x3730, 0x4c74,
-  0x4c79, 0x3d72, 0x6937, 0x6935, 0x4f4e, 0x6934, 0x4d75, 0x6936,
-  0x6938, 0x6939, 0x693c, 0x693a, 0x4623, 0x693b, 0x484d, 0x692e,
-  0x3d73, 0x693d, 0x6942, 0x4174, 0x6941, 0x6922, 0x6943, 0x4149,
-  0x693e, 0x6940, 0x693f, 0x5d31, 0x5d22, 0x6945, 0x6944, 0x4d76,
-  0x623c, 0x6946, 0x6947, 0x6948, 0x3857, 0x3554, 0x694a, 0x515d,
-  0x3575, 0x4e3a, 0x3673, 0x694b, 0x694c, 0x436e, 0x694d, 0x467a,
-  0x303a, 0x3263, 0x6952, 0x6953, 0x694e, 0x3b3d, 0x694f, 0x4742,
-  0x6950, 0x6951, 0x695b, 0x6955, 0x6958, 0x6954, 0x6956, 0x6957,
-  0x3c58, 0x6959, 0x4341, 0x3756, 0x3342, 0x695c, 0x333f, 0x6961,
-  0x695d, 0x6960, 0x483a, 0x695e, 0x695f, 0x4948, 0x485a, 0x6962,
-  0x427d, 0x696c, 0x6968, 0x326b, 0x6966, 0x4b2a, 0x6967, 0x6964,
-  0x6965, 0x696a, 0x696d, 0x696b, 0x6969, 0x6963, 0x4358, 0x6974,
-  0x4c2a, 0x6972, 0x6973, 0x696e, 0x6970, 0x6971, 0x696f, 0x4066,
-  0x4f39, 0x6978, 0x6979, 0x6a21, 0x3f2a, 0x697b, 0x697e, 0x6976,
-  0x6975, 0x6a22, 0x325c, 0x697c, 0x6a23, 0x697d, 0x697a, 0x4433,
-  0x6977, 0x4768, 0x6a27, 0x4d3b, 0x6a26, 0x6a25, 0x6a2e, 0x6a28,
-  0x6a30, 0x4d66, 0x6a33, 0x6a2a, 0x6a2b, 0x6a2f, 0x6a32, 0x6a31,
-  0x6a29, 0x6a2c, 0x6a3d, 0x6a36, 0x6a34, 0x6a35, 0x6a3a, 0x6a3b,
-  0x332a, 0x3542, 0x6a39, 0x6a24, 0x6a38, 0x6a3c, 0x6a37, 0x6a3e,
-  0x6a40, 0x6a3f, 0x6a42, 0x6a41, 0x695a, 0x6a46, 0x6a43, 0x6a44,
-  0x6a45, 0x6a47, 0x376c, 0x6a49, 0x6a48, 0x3d30, 0x3954, 0x5e27,
-  0x6a4a, 0x3d51, 0x3339, 0x6a4b, 0x3152, 0x3e57, 0x6a4c, 0x3955,
-  0x6a4d, 0x3061, 0x493d, 0x6a4e, 0x3f6a, 0x6a55, 0x6a52, 0x436f,
-  0x6a53, 0x6a50, 0x365e, 0x6a4f, 0x6a56, 0x3736, 0x425e, 0x6a5c,
-  0x6a58, 0x4235, 0x6a57, 0x6a5a, 0x6a51, 0x6a5b, 0x6a5d, 0x486f,
-  0x6a59, 0x6a5e, 0x6a60, 0x3853, 0x6a54, 0x3041, 0x6a5f, 0x3a5b,
-  0x4e76, 0x6a61, 0x6a62, 0x4175, 0x4e22, 0x6a63, 0x4d35, 0x6a64,
-  0x6a65, 0x4a64, 0x6a66, 0x3a40, 0x4e23, 0x6a6b, 0x6a6c, 0x3e58,
-  0x6a6a, 0x4d67, 0x6a67, 0x6a69, 0x403d, 0x3f7e, 0x6a68, 0x6a6d,
-  0x4a23, 0x6a6f, 0x6a6e, 0x336c, 0x4b2b, 0x6a70, 0x6a7c, 0x6a72,
-  0x6a73, 0x6a74, 0x6a75, 0x6a79, 0x6a7a, 0x6a78, 0x6a76, 0x6a71,
-  0x6a77, 0x6a7b, 0x7037, 0x3228, 0x6a7e, 0x365f, 0x6a7d, 0x6b22,
-  0x6b21, 0x6b24, 0x6b23, 0x6b25, 0x3d31, 0x6b26, 0x6b27, 0x6b28,
-  0x403e, 0x4d57, 0x6b29, 0x4a24, 0x4746, 0x6b2a, 0x6b2b, 0x382b,
-  0x352c, 0x6b2c, 0x3b6b, 0x4741, 0x6b2d, 0x3350, 0x6b2e, 0x6b30,
-  0x4d77, 0x6b2f, 0x3f46, 0x6b31, 0x6b32, 0x6b33, 0x3451, 0x6b34,
-  0x6b35, 0x6b36, 0x6b37, 0x3351, 0x6b38, 0x6b39, 0x6b3a, 0x3272,
-  0x3f28, 0x6b3b, 0x6b3c, 0x6b3d, 0x3840, 0x447b, 0x6b3e, 0x3757,
-  0x3f56, 0x6b41, 0x4624, 0x6b40, 0x3731, 0x6b3f, 0x4277, 0x352d,
-  0x6b42, 0x6b43, 0x3e59, 0x376d, 0x6b44, 0x4b2c, 0x405f, 0x3576,
-  0x4c75, 0x414a, 0x6b45, 0x3f47, 0x4370, 0x3e5a, 0x6b46, 0x6b49,
-  0x6b4a, 0x3a3e, 0x4242, 0x6b48, 0x3e5b, 0x493e, 0x6b47, 0x3b6c,
-  0x3153, 0x6b4e, 0x3758, 0x3b6e, 0x3b6d, 0x4f4d, 0x6b4d, 0x6b4c,
-  0x4127, 0x354d, 0x4f43, 0x333a, 0x3e5c, 0x6b4b, 0x6b50, 0x6b51,
-  0x6b4f, 0x3858, 0x4d40, 0x3b6f, 0x4727, 0x6b54, 0x4040, 0x4342,
-  0x4d36, 0x6b57, 0x386c, 0x403f, 0x6b53, 0x6b58, 0x386d, 0x6b55,
-  0x6b56, 0x6b52, 0x4062, 0x4649, 0x432f, 0x325d, 0x4870, 0x3543,
-  0x4434, 0x6b5b, 0x6b59, 0x434c, 0x4041, 0x3452, 0x6b5a, 0x3f5b,
-  0x4e4a, 0x4f40, 0x6b5c, 0x6b67, 0x4435, 0x6b66, 0x6b63, 0x6b6b,
-  0x6b64, 0x6b60, 0x447c, 0x6b5f, 0x6b5d, 0x4d21, 0x3b70, 0x6b61,
-  0x6b5e, 0x6b65, 0x3d74, 0x3841, 0x427a, 0x4b45, 0x315a, 0x3062,
-  0x4625, 0x6b69, 0x6b68, 0x4666, 0x6b6d, 0x6b62, 0x6b6c, 0x6b6e,
-  0x382c, 0x6b6a, 0x3956, 0x3c55, 0x6b6f, 0x4d58, 0x6b72, 0x6b75,
-  0x6b73, 0x4935, 0x6b70, 0x3660, 0x6b74, 0x6b76, 0x6b7a, 0x6b77,
-  0x6b79, 0x6b78, 0x6b7b, 0x3c31, 0x6b7d, 0x6b7c, 0x4968, 0x6c21,
-  0x3759, 0x6b7e, 0x6c22, 0x6c23, 0x3544, 0x6641, 0x3e79, 0x6c24,
-  0x386e, 0x6c25, 0x6c26, 0x3b3e, 0x5a4e, 0x6c27, 0x6c28, 0x3d32,
-  0x6c29, 0x6c2a, 0x6c2b, 0x6c2c, 0x6c2d, 0x432b, 0x6c2e, 0x6c30,
-  0x6c2f, 0x4626, 0x6c31, 0x4b2d, 0x6c32, 0x6c33, 0x6c34, 0x6c35,
-  0x465a, 0x3e5d, 0x6c36, 0x396b, 0x502e, 0x6c37, 0x6c38, 0x493f,
-  0x6c39, 0x6c41, 0x6c3a, 0x6c3c, 0x6c3b, 0x6c3d, 0x4b46, 0x6c3e,
-  0x6c3f, 0x6c40, 0x6c42, 0x332d, 0x4467, 0x4969, 0x3a62, 0x3957,
-  0x494f, 0x325f, 0x484e, 0x6c45, 0x3453, 0x4055, 0x6c44, 0x6c49,
-  0x4379, 0x4c63, 0x6c47, 0x6c48, 0x352e, 0x6c4a, 0x4763, 0x425f,
-  0x4871, 0x453d, 0x6c46, 0x4b47, 0x326c, 0x6c4c, 0x4f28, 0x4442,
-  0x4f45, 0x3b71, 0x6c4b, 0x4231, 0x6c5c, 0x4128, 0x4678, 0x4950,
-  0x6c4f, 0x3b3f, 0x3b72, 0x3e5e, 0x4765, 0x382d, 0x6c4e, 0x6c4d,
-  0x496a, 0x3c41, 0x4552, 0x6c51, 0x6c52, 0x3958, 0x6c50, 0x6c53,
-  0x6c54, 0x6c56, 0x4223, 0x6c55, 0x3466, 0x6c58, 0x6c57, 0x6c59,
-  0x6c5b, 0x6c5d, 0x6c5e, 0x4056, 0x3c4f, 0x6c5f, 0x3352, 0x6c60,
-  0x4176, 0x6c61, 0x6c62, 0x496b, 0x352f, 0x6c63, 0x4436, 0x315b,
-  0x6c64, 0x3c71, 0x3f76, 0x422d, 0x6c67, 0x6c66, 0x6c65, 0x6c6d,
-  0x6c6b, 0x6c68, 0x6c6a, 0x6c69, 0x6c6c, 0x3577, 0x6c70, 0x4057,
-  0x6c71, 0x3859, 0x6c6e, 0x6c6f, 0x4f29, 0x4437, 0x4129, 0x6c72,
-  0x6c75, 0x6c73, 0x6c74, 0x4d59, 0x4627, 0x6c78, 0x6c76, 0x6c77,
-  0x6c79, 0x6d29, 0x6c7c, 0x6c7d, 0x6c7b, 0x6c7a, 0x447d, 0x6d21,
-  0x6d25, 0x6d22, 0x6c7e, 0x6d23, 0x6d24, 0x6d2b, 0x6d26, 0x4058,
-  0x6d28, 0x6d2a, 0x6d27, 0x6d2d, 0x3d33, 0x6d2c, 0x6d2e, 0x6d2f,
-  0x6d32, 0x6d31, 0x6d30, 0x6d34, 0x6d33, 0x4c76, 0x6d36, 0x6d35,
-  0x6d37, 0x6d38, 0x6d3a, 0x6d39, 0x3f48, 0x6d3b, 0x366d, 0x6d3c,
-  0x6d3e, 0x6d3f, 0x6d40, 0x6d3d, 0x6d41, 0x3c56, 0x6d42, 0x3530,
-  0x3733, 0x382e, 0x6d43, 0x4670, 0x453e, 0x6d44, 0x6d47, 0x3c34,
-  0x6d46, 0x6d45, 0x375a, 0x6d48, 0x3353, 0x6d4a, 0x3a5c, 0x6d49,
-  0x6d52, 0x6d4c, 0x6d4e, 0x4a65, 0x6d4b, 0x6d4d, 0x6d51, 0x6d4f,
-  0x3531, 0x6d50, 0x6d53, 0x475a, 0x4e58, 0x3d34, 0x6d54, 0x4d22,
-  0x6d56, 0x6d55, 0x6d59, 0x4d41, 0x6d58, 0x336d, 0x6d57, 0x6d5c,
-  0x6d5b, 0x6d5a, 0x4532, 0x6d5d, 0x6d5e, 0x6d5f, 0x396c, 0x3725,
-  0x6d60, 0x6d61, 0x6d62, 0x3f49, 0x6d63, 0x3c2d, 0x6d64, 0x6d65,
-  0x5221, 0x517e, 0x6d66, 0x6570, 0x6d67, 0x4324, 0x3f2b, 0x4740,
-  0x6d68, 0x4a55, 0x4454, 0x397e, 0x4329, 0x312a, 0x4b78, 0x3f57,
-  0x375e, 0x3661, 0x4a56, 0x6d69, 0x6d6b, 0x6d6a, 0x3260, 0x4676,
-  0x6d6c, 0x4777, 0x4533, 0x6d6d, 0x3d52, 0x6d6f, 0x4c42, 0x6d7e,
-  0x6d71, 0x6d72, 0x4449, 0x4260, 0x4177, 0x4628, 0x6d70, 0x3555,
-  0x6d79, 0x6d76, 0x6e25, 0x4629, 0x4360, 0x6d73, 0x447e, 0x4553,
-  0x6d74, 0x6d78, 0x3f60, 0x4767, 0x444c, 0x4042, 0x6d77, 0x422e,
-  0x4224, 0x6d75, 0x3029, 0x4f22, 0x6d7a, 0x4261, 0x3d35, 0x3f4a,
-  0x6d7c, 0x6d7b, 0x306f, 0x6d7d, 0x492f, 0x6e27, 0x465b, 0x3f6b,
-  0x4359, 0x3678, 0x6e26, 0x4d37, 0x313f, 0x4a57, 0x3261, 0x6e21,
-  0x6e22, 0x6e23, 0x6e24, 0x463b, 0x4323, 0x3063, 0x6e28, 0x6e29,
-  0x7423, 0x423d, 0x6e2a, 0x3173, 0x414c, 0x382f, 0x4d5a, 0x6e2b,
-  0x452c, 0x4178, 0x3c57, 0x6e2c, 0x6e2f, 0x3d65, 0x6e2d, 0x412b,
-  0x412a, 0x3064, 0x4e4b, 0x6e31, 0x4872, 0x6e33, 0x6e32, 0x6e30,
-  0x6364, 0x3454, 0x6d6e, 0x6e35, 0x6e34, 0x6e36, 0x4d38, 0x4661,
-  0x4b2e, 0x6e37, 0x3c59, 0x6e38, 0x6e39, 0x6e3a, 0x4521, 0x306a,
-  0x3959, 0x4f3a, 0x6e3e, 0x3734, 0x6e3b, 0x6e3c, 0x4974, 0x3354,
-  0x4d39, 0x363f, 0x4554, 0x6e3f, 0x6e40, 0x6e41, 0x4522, 0x6e43,
-  0x6e42, 0x4653, 0x6e44, 0x3d36, 0x3c60, 0x475b, 0x4371, 0x3c72,
-  0x3f6c, 0x6e45, 0x6e46, 0x3f5d, 0x6e47, 0x6e48, 0x6e49, 0x4d6f,
-  0x3d37, 0x6e4b, 0x6e4a, 0x395a, 0x3973, 0x3b40, 0x6e4e, 0x3d66,
-  0x6e4d, 0x6e4c, 0x4269, 0x386f, 0x4043, 0x4830, 0x3d39, 0x6e4f,
-  0x3e5f, 0x6e52, 0x6e50, 0x6e51, 0x6e54, 0x6e53, 0x3e7a, 0x6e55,
-  0x6e56, 0x6e57, 0x4850, 0x3a53, 0x3c61, 0x6e58, 0x6e59, 0x4e24,
-  0x3d45, 0x4c6e, 0x4e4c, 0x6e5a, 0x3662, 0x6e5b, 0x4523, 0x6e5e,
-  0x3378, 0x3f4b, 0x6e5c, 0x6e5d, 0x4460, 0x4b55, 0x367c, 0x6e60,
-  0x6e61, 0x6e5f, 0x6e63, 0x465f, 0x3343, 0x6e67, 0x6e64, 0x6e66,
-  0x6e62, 0x6f4f, 0x6e65, 0x4e6b, 0x385a, 0x6e6f, 0x4534, 0x6e6a,
-  0x6e6d, 0x6e6b, 0x6e70, 0x6e71, 0x6e69, 0x6e76, 0x3174, 0x6e68,
-  0x482d, 0x6e6c, 0x3e60, 0x395b, 0x4b48, 0x3664, 0x3d46, 0x463c,
-  0x412d, 0x6e74, 0x6e6e, 0x6e73, 0x4c43, 0x4438, 0x6e75, 0x6e72,
-  0x412c, 0x6e79, 0x6e78, 0x6e77, 0x4b2f, 0x3d7b, 0x6e7a, 0x4a5f,
-  0x3154, 0x4946, 0x4372, 0x3578, 0x6e7c, 0x395d, 0x3b2c, 0x6e7b,
-  0x3f6d, 0x3f6e, 0x6f21, 0x6f23, 0x3e7b, 0x6f22, 0x6f24, 0x3653,
-  0x4945, 0x3c62, 0x4f23, 0x6e7e, 0x3a78, 0x4f3f, 0x6f26, 0x6f25,
-  0x6f27, 0x6e7d, 0x4669, 0x4555, 0x4457, 0x6f2c, 0x4343, 0x6f28,
-  0x6f29, 0x372d, 0x6f2b, 0x3830, 0x6f2a, 0x3e61, 0x3379, 0x6f30,
-  0x3a3f, 0x4179, 0x444a, 0x333b, 0x6f2e, 0x6f2f, 0x4443, 0x6f2d,
-  0x6f31, 0x6f37, 0x6f3a, 0x6f39, 0x452d, 0x6f32, 0x6f33, 0x6f36,
-  0x6f38, 0x3640, 0x6f3b, 0x6f35, 0x6f34, 0x6f3f, 0x6f40, 0x6f41,
-  0x6f3e, 0x6f3d, 0x3e62, 0x462a, 0x6f3c, 0x6f45, 0x6f43, 0x6f44,
-  0x6f42, 0x4278, 0x6f46, 0x6f47, 0x6f49, 0x3455, 0x6f48, 0x4c7a,
-  0x6f54, 0x6f4a, 0x6f4d, 0x6f4b, 0x6f4c, 0x6f4e, 0x6f50, 0x6f51,
-  0x6f52, 0x6f55, 0x6f53, 0x6f56, 0x6f58, 0x6f57, 0x4439, 0x4c67,
-  0x6f59, 0x412e, 0x6f5a, 0x4a44, 0x6f5b, 0x332b, 0x313c, 0x3457,
-  0x3456, 0x6f5c, 0x6f5d, 0x6f5e, 0x6f5f, 0x6f60, 0x3458, 0x3355,
-  0x395e, 0x4836, 0x6f62, 0x6f61, 0x6f63, 0x315c, 0x6f66, 0x6f65,
-  0x6f64, 0x6f67, 0x6f6a, 0x3047, 0x6f68, 0x6f6c, 0x6f6b, 0x6f6e,
-  0x6f6d, 0x6f6f, 0x462e, 0x6f70, 0x6f71, 0x6f73, 0x6f72, 0x496c,
-  0x6f74, 0x6f75, 0x3a65, 0x6f76, 0x6f77, 0x4b49, 0x414b, 0x3024,
-  0x424b, 0x6f78, 0x496d, 0x6f7b, 0x6f79, 0x395f, 0x6f7a, 0x3842,
-  0x4a45, 0x6f7d, 0x7021, 0x6f7e, 0x7022, 0x3121, 0x3f58, 0x3d7c,
-  0x3459, 0x7023, 0x4766, 0x7025, 0x3122, 0x7024, 0x4444, 0x4e4d,
-  0x462b, 0x6f7c, 0x4e26, 0x3831, 0x4d5b, 0x3679, 0x4e34, 0x3728,
-  0x4262, 0x6721, 0x7026, 0x332c, 0x3f6f, 0x3356, 0x7028, 0x7029,
-  0x7027, 0x3764, 0x3a5d, 0x3e63, 0x3123, 0x4e59, 0x702b, 0x6e2e,
-  0x702a, 0x702e, 0x702c, 0x702d, 0x702f, 0x7030, 0x4e6c, 0x7031,
-  0x7032, 0x4049, 0x483b, 0x3f7d, 0x3467, 0x4d3a, 0x326d, 0x3d38,
-  0x385b, 0x7035, 0x7034, 0x3b73, 0x7036, 0x7033, 0x3b28, 0x703a,
-  0x6a2d, 0x5256, 0x3f77, 0x7038, 0x4e25, 0x4671, 0x312b, 0x4063,
-  0x3c36, 0x4a37, 0x3140, 0x4e6d, 0x4d6b, 0x703b, 0x4545, 0x3c7b,
-  0x703c, 0x703d, 0x3f4c, 0x703e, 0x4e6e, 0x7039, 0x7040, 0x7042,
-  0x7041, 0x703f, 0x7043, 0x7044, 0x417a, 0x3262, 0x7045, 0x4c38,
-  0x7046, 0x7047, 0x4f2a, 0x5b31, 0x7048, 0x7049, 0x704a, 0x704e,
-  0x704b, 0x704c, 0x704d, 0x704f, 0x4044, 0x4c77, 0x4045, 0x7050,
-  0x4873, 0x7051, 0x7353, 0x4c4c, 0x7052, 0x7053, 0x7054, 0x3357,
-  0x7056, 0x3f59, 0x7057, 0x3724, 0x7058, 0x705c, 0x705a, 0x705b,
-  0x3373, 0x7059, 0x705d, 0x705e, 0x3048, 0x705f, 0x7060, 0x3e64,
-  0x7061, 0x3547, 0x7064, 0x7063, 0x7062, 0x6b71, 0x4a5c, 0x7065,
-  0x7066, 0x7067, 0x7068, 0x7069, 0x706a, 0x345a, 0x706b, 0x706c,
-  0x4723, 0x706e, 0x323b, 0x7071, 0x7070, 0x3124, 0x3641, 0x4a47,
-  0x443a, 0x3a22, 0x3960, 0x3d67, 0x3f5c, 0x7073, 0x7072, 0x4d42,
-  0x3468, 0x4852, 0x465c, 0x3f7c, 0x4e4e, 0x375b, 0x7076, 0x7075,
-  0x4b4b, 0x462c, 0x3150, 0x7077, 0x7074, 0x4951, 0x4d6a, 0x7078,
-  0x7079, 0x707b, 0x426a, 0x335b, 0x335c, 0x707a, 0x3469, 0x3832,
-  0x346a, 0x453f, 0x4e60, 0x385c, 0x707c, 0x707d, 0x707e, 0x7121,
-  0x7123, 0x7122, 0x4977, 0x7124, 0x7125, 0x7126, 0x7127, 0x7129,
-  0x7128, 0x712a, 0x4874, 0x664c, 0x3f29, 0x3532, 0x712b, 0x712c,
-  0x522c, 0x5d3b, 0x4853, 0x307b, 0x303b, 0x3b74, 0x4b30, 0x3e7e,
-  0x712d, 0x4c5f, 0x712e, 0x4d5c, 0x3142, 0x3b41, 0x712f, 0x326e,
-  0x7130, 0x7131, 0x7133, 0x7134, 0x7136, 0x7132, 0x7135, 0x345b,
-  0x7137, 0x7138, 0x7139, 0x713a, 0x713b, 0x713d, 0x713c, 0x713f,
-  0x7142, 0x713e, 0x7140, 0x7141, 0x7143, 0x3642, 0x3c73, 0x7144,
-  0x7145, 0x3961, 0x7146, 0x333e, 0x474f, 0x7147, 0x7148, 0x435a,
-  0x466b, 0x7149, 0x477d, 0x424c, 0x3158, 0x366e, 0x366f, 0x4373,
-  0x714e, 0x3670, 0x326f, 0x714d, 0x714b, 0x714c, 0x714a, 0x7158,
-  0x714f, 0x7150, 0x7151, 0x7152, 0x7154, 0x7153, 0x3d59, 0x7155,
-  0x7157, 0x3533, 0x7156, 0x417b, 0x3833, 0x7159, 0x424d, 0x715a,
-  0x462d, 0x715b, 0x7160, 0x715e, 0x715d, 0x715f, 0x715c, 0x7162,
-  0x7161, 0x7164, 0x3643, 0x7163, 0x7165, 0x7166, 0x7168, 0x7167,
-  0x7169, 0x716b, 0x716a, 0x397c, 0x716c, 0x716d, 0x333c, 0x716e,
-  0x716f, 0x3f71, 0x7170, 0x7171, 0x7172, 0x7173, 0x3962, 0x7174,
-  0x7175, 0x7176, 0x7177, 0x7178, 0x4831, 0x717a, 0x4926, 0x717b,
-  0x7179, 0x717d, 0x717c, 0x717e, 0x7221, 0x7222, 0x7223, 0x7224,
-  0x7225, 0x7226, 0x7227, 0x7228, 0x7229, 0x722a, 0x722b, 0x722c,
-  0x722d, 0x722e, 0x5d35, 0x722f, 0x6478, 0x3534, 0x3321, 0x3a32,
-  0x7231, 0x7230, 0x4c25, 0x7233, 0x7234, 0x7232, 0x7235, 0x4b62,
-  0x7236, 0x357b, 0x4f25, 0x7237, 0x7239, 0x303e, 0x723a, 0x4a2b,
-  0x7238, 0x723b, 0x723c, 0x723d, 0x723e, 0x723f, 0x4b6e, 0x3b2d,
-  0x3a7a, 0x412f, 0x7240, 0x7243, 0x7241, 0x7244, 0x3871, 0x7242,
-  0x7245, 0x7246, 0x7247, 0x724b, 0x3b2a, 0x4264, 0x724c, 0x7249,
-  0x7248, 0x724a, 0x375f, 0x7250, 0x724f, 0x724e, 0x3033, 0x725a,
-  0x7256, 0x7257, 0x7253, 0x7259, 0x7255, 0x3362, 0x4f4c, 0x7258,
-  0x7254, 0x7252, 0x7251, 0x725c, 0x725f, 0x725e, 0x725d, 0x4949,
-  0x725b, 0x3073, 0x7260, 0x7262, 0x336f, 0x724d, 0x3137, 0x7264,
-  0x7263, 0x7261, 0x432d, 0x4b70, 0x4e5a, 0x7265, 0x7266, 0x7267,
-  0x7268, 0x7269, 0x443b, 0x726a, 0x4837, 0x726f, 0x726b, 0x726c,
-  0x4b31, 0x4c44, 0x4650, 0x7270, 0x7271, 0x463e, 0x726e, 0x726d,
-  0x322a, 0x7279, 0x7278, 0x3175, 0x7276, 0x7275, 0x7273, 0x337b,
-  0x7272, 0x3c32, 0x3229, 0x3963, 0x727c, 0x727b, 0x727a, 0x7277,
-  0x727d, 0x727e, 0x7325, 0x7324, 0x7326, 0x312d, 0x7321, 0x7322,
-  0x3974, 0x4c39, 0x7323, 0x4b32, 0x732b, 0x7327, 0x732c, 0x7329,
-  0x7328, 0x375c, 0x732d, 0x732e, 0x732f, 0x732a, 0x7274, 0x7330,
-  0x4461, 0x7334, 0x7335, 0x7333, 0x7332, 0x7338, 0x7331, 0x7336,
-  0x7337, 0x733a, 0x7339, 0x733c, 0x733d, 0x733e, 0x4f49, 0x733b,
-  0x426b, 0x3a6d, 0x733f, 0x7340, 0x7341, 0x7342, 0x7343, 0x3834,
-  0x7344, 0x7345, 0x3c2f, 0x7346, 0x7347, 0x7348, 0x7349, 0x734c,
-  0x734a, 0x4f3c, 0x734b, 0x4e6f, 0x734d, 0x4e5b, 0x734e, 0x477e,
-  0x734f, 0x7351, 0x7352, 0x7350, 0x396d, 0x4c4d, 0x4b63, 0x5677,
-  0x5d60, 0x4b7b, 0x322b, 0x7354, 0x3550, 0x7355, 0x7356, 0x7357,
-  0x3975, 0x7358, 0x6054, 0x4c5b, 0x4263, 0x7359, 0x735b, 0x735a,
-  0x735c, 0x735d, 0x735e, 0x735f, 0x7360, 0x7361, 0x7362, 0x7363,
-  0x7364, 0x7365, 0x7366, 0x7367, 0x7368, 0x4524, 0x385d, 0x736a,
-  0x414d, 0x736b, 0x736c, 0x4921, 0x736d, 0x736e, 0x6337, 0x6c5a,
-  0x706d, 0x736f, 0x7370, 0x7372, 0x7373, 0x7374, 0x4e70, 0x7371,
-  0x7375, 0x7376, 0x7378, 0x7377, 0x737a, 0x737b, 0x7379, 0x4e36,
-  0x737c, 0x737d, 0x6354, 0x737e, 0x212a, 0x2174, 0x2170, 0x2173,
-  0x2175, 0x214a, 0x214b, 0x2176, 0x215c, 0x2124, 0x2125, 0x213f,
-  0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337,
-  0x2338, 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, 0x2129,
-  0x2177, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347,
-  0x2348, 0x2349, 0x234a, 0x234b, 0x234c, 0x234d, 0x234e, 0x234f,
-  0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357,
-  0x2358, 0x2359, 0x235a, 0x214e, 0x214f, 0x2130, 0x2132, 0x212e,
-  0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, 0x2368,
-  0x2369, 0x236a, 0x236b, 0x236c, 0x236d, 0x236e, 0x236f, 0x2370,
-  0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, 0x2378,
-  0x2379, 0x237a, 0x2150, 0x2143, 0x2151, 0x2131, 0x216f,
-};
-
-static const Summary16 jisx0208_uni2indx_page00[16] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x1000 }, {    1, 0x0000 }, {    1, 0x0000 },
-  {    1, 0x0000 }, {    1, 0x0000 }, {    1, 0x118c }, {    6, 0x0053 },
-  {   10, 0x0000 }, {   10, 0x0080 }, {   11, 0x0000 }, {   11, 0x0080 },
-};
-static const Summary16 jisx0208_uni2indx_page03[22] = {
-  /* 0x0300 */
-  {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 },
-  {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 },
-  {   12, 0x0000 }, {   12, 0xfffe }, {   27, 0x03fb }, {   36, 0xfffe },
-  {   51, 0x03fb }, {   60, 0x0000 }, {   60, 0x0000 }, {   60, 0x0000 },
-  /* 0x0400 */
-  {   60, 0x0002 }, {   61, 0xffff }, {   77, 0xffff }, {   93, 0xffff },
-  {  109, 0xffff }, {  125, 0x0002 },
-};
-static const Summary16 jisx0208_uni2indx_page20[50] = {
-  /* 0x2000 */
-  {  126, 0x0000 }, {  126, 0x3361 }, {  133, 0x0063 }, {  137, 0x080d },
-  {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 },
-  {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 },
-  {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 },
-  /* 0x2100 */
-  {  141, 0x0008 }, {  142, 0x0000 }, {  142, 0x0800 }, {  143, 0x0000 },
-  {  143, 0x0000 }, {  143, 0x0000 }, {  143, 0x0000 }, {  143, 0x0000 },
-  {  143, 0x0000 }, {  143, 0x000f }, {  147, 0x0000 }, {  147, 0x0000 },
-  {  147, 0x0000 }, {  147, 0x0014 }, {  149, 0x0000 }, {  149, 0x0000 },
-  /* 0x2200 */
-  {  149, 0x098d }, {  155, 0x6404 }, {  159, 0x1f81 }, {  166, 0x2030 },
-  {  169, 0x0000 }, {  169, 0x0004 }, {  170, 0x0cc3 }, {  176, 0x0000 },
-  {  176, 0x00cc }, {  180, 0x0000 }, {  180, 0x0020 }, {  181, 0x0000 },
-  {  181, 0x0000 }, {  181, 0x0000 }, {  181, 0x0000 }, {  181, 0x0000 },
-  /* 0x2300 */
-  {  181, 0x0000 }, {  181, 0x0004 },
-};
-static const Summary16 jisx0208_uni2indx_page25[23] = {
-  /* 0x2500 */
-  {  182, 0x900f }, {  188, 0x3999 }, {  196, 0x9939 }, {  204, 0x9999 },
-  {  212, 0x0804 }, {  214, 0x0000 }, {  214, 0x0000 }, {  214, 0x0000 },
-  {  214, 0x0000 }, {  214, 0x0000 }, {  214, 0x0003 }, {  216, 0x300c },
-  {  220, 0xc8c0 }, {  225, 0x0000 }, {  225, 0x8000 }, {  226, 0x0000 },
-  /* 0x2600 */
-  {  226, 0x0060 }, {  228, 0x0000 }, {  228, 0x0000 }, {  228, 0x0000 },
-  {  228, 0x0005 }, {  230, 0x0000 }, {  230, 0xa400 },
-};
-static const Summary16 jisx0208_uni2indx_page30[16] = {
-  /* 0x3000 */
-  {  233, 0xffef }, {  248, 0x103f }, {  255, 0x0000 }, {  255, 0x0000 },
-  {  255, 0xfffe }, {  270, 0xffff }, {  286, 0xffff }, {  302, 0xffff },
-  {  318, 0xffff }, {  334, 0x780f }, {  342, 0xfffe }, {  357, 0xffff },
-  {  373, 0xffff }, {  389, 0xffff }, {  405, 0xffff }, {  421, 0x787f },
-};
-static const Summary16 jisx0208_uni2indx_page4e[1307] = {
-  /* 0x4e00 */
-  {  432, 0x6f8b }, {  442, 0x43f3 }, {  451, 0x2442 }, {  455, 0x9b46 },
-  {  463, 0xe82c }, {  470, 0xe3e0 }, {  478, 0x0004 }, {  479, 0x400a },
-  {  482, 0x5f65 }, {  492, 0xdb36 }, {  502, 0x7977 }, {  513, 0x0449 },
-  {  517, 0xecd7 }, {  528, 0xe3f0 }, {  537, 0x6038 }, {  542, 0x08c5 },
-  /* 0x4f00 */
-  {  547, 0xe602 }, {  553, 0x3403 }, {  558, 0x8000 }, {  559, 0x3551 },
-  {  566, 0xe0c8 }, {  572, 0x7eab }, {  583, 0x8200 }, {  585, 0x9869 },
-  {  592, 0xa948 }, {  598, 0x2942 }, {  603, 0xe803 }, {  609, 0x8060 },
-  {  612, 0x441c }, {  617, 0xad93 }, {  626, 0xc03a }, {  632, 0x4568 },
-  /* 0x5000 */
-  {  638, 0xaa60 }, {  644, 0x8656 }, {  651, 0x3f7a }, {  662, 0x0240 },
-  {  664, 0x8388 }, {  669, 0x1461 }, {  674, 0x1020 }, {  676, 0x2174 },
-  {  682, 0x2021 }, {  685, 0x0702 }, {  689, 0x3000 }, {  691, 0x40bc },
-  {  697, 0xa624 }, {  703, 0x4462 }, {  708, 0x60a8 }, {  713, 0x0a20 },
-  /* 0x5100 */
-  {  716, 0x0217 }, {  721, 0x8574 }, {  728, 0x0402 }, {  730, 0x9c84 },
-  {  736, 0x7bfb }, {  749, 0x1415 }, {  754, 0x7f24 }, {  763, 0x11e2 },
-  {  769, 0xb665 }, {  778, 0x02ef }, {  786, 0x1f75 }, {  796, 0x20ff },
-  {  805, 0x3a70 }, {  812, 0x3840 }, {  816, 0x26c3 }, {  823, 0x6763 },
-  /* 0x5200 */
-  {  832, 0x4dd9 }, {  841, 0x2092 }, {  845, 0x46b0 }, {  851, 0x0fc9 },
-  {  859, 0xbc98 }, {  867, 0x4850 }, {  871, 0x8638 }, {  877, 0xa03f },
-  {  885, 0x2388 }, {  890, 0x8816 }, {  895, 0x3e09 }, {  902, 0x5232 },
-  {  908, 0x22aa }, {  914, 0xe3a4 }, {  922, 0x00dd }, {  928, 0xc72c },
-  /* 0x5300 */
-  {  936, 0xa166 }, {  943, 0x26e1 }, {  950, 0x840b }, {  955, 0x8f0a },
-  {  962, 0x27eb }, {  972, 0x559e }, {  981, 0xc241 }, {  986, 0x89bb },
-  {  995, 0x0014 }, {  997, 0x8540 }, { 1001, 0x6361 }, { 1008, 0x0849 },
-  { 1012, 0x7f0c }, { 1021, 0x8ad0 }, { 1027, 0xff3e }, { 1040, 0x05cf },
-  /* 0x5400 */
-  { 1048, 0xff1a }, { 1059, 0xa803 }, { 1064, 0x7a41 }, { 1071, 0x7b40 },
-  { 1078, 0x4745 }, { 1085, 0x8002 }, { 1087, 0x0500 }, { 1089, 0x38eb },
-  { 1098, 0xd851 }, { 1105, 0x0005 }, { 1107, 0x9934 }, { 1114, 0x710c },
-  { 1120, 0x0397 }, { 1127, 0x0100 }, { 1128, 0x6366 }, { 1136, 0x2404 },
-  /* 0x5500 */
-  { 1139, 0x80d0 }, { 1143, 0x0051 }, { 1146, 0xc000 }, { 1148, 0x430a },
-  { 1153, 0x9071 }, { 1159, 0x30c8 }, { 1164, 0x0008 }, { 1165, 0x5800 },
-  { 1168, 0x0e99 }, { 1175, 0xf700 }, { 1182, 0x5f80 }, { 1189, 0x0041 },
-  { 1191, 0x00b0 }, { 1194, 0x9410 }, { 1198, 0x0018 }, { 1200, 0x6280 },
-  /* 0x5600 */
-  { 1204, 0x0240 }, { 1206, 0x09d0 }, { 1211, 0x8200 }, { 1213, 0x0156 },
-  { 1218, 0x5004 }, { 1221, 0x0801 }, { 1223, 0x1d10 }, { 1228, 0x0510 },
-  { 1231, 0x84c1 }, { 1236, 0x0010 }, { 1237, 0x4025 }, { 1241, 0x1050 },
-  { 1244, 0x410f }, { 1250, 0x4d8a }, { 1257, 0x4009 }, { 1260, 0xa60d },
-  /* 0x5700 */
-  { 1267, 0xab19 }, { 1275, 0x914c }, { 1281, 0x21c0 }, { 1285, 0x0981 },
-  { 1289, 0xc485 }, { 1295, 0x0003 }, { 1297, 0x0652 }, { 1302, 0x8000 },
-  { 1303, 0x0b04 }, { 1307, 0x0008 }, { 1308, 0x041d }, { 1313, 0x0009 },
-  { 1315, 0x4849 }, { 1320, 0x905c }, { 1326, 0x0009 }, { 1328, 0x1690 },
-  /* 0x5800 */
-  { 1333, 0x0c65 }, { 1339, 0x2220 }, { 1342, 0x8412 }, { 1346, 0x2433 },
-  { 1352, 0x0c03 }, { 1356, 0x4796 }, { 1364, 0x0a04 }, { 1367, 0x4225 },
-  { 1372, 0x0028 }, { 1374, 0x9088 }, { 1378, 0x4900 }, { 1381, 0x4f08 },
-  { 1387, 0x14a2 }, { 1392, 0xd3aa }, { 1401, 0xd830 }, { 1407, 0x3e87 },
-  /* 0x5900 */
-  { 1416, 0x8604 }, { 1420, 0x1f61 }, { 1428, 0x7ea4 }, { 1437, 0x4186 },
-  { 1442, 0xc390 }, { 1448, 0x05b3 }, { 1455, 0x57a5 }, { 1464, 0x2118 },
-  { 1468, 0x241e }, { 1474, 0x2a48 }, { 1479, 0x1128 }, { 1483, 0x4a04 },
-  { 1487, 0x0a40 }, { 1490, 0x161b }, { 1497, 0x0d60 }, { 1502, 0x8840 },
-  /* 0x5a00 */
-  { 1505, 0x020a }, { 1508, 0x9502 }, { 1513, 0x8221 }, { 1517, 0x1060 },
-  { 1520, 0x0243 }, { 1524, 0x0400 }, { 1525, 0x1444 }, { 1529, 0x8000 },
-  { 1530, 0x0000 }, { 1530, 0x0c04 }, { 1533, 0x0000 }, { 1533, 0x7000 },
-  { 1536, 0x1a06 }, { 1541, 0x00c1 }, { 1544, 0x024a }, { 1548, 0x0c00 },
-  /* 0x5b00 */
-  { 1550, 0x1a00 }, { 1553, 0x0040 }, { 1554, 0x1404 }, { 1557, 0x4045 },
-  { 1561, 0x0029 }, { 1564, 0xbdb3 }, { 1575, 0x0a78 }, { 1581, 0x052b },
-  { 1587, 0xbba9 }, { 1597, 0xbfa0 }, { 1606, 0x407c }, { 1612, 0x8379 },
-  { 1620, 0x12fc }, { 1628, 0xe81d }, { 1636, 0x4bf6 }, { 1646, 0xc569 },
-  /* 0x5c00 */
-  { 1654, 0xeff6 }, { 1667, 0x044a }, { 1671, 0x2115 }, { 1676, 0xff02 },
-  { 1685, 0xed63 }, { 1695, 0x402b }, { 1700, 0xd033 }, { 1707, 0x0242 },
-  { 1710, 0x1000 }, { 1711, 0x0013 }, { 1714, 0x1b02 }, { 1719, 0x59ca },
-  { 1727, 0x00a0 }, { 1729, 0x0200 }, { 1730, 0xa703 }, { 1737, 0x2c41 },
-  /* 0x5d00 */
-  { 1742, 0x4880 }, { 1745, 0x8ff2 }, { 1755, 0x0204 }, { 1757, 0x0000 },
-  { 1757, 0x5800 }, { 1760, 0x1005 }, { 1763, 0x9200 }, { 1766, 0x0048 },
-  { 1768, 0x1894 }, { 1773, 0x2001 }, { 1775, 0x5004 }, { 1778, 0x3480 },
-  { 1782, 0x3200 }, { 1785, 0x684c }, { 1791, 0x49ea }, { 1799, 0x68be },
-  /* 0x5e00 */
-  { 1808, 0x184c }, { 1813, 0x2e42 }, { 1819, 0xa820 }, { 1823, 0x21c9 },
-  { 1829, 0x50b9 }, { 1836, 0x80b0 }, { 1840, 0x001e }, { 1844, 0xff7c },
-  { 1857, 0x849a }, { 1863, 0x14e0 }, { 1868, 0x28c1 }, { 1873, 0x01e0 },
-  { 1877, 0x870e }, { 1884, 0xac49 }, { 1891, 0x130f }, { 1898, 0xdddb },
-  /* 0x5f00 */
-  { 1910, 0xbe1a }, { 1919, 0x89fb }, { 1929, 0xa2e0 }, { 1935, 0x51a2 },
-  { 1941, 0x5502 }, { 1946, 0x32ca }, { 1953, 0x3e46 }, { 1961, 0x928b },
-  { 1968, 0x1dbf }, { 1979, 0x438f }, { 1987, 0x6703 }, { 1994, 0x3218 },
-  { 1999, 0x3028 }, { 2003, 0x33c0 }, { 2009, 0x0811 }, { 2012, 0xa923 },
-  /* 0x6000 */
-  { 2019, 0xc000 }, { 2021, 0x3a65 }, { 2029, 0x8fe3 }, { 2039, 0x0402 },
-  { 2041, 0x2c4e }, { 2048, 0x8625 }, { 2054, 0xbf3d }, { 2066, 0x00a1 },
-  { 2069, 0x3a1a }, { 2076, 0x8cd4 }, { 2083, 0x06c9 }, { 2089, 0x317c },
-  { 2097, 0x00e0 }, { 2100, 0x950a }, { 2106, 0x018b }, { 2111, 0x0edb },
-  /* 0x6100 */
-  { 2120, 0xe34b }, { 2129, 0x8c20 }, { 2133, 0x1182 }, { 2137, 0xf010 },
-  { 2142, 0x7d94 }, { 2151, 0xa728 }, { 2158, 0xc9ac }, { 2166, 0x40fb },
-  { 2174, 0x4484 }, { 2178, 0x0653 }, { 2184, 0x5a90 }, { 2190, 0x4444 },
-  { 2194, 0x3fc8 }, { 2203, 0x0001 }, { 2204, 0x0048 }, { 2206, 0xf5d4 },
-  /* 0x6200 */
-  { 2216, 0x7701 }, { 2223, 0xec57 }, { 2233, 0xc442 }, { 2238, 0x891d },
-  { 2245, 0x6b83 }, { 2253, 0x4928 }, { 2258, 0x4109 }, { 2262, 0xd242 },
-  { 2268, 0x061d }, { 2274, 0x59fe }, { 2285, 0x1800 }, { 2287, 0x3a22 },
-  { 2293, 0xb7e4 }, { 2303, 0x3b9f }, { 2314, 0xf003 }, { 2320, 0xc0ea },
-  /* 0x6300 */
-  { 2327, 0x1386 }, { 2333, 0x8202 }, { 2336, 0x8980 }, { 2340, 0xe400 },
-  { 2344, 0xb200 }, { 2348, 0x10a1 }, { 2352, 0x4b80 }, { 2357, 0x0cc4 },
-  { 2362, 0xd309 }, { 2369, 0x8944 }, { 2374, 0x1faf }, { 2385, 0x4834 },
-  { 2390, 0x8259 }, { 2396, 0x0c45 }, { 2401, 0x420a }, { 2405, 0x0450 },
-  /* 0x6400 */
-  { 2408, 0xa040 }, { 2411, 0x10c8 }, { 2415, 0x3140 }, { 2419, 0x4450 },
-  { 2423, 0x4004 }, { 2425, 0x0100 }, { 2426, 0x8280 }, { 2429, 0x0540 },
-  { 2432, 0x0108 }, { 2434, 0x442c }, { 2439, 0x6a30 }, { 2445, 0x1a05 },
-  { 2450, 0x20a6 }, { 2455, 0x0514 }, { 2459, 0x90cf }, { 2467, 0x6456 },
-  /* 0x6500 */
-  { 2474, 0x0021 }, { 2476, 0x3100 }, { 2479, 0x9c18 }, { 2485, 0xcbf0 },
-  { 2494, 0xa120 }, { 2498, 0x63e2 }, { 2506, 0x104c }, { 2510, 0x01b5 },
-  { 2516, 0x538c }, { 2523, 0x9a83 }, { 2530, 0xb8b2 }, { 2538, 0x3281 },
-  { 2543, 0x987a }, { 2551, 0x0a84 }, { 2555, 0x33e7 }, { 2565, 0x0c02 },
-  /* 0x6600 */
-  { 2568, 0xd4cc }, { 2576, 0x9018 }, { 2580, 0xa1a1 }, { 2586, 0x9070 },
-  { 2591, 0x8a1e }, { 2598, 0xe004 }, { 2602, 0xc3d4 }, { 2610, 0x0451 },
-  { 2614, 0x439a }, { 2621, 0x21c2 }, { 2626, 0x4844 }, { 2630, 0x5310 },
-  { 2635, 0x0292 }, { 2639, 0x3640 }, { 2644, 0x0241 }, { 2647, 0xf3bd },
-  /* 0x6700 */
-  { 2659, 0xab09 }, { 2666, 0xe8f0 }, { 2674, 0x7dc0 }, { 2682, 0xa5d2 },
-  { 2690, 0xc242 }, { 2695, 0xd24b }, { 2703, 0xa43f }, { 2712, 0xd0af },
-  { 2721, 0x1aa0 }, { 2726, 0x34a1 }, { 2732, 0x8247 }, { 2738, 0x03d8 },
-  { 2744, 0xc452 }, { 2750, 0x651b }, { 2758, 0xd294 }, { 2765, 0xc83a },
-  /* 0x6800 */
-  { 2772, 0x001c }, { 2775, 0x40c8 }, { 2779, 0x0e06 }, { 2784, 0x3314 },
-  { 2790, 0x614f }, { 2798, 0xb21b }, { 2806, 0x0088 }, { 2808, 0xc0d0 },
-  { 2813, 0xa02a }, { 2818, 0xa898 }, { 2824, 0xa1c5 }, { 2831, 0x166b },
-  { 2839, 0x2e50 }, { 2845, 0x85b4 }, { 2852, 0xc08b }, { 2858, 0x0604 },
-  /* 0x6900 */
-  { 2861, 0xf933 }, { 2871, 0x1e04 }, { 2876, 0x056e }, { 2883, 0xa251 },
-  { 2889, 0x0400 }, { 2890, 0x7638 }, { 2898, 0xec07 }, { 2906, 0x73b8 },
-  { 2915, 0x4406 }, { 2919, 0x1832 }, { 2924, 0x4081 }, { 2927, 0xc816 },
-  { 2933, 0x7c8a }, { 2941, 0x6309 }, { 2947, 0x2980 }, { 2951, 0xaa04 },
-  /* 0x6a00 */
-  { 2956, 0x1c24 }, { 2961, 0xca9c }, { 2969, 0x4e0e }, { 2976, 0x2760 },
-  { 2982, 0x0990 }, { 2986, 0x8300 }, { 2989, 0x0046 }, { 2992, 0x8104 },
-  { 2995, 0x6011 }, { 2999, 0x1081 }, { 3002, 0x540d }, { 3008, 0x0908 },
-  { 3011, 0x000e }, { 3014, 0xcc0a }, { 3020, 0x0500 }, { 3022, 0x0c00 },
-  /* 0x6b00 */
-  { 3024, 0x0430 }, { 3027, 0xa044 }, { 3031, 0x008b }, { 3035, 0x6784 },
-  { 3042, 0x5288 }, { 3047, 0x8a19 }, { 3053, 0x865e }, { 3061, 0x8b18 },
-  { 3067, 0x2e59 }, { 3075, 0x4160 }, { 3079, 0x8c10 }, { 3083, 0x9cbe },
-  { 3093, 0x6861 }, { 3099, 0x891c }, { 3105, 0x9800 }, { 3108, 0x0008 },
-  /* 0x6c00 */
-  { 3109, 0x8100 }, { 3111, 0x089a }, { 3116, 0x0018 }, { 3118, 0x4190 },
-  { 3122, 0x4007 }, { 3126, 0xe4a1 }, { 3133, 0x0505 }, { 3137, 0x640d },
-  { 3143, 0x310e }, { 3149, 0x0e4d }, { 3156, 0x4806 }, { 3160, 0xff0a },
-  { 3170, 0x1632 }, { 3176, 0x2aa8 }, { 3182, 0x852e }, { 3189, 0x000b },
-  /* 0x6d00 */
-  { 3192, 0x1800 }, { 3194, 0xca84 }, { 3200, 0x0e20 }, { 3204, 0x696c },
-  { 3212, 0x0032 }, { 3215, 0x1600 }, { 3218, 0x5658 }, { 3225, 0x0390 },
-  { 3229, 0x5120 }, { 3233, 0x1a28 }, { 3238, 0x8000 }, { 3239, 0x1124 },
-  { 3243, 0x18e1 }, { 3249, 0x4326 }, { 3255, 0x5d52 }, { 3263, 0x0eaa },
-  /* 0x6e00 */
-  { 3270, 0x0fa0 }, { 3276, 0xae28 }, { 3283, 0xfa7b }, { 3295, 0x4500 },
-  { 3298, 0x6408 }, { 3302, 0x8940 }, { 3306, 0xc880 }, { 3310, 0xc044 },
-  { 3314, 0x9005 }, { 3318, 0xb141 }, { 3324, 0x8424 }, { 3328, 0x24c4 },
-  { 3333, 0x1a34 }, { 3339, 0x603a }, { 3345, 0x9000 }, { 3347, 0xc194 },
-  /* 0x6f00 */
-  { 3353, 0x8246 }, { 3358, 0x003a }, { 3362, 0x180d }, { 3367, 0xc106 },
-  { 3372, 0x0022 }, { 3374, 0x9910 }, { 3379, 0xe050 }, { 3384, 0x1511 },
-  { 3389, 0x4057 }, { 3395, 0x0082 }, { 3397, 0x041a }, { 3401, 0x020a },
-  { 3404, 0x004f }, { 3409, 0x8930 }, { 3414, 0xd813 }, { 3421, 0x444a },
-  /* 0x7000 */
-  { 3426, 0x8a02 }, { 3430, 0xed22 }, { 3438, 0x10c0 }, { 3441, 0x4005 },
-  { 3444, 0x1000 }, { 3445, 0x0102 }, { 3447, 0x8808 }, { 3450, 0x3101 },
-  { 3454, 0x4600 }, { 3457, 0x0204 }, { 3459, 0xf000 }, { 3463, 0x0708 },
-  { 3467, 0x8900 }, { 3470, 0xa200 }, { 3473, 0x0000 }, { 3473, 0x2202 },
-  /* 0x7100 */
-  { 3476, 0x0200 }, { 3477, 0x1610 }, { 3481, 0x0042 }, { 3483, 0x1040 },
-  { 3485, 0x5200 }, { 3488, 0x0260 }, { 3491, 0x52f4 }, { 3499, 0x2000 },
-  { 3500, 0x8510 }, { 3504, 0x8230 }, { 3508, 0x1100 }, { 3510, 0x4202 },
-  { 3513, 0x4308 }, { 3517, 0x80b5 }, { 3523, 0x70e1 }, { 3530, 0x9a20 },
-  /* 0x7200 */
-  { 3535, 0x2040 }, { 3537, 0x0801 }, { 3539, 0x3500 }, { 3543, 0xfc65 },
-  { 3553, 0x19c1 }, { 3559, 0xab04 }, { 3565, 0x0286 }, { 3569, 0x6214 },
-  { 3574, 0x0087 }, { 3578, 0x0044 }, { 3580, 0x9085 }, { 3585, 0x0244 },
-  { 3588, 0x405c }, { 3593, 0x0a85 }, { 3598, 0x3207 }, { 3604, 0x3380 },
-  /* 0x7300 */
-  { 3609, 0x0400 }, { 3610, 0xb8c0 }, { 3616, 0xce20 }, { 3622, 0xc0d0 },
-  { 3627, 0xc030 }, { 3631, 0x0080 }, { 3632, 0x0508 }, { 3635, 0x0d25 },
-  { 3641, 0x0a90 }, { 3645, 0x0040 }, { 3646, 0x0200 }, { 3647, 0x080c },
-  { 3650, 0x6505 }, { 3656, 0x4000 }, { 3657, 0x6421 }, { 3662, 0x4102 },
-  /* 0x7400 */
-  { 3665, 0x0268 }, { 3669, 0x0000 }, { 3669, 0x0024 }, { 3671, 0x847c },
-  { 3678, 0x0002 }, { 3679, 0xde20 }, { 3686, 0x8619 }, { 3692, 0x4049 },
-  { 3696, 0x0808 }, { 3698, 0x4000 }, { 3699, 0x0084 }, { 3701, 0x2001 },
-  { 3703, 0x8400 }, { 3705, 0x1010 }, { 3707, 0x42cd }, { 3714, 0x01c7 },
-  /* 0x7500 */
-  { 3720, 0x7038 }, { 3726, 0xd52a }, { 3734, 0x1968 }, { 3740, 0x1d8f },
-  { 3749, 0xbe50 }, { 3757, 0x3e12 }, { 3764, 0x2ef5 }, { 3774, 0x81d9 },
-  { 3781, 0xcec4 }, { 3789, 0x2412 }, { 3793, 0x0828 }, { 3796, 0x732e },
-  { 3805, 0x24ac }, { 3811, 0x4b34 }, { 3818, 0x020c }, { 3821, 0xd41d },
-  /* 0x7600 */
-  { 3829, 0x2a02 }, { 3833, 0x8000 }, { 3834, 0x0097 }, { 3839, 0x0811 },
-  { 3842, 0x11c4 }, { 3847, 0x1144 }, { 3851, 0x1786 }, { 3858, 0x7d45 },
-  { 3867, 0x49d9 }, { 3875, 0x0649 }, { 3880, 0x4000 }, { 3881, 0x8791 },
-  { 3888, 0x254c }, { 3894, 0xd8c4 }, { 3901, 0x44ba }, { 3908, 0x4914 },
-  /* 0x7700 */
-  { 3913, 0x1b92 }, { 3920, 0xc800 }, { 3923, 0x0271 }, { 3928, 0x1580 },
-  { 3932, 0x0081 }, { 3934, 0x0c00 }, { 3936, 0x096a }, { 3942, 0xc200 },
-  { 3945, 0x4800 }, { 3947, 0x4002 }, { 3949, 0x3021 }, { 3953, 0xba49 },
-  { 3961, 0x2080 }, { 3963, 0x1c80 }, { 3967, 0xe2ac }, { 3975, 0x1008 },
-  /* 0x7800 */
-  { 3977, 0x1004 }, { 3979, 0x0034 }, { 3982, 0x00e1 }, { 3986, 0x8414 },
-  { 3990, 0x0020 }, { 3991, 0x2000 }, { 3992, 0x9800 }, { 3995, 0x1014 },
-  { 3998, 0x70c2 }, { 4004, 0x04aa }, { 4009, 0x8688 }, { 4014, 0x5420 },
-  { 4018, 0x0c62 }, { 4023, 0x0413 }, { 4027, 0x9180 }, { 4031, 0x2010 },
-  /* 0x7900 */
-  { 4033, 0x4082 }, { 4036, 0x0206 }, { 4039, 0x1c40 }, { 4043, 0x5400 },
-  { 4046, 0x0383 }, { 4051, 0xe4e9 }, { 4060, 0x2125 }, { 4065, 0x8480 },
-  { 4068, 0xe433 }, { 4076, 0x2000 }, { 4077, 0x44c0 }, { 4081, 0xe609 },
-  { 4088, 0x0a03 }, { 4092, 0x8126 }, { 4097, 0x12da }, { 4104, 0x0801 },
-  /* 0x7a00 */
-  { 4106, 0x6901 }, { 4111, 0x9790 }, { 4118, 0x4001 }, { 4120, 0xf886 },
-  { 4128, 0xe24d }, { 4136, 0x0081 }, { 4138, 0x0a0e }, { 4143, 0xa651 },
-  { 4150, 0x011a }, { 4154, 0x81ec }, { 4161, 0xc600 }, { 4165, 0x8441 },
-  { 4169, 0xadb8 }, { 4178, 0xb62c }, { 4186, 0xa46f }, { 4195, 0x8741 },
-  /* 0x7b00 */
-  { 4201, 0x8d54 }, { 4208, 0x4b02 }, { 4213, 0x1161 }, { 4218, 0x0268 },
-  { 4222, 0xbb60 }, { 4230, 0x2057 }, { 4236, 0x50a0 }, { 4240, 0x0433 },
-  { 4245, 0xa8c0 }, { 4250, 0xb7b4 }, { 4260, 0x2402 }, { 4263, 0x0112 },
-  { 4266, 0x9ad3 }, { 4275, 0x2000 }, { 4276, 0x2271 }, { 4282, 0x00c8 },
-  /* 0x7c00 */
-  { 4285, 0x2081 }, { 4288, 0x809e }, { 4294, 0x0c8a }, { 4299, 0xe180 },
-  { 4304, 0xb009 }, { 4309, 0x8151 }, { 4314, 0x1031 }, { 4318, 0x4028 },
-  { 4321, 0x2a0e }, { 4327, 0x89a5 }, { 4334, 0x69b6 }, { 4343, 0x620e },
-  { 4349, 0x4425 }, { 4354, 0xd144 }, { 4360, 0x8085 }, { 4364, 0x4d54 },
-  /* 0x7d00 */
-  { 4371, 0x2c75 }, { 4379, 0x1fb1 }, { 4388, 0xd807 }, { 4395, 0x862d },
-  { 4402, 0xd87c }, { 4411, 0x4841 }, { 4415, 0x414e }, { 4421, 0x226e },
-  { 4428, 0x8200 }, { 4430, 0x9e08 }, { 4436, 0xf80c }, { 4443, 0xed37 },
-  { 4454, 0x8c80 }, { 4458, 0x7526 }, { 4466, 0x9313 }, { 4473, 0x0814 },
-  /* 0x7e00 */
-  { 4476, 0x0e32 }, { 4482, 0xc804 }, { 4486, 0x484e }, { 4492, 0x6ea6 },
-  { 4501, 0x2c4a }, { 4507, 0x6670 }, { 4514, 0x26c0 }, { 4519, 0xba01 },
-  { 4525, 0xd30c }, { 4532, 0x185d }, { 4539, 0x0000 }, { 4539, 0x0000 },
-  { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 },
-  /* 0x7f00 */
-  { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0540 },
-  { 4542, 0x7020 }, { 4546, 0x8133 }, { 4552, 0x4f81 }, { 4559, 0x03a5 },
-  { 4565, 0x55ec }, { 4574, 0x6410 }, { 4578, 0xc318 }, { 4584, 0x2344 },
-  { 4589, 0x1462 }, { 4594, 0x0034 }, { 4597, 0x0a43 }, { 4602, 0x1a09 },
-  /* 0x8000 */
-  { 4607, 0x187b }, { 4615, 0x13a5 }, { 4622, 0x0102 }, { 4624, 0xa848 },
-  { 4629, 0x0440 }, { 4631, 0xc544 }, { 4637, 0x8106 }, { 4641, 0xe2dd },
-  { 4651, 0x1af0 }, { 4658, 0x2d48 }, { 4664, 0xb626 }, { 4672, 0x0416 },
-  { 4676, 0x5058 }, { 4681, 0x6e40 }, { 4687, 0x8032 }, { 4691, 0x3112 },
-  /* 0x8100 */
-  { 4696, 0x07e4 }, { 4703, 0x0c00 }, { 4705, 0x8208 }, { 4708, 0x420a },
-  { 4712, 0x4840 }, { 4715, 0x803b }, { 4721, 0x4860 }, { 4725, 0x8713 },
-  { 4732, 0x850d }, { 4738, 0x3428 }, { 4743, 0x0319 }, { 4748, 0xe529 },
-  { 4756, 0x2345 }, { 4762, 0x870a }, { 4768, 0x25a9 }, { 4775, 0x5c18 },
-  /* 0x8200 */
-  { 4781, 0x77a6 }, { 4791, 0xd9c5 }, { 4800, 0x5e00 }, { 4805, 0x03e8 },
-  { 4811, 0x0081 }, { 4813, 0xa700 }, { 4818, 0xcd54 }, { 4826, 0x41c6 },
-  { 4832, 0x2800 }, { 4834, 0xa204 }, { 4838, 0xb860 }, { 4844, 0x2b0a },
-  { 4850, 0x0020 }, { 4851, 0xda9e }, { 4861, 0x08ea }, { 4867, 0x0e1a },
-  /* 0x8300 */
-  { 4873, 0x427c }, { 4880, 0x11c0 }, { 4884, 0x8908 }, { 4888, 0x0376 },
-  { 4895, 0x8621 }, { 4900, 0x0105 }, { 4903, 0x0000 }, { 4903, 0x18a8 },
-  { 4908, 0x46a0 }, { 4913, 0xc448 }, { 4918, 0x0d05 }, { 4923, 0x2022 },
-  { 4926, 0x5422 }, { 4931, 0x9148 }, { 4936, 0x8a01 }, { 4940, 0x2897 },
-  /* 0x8400 */
-  { 4947, 0x7898 }, { 4954, 0x0008 }, { 4955, 0x1605 }, { 4960, 0x3122 },
-  { 4965, 0x4240 }, { 4968, 0x0880 }, { 4970, 0xfa4e }, { 4980, 0x06a2 },
-  { 4985, 0x0814 }, { 4988, 0x9211 }, { 4993, 0x2002 }, { 4995, 0x9b04 },
-  { 5001, 0x2e52 }, { 5008, 0x0643 }, { 5013, 0x5000 }, { 5015, 0x9010 },
-  /* 0x8500 */
-  { 5018, 0x0041 }, { 5020, 0x85ba }, { 5028, 0x3042 }, { 5032, 0x2020 },
-  { 5034, 0x4f0b }, { 5042, 0x05a0 }, { 5046, 0x2708 }, { 5051, 0x4080 },
-  { 5053, 0x0591 }, { 5058, 0x1a93 }, { 5065, 0xdf50 }, { 5074, 0x0600 },
-  { 5076, 0xa202 }, { 5080, 0x3021 }, { 5084, 0x0630 }, { 5088, 0x4e80 },
-  /* 0x8600 */
-  { 5093, 0x0cc4 }, { 5098, 0x04c8 }, { 5102, 0xa004 }, { 5105, 0x8001 },
-  { 5107, 0x6000 }, { 5109, 0xd431 }, { 5116, 0x0880 }, { 5118, 0x0a02 },
-  { 5121, 0x1c00 }, { 5124, 0x0028 }, { 5126, 0x8e18 }, { 5132, 0x0041 },
-  { 5134, 0x6ad0 }, { 5141, 0xca10 }, { 5146, 0xf210 }, { 5152, 0x4b00 },
-  /* 0x8700 */
-  { 5156, 0x274d }, { 5164, 0x1506 }, { 5169, 0x0220 }, { 5171, 0x8890 },
-  { 5175, 0x5a00 }, { 5179, 0x82a8 }, { 5184, 0x4549 }, { 5190, 0x8150 },
-  { 5194, 0x2004 }, { 5196, 0x8000 }, { 5197, 0x8804 }, { 5200, 0x2c08 },
-  { 5204, 0x08d1 }, { 5209, 0x0005 }, { 5211, 0x8001 }, { 5213, 0x4ac4 },
-  /* 0x8800 */
-  { 5219, 0xe020 }, { 5223, 0x0062 }, { 5226, 0x008e }, { 5230, 0x0a42 },
-  { 5234, 0x3055 }, { 5240, 0x6a8c }, { 5247, 0x090e }, { 5252, 0xe0a5 },
-  { 5259, 0x2906 }, { 5264, 0x42c4 }, { 5269, 0x4814 }, { 5273, 0x80b3 },
-  { 5279, 0x803e }, { 5285, 0xb330 }, { 5292, 0x0102 }, { 5294, 0x731c },
-  /* 0x8900 */
-  { 5302, 0x1494 }, { 5307, 0x600d }, { 5312, 0x0c20 }, { 5315, 0x0940 },
-  { 5318, 0x301a }, { 5323, 0xc040 }, { 5326, 0xa451 }, { 5332, 0xc094 },
-  { 5337, 0x8dca }, { 5345, 0x05c8 }, { 5350, 0x96c2 }, { 5357, 0xa40c },
-  { 5362, 0x0001 }, { 5363, 0x3404 }, { 5367, 0x00c8 }, { 5370, 0x0110 },
-  /* 0x8a00 */
-  { 5372, 0x550d }, { 5379, 0xa9c9 }, { 5387, 0x2428 }, { 5391, 0x1c5a },
-  { 5398, 0x0142 }, { 5401, 0x4837 }, { 5408, 0x7a4d }, { 5417, 0x100f },
-  { 5422, 0x32b4 }, { 5429, 0x452a }, { 5435, 0x317b }, { 5444, 0x9205 },
-  { 5449, 0xb894 }, { 5456, 0x5c44 }, { 5462, 0x68d7 }, { 5471, 0x458a },
-  /* 0x8b00 */
-  { 5477, 0x5097 }, { 5484, 0x2ed1 }, { 5492, 0x1943 }, { 5498, 0x4208 },
-  { 5501, 0xd202 }, { 5506, 0x9d40 }, { 5512, 0x9840 }, { 5516, 0x2097 },
-  { 5522, 0x5409 }, { 5527, 0x064d }, { 5533, 0x0000 }, { 5533, 0x0000 },
-  { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 },
-  /* 0x8c00 */
-  { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x8480 },
-  { 5536, 0x5542 }, { 5542, 0x0421 }, { 5545, 0x1c06 }, { 5550, 0x1700 },
-  { 5554, 0x7624 }, { 5561, 0x6110 }, { 5565, 0xff87 }, { 5577, 0xb9dd },
-  { 5588, 0x659f }, { 5598, 0x5c0a }, { 5604, 0x245d }, { 5611, 0x3c00 },
-  /* 0x8d00 */
-  { 5615, 0xadb0 }, { 5623, 0x0059 }, { 5627, 0x0000 }, { 5627, 0x0000 },
-  { 5627, 0x0000 }, { 5627, 0x0000 }, { 5627, 0x28d0 }, { 5632, 0x009b },
-  { 5637, 0x0422 }, { 5640, 0x0200 }, { 5641, 0x0108 }, { 5643, 0x4408 },
-  { 5646, 0x9804 }, { 5650, 0xac40 }, { 5655, 0x8d0a }, { 5661, 0x9028 },
-  /* 0x8e00 */
-  { 5665, 0x8700 }, { 5669, 0xe001 }, { 5673, 0x0400 }, { 5674, 0x0031 },
-  { 5677, 0x1794 }, { 5684, 0x8221 }, { 5688, 0x0019 }, { 5691, 0x1054 },
-  { 5695, 0x2cb2 }, { 5702, 0x021a }, { 5706, 0x9c02 }, { 5711, 0x4003 },
-  { 5714, 0x3d60 }, { 5721, 0x8804 }, { 5724, 0x080c }, { 5727, 0x7900 },
-  /* 0x8f00 */
-  { 5732, 0x1628 }, { 5737, 0xba3c }, { 5746, 0x8640 }, { 5750, 0xcb08 },
-  { 5756, 0x7274 }, { 5764, 0x9080 }, { 5767, 0x001e }, { 5771, 0x0000 },
-  { 5771, 0x0000 }, { 5771, 0xd800 }, { 5775, 0xe188 }, { 5781, 0x9c87 },
-  { 5789, 0x4034 }, { 5793, 0x0412 }, { 5796, 0xae64 }, { 5804, 0x2791 },
-  /* 0x9000 */
-  { 5811, 0xe86b }, { 5820, 0xe6fb }, { 5832, 0x408f }, { 5838, 0x5366 },
-  { 5846, 0xeea6 }, { 5856, 0x537f }, { 5867, 0xe32b }, { 5876, 0xb5e4 },
-  { 5885, 0x869f }, { 5894, 0x0002 }, { 5895, 0x8548 }, { 5900, 0x0122 },
-  { 5903, 0x4402 }, { 5906, 0x0800 }, { 5907, 0x2116 }, { 5912, 0x20a0 },
-  /* 0x9100 */
-  { 5915, 0x0004 }, { 5916, 0x0204 }, { 5918, 0x2000 }, { 5919, 0x0005 },
-  { 5921, 0x7e00 }, { 5927, 0x0154 }, { 5931, 0x162c }, { 5937, 0x01ac },
-  { 5942, 0x2a84 }, { 5947, 0x1085 }, { 5951, 0x8c14 }, { 5956, 0x0530 },
-  { 5960, 0xfbc3 }, { 5971, 0xb943 }, { 5979, 0x00ca }, { 5983, 0x9060 },
-  /* 0x9200 */
-  { 5987, 0x6000 }, { 5989, 0x4032 }, { 5993, 0x1200 }, { 5995, 0x8090 },
-  { 5998, 0x0b30 }, { 6003, 0x4c81 }, { 6008, 0x0054 }, { 6011, 0x4002 },
-  { 6013, 0x0029 }, { 6016, 0x1d6a }, { 6024, 0x2000 }, { 6025, 0x0280 },
-  { 6027, 0x8000 }, { 6028, 0x0004 }, { 6029, 0x2610 }, { 6033, 0x150c },
-  /* 0x9300 */
-  { 6038, 0x8040 }, { 6040, 0x0701 }, { 6044, 0xd94d }, { 6053, 0x0c24 },
-  { 6057, 0x2810 }, { 6060, 0x1850 }, { 6064, 0x5001 }, { 6067, 0x5020 },
-  { 6070, 0x1000 }, { 6071, 0x04d0 }, { 6075, 0x7080 }, { 6079, 0x0201 },
-  { 6081, 0x0108 }, { 6083, 0x21c3 }, { 6089, 0x0132 }, { 6093, 0x0000 },
-  /* 0x9400 */
-  { 6093, 0x0088 }, { 6095, 0x0719 }, { 6101, 0x0802 }, { 6103, 0x0560 },
-  { 6107, 0x0012 }, { 6109, 0x4c0e }, { 6115, 0x0405 }, { 6118, 0xf0a1 },
-  { 6125, 0x0002 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 },
-  { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 },
-  /* 0x9500 */
-  { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 },
-  { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0080 },
-  { 6127, 0x8e8d }, { 6135, 0x035a }, { 6141, 0x21bd }, { 6149, 0x5a04 },
-  { 6154, 0x3488 }, { 6159, 0x1170 }, { 6164, 0x0026 }, { 6167, 0x0000 },
-  /* 0x9600 */
-  { 6167, 0x0000 }, { 6167, 0x1000 }, { 6168, 0xc502 }, { 6173, 0x8804 },
-  { 6176, 0xb815 }, { 6183, 0xf801 }, { 6189, 0x147c }, { 6196, 0x25ed },
-  { 6205, 0xed60 }, { 6213, 0x1bb0 }, { 6220, 0x0589 }, { 6225, 0x1bd7 },
-  { 6235, 0x7af3 }, { 6246, 0x1a62 }, { 6252, 0x0d0c }, { 6257, 0x0ac5 },
-  /* 0x9700 */
-  { 6263, 0xe5d1 }, { 6272, 0x524a }, { 6278, 0x0490 }, { 6281, 0x6305 },
-  { 6287, 0x0354 }, { 6292, 0x5244 }, { 6297, 0x2b57 }, { 6306, 0x1612 },
-  { 6311, 0xa872 }, { 6318, 0x1101 }, { 6321, 0x2949 }, { 6327, 0x0018 },
-  { 6329, 0x0948 }, { 6333, 0x1008 }, { 6335, 0x6000 }, { 6337, 0x886c },
-  /* 0x9800 */
-  { 6343, 0x916e }, { 6351, 0x058f }, { 6358, 0x3012 }, { 6362, 0x3990 },
-  { 6368, 0xf840 }, { 6374, 0x4930 }, { 6379, 0x8880 }, { 6382, 0x001b },
-  { 6386, 0x0000 }, { 6386, 0x0000 }, { 6386, 0x8500 }, { 6389, 0x0042 },
-  { 6391, 0x0058 }, { 6394, 0x9800 }, { 6397, 0xea04 }, { 6403, 0x7014 },
-  /* 0x9900 */
-  { 6408, 0x1628 }, { 6413, 0x611d }, { 6420, 0x5113 }, { 6426, 0x6000 },
-  { 6428, 0x1a24 }, { 6433, 0x00a7 }, { 6438, 0x0000 }, { 6438, 0x0000 },
-  { 6438, 0x0000 }, { 6438, 0x03c0 }, { 6442, 0x7120 }, { 6447, 0x1018 },
-  { 6450, 0x0172 }, { 6455, 0xa927 }, { 6463, 0x6004 }, { 6466, 0x8906 },
-  /* 0x9a00 */
-  { 6471, 0xc022 }, { 6475, 0x020c }, { 6478, 0x0900 }, { 6480, 0x4081 },
-  { 6483, 0x202d }, { 6488, 0x8ca0 }, { 6493, 0x0e34 }, { 6499, 0x0000 },
-  { 6499, 0x0000 }, { 6499, 0x0000 }, { 6499, 0x2100 }, { 6501, 0x1101 },
-  { 6504, 0x8011 }, { 6507, 0xc11a }, { 6513, 0xec4c }, { 6521, 0x0892 },
-  /* 0x9b00 */
-  { 6525, 0x0040 }, { 6526, 0x8500 }, { 6529, 0xc7ac }, { 6538, 0x1806 },
-  { 6542, 0xe03e }, { 6550, 0x0512 }, { 6554, 0x8000 }, { 6555, 0x0010 },
-  { 6556, 0x4008 }, { 6558, 0x80ce }, { 6564, 0x6d01 }, { 6570, 0x0210 },
-  { 6572, 0x8641 }, { 6577, 0x0856 }, { 6582, 0x011e }, { 6587, 0x0027 },
-  /* 0x9c00 */
-  { 6591, 0x3750 }, { 6598, 0x083d }, { 6604, 0xe032 }, { 6610, 0x4e05 },
-  { 6616, 0x01c0 }, { 6619, 0x0484 }, { 6622, 0x0081 }, { 6624, 0x0140 },
-  { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x0000 },
-  { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x1aa0 }, { 6631, 0x0059 },
-  /* 0x9d00 */
-  { 6635, 0x43c8 }, { 6641, 0x8824 }, { 6645, 0x1d48 }, { 6651, 0xc800 },
-  { 6654, 0x0152 }, { 6658, 0x7203 }, { 6664, 0x9013 }, { 6669, 0x0404 },
-  { 6671, 0x8280 }, { 6674, 0x0400 }, { 6675, 0x8a10 }, { 6679, 0x0d14 },
-  { 6684, 0x8056 }, { 6689, 0x0208 }, { 6691, 0xa040 }, { 6694, 0x2704 },
-  /* 0x9e00 */
-  { 6699, 0x0000 }, { 6699, 0x4c00 }, { 6702, 0x0000 }, { 6702, 0x0000 },
-  { 6702, 0x0000 }, { 6702, 0x0000 }, { 6702, 0x0000 }, { 6702, 0xa320 },
-  { 6707, 0x1902 }, { 6711, 0xa0ae }, { 6718, 0x2660 }, { 6723, 0xdf00 },
-  { 6730, 0xf010 }, { 6735, 0x7b15 }, { 6744, 0x8121 }, { 6748, 0x3ad0 },
-  /* 0x9f00 */
-  { 6755, 0x4180 }, { 6758, 0x0028 }, { 6760, 0x1003 }, { 6763, 0x4800 },
-  { 6765, 0xcc00 }, { 6769, 0x8014 }, { 6772, 0x14cf }, { 6780, 0x00c4 },
-  { 6783, 0x2000 }, { 6784, 0x3020 }, { 6787, 0x0001 },
-};
-static const Summary16 jisx0208_uni2indx_pageff[15] = {
-  /* 0xff00 */
-  { 6788, 0xdf7a }, { 6800, 0xffff }, { 6816, 0xffff }, { 6832, 0xefff },
-  { 6847, 0xffff }, { 6863, 0x3fff }, { 6877, 0x0000 }, { 6877, 0x0000 },
-  { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 },
-  { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0028 },
-};
-
-static int
-jisx0208_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0100)
-      summary = &jisx0208_uni2indx_page00[(wc>>4)];
-    else if (wc >= 0x0300 && wc < 0x0460)
-      summary = &jisx0208_uni2indx_page03[(wc>>4)-0x030];
-    else if (wc >= 0x2000 && wc < 0x2320)
-      summary = &jisx0208_uni2indx_page20[(wc>>4)-0x200];
-    else if (wc >= 0x2500 && wc < 0x2670)
-      summary = &jisx0208_uni2indx_page25[(wc>>4)-0x250];
-    else if (wc >= 0x3000 && wc < 0x3100)
-      summary = &jisx0208_uni2indx_page30[(wc>>4)-0x300];
-    else if (wc >= 0x4e00 && wc < 0x9fb0)
-      summary = &jisx0208_uni2indx_page4e[(wc>>4)-0x4e0];
-    else if (wc >= 0xff00 && wc < 0xfff0)
-      summary = &jisx0208_uni2indx_pageff[(wc>>4)-0xff0];
-    if (summary) {
-      unsigned short used = summary->used;
-      unsigned int i = wc & 0x0f;
-      if (used & ((unsigned short) 1 << i)) {
-        unsigned short c;
-        /* Keep in `used' only the bits 0..i-1. */
-        used &= ((unsigned short) 1 << i) - 1;
-        /* Add `summary->indx' and the number of bits set in `used'. */
-        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-        used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-        used = (used & 0x00ff) + (used >> 8);
-        c = jisx0208_2charset[summary->indx + used];
-        r[0] = (c >> 8); r[1] = (c & 0xff);
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/jisx0212.h b/common/fltk/src/xutf8/lcUniConv/jisx0212.h
deleted file mode 100644
index d0cb69f..0000000
--- a/common/fltk/src/xutf8/lcUniConv/jisx0212.h
+++ /dev/null
@@ -1,2168 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/jisx0212.h,v 1.5 2003/05/27 22:26:31 tsi Exp $ */
-
-/*
- * JISX0212.1990-0
- */
-#ifdef NEED_TOWC
-
-static const unsigned short jisx0212_2uni_page22[81] = {
-  /* 0x22 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x02d8, 0x02c7,
-  0x00b8, 0x02d9, 0x02dd, 0x00af, 0x02db, 0x02da, 0x007e, 0x0384,
-  0x0385, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x00a1, 0x00a6, 0x00bf, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0x00ba, 0x00aa, 0x00a9, 0x00ae, 0x2122, 0x00a4,
-  0x2116,
-};
-static const unsigned short jisx0212_2uni_page26[188] = {
-  /* 0x26 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0xfffd, 0x038c, 0xfffd,
-  0x038e, 0x03ab, 0xfffd, 0x038f, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, 0x03c2,
-  0x03cd, 0x03cb, 0x03b0, 0x03ce, 0xfffd, 0xfffd,
-  /* 0x27 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408,
-  0x0409, 0x040a, 0x040b, 0x040c, 0x040e, 0x040f, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458,
-  0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f,
-};
-static const unsigned short jisx0212_2uni_page29[275] = {
-  /* 0x29 */
-  0x00c6, 0x0110, 0xfffd, 0x0126, 0xfffd, 0x0132, 0xfffd, 0x0141,
-  0x013f, 0xfffd, 0x014a, 0x00d8, 0x0152, 0xfffd, 0x0166, 0x00de,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0142,
-  0x0140, 0x0149, 0x014b, 0x00f8, 0x0153, 0x00df, 0x0167, 0x00fe,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x2a */
-  0x00c1, 0x00c0, 0x00c4, 0x00c2, 0x0102, 0x01cd, 0x0100, 0x0104,
-  0x00c5, 0x00c3, 0x0106, 0x0108, 0x010c, 0x00c7, 0x010a, 0x010e,
-  0x00c9, 0x00c8, 0x00cb, 0x00ca, 0x011a, 0x0116, 0x0112, 0x0118,
-  0xfffd, 0x011c, 0x011e, 0x0122, 0x0120, 0x0124, 0x00cd, 0x00cc,
-  0x00cf, 0x00ce, 0x01cf, 0x0130, 0x012a, 0x012e, 0x0128, 0x0134,
-  0x0136, 0x0139, 0x013d, 0x013b, 0x0143, 0x0147, 0x0145, 0x00d1,
-  0x00d3, 0x00d2, 0x00d6, 0x00d4, 0x01d1, 0x0150, 0x014c, 0x00d5,
-  0x0154, 0x0158, 0x0156, 0x015a, 0x015c, 0x0160, 0x015e, 0x0164,
-  0x0162, 0x00da, 0x00d9, 0x00dc, 0x00db, 0x016c, 0x01d3, 0x0170,
-  0x016a, 0x0172, 0x016e, 0x0168, 0x01d7, 0x01db, 0x01d9, 0x01d5,
-  0x0174, 0x00dd, 0x0178, 0x0176, 0x0179, 0x017d, 0x017b, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x2b */
-  0x00e1, 0x00e0, 0x00e4, 0x00e2, 0x0103, 0x01ce, 0x0101, 0x0105,
-  0x00e5, 0x00e3, 0x0107, 0x0109, 0x010d, 0x00e7, 0x010b, 0x010f,
-  0x00e9, 0x00e8, 0x00eb, 0x00ea, 0x011b, 0x0117, 0x0113, 0x0119,
-  0x01f5, 0x011d, 0x011f, 0xfffd, 0x0121, 0x0125, 0x00ed, 0x00ec,
-  0x00ef, 0x00ee, 0x01d0, 0xfffd, 0x012b, 0x012f, 0x0129, 0x0135,
-  0x0137, 0x013a, 0x013e, 0x013c, 0x0144, 0x0148, 0x0146, 0x00f1,
-  0x00f3, 0x00f2, 0x00f6, 0x00f4, 0x01d2, 0x0151, 0x014d, 0x00f5,
-  0x0155, 0x0159, 0x0157, 0x015b, 0x015d, 0x0161, 0x015f, 0x0165,
-  0x0163, 0x00fa, 0x00f9, 0x00fc, 0x00fb, 0x016d, 0x01d4, 0x0171,
-  0x016b, 0x0173, 0x016f, 0x0169, 0x01d8, 0x01dc, 0x01da, 0x01d6,
-  0x0175, 0x00fd, 0x00ff, 0x0177, 0x017a, 0x017e, 0x017c,
-};
-static const unsigned short jisx0212_2uni_page30[5801] = {
-  /* 0x30 */
-  0x4e02, 0x4e04, 0x4e05, 0x4e0c, 0x4e12, 0x4e1f, 0x4e23, 0x4e24,
-  0x4e28, 0x4e2b, 0x4e2e, 0x4e2f, 0x4e30, 0x4e35, 0x4e40, 0x4e41,
-  0x4e44, 0x4e47, 0x4e51, 0x4e5a, 0x4e5c, 0x4e63, 0x4e68, 0x4e69,
-  0x4e74, 0x4e75, 0x4e79, 0x4e7f, 0x4e8d, 0x4e96, 0x4e97, 0x4e9d,
-  0x4eaf, 0x4eb9, 0x4ec3, 0x4ed0, 0x4eda, 0x4edb, 0x4ee0, 0x4ee1,
-  0x4ee2, 0x4ee8, 0x4eef, 0x4ef1, 0x4ef3, 0x4ef5, 0x4efd, 0x4efe,
-  0x4eff, 0x4f00, 0x4f02, 0x4f03, 0x4f08, 0x4f0b, 0x4f0c, 0x4f12,
-  0x4f15, 0x4f16, 0x4f17, 0x4f19, 0x4f2e, 0x4f31, 0x4f60, 0x4f33,
-  0x4f35, 0x4f37, 0x4f39, 0x4f3b, 0x4f3e, 0x4f40, 0x4f42, 0x4f48,
-  0x4f49, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, 0x4f56, 0x4f58, 0x4f5f,
-  0x4f63, 0x4f6a, 0x4f6c, 0x4f6e, 0x4f71, 0x4f77, 0x4f78, 0x4f79,
-  0x4f7a, 0x4f7d, 0x4f7e, 0x4f81, 0x4f82, 0x4f84,
-  /* 0x31 */
-  0x4f85, 0x4f89, 0x4f8a, 0x4f8c, 0x4f8e, 0x4f90, 0x4f92, 0x4f93,
-  0x4f94, 0x4f97, 0x4f99, 0x4f9a, 0x4f9e, 0x4f9f, 0x4fb2, 0x4fb7,
-  0x4fb9, 0x4fbb, 0x4fbc, 0x4fbd, 0x4fbe, 0x4fc0, 0x4fc1, 0x4fc5,
-  0x4fc6, 0x4fc8, 0x4fc9, 0x4fcb, 0x4fcc, 0x4fcd, 0x4fcf, 0x4fd2,
-  0x4fdc, 0x4fe0, 0x4fe2, 0x4ff0, 0x4ff2, 0x4ffc, 0x4ffd, 0x4fff,
-  0x5000, 0x5001, 0x5004, 0x5007, 0x500a, 0x500c, 0x500e, 0x5010,
-  0x5013, 0x5017, 0x5018, 0x501b, 0x501c, 0x501d, 0x501e, 0x5022,
-  0x5027, 0x502e, 0x5030, 0x5032, 0x5033, 0x5035, 0x5040, 0x5041,
-  0x5042, 0x5045, 0x5046, 0x504a, 0x504c, 0x504e, 0x5051, 0x5052,
-  0x5053, 0x5057, 0x5059, 0x505f, 0x5060, 0x5062, 0x5063, 0x5066,
-  0x5067, 0x506a, 0x506d, 0x5070, 0x5071, 0x503b, 0x5081, 0x5083,
-  0x5084, 0x5086, 0x508a, 0x508e, 0x508f, 0x5090,
-  /* 0x32 */
-  0x5092, 0x5093, 0x5094, 0x5096, 0x509b, 0x509c, 0x509e, 0x509f,
-  0x50a0, 0x50a1, 0x50a2, 0x50aa, 0x50af, 0x50b0, 0x50b9, 0x50ba,
-  0x50bd, 0x50c0, 0x50c3, 0x50c4, 0x50c7, 0x50cc, 0x50ce, 0x50d0,
-  0x50d3, 0x50d4, 0x50d8, 0x50dc, 0x50dd, 0x50df, 0x50e2, 0x50e4,
-  0x50e6, 0x50e8, 0x50e9, 0x50ef, 0x50f1, 0x50f6, 0x50fa, 0x50fe,
-  0x5103, 0x5106, 0x5107, 0x5108, 0x510b, 0x510c, 0x510d, 0x510e,
-  0x50f2, 0x5110, 0x5117, 0x5119, 0x511b, 0x511c, 0x511d, 0x511e,
-  0x5123, 0x5127, 0x5128, 0x512c, 0x512d, 0x512f, 0x5131, 0x5133,
-  0x5134, 0x5135, 0x5138, 0x5139, 0x5142, 0x514a, 0x514f, 0x5153,
-  0x5155, 0x5157, 0x5158, 0x515f, 0x5164, 0x5166, 0x517e, 0x5183,
-  0x5184, 0x518b, 0x518e, 0x5198, 0x519d, 0x51a1, 0x51a3, 0x51ad,
-  0x51b8, 0x51ba, 0x51bc, 0x51be, 0x51bf, 0x51c2,
-  /* 0x33 */
-  0x51c8, 0x51cf, 0x51d1, 0x51d2, 0x51d3, 0x51d5, 0x51d8, 0x51de,
-  0x51e2, 0x51e5, 0x51ee, 0x51f2, 0x51f3, 0x51f4, 0x51f7, 0x5201,
-  0x5202, 0x5205, 0x5212, 0x5213, 0x5215, 0x5216, 0x5218, 0x5222,
-  0x5228, 0x5231, 0x5232, 0x5235, 0x523c, 0x5245, 0x5249, 0x5255,
-  0x5257, 0x5258, 0x525a, 0x525c, 0x525f, 0x5260, 0x5261, 0x5266,
-  0x526e, 0x5277, 0x5278, 0x5279, 0x5280, 0x5282, 0x5285, 0x528a,
-  0x528c, 0x5293, 0x5295, 0x5296, 0x5297, 0x5298, 0x529a, 0x529c,
-  0x52a4, 0x52a5, 0x52a6, 0x52a7, 0x52af, 0x52b0, 0x52b6, 0x52b7,
-  0x52b8, 0x52ba, 0x52bb, 0x52bd, 0x52c0, 0x52c4, 0x52c6, 0x52c8,
-  0x52cc, 0x52cf, 0x52d1, 0x52d4, 0x52d6, 0x52db, 0x52dc, 0x52e1,
-  0x52e5, 0x52e8, 0x52e9, 0x52ea, 0x52ec, 0x52f0, 0x52f1, 0x52f4,
-  0x52f6, 0x52f7, 0x5300, 0x5303, 0x530a, 0x530b,
-  /* 0x34 */
-  0x530c, 0x5311, 0x5313, 0x5318, 0x531b, 0x531c, 0x531e, 0x531f,
-  0x5325, 0x5327, 0x5328, 0x5329, 0x532b, 0x532c, 0x532d, 0x5330,
-  0x5332, 0x5335, 0x533c, 0x533d, 0x533e, 0x5342, 0x534c, 0x534b,
-  0x5359, 0x535b, 0x5361, 0x5363, 0x5365, 0x536c, 0x536d, 0x5372,
-  0x5379, 0x537e, 0x5383, 0x5387, 0x5388, 0x538e, 0x5393, 0x5394,
-  0x5399, 0x539d, 0x53a1, 0x53a4, 0x53aa, 0x53ab, 0x53af, 0x53b2,
-  0x53b4, 0x53b5, 0x53b7, 0x53b8, 0x53ba, 0x53bd, 0x53c0, 0x53c5,
-  0x53cf, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dd, 0x53de, 0x53e0,
-  0x53e6, 0x53e7, 0x53f5, 0x5402, 0x5413, 0x541a, 0x5421, 0x5427,
-  0x5428, 0x542a, 0x542f, 0x5431, 0x5434, 0x5435, 0x5443, 0x5444,
-  0x5447, 0x544d, 0x544f, 0x545e, 0x5462, 0x5464, 0x5466, 0x5467,
-  0x5469, 0x546b, 0x546d, 0x546e, 0x5474, 0x547f,
-  /* 0x35 */
-  0x5481, 0x5483, 0x5485, 0x5488, 0x5489, 0x548d, 0x5491, 0x5495,
-  0x5496, 0x549c, 0x549f, 0x54a1, 0x54a6, 0x54a7, 0x54a9, 0x54aa,
-  0x54ad, 0x54ae, 0x54b1, 0x54b7, 0x54b9, 0x54ba, 0x54bb, 0x54bf,
-  0x54c6, 0x54ca, 0x54cd, 0x54ce, 0x54e0, 0x54ea, 0x54ec, 0x54ef,
-  0x54f6, 0x54fc, 0x54fe, 0x54ff, 0x5500, 0x5501, 0x5505, 0x5508,
-  0x5509, 0x550c, 0x550d, 0x550e, 0x5515, 0x552a, 0x552b, 0x5532,
-  0x5535, 0x5536, 0x553b, 0x553c, 0x553d, 0x5541, 0x5547, 0x5549,
-  0x554a, 0x554d, 0x5550, 0x5551, 0x5558, 0x555a, 0x555b, 0x555e,
-  0x5560, 0x5561, 0x5564, 0x5566, 0x557f, 0x5581, 0x5582, 0x5586,
-  0x5588, 0x558e, 0x558f, 0x5591, 0x5592, 0x5593, 0x5594, 0x5597,
-  0x55a3, 0x55a4, 0x55ad, 0x55b2, 0x55bf, 0x55c1, 0x55c3, 0x55c6,
-  0x55c9, 0x55cb, 0x55cc, 0x55ce, 0x55d1, 0x55d2,
-  /* 0x36 */
-  0x55d3, 0x55d7, 0x55d8, 0x55db, 0x55de, 0x55e2, 0x55e9, 0x55f6,
-  0x55ff, 0x5605, 0x5608, 0x560a, 0x560d, 0x560e, 0x560f, 0x5610,
-  0x5611, 0x5612, 0x5619, 0x562c, 0x5630, 0x5633, 0x5635, 0x5637,
-  0x5639, 0x563b, 0x563c, 0x563d, 0x563f, 0x5640, 0x5641, 0x5643,
-  0x5644, 0x5646, 0x5649, 0x564b, 0x564d, 0x564f, 0x5654, 0x565e,
-  0x5660, 0x5661, 0x5662, 0x5663, 0x5666, 0x5669, 0x566d, 0x566f,
-  0x5671, 0x5672, 0x5675, 0x5684, 0x5685, 0x5688, 0x568b, 0x568c,
-  0x5695, 0x5699, 0x569a, 0x569d, 0x569e, 0x569f, 0x56a6, 0x56a7,
-  0x56a8, 0x56a9, 0x56ab, 0x56ac, 0x56ad, 0x56b1, 0x56b3, 0x56b7,
-  0x56be, 0x56c5, 0x56c9, 0x56ca, 0x56cb, 0x56cf, 0x56d0, 0x56cc,
-  0x56cd, 0x56d9, 0x56dc, 0x56dd, 0x56df, 0x56e1, 0x56e4, 0x56e5,
-  0x56e6, 0x56e7, 0x56e8, 0x56f1, 0x56eb, 0x56ed,
-  /* 0x37 */
-  0x56f6, 0x56f7, 0x5701, 0x5702, 0x5707, 0x570a, 0x570c, 0x5711,
-  0x5715, 0x571a, 0x571b, 0x571d, 0x5720, 0x5722, 0x5723, 0x5724,
-  0x5725, 0x5729, 0x572a, 0x572c, 0x572e, 0x572f, 0x5733, 0x5734,
-  0x573d, 0x573e, 0x573f, 0x5745, 0x5746, 0x574c, 0x574d, 0x5752,
-  0x5762, 0x5765, 0x5767, 0x5768, 0x576b, 0x576d, 0x576e, 0x576f,
-  0x5770, 0x5771, 0x5773, 0x5774, 0x5775, 0x5777, 0x5779, 0x577a,
-  0x577b, 0x577c, 0x577e, 0x5781, 0x5783, 0x578c, 0x5794, 0x5797,
-  0x5799, 0x579a, 0x579c, 0x579d, 0x579e, 0x579f, 0x57a1, 0x5795,
-  0x57a7, 0x57a8, 0x57a9, 0x57ac, 0x57b8, 0x57bd, 0x57c7, 0x57c8,
-  0x57cc, 0x57cf, 0x57d5, 0x57dd, 0x57de, 0x57e4, 0x57e6, 0x57e7,
-  0x57e9, 0x57ed, 0x57f0, 0x57f5, 0x57f6, 0x57f8, 0x57fd, 0x57fe,
-  0x57ff, 0x5803, 0x5804, 0x5808, 0x5809, 0x57e1,
-  /* 0x38 */
-  0x580c, 0x580d, 0x581b, 0x581e, 0x581f, 0x5820, 0x5826, 0x5827,
-  0x582d, 0x5832, 0x5839, 0x583f, 0x5849, 0x584c, 0x584d, 0x584f,
-  0x5850, 0x5855, 0x585f, 0x5861, 0x5864, 0x5867, 0x5868, 0x5878,
-  0x587c, 0x587f, 0x5880, 0x5881, 0x5887, 0x5888, 0x5889, 0x588a,
-  0x588c, 0x588d, 0x588f, 0x5890, 0x5894, 0x5896, 0x589d, 0x58a0,
-  0x58a1, 0x58a2, 0x58a6, 0x58a9, 0x58b1, 0x58b2, 0x58c4, 0x58bc,
-  0x58c2, 0x58c8, 0x58cd, 0x58ce, 0x58d0, 0x58d2, 0x58d4, 0x58d6,
-  0x58da, 0x58dd, 0x58e1, 0x58e2, 0x58e9, 0x58f3, 0x5905, 0x5906,
-  0x590b, 0x590c, 0x5912, 0x5913, 0x5914, 0x8641, 0x591d, 0x5921,
-  0x5923, 0x5924, 0x5928, 0x592f, 0x5930, 0x5933, 0x5935, 0x5936,
-  0x593f, 0x5943, 0x5946, 0x5952, 0x5953, 0x5959, 0x595b, 0x595d,
-  0x595e, 0x595f, 0x5961, 0x5963, 0x596b, 0x596d,
-  /* 0x39 */
-  0x596f, 0x5972, 0x5975, 0x5976, 0x5979, 0x597b, 0x597c, 0x598b,
-  0x598c, 0x598e, 0x5992, 0x5995, 0x5997, 0x599f, 0x59a4, 0x59a7,
-  0x59ad, 0x59ae, 0x59af, 0x59b0, 0x59b3, 0x59b7, 0x59ba, 0x59bc,
-  0x59c1, 0x59c3, 0x59c4, 0x59c8, 0x59ca, 0x59cd, 0x59d2, 0x59dd,
-  0x59de, 0x59df, 0x59e3, 0x59e4, 0x59e7, 0x59ee, 0x59ef, 0x59f1,
-  0x59f2, 0x59f4, 0x59f7, 0x5a00, 0x5a04, 0x5a0c, 0x5a0d, 0x5a0e,
-  0x5a12, 0x5a13, 0x5a1e, 0x5a23, 0x5a24, 0x5a27, 0x5a28, 0x5a2a,
-  0x5a2d, 0x5a30, 0x5a44, 0x5a45, 0x5a47, 0x5a48, 0x5a4c, 0x5a50,
-  0x5a55, 0x5a5e, 0x5a63, 0x5a65, 0x5a67, 0x5a6d, 0x5a77, 0x5a7a,
-  0x5a7b, 0x5a7e, 0x5a8b, 0x5a90, 0x5a93, 0x5a96, 0x5a99, 0x5a9c,
-  0x5a9e, 0x5a9f, 0x5aa0, 0x5aa2, 0x5aa7, 0x5aac, 0x5ab1, 0x5ab2,
-  0x5ab3, 0x5ab5, 0x5ab8, 0x5aba, 0x5abb, 0x5abf,
-  /* 0x3a */
-  0x5ac4, 0x5ac6, 0x5ac8, 0x5acf, 0x5ada, 0x5adc, 0x5ae0, 0x5ae5,
-  0x5aea, 0x5aee, 0x5af5, 0x5af6, 0x5afd, 0x5b00, 0x5b01, 0x5b08,
-  0x5b17, 0x5b34, 0x5b19, 0x5b1b, 0x5b1d, 0x5b21, 0x5b25, 0x5b2d,
-  0x5b38, 0x5b41, 0x5b4b, 0x5b4c, 0x5b52, 0x5b56, 0x5b5e, 0x5b68,
-  0x5b6e, 0x5b6f, 0x5b7c, 0x5b7d, 0x5b7e, 0x5b7f, 0x5b81, 0x5b84,
-  0x5b86, 0x5b8a, 0x5b8e, 0x5b90, 0x5b91, 0x5b93, 0x5b94, 0x5b96,
-  0x5ba8, 0x5ba9, 0x5bac, 0x5bad, 0x5baf, 0x5bb1, 0x5bb2, 0x5bb7,
-  0x5bba, 0x5bbc, 0x5bc0, 0x5bc1, 0x5bcd, 0x5bcf, 0x5bd6, 0x5bd7,
-  0x5bd8, 0x5bd9, 0x5bda, 0x5be0, 0x5bef, 0x5bf1, 0x5bf4, 0x5bfd,
-  0x5c0c, 0x5c17, 0x5c1e, 0x5c1f, 0x5c23, 0x5c26, 0x5c29, 0x5c2b,
-  0x5c2c, 0x5c2e, 0x5c30, 0x5c32, 0x5c35, 0x5c36, 0x5c59, 0x5c5a,
-  0x5c5c, 0x5c62, 0x5c63, 0x5c67, 0x5c68, 0x5c69,
-  /* 0x3b */
-  0x5c6d, 0x5c70, 0x5c74, 0x5c75, 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d,
-  0x5c87, 0x5c88, 0x5c8a, 0x5c8f, 0x5c92, 0x5c9d, 0x5c9f, 0x5ca0,
-  0x5ca2, 0x5ca3, 0x5ca6, 0x5caa, 0x5cb2, 0x5cb4, 0x5cb5, 0x5cba,
-  0x5cc9, 0x5ccb, 0x5cd2, 0x5cdd, 0x5cd7, 0x5cee, 0x5cf1, 0x5cf2,
-  0x5cf4, 0x5d01, 0x5d06, 0x5d0d, 0x5d12, 0x5d2b, 0x5d23, 0x5d24,
-  0x5d26, 0x5d27, 0x5d31, 0x5d34, 0x5d39, 0x5d3d, 0x5d3f, 0x5d42,
-  0x5d43, 0x5d46, 0x5d48, 0x5d55, 0x5d51, 0x5d59, 0x5d4a, 0x5d5f,
-  0x5d60, 0x5d61, 0x5d62, 0x5d64, 0x5d6a, 0x5d6d, 0x5d70, 0x5d79,
-  0x5d7a, 0x5d7e, 0x5d7f, 0x5d81, 0x5d83, 0x5d88, 0x5d8a, 0x5d92,
-  0x5d93, 0x5d94, 0x5d95, 0x5d99, 0x5d9b, 0x5d9f, 0x5da0, 0x5da7,
-  0x5dab, 0x5db0, 0x5db4, 0x5db8, 0x5db9, 0x5dc3, 0x5dc7, 0x5dcb,
-  0x5dd0, 0x5dce, 0x5dd8, 0x5dd9, 0x5de0, 0x5de4,
-  /* 0x3c */
-  0x5de9, 0x5df8, 0x5df9, 0x5e00, 0x5e07, 0x5e0d, 0x5e12, 0x5e14,
-  0x5e15, 0x5e18, 0x5e1f, 0x5e20, 0x5e2e, 0x5e28, 0x5e32, 0x5e35,
-  0x5e3e, 0x5e4b, 0x5e50, 0x5e49, 0x5e51, 0x5e56, 0x5e58, 0x5e5b,
-  0x5e5c, 0x5e5e, 0x5e68, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e,
-  0x5e70, 0x5e80, 0x5e8b, 0x5e8e, 0x5ea2, 0x5ea4, 0x5ea5, 0x5ea8,
-  0x5eaa, 0x5eac, 0x5eb1, 0x5eb3, 0x5ebd, 0x5ebe, 0x5ebf, 0x5ec6,
-  0x5ecc, 0x5ecb, 0x5ece, 0x5ed1, 0x5ed2, 0x5ed4, 0x5ed5, 0x5edc,
-  0x5ede, 0x5ee5, 0x5eeb, 0x5f02, 0x5f06, 0x5f07, 0x5f08, 0x5f0e,
-  0x5f19, 0x5f1c, 0x5f1d, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f28,
-  0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f34, 0x5f36, 0x5f3b, 0x5f3d,
-  0x5f3f, 0x5f40, 0x5f44, 0x5f45, 0x5f47, 0x5f4d, 0x5f50, 0x5f54,
-  0x5f58, 0x5f5b, 0x5f60, 0x5f63, 0x5f64, 0x5f67,
-  /* 0x3d */
-  0x5f6f, 0x5f72, 0x5f74, 0x5f75, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e,
-  0x5f89, 0x5f8d, 0x5f8f, 0x5f96, 0x5f9c, 0x5f9d, 0x5fa2, 0x5fa7,
-  0x5fab, 0x5fa4, 0x5fac, 0x5faf, 0x5fb0, 0x5fb1, 0x5fb8, 0x5fc4,
-  0x5fc7, 0x5fc8, 0x5fc9, 0x5fcb, 0x5fd0, 0x5fd1, 0x5fd2, 0x5fd3,
-  0x5fd4, 0x5fde, 0x5fe1, 0x5fe2, 0x5fe8, 0x5fe9, 0x5fea, 0x5fec,
-  0x5fed, 0x5fee, 0x5fef, 0x5ff2, 0x5ff3, 0x5ff6, 0x5ffa, 0x5ffc,
-  0x6007, 0x600a, 0x600d, 0x6013, 0x6014, 0x6017, 0x6018, 0x601a,
-  0x601f, 0x6024, 0x602d, 0x6033, 0x6035, 0x6040, 0x6047, 0x6048,
-  0x6049, 0x604c, 0x6051, 0x6054, 0x6056, 0x6057, 0x605d, 0x6061,
-  0x6067, 0x6071, 0x607e, 0x607f, 0x6082, 0x6086, 0x6088, 0x608a,
-  0x608e, 0x6091, 0x6093, 0x6095, 0x6098, 0x609d, 0x609e, 0x60a2,
-  0x60a4, 0x60a5, 0x60a8, 0x60b0, 0x60b1, 0x60b7,
-  /* 0x3e */
-  0x60bb, 0x60be, 0x60c2, 0x60c4, 0x60c8, 0x60c9, 0x60ca, 0x60cb,
-  0x60ce, 0x60cf, 0x60d4, 0x60d5, 0x60d9, 0x60db, 0x60dd, 0x60de,
-  0x60e2, 0x60e5, 0x60f2, 0x60f5, 0x60f8, 0x60fc, 0x60fd, 0x6102,
-  0x6107, 0x610a, 0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114,
-  0x6116, 0x6117, 0x6119, 0x611c, 0x611e, 0x6122, 0x612a, 0x612b,
-  0x6130, 0x6131, 0x6135, 0x6136, 0x6137, 0x6139, 0x6141, 0x6145,
-  0x6146, 0x6149, 0x615e, 0x6160, 0x616c, 0x6172, 0x6178, 0x617b,
-  0x617c, 0x617f, 0x6180, 0x6181, 0x6183, 0x6184, 0x618b, 0x618d,
-  0x6192, 0x6193, 0x6197, 0x6198, 0x619c, 0x619d, 0x619f, 0x61a0,
-  0x61a5, 0x61a8, 0x61aa, 0x61ad, 0x61b8, 0x61b9, 0x61bc, 0x61c0,
-  0x61c1, 0x61c2, 0x61ce, 0x61cf, 0x61d5, 0x61dc, 0x61dd, 0x61de,
-  0x61df, 0x61e1, 0x61e2, 0x61e7, 0x61e9, 0x61e5,
-  /* 0x3f */
-  0x61ec, 0x61ed, 0x61ef, 0x6201, 0x6203, 0x6204, 0x6207, 0x6213,
-  0x6215, 0x621c, 0x6220, 0x6222, 0x6223, 0x6227, 0x6229, 0x622b,
-  0x6239, 0x623d, 0x6242, 0x6243, 0x6244, 0x6246, 0x624c, 0x6250,
-  0x6251, 0x6252, 0x6254, 0x6256, 0x625a, 0x625c, 0x6264, 0x626d,
-  0x626f, 0x6273, 0x627a, 0x627d, 0x628d, 0x628e, 0x628f, 0x6290,
-  0x62a6, 0x62a8, 0x62b3, 0x62b6, 0x62b7, 0x62ba, 0x62be, 0x62bf,
-  0x62c4, 0x62ce, 0x62d5, 0x62d6, 0x62da, 0x62ea, 0x62f2, 0x62f4,
-  0x62fc, 0x62fd, 0x6303, 0x6304, 0x630a, 0x630b, 0x630d, 0x6310,
-  0x6313, 0x6316, 0x6318, 0x6329, 0x632a, 0x632d, 0x6335, 0x6336,
-  0x6339, 0x633c, 0x6341, 0x6342, 0x6343, 0x6344, 0x6346, 0x634a,
-  0x634b, 0x634e, 0x6352, 0x6353, 0x6354, 0x6358, 0x635b, 0x6365,
-  0x6366, 0x636c, 0x636d, 0x6371, 0x6374, 0x6375,
-  /* 0x40 */
-  0x6378, 0x637c, 0x637d, 0x637f, 0x6382, 0x6384, 0x6387, 0x638a,
-  0x6390, 0x6394, 0x6395, 0x6399, 0x639a, 0x639e, 0x63a4, 0x63a6,
-  0x63ad, 0x63ae, 0x63af, 0x63bd, 0x63c1, 0x63c5, 0x63c8, 0x63ce,
-  0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63dc, 0x63e0, 0x63e5, 0x63ea,
-  0x63ec, 0x63f2, 0x63f3, 0x63f5, 0x63f8, 0x63f9, 0x6409, 0x640a,
-  0x6410, 0x6412, 0x6414, 0x6418, 0x641e, 0x6420, 0x6422, 0x6424,
-  0x6425, 0x6429, 0x642a, 0x642f, 0x6430, 0x6435, 0x643d, 0x643f,
-  0x644b, 0x644f, 0x6451, 0x6452, 0x6453, 0x6454, 0x645a, 0x645b,
-  0x645c, 0x645d, 0x645f, 0x6460, 0x6461, 0x6463, 0x646d, 0x6473,
-  0x6474, 0x647b, 0x647d, 0x6485, 0x6487, 0x648f, 0x6490, 0x6491,
-  0x6498, 0x6499, 0x649b, 0x649d, 0x649f, 0x64a1, 0x64a3, 0x64a6,
-  0x64a8, 0x64ac, 0x64b3, 0x64bd, 0x64be, 0x64bf,
-  /* 0x41 */
-  0x64c4, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64ce, 0x64d0, 0x64d1,
-  0x64d5, 0x64d7, 0x64e4, 0x64e5, 0x64e9, 0x64ea, 0x64ed, 0x64f0,
-  0x64f5, 0x64f7, 0x64fb, 0x64ff, 0x6501, 0x6504, 0x6508, 0x6509,
-  0x650a, 0x650f, 0x6513, 0x6514, 0x6516, 0x6519, 0x651b, 0x651e,
-  0x651f, 0x6522, 0x6526, 0x6529, 0x652e, 0x6531, 0x653a, 0x653c,
-  0x653d, 0x6543, 0x6547, 0x6549, 0x6550, 0x6552, 0x6554, 0x655f,
-  0x6560, 0x6567, 0x656b, 0x657a, 0x657d, 0x6581, 0x6585, 0x658a,
-  0x6592, 0x6595, 0x6598, 0x659d, 0x65a0, 0x65a3, 0x65a6, 0x65ae,
-  0x65b2, 0x65b3, 0x65b4, 0x65bf, 0x65c2, 0x65c8, 0x65c9, 0x65ce,
-  0x65d0, 0x65d4, 0x65d6, 0x65d8, 0x65df, 0x65f0, 0x65f2, 0x65f4,
-  0x65f5, 0x65f9, 0x65fe, 0x65ff, 0x6600, 0x6604, 0x6608, 0x6609,
-  0x660d, 0x6611, 0x6612, 0x6615, 0x6616, 0x661d,
-  /* 0x42 */
-  0x661e, 0x6621, 0x6622, 0x6623, 0x6624, 0x6626, 0x6629, 0x662a,
-  0x662b, 0x662c, 0x662e, 0x6630, 0x6631, 0x6633, 0x6639, 0x6637,
-  0x6640, 0x6645, 0x6646, 0x664a, 0x664c, 0x6651, 0x664e, 0x6657,
-  0x6658, 0x6659, 0x665b, 0x665c, 0x6660, 0x6661, 0x66fb, 0x666a,
-  0x666b, 0x666c, 0x667e, 0x6673, 0x6675, 0x667f, 0x6677, 0x6678,
-  0x6679, 0x667b, 0x6680, 0x667c, 0x668b, 0x668c, 0x668d, 0x6690,
-  0x6692, 0x6699, 0x669a, 0x669b, 0x669c, 0x669f, 0x66a0, 0x66a4,
-  0x66ad, 0x66b1, 0x66b2, 0x66b5, 0x66bb, 0x66bf, 0x66c0, 0x66c2,
-  0x66c3, 0x66c8, 0x66cc, 0x66ce, 0x66cf, 0x66d4, 0x66db, 0x66df,
-  0x66e8, 0x66eb, 0x66ec, 0x66ee, 0x66fa, 0x6705, 0x6707, 0x670e,
-  0x6713, 0x6719, 0x671c, 0x6720, 0x6722, 0x6733, 0x673e, 0x6745,
-  0x6747, 0x6748, 0x674c, 0x6754, 0x6755, 0x675d,
-  /* 0x43 */
-  0x6766, 0x676c, 0x676e, 0x6774, 0x6776, 0x677b, 0x6781, 0x6784,
-  0x678e, 0x678f, 0x6791, 0x6793, 0x6796, 0x6798, 0x6799, 0x679b,
-  0x67b0, 0x67b1, 0x67b2, 0x67b5, 0x67bb, 0x67bc, 0x67bd, 0x67f9,
-  0x67c0, 0x67c2, 0x67c3, 0x67c5, 0x67c8, 0x67c9, 0x67d2, 0x67d7,
-  0x67d9, 0x67dc, 0x67e1, 0x67e6, 0x67f0, 0x67f2, 0x67f6, 0x67f7,
-  0x6852, 0x6814, 0x6819, 0x681d, 0x681f, 0x6828, 0x6827, 0x682c,
-  0x682d, 0x682f, 0x6830, 0x6831, 0x6833, 0x683b, 0x683f, 0x6844,
-  0x6845, 0x684a, 0x684c, 0x6855, 0x6857, 0x6858, 0x685b, 0x686b,
-  0x686e, 0x686f, 0x6870, 0x6871, 0x6872, 0x6875, 0x6879, 0x687a,
-  0x687b, 0x687c, 0x6882, 0x6884, 0x6886, 0x6888, 0x6896, 0x6898,
-  0x689a, 0x689c, 0x68a1, 0x68a3, 0x68a5, 0x68a9, 0x68aa, 0x68ae,
-  0x68b2, 0x68bb, 0x68c5, 0x68c8, 0x68cc, 0x68cf,
-  /* 0x44 */
-  0x68d0, 0x68d1, 0x68d3, 0x68d6, 0x68d9, 0x68dc, 0x68dd, 0x68e5,
-  0x68e8, 0x68ea, 0x68eb, 0x68ec, 0x68ed, 0x68f0, 0x68f1, 0x68f5,
-  0x68f6, 0x68fb, 0x68fc, 0x68fd, 0x6906, 0x6909, 0x690a, 0x6910,
-  0x6911, 0x6913, 0x6916, 0x6917, 0x6931, 0x6933, 0x6935, 0x6938,
-  0x693b, 0x6942, 0x6945, 0x6949, 0x694e, 0x6957, 0x695b, 0x6963,
-  0x6964, 0x6965, 0x6966, 0x6968, 0x6969, 0x696c, 0x6970, 0x6971,
-  0x6972, 0x697a, 0x697b, 0x697f, 0x6980, 0x698d, 0x6992, 0x6996,
-  0x6998, 0x69a1, 0x69a5, 0x69a6, 0x69a8, 0x69ab, 0x69ad, 0x69af,
-  0x69b7, 0x69b8, 0x69ba, 0x69bc, 0x69c5, 0x69c8, 0x69d1, 0x69d6,
-  0x69d7, 0x69e2, 0x69e5, 0x69ee, 0x69ef, 0x69f1, 0x69f3, 0x69f5,
-  0x69fe, 0x6a00, 0x6a01, 0x6a03, 0x6a0f, 0x6a11, 0x6a15, 0x6a1a,
-  0x6a1d, 0x6a20, 0x6a24, 0x6a28, 0x6a30, 0x6a32,
-  /* 0x45 */
-  0x6a34, 0x6a37, 0x6a3b, 0x6a3e, 0x6a3f, 0x6a45, 0x6a46, 0x6a49,
-  0x6a4a, 0x6a4e, 0x6a50, 0x6a51, 0x6a52, 0x6a55, 0x6a56, 0x6a5b,
-  0x6a64, 0x6a67, 0x6a6a, 0x6a71, 0x6a73, 0x6a7e, 0x6a81, 0x6a83,
-  0x6a86, 0x6a87, 0x6a89, 0x6a8b, 0x6a91, 0x6a9b, 0x6a9d, 0x6a9e,
-  0x6a9f, 0x6aa5, 0x6aab, 0x6aaf, 0x6ab0, 0x6ab1, 0x6ab4, 0x6abd,
-  0x6abe, 0x6abf, 0x6ac6, 0x6ac9, 0x6ac8, 0x6acc, 0x6ad0, 0x6ad4,
-  0x6ad5, 0x6ad6, 0x6adc, 0x6add, 0x6ae4, 0x6ae7, 0x6aec, 0x6af0,
-  0x6af1, 0x6af2, 0x6afc, 0x6afd, 0x6b02, 0x6b03, 0x6b06, 0x6b07,
-  0x6b09, 0x6b0f, 0x6b10, 0x6b11, 0x6b17, 0x6b1b, 0x6b1e, 0x6b24,
-  0x6b28, 0x6b2b, 0x6b2c, 0x6b2f, 0x6b35, 0x6b36, 0x6b3b, 0x6b3f,
-  0x6b46, 0x6b4a, 0x6b4d, 0x6b52, 0x6b56, 0x6b58, 0x6b5d, 0x6b60,
-  0x6b67, 0x6b6b, 0x6b6e, 0x6b70, 0x6b75, 0x6b7d,
-  /* 0x46 */
-  0x6b7e, 0x6b82, 0x6b85, 0x6b97, 0x6b9b, 0x6b9f, 0x6ba0, 0x6ba2,
-  0x6ba3, 0x6ba8, 0x6ba9, 0x6bac, 0x6bad, 0x6bae, 0x6bb0, 0x6bb8,
-  0x6bb9, 0x6bbd, 0x6bbe, 0x6bc3, 0x6bc4, 0x6bc9, 0x6bcc, 0x6bd6,
-  0x6bda, 0x6be1, 0x6be3, 0x6be6, 0x6be7, 0x6bee, 0x6bf1, 0x6bf7,
-  0x6bf9, 0x6bff, 0x6c02, 0x6c04, 0x6c05, 0x6c09, 0x6c0d, 0x6c0e,
-  0x6c10, 0x6c12, 0x6c19, 0x6c1f, 0x6c26, 0x6c27, 0x6c28, 0x6c2c,
-  0x6c2e, 0x6c33, 0x6c35, 0x6c36, 0x6c3a, 0x6c3b, 0x6c3f, 0x6c4a,
-  0x6c4b, 0x6c4d, 0x6c4f, 0x6c52, 0x6c54, 0x6c59, 0x6c5b, 0x6c5c,
-  0x6c6b, 0x6c6d, 0x6c6f, 0x6c74, 0x6c76, 0x6c78, 0x6c79, 0x6c7b,
-  0x6c85, 0x6c86, 0x6c87, 0x6c89, 0x6c94, 0x6c95, 0x6c97, 0x6c98,
-  0x6c9c, 0x6c9f, 0x6cb0, 0x6cb2, 0x6cb4, 0x6cc2, 0x6cc6, 0x6ccd,
-  0x6ccf, 0x6cd0, 0x6cd1, 0x6cd2, 0x6cd4, 0x6cd6,
-  /* 0x47 */
-  0x6cda, 0x6cdc, 0x6ce0, 0x6ce7, 0x6ce9, 0x6ceb, 0x6cec, 0x6cee,
-  0x6cf2, 0x6cf4, 0x6d04, 0x6d07, 0x6d0a, 0x6d0e, 0x6d0f, 0x6d11,
-  0x6d13, 0x6d1a, 0x6d26, 0x6d27, 0x6d28, 0x6c67, 0x6d2e, 0x6d2f,
-  0x6d31, 0x6d39, 0x6d3c, 0x6d3f, 0x6d57, 0x6d5e, 0x6d5f, 0x6d61,
-  0x6d65, 0x6d67, 0x6d6f, 0x6d70, 0x6d7c, 0x6d82, 0x6d87, 0x6d91,
-  0x6d92, 0x6d94, 0x6d96, 0x6d97, 0x6d98, 0x6daa, 0x6dac, 0x6db4,
-  0x6db7, 0x6db9, 0x6dbd, 0x6dbf, 0x6dc4, 0x6dc8, 0x6dca, 0x6dce,
-  0x6dcf, 0x6dd6, 0x6ddb, 0x6ddd, 0x6ddf, 0x6de0, 0x6de2, 0x6de5,
-  0x6de9, 0x6def, 0x6df0, 0x6df4, 0x6df6, 0x6dfc, 0x6e00, 0x6e04,
-  0x6e1e, 0x6e22, 0x6e27, 0x6e32, 0x6e36, 0x6e39, 0x6e3b, 0x6e3c,
-  0x6e44, 0x6e45, 0x6e48, 0x6e49, 0x6e4b, 0x6e4f, 0x6e51, 0x6e52,
-  0x6e53, 0x6e54, 0x6e57, 0x6e5c, 0x6e5d, 0x6e5e,
-  /* 0x48 */
-  0x6e62, 0x6e63, 0x6e68, 0x6e73, 0x6e7b, 0x6e7d, 0x6e8d, 0x6e93,
-  0x6e99, 0x6ea0, 0x6ea7, 0x6ead, 0x6eae, 0x6eb1, 0x6eb3, 0x6ebb,
-  0x6ebf, 0x6ec0, 0x6ec1, 0x6ec3, 0x6ec7, 0x6ec8, 0x6eca, 0x6ecd,
-  0x6ece, 0x6ecf, 0x6eeb, 0x6eed, 0x6eee, 0x6ef9, 0x6efb, 0x6efd,
-  0x6f04, 0x6f08, 0x6f0a, 0x6f0c, 0x6f0d, 0x6f16, 0x6f18, 0x6f1a,
-  0x6f1b, 0x6f26, 0x6f29, 0x6f2a, 0x6f2f, 0x6f30, 0x6f33, 0x6f36,
-  0x6f3b, 0x6f3c, 0x6f2d, 0x6f4f, 0x6f51, 0x6f52, 0x6f53, 0x6f57,
-  0x6f59, 0x6f5a, 0x6f5d, 0x6f5e, 0x6f61, 0x6f62, 0x6f68, 0x6f6c,
-  0x6f7d, 0x6f7e, 0x6f83, 0x6f87, 0x6f88, 0x6f8b, 0x6f8c, 0x6f8d,
-  0x6f90, 0x6f92, 0x6f93, 0x6f94, 0x6f96, 0x6f9a, 0x6f9f, 0x6fa0,
-  0x6fa5, 0x6fa6, 0x6fa7, 0x6fa8, 0x6fae, 0x6faf, 0x6fb0, 0x6fb5,
-  0x6fb6, 0x6fbc, 0x6fc5, 0x6fc7, 0x6fc8, 0x6fca,
-  /* 0x49 */
-  0x6fda, 0x6fde, 0x6fe8, 0x6fe9, 0x6ff0, 0x6ff5, 0x6ff9, 0x6ffc,
-  0x6ffd, 0x7000, 0x7005, 0x7006, 0x7007, 0x700d, 0x7017, 0x7020,
-  0x7023, 0x702f, 0x7034, 0x7037, 0x7039, 0x703c, 0x7043, 0x7044,
-  0x7048, 0x7049, 0x704a, 0x704b, 0x7054, 0x7055, 0x705d, 0x705e,
-  0x704e, 0x7064, 0x7065, 0x706c, 0x706e, 0x7075, 0x7076, 0x707e,
-  0x7081, 0x7085, 0x7086, 0x7094, 0x7095, 0x7096, 0x7097, 0x7098,
-  0x709b, 0x70a4, 0x70ab, 0x70b0, 0x70b1, 0x70b4, 0x70b7, 0x70ca,
-  0x70d1, 0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d8, 0x70dc, 0x70e4,
-  0x70fa, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x710b, 0x710c,
-  0x710f, 0x711e, 0x7120, 0x712b, 0x712d, 0x712f, 0x7130, 0x7131,
-  0x7138, 0x7141, 0x7145, 0x7146, 0x7147, 0x714a, 0x714b, 0x7150,
-  0x7152, 0x7157, 0x715a, 0x715c, 0x715e, 0x7160,
-  /* 0x4a */
-  0x7168, 0x7179, 0x7180, 0x7185, 0x7187, 0x718c, 0x7192, 0x719a,
-  0x719b, 0x71a0, 0x71a2, 0x71af, 0x71b0, 0x71b2, 0x71b3, 0x71ba,
-  0x71bf, 0x71c0, 0x71c1, 0x71c4, 0x71cb, 0x71cc, 0x71d3, 0x71d6,
-  0x71d9, 0x71da, 0x71dc, 0x71f8, 0x71fe, 0x7200, 0x7207, 0x7208,
-  0x7209, 0x7213, 0x7217, 0x721a, 0x721d, 0x721f, 0x7224, 0x722b,
-  0x722f, 0x7234, 0x7238, 0x7239, 0x7241, 0x7242, 0x7243, 0x7245,
-  0x724e, 0x724f, 0x7250, 0x7253, 0x7255, 0x7256, 0x725a, 0x725c,
-  0x725e, 0x7260, 0x7263, 0x7268, 0x726b, 0x726e, 0x726f, 0x7271,
-  0x7277, 0x7278, 0x727b, 0x727c, 0x727f, 0x7284, 0x7289, 0x728d,
-  0x728e, 0x7293, 0x729b, 0x72a8, 0x72ad, 0x72ae, 0x72b1, 0x72b4,
-  0x72be, 0x72c1, 0x72c7, 0x72c9, 0x72cc, 0x72d5, 0x72d6, 0x72d8,
-  0x72df, 0x72e5, 0x72f3, 0x72f4, 0x72fa, 0x72fb,
-  /* 0x4b */
-  0x72fe, 0x7302, 0x7304, 0x7305, 0x7307, 0x730b, 0x730d, 0x7312,
-  0x7313, 0x7318, 0x7319, 0x731e, 0x7322, 0x7324, 0x7327, 0x7328,
-  0x732c, 0x7331, 0x7332, 0x7335, 0x733a, 0x733b, 0x733d, 0x7343,
-  0x734d, 0x7350, 0x7352, 0x7356, 0x7358, 0x735d, 0x735e, 0x735f,
-  0x7360, 0x7366, 0x7367, 0x7369, 0x736b, 0x736c, 0x736e, 0x736f,
-  0x7371, 0x7377, 0x7379, 0x737c, 0x7380, 0x7381, 0x7383, 0x7385,
-  0x7386, 0x738e, 0x7390, 0x7393, 0x7395, 0x7397, 0x7398, 0x739c,
-  0x739e, 0x739f, 0x73a0, 0x73a2, 0x73a5, 0x73a6, 0x73aa, 0x73ab,
-  0x73ad, 0x73b5, 0x73b7, 0x73b9, 0x73bc, 0x73bd, 0x73bf, 0x73c5,
-  0x73c6, 0x73c9, 0x73cb, 0x73cc, 0x73cf, 0x73d2, 0x73d3, 0x73d6,
-  0x73d9, 0x73dd, 0x73e1, 0x73e3, 0x73e6, 0x73e7, 0x73e9, 0x73f4,
-  0x73f5, 0x73f7, 0x73f9, 0x73fa, 0x73fb, 0x73fd,
-  /* 0x4c */
-  0x73ff, 0x7400, 0x7401, 0x7404, 0x7407, 0x740a, 0x7411, 0x741a,
-  0x741b, 0x7424, 0x7426, 0x7428, 0x7429, 0x742a, 0x742b, 0x742c,
-  0x742d, 0x742e, 0x742f, 0x7430, 0x7431, 0x7439, 0x7440, 0x7443,
-  0x7444, 0x7446, 0x7447, 0x744b, 0x744d, 0x7451, 0x7452, 0x7457,
-  0x745d, 0x7462, 0x7466, 0x7467, 0x7468, 0x746b, 0x746d, 0x746e,
-  0x7471, 0x7472, 0x7480, 0x7481, 0x7485, 0x7486, 0x7487, 0x7489,
-  0x748f, 0x7490, 0x7491, 0x7492, 0x7498, 0x7499, 0x749a, 0x749c,
-  0x749f, 0x74a0, 0x74a1, 0x74a3, 0x74a6, 0x74a8, 0x74a9, 0x74aa,
-  0x74ab, 0x74ae, 0x74af, 0x74b1, 0x74b2, 0x74b5, 0x74b9, 0x74bb,
-  0x74bf, 0x74c8, 0x74c9, 0x74cc, 0x74d0, 0x74d3, 0x74d8, 0x74da,
-  0x74db, 0x74de, 0x74df, 0x74e4, 0x74e8, 0x74ea, 0x74eb, 0x74ef,
-  0x74f4, 0x74fa, 0x74fb, 0x74fc, 0x74ff, 0x7506,
-  /* 0x4d */
-  0x7512, 0x7516, 0x7517, 0x7520, 0x7521, 0x7524, 0x7527, 0x7529,
-  0x752a, 0x752f, 0x7536, 0x7539, 0x753d, 0x753e, 0x753f, 0x7540,
-  0x7543, 0x7547, 0x7548, 0x754e, 0x7550, 0x7552, 0x7557, 0x755e,
-  0x755f, 0x7561, 0x756f, 0x7571, 0x7579, 0x757a, 0x757b, 0x757c,
-  0x757d, 0x757e, 0x7581, 0x7585, 0x7590, 0x7592, 0x7593, 0x7595,
-  0x7599, 0x759c, 0x75a2, 0x75a4, 0x75b4, 0x75ba, 0x75bf, 0x75c0,
-  0x75c1, 0x75c4, 0x75c6, 0x75cc, 0x75ce, 0x75cf, 0x75d7, 0x75dc,
-  0x75df, 0x75e0, 0x75e1, 0x75e4, 0x75e7, 0x75ec, 0x75ee, 0x75ef,
-  0x75f1, 0x75f9, 0x7600, 0x7602, 0x7603, 0x7604, 0x7607, 0x7608,
-  0x760a, 0x760c, 0x760f, 0x7612, 0x7613, 0x7615, 0x7616, 0x7619,
-  0x761b, 0x761c, 0x761d, 0x761e, 0x7623, 0x7625, 0x7626, 0x7629,
-  0x762d, 0x7632, 0x7633, 0x7635, 0x7638, 0x7639,
-  /* 0x4e */
-  0x763a, 0x763c, 0x764a, 0x7640, 0x7641, 0x7643, 0x7644, 0x7645,
-  0x7649, 0x764b, 0x7655, 0x7659, 0x765f, 0x7664, 0x7665, 0x766d,
-  0x766e, 0x766f, 0x7671, 0x7674, 0x7681, 0x7685, 0x768c, 0x768d,
-  0x7695, 0x769b, 0x769c, 0x769d, 0x769f, 0x76a0, 0x76a2, 0x76a3,
-  0x76a4, 0x76a5, 0x76a6, 0x76a7, 0x76a8, 0x76aa, 0x76ad, 0x76bd,
-  0x76c1, 0x76c5, 0x76c9, 0x76cb, 0x76cc, 0x76ce, 0x76d4, 0x76d9,
-  0x76e0, 0x76e6, 0x76e8, 0x76ec, 0x76f0, 0x76f1, 0x76f6, 0x76f9,
-  0x76fc, 0x7700, 0x7706, 0x770a, 0x770e, 0x7712, 0x7714, 0x7715,
-  0x7717, 0x7719, 0x771a, 0x771c, 0x7722, 0x7728, 0x772d, 0x772e,
-  0x772f, 0x7734, 0x7735, 0x7736, 0x7739, 0x773d, 0x773e, 0x7742,
-  0x7745, 0x7746, 0x774a, 0x774d, 0x774e, 0x774f, 0x7752, 0x7756,
-  0x7757, 0x775c, 0x775e, 0x775f, 0x7760, 0x7762,
-  /* 0x4f */
-  0x7764, 0x7767, 0x776a, 0x776c, 0x7770, 0x7772, 0x7773, 0x7774,
-  0x777a, 0x777d, 0x7780, 0x7784, 0x778c, 0x778d, 0x7794, 0x7795,
-  0x7796, 0x779a, 0x779f, 0x77a2, 0x77a7, 0x77aa, 0x77ae, 0x77af,
-  0x77b1, 0x77b5, 0x77be, 0x77c3, 0x77c9, 0x77d1, 0x77d2, 0x77d5,
-  0x77d9, 0x77de, 0x77df, 0x77e0, 0x77e4, 0x77e6, 0x77ea, 0x77ec,
-  0x77f0, 0x77f1, 0x77f4, 0x77f8, 0x77fb, 0x7805, 0x7806, 0x7809,
-  0x780d, 0x780e, 0x7811, 0x781d, 0x7821, 0x7822, 0x7823, 0x782d,
-  0x782e, 0x7830, 0x7835, 0x7837, 0x7843, 0x7844, 0x7847, 0x7848,
-  0x784c, 0x784e, 0x7852, 0x785c, 0x785e, 0x7860, 0x7861, 0x7863,
-  0x7864, 0x7868, 0x786a, 0x786e, 0x787a, 0x787e, 0x788a, 0x788f,
-  0x7894, 0x7898, 0x78a1, 0x789d, 0x789e, 0x789f, 0x78a4, 0x78a8,
-  0x78ac, 0x78ad, 0x78b0, 0x78b1, 0x78b2, 0x78b3,
-  /* 0x50 */
-  0x78bb, 0x78bd, 0x78bf, 0x78c7, 0x78c8, 0x78c9, 0x78cc, 0x78ce,
-  0x78d2, 0x78d3, 0x78d5, 0x78d6, 0x78e4, 0x78db, 0x78df, 0x78e0,
-  0x78e1, 0x78e6, 0x78ea, 0x78f2, 0x78f3, 0x7900, 0x78f6, 0x78f7,
-  0x78fa, 0x78fb, 0x78ff, 0x7906, 0x790c, 0x7910, 0x791a, 0x791c,
-  0x791e, 0x791f, 0x7920, 0x7925, 0x7927, 0x7929, 0x792d, 0x7931,
-  0x7934, 0x7935, 0x793b, 0x793d, 0x793f, 0x7944, 0x7945, 0x7946,
-  0x794a, 0x794b, 0x794f, 0x7951, 0x7954, 0x7958, 0x795b, 0x795c,
-  0x7967, 0x7969, 0x796b, 0x7972, 0x7979, 0x797b, 0x797c, 0x797e,
-  0x798b, 0x798c, 0x7991, 0x7993, 0x7994, 0x7995, 0x7996, 0x7998,
-  0x799b, 0x799c, 0x79a1, 0x79a8, 0x79a9, 0x79ab, 0x79af, 0x79b1,
-  0x79b4, 0x79b8, 0x79bb, 0x79c2, 0x79c4, 0x79c7, 0x79c8, 0x79ca,
-  0x79cf, 0x79d4, 0x79d6, 0x79da, 0x79dd, 0x79de,
-  /* 0x51 */
-  0x79e0, 0x79e2, 0x79e5, 0x79ea, 0x79eb, 0x79ed, 0x79f1, 0x79f8,
-  0x79fc, 0x7a02, 0x7a03, 0x7a07, 0x7a09, 0x7a0a, 0x7a0c, 0x7a11,
-  0x7a15, 0x7a1b, 0x7a1e, 0x7a21, 0x7a27, 0x7a2b, 0x7a2d, 0x7a2f,
-  0x7a30, 0x7a34, 0x7a35, 0x7a38, 0x7a39, 0x7a3a, 0x7a44, 0x7a45,
-  0x7a47, 0x7a48, 0x7a4c, 0x7a55, 0x7a56, 0x7a59, 0x7a5c, 0x7a5d,
-  0x7a5f, 0x7a60, 0x7a65, 0x7a67, 0x7a6a, 0x7a6d, 0x7a75, 0x7a78,
-  0x7a7e, 0x7a80, 0x7a82, 0x7a85, 0x7a86, 0x7a8a, 0x7a8b, 0x7a90,
-  0x7a91, 0x7a94, 0x7a9e, 0x7aa0, 0x7aa3, 0x7aac, 0x7ab3, 0x7ab5,
-  0x7ab9, 0x7abb, 0x7abc, 0x7ac6, 0x7ac9, 0x7acc, 0x7ace, 0x7ad1,
-  0x7adb, 0x7ae8, 0x7ae9, 0x7aeb, 0x7aec, 0x7af1, 0x7af4, 0x7afb,
-  0x7afd, 0x7afe, 0x7b07, 0x7b14, 0x7b1f, 0x7b23, 0x7b27, 0x7b29,
-  0x7b2a, 0x7b2b, 0x7b2d, 0x7b2e, 0x7b2f, 0x7b30,
-  /* 0x52 */
-  0x7b31, 0x7b34, 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b47, 0x7b4e,
-  0x7b55, 0x7b60, 0x7b64, 0x7b66, 0x7b69, 0x7b6a, 0x7b6d, 0x7b6f,
-  0x7b72, 0x7b73, 0x7b77, 0x7b84, 0x7b89, 0x7b8e, 0x7b90, 0x7b91,
-  0x7b96, 0x7b9b, 0x7b9e, 0x7ba0, 0x7ba5, 0x7bac, 0x7baf, 0x7bb0,
-  0x7bb2, 0x7bb5, 0x7bb6, 0x7bba, 0x7bbb, 0x7bbc, 0x7bbd, 0x7bc2,
-  0x7bc5, 0x7bc8, 0x7bca, 0x7bd4, 0x7bd6, 0x7bd7, 0x7bd9, 0x7bda,
-  0x7bdb, 0x7be8, 0x7bea, 0x7bf2, 0x7bf4, 0x7bf5, 0x7bf8, 0x7bf9,
-  0x7bfa, 0x7bfc, 0x7bfe, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c06,
-  0x7c09, 0x7c0b, 0x7c0c, 0x7c0e, 0x7c0f, 0x7c19, 0x7c1b, 0x7c20,
-  0x7c25, 0x7c26, 0x7c28, 0x7c2c, 0x7c31, 0x7c33, 0x7c34, 0x7c36,
-  0x7c39, 0x7c3a, 0x7c46, 0x7c4a, 0x7c55, 0x7c51, 0x7c52, 0x7c53,
-  0x7c59, 0x7c5a, 0x7c5b, 0x7c5c, 0x7c5d, 0x7c5e,
-  /* 0x53 */
-  0x7c61, 0x7c63, 0x7c67, 0x7c69, 0x7c6d, 0x7c6e, 0x7c70, 0x7c72,
-  0x7c79, 0x7c7c, 0x7c7d, 0x7c86, 0x7c87, 0x7c8f, 0x7c94, 0x7c9e,
-  0x7ca0, 0x7ca6, 0x7cb0, 0x7cb6, 0x7cb7, 0x7cba, 0x7cbb, 0x7cbc,
-  0x7cbf, 0x7cc4, 0x7cc7, 0x7cc8, 0x7cc9, 0x7ccd, 0x7ccf, 0x7cd3,
-  0x7cd4, 0x7cd5, 0x7cd7, 0x7cd9, 0x7cda, 0x7cdd, 0x7ce6, 0x7ce9,
-  0x7ceb, 0x7cf5, 0x7d03, 0x7d07, 0x7d08, 0x7d09, 0x7d0f, 0x7d11,
-  0x7d12, 0x7d13, 0x7d16, 0x7d1d, 0x7d1e, 0x7d23, 0x7d26, 0x7d2a,
-  0x7d2d, 0x7d31, 0x7d3c, 0x7d3d, 0x7d3e, 0x7d40, 0x7d41, 0x7d47,
-  0x7d48, 0x7d4d, 0x7d51, 0x7d53, 0x7d57, 0x7d59, 0x7d5a, 0x7d5c,
-  0x7d5d, 0x7d65, 0x7d67, 0x7d6a, 0x7d70, 0x7d78, 0x7d7a, 0x7d7b,
-  0x7d7f, 0x7d81, 0x7d82, 0x7d83, 0x7d85, 0x7d86, 0x7d88, 0x7d8b,
-  0x7d8c, 0x7d8d, 0x7d91, 0x7d96, 0x7d97, 0x7d9d,
-  /* 0x54 */
-  0x7d9e, 0x7da6, 0x7da7, 0x7daa, 0x7db3, 0x7db6, 0x7db7, 0x7db9,
-  0x7dc2, 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dcc, 0x7dcd, 0x7dce,
-  0x7dd7, 0x7dd9, 0x7e00, 0x7de2, 0x7de5, 0x7de6, 0x7dea, 0x7deb,
-  0x7ded, 0x7df1, 0x7df5, 0x7df6, 0x7df9, 0x7dfa, 0x7e08, 0x7e10,
-  0x7e11, 0x7e15, 0x7e17, 0x7e1c, 0x7e1d, 0x7e20, 0x7e27, 0x7e28,
-  0x7e2c, 0x7e2d, 0x7e2f, 0x7e33, 0x7e36, 0x7e3f, 0x7e44, 0x7e45,
-  0x7e47, 0x7e4e, 0x7e50, 0x7e52, 0x7e58, 0x7e5f, 0x7e61, 0x7e62,
-  0x7e65, 0x7e6b, 0x7e6e, 0x7e6f, 0x7e73, 0x7e78, 0x7e7e, 0x7e81,
-  0x7e86, 0x7e87, 0x7e8a, 0x7e8d, 0x7e91, 0x7e95, 0x7e98, 0x7e9a,
-  0x7e9d, 0x7e9e, 0x7f3c, 0x7f3b, 0x7f3d, 0x7f3e, 0x7f3f, 0x7f43,
-  0x7f44, 0x7f47, 0x7f4f, 0x7f52, 0x7f53, 0x7f5b, 0x7f5c, 0x7f5d,
-  0x7f61, 0x7f63, 0x7f64, 0x7f65, 0x7f66, 0x7f6d,
-  /* 0x55 */
-  0x7f71, 0x7f7d, 0x7f7e, 0x7f7f, 0x7f80, 0x7f8b, 0x7f8d, 0x7f8f,
-  0x7f90, 0x7f91, 0x7f96, 0x7f97, 0x7f9c, 0x7fa1, 0x7fa2, 0x7fa6,
-  0x7faa, 0x7fad, 0x7fb4, 0x7fbc, 0x7fbf, 0x7fc0, 0x7fc3, 0x7fc8,
-  0x7fce, 0x7fcf, 0x7fdb, 0x7fdf, 0x7fe3, 0x7fe5, 0x7fe8, 0x7fec,
-  0x7fee, 0x7fef, 0x7ff2, 0x7ffa, 0x7ffd, 0x7ffe, 0x7fff, 0x8007,
-  0x8008, 0x800a, 0x800d, 0x800e, 0x800f, 0x8011, 0x8013, 0x8014,
-  0x8016, 0x801d, 0x801e, 0x801f, 0x8020, 0x8024, 0x8026, 0x802c,
-  0x802e, 0x8030, 0x8034, 0x8035, 0x8037, 0x8039, 0x803a, 0x803c,
-  0x803e, 0x8040, 0x8044, 0x8060, 0x8064, 0x8066, 0x806d, 0x8071,
-  0x8075, 0x8081, 0x8088, 0x808e, 0x809c, 0x809e, 0x80a6, 0x80a7,
-  0x80ab, 0x80b8, 0x80b9, 0x80c8, 0x80cd, 0x80cf, 0x80d2, 0x80d4,
-  0x80d5, 0x80d7, 0x80d8, 0x80e0, 0x80ed, 0x80ee,
-  /* 0x56 */
-  0x80f0, 0x80f2, 0x80f3, 0x80f6, 0x80f9, 0x80fa, 0x80fe, 0x8103,
-  0x810b, 0x8116, 0x8117, 0x8118, 0x811c, 0x811e, 0x8120, 0x8124,
-  0x8127, 0x812c, 0x8130, 0x8135, 0x813a, 0x813c, 0x8145, 0x8147,
-  0x814a, 0x814c, 0x8152, 0x8157, 0x8160, 0x8161, 0x8167, 0x8168,
-  0x8169, 0x816d, 0x816f, 0x8177, 0x8181, 0x8190, 0x8184, 0x8185,
-  0x8186, 0x818b, 0x818e, 0x8196, 0x8198, 0x819b, 0x819e, 0x81a2,
-  0x81ae, 0x81b2, 0x81b4, 0x81bb, 0x81cb, 0x81c3, 0x81c5, 0x81ca,
-  0x81ce, 0x81cf, 0x81d5, 0x81d7, 0x81db, 0x81dd, 0x81de, 0x81e1,
-  0x81e4, 0x81eb, 0x81ec, 0x81f0, 0x81f1, 0x81f2, 0x81f5, 0x81f6,
-  0x81f8, 0x81f9, 0x81fd, 0x81ff, 0x8200, 0x8203, 0x820f, 0x8213,
-  0x8214, 0x8219, 0x821a, 0x821d, 0x8221, 0x8222, 0x8228, 0x8232,
-  0x8234, 0x823a, 0x8243, 0x8244, 0x8245, 0x8246,
-  /* 0x57 */
-  0x824b, 0x824e, 0x824f, 0x8251, 0x8256, 0x825c, 0x8260, 0x8263,
-  0x8267, 0x826d, 0x8274, 0x827b, 0x827d, 0x827f, 0x8280, 0x8281,
-  0x8283, 0x8284, 0x8287, 0x8289, 0x828a, 0x828e, 0x8291, 0x8294,
-  0x8296, 0x8298, 0x829a, 0x829b, 0x82a0, 0x82a1, 0x82a3, 0x82a4,
-  0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ae, 0x82b0, 0x82b2, 0x82b4,
-  0x82b7, 0x82ba, 0x82bc, 0x82be, 0x82bf, 0x82c6, 0x82d0, 0x82d5,
-  0x82da, 0x82e0, 0x82e2, 0x82e4, 0x82e8, 0x82ea, 0x82ed, 0x82ef,
-  0x82f6, 0x82f7, 0x82fd, 0x82fe, 0x8300, 0x8301, 0x8307, 0x8308,
-  0x830a, 0x830b, 0x8354, 0x831b, 0x831d, 0x831e, 0x831f, 0x8321,
-  0x8322, 0x832c, 0x832d, 0x832e, 0x8330, 0x8333, 0x8337, 0x833a,
-  0x833c, 0x833d, 0x8342, 0x8343, 0x8344, 0x8347, 0x834d, 0x834e,
-  0x8351, 0x8355, 0x8356, 0x8357, 0x8370, 0x8378,
-  /* 0x58 */
-  0x837d, 0x837f, 0x8380, 0x8382, 0x8384, 0x8386, 0x838d, 0x8392,
-  0x8394, 0x8395, 0x8398, 0x8399, 0x839b, 0x839c, 0x839d, 0x83a6,
-  0x83a7, 0x83a9, 0x83ac, 0x83be, 0x83bf, 0x83c0, 0x83c7, 0x83c9,
-  0x83cf, 0x83d0, 0x83d1, 0x83d4, 0x83dd, 0x8353, 0x83e8, 0x83ea,
-  0x83f6, 0x83f8, 0x83f9, 0x83fc, 0x8401, 0x8406, 0x840a, 0x840f,
-  0x8411, 0x8415, 0x8419, 0x83ad, 0x842f, 0x8439, 0x8445, 0x8447,
-  0x8448, 0x844a, 0x844d, 0x844f, 0x8451, 0x8452, 0x8456, 0x8458,
-  0x8459, 0x845a, 0x845c, 0x8460, 0x8464, 0x8465, 0x8467, 0x846a,
-  0x8470, 0x8473, 0x8474, 0x8476, 0x8478, 0x847c, 0x847d, 0x8481,
-  0x8485, 0x8492, 0x8493, 0x8495, 0x849e, 0x84a6, 0x84a8, 0x84a9,
-  0x84aa, 0x84af, 0x84b1, 0x84b4, 0x84ba, 0x84bd, 0x84be, 0x84c0,
-  0x84c2, 0x84c7, 0x84c8, 0x84cc, 0x84cf, 0x84d3,
-  /* 0x59 */
-  0x84dc, 0x84e7, 0x84ea, 0x84ef, 0x84f0, 0x84f1, 0x84f2, 0x84f7,
-  0x8532, 0x84fa, 0x84fb, 0x84fd, 0x8502, 0x8503, 0x8507, 0x850c,
-  0x850e, 0x8510, 0x851c, 0x851e, 0x8522, 0x8523, 0x8524, 0x8525,
-  0x8527, 0x852a, 0x852b, 0x852f, 0x8533, 0x8534, 0x8536, 0x853f,
-  0x8546, 0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8556, 0x8559,
-  0x855c, 0x855d, 0x855e, 0x855f, 0x8560, 0x8561, 0x8562, 0x8564,
-  0x856b, 0x856f, 0x8579, 0x857a, 0x857b, 0x857d, 0x857f, 0x8581,
-  0x8585, 0x8586, 0x8589, 0x858b, 0x858c, 0x858f, 0x8593, 0x8598,
-  0x859d, 0x859f, 0x85a0, 0x85a2, 0x85a5, 0x85a7, 0x85b4, 0x85b6,
-  0x85b7, 0x85b8, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c2, 0x85c7,
-  0x85ca, 0x85cb, 0x85ce, 0x85ad, 0x85d8, 0x85da, 0x85df, 0x85e0,
-  0x85e6, 0x85e8, 0x85ed, 0x85f3, 0x85f6, 0x85fc,
-  /* 0x5a */
-  0x85ff, 0x8600, 0x8604, 0x8605, 0x860d, 0x860e, 0x8610, 0x8611,
-  0x8612, 0x8618, 0x8619, 0x861b, 0x861e, 0x8621, 0x8627, 0x8629,
-  0x8636, 0x8638, 0x863a, 0x863c, 0x863d, 0x8640, 0x8642, 0x8646,
-  0x8652, 0x8653, 0x8656, 0x8657, 0x8658, 0x8659, 0x865d, 0x8660,
-  0x8661, 0x8662, 0x8663, 0x8664, 0x8669, 0x866c, 0x866f, 0x8675,
-  0x8676, 0x8677, 0x867a, 0x868d, 0x8691, 0x8696, 0x8698, 0x869a,
-  0x869c, 0x86a1, 0x86a6, 0x86a7, 0x86a8, 0x86ad, 0x86b1, 0x86b3,
-  0x86b4, 0x86b5, 0x86b7, 0x86b8, 0x86b9, 0x86bf, 0x86c0, 0x86c1,
-  0x86c3, 0x86c5, 0x86d1, 0x86d2, 0x86d5, 0x86d7, 0x86da, 0x86dc,
-  0x86e0, 0x86e3, 0x86e5, 0x86e7, 0x8688, 0x86fa, 0x86fc, 0x86fd,
-  0x8704, 0x8705, 0x8707, 0x870b, 0x870e, 0x870f, 0x8710, 0x8713,
-  0x8714, 0x8719, 0x871e, 0x871f, 0x8721, 0x8723,
-  /* 0x5b */
-  0x8728, 0x872e, 0x872f, 0x8731, 0x8732, 0x8739, 0x873a, 0x873c,
-  0x873d, 0x873e, 0x8740, 0x8743, 0x8745, 0x874d, 0x8758, 0x875d,
-  0x8761, 0x8764, 0x8765, 0x876f, 0x8771, 0x8772, 0x877b, 0x8783,
-  0x8784, 0x8785, 0x8786, 0x8787, 0x8788, 0x8789, 0x878b, 0x878c,
-  0x8790, 0x8793, 0x8795, 0x8797, 0x8798, 0x8799, 0x879e, 0x87a0,
-  0x87a3, 0x87a7, 0x87ac, 0x87ad, 0x87ae, 0x87b1, 0x87b5, 0x87be,
-  0x87bf, 0x87c1, 0x87c8, 0x87c9, 0x87ca, 0x87ce, 0x87d5, 0x87d6,
-  0x87d9, 0x87da, 0x87dc, 0x87df, 0x87e2, 0x87e3, 0x87e4, 0x87ea,
-  0x87eb, 0x87ed, 0x87f1, 0x87f3, 0x87f8, 0x87fa, 0x87ff, 0x8801,
-  0x8803, 0x8806, 0x8809, 0x880a, 0x880b, 0x8810, 0x8819, 0x8812,
-  0x8813, 0x8814, 0x8818, 0x881a, 0x881b, 0x881c, 0x881e, 0x881f,
-  0x8828, 0x882d, 0x882e, 0x8830, 0x8832, 0x8835,
-  /* 0x5c */
-  0x883a, 0x883c, 0x8841, 0x8843, 0x8845, 0x8848, 0x8849, 0x884a,
-  0x884b, 0x884e, 0x8851, 0x8855, 0x8856, 0x8858, 0x885a, 0x885c,
-  0x885f, 0x8860, 0x8864, 0x8869, 0x8871, 0x8879, 0x887b, 0x8880,
-  0x8898, 0x889a, 0x889b, 0x889c, 0x889f, 0x88a0, 0x88a8, 0x88aa,
-  0x88ba, 0x88bd, 0x88be, 0x88c0, 0x88ca, 0x88cb, 0x88cc, 0x88cd,
-  0x88ce, 0x88d1, 0x88d2, 0x88d3, 0x88db, 0x88de, 0x88e7, 0x88ef,
-  0x88f0, 0x88f1, 0x88f5, 0x88f7, 0x8901, 0x8906, 0x890d, 0x890e,
-  0x890f, 0x8915, 0x8916, 0x8918, 0x8919, 0x891a, 0x891c, 0x8920,
-  0x8926, 0x8927, 0x8928, 0x8930, 0x8931, 0x8932, 0x8935, 0x8939,
-  0x893a, 0x893e, 0x8940, 0x8942, 0x8945, 0x8946, 0x8949, 0x894f,
-  0x8952, 0x8957, 0x895a, 0x895b, 0x895c, 0x8961, 0x8962, 0x8963,
-  0x896b, 0x896e, 0x8970, 0x8973, 0x8975, 0x897a,
-  /* 0x5d */
-  0x897b, 0x897c, 0x897d, 0x8989, 0x898d, 0x8990, 0x8994, 0x8995,
-  0x899b, 0x899c, 0x899f, 0x89a0, 0x89a5, 0x89b0, 0x89b4, 0x89b5,
-  0x89b6, 0x89b7, 0x89bc, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8,
-  0x89e5, 0x89e9, 0x89eb, 0x89ed, 0x89f1, 0x89f3, 0x89f6, 0x89f9,
-  0x89fd, 0x89ff, 0x8a04, 0x8a05, 0x8a07, 0x8a0f, 0x8a11, 0x8a12,
-  0x8a14, 0x8a15, 0x8a1e, 0x8a20, 0x8a22, 0x8a24, 0x8a26, 0x8a2b,
-  0x8a2c, 0x8a2f, 0x8a35, 0x8a37, 0x8a3d, 0x8a3e, 0x8a40, 0x8a43,
-  0x8a45, 0x8a47, 0x8a49, 0x8a4d, 0x8a4e, 0x8a53, 0x8a56, 0x8a57,
-  0x8a58, 0x8a5c, 0x8a5d, 0x8a61, 0x8a65, 0x8a67, 0x8a75, 0x8a76,
-  0x8a77, 0x8a79, 0x8a7a, 0x8a7b, 0x8a7e, 0x8a7f, 0x8a80, 0x8a83,
-  0x8a86, 0x8a8b, 0x8a8f, 0x8a90, 0x8a92, 0x8a96, 0x8a97, 0x8a99,
-  0x8a9f, 0x8aa7, 0x8aa9, 0x8aae, 0x8aaf, 0x8ab3,
-  /* 0x5e */
-  0x8ab6, 0x8ab7, 0x8abb, 0x8abe, 0x8ac3, 0x8ac6, 0x8ac8, 0x8ac9,
-  0x8aca, 0x8ad1, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad7, 0x8add, 0x8adf,
-  0x8aec, 0x8af0, 0x8af4, 0x8af5, 0x8af6, 0x8afc, 0x8aff, 0x8b05,
-  0x8b06, 0x8b0b, 0x8b11, 0x8b1c, 0x8b1e, 0x8b1f, 0x8b0a, 0x8b2d,
-  0x8b30, 0x8b37, 0x8b3c, 0x8b42, 0x8b43, 0x8b44, 0x8b45, 0x8b46,
-  0x8b48, 0x8b52, 0x8b53, 0x8b54, 0x8b59, 0x8b4d, 0x8b5e, 0x8b63,
-  0x8b6d, 0x8b76, 0x8b78, 0x8b79, 0x8b7c, 0x8b7e, 0x8b81, 0x8b84,
-  0x8b85, 0x8b8b, 0x8b8d, 0x8b8f, 0x8b94, 0x8b95, 0x8b9c, 0x8b9e,
-  0x8b9f, 0x8c38, 0x8c39, 0x8c3d, 0x8c3e, 0x8c45, 0x8c47, 0x8c49,
-  0x8c4b, 0x8c4f, 0x8c51, 0x8c53, 0x8c54, 0x8c57, 0x8c58, 0x8c5b,
-  0x8c5d, 0x8c59, 0x8c63, 0x8c64, 0x8c66, 0x8c68, 0x8c69, 0x8c6d,
-  0x8c73, 0x8c75, 0x8c76, 0x8c7b, 0x8c7e, 0x8c86,
-  /* 0x5f */
-  0x8c87, 0x8c8b, 0x8c90, 0x8c92, 0x8c93, 0x8c99, 0x8c9b, 0x8c9c,
-  0x8ca4, 0x8cb9, 0x8cba, 0x8cc5, 0x8cc6, 0x8cc9, 0x8ccb, 0x8ccf,
-  0x8cd6, 0x8cd5, 0x8cd9, 0x8cdd, 0x8ce1, 0x8ce8, 0x8cec, 0x8cef,
-  0x8cf0, 0x8cf2, 0x8cf5, 0x8cf7, 0x8cf8, 0x8cfe, 0x8cff, 0x8d01,
-  0x8d03, 0x8d09, 0x8d12, 0x8d17, 0x8d1b, 0x8d65, 0x8d69, 0x8d6c,
-  0x8d6e, 0x8d7f, 0x8d82, 0x8d84, 0x8d88, 0x8d8d, 0x8d90, 0x8d91,
-  0x8d95, 0x8d9e, 0x8d9f, 0x8da0, 0x8da6, 0x8dab, 0x8dac, 0x8daf,
-  0x8db2, 0x8db5, 0x8db7, 0x8db9, 0x8dbb, 0x8dc0, 0x8dc5, 0x8dc6,
-  0x8dc7, 0x8dc8, 0x8dca, 0x8dce, 0x8dd1, 0x8dd4, 0x8dd5, 0x8dd7,
-  0x8dd9, 0x8de4, 0x8de5, 0x8de7, 0x8dec, 0x8df0, 0x8dbc, 0x8df1,
-  0x8df2, 0x8df4, 0x8dfd, 0x8e01, 0x8e04, 0x8e05, 0x8e06, 0x8e0b,
-  0x8e11, 0x8e14, 0x8e16, 0x8e20, 0x8e21, 0x8e22,
-  /* 0x60 */
-  0x8e23, 0x8e26, 0x8e27, 0x8e31, 0x8e33, 0x8e36, 0x8e37, 0x8e38,
-  0x8e39, 0x8e3d, 0x8e40, 0x8e41, 0x8e4b, 0x8e4d, 0x8e4e, 0x8e4f,
-  0x8e54, 0x8e5b, 0x8e5c, 0x8e5d, 0x8e5e, 0x8e61, 0x8e62, 0x8e69,
-  0x8e6c, 0x8e6d, 0x8e6f, 0x8e70, 0x8e71, 0x8e79, 0x8e7a, 0x8e7b,
-  0x8e82, 0x8e83, 0x8e89, 0x8e90, 0x8e92, 0x8e95, 0x8e9a, 0x8e9b,
-  0x8e9d, 0x8e9e, 0x8ea2, 0x8ea7, 0x8ea9, 0x8ead, 0x8eae, 0x8eb3,
-  0x8eb5, 0x8eba, 0x8ebb, 0x8ec0, 0x8ec1, 0x8ec3, 0x8ec4, 0x8ec7,
-  0x8ecf, 0x8ed1, 0x8ed4, 0x8edc, 0x8ee8, 0x8eee, 0x8ef0, 0x8ef1,
-  0x8ef7, 0x8ef9, 0x8efa, 0x8eed, 0x8f00, 0x8f02, 0x8f07, 0x8f08,
-  0x8f0f, 0x8f10, 0x8f16, 0x8f17, 0x8f18, 0x8f1e, 0x8f20, 0x8f21,
-  0x8f23, 0x8f25, 0x8f27, 0x8f28, 0x8f2c, 0x8f2d, 0x8f2e, 0x8f34,
-  0x8f35, 0x8f36, 0x8f37, 0x8f3a, 0x8f40, 0x8f41,
-  /* 0x61 */
-  0x8f43, 0x8f47, 0x8f4f, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55,
-  0x8f58, 0x8f5d, 0x8f5e, 0x8f65, 0x8f9d, 0x8fa0, 0x8fa1, 0x8fa4,
-  0x8fa5, 0x8fa6, 0x8fb5, 0x8fb6, 0x8fb8, 0x8fbe, 0x8fc0, 0x8fc1,
-  0x8fc6, 0x8fca, 0x8fcb, 0x8fcd, 0x8fd0, 0x8fd2, 0x8fd3, 0x8fd5,
-  0x8fe0, 0x8fe3, 0x8fe4, 0x8fe8, 0x8fee, 0x8ff1, 0x8ff5, 0x8ff6,
-  0x8ffb, 0x8ffe, 0x9002, 0x9004, 0x9008, 0x900c, 0x9018, 0x901b,
-  0x9028, 0x9029, 0x902f, 0x902a, 0x902c, 0x902d, 0x9033, 0x9034,
-  0x9037, 0x903f, 0x9043, 0x9044, 0x904c, 0x905b, 0x905d, 0x9062,
-  0x9066, 0x9067, 0x906c, 0x9070, 0x9074, 0x9079, 0x9085, 0x9088,
-  0x908b, 0x908c, 0x908e, 0x9090, 0x9095, 0x9097, 0x9098, 0x9099,
-  0x909b, 0x90a0, 0x90a1, 0x90a2, 0x90a5, 0x90b0, 0x90b2, 0x90b3,
-  0x90b4, 0x90b6, 0x90bd, 0x90cc, 0x90be, 0x90c3,
-  /* 0x62 */
-  0x90c4, 0x90c5, 0x90c7, 0x90c8, 0x90d5, 0x90d7, 0x90d8, 0x90d9,
-  0x90dc, 0x90dd, 0x90df, 0x90e5, 0x90d2, 0x90f6, 0x90eb, 0x90ef,
-  0x90f0, 0x90f4, 0x90fe, 0x90ff, 0x9100, 0x9104, 0x9105, 0x9106,
-  0x9108, 0x910d, 0x9110, 0x9114, 0x9116, 0x9117, 0x9118, 0x911a,
-  0x911c, 0x911e, 0x9120, 0x9125, 0x9122, 0x9123, 0x9127, 0x9129,
-  0x912e, 0x912f, 0x9131, 0x9134, 0x9136, 0x9137, 0x9139, 0x913a,
-  0x913c, 0x913d, 0x9143, 0x9147, 0x9148, 0x914f, 0x9153, 0x9157,
-  0x9159, 0x915a, 0x915b, 0x9161, 0x9164, 0x9167, 0x916d, 0x9174,
-  0x9179, 0x917a, 0x917b, 0x9181, 0x9183, 0x9185, 0x9186, 0x918a,
-  0x918e, 0x9191, 0x9193, 0x9194, 0x9195, 0x9198, 0x919e, 0x91a1,
-  0x91a6, 0x91a8, 0x91ac, 0x91ad, 0x91ae, 0x91b0, 0x91b1, 0x91b2,
-  0x91b3, 0x91b6, 0x91bb, 0x91bc, 0x91bd, 0x91bf,
-  /* 0x63 */
-  0x91c2, 0x91c3, 0x91c5, 0x91d3, 0x91d4, 0x91d7, 0x91d9, 0x91da,
-  0x91de, 0x91e4, 0x91e5, 0x91e9, 0x91ea, 0x91ec, 0x91ed, 0x91ee,
-  0x91ef, 0x91f0, 0x91f1, 0x91f7, 0x91f9, 0x91fb, 0x91fd, 0x9200,
-  0x9201, 0x9204, 0x9205, 0x9206, 0x9207, 0x9209, 0x920a, 0x920c,
-  0x9210, 0x9212, 0x9213, 0x9216, 0x9218, 0x921c, 0x921d, 0x9223,
-  0x9224, 0x9225, 0x9226, 0x9228, 0x922e, 0x922f, 0x9230, 0x9233,
-  0x9235, 0x9236, 0x9238, 0x9239, 0x923a, 0x923c, 0x923e, 0x9240,
-  0x9242, 0x9243, 0x9246, 0x9247, 0x924a, 0x924d, 0x924e, 0x924f,
-  0x9251, 0x9258, 0x9259, 0x925c, 0x925d, 0x9260, 0x9261, 0x9265,
-  0x9267, 0x9268, 0x9269, 0x926e, 0x926f, 0x9270, 0x9275, 0x9276,
-  0x9277, 0x9278, 0x9279, 0x927b, 0x927c, 0x927d, 0x927f, 0x9288,
-  0x9289, 0x928a, 0x928d, 0x928e, 0x9292, 0x9297,
-  /* 0x64 */
-  0x9299, 0x929f, 0x92a0, 0x92a4, 0x92a5, 0x92a7, 0x92a8, 0x92ab,
-  0x92af, 0x92b2, 0x92b6, 0x92b8, 0x92ba, 0x92bb, 0x92bc, 0x92bd,
-  0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c5, 0x92c6, 0x92c7,
-  0x92c8, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92d0, 0x92d3, 0x92d5,
-  0x92d7, 0x92d8, 0x92d9, 0x92dc, 0x92dd, 0x92df, 0x92e0, 0x92e1,
-  0x92e3, 0x92e5, 0x92e7, 0x92e8, 0x92ec, 0x92ee, 0x92f0, 0x92f9,
-  0x92fb, 0x92ff, 0x9300, 0x9302, 0x9308, 0x930d, 0x9311, 0x9314,
-  0x9315, 0x931c, 0x931d, 0x931e, 0x931f, 0x9321, 0x9324, 0x9325,
-  0x9327, 0x9329, 0x932a, 0x9333, 0x9334, 0x9336, 0x9337, 0x9347,
-  0x9348, 0x9349, 0x9350, 0x9351, 0x9352, 0x9355, 0x9357, 0x9358,
-  0x935a, 0x935e, 0x9364, 0x9365, 0x9367, 0x9369, 0x936a, 0x936d,
-  0x936f, 0x9370, 0x9371, 0x9373, 0x9374, 0x9376,
-  /* 0x65 */
-  0x937a, 0x937d, 0x937f, 0x9380, 0x9381, 0x9382, 0x9388, 0x938a,
-  0x938b, 0x938d, 0x938f, 0x9392, 0x9395, 0x9398, 0x939b, 0x939e,
-  0x93a1, 0x93a3, 0x93a4, 0x93a6, 0x93a8, 0x93ab, 0x93b4, 0x93b5,
-  0x93b6, 0x93ba, 0x93a9, 0x93c1, 0x93c4, 0x93c5, 0x93c6, 0x93c7,
-  0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93d3, 0x93d9, 0x93dc,
-  0x93de, 0x93df, 0x93e2, 0x93e6, 0x93e7, 0x93f9, 0x93f7, 0x93f8,
-  0x93fa, 0x93fb, 0x93fd, 0x9401, 0x9402, 0x9404, 0x9408, 0x9409,
-  0x940d, 0x940e, 0x940f, 0x9415, 0x9416, 0x9417, 0x941f, 0x942e,
-  0x942f, 0x9431, 0x9432, 0x9433, 0x9434, 0x943b, 0x943f, 0x943d,
-  0x9443, 0x9445, 0x9448, 0x944a, 0x944c, 0x9455, 0x9459, 0x945c,
-  0x945f, 0x9461, 0x9463, 0x9468, 0x946b, 0x946d, 0x946e, 0x946f,
-  0x9471, 0x9472, 0x9484, 0x9483, 0x9578, 0x9579,
-  /* 0x66 */
-  0x957e, 0x9584, 0x9588, 0x958c, 0x958d, 0x958e, 0x959d, 0x959e,
-  0x959f, 0x95a1, 0x95a6, 0x95a9, 0x95ab, 0x95ac, 0x95b4, 0x95b6,
-  0x95ba, 0x95bd, 0x95bf, 0x95c6, 0x95c8, 0x95c9, 0x95cb, 0x95d0,
-  0x95d1, 0x95d2, 0x95d3, 0x95d9, 0x95da, 0x95dd, 0x95de, 0x95df,
-  0x95e0, 0x95e4, 0x95e6, 0x961d, 0x961e, 0x9622, 0x9624, 0x9625,
-  0x9626, 0x962c, 0x9631, 0x9633, 0x9637, 0x9638, 0x9639, 0x963a,
-  0x963c, 0x963d, 0x9641, 0x9652, 0x9654, 0x9656, 0x9657, 0x9658,
-  0x9661, 0x966e, 0x9674, 0x967b, 0x967c, 0x967e, 0x967f, 0x9681,
-  0x9682, 0x9683, 0x9684, 0x9689, 0x9691, 0x9696, 0x969a, 0x969d,
-  0x969f, 0x96a4, 0x96a5, 0x96a6, 0x96a9, 0x96ae, 0x96af, 0x96b3,
-  0x96ba, 0x96ca, 0x96d2, 0x5db2, 0x96d8, 0x96da, 0x96dd, 0x96de,
-  0x96df, 0x96e9, 0x96ef, 0x96f1, 0x96fa, 0x9702,
-  /* 0x67 */
-  0x9703, 0x9705, 0x9709, 0x971a, 0x971b, 0x971d, 0x9721, 0x9722,
-  0x9723, 0x9728, 0x9731, 0x9733, 0x9741, 0x9743, 0x974a, 0x974e,
-  0x974f, 0x9755, 0x9757, 0x9758, 0x975a, 0x975b, 0x9763, 0x9767,
-  0x976a, 0x976e, 0x9773, 0x9776, 0x9777, 0x9778, 0x977b, 0x977d,
-  0x977f, 0x9780, 0x9789, 0x9795, 0x9796, 0x9797, 0x9799, 0x979a,
-  0x979e, 0x979f, 0x97a2, 0x97ac, 0x97ae, 0x97b1, 0x97b2, 0x97b5,
-  0x97b6, 0x97b8, 0x97b9, 0x97ba, 0x97bc, 0x97be, 0x97bf, 0x97c1,
-  0x97c4, 0x97c5, 0x97c7, 0x97c9, 0x97ca, 0x97cc, 0x97cd, 0x97ce,
-  0x97d0, 0x97d1, 0x97d4, 0x97d7, 0x97d8, 0x97d9, 0x97dd, 0x97de,
-  0x97e0, 0x97db, 0x97e1, 0x97e4, 0x97ef, 0x97f1, 0x97f4, 0x97f7,
-  0x97f8, 0x97fa, 0x9807, 0x980a, 0x9819, 0x980d, 0x980e, 0x9814,
-  0x9816, 0x981c, 0x981e, 0x9820, 0x9823, 0x9826,
-  /* 0x68 */
-  0x982b, 0x982e, 0x982f, 0x9830, 0x9832, 0x9833, 0x9835, 0x9825,
-  0x983e, 0x9844, 0x9847, 0x984a, 0x9851, 0x9852, 0x9853, 0x9856,
-  0x9857, 0x9859, 0x985a, 0x9862, 0x9863, 0x9865, 0x9866, 0x986a,
-  0x986c, 0x98ab, 0x98ad, 0x98ae, 0x98b0, 0x98b4, 0x98b7, 0x98b8,
-  0x98ba, 0x98bb, 0x98bf, 0x98c2, 0x98c5, 0x98c8, 0x98cc, 0x98e1,
-  0x98e3, 0x98e5, 0x98e6, 0x98e7, 0x98ea, 0x98f3, 0x98f6, 0x9902,
-  0x9907, 0x9908, 0x9911, 0x9915, 0x9916, 0x9917, 0x991a, 0x991b,
-  0x991c, 0x991f, 0x9922, 0x9926, 0x9927, 0x992b, 0x9931, 0x9932,
-  0x9933, 0x9934, 0x9935, 0x9939, 0x993a, 0x993b, 0x993c, 0x9940,
-  0x9941, 0x9946, 0x9947, 0x9948, 0x994d, 0x994e, 0x9954, 0x9958,
-  0x9959, 0x995b, 0x995c, 0x995e, 0x995f, 0x9960, 0x999b, 0x999d,
-  0x999f, 0x99a6, 0x99b0, 0x99b1, 0x99b2, 0x99b5,
-  /* 0x69 */
-  0x99b9, 0x99ba, 0x99bd, 0x99bf, 0x99c3, 0x99c9, 0x99d3, 0x99d4,
-  0x99d9, 0x99da, 0x99dc, 0x99de, 0x99e7, 0x99ea, 0x99eb, 0x99ec,
-  0x99f0, 0x99f4, 0x99f5, 0x99f9, 0x99fd, 0x99fe, 0x9a02, 0x9a03,
-  0x9a04, 0x9a0b, 0x9a0c, 0x9a10, 0x9a11, 0x9a16, 0x9a1e, 0x9a20,
-  0x9a22, 0x9a23, 0x9a24, 0x9a27, 0x9a2d, 0x9a2e, 0x9a33, 0x9a35,
-  0x9a36, 0x9a38, 0x9a47, 0x9a41, 0x9a44, 0x9a4a, 0x9a4b, 0x9a4c,
-  0x9a4e, 0x9a51, 0x9a54, 0x9a56, 0x9a5d, 0x9aaa, 0x9aac, 0x9aae,
-  0x9aaf, 0x9ab2, 0x9ab4, 0x9ab5, 0x9ab6, 0x9ab9, 0x9abb, 0x9abe,
-  0x9abf, 0x9ac1, 0x9ac3, 0x9ac6, 0x9ac8, 0x9ace, 0x9ad0, 0x9ad2,
-  0x9ad5, 0x9ad6, 0x9ad7, 0x9adb, 0x9adc, 0x9ae0, 0x9ae4, 0x9ae5,
-  0x9ae7, 0x9ae9, 0x9aec, 0x9af2, 0x9af3, 0x9af5, 0x9af9, 0x9afa,
-  0x9afd, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b03,
-  /* 0x6a */
-  0x9b04, 0x9b05, 0x9b08, 0x9b09, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e,
-  0x9b10, 0x9b12, 0x9b16, 0x9b19, 0x9b1b, 0x9b1c, 0x9b20, 0x9b26,
-  0x9b2b, 0x9b2d, 0x9b33, 0x9b34, 0x9b35, 0x9b37, 0x9b39, 0x9b3a,
-  0x9b3d, 0x9b48, 0x9b4b, 0x9b4c, 0x9b55, 0x9b56, 0x9b57, 0x9b5b,
-  0x9b5e, 0x9b61, 0x9b63, 0x9b65, 0x9b66, 0x9b68, 0x9b6a, 0x9b6b,
-  0x9b6c, 0x9b6d, 0x9b6e, 0x9b73, 0x9b75, 0x9b77, 0x9b78, 0x9b79,
-  0x9b7f, 0x9b80, 0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b89, 0x9b8a,
-  0x9b8b, 0x9b8d, 0x9b8f, 0x9b90, 0x9b94, 0x9b9a, 0x9b9d, 0x9b9e,
-  0x9ba6, 0x9ba7, 0x9ba9, 0x9bac, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb7,
-  0x9bb8, 0x9bbb, 0x9bbc, 0x9bbe, 0x9bbf, 0x9bc1, 0x9bc7, 0x9bc8,
-  0x9bce, 0x9bd0, 0x9bd7, 0x9bd8, 0x9bdd, 0x9bdf, 0x9be5, 0x9be7,
-  0x9bea, 0x9beb, 0x9bef, 0x9bf3, 0x9bf7, 0x9bf8,
-  /* 0x6b */
-  0x9bf9, 0x9bfa, 0x9bfd, 0x9bff, 0x9c00, 0x9c02, 0x9c0b, 0x9c0f,
-  0x9c11, 0x9c16, 0x9c18, 0x9c19, 0x9c1a, 0x9c1c, 0x9c1e, 0x9c22,
-  0x9c23, 0x9c26, 0x9c27, 0x9c28, 0x9c29, 0x9c2a, 0x9c31, 0x9c35,
-  0x9c36, 0x9c37, 0x9c3d, 0x9c41, 0x9c43, 0x9c44, 0x9c45, 0x9c49,
-  0x9c4a, 0x9c4e, 0x9c4f, 0x9c50, 0x9c53, 0x9c54, 0x9c56, 0x9c58,
-  0x9c5b, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c63, 0x9c69, 0x9c6a, 0x9c5c,
-  0x9c6b, 0x9c68, 0x9c6e, 0x9c70, 0x9c72, 0x9c75, 0x9c77, 0x9c7b,
-  0x9ce6, 0x9cf2, 0x9cf7, 0x9cf9, 0x9d0b, 0x9d02, 0x9d11, 0x9d17,
-  0x9d18, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d2f, 0x9d30, 0x9d32, 0x9d33,
-  0x9d34, 0x9d3a, 0x9d3c, 0x9d45, 0x9d3d, 0x9d42, 0x9d43, 0x9d47,
-  0x9d4a, 0x9d53, 0x9d54, 0x9d5f, 0x9d63, 0x9d62, 0x9d65, 0x9d69,
-  0x9d6a, 0x9d6b, 0x9d70, 0x9d76, 0x9d77, 0x9d7b,
-  /* 0x6c */
-  0x9d7c, 0x9d7e, 0x9d83, 0x9d84, 0x9d86, 0x9d8a, 0x9d8d, 0x9d8e,
-  0x9d92, 0x9d93, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9da1, 0x9daa,
-  0x9dac, 0x9dae, 0x9db1, 0x9db5, 0x9db9, 0x9dbc, 0x9dbf, 0x9dc3,
-  0x9dc7, 0x9dc9, 0x9dca, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dda,
-  0x9dde, 0x9ddf, 0x9de0, 0x9de5, 0x9de7, 0x9de9, 0x9deb, 0x9dee,
-  0x9df0, 0x9df3, 0x9df4, 0x9dfe, 0x9e0a, 0x9e02, 0x9e07, 0x9e0e,
-  0x9e10, 0x9e11, 0x9e12, 0x9e15, 0x9e16, 0x9e19, 0x9e1c, 0x9e1d,
-  0x9e7a, 0x9e7b, 0x9e7c, 0x9e80, 0x9e82, 0x9e83, 0x9e84, 0x9e85,
-  0x9e87, 0x9e8e, 0x9e8f, 0x9e96, 0x9e98, 0x9e9b, 0x9e9e, 0x9ea4,
-  0x9ea8, 0x9eac, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb3, 0x9eb4, 0x9eb5,
-  0x9ec6, 0x9ec8, 0x9ecb, 0x9ed5, 0x9edf, 0x9ee4, 0x9ee7, 0x9eec,
-  0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef5,
-  /* 0x6d */
-  0x9ef8, 0x9eff, 0x9f02, 0x9f03, 0x9f09, 0x9f0f, 0x9f10, 0x9f11,
-  0x9f12, 0x9f14, 0x9f16, 0x9f17, 0x9f19, 0x9f1a, 0x9f1b, 0x9f1f,
-  0x9f22, 0x9f26, 0x9f2a, 0x9f2b, 0x9f2f, 0x9f31, 0x9f32, 0x9f34,
-  0x9f37, 0x9f39, 0x9f3a, 0x9f3c, 0x9f3d, 0x9f3f, 0x9f41, 0x9f43,
-  0x9f44, 0x9f45, 0x9f46, 0x9f47, 0x9f53, 0x9f55, 0x9f56, 0x9f57,
-  0x9f58, 0x9f5a, 0x9f5d, 0x9f5e, 0x9f68, 0x9f69, 0x9f6d, 0x9f6e,
-  0x9f6f, 0x9f70, 0x9f71, 0x9f73, 0x9f75, 0x9f7a, 0x9f7d, 0x9f8f,
-  0x9f90, 0x9f91, 0x9f92, 0x9f94, 0x9f96, 0x9f97, 0x9f9e, 0x9fa1,
-  0x9fa2, 0x9fa3, 0x9fa5,
-};
-
-static int
-jisx0212_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = (s[0] & 0x7F);
-  if ((c1 == 0x22) || (c1 >= 0x26 && c1 <= 0x27) || (c1 >= 0x29 && c1 <= 0x2b) || (c1 >= 0x30 && c1 <= 0x6d)) {
-    if (n >= 2) {
-      unsigned char c2 = (s[1] & 0x7F);
-      if (c2 >= 0x21 && c2 < 0x7f) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        unsigned short wc = 0xfffd;
-        if (i < 470) {
-          if (i < 175)
-            wc = jisx0212_2uni_page22[i-94];
-        } else if (i < 752) {
-          if (i < 658)
-            wc = jisx0212_2uni_page26[i-470];
-        } else if (i < 1410) {
-          if (i < 1027)
-            wc = jisx0212_2uni_page29[i-752];
-        } else {
-          if (i < 7211)
-            wc = jisx0212_2uni_page30[i-1410];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-static const unsigned short jisx0212_2charset[6067] = {
-  0x2237, 0x2242, 0x2270, 0x2243, 0x226d, 0x226c, 0x226e, 0x2234,
-  0x2231, 0x226b, 0x2244, 0x2a22, 0x2a21, 0x2a24, 0x2a2a, 0x2a23,
-  0x2a29, 0x2921, 0x2a2e, 0x2a32, 0x2a31, 0x2a34, 0x2a33, 0x2a40,
-  0x2a3f, 0x2a42, 0x2a41, 0x2a50, 0x2a52, 0x2a51, 0x2a54, 0x2a58,
-  0x2a53, 0x292c, 0x2a63, 0x2a62, 0x2a65, 0x2a64, 0x2a72, 0x2930,
-  0x294e, 0x2b22, 0x2b21, 0x2b24, 0x2b2a, 0x2b23, 0x2b29, 0x2941,
-  0x2b2e, 0x2b32, 0x2b31, 0x2b34, 0x2b33, 0x2b40, 0x2b3f, 0x2b42,
-  0x2b41, 0x2943, 0x2b50, 0x2b52, 0x2b51, 0x2b54, 0x2b58, 0x2b53,
-  0x294c, 0x2b63, 0x2b62, 0x2b65, 0x2b64, 0x2b72, 0x2950, 0x2b73,
-  0x2a27, 0x2b27, 0x2a25, 0x2b25, 0x2a28, 0x2b28, 0x2a2b, 0x2b2b,
-  0x2a2c, 0x2b2c, 0x2a2f, 0x2b2f, 0x2a2d, 0x2b2d, 0x2a30, 0x2b30,
-  0x2922, 0x2942, 0x2a37, 0x2b37, 0x2a36, 0x2b36, 0x2a38, 0x2b38,
-  0x2a35, 0x2b35, 0x2a3a, 0x2b3a, 0x2a3b, 0x2b3b, 0x2a3d, 0x2b3d,
-  0x2a3c, 0x2a3e, 0x2b3e, 0x2924, 0x2944, 0x2a47, 0x2b47, 0x2a45,
-  0x2b45, 0x2a46, 0x2b46, 0x2a44, 0x2945, 0x2926, 0x2946, 0x2a48,
-  0x2b48, 0x2a49, 0x2b49, 0x2947, 0x2a4a, 0x2b4a, 0x2a4c, 0x2b4c,
-  0x2a4b, 0x2b4b, 0x2929, 0x2949, 0x2928, 0x2948, 0x2a4d, 0x2b4d,
-  0x2a4f, 0x2b4f, 0x2a4e, 0x2b4e, 0x294a, 0x292b, 0x294b, 0x2a57,
-  0x2b57, 0x2a56, 0x2b56, 0x292d, 0x294d, 0x2a59, 0x2b59, 0x2a5b,
-  0x2b5b, 0x2a5a, 0x2b5a, 0x2a5c, 0x2b5c, 0x2a5d, 0x2b5d, 0x2a5f,
-  0x2b5f, 0x2a5e, 0x2b5e, 0x2a61, 0x2b61, 0x2a60, 0x2b60, 0x292f,
-  0x294f, 0x2a6c, 0x2b6c, 0x2a69, 0x2b69, 0x2a66, 0x2b66, 0x2a6b,
-  0x2b6b, 0x2a68, 0x2b68, 0x2a6a, 0x2b6a, 0x2a71, 0x2b71, 0x2a74,
-  0x2b74, 0x2a73, 0x2a75, 0x2b75, 0x2a77, 0x2b77, 0x2a76, 0x2b76,
-  0x2a26, 0x2b26, 0x2a43, 0x2b43, 0x2a55, 0x2b55, 0x2a67, 0x2b67,
-  0x2a70, 0x2b70, 0x2a6d, 0x2b6d, 0x2a6f, 0x2b6f, 0x2a6e, 0x2b6e,
-  0x2b39, 0x2230, 0x222f, 0x2232, 0x2236, 0x2235, 0x2233, 0x2238,
-  0x2239, 0x2661, 0x2662, 0x2663, 0x2664, 0x2667, 0x2669, 0x266c,
-  0x2676, 0x2665, 0x266a, 0x2671, 0x2672, 0x2673, 0x2674, 0x267b,
-  0x2678, 0x2675, 0x267a, 0x2677, 0x2679, 0x267c, 0x2742, 0x2743,
-  0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274a, 0x274b,
-  0x274c, 0x274d, 0x274e, 0x2772, 0x2773, 0x2774, 0x2775, 0x2776,
-  0x2777, 0x2778, 0x2779, 0x277a, 0x277b, 0x277c, 0x277d, 0x277e,
-  0x2271, 0x226f, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026,
-  0x3027, 0x3028, 0x3029, 0x302a, 0x302b, 0x302c, 0x302d, 0x302e,
-  0x302f, 0x3030, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x3036,
-  0x3037, 0x3038, 0x3039, 0x303a, 0x303b, 0x303c, 0x303d, 0x303e,
-  0x303f, 0x3040, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046,
-  0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e,
-  0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056,
-  0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e,
-  0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067,
-  0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f,
-  0x3070, 0x305f, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076,
-  0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e,
-  0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128,
-  0x3129, 0x312a, 0x312b, 0x312c, 0x312d, 0x312e, 0x312f, 0x3130,
-  0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138,
-  0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140,
-  0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148,
-  0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150,
-  0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158,
-  0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x3176, 0x315f,
-  0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167,
-  0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f,
-  0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3177, 0x3178,
-  0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x3221, 0x3222,
-  0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0x322a,
-  0x322b, 0x322c, 0x322d, 0x322e, 0x322f, 0x3230, 0x3231, 0x3232,
-  0x3233, 0x3234, 0x3235, 0x3236, 0x3237, 0x3238, 0x3239, 0x323a,
-  0x323b, 0x323c, 0x323d, 0x323e, 0x323f, 0x3240, 0x3241, 0x3242,
-  0x3243, 0x3244, 0x3245, 0x3251, 0x3246, 0x3247, 0x3248, 0x3249,
-  0x324a, 0x324b, 0x324c, 0x324d, 0x324e, 0x324f, 0x3250, 0x3252,
-  0x3253, 0x3254, 0x3255, 0x3256, 0x3257, 0x3258, 0x3259, 0x325a,
-  0x325b, 0x325c, 0x325d, 0x325e, 0x325f, 0x3260, 0x3261, 0x3262,
-  0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326a,
-  0x326b, 0x326c, 0x326d, 0x326e, 0x326f, 0x3270, 0x3271, 0x3272,
-  0x3273, 0x3274, 0x3275, 0x3276, 0x3277, 0x3278, 0x3279, 0x327a,
-  0x327b, 0x327c, 0x327d, 0x327e, 0x3321, 0x3322, 0x3323, 0x3324,
-  0x3325, 0x3326, 0x3327, 0x3328, 0x3329, 0x332a, 0x332b, 0x332c,
-  0x332d, 0x332e, 0x332f, 0x3330, 0x3331, 0x3332, 0x3333, 0x3334,
-  0x3335, 0x3336, 0x3337, 0x3338, 0x3339, 0x333a, 0x333b, 0x333c,
-  0x333d, 0x333e, 0x333f, 0x3340, 0x3341, 0x3342, 0x3343, 0x3344,
-  0x3345, 0x3346, 0x3347, 0x3348, 0x3349, 0x334a, 0x334b, 0x334c,
-  0x334d, 0x334e, 0x334f, 0x3350, 0x3351, 0x3352, 0x3353, 0x3354,
-  0x3355, 0x3356, 0x3357, 0x3358, 0x3359, 0x335a, 0x335b, 0x335c,
-  0x335d, 0x335e, 0x335f, 0x3360, 0x3361, 0x3362, 0x3363, 0x3364,
-  0x3365, 0x3366, 0x3367, 0x3368, 0x3369, 0x336a, 0x336b, 0x336c,
-  0x336d, 0x336e, 0x336f, 0x3370, 0x3371, 0x3372, 0x3373, 0x3374,
-  0x3375, 0x3376, 0x3377, 0x3378, 0x3379, 0x337a, 0x337b, 0x337c,
-  0x337d, 0x337e, 0x3421, 0x3422, 0x3423, 0x3424, 0x3425, 0x3426,
-  0x3427, 0x3428, 0x3429, 0x342a, 0x342b, 0x342c, 0x342d, 0x342e,
-  0x342f, 0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436,
-  0x3438, 0x3437, 0x3439, 0x343a, 0x343b, 0x343c, 0x343d, 0x343e,
-  0x343f, 0x3440, 0x3441, 0x3442, 0x3443, 0x3444, 0x3445, 0x3446,
-  0x3447, 0x3448, 0x3449, 0x344a, 0x344b, 0x344c, 0x344d, 0x344e,
-  0x344f, 0x3450, 0x3451, 0x3452, 0x3453, 0x3454, 0x3455, 0x3456,
-  0x3457, 0x3458, 0x3459, 0x345a, 0x345b, 0x345c, 0x345d, 0x345e,
-  0x345f, 0x3460, 0x3461, 0x3462, 0x3463, 0x3464, 0x3465, 0x3466,
-  0x3467, 0x3468, 0x3469, 0x346a, 0x346b, 0x346c, 0x346d, 0x346e,
-  0x346f, 0x3470, 0x3471, 0x3472, 0x3473, 0x3474, 0x3475, 0x3476,
-  0x3477, 0x3478, 0x3479, 0x347a, 0x347b, 0x347c, 0x347d, 0x347e,
-  0x3521, 0x3522, 0x3523, 0x3524, 0x3525, 0x3526, 0x3527, 0x3528,
-  0x3529, 0x352a, 0x352b, 0x352c, 0x352d, 0x352e, 0x352f, 0x3530,
-  0x3531, 0x3532, 0x3533, 0x3534, 0x3535, 0x3536, 0x3537, 0x3538,
-  0x3539, 0x353a, 0x353b, 0x353c, 0x353d, 0x353e, 0x353f, 0x3540,
-  0x3541, 0x3542, 0x3543, 0x3544, 0x3545, 0x3546, 0x3547, 0x3548,
-  0x3549, 0x354a, 0x354b, 0x354c, 0x354d, 0x354e, 0x354f, 0x3550,
-  0x3551, 0x3552, 0x3553, 0x3554, 0x3555, 0x3556, 0x3557, 0x3558,
-  0x3559, 0x355a, 0x355b, 0x355c, 0x355d, 0x355e, 0x355f, 0x3560,
-  0x3561, 0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567, 0x3568,
-  0x3569, 0x356a, 0x356b, 0x356c, 0x356d, 0x356e, 0x356f, 0x3570,
-  0x3571, 0x3572, 0x3573, 0x3574, 0x3575, 0x3576, 0x3577, 0x3578,
-  0x3579, 0x357a, 0x357b, 0x357c, 0x357d, 0x357e, 0x3621, 0x3622,
-  0x3623, 0x3624, 0x3625, 0x3626, 0x3627, 0x3628, 0x3629, 0x362a,
-  0x362b, 0x362c, 0x362d, 0x362e, 0x362f, 0x3630, 0x3631, 0x3632,
-  0x3633, 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639, 0x363a,
-  0x363b, 0x363c, 0x363d, 0x363e, 0x363f, 0x3640, 0x3641, 0x3642,
-  0x3643, 0x3644, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, 0x364a,
-  0x364b, 0x364c, 0x364d, 0x364e, 0x364f, 0x3650, 0x3651, 0x3652,
-  0x3653, 0x3654, 0x3655, 0x3656, 0x3657, 0x3658, 0x3659, 0x365a,
-  0x365b, 0x365c, 0x365d, 0x365e, 0x365f, 0x3660, 0x3661, 0x3662,
-  0x3663, 0x3664, 0x3665, 0x3666, 0x3667, 0x3668, 0x3669, 0x366a,
-  0x366b, 0x366c, 0x366d, 0x3670, 0x3671, 0x366e, 0x366f, 0x3672,
-  0x3673, 0x3674, 0x3675, 0x3676, 0x3677, 0x3678, 0x3679, 0x367a,
-  0x367b, 0x367d, 0x367e, 0x367c, 0x3721, 0x3722, 0x3723, 0x3724,
-  0x3725, 0x3726, 0x3727, 0x3728, 0x3729, 0x372a, 0x372b, 0x372c,
-  0x372d, 0x372e, 0x372f, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734,
-  0x3735, 0x3736, 0x3737, 0x3738, 0x3739, 0x373a, 0x373b, 0x373c,
-  0x373d, 0x373e, 0x373f, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744,
-  0x3745, 0x3746, 0x3747, 0x3748, 0x3749, 0x374a, 0x374b, 0x374c,
-  0x374d, 0x374e, 0x374f, 0x3750, 0x3751, 0x3752, 0x3753, 0x3754,
-  0x3755, 0x3756, 0x3757, 0x3760, 0x3758, 0x3759, 0x375a, 0x375b,
-  0x375c, 0x375d, 0x375e, 0x375f, 0x3761, 0x3762, 0x3763, 0x3764,
-  0x3765, 0x3766, 0x3767, 0x3768, 0x3769, 0x376a, 0x376b, 0x376c,
-  0x376d, 0x377e, 0x376e, 0x376f, 0x3770, 0x3771, 0x3772, 0x3773,
-  0x3774, 0x3775, 0x3776, 0x3777, 0x3778, 0x3779, 0x377a, 0x377b,
-  0x377c, 0x377d, 0x3821, 0x3822, 0x3823, 0x3824, 0x3825, 0x3826,
-  0x3827, 0x3828, 0x3829, 0x382a, 0x382b, 0x382c, 0x382d, 0x382e,
-  0x382f, 0x3830, 0x3831, 0x3832, 0x3833, 0x3834, 0x3835, 0x3836,
-  0x3837, 0x3838, 0x3839, 0x383a, 0x383b, 0x383c, 0x383d, 0x383e,
-  0x383f, 0x3840, 0x3841, 0x3842, 0x3843, 0x3844, 0x3845, 0x3846,
-  0x3847, 0x3848, 0x3849, 0x384a, 0x384b, 0x384c, 0x384d, 0x384e,
-  0x3850, 0x3851, 0x384f, 0x3852, 0x3853, 0x3854, 0x3855, 0x3856,
-  0x3857, 0x3858, 0x3859, 0x385a, 0x385b, 0x385c, 0x385d, 0x385e,
-  0x385f, 0x3860, 0x3861, 0x3862, 0x3863, 0x3864, 0x3865, 0x3867,
-  0x3868, 0x3869, 0x386a, 0x386b, 0x386c, 0x386d, 0x386e, 0x386f,
-  0x3870, 0x3871, 0x3872, 0x3873, 0x3874, 0x3875, 0x3876, 0x3877,
-  0x3878, 0x3879, 0x387a, 0x387b, 0x387c, 0x387d, 0x387e, 0x3921,
-  0x3922, 0x3923, 0x3924, 0x3925, 0x3926, 0x3927, 0x3928, 0x3929,
-  0x392a, 0x392b, 0x392c, 0x392d, 0x392e, 0x392f, 0x3930, 0x3931,
-  0x3932, 0x3933, 0x3934, 0x3935, 0x3936, 0x3937, 0x3938, 0x3939,
-  0x393a, 0x393b, 0x393c, 0x393d, 0x393e, 0x393f, 0x3940, 0x3941,
-  0x3942, 0x3943, 0x3944, 0x3945, 0x3946, 0x3947, 0x3948, 0x3949,
-  0x394a, 0x394b, 0x394c, 0x394d, 0x394e, 0x394f, 0x3950, 0x3951,
-  0x3952, 0x3953, 0x3954, 0x3955, 0x3956, 0x3957, 0x3958, 0x3959,
-  0x395a, 0x395b, 0x395c, 0x395d, 0x395e, 0x395f, 0x3960, 0x3961,
-  0x3962, 0x3963, 0x3964, 0x3965, 0x3966, 0x3967, 0x3968, 0x3969,
-  0x396a, 0x396b, 0x396c, 0x396d, 0x396e, 0x396f, 0x3970, 0x3971,
-  0x3972, 0x3973, 0x3974, 0x3975, 0x3976, 0x3977, 0x3978, 0x3979,
-  0x397a, 0x397b, 0x397c, 0x397d, 0x397e, 0x3a21, 0x3a22, 0x3a23,
-  0x3a24, 0x3a25, 0x3a26, 0x3a27, 0x3a28, 0x3a29, 0x3a2a, 0x3a2b,
-  0x3a2c, 0x3a2d, 0x3a2e, 0x3a2f, 0x3a30, 0x3a31, 0x3a33, 0x3a34,
-  0x3a35, 0x3a36, 0x3a37, 0x3a38, 0x3a32, 0x3a39, 0x3a3a, 0x3a3b,
-  0x3a3c, 0x3a3d, 0x3a3e, 0x3a3f, 0x3a40, 0x3a41, 0x3a42, 0x3a43,
-  0x3a44, 0x3a45, 0x3a46, 0x3a47, 0x3a48, 0x3a49, 0x3a4a, 0x3a4b,
-  0x3a4c, 0x3a4d, 0x3a4e, 0x3a4f, 0x3a50, 0x3a51, 0x3a52, 0x3a53,
-  0x3a54, 0x3a55, 0x3a56, 0x3a57, 0x3a58, 0x3a59, 0x3a5a, 0x3a5b,
-  0x3a5c, 0x3a5d, 0x3a5e, 0x3a5f, 0x3a60, 0x3a61, 0x3a62, 0x3a63,
-  0x3a64, 0x3a65, 0x3a66, 0x3a67, 0x3a68, 0x3a69, 0x3a6a, 0x3a6b,
-  0x3a6c, 0x3a6d, 0x3a6e, 0x3a6f, 0x3a70, 0x3a71, 0x3a72, 0x3a73,
-  0x3a74, 0x3a75, 0x3a76, 0x3a77, 0x3a78, 0x3a79, 0x3a7a, 0x3a7b,
-  0x3a7c, 0x3a7d, 0x3a7e, 0x3b21, 0x3b22, 0x3b23, 0x3b24, 0x3b25,
-  0x3b26, 0x3b27, 0x3b28, 0x3b29, 0x3b2a, 0x3b2b, 0x3b2c, 0x3b2d,
-  0x3b2e, 0x3b2f, 0x3b30, 0x3b31, 0x3b32, 0x3b33, 0x3b34, 0x3b35,
-  0x3b36, 0x3b37, 0x3b38, 0x3b39, 0x3b3a, 0x3b3b, 0x3b3d, 0x3b3c,
-  0x3b3e, 0x3b3f, 0x3b40, 0x3b41, 0x3b42, 0x3b43, 0x3b44, 0x3b45,
-  0x3b47, 0x3b48, 0x3b49, 0x3b4a, 0x3b46, 0x3b4b, 0x3b4c, 0x3b4d,
-  0x3b4e, 0x3b4f, 0x3b50, 0x3b51, 0x3b52, 0x3b53, 0x3b57, 0x3b55,
-  0x3b54, 0x3b56, 0x3b58, 0x3b59, 0x3b5a, 0x3b5b, 0x3b5c, 0x3b5d,
-  0x3b5e, 0x3b5f, 0x3b60, 0x3b61, 0x3b62, 0x3b63, 0x3b64, 0x3b65,
-  0x3b66, 0x3b67, 0x3b68, 0x3b69, 0x3b6a, 0x3b6b, 0x3b6c, 0x3b6d,
-  0x3b6e, 0x3b6f, 0x3b70, 0x3b71, 0x3b72, 0x6674, 0x3b73, 0x3b74,
-  0x3b75, 0x3b76, 0x3b77, 0x3b78, 0x3b7a, 0x3b79, 0x3b7b, 0x3b7c,
-  0x3b7d, 0x3b7e, 0x3c21, 0x3c22, 0x3c23, 0x3c24, 0x3c25, 0x3c26,
-  0x3c27, 0x3c28, 0x3c29, 0x3c2a, 0x3c2b, 0x3c2c, 0x3c2e, 0x3c2d,
-  0x3c2f, 0x3c30, 0x3c31, 0x3c34, 0x3c32, 0x3c33, 0x3c35, 0x3c36,
-  0x3c37, 0x3c38, 0x3c39, 0x3c3a, 0x3c3b, 0x3c3c, 0x3c3d, 0x3c3e,
-  0x3c3f, 0x3c40, 0x3c41, 0x3c42, 0x3c43, 0x3c44, 0x3c45, 0x3c46,
-  0x3c47, 0x3c48, 0x3c49, 0x3c4a, 0x3c4b, 0x3c4c, 0x3c4d, 0x3c4e,
-  0x3c4f, 0x3c50, 0x3c52, 0x3c51, 0x3c53, 0x3c54, 0x3c55, 0x3c56,
-  0x3c57, 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0x3c5c, 0x3c5d, 0x3c5e,
-  0x3c5f, 0x3c60, 0x3c61, 0x3c62, 0x3c63, 0x3c64, 0x3c65, 0x3c66,
-  0x3c67, 0x3c68, 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c6d, 0x3c6e,
-  0x3c6f, 0x3c70, 0x3c71, 0x3c72, 0x3c73, 0x3c74, 0x3c75, 0x3c76,
-  0x3c77, 0x3c78, 0x3c79, 0x3c7a, 0x3c7b, 0x3c7c, 0x3c7d, 0x3c7e,
-  0x3d21, 0x3d22, 0x3d23, 0x3d24, 0x3d25, 0x3d26, 0x3d27, 0x3d28,
-  0x3d29, 0x3d2a, 0x3d2b, 0x3d2c, 0x3d2d, 0x3d2e, 0x3d2f, 0x3d32,
-  0x3d30, 0x3d31, 0x3d33, 0x3d34, 0x3d35, 0x3d36, 0x3d37, 0x3d38,
-  0x3d39, 0x3d3a, 0x3d3b, 0x3d3c, 0x3d3d, 0x3d3e, 0x3d3f, 0x3d40,
-  0x3d41, 0x3d42, 0x3d43, 0x3d44, 0x3d45, 0x3d46, 0x3d47, 0x3d48,
-  0x3d49, 0x3d4a, 0x3d4b, 0x3d4c, 0x3d4d, 0x3d4e, 0x3d4f, 0x3d50,
-  0x3d51, 0x3d52, 0x3d53, 0x3d54, 0x3d55, 0x3d56, 0x3d57, 0x3d58,
-  0x3d59, 0x3d5a, 0x3d5b, 0x3d5c, 0x3d5d, 0x3d5e, 0x3d5f, 0x3d60,
-  0x3d61, 0x3d62, 0x3d63, 0x3d64, 0x3d65, 0x3d66, 0x3d67, 0x3d68,
-  0x3d69, 0x3d6a, 0x3d6b, 0x3d6c, 0x3d6d, 0x3d6e, 0x3d6f, 0x3d70,
-  0x3d71, 0x3d72, 0x3d73, 0x3d74, 0x3d75, 0x3d76, 0x3d77, 0x3d78,
-  0x3d79, 0x3d7a, 0x3d7b, 0x3d7c, 0x3d7d, 0x3d7e, 0x3e21, 0x3e22,
-  0x3e23, 0x3e24, 0x3e25, 0x3e26, 0x3e27, 0x3e28, 0x3e29, 0x3e2a,
-  0x3e2b, 0x3e2c, 0x3e2d, 0x3e2e, 0x3e2f, 0x3e30, 0x3e31, 0x3e32,
-  0x3e33, 0x3e34, 0x3e35, 0x3e36, 0x3e37, 0x3e38, 0x3e39, 0x3e3a,
-  0x3e3b, 0x3e3c, 0x3e3d, 0x3e3e, 0x3e3f, 0x3e40, 0x3e41, 0x3e42,
-  0x3e43, 0x3e44, 0x3e45, 0x3e46, 0x3e47, 0x3e48, 0x3e49, 0x3e4a,
-  0x3e4b, 0x3e4c, 0x3e4d, 0x3e4e, 0x3e4f, 0x3e50, 0x3e51, 0x3e52,
-  0x3e53, 0x3e54, 0x3e55, 0x3e56, 0x3e57, 0x3e58, 0x3e59, 0x3e5a,
-  0x3e5b, 0x3e5c, 0x3e5d, 0x3e5e, 0x3e5f, 0x3e60, 0x3e61, 0x3e62,
-  0x3e63, 0x3e64, 0x3e65, 0x3e66, 0x3e67, 0x3e68, 0x3e69, 0x3e6a,
-  0x3e6b, 0x3e6c, 0x3e6d, 0x3e6e, 0x3e6f, 0x3e70, 0x3e71, 0x3e72,
-  0x3e73, 0x3e74, 0x3e75, 0x3e76, 0x3e77, 0x3e78, 0x3e79, 0x3e7a,
-  0x3e7b, 0x3e7e, 0x3e7c, 0x3e7d, 0x3f21, 0x3f22, 0x3f23, 0x3f24,
-  0x3f25, 0x3f26, 0x3f27, 0x3f28, 0x3f29, 0x3f2a, 0x3f2b, 0x3f2c,
-  0x3f2d, 0x3f2e, 0x3f2f, 0x3f30, 0x3f31, 0x3f32, 0x3f33, 0x3f34,
-  0x3f35, 0x3f36, 0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c,
-  0x3f3d, 0x3f3e, 0x3f3f, 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44,
-  0x3f45, 0x3f46, 0x3f47, 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c,
-  0x3f4d, 0x3f4e, 0x3f4f, 0x3f50, 0x3f51, 0x3f52, 0x3f53, 0x3f54,
-  0x3f55, 0x3f56, 0x3f57, 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 0x3f5c,
-  0x3f5d, 0x3f5e, 0x3f5f, 0x3f60, 0x3f61, 0x3f62, 0x3f63, 0x3f64,
-  0x3f65, 0x3f66, 0x3f67, 0x3f68, 0x3f69, 0x3f6a, 0x3f6b, 0x3f6c,
-  0x3f6d, 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, 0x3f72, 0x3f73, 0x3f74,
-  0x3f75, 0x3f76, 0x3f77, 0x3f78, 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c,
-  0x3f7d, 0x3f7e, 0x4021, 0x4022, 0x4023, 0x4024, 0x4025, 0x4026,
-  0x4027, 0x4028, 0x4029, 0x402a, 0x402b, 0x402c, 0x402d, 0x402e,
-  0x402f, 0x4030, 0x4031, 0x4032, 0x4033, 0x4034, 0x4035, 0x4036,
-  0x4037, 0x4038, 0x4039, 0x403a, 0x403b, 0x403c, 0x403d, 0x403e,
-  0x403f, 0x4040, 0x4041, 0x4042, 0x4043, 0x4044, 0x4045, 0x4046,
-  0x4047, 0x4048, 0x4049, 0x404a, 0x404b, 0x404c, 0x404d, 0x404e,
-  0x404f, 0x4050, 0x4051, 0x4052, 0x4053, 0x4054, 0x4055, 0x4056,
-  0x4057, 0x4058, 0x4059, 0x405a, 0x405b, 0x405c, 0x405d, 0x405e,
-  0x405f, 0x4060, 0x4061, 0x4062, 0x4063, 0x4064, 0x4065, 0x4066,
-  0x4067, 0x4068, 0x4069, 0x406a, 0x406b, 0x406c, 0x406d, 0x406e,
-  0x406f, 0x4070, 0x4071, 0x4072, 0x4073, 0x4074, 0x4075, 0x4076,
-  0x4077, 0x4078, 0x4079, 0x407a, 0x407b, 0x407c, 0x407d, 0x407e,
-  0x4121, 0x4122, 0x4123, 0x4124, 0x4125, 0x4126, 0x4127, 0x4128,
-  0x4129, 0x412a, 0x412b, 0x412c, 0x412d, 0x412e, 0x412f, 0x4130,
-  0x4131, 0x4132, 0x4133, 0x4134, 0x4135, 0x4136, 0x4137, 0x4138,
-  0x4139, 0x413a, 0x413b, 0x413c, 0x413d, 0x413e, 0x413f, 0x4140,
-  0x4141, 0x4142, 0x4143, 0x4144, 0x4145, 0x4146, 0x4147, 0x4148,
-  0x4149, 0x414a, 0x414b, 0x414c, 0x414d, 0x414e, 0x414f, 0x4150,
-  0x4151, 0x4152, 0x4153, 0x4154, 0x4155, 0x4156, 0x4157, 0x4158,
-  0x4159, 0x415a, 0x415b, 0x415c, 0x415d, 0x415e, 0x415f, 0x4160,
-  0x4161, 0x4162, 0x4163, 0x4164, 0x4165, 0x4166, 0x4167, 0x4168,
-  0x4169, 0x416a, 0x416b, 0x416c, 0x416d, 0x416e, 0x416f, 0x4170,
-  0x4171, 0x4172, 0x4173, 0x4174, 0x4175, 0x4176, 0x4177, 0x4178,
-  0x4179, 0x417a, 0x417b, 0x417c, 0x417d, 0x417e, 0x4221, 0x4222,
-  0x4223, 0x4224, 0x4225, 0x4226, 0x4227, 0x4228, 0x4229, 0x422a,
-  0x422b, 0x422c, 0x422d, 0x422e, 0x4230, 0x422f, 0x4231, 0x4232,
-  0x4233, 0x4234, 0x4235, 0x4237, 0x4236, 0x4238, 0x4239, 0x423a,
-  0x423b, 0x423c, 0x423d, 0x423e, 0x4240, 0x4241, 0x4242, 0x4244,
-  0x4245, 0x4247, 0x4248, 0x4249, 0x424a, 0x424c, 0x4243, 0x4246,
-  0x424b, 0x424d, 0x424e, 0x424f, 0x4250, 0x4251, 0x4252, 0x4253,
-  0x4254, 0x4255, 0x4256, 0x4257, 0x4258, 0x4259, 0x425a, 0x425b,
-  0x425c, 0x425d, 0x425e, 0x425f, 0x4260, 0x4261, 0x4262, 0x4263,
-  0x4264, 0x4265, 0x4266, 0x4267, 0x4268, 0x4269, 0x426a, 0x426b,
-  0x426c, 0x426d, 0x423f, 0x426e, 0x426f, 0x4270, 0x4271, 0x4272,
-  0x4273, 0x4274, 0x4275, 0x4276, 0x4277, 0x4278, 0x4279, 0x427a,
-  0x427b, 0x427c, 0x427d, 0x427e, 0x4321, 0x4322, 0x4323, 0x4324,
-  0x4325, 0x4326, 0x4327, 0x4328, 0x4329, 0x432a, 0x432b, 0x432c,
-  0x432d, 0x432e, 0x432f, 0x4330, 0x4331, 0x4332, 0x4333, 0x4334,
-  0x4335, 0x4336, 0x4337, 0x4339, 0x433a, 0x433b, 0x433c, 0x433d,
-  0x433e, 0x433f, 0x4340, 0x4341, 0x4342, 0x4343, 0x4344, 0x4345,
-  0x4346, 0x4347, 0x4348, 0x4338, 0x434a, 0x434b, 0x434c, 0x434d,
-  0x434f, 0x434e, 0x4350, 0x4351, 0x4352, 0x4353, 0x4354, 0x4355,
-  0x4356, 0x4357, 0x4358, 0x4359, 0x435a, 0x435b, 0x4349, 0x435c,
-  0x435d, 0x435e, 0x435f, 0x4360, 0x4361, 0x4362, 0x4363, 0x4364,
-  0x4365, 0x4366, 0x4367, 0x4368, 0x4369, 0x436a, 0x436b, 0x436c,
-  0x436d, 0x436e, 0x436f, 0x4370, 0x4371, 0x4372, 0x4373, 0x4374,
-  0x4375, 0x4376, 0x4377, 0x4378, 0x4379, 0x437a, 0x437b, 0x437c,
-  0x437d, 0x437e, 0x4421, 0x4422, 0x4423, 0x4424, 0x4425, 0x4426,
-  0x4427, 0x4428, 0x4429, 0x442a, 0x442b, 0x442c, 0x442d, 0x442e,
-  0x442f, 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4435, 0x4436,
-  0x4437, 0x4438, 0x4439, 0x443a, 0x443b, 0x443c, 0x443d, 0x443e,
-  0x443f, 0x4440, 0x4441, 0x4442, 0x4443, 0x4444, 0x4445, 0x4446,
-  0x4447, 0x4448, 0x4449, 0x444a, 0x444b, 0x444c, 0x444d, 0x444e,
-  0x444f, 0x4450, 0x4451, 0x4452, 0x4453, 0x4454, 0x4455, 0x4456,
-  0x4457, 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 0x445e,
-  0x445f, 0x4460, 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4466,
-  0x4467, 0x4468, 0x4469, 0x446a, 0x446b, 0x446c, 0x446d, 0x446e,
-  0x446f, 0x4470, 0x4471, 0x4472, 0x4473, 0x4474, 0x4475, 0x4476,
-  0x4477, 0x4478, 0x4479, 0x447a, 0x447b, 0x447c, 0x447d, 0x447e,
-  0x4521, 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527, 0x4528,
-  0x4529, 0x452a, 0x452b, 0x452c, 0x452d, 0x452e, 0x452f, 0x4530,
-  0x4531, 0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537, 0x4538,
-  0x4539, 0x453a, 0x453b, 0x453c, 0x453d, 0x453e, 0x453f, 0x4540,
-  0x4541, 0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, 0x4548,
-  0x4549, 0x454a, 0x454b, 0x454d, 0x454c, 0x454e, 0x454f, 0x4550,
-  0x4551, 0x4552, 0x4553, 0x4554, 0x4555, 0x4556, 0x4557, 0x4558,
-  0x4559, 0x455a, 0x455b, 0x455c, 0x455d, 0x455e, 0x455f, 0x4560,
-  0x4561, 0x4562, 0x4563, 0x4564, 0x4565, 0x4566, 0x4567, 0x4568,
-  0x4569, 0x456a, 0x456b, 0x456c, 0x456d, 0x456e, 0x456f, 0x4570,
-  0x4571, 0x4572, 0x4573, 0x4574, 0x4575, 0x4576, 0x4577, 0x4578,
-  0x4579, 0x457a, 0x457b, 0x457c, 0x457d, 0x457e, 0x4621, 0x4622,
-  0x4623, 0x4624, 0x4625, 0x4626, 0x4627, 0x4628, 0x4629, 0x462a,
-  0x462b, 0x462c, 0x462d, 0x462e, 0x462f, 0x4630, 0x4631, 0x4632,
-  0x4633, 0x4634, 0x4635, 0x4636, 0x4637, 0x4638, 0x4639, 0x463a,
-  0x463b, 0x463c, 0x463d, 0x463e, 0x463f, 0x4640, 0x4641, 0x4642,
-  0x4643, 0x4644, 0x4645, 0x4646, 0x4647, 0x4648, 0x4649, 0x464a,
-  0x464b, 0x464c, 0x464d, 0x464e, 0x464f, 0x4650, 0x4651, 0x4652,
-  0x4653, 0x4654, 0x4655, 0x4656, 0x4657, 0x4658, 0x4659, 0x465a,
-  0x465b, 0x465c, 0x465d, 0x465e, 0x465f, 0x4660, 0x4736, 0x4661,
-  0x4662, 0x4663, 0x4664, 0x4665, 0x4666, 0x4667, 0x4668, 0x4669,
-  0x466a, 0x466b, 0x466c, 0x466d, 0x466e, 0x466f, 0x4670, 0x4671,
-  0x4672, 0x4673, 0x4674, 0x4675, 0x4676, 0x4677, 0x4678, 0x4679,
-  0x467a, 0x467b, 0x467c, 0x467d, 0x467e, 0x4721, 0x4722, 0x4723,
-  0x4724, 0x4725, 0x4726, 0x4727, 0x4728, 0x4729, 0x472a, 0x472b,
-  0x472c, 0x472d, 0x472e, 0x472f, 0x4730, 0x4731, 0x4732, 0x4733,
-  0x4734, 0x4735, 0x4737, 0x4738, 0x4739, 0x473a, 0x473b, 0x473c,
-  0x473d, 0x473e, 0x473f, 0x4740, 0x4741, 0x4742, 0x4743, 0x4744,
-  0x4745, 0x4746, 0x4747, 0x4748, 0x4749, 0x474a, 0x474b, 0x474c,
-  0x474d, 0x474e, 0x474f, 0x4750, 0x4751, 0x4752, 0x4753, 0x4754,
-  0x4755, 0x4756, 0x4757, 0x4758, 0x4759, 0x475a, 0x475b, 0x475c,
-  0x475d, 0x475e, 0x475f, 0x4760, 0x4761, 0x4762, 0x4763, 0x4764,
-  0x4765, 0x4766, 0x4767, 0x4768, 0x4769, 0x476a, 0x476b, 0x476c,
-  0x476d, 0x476e, 0x476f, 0x4770, 0x4771, 0x4772, 0x4773, 0x4774,
-  0x4775, 0x4776, 0x4777, 0x4778, 0x4779, 0x477a, 0x477b, 0x477c,
-  0x477d, 0x477e, 0x4821, 0x4822, 0x4823, 0x4824, 0x4825, 0x4826,
-  0x4827, 0x4828, 0x4829, 0x482a, 0x482b, 0x482c, 0x482d, 0x482e,
-  0x482f, 0x4830, 0x4831, 0x4832, 0x4833, 0x4834, 0x4835, 0x4836,
-  0x4837, 0x4838, 0x4839, 0x483a, 0x483b, 0x483c, 0x483d, 0x483e,
-  0x483f, 0x4840, 0x4841, 0x4842, 0x4843, 0x4844, 0x4845, 0x4846,
-  0x4847, 0x4848, 0x4849, 0x484a, 0x484b, 0x484c, 0x4853, 0x484d,
-  0x484e, 0x484f, 0x4850, 0x4851, 0x4852, 0x4854, 0x4855, 0x4856,
-  0x4857, 0x4858, 0x4859, 0x485a, 0x485b, 0x485c, 0x485d, 0x485e,
-  0x485f, 0x4860, 0x4861, 0x4862, 0x4863, 0x4864, 0x4865, 0x4866,
-  0x4867, 0x4868, 0x4869, 0x486a, 0x486b, 0x486c, 0x486d, 0x486e,
-  0x486f, 0x4870, 0x4871, 0x4872, 0x4873, 0x4874, 0x4875, 0x4876,
-  0x4877, 0x4878, 0x4879, 0x487a, 0x487b, 0x487c, 0x487d, 0x487e,
-  0x4921, 0x4922, 0x4923, 0x4924, 0x4925, 0x4926, 0x4927, 0x4928,
-  0x4929, 0x492a, 0x492b, 0x492c, 0x492d, 0x492e, 0x492f, 0x4930,
-  0x4931, 0x4932, 0x4933, 0x4934, 0x4935, 0x4936, 0x4937, 0x4938,
-  0x4939, 0x493a, 0x493b, 0x493c, 0x4941, 0x493d, 0x493e, 0x493f,
-  0x4940, 0x4942, 0x4943, 0x4944, 0x4945, 0x4946, 0x4947, 0x4948,
-  0x4949, 0x494a, 0x494b, 0x494c, 0x494d, 0x494e, 0x494f, 0x4950,
-  0x4951, 0x4952, 0x4953, 0x4954, 0x4955, 0x4956, 0x4957, 0x4958,
-  0x4959, 0x495a, 0x495b, 0x495c, 0x495d, 0x495e, 0x495f, 0x4960,
-  0x4961, 0x4962, 0x4963, 0x4964, 0x4965, 0x4966, 0x4967, 0x4968,
-  0x4969, 0x496a, 0x496b, 0x496c, 0x496d, 0x496e, 0x496f, 0x4970,
-  0x4971, 0x4972, 0x4973, 0x4974, 0x4975, 0x4976, 0x4977, 0x4978,
-  0x4979, 0x497a, 0x497b, 0x497c, 0x497d, 0x497e, 0x4a21, 0x4a22,
-  0x4a23, 0x4a24, 0x4a25, 0x4a26, 0x4a27, 0x4a28, 0x4a29, 0x4a2a,
-  0x4a2b, 0x4a2c, 0x4a2d, 0x4a2e, 0x4a2f, 0x4a30, 0x4a31, 0x4a32,
-  0x4a33, 0x4a34, 0x4a35, 0x4a36, 0x4a37, 0x4a38, 0x4a39, 0x4a3a,
-  0x4a3b, 0x4a3c, 0x4a3d, 0x4a3e, 0x4a3f, 0x4a40, 0x4a41, 0x4a42,
-  0x4a43, 0x4a44, 0x4a45, 0x4a46, 0x4a47, 0x4a48, 0x4a49, 0x4a4a,
-  0x4a4b, 0x4a4c, 0x4a4d, 0x4a4e, 0x4a4f, 0x4a50, 0x4a51, 0x4a52,
-  0x4a53, 0x4a54, 0x4a55, 0x4a56, 0x4a57, 0x4a58, 0x4a59, 0x4a5a,
-  0x4a5b, 0x4a5c, 0x4a5d, 0x4a5e, 0x4a5f, 0x4a60, 0x4a61, 0x4a62,
-  0x4a63, 0x4a64, 0x4a65, 0x4a66, 0x4a67, 0x4a68, 0x4a69, 0x4a6a,
-  0x4a6b, 0x4a6c, 0x4a6d, 0x4a6e, 0x4a6f, 0x4a70, 0x4a71, 0x4a72,
-  0x4a73, 0x4a74, 0x4a75, 0x4a76, 0x4a77, 0x4a78, 0x4a79, 0x4a7a,
-  0x4a7b, 0x4a7c, 0x4a7d, 0x4a7e, 0x4b21, 0x4b22, 0x4b23, 0x4b24,
-  0x4b25, 0x4b26, 0x4b27, 0x4b28, 0x4b29, 0x4b2a, 0x4b2b, 0x4b2c,
-  0x4b2d, 0x4b2e, 0x4b2f, 0x4b30, 0x4b31, 0x4b32, 0x4b33, 0x4b34,
-  0x4b35, 0x4b36, 0x4b37, 0x4b38, 0x4b39, 0x4b3a, 0x4b3b, 0x4b3c,
-  0x4b3d, 0x4b3e, 0x4b3f, 0x4b40, 0x4b41, 0x4b42, 0x4b43, 0x4b44,
-  0x4b45, 0x4b46, 0x4b47, 0x4b48, 0x4b49, 0x4b4a, 0x4b4b, 0x4b4c,
-  0x4b4d, 0x4b4e, 0x4b4f, 0x4b50, 0x4b51, 0x4b52, 0x4b53, 0x4b54,
-  0x4b55, 0x4b56, 0x4b57, 0x4b58, 0x4b59, 0x4b5a, 0x4b5b, 0x4b5c,
-  0x4b5d, 0x4b5e, 0x4b5f, 0x4b60, 0x4b61, 0x4b62, 0x4b63, 0x4b64,
-  0x4b65, 0x4b66, 0x4b67, 0x4b68, 0x4b69, 0x4b6a, 0x4b6b, 0x4b6c,
-  0x4b6d, 0x4b6e, 0x4b6f, 0x4b70, 0x4b71, 0x4b72, 0x4b73, 0x4b74,
-  0x4b75, 0x4b76, 0x4b77, 0x4b78, 0x4b79, 0x4b7a, 0x4b7b, 0x4b7c,
-  0x4b7d, 0x4b7e, 0x4c21, 0x4c22, 0x4c23, 0x4c24, 0x4c25, 0x4c26,
-  0x4c27, 0x4c28, 0x4c29, 0x4c2a, 0x4c2b, 0x4c2c, 0x4c2d, 0x4c2e,
-  0x4c2f, 0x4c30, 0x4c31, 0x4c32, 0x4c33, 0x4c34, 0x4c35, 0x4c36,
-  0x4c37, 0x4c38, 0x4c39, 0x4c3a, 0x4c3b, 0x4c3c, 0x4c3d, 0x4c3e,
-  0x4c3f, 0x4c40, 0x4c41, 0x4c42, 0x4c43, 0x4c44, 0x4c45, 0x4c46,
-  0x4c47, 0x4c48, 0x4c49, 0x4c4a, 0x4c4b, 0x4c4c, 0x4c4d, 0x4c4e,
-  0x4c4f, 0x4c50, 0x4c51, 0x4c52, 0x4c53, 0x4c54, 0x4c55, 0x4c56,
-  0x4c57, 0x4c58, 0x4c59, 0x4c5a, 0x4c5b, 0x4c5c, 0x4c5d, 0x4c5e,
-  0x4c5f, 0x4c60, 0x4c61, 0x4c62, 0x4c63, 0x4c64, 0x4c65, 0x4c66,
-  0x4c67, 0x4c68, 0x4c69, 0x4c6a, 0x4c6b, 0x4c6c, 0x4c6d, 0x4c6e,
-  0x4c6f, 0x4c70, 0x4c71, 0x4c72, 0x4c73, 0x4c74, 0x4c75, 0x4c76,
-  0x4c77, 0x4c78, 0x4c79, 0x4c7a, 0x4c7b, 0x4c7c, 0x4c7d, 0x4c7e,
-  0x4d21, 0x4d22, 0x4d23, 0x4d24, 0x4d25, 0x4d26, 0x4d27, 0x4d28,
-  0x4d29, 0x4d2a, 0x4d2b, 0x4d2c, 0x4d2d, 0x4d2e, 0x4d2f, 0x4d30,
-  0x4d31, 0x4d32, 0x4d33, 0x4d34, 0x4d35, 0x4d36, 0x4d37, 0x4d38,
-  0x4d39, 0x4d3a, 0x4d3b, 0x4d3c, 0x4d3d, 0x4d3e, 0x4d3f, 0x4d40,
-  0x4d41, 0x4d42, 0x4d43, 0x4d44, 0x4d45, 0x4d46, 0x4d47, 0x4d48,
-  0x4d49, 0x4d4a, 0x4d4b, 0x4d4c, 0x4d4d, 0x4d4e, 0x4d4f, 0x4d50,
-  0x4d51, 0x4d52, 0x4d53, 0x4d54, 0x4d55, 0x4d56, 0x4d57, 0x4d58,
-  0x4d59, 0x4d5a, 0x4d5b, 0x4d5c, 0x4d5d, 0x4d5e, 0x4d5f, 0x4d60,
-  0x4d61, 0x4d62, 0x4d63, 0x4d64, 0x4d65, 0x4d66, 0x4d67, 0x4d68,
-  0x4d69, 0x4d6a, 0x4d6b, 0x4d6c, 0x4d6d, 0x4d6e, 0x4d6f, 0x4d70,
-  0x4d71, 0x4d72, 0x4d73, 0x4d74, 0x4d75, 0x4d76, 0x4d77, 0x4d78,
-  0x4d79, 0x4d7a, 0x4d7b, 0x4d7c, 0x4d7d, 0x4d7e, 0x4e21, 0x4e22,
-  0x4e24, 0x4e25, 0x4e26, 0x4e27, 0x4e28, 0x4e29, 0x4e23, 0x4e2a,
-  0x4e2b, 0x4e2c, 0x4e2d, 0x4e2e, 0x4e2f, 0x4e30, 0x4e31, 0x4e32,
-  0x4e33, 0x4e34, 0x4e35, 0x4e36, 0x4e37, 0x4e38, 0x4e39, 0x4e3a,
-  0x4e3b, 0x4e3c, 0x4e3d, 0x4e3e, 0x4e3f, 0x4e40, 0x4e41, 0x4e42,
-  0x4e43, 0x4e44, 0x4e45, 0x4e46, 0x4e47, 0x4e48, 0x4e49, 0x4e4a,
-  0x4e4b, 0x4e4c, 0x4e4d, 0x4e4e, 0x4e4f, 0x4e50, 0x4e51, 0x4e52,
-  0x4e53, 0x4e54, 0x4e55, 0x4e56, 0x4e57, 0x4e58, 0x4e59, 0x4e5a,
-  0x4e5b, 0x4e5c, 0x4e5d, 0x4e5e, 0x4e5f, 0x4e60, 0x4e61, 0x4e62,
-  0x4e63, 0x4e64, 0x4e65, 0x4e66, 0x4e67, 0x4e68, 0x4e69, 0x4e6a,
-  0x4e6b, 0x4e6c, 0x4e6d, 0x4e6e, 0x4e6f, 0x4e70, 0x4e71, 0x4e72,
-  0x4e73, 0x4e74, 0x4e75, 0x4e76, 0x4e77, 0x4e78, 0x4e79, 0x4e7a,
-  0x4e7b, 0x4e7c, 0x4e7d, 0x4e7e, 0x4f21, 0x4f22, 0x4f23, 0x4f24,
-  0x4f25, 0x4f26, 0x4f27, 0x4f28, 0x4f29, 0x4f2a, 0x4f2b, 0x4f2c,
-  0x4f2d, 0x4f2e, 0x4f2f, 0x4f30, 0x4f31, 0x4f32, 0x4f33, 0x4f34,
-  0x4f35, 0x4f36, 0x4f37, 0x4f38, 0x4f39, 0x4f3a, 0x4f3b, 0x4f3c,
-  0x4f3d, 0x4f3e, 0x4f3f, 0x4f40, 0x4f41, 0x4f42, 0x4f43, 0x4f44,
-  0x4f45, 0x4f46, 0x4f47, 0x4f48, 0x4f49, 0x4f4a, 0x4f4b, 0x4f4c,
-  0x4f4d, 0x4f4e, 0x4f4f, 0x4f50, 0x4f51, 0x4f52, 0x4f53, 0x4f54,
-  0x4f55, 0x4f56, 0x4f57, 0x4f58, 0x4f59, 0x4f5a, 0x4f5b, 0x4f5c,
-  0x4f5d, 0x4f5e, 0x4f5f, 0x4f60, 0x4f61, 0x4f62, 0x4f63, 0x4f64,
-  0x4f65, 0x4f66, 0x4f67, 0x4f68, 0x4f69, 0x4f6a, 0x4f6b, 0x4f6c,
-  0x4f6d, 0x4f6e, 0x4f6f, 0x4f70, 0x4f71, 0x4f72, 0x4f74, 0x4f75,
-  0x4f76, 0x4f73, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, 0x4f7b, 0x4f7c,
-  0x4f7d, 0x4f7e, 0x5021, 0x5022, 0x5023, 0x5024, 0x5025, 0x5026,
-  0x5027, 0x5028, 0x5029, 0x502a, 0x502b, 0x502c, 0x502e, 0x502f,
-  0x5030, 0x5031, 0x502d, 0x5032, 0x5033, 0x5034, 0x5035, 0x5037,
-  0x5038, 0x5039, 0x503a, 0x503b, 0x5036, 0x503c, 0x503d, 0x503e,
-  0x503f, 0x5040, 0x5041, 0x5042, 0x5043, 0x5044, 0x5045, 0x5046,
-  0x5047, 0x5048, 0x5049, 0x504a, 0x504b, 0x504c, 0x504d, 0x504e,
-  0x504f, 0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5055, 0x5056,
-  0x5057, 0x5058, 0x5059, 0x505a, 0x505b, 0x505c, 0x505d, 0x505e,
-  0x505f, 0x5060, 0x5061, 0x5062, 0x5063, 0x5064, 0x5065, 0x5066,
-  0x5067, 0x5068, 0x5069, 0x506a, 0x506b, 0x506c, 0x506d, 0x506e,
-  0x506f, 0x5070, 0x5071, 0x5072, 0x5073, 0x5074, 0x5075, 0x5076,
-  0x5077, 0x5078, 0x5079, 0x507a, 0x507b, 0x507c, 0x507d, 0x507e,
-  0x5121, 0x5122, 0x5123, 0x5124, 0x5125, 0x5126, 0x5127, 0x5128,
-  0x5129, 0x512a, 0x512b, 0x512c, 0x512d, 0x512e, 0x512f, 0x5130,
-  0x5131, 0x5132, 0x5133, 0x5134, 0x5135, 0x5136, 0x5137, 0x5138,
-  0x5139, 0x513a, 0x513b, 0x513c, 0x513d, 0x513e, 0x513f, 0x5140,
-  0x5141, 0x5142, 0x5143, 0x5144, 0x5145, 0x5146, 0x5147, 0x5148,
-  0x5149, 0x514a, 0x514b, 0x514c, 0x514d, 0x514e, 0x514f, 0x5150,
-  0x5151, 0x5152, 0x5153, 0x5154, 0x5155, 0x5156, 0x5157, 0x5158,
-  0x5159, 0x515a, 0x515b, 0x515c, 0x515d, 0x515e, 0x515f, 0x5160,
-  0x5161, 0x5162, 0x5163, 0x5164, 0x5165, 0x5166, 0x5167, 0x5168,
-  0x5169, 0x516a, 0x516b, 0x516c, 0x516d, 0x516e, 0x516f, 0x5170,
-  0x5171, 0x5172, 0x5173, 0x5174, 0x5175, 0x5176, 0x5177, 0x5178,
-  0x5179, 0x517a, 0x517b, 0x517c, 0x517d, 0x517e, 0x5221, 0x5222,
-  0x5223, 0x5224, 0x5225, 0x5226, 0x5227, 0x5228, 0x5229, 0x522a,
-  0x522b, 0x522c, 0x522d, 0x522e, 0x522f, 0x5230, 0x5231, 0x5232,
-  0x5233, 0x5234, 0x5235, 0x5236, 0x5237, 0x5238, 0x5239, 0x523a,
-  0x523b, 0x523c, 0x523d, 0x523e, 0x523f, 0x5240, 0x5241, 0x5242,
-  0x5243, 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524a,
-  0x524b, 0x524c, 0x524d, 0x524e, 0x524f, 0x5250, 0x5251, 0x5252,
-  0x5253, 0x5254, 0x5255, 0x5256, 0x5257, 0x5258, 0x5259, 0x525a,
-  0x525b, 0x525c, 0x525d, 0x525e, 0x525f, 0x5260, 0x5261, 0x5262,
-  0x5263, 0x5264, 0x5265, 0x5266, 0x5267, 0x5268, 0x5269, 0x526a,
-  0x526b, 0x526c, 0x526d, 0x526e, 0x526f, 0x5270, 0x5271, 0x5272,
-  0x5273, 0x5274, 0x5276, 0x5277, 0x5278, 0x5275, 0x5279, 0x527a,
-  0x527b, 0x527c, 0x527d, 0x527e, 0x5321, 0x5322, 0x5323, 0x5324,
-  0x5325, 0x5326, 0x5327, 0x5328, 0x5329, 0x532a, 0x532b, 0x532c,
-  0x532d, 0x532e, 0x532f, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334,
-  0x5335, 0x5336, 0x5337, 0x5338, 0x5339, 0x533a, 0x533b, 0x533c,
-  0x533d, 0x533e, 0x533f, 0x5340, 0x5341, 0x5342, 0x5343, 0x5344,
-  0x5345, 0x5346, 0x5347, 0x5348, 0x5349, 0x534a, 0x534b, 0x534c,
-  0x534d, 0x534e, 0x534f, 0x5350, 0x5351, 0x5352, 0x5353, 0x5354,
-  0x5355, 0x5356, 0x5357, 0x5358, 0x5359, 0x535a, 0x535b, 0x535c,
-  0x535d, 0x535e, 0x535f, 0x5360, 0x5361, 0x5362, 0x5363, 0x5364,
-  0x5365, 0x5366, 0x5367, 0x5368, 0x5369, 0x536a, 0x536b, 0x536c,
-  0x536d, 0x536e, 0x536f, 0x5370, 0x5371, 0x5372, 0x5373, 0x5374,
-  0x5375, 0x5376, 0x5377, 0x5378, 0x5379, 0x537a, 0x537b, 0x537c,
-  0x537d, 0x537e, 0x5421, 0x5422, 0x5423, 0x5424, 0x5425, 0x5426,
-  0x5427, 0x5428, 0x5429, 0x542a, 0x542b, 0x542c, 0x542d, 0x542e,
-  0x542f, 0x5430, 0x5431, 0x5432, 0x5434, 0x5435, 0x5436, 0x5437,
-  0x5438, 0x5439, 0x543a, 0x543b, 0x543c, 0x543d, 0x543e, 0x5433,
-  0x543f, 0x5440, 0x5441, 0x5442, 0x5443, 0x5444, 0x5445, 0x5446,
-  0x5447, 0x5448, 0x5449, 0x544a, 0x544b, 0x544c, 0x544d, 0x544e,
-  0x544f, 0x5450, 0x5451, 0x5452, 0x5453, 0x5454, 0x5455, 0x5456,
-  0x5457, 0x5458, 0x5459, 0x545a, 0x545b, 0x545c, 0x545d, 0x545e,
-  0x545f, 0x5460, 0x5461, 0x5462, 0x5463, 0x5464, 0x5465, 0x5466,
-  0x5467, 0x5468, 0x5469, 0x546a, 0x546c, 0x546b, 0x546d, 0x546e,
-  0x546f, 0x5470, 0x5471, 0x5472, 0x5473, 0x5474, 0x5475, 0x5476,
-  0x5477, 0x5478, 0x5479, 0x547a, 0x547b, 0x547c, 0x547d, 0x547e,
-  0x5521, 0x5522, 0x5523, 0x5524, 0x5525, 0x5526, 0x5527, 0x5528,
-  0x5529, 0x552a, 0x552b, 0x552c, 0x552d, 0x552e, 0x552f, 0x5530,
-  0x5531, 0x5532, 0x5533, 0x5534, 0x5535, 0x5536, 0x5537, 0x5538,
-  0x5539, 0x553a, 0x553b, 0x553c, 0x553d, 0x553e, 0x553f, 0x5540,
-  0x5541, 0x5542, 0x5543, 0x5544, 0x5545, 0x5546, 0x5547, 0x5548,
-  0x5549, 0x554a, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f, 0x5550,
-  0x5551, 0x5552, 0x5553, 0x5554, 0x5555, 0x5556, 0x5557, 0x5558,
-  0x5559, 0x555a, 0x555b, 0x555c, 0x555d, 0x555e, 0x555f, 0x5560,
-  0x5561, 0x5562, 0x5563, 0x5564, 0x5565, 0x5566, 0x5567, 0x5568,
-  0x5569, 0x556a, 0x556b, 0x556c, 0x556d, 0x556e, 0x556f, 0x5570,
-  0x5571, 0x5572, 0x5573, 0x5574, 0x5575, 0x5576, 0x5577, 0x5578,
-  0x5579, 0x557a, 0x557b, 0x557c, 0x557d, 0x557e, 0x5621, 0x5622,
-  0x5623, 0x5624, 0x5625, 0x5626, 0x5627, 0x5628, 0x5629, 0x562a,
-  0x562b, 0x562c, 0x562d, 0x562e, 0x562f, 0x5630, 0x5631, 0x5632,
-  0x5633, 0x5634, 0x5635, 0x5636, 0x5637, 0x5638, 0x5639, 0x563a,
-  0x563b, 0x563c, 0x563d, 0x563e, 0x563f, 0x5640, 0x5641, 0x5642,
-  0x5643, 0x5644, 0x5645, 0x5647, 0x5648, 0x5649, 0x564a, 0x564b,
-  0x5646, 0x564c, 0x564d, 0x564e, 0x564f, 0x5650, 0x5651, 0x5652,
-  0x5653, 0x5654, 0x5656, 0x5657, 0x5658, 0x5655, 0x5659, 0x565a,
-  0x565b, 0x565c, 0x565d, 0x565e, 0x565f, 0x5660, 0x5661, 0x5662,
-  0x5663, 0x5664, 0x5665, 0x5666, 0x5667, 0x5668, 0x5669, 0x566a,
-  0x566b, 0x566c, 0x566d, 0x566e, 0x566f, 0x5670, 0x5671, 0x5672,
-  0x5673, 0x5674, 0x5675, 0x5676, 0x5677, 0x5678, 0x5679, 0x567a,
-  0x567b, 0x567c, 0x567d, 0x567e, 0x5721, 0x5722, 0x5723, 0x5724,
-  0x5725, 0x5726, 0x5727, 0x5728, 0x5729, 0x572a, 0x572b, 0x572c,
-  0x572d, 0x572e, 0x572f, 0x5730, 0x5731, 0x5732, 0x5733, 0x5734,
-  0x5735, 0x5736, 0x5737, 0x5738, 0x5739, 0x573a, 0x573b, 0x573c,
-  0x573d, 0x573e, 0x573f, 0x5740, 0x5741, 0x5742, 0x5743, 0x5744,
-  0x5745, 0x5746, 0x5747, 0x5748, 0x5749, 0x574a, 0x574b, 0x574c,
-  0x574d, 0x574e, 0x574f, 0x5750, 0x5751, 0x5752, 0x5753, 0x5754,
-  0x5755, 0x5756, 0x5757, 0x5758, 0x5759, 0x575a, 0x575b, 0x575c,
-  0x575d, 0x575e, 0x575f, 0x5760, 0x5761, 0x5762, 0x5764, 0x5765,
-  0x5766, 0x5767, 0x5768, 0x5769, 0x576a, 0x576b, 0x576c, 0x576d,
-  0x576e, 0x576f, 0x5770, 0x5771, 0x5772, 0x5773, 0x5774, 0x5775,
-  0x5776, 0x5777, 0x5778, 0x5779, 0x583e, 0x5763, 0x577a, 0x577b,
-  0x577c, 0x577d, 0x577e, 0x5821, 0x5822, 0x5823, 0x5824, 0x5825,
-  0x5826, 0x5827, 0x5828, 0x5829, 0x582a, 0x582b, 0x582c, 0x582d,
-  0x582e, 0x582f, 0x5830, 0x5831, 0x5832, 0x5833, 0x584c, 0x5834,
-  0x5835, 0x5836, 0x5837, 0x5838, 0x5839, 0x583a, 0x583b, 0x583c,
-  0x583d, 0x583f, 0x5840, 0x5841, 0x5842, 0x5843, 0x5844, 0x5845,
-  0x5846, 0x5847, 0x5848, 0x5849, 0x584a, 0x584b, 0x584d, 0x584e,
-  0x584f, 0x5850, 0x5851, 0x5852, 0x5853, 0x5854, 0x5855, 0x5856,
-  0x5857, 0x5858, 0x5859, 0x585a, 0x585b, 0x585c, 0x585d, 0x585e,
-  0x585f, 0x5860, 0x5861, 0x5862, 0x5863, 0x5864, 0x5865, 0x5866,
-  0x5867, 0x5868, 0x5869, 0x586a, 0x586b, 0x586c, 0x586d, 0x586e,
-  0x586f, 0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876,
-  0x5877, 0x5878, 0x5879, 0x587a, 0x587b, 0x587c, 0x587d, 0x587e,
-  0x5921, 0x5922, 0x5923, 0x5924, 0x5925, 0x5926, 0x5927, 0x5928,
-  0x592a, 0x592b, 0x592c, 0x592d, 0x592e, 0x592f, 0x5930, 0x5931,
-  0x5932, 0x5933, 0x5934, 0x5935, 0x5936, 0x5937, 0x5938, 0x5939,
-  0x593a, 0x593b, 0x593c, 0x5929, 0x593d, 0x593e, 0x593f, 0x5940,
-  0x5941, 0x5942, 0x5943, 0x5944, 0x5945, 0x5946, 0x5947, 0x5948,
-  0x5949, 0x594a, 0x594b, 0x594c, 0x594d, 0x594e, 0x594f, 0x5950,
-  0x5951, 0x5952, 0x5953, 0x5954, 0x5955, 0x5956, 0x5957, 0x5958,
-  0x5959, 0x595a, 0x595b, 0x595c, 0x595d, 0x595e, 0x595f, 0x5960,
-  0x5961, 0x5962, 0x5963, 0x5964, 0x5965, 0x5966, 0x5974, 0x5967,
-  0x5968, 0x5969, 0x596a, 0x596b, 0x596c, 0x596d, 0x596e, 0x596f,
-  0x5970, 0x5971, 0x5972, 0x5973, 0x5975, 0x5976, 0x5977, 0x5978,
-  0x5979, 0x597a, 0x597b, 0x597c, 0x597d, 0x597e, 0x5a21, 0x5a22,
-  0x5a23, 0x5a24, 0x5a25, 0x5a26, 0x5a27, 0x5a28, 0x5a29, 0x5a2a,
-  0x5a2b, 0x5a2c, 0x5a2d, 0x5a2e, 0x5a2f, 0x5a30, 0x5a31, 0x5a32,
-  0x5a33, 0x5a34, 0x5a35, 0x5a36, 0x3866, 0x5a37, 0x5a38, 0x5a39,
-  0x5a3a, 0x5a3b, 0x5a3c, 0x5a3d, 0x5a3e, 0x5a3f, 0x5a40, 0x5a41,
-  0x5a42, 0x5a43, 0x5a44, 0x5a45, 0x5a46, 0x5a47, 0x5a48, 0x5a49,
-  0x5a4a, 0x5a4b, 0x5a6d, 0x5a4c, 0x5a4d, 0x5a4e, 0x5a4f, 0x5a50,
-  0x5a51, 0x5a52, 0x5a53, 0x5a54, 0x5a55, 0x5a56, 0x5a57, 0x5a58,
-  0x5a59, 0x5a5a, 0x5a5b, 0x5a5c, 0x5a5d, 0x5a5e, 0x5a5f, 0x5a60,
-  0x5a61, 0x5a62, 0x5a63, 0x5a64, 0x5a65, 0x5a66, 0x5a67, 0x5a68,
-  0x5a69, 0x5a6a, 0x5a6b, 0x5a6c, 0x5a6e, 0x5a6f, 0x5a70, 0x5a71,
-  0x5a72, 0x5a73, 0x5a74, 0x5a75, 0x5a76, 0x5a77, 0x5a78, 0x5a79,
-  0x5a7a, 0x5a7b, 0x5a7c, 0x5a7d, 0x5a7e, 0x5b21, 0x5b22, 0x5b23,
-  0x5b24, 0x5b25, 0x5b26, 0x5b27, 0x5b28, 0x5b29, 0x5b2a, 0x5b2b,
-  0x5b2c, 0x5b2d, 0x5b2e, 0x5b2f, 0x5b30, 0x5b31, 0x5b32, 0x5b33,
-  0x5b34, 0x5b35, 0x5b36, 0x5b37, 0x5b38, 0x5b39, 0x5b3a, 0x5b3b,
-  0x5b3c, 0x5b3d, 0x5b3e, 0x5b3f, 0x5b40, 0x5b41, 0x5b42, 0x5b43,
-  0x5b44, 0x5b45, 0x5b46, 0x5b47, 0x5b48, 0x5b49, 0x5b4a, 0x5b4b,
-  0x5b4c, 0x5b4d, 0x5b4e, 0x5b4f, 0x5b50, 0x5b51, 0x5b52, 0x5b53,
-  0x5b54, 0x5b55, 0x5b56, 0x5b57, 0x5b58, 0x5b59, 0x5b5a, 0x5b5b,
-  0x5b5c, 0x5b5d, 0x5b5e, 0x5b5f, 0x5b60, 0x5b61, 0x5b62, 0x5b63,
-  0x5b64, 0x5b65, 0x5b66, 0x5b67, 0x5b68, 0x5b69, 0x5b6a, 0x5b6b,
-  0x5b6c, 0x5b6d, 0x5b6e, 0x5b70, 0x5b71, 0x5b72, 0x5b73, 0x5b6f,
-  0x5b74, 0x5b75, 0x5b76, 0x5b77, 0x5b78, 0x5b79, 0x5b7a, 0x5b7b,
-  0x5b7c, 0x5b7d, 0x5b7e, 0x5c21, 0x5c22, 0x5c23, 0x5c24, 0x5c25,
-  0x5c26, 0x5c27, 0x5c28, 0x5c29, 0x5c2a, 0x5c2b, 0x5c2c, 0x5c2d,
-  0x5c2e, 0x5c2f, 0x5c30, 0x5c31, 0x5c32, 0x5c33, 0x5c34, 0x5c35,
-  0x5c36, 0x5c37, 0x5c38, 0x5c39, 0x5c3a, 0x5c3b, 0x5c3c, 0x5c3d,
-  0x5c3e, 0x5c3f, 0x5c40, 0x5c41, 0x5c42, 0x5c43, 0x5c44, 0x5c45,
-  0x5c46, 0x5c47, 0x5c48, 0x5c49, 0x5c4a, 0x5c4b, 0x5c4c, 0x5c4d,
-  0x5c4e, 0x5c4f, 0x5c50, 0x5c51, 0x5c52, 0x5c53, 0x5c54, 0x5c55,
-  0x5c56, 0x5c57, 0x5c58, 0x5c59, 0x5c5a, 0x5c5b, 0x5c5c, 0x5c5d,
-  0x5c5e, 0x5c5f, 0x5c60, 0x5c61, 0x5c62, 0x5c63, 0x5c64, 0x5c65,
-  0x5c66, 0x5c67, 0x5c68, 0x5c69, 0x5c6a, 0x5c6b, 0x5c6c, 0x5c6d,
-  0x5c6e, 0x5c6f, 0x5c70, 0x5c71, 0x5c72, 0x5c73, 0x5c74, 0x5c75,
-  0x5c76, 0x5c77, 0x5c78, 0x5c79, 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d,
-  0x5c7e, 0x5d21, 0x5d22, 0x5d23, 0x5d24, 0x5d25, 0x5d26, 0x5d27,
-  0x5d28, 0x5d29, 0x5d2a, 0x5d2b, 0x5d2c, 0x5d2d, 0x5d2e, 0x5d2f,
-  0x5d30, 0x5d31, 0x5d32, 0x5d33, 0x5d34, 0x5d35, 0x5d36, 0x5d37,
-  0x5d38, 0x5d39, 0x5d3a, 0x5d3b, 0x5d3c, 0x5d3d, 0x5d3e, 0x5d3f,
-  0x5d40, 0x5d41, 0x5d42, 0x5d43, 0x5d44, 0x5d45, 0x5d46, 0x5d47,
-  0x5d48, 0x5d49, 0x5d4a, 0x5d4b, 0x5d4c, 0x5d4d, 0x5d4e, 0x5d4f,
-  0x5d50, 0x5d51, 0x5d52, 0x5d53, 0x5d54, 0x5d55, 0x5d56, 0x5d57,
-  0x5d58, 0x5d59, 0x5d5a, 0x5d5b, 0x5d5c, 0x5d5d, 0x5d5e, 0x5d5f,
-  0x5d60, 0x5d61, 0x5d62, 0x5d63, 0x5d64, 0x5d65, 0x5d66, 0x5d67,
-  0x5d68, 0x5d69, 0x5d6a, 0x5d6b, 0x5d6c, 0x5d6d, 0x5d6e, 0x5d6f,
-  0x5d70, 0x5d71, 0x5d72, 0x5d73, 0x5d74, 0x5d75, 0x5d76, 0x5d77,
-  0x5d78, 0x5d79, 0x5d7a, 0x5d7b, 0x5d7c, 0x5d7d, 0x5d7e, 0x5e21,
-  0x5e22, 0x5e23, 0x5e24, 0x5e25, 0x5e26, 0x5e27, 0x5e28, 0x5e29,
-  0x5e2a, 0x5e2b, 0x5e2c, 0x5e2d, 0x5e2e, 0x5e2f, 0x5e30, 0x5e31,
-  0x5e32, 0x5e33, 0x5e34, 0x5e35, 0x5e36, 0x5e37, 0x5e38, 0x5e39,
-  0x5e3f, 0x5e3a, 0x5e3b, 0x5e3c, 0x5e3d, 0x5e3e, 0x5e40, 0x5e41,
-  0x5e42, 0x5e43, 0x5e44, 0x5e45, 0x5e46, 0x5e47, 0x5e48, 0x5e49,
-  0x5e4e, 0x5e4a, 0x5e4b, 0x5e4c, 0x5e4d, 0x5e4f, 0x5e50, 0x5e51,
-  0x5e52, 0x5e53, 0x5e54, 0x5e55, 0x5e56, 0x5e57, 0x5e58, 0x5e59,
-  0x5e5a, 0x5e5b, 0x5e5c, 0x5e5d, 0x5e5e, 0x5e5f, 0x5e60, 0x5e61,
-  0x5e62, 0x5e63, 0x5e64, 0x5e65, 0x5e66, 0x5e67, 0x5e68, 0x5e69,
-  0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e, 0x5e6f, 0x5e72, 0x5e70,
-  0x5e71, 0x5e73, 0x5e74, 0x5e75, 0x5e76, 0x5e77, 0x5e78, 0x5e79,
-  0x5e7a, 0x5e7b, 0x5e7c, 0x5e7d, 0x5e7e, 0x5f21, 0x5f22, 0x5f23,
-  0x5f24, 0x5f25, 0x5f26, 0x5f27, 0x5f28, 0x5f29, 0x5f2a, 0x5f2b,
-  0x5f2c, 0x5f2d, 0x5f2e, 0x5f2f, 0x5f30, 0x5f32, 0x5f31, 0x5f33,
-  0x5f34, 0x5f35, 0x5f36, 0x5f37, 0x5f38, 0x5f39, 0x5f3a, 0x5f3b,
-  0x5f3c, 0x5f3d, 0x5f3e, 0x5f3f, 0x5f40, 0x5f41, 0x5f42, 0x5f43,
-  0x5f44, 0x5f45, 0x5f46, 0x5f47, 0x5f48, 0x5f49, 0x5f4a, 0x5f4b,
-  0x5f4c, 0x5f4d, 0x5f4e, 0x5f4f, 0x5f50, 0x5f51, 0x5f52, 0x5f53,
-  0x5f54, 0x5f55, 0x5f56, 0x5f57, 0x5f58, 0x5f59, 0x5f5a, 0x5f5b,
-  0x5f5c, 0x5f5d, 0x5f6f, 0x5f5e, 0x5f5f, 0x5f60, 0x5f61, 0x5f62,
-  0x5f63, 0x5f64, 0x5f65, 0x5f66, 0x5f67, 0x5f68, 0x5f69, 0x5f6a,
-  0x5f6b, 0x5f6c, 0x5f6d, 0x5f6e, 0x5f70, 0x5f71, 0x5f72, 0x5f73,
-  0x5f74, 0x5f75, 0x5f76, 0x5f77, 0x5f78, 0x5f79, 0x5f7a, 0x5f7b,
-  0x5f7c, 0x5f7d, 0x5f7e, 0x6021, 0x6022, 0x6023, 0x6024, 0x6025,
-  0x6026, 0x6027, 0x6028, 0x6029, 0x602a, 0x602b, 0x602c, 0x602d,
-  0x602e, 0x602f, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6035,
-  0x6036, 0x6037, 0x6038, 0x6039, 0x603a, 0x603b, 0x603c, 0x603d,
-  0x603e, 0x603f, 0x6040, 0x6041, 0x6042, 0x6043, 0x6044, 0x6045,
-  0x6046, 0x6047, 0x6048, 0x6049, 0x604a, 0x604b, 0x604c, 0x604d,
-  0x604e, 0x604f, 0x6050, 0x6051, 0x6052, 0x6053, 0x6054, 0x6055,
-  0x6056, 0x6057, 0x6058, 0x6059, 0x605a, 0x605b, 0x605c, 0x605d,
-  0x6064, 0x605e, 0x605f, 0x6060, 0x6061, 0x6062, 0x6063, 0x6065,
-  0x6066, 0x6067, 0x6068, 0x6069, 0x606a, 0x606b, 0x606c, 0x606d,
-  0x606e, 0x606f, 0x6070, 0x6071, 0x6072, 0x6073, 0x6074, 0x6075,
-  0x6076, 0x6077, 0x6078, 0x6079, 0x607a, 0x607b, 0x607c, 0x607d,
-  0x607e, 0x6121, 0x6122, 0x6123, 0x6124, 0x6125, 0x6126, 0x6127,
-  0x6128, 0x6129, 0x612a, 0x612b, 0x612c, 0x612d, 0x612e, 0x612f,
-  0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, 0x6137,
-  0x6138, 0x6139, 0x613a, 0x613b, 0x613c, 0x613d, 0x613e, 0x613f,
-  0x6140, 0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146, 0x6147,
-  0x6148, 0x6149, 0x614a, 0x614b, 0x614c, 0x614d, 0x614e, 0x614f,
-  0x6150, 0x6151, 0x6152, 0x6154, 0x6155, 0x6156, 0x6153, 0x6157,
-  0x6158, 0x6159, 0x615a, 0x615b, 0x615c, 0x615d, 0x615e, 0x615f,
-  0x6160, 0x6161, 0x6162, 0x6163, 0x6164, 0x6165, 0x6166, 0x6167,
-  0x6168, 0x6169, 0x616a, 0x616b, 0x616c, 0x616d, 0x616e, 0x616f,
-  0x6170, 0x6171, 0x6172, 0x6173, 0x6174, 0x6175, 0x6176, 0x6177,
-  0x6178, 0x6179, 0x617a, 0x617b, 0x617d, 0x617e, 0x6221, 0x6222,
-  0x6223, 0x6224, 0x617c, 0x622d, 0x6225, 0x6226, 0x6227, 0x6228,
-  0x6229, 0x622a, 0x622b, 0x622c, 0x622f, 0x6230, 0x6231, 0x6232,
-  0x622e, 0x6233, 0x6234, 0x6235, 0x6236, 0x6237, 0x6238, 0x6239,
-  0x623a, 0x623b, 0x623c, 0x623d, 0x623e, 0x623f, 0x6240, 0x6241,
-  0x6242, 0x6243, 0x6245, 0x6246, 0x6244, 0x6247, 0x6248, 0x6249,
-  0x624a, 0x624b, 0x624c, 0x624d, 0x624e, 0x624f, 0x6250, 0x6251,
-  0x6252, 0x6253, 0x6254, 0x6255, 0x6256, 0x6257, 0x6258, 0x6259,
-  0x625a, 0x625b, 0x625c, 0x625d, 0x625e, 0x625f, 0x6260, 0x6261,
-  0x6262, 0x6263, 0x6264, 0x6265, 0x6266, 0x6267, 0x6268, 0x6269,
-  0x626a, 0x626b, 0x626c, 0x626d, 0x626e, 0x626f, 0x6270, 0x6271,
-  0x6272, 0x6273, 0x6274, 0x6275, 0x6276, 0x6277, 0x6278, 0x6279,
-  0x627a, 0x627b, 0x627c, 0x627d, 0x627e, 0x6321, 0x6322, 0x6323,
-  0x6324, 0x6325, 0x6326, 0x6327, 0x6328, 0x6329, 0x632a, 0x632b,
-  0x632c, 0x632d, 0x632e, 0x632f, 0x6330, 0x6331, 0x6332, 0x6333,
-  0x6334, 0x6335, 0x6336, 0x6337, 0x6338, 0x6339, 0x633a, 0x633b,
-  0x633c, 0x633d, 0x633e, 0x633f, 0x6340, 0x6341, 0x6342, 0x6343,
-  0x6344, 0x6345, 0x6346, 0x6347, 0x6348, 0x6349, 0x634a, 0x634b,
-  0x634c, 0x634d, 0x634e, 0x634f, 0x6350, 0x6351, 0x6352, 0x6353,
-  0x6354, 0x6355, 0x6356, 0x6357, 0x6358, 0x6359, 0x635a, 0x635b,
-  0x635c, 0x635d, 0x635e, 0x635f, 0x6360, 0x6361, 0x6362, 0x6363,
-  0x6364, 0x6365, 0x6366, 0x6367, 0x6368, 0x6369, 0x636a, 0x636b,
-  0x636c, 0x636d, 0x636e, 0x636f, 0x6370, 0x6371, 0x6372, 0x6373,
-  0x6374, 0x6375, 0x6376, 0x6377, 0x6378, 0x6379, 0x637a, 0x637b,
-  0x637c, 0x637d, 0x637e, 0x6421, 0x6422, 0x6423, 0x6424, 0x6425,
-  0x6426, 0x6427, 0x6428, 0x6429, 0x642a, 0x642b, 0x642c, 0x642d,
-  0x642e, 0x642f, 0x6430, 0x6431, 0x6432, 0x6433, 0x6434, 0x6435,
-  0x6436, 0x6437, 0x6438, 0x6439, 0x643a, 0x643b, 0x643c, 0x643d,
-  0x643e, 0x643f, 0x6440, 0x6441, 0x6442, 0x6443, 0x6444, 0x6445,
-  0x6446, 0x6447, 0x6448, 0x6449, 0x644a, 0x644b, 0x644c, 0x644d,
-  0x644e, 0x644f, 0x6450, 0x6451, 0x6452, 0x6453, 0x6454, 0x6455,
-  0x6456, 0x6457, 0x6458, 0x6459, 0x645a, 0x645b, 0x645c, 0x645d,
-  0x645e, 0x645f, 0x6460, 0x6461, 0x6462, 0x6463, 0x6464, 0x6465,
-  0x6466, 0x6467, 0x6468, 0x6469, 0x646a, 0x646b, 0x646c, 0x646d,
-  0x646e, 0x646f, 0x6470, 0x6471, 0x6472, 0x6473, 0x6474, 0x6475,
-  0x6476, 0x6477, 0x6478, 0x6479, 0x647a, 0x647b, 0x647c, 0x647d,
-  0x647e, 0x6521, 0x6522, 0x6523, 0x6524, 0x6525, 0x6526, 0x6527,
-  0x6528, 0x6529, 0x652a, 0x652b, 0x652c, 0x652d, 0x652e, 0x652f,
-  0x6530, 0x6531, 0x6532, 0x6533, 0x6534, 0x6535, 0x653b, 0x6536,
-  0x6537, 0x6538, 0x6539, 0x653a, 0x653c, 0x653d, 0x653e, 0x653f,
-  0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6545, 0x6546, 0x6547,
-  0x6548, 0x6549, 0x654a, 0x654b, 0x654c, 0x654d, 0x654f, 0x6550,
-  0x654e, 0x6551, 0x6552, 0x6553, 0x6554, 0x6555, 0x6556, 0x6557,
-  0x6558, 0x6559, 0x655a, 0x655b, 0x655c, 0x655d, 0x655e, 0x655f,
-  0x6560, 0x6561, 0x6562, 0x6563, 0x6564, 0x6565, 0x6566, 0x6568,
-  0x6567, 0x6569, 0x656a, 0x656b, 0x656c, 0x656d, 0x656e, 0x656f,
-  0x6570, 0x6571, 0x6572, 0x6573, 0x6574, 0x6575, 0x6576, 0x6577,
-  0x6578, 0x6579, 0x657a, 0x657c, 0x657b, 0x657d, 0x657e, 0x6621,
-  0x6622, 0x6623, 0x6624, 0x6625, 0x6626, 0x6627, 0x6628, 0x6629,
-  0x662a, 0x662b, 0x662c, 0x662d, 0x662e, 0x662f, 0x6630, 0x6631,
-  0x6632, 0x6633, 0x6634, 0x6635, 0x6636, 0x6637, 0x6638, 0x6639,
-  0x663a, 0x663b, 0x663c, 0x663d, 0x663e, 0x663f, 0x6640, 0x6641,
-  0x6642, 0x6643, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648, 0x6649,
-  0x664a, 0x664b, 0x664c, 0x664d, 0x664e, 0x664f, 0x6650, 0x6651,
-  0x6652, 0x6653, 0x6654, 0x6655, 0x6656, 0x6657, 0x6658, 0x6659,
-  0x665a, 0x665b, 0x665c, 0x665d, 0x665e, 0x665f, 0x6660, 0x6661,
-  0x6662, 0x6663, 0x6664, 0x6665, 0x6666, 0x6667, 0x6668, 0x6669,
-  0x666a, 0x666b, 0x666c, 0x666d, 0x666e, 0x666f, 0x6670, 0x6671,
-  0x6672, 0x6673, 0x6675, 0x6676, 0x6677, 0x6678, 0x6679, 0x667a,
-  0x667b, 0x667c, 0x667d, 0x667e, 0x6721, 0x6722, 0x6723, 0x6724,
-  0x6725, 0x6726, 0x6727, 0x6728, 0x6729, 0x672a, 0x672b, 0x672c,
-  0x672d, 0x672e, 0x672f, 0x6730, 0x6731, 0x6732, 0x6733, 0x6734,
-  0x6735, 0x6736, 0x6737, 0x6738, 0x6739, 0x673a, 0x673b, 0x673c,
-  0x673d, 0x673e, 0x673f, 0x6740, 0x6741, 0x6742, 0x6743, 0x6744,
-  0x6745, 0x6746, 0x6747, 0x6748, 0x6749, 0x674a, 0x674b, 0x674c,
-  0x674d, 0x674e, 0x674f, 0x6750, 0x6751, 0x6752, 0x6753, 0x6754,
-  0x6755, 0x6756, 0x6757, 0x6758, 0x6759, 0x675a, 0x675b, 0x675c,
-  0x675d, 0x675e, 0x675f, 0x6760, 0x6761, 0x6762, 0x6763, 0x6764,
-  0x6765, 0x6766, 0x676a, 0x6767, 0x6768, 0x6769, 0x676b, 0x676c,
-  0x676d, 0x676e, 0x676f, 0x6770, 0x6771, 0x6772, 0x6773, 0x6774,
-  0x6776, 0x6777, 0x6778, 0x6779, 0x6775, 0x677a, 0x677b, 0x677c,
-  0x677d, 0x6828, 0x677e, 0x6821, 0x6822, 0x6823, 0x6824, 0x6825,
-  0x6826, 0x6827, 0x6829, 0x682a, 0x682b, 0x682c, 0x682d, 0x682e,
-  0x682f, 0x6830, 0x6831, 0x6832, 0x6833, 0x6834, 0x6835, 0x6836,
-  0x6837, 0x6838, 0x6839, 0x683a, 0x683b, 0x683c, 0x683d, 0x683e,
-  0x683f, 0x6840, 0x6841, 0x6842, 0x6843, 0x6844, 0x6845, 0x6846,
-  0x6847, 0x6848, 0x6849, 0x684a, 0x684b, 0x684c, 0x684d, 0x684e,
-  0x684f, 0x6850, 0x6851, 0x6852, 0x6853, 0x6854, 0x6855, 0x6856,
-  0x6857, 0x6858, 0x6859, 0x685a, 0x685b, 0x685c, 0x685d, 0x685e,
-  0x685f, 0x6860, 0x6861, 0x6862, 0x6863, 0x6864, 0x6865, 0x6866,
-  0x6867, 0x6868, 0x6869, 0x686a, 0x686b, 0x686c, 0x686d, 0x686e,
-  0x686f, 0x6870, 0x6871, 0x6872, 0x6873, 0x6874, 0x6875, 0x6876,
-  0x6877, 0x6878, 0x6879, 0x687a, 0x687b, 0x687c, 0x687d, 0x687e,
-  0x6921, 0x6922, 0x6923, 0x6924, 0x6925, 0x6926, 0x6927, 0x6928,
-  0x6929, 0x692a, 0x692b, 0x692c, 0x692d, 0x692e, 0x692f, 0x6930,
-  0x6931, 0x6932, 0x6933, 0x6934, 0x6935, 0x6936, 0x6937, 0x6938,
-  0x6939, 0x693a, 0x693b, 0x693c, 0x693d, 0x693e, 0x693f, 0x6940,
-  0x6941, 0x6942, 0x6943, 0x6944, 0x6945, 0x6946, 0x6947, 0x6948,
-  0x6949, 0x694a, 0x694c, 0x694d, 0x694b, 0x694e, 0x694f, 0x6950,
-  0x6951, 0x6952, 0x6953, 0x6954, 0x6955, 0x6956, 0x6957, 0x6958,
-  0x6959, 0x695a, 0x695b, 0x695c, 0x695d, 0x695e, 0x695f, 0x6960,
-  0x6961, 0x6962, 0x6963, 0x6964, 0x6965, 0x6966, 0x6967, 0x6968,
-  0x6969, 0x696a, 0x696b, 0x696c, 0x696d, 0x696e, 0x696f, 0x6970,
-  0x6971, 0x6972, 0x6973, 0x6974, 0x6975, 0x6976, 0x6977, 0x6978,
-  0x6979, 0x697a, 0x697b, 0x697c, 0x697d, 0x697e, 0x6a21, 0x6a22,
-  0x6a23, 0x6a24, 0x6a25, 0x6a26, 0x6a27, 0x6a28, 0x6a29, 0x6a2a,
-  0x6a2b, 0x6a2c, 0x6a2d, 0x6a2e, 0x6a2f, 0x6a30, 0x6a31, 0x6a32,
-  0x6a33, 0x6a34, 0x6a35, 0x6a36, 0x6a37, 0x6a38, 0x6a39, 0x6a3a,
-  0x6a3b, 0x6a3c, 0x6a3d, 0x6a3e, 0x6a3f, 0x6a40, 0x6a41, 0x6a42,
-  0x6a43, 0x6a44, 0x6a45, 0x6a46, 0x6a47, 0x6a48, 0x6a49, 0x6a4a,
-  0x6a4b, 0x6a4c, 0x6a4d, 0x6a4e, 0x6a4f, 0x6a50, 0x6a51, 0x6a52,
-  0x6a53, 0x6a54, 0x6a55, 0x6a56, 0x6a57, 0x6a58, 0x6a59, 0x6a5a,
-  0x6a5b, 0x6a5c, 0x6a5d, 0x6a5e, 0x6a5f, 0x6a60, 0x6a61, 0x6a62,
-  0x6a63, 0x6a64, 0x6a65, 0x6a66, 0x6a67, 0x6a68, 0x6a69, 0x6a6a,
-  0x6a6b, 0x6a6c, 0x6a6d, 0x6a6e, 0x6a6f, 0x6a70, 0x6a71, 0x6a72,
-  0x6a73, 0x6a74, 0x6a75, 0x6a76, 0x6a77, 0x6a78, 0x6a79, 0x6a7a,
-  0x6a7b, 0x6a7c, 0x6a7d, 0x6a7e, 0x6b21, 0x6b22, 0x6b23, 0x6b24,
-  0x6b25, 0x6b26, 0x6b27, 0x6b28, 0x6b29, 0x6b2a, 0x6b2b, 0x6b2c,
-  0x6b2d, 0x6b2e, 0x6b2f, 0x6b30, 0x6b31, 0x6b32, 0x6b33, 0x6b34,
-  0x6b35, 0x6b36, 0x6b37, 0x6b38, 0x6b39, 0x6b3a, 0x6b3b, 0x6b3c,
-  0x6b3d, 0x6b3e, 0x6b3f, 0x6b40, 0x6b41, 0x6b42, 0x6b43, 0x6b44,
-  0x6b45, 0x6b46, 0x6b47, 0x6b48, 0x6b49, 0x6b50, 0x6b4a, 0x6b4b,
-  0x6b4c, 0x6b4d, 0x6b52, 0x6b4e, 0x6b4f, 0x6b51, 0x6b53, 0x6b54,
-  0x6b55, 0x6b56, 0x6b57, 0x6b58, 0x6b59, 0x6b5a, 0x6b5b, 0x6b5c,
-  0x6b5e, 0x6b5d, 0x6b5f, 0x6b60, 0x6b61, 0x6b62, 0x6b63, 0x6b64,
-  0x6b65, 0x6b66, 0x6b67, 0x6b68, 0x6b69, 0x6b6a, 0x6b6b, 0x6b6d,
-  0x6b6e, 0x6b6f, 0x6b6c, 0x6b70, 0x6b71, 0x6b72, 0x6b73, 0x6b74,
-  0x6b76, 0x6b75, 0x6b77, 0x6b78, 0x6b79, 0x6b7a, 0x6b7b, 0x6b7c,
-  0x6b7d, 0x6b7e, 0x6c21, 0x6c22, 0x6c23, 0x6c24, 0x6c25, 0x6c26,
-  0x6c27, 0x6c28, 0x6c29, 0x6c2a, 0x6c2b, 0x6c2c, 0x6c2d, 0x6c2e,
-  0x6c2f, 0x6c30, 0x6c31, 0x6c32, 0x6c33, 0x6c34, 0x6c35, 0x6c36,
-  0x6c37, 0x6c38, 0x6c39, 0x6c3a, 0x6c3b, 0x6c3c, 0x6c3d, 0x6c3e,
-  0x6c3f, 0x6c40, 0x6c41, 0x6c42, 0x6c43, 0x6c44, 0x6c45, 0x6c46,
-  0x6c47, 0x6c48, 0x6c49, 0x6c4a, 0x6c4b, 0x6c4c, 0x6c4e, 0x6c4f,
-  0x6c4d, 0x6c50, 0x6c51, 0x6c52, 0x6c53, 0x6c54, 0x6c55, 0x6c56,
-  0x6c57, 0x6c58, 0x6c59, 0x6c5a, 0x6c5b, 0x6c5c, 0x6c5d, 0x6c5e,
-  0x6c5f, 0x6c60, 0x6c61, 0x6c62, 0x6c63, 0x6c64, 0x6c65, 0x6c66,
-  0x6c67, 0x6c68, 0x6c69, 0x6c6a, 0x6c6b, 0x6c6c, 0x6c6d, 0x6c6e,
-  0x6c6f, 0x6c70, 0x6c71, 0x6c72, 0x6c73, 0x6c74, 0x6c75, 0x6c76,
-  0x6c77, 0x6c78, 0x6c79, 0x6c7a, 0x6c7b, 0x6c7c, 0x6c7d, 0x6c7e,
-  0x6d21, 0x6d22, 0x6d23, 0x6d24, 0x6d25, 0x6d26, 0x6d27, 0x6d28,
-  0x6d29, 0x6d2a, 0x6d2b, 0x6d2c, 0x6d2d, 0x6d2e, 0x6d2f, 0x6d30,
-  0x6d31, 0x6d32, 0x6d33, 0x6d34, 0x6d35, 0x6d36, 0x6d37, 0x6d38,
-  0x6d39, 0x6d3a, 0x6d3b, 0x6d3c, 0x6d3d, 0x6d3e, 0x6d3f, 0x6d40,
-  0x6d41, 0x6d42, 0x6d43, 0x6d44, 0x6d45, 0x6d46, 0x6d47, 0x6d48,
-  0x6d49, 0x6d4a, 0x6d4b, 0x6d4c, 0x6d4d, 0x6d4e, 0x6d4f, 0x6d50,
-  0x6d51, 0x6d52, 0x6d53, 0x6d54, 0x6d55, 0x6d56, 0x6d57, 0x6d58,
-  0x6d59, 0x6d5a, 0x6d5b, 0x6d5c, 0x6d5d, 0x6d5e, 0x6d5f, 0x6d60,
-  0x6d61, 0x6d62, 0x6d63,
-};
-
-static const Summary16 jisx0212_uni2indx_page00[70] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x4000 },
-  {    1, 0x0000 }, {    1, 0x0000 }, {    1, 0xc652 }, {    8, 0x8500 },
-  {   11, 0xffff }, {   27, 0xff7e }, {   41, 0xffff }, {   57, 0xff7f },
-  /* 0x0100 */
-  {   72, 0xffff }, {   88, 0xffcf }, {  102, 0xcff7 }, {  115, 0xffff },
-  {  131, 0x3fff }, {  145, 0xffff }, {  161, 0xffff }, {  177, 0x7fff },
-  {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 },
-  {  192, 0xe000 }, {  195, 0x1fff }, {  208, 0x0000 }, {  208, 0x0020 },
-  /* 0x0200 */
-  {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 },
-  {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 },
-  {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 },
-  {  209, 0x0080 }, {  210, 0x2f00 }, {  215, 0x0000 }, {  215, 0x0000 },
-  /* 0x0300 */
-  {  215, 0x0000 }, {  215, 0x0000 }, {  215, 0x0000 }, {  215, 0x0000 },
-  {  215, 0x0000 }, {  215, 0x0000 }, {  215, 0x0000 }, {  215, 0x0000 },
-  {  215, 0xd770 }, {  224, 0x0001 }, {  225, 0xfc00 }, {  231, 0x0001 },
-  {  232, 0x7c04 }, {  238, 0x0000 }, {  238, 0x0000 }, {  238, 0x0000 },
-  /* 0x0400 */
-  {  238, 0xdffc }, {  251, 0x0000 }, {  251, 0x0000 }, {  251, 0x0000 },
-  {  251, 0x0000 }, {  251, 0xdffc },
-};
-static const Summary16 jisx0212_uni2indx_page21[3] = {
-  /* 0x2100 */
-  {  264, 0x0000 }, {  264, 0x0040 }, {  265, 0x0004 },
-};
-static const Summary16 jisx0212_uni2indx_page4e[1307] = {
-  /* 0x4e00 */
-  {  266, 0x1034 }, {  270, 0x8004 }, {  272, 0xc918 }, {  278, 0x0021 },
-  {  280, 0x0093 }, {  284, 0x1402 }, {  287, 0x0308 }, {  290, 0x8230 },
-  {  294, 0x2000 }, {  295, 0x20c0 }, {  298, 0x8000 }, {  299, 0x0200 },
-  {  300, 0x0008 }, {  301, 0x0c01 }, {  304, 0x8107 }, {  309, 0xe02a },
-  /* 0x4f00 */
-  {  315, 0x190d }, {  321, 0x02e4 }, {  326, 0x4000 }, {  327, 0x4aaa },
-  {  334, 0x1b05 }, {  340, 0x8154 }, {  345, 0x5409 }, {  350, 0x6782 },
-  {  357, 0x5636 }, {  365, 0xc69d }, {  374, 0x0000 }, {  374, 0x7a84 },
-  {  381, 0xbb63 }, {  391, 0x1004 }, {  393, 0x0005 }, {  395, 0xb005 },
-  /* 0x5000 */
-  {  400, 0x5493 }, {  407, 0x7989 }, {  415, 0x4084 }, {  418, 0x082d },
-  {  423, 0x5467 }, {  431, 0x828e }, {  437, 0x24cd }, {  444, 0x0003 },
-  {  446, 0xc45a }, {  453, 0xd85d }, {  462, 0x8407 }, {  467, 0x2601 },
-  {  471, 0x5099 }, {  477, 0xb119 }, {  484, 0x8354 }, {  490, 0x4446 },
-  /* 0x5100 */
-  {  495, 0x79c8 }, {  503, 0x7a81 }, {  510, 0xb188 }, {  516, 0x033a },
-  {  522, 0x8404 }, {  525, 0x81a8 }, {  530, 0x0050 }, {  532, 0x4000 },
-  {  533, 0x4818 }, {  537, 0x2100 }, {  539, 0x200a }, {  542, 0xd500 },
-  {  547, 0x8104 }, {  550, 0x412e }, {  556, 0x4024 }, {  559, 0x009c },
-  /* 0x5200 */
-  {  563, 0x0026 }, {  566, 0x016c }, {  571, 0x0104 }, {  573, 0x1026 },
-  {  577, 0x0220 }, {  579, 0x95a0 }, {  585, 0x4043 }, {  589, 0x0380 },
-  {  592, 0x1425 }, {  597, 0x15e8 }, {  604, 0x80f0 }, {  609, 0x2dc1 },
-  {  616, 0x9151 }, {  622, 0x1852 }, {  627, 0x1722 }, {  633, 0x00d3 },
-  /* 0x5300 */
-  {  638, 0x1c09 }, {  643, 0xd90a }, {  650, 0x3ba0 }, {  657, 0x7025 },
-  {  663, 0x1804 }, {  666, 0x0a00 }, {  668, 0x302a }, {  673, 0x4204 },
-  {  676, 0x4188 }, {  680, 0x2218 }, {  684, 0x8c12 }, {  689, 0x25b4 },
-  {  696, 0x8021 }, {  699, 0x642c }, {  705, 0x00c1 }, {  708, 0x0020 },
-  /* 0x5400 */
-  {  709, 0x0004 }, {  710, 0x0408 }, {  712, 0x8582 }, {  717, 0x0032 },
-  {  720, 0xa098 }, {  725, 0x4000 }, {  726, 0x6ad4 }, {  734, 0x8010 },
-  {  736, 0x232a }, {  742, 0x9062 }, {  747, 0x66c2 }, {  754, 0x8e82 },
-  {  760, 0x6440 }, {  764, 0x0000 }, {  764, 0x9401 }, {  768, 0xd040 },
-  /* 0x5500 */
-  {  772, 0x7323 }, {  780, 0x0020 }, {  781, 0x0c00 }, {  783, 0x3864 },
-  {  789, 0x2682 }, {  794, 0x4d03 }, {  800, 0x0053 }, {  804, 0x8000 },
-  {  805, 0xc146 }, {  811, 0x009e }, {  816, 0x2018 }, {  819, 0x8004 },
-  {  821, 0x5a4a }, {  828, 0x498e }, {  835, 0x0204 }, {  837, 0x8040 },
-  /* 0x5600 */
-  {  839, 0xe520 }, {  845, 0x0207 }, {  849, 0x1000 }, {  850, 0xbaa9 },
-  {  859, 0xaa5b }, {  868, 0x4010 }, {  870, 0xa24f }, {  878, 0x0026 },
-  {  881, 0x1930 }, {  886, 0xe620 }, {  892, 0x3bc0 }, {  899, 0x408a },
-  {  903, 0xbe20 }, {  910, 0xb201 }, {  915, 0x29f2 }, {  923, 0x00c2 },
-  /* 0x5700 */
-  {  926, 0x1486 }, {  931, 0x2c22 }, {  936, 0xd63d }, {  946, 0xe018 },
-  {  951, 0x3060 }, {  955, 0x0004 }, {  956, 0xe9a4 }, {  964, 0x5ebb },
-  {  975, 0x100a }, {  978, 0xf6b0 }, {  987, 0x1382 }, {  992, 0x2100 },
-  {  994, 0x9180 }, {  998, 0x6020 }, { 1001, 0x22d2 }, { 1007, 0xe161 },
-  /* 0x5800 */
-  { 1014, 0x3318 }, { 1020, 0xc800 }, { 1023, 0x20c1 }, { 1027, 0x8204 },
-  { 1030, 0xb200 }, { 1034, 0x8021 }, { 1037, 0x0192 }, { 1041, 0x9100 },
-  { 1044, 0xb783 }, { 1053, 0x2051 }, { 1057, 0x0247 }, { 1062, 0x1006 },
-  { 1065, 0x6114 }, { 1070, 0x2455 }, { 1076, 0x0206 }, { 1079, 0x0008 },
-  /* 0x5900 */
-  { 1080, 0x1860 }, { 1084, 0x201c }, { 1088, 0x811a }, { 1093, 0x8069 },
-  { 1098, 0x0048 }, { 1100, 0xea0c }, { 1107, 0xa80a }, { 1112, 0x1a64 },
-  { 1118, 0x5800 }, { 1121, 0x80a4 }, { 1125, 0xe090 }, { 1130, 0x1489 },
-  { 1135, 0x251a }, { 1141, 0xe004 }, { 1145, 0xc098 }, { 1150, 0x0096 },
-  /* 0x5a00 */
-  { 1154, 0x7011 }, { 1159, 0x400c }, { 1162, 0x2598 }, { 1168, 0x0001 },
-  { 1169, 0x11b0 }, { 1174, 0x4021 }, { 1177, 0x20a8 }, { 1181, 0x4c80 },
-  { 1185, 0x0800 }, { 1186, 0xd249 }, { 1193, 0x1085 }, { 1197, 0x8d2e },
-  { 1205, 0x8150 }, { 1209, 0x1400 }, { 1211, 0x4421 }, { 1215, 0x2060 },
-  /* 0x5b00 */
-  { 1218, 0x0103 }, { 1221, 0x2a80 }, { 1225, 0x2022 }, { 1228, 0x0110 },
-  { 1230, 0x1802 }, { 1233, 0x4044 }, { 1236, 0xc100 }, { 1239, 0xf000 },
-  { 1243, 0x4452 }, { 1248, 0x005b }, { 1253, 0xb300 }, { 1258, 0x1486 },
-  { 1263, 0xa003 }, { 1267, 0x07c0 }, { 1272, 0x8001 }, { 1274, 0x2012 },
-  /* 0x5c00 */
-  { 1277, 0x1000 }, { 1278, 0xc080 }, { 1281, 0x5a48 }, { 1287, 0x0065 },
-  { 1291, 0x0000 }, { 1291, 0x1600 }, { 1294, 0x238c }, { 1300, 0x3c31 },
-  { 1307, 0x8580 }, { 1311, 0xa004 }, { 1314, 0x044d }, { 1319, 0x0434 },
-  { 1323, 0x0a00 }, { 1325, 0x2084 }, { 1328, 0x4000 }, { 1329, 0x0016 },
-  /* 0x5d00 */
-  { 1332, 0x2042 }, { 1335, 0x0004 }, { 1336, 0x08d8 }, { 1341, 0xa212 },
-  { 1346, 0x054c }, { 1351, 0x8222 }, { 1355, 0x2417 }, { 1361, 0xc601 },
-  { 1366, 0x050a }, { 1370, 0x8a3c }, { 1377, 0x0881 }, { 1380, 0x0315 },
-  { 1385, 0x4888 }, { 1389, 0x0301 }, { 1392, 0x0211 }, { 1395, 0x0300 },
-  /* 0x5e00 */
-  { 1397, 0x2081 }, { 1400, 0x8134 }, { 1405, 0x4101 }, { 1408, 0x4024 },
-  { 1411, 0x0a00 }, { 1413, 0x5943 }, { 1420, 0x7d00 }, { 1426, 0x0001 },
-  { 1427, 0x4801 }, { 1430, 0x0000 }, { 1430, 0x1534 }, { 1436, 0xe00a },
-  { 1441, 0x5840 }, { 1445, 0x5036 }, { 1451, 0x0820 }, { 1453, 0x0000 },
-  /* 0x5f00 */
-  { 1453, 0x41c4 }, { 1458, 0x3200 }, { 1461, 0x591e }, { 1469, 0xa851 },
-  { 1475, 0x20b1 }, { 1480, 0x0911 }, { 1484, 0x8099 }, { 1489, 0x6534 },
-  { 1496, 0xa200 }, { 1499, 0x3040 }, { 1502, 0x9894 }, { 1508, 0x0103 },
-  { 1511, 0x0b90 }, { 1516, 0x401f }, { 1522, 0xf706 }, { 1531, 0x144c },
-  /* 0x6000 */
-  { 1536, 0x2480 }, { 1539, 0x8598 }, { 1545, 0x2010 }, { 1547, 0x0028 },
-  { 1549, 0x1381 }, { 1554, 0x20d2 }, { 1559, 0x0082 }, { 1561, 0xc002 },
-  { 1564, 0x4544 }, { 1569, 0x612a }, { 1575, 0x0134 }, { 1579, 0x4883 },
-  { 1584, 0xcf14 }, { 1592, 0x6a30 }, { 1598, 0x0024 }, { 1600, 0x3124 },
-  /* 0x6100 */
-  { 1605, 0x1484 }, { 1609, 0x52df }, { 1619, 0x0c04 }, { 1622, 0x02e3 },
-  { 1628, 0x0262 }, { 1632, 0x4000 }, { 1633, 0x1001 }, { 1635, 0x9904 },
-  { 1640, 0x281b }, { 1646, 0xb18c }, { 1653, 0x2521 }, { 1658, 0x1300 },
-  { 1661, 0xc007 }, { 1666, 0xf020 }, { 1671, 0xb2a6 }, { 1679, 0x0000 },
-  /* 0x6200 */
-  { 1679, 0x009a }, { 1683, 0x1028 }, { 1686, 0x0a8d }, { 1692, 0x2200 },
-  { 1694, 0x105c }, { 1699, 0x1457 }, { 1706, 0xa010 }, { 1709, 0x2408 },
-  { 1712, 0xe000 }, { 1715, 0x0001 }, { 1716, 0x0140 }, { 1718, 0xc4c8 },
-  { 1724, 0x4010 }, { 1726, 0x0460 }, { 1729, 0x0400 }, { 1730, 0x3014 },
-  /* 0x6300 */
-  { 1734, 0x2c18 }, { 1739, 0x0149 }, { 1743, 0x2600 }, { 1746, 0x1260 },
-  { 1750, 0x4c5e }, { 1758, 0x091c }, { 1763, 0x3060 }, { 1767, 0xb132 },
-  { 1774, 0x0494 }, { 1778, 0x4631 }, { 1784, 0xe050 }, { 1789, 0x2000 },
-  { 1790, 0x4122 }, { 1794, 0x103a }, { 1799, 0x1421 }, { 1803, 0x032c },
-  /* 0x6400 */
-  { 1808, 0x0600 }, { 1810, 0x4115 }, { 1815, 0x8635 }, { 1822, 0xa021 },
-  { 1826, 0x8800 }, { 1828, 0xbc1e }, { 1837, 0x200b }, { 1841, 0x2818 },
-  { 1845, 0x80a0 }, { 1848, 0xab03 }, { 1855, 0x114a }, { 1860, 0xe008 },
-  { 1864, 0x5e10 }, { 1870, 0x00a3 }, { 1874, 0x2630 }, { 1879, 0x88a1 },
-  /* 0x6500 */
-  { 1884, 0x8712 }, { 1890, 0xca58 }, { 1897, 0x4244 }, { 1901, 0x3402 },
-  { 1905, 0x0288 }, { 1908, 0x8015 }, { 1912, 0x0881 }, { 1915, 0x2400 },
-  { 1917, 0x0422 }, { 1920, 0x2124 }, { 1924, 0x4049 }, { 1928, 0x801c },
-  { 1932, 0x4304 }, { 1936, 0x8151 }, { 1941, 0x0000 }, { 1941, 0xc235 },
-  /* 0x6600 */
-  { 1948, 0x2311 }, { 1953, 0x6066 }, { 1959, 0x5e5e }, { 1969, 0x028b },
-  { 1974, 0x5461 }, { 1980, 0x1b82 }, { 1986, 0x1c03 }, { 1991, 0xdba8 },
-  { 2000, 0x3801 }, { 2004, 0x9e05 }, { 2011, 0x2011 }, { 2014, 0x8826 },
-  { 2019, 0xd10d }, { 2026, 0x8810 }, { 2029, 0x5900 }, { 2033, 0x0c00 },
-  /* 0x6700 */
-  { 2035, 0x40a0 }, { 2038, 0x1208 }, { 2041, 0x0005 }, { 2043, 0x4008 },
-  { 2045, 0x11a0 }, { 2049, 0x2030 }, { 2052, 0x5040 }, { 2055, 0x0850 },
-  { 2058, 0xc012 }, { 2062, 0x0b4a }, { 2068, 0x0000 }, { 2068, 0x3827 },
-  { 2075, 0x032d }, { 2081, 0x1284 }, { 2085, 0x0042 }, { 2087, 0x02c5 },
-  /* 0x6800 */
-  { 2092, 0x0000 }, { 2092, 0xa210 }, { 2096, 0xb180 }, { 2101, 0x880b },
-  { 2106, 0x1430 }, { 2110, 0x09a4 }, { 2115, 0xc800 }, { 2118, 0x1e27 },
-  { 2126, 0x0154 }, { 2130, 0x1540 }, { 2134, 0x462a }, { 2140, 0x0804 },
-  { 2142, 0x9120 }, { 2146, 0x324b }, { 2153, 0x3d20 }, { 2159, 0x3863 },
-  /* 0x6900 */
-  { 2166, 0x0640 }, { 2169, 0x00cb }, { 2174, 0x0000 }, { 2174, 0x092a },
-  { 2179, 0x4224 }, { 2183, 0x0880 }, { 2185, 0x1378 }, { 2192, 0x8c07 },
-  { 2198, 0x2001 }, { 2200, 0x0144 }, { 2203, 0xa962 }, { 2210, 0x1580 },
-  { 2214, 0x0120 }, { 2216, 0x00c2 }, { 2219, 0xc024 }, { 2223, 0x402a },
-  /* 0x6a00 */
-  { 2227, 0x800b }, { 2231, 0x2422 }, { 2235, 0x0111 }, { 2238, 0xc895 },
-  { 2245, 0x4660 }, { 2250, 0x0867 }, { 2256, 0x0490 }, { 2259, 0x400a },
-  { 2262, 0x0aca }, { 2268, 0xe802 }, { 2273, 0x8820 }, { 2276, 0xe013 },
-  { 2282, 0x1340 }, { 2286, 0x3071 }, { 2292, 0x1090 }, { 2295, 0x3007 },
-  /* 0x6b00 */
-  { 2300, 0x82cc }, { 2306, 0x4883 }, { 2311, 0x9910 }, { 2316, 0x8860 },
-  { 2320, 0x2440 }, { 2323, 0x2144 }, { 2327, 0x4881 }, { 2331, 0x6021 },
-  { 2335, 0x0024 }, { 2337, 0x8880 }, { 2340, 0x730d }, { 2348, 0x6301 },
-  { 2353, 0x1218 }, { 2357, 0x0440 }, { 2359, 0x40ca }, { 2364, 0x8282 },
-  /* 0x6c00 */
-  { 2368, 0x6234 }, { 2374, 0x8205 }, { 2378, 0x51c0 }, { 2383, 0x8c68 },
-  { 2389, 0xac00 }, { 2393, 0x1a14 }, { 2398, 0xa880 }, { 2402, 0x0b50 },
-  { 2407, 0x02e0 }, { 2411, 0x91b0 }, { 2417, 0x0000 }, { 2417, 0x0015 },
-  { 2420, 0xa044 }, { 2424, 0x1457 }, { 2431, 0x5a81 }, { 2437, 0x0014 },
-  /* 0x6d00 */
-  { 2439, 0xc490 }, { 2444, 0x040a }, { 2447, 0xc1c0 }, { 2452, 0x9202 },
-  { 2456, 0x0000 }, { 2456, 0xc080 }, { 2459, 0x80a2 }, { 2463, 0x1001 },
-  { 2465, 0x0084 }, { 2467, 0x01d6 }, { 2473, 0x1400 }, { 2475, 0xa290 },
-  { 2480, 0xc510 }, { 2485, 0xa840 }, { 2489, 0x8225 }, { 2494, 0x1051 },
-  /* 0x6e00 */
-  { 2498, 0x0011 }, { 2500, 0x4000 }, { 2501, 0x0084 }, { 2503, 0x1a44 },
-  { 2508, 0x8b30 }, { 2514, 0x709e }, { 2522, 0x010c }, { 2525, 0x2808 },
-  { 2528, 0x2000 }, { 2529, 0x0208 }, { 2531, 0x6081 }, { 2535, 0x880a },
-  { 2539, 0xe58b }, { 2548, 0x0000 }, { 2548, 0x6800 }, { 2551, 0x2a00 },
-  /* 0x6f00 */
-  { 2554, 0x3510 }, { 2559, 0x0d40 }, { 2563, 0xa640 }, { 2568, 0x1849 },
-  { 2573, 0x8000 }, { 2574, 0x668e }, { 2582, 0x1106 }, { 2586, 0x6000 },
-  { 2588, 0x3988 }, { 2594, 0x845d }, { 2601, 0xc1e1 }, { 2608, 0x1061 },
-  { 2612, 0x05a0 }, { 2616, 0x4400 }, { 2618, 0x0300 }, { 2620, 0x3221 },
-  /* 0x7000 */
-  { 2625, 0x20e1 }, { 2630, 0x0080 }, { 2631, 0x8009 }, { 2634, 0x1290 },
-  { 2638, 0x4f18 }, { 2645, 0x6030 }, { 2649, 0x5030 }, { 2653, 0x4060 },
-  { 2656, 0x0062 }, { 2659, 0x09f0 }, { 2665, 0x0810 }, { 2667, 0x0093 },
-  { 2671, 0x0400 }, { 2672, 0x117a }, { 2679, 0x0010 }, { 2680, 0x0400 },
-  /* 0x7100 */
-  { 2681, 0x98f8 }, { 2689, 0x4000 }, { 2690, 0xa801 }, { 2694, 0x0103 },
-  { 2697, 0x0ce2 }, { 2703, 0x5485 }, { 2709, 0x0101 }, { 2711, 0x0200 },
-  { 2712, 0x10a1 }, { 2716, 0x0c04 }, { 2719, 0x8005 }, { 2722, 0x840d },
-  { 2727, 0x1813 }, { 2732, 0x1648 }, { 2737, 0x0000 }, { 2737, 0x4100 },
-  /* 0x7200 */
-  { 2739, 0x0381 }, { 2743, 0xa488 }, { 2748, 0x8810 }, { 2751, 0x0310 },
-  { 2754, 0xc02e }, { 2760, 0x5469 }, { 2767, 0xc909 }, { 2773, 0x9982 },
-  { 2779, 0x6210 }, { 2783, 0x0808 }, { 2785, 0x6100 }, { 2788, 0x4012 },
-  { 2791, 0x1282 }, { 2795, 0x8160 }, { 2799, 0x0020 }, { 2800, 0x4c18 },
-  /* 0x7300 */
-  { 2805, 0x28b4 }, { 2811, 0x430c }, { 2816, 0x1194 }, { 2821, 0x2c26 },
-  { 2827, 0x2008 }, { 2829, 0xe145 }, { 2836, 0xdac1 }, { 2844, 0x1282 },
-  { 2848, 0x406b }, { 2854, 0xd1a9 }, { 2862, 0x2c65 }, { 2869, 0xb2a0 },
-  { 2875, 0x9a60 }, { 2881, 0x224c }, { 2886, 0x02ca }, { 2891, 0xaeb0 },
-  /* 0x7400 */
-  { 2899, 0x0493 }, { 2904, 0x0c02 }, { 2907, 0xff50 }, { 2917, 0x0203 },
-  { 2920, 0x28d9 }, { 2927, 0x2086 }, { 2931, 0x69c4 }, { 2938, 0x0006 },
-  { 2940, 0x82e3 }, { 2947, 0x9707 }, { 2955, 0xcf4b }, { 2965, 0x8a26 },
-  { 2971, 0x1300 }, { 2974, 0xcd09 }, { 2981, 0x8d10 }, { 2986, 0x9c10 },
-  /* 0x7500 */
-  { 2991, 0x0040 }, { 2992, 0x00c4 }, { 2995, 0x8693 }, { 3002, 0xe240 },
-  { 3007, 0x4189 }, { 3012, 0xc085 }, { 3017, 0x8002 }, { 3019, 0x7e02 },
-  { 3026, 0x0022 }, { 3028, 0x122d }, { 3034, 0x0014 }, { 3036, 0x8410 },
-  { 3039, 0xd053 }, { 3046, 0x9080 }, { 3049, 0xd093 }, { 3056, 0x0202 },
-  /* 0x7600 */
-  { 3058, 0x959d }, { 3067, 0x7a6c }, { 3076, 0x2268 }, { 3081, 0x172c },
-  { 3088, 0x0e3b }, { 3096, 0x8220 }, { 3099, 0xe030 }, { 3104, 0x0012 },
-  { 3106, 0x3022 }, { 3110, 0xb820 }, { 3115, 0x25fd }, { 3125, 0x2000 },
-  { 3126, 0x5a22 }, { 3132, 0x0210 }, { 3134, 0x1141 }, { 3138, 0x1243 },
-  /* 0x7700 */
-  { 3143, 0x4441 }, { 3147, 0x16b4 }, { 3154, 0xe104 }, { 3159, 0x6270 },
-  { 3165, 0xe464 }, { 3172, 0xd0c4 }, { 3178, 0x1495 }, { 3184, 0x241d },
-  { 3190, 0x3011 }, { 3194, 0x8470 }, { 3199, 0xc484 }, { 3204, 0x4022 },
-  { 3207, 0x0208 }, { 3209, 0xc226 }, { 3215, 0x1451 }, { 3220, 0x0913 },
-  /* 0x7800 */
-  { 3225, 0x6260 }, { 3230, 0x2002 }, { 3232, 0x600e }, { 3237, 0x00a1 },
-  { 3240, 0x5198 }, { 3246, 0x5004 }, { 3249, 0x451b }, { 3256, 0x4400 },
-  { 3258, 0x8400 }, { 3260, 0xe110 }, { 3265, 0x3112 }, { 3270, 0xa80f },
-  { 3277, 0x5380 }, { 3282, 0x886c }, { 3288, 0x0453 }, { 3293, 0x8ccc },
-  /* 0x7900 */
-  { 3300, 0x1041 }, { 3303, 0xd401 }, { 3308, 0x22a1 }, { 3313, 0xa832 },
-  { 3319, 0x8c70 }, { 3325, 0x1912 }, { 3330, 0x0a80 }, { 3333, 0x5a04 },
-  { 3338, 0x1800 }, { 3340, 0x197a }, { 3348, 0x8b02 }, { 3353, 0x0912 },
-  { 3357, 0x8594 }, { 3363, 0x6450 }, { 3368, 0x2c25 }, { 3374, 0x1102 },
-  /* 0x7a00 */
-  { 3377, 0x168c }, { 3383, 0x4822 }, { 3387, 0xa882 }, { 3392, 0x0731 },
-  { 3398, 0x11b0 }, { 3403, 0xb260 }, { 3409, 0x24a1 }, { 3414, 0x4120 },
-  { 3417, 0x0c65 }, { 3423, 0x4013 }, { 3427, 0x1009 }, { 3430, 0x1a28 },
-  { 3435, 0x5240 }, { 3439, 0x0802 }, { 3441, 0x1b00 }, { 3445, 0x6812 },
-  /* 0x7b00 */
-  { 3450, 0x0080 }, { 3451, 0x8010 }, { 3453, 0xee88 }, { 3461, 0xa013 },
-  { 3466, 0x4083 }, { 3470, 0x0020 }, { 3471, 0xa651 }, { 3478, 0x008c },
-  { 3481, 0x4210 }, { 3484, 0x4843 }, { 3489, 0x9021 }, { 3493, 0x3c65 },
-  { 3501, 0x0524 }, { 3505, 0x0ed0 }, { 3511, 0x0500 }, { 3513, 0x5734 },
-  /* 0x7c00 */
-  { 3521, 0xda5e }, { 3531, 0x0a00 }, { 3533, 0x1161 }, { 3538, 0x065a },
-  { 3544, 0x0440 }, { 3546, 0x7e2e }, { 3556, 0x628a }, { 3562, 0x3205 },
-  { 3567, 0x80c0 }, { 3570, 0x4010 }, { 3572, 0x0041 }, { 3574, 0x9cc1 },
-  { 3581, 0xa390 }, { 3587, 0x26b8 }, { 3594, 0x0a40 }, { 3597, 0x0020 },
-  /* 0x7d00 */
-  { 3598, 0x8388 }, { 3603, 0x604e }, { 3609, 0x2448 }, { 3613, 0x7002 },
-  { 3617, 0x2183 }, { 3622, 0x368a }, { 3629, 0x04a0 }, { 3632, 0x8d01 },
-  { 3637, 0x396e }, { 3646, 0x60c2 }, { 3651, 0x04c0 }, { 3654, 0x02c8 },
-  { 3658, 0x707c }, { 3666, 0x0280 }, { 3668, 0x2c64 }, { 3674, 0x0662 },
-  /* 0x7e00 */
-  { 3679, 0x0101 }, { 3681, 0x30a3 }, { 3687, 0xb181 }, { 3693, 0x8048 },
-  { 3696, 0x40b0 }, { 3700, 0x8105 }, { 3704, 0xc826 }, { 3710, 0x4108 },
-  { 3713, 0x24c2 }, { 3718, 0x6522 }, { 3724, 0x0000 }, { 3724, 0x0000 },
-  { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 },
-  /* 0x7f00 */
-  { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0xf800 },
-  { 3729, 0x8098 }, { 3733, 0x380c }, { 3738, 0x207a }, { 3744, 0xe002 },
-  { 3748, 0xa801 }, { 3752, 0x10c3 }, { 3757, 0x2446 }, { 3762, 0x9010 },
-  { 3765, 0xc109 }, { 3770, 0x8800 }, { 3772, 0xd128 }, { 3778, 0xe404 },
-  /* 0x8000 */
-  { 3783, 0xe580 }, { 3789, 0xe05a }, { 3796, 0x5051 }, { 3801, 0x56b1 },
-  { 3809, 0x0011 }, { 3811, 0x0000 }, { 3811, 0x2051 }, { 3815, 0x0022 },
-  { 3817, 0x4102 }, { 3820, 0x5000 }, { 3822, 0x08c0 }, { 3825, 0x0300 },
-  { 3827, 0xa100 }, { 3830, 0x01b4 }, { 3835, 0x6001 }, { 3838, 0x464d },
-  /* 0x8100 */
-  { 3845, 0x0808 }, { 3847, 0x51c0 }, { 3852, 0x1091 }, { 3856, 0x1421 },
-  { 3860, 0x14a0 }, { 3864, 0x0084 }, { 3866, 0xa383 }, { 3873, 0x0080 },
-  { 3874, 0x4872 }, { 3880, 0x4941 }, { 3885, 0x4004 }, { 3887, 0x0814 },
-  { 3890, 0xcc28 }, { 3896, 0x68a0 }, { 3901, 0x1812 }, { 3905, 0xa367 },
-  /* 0x8200 */
-  { 3914, 0x8009 }, { 3917, 0x2618 }, { 3922, 0x0106 }, { 3925, 0x0414 },
-  { 3928, 0xc878 }, { 3935, 0x1042 }, { 3938, 0x2089 }, { 3942, 0xa810 },
-  { 3946, 0x469b }, { 3954, 0x0d52 }, { 3960, 0x479b }, { 3969, 0xd495 },
-  { 3977, 0x0040 }, { 3978, 0x0421 }, { 3981, 0xa515 }, { 3988, 0x60c0 },
-  /* 0x8300 */
-  { 3992, 0x0d83 }, { 3998, 0xe800 }, { 4002, 0x7006 }, { 4007, 0x3489 },
-  { 4013, 0x609c }, { 4019, 0x00fa }, { 4025, 0x0000 }, { 4025, 0xa101 },
-  { 4029, 0x2055 }, { 4034, 0x3b34 }, { 4042, 0x32c0 }, { 4047, 0xc000 },
-  { 4049, 0x8281 }, { 4053, 0x2013 }, { 4057, 0x0500 }, { 4059, 0x1340 },
-  /* 0x8400 */
-  { 4063, 0x8442 }, { 4067, 0x0222 }, { 4070, 0x8000 }, { 4071, 0x0200 },
-  { 4072, 0xa5a0 }, { 4078, 0x1746 }, { 4085, 0x04b1 }, { 4090, 0x3159 },
-  { 4097, 0x0022 }, { 4099, 0x402c }, { 4103, 0x8740 }, { 4108, 0x6412 },
-  { 4113, 0x9185 }, { 4119, 0x1008 }, { 4121, 0x8480 }, { 4124, 0x2c87 },
-  /* 0x8500 */
-  { 4131, 0x508c }, { 4136, 0x5001 }, { 4139, 0x8cbc }, { 4147, 0x805c },
-  { 4152, 0x8040 }, { 4154, 0xf24f }, { 4164, 0x8817 }, { 4170, 0xae00 },
-  { 4175, 0x9a62 }, { 4182, 0xa108 }, { 4186, 0x20a5 }, { 4191, 0xf1d0 },
-  { 4199, 0x4c84 }, { 4204, 0x8500 }, { 4207, 0x2141 }, { 4211, 0x9048 },
-  /* 0x8600 */
-  { 4215, 0x6031 }, { 4220, 0x4b07 }, { 4227, 0x0282 }, { 4230, 0x3540 },
-  { 4235, 0x0047 }, { 4239, 0x23cc }, { 4246, 0x921f }, { 4254, 0x04e0 },
-  { 4258, 0x2100 }, { 4260, 0x1542 }, { 4265, 0x21c2 }, { 4270, 0x83ba },
-  { 4278, 0x002b }, { 4282, 0x14a6 }, { 4288, 0x00a9 }, { 4292, 0x3400 },
-  /* 0x8700 */
-  { 4295, 0xc8b0 }, { 4301, 0xc219 }, { 4307, 0xc10a }, { 4312, 0x7606 },
-  { 4319, 0x2029 }, { 4323, 0x2100 }, { 4325, 0x8032 }, { 4329, 0x0806 },
-  { 4332, 0x1bf8 }, { 4341, 0x43a9 }, { 4348, 0x7089 }, { 4354, 0xc022 },
-  { 4358, 0x4702 }, { 4363, 0x9660 }, { 4369, 0x2c1c }, { 4375, 0x850a },
-  /* 0x8800 */
-  { 4380, 0x0e4a }, { 4386, 0xdf1d }, { 4397, 0x6100 }, { 4400, 0x1425 },
-  { 4405, 0x4f2a }, { 4413, 0x9562 }, { 4420, 0x0211 }, { 4423, 0x0a02 },
-  { 4426, 0x0001 }, { 4427, 0x9d00 }, { 4432, 0x0501 }, { 4435, 0x6400 },
-  { 4438, 0x7c01 }, { 4444, 0x480e }, { 4449, 0x8080 }, { 4451, 0x00a3 },
-  /* 0x8900 */
-  { 4455, 0xe042 }, { 4460, 0x1760 }, { 4466, 0x01c1 }, { 4470, 0x4627 },
-  { 4477, 0x8265 }, { 4483, 0x1c84 }, { 4488, 0x480e }, { 4493, 0x3c29 },
-  { 4500, 0x2200 }, { 4502, 0x9831 }, { 4508, 0x0021 }, { 4510, 0x10f1 },
-  { 4516, 0x0000 }, { 4516, 0x01f0 }, { 4521, 0x2a20 }, { 4525, 0xa24a },
-  /* 0x8a00 */
-  { 4531, 0x80b0 }, { 4535, 0x4036 }, { 4540, 0x9855 }, { 4547, 0x60a0 },
-  { 4551, 0x62a9 }, { 4558, 0x31c8 }, { 4564, 0x00a2 }, { 4567, 0xcee0 },
-  { 4575, 0x8849 }, { 4580, 0x82c5 }, { 4586, 0xc280 }, { 4590, 0x48c8 },
-  { 4595, 0x0748 }, { 4600, 0xa0ba }, { 4607, 0x1000 }, { 4608, 0x9071 },
-  /* 0x8b00 */
-  { 4614, 0x0c60 }, { 4618, 0xd002 }, { 4622, 0x2000 }, { 4623, 0x1081 },
-  { 4626, 0x217c }, { 4633, 0x421c }, { 4638, 0x2008 }, { 4640, 0x5340 },
-  { 4645, 0xa832 }, { 4651, 0xd030 }, { 4656, 0x0000 }, { 4656, 0x0000 },
-  { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 },
-  /* 0x8c00 */
-  { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x6300 },
-  { 4660, 0x8aa0 }, { 4665, 0x2b9a }, { 4673, 0x2358 }, { 4679, 0x4868 },
-  { 4684, 0x08c0 }, { 4687, 0x1a0d }, { 4693, 0x0010 }, { 4694, 0x0600 },
-  { 4696, 0x8a60 }, { 4701, 0x2260 }, { 4705, 0x9102 }, { 4709, 0xc1a5 },
-  /* 0x8d00 */
-  { 4716, 0x020a }, { 4719, 0x0884 }, { 4722, 0x0000 }, { 4722, 0x0000 },
-  { 4722, 0x0000 }, { 4722, 0x0000 }, { 4722, 0x5220 }, { 4726, 0x8000 },
-  { 4727, 0x2114 }, { 4731, 0xc023 }, { 4736, 0x9841 }, { 4741, 0x1aa4 },
-  { 4747, 0x45e1 }, { 4754, 0x02b2 }, { 4759, 0x10b0 }, { 4763, 0x2017 },
-  /* 0x8e00 */
-  { 4768, 0x0872 }, { 4773, 0x0052 }, { 4776, 0x00cf }, { 4782, 0x23ca },
-  { 4789, 0xe803 }, { 4795, 0x7810 }, { 4800, 0xb206 }, { 4806, 0x0e03 },
-  { 4811, 0x020c }, { 4814, 0x6c25 }, { 4821, 0x6284 }, { 4826, 0x0c28 },
-  { 4830, 0x809b }, { 4836, 0x1012 }, { 4839, 0x6100 }, { 4842, 0x0683 },
-  /* 0x8f00 */
-  { 4847, 0x8185 }, { 4852, 0x41c1 }, { 4857, 0x71ab }, { 4866, 0x04f0 },
-  { 4871, 0x808b }, { 4876, 0x613e }, { 4884, 0x0020 }, { 4885, 0x0000 },
-  { 4885, 0x0000 }, { 4885, 0x2000 }, { 4886, 0x0073 }, { 4891, 0x4160 },
-  { 4895, 0x2c43 }, { 4901, 0x002d }, { 4905, 0x4119 }, { 4910, 0x4862 },
-  /* 0x9000 */
-  { 4915, 0x1114 }, { 4919, 0x0900 }, { 4921, 0xb700 }, { 4927, 0x8098 },
-  { 4931, 0x1018 }, { 4934, 0x2800 }, { 4936, 0x10c4 }, { 4940, 0x0211 },
-  { 4943, 0x5920 }, { 4948, 0x0ba1 }, { 4954, 0x0027 }, { 4958, 0x605d },
-  { 4965, 0x11b8 }, { 4971, 0xb3a4 }, { 4979, 0x8820 }, { 4982, 0xc051 },
-  /* 0x9100 */
-  { 4987, 0x2171 }, { 4993, 0x55d1 }, { 5001, 0xc2ad }, { 5009, 0x36d2 },
-  { 5017, 0x8188 }, { 5021, 0x0e88 }, { 5026, 0x2092 }, { 5030, 0x0e10 },
-  { 5034, 0x446a }, { 5040, 0x413a }, { 5046, 0x7142 }, { 5052, 0xb84f },
-  { 5061, 0x002c }, { 5064, 0x4698 }, { 5070, 0xf630 }, { 5078, 0x2a83 },
-  /* 0x9200 */
-  { 5084, 0x16f3 }, { 5093, 0x314d }, { 5100, 0xc178 }, { 5107, 0x5769 },
-  { 5116, 0xe4cd }, { 5125, 0x3302 }, { 5130, 0xc3a3 }, { 5138, 0xbbe1 },
-  { 5148, 0x6700 }, { 5153, 0x8284 }, { 5157, 0x89b1 }, { 5164, 0xbd44 },
-  { 5172, 0x79ef }, { 5184, 0xb3a9 }, { 5193, 0x51ab }, { 5201, 0x8a01 },
-  /* 0x9300 */
-  { 5205, 0x2105 }, { 5209, 0xf032 }, { 5216, 0x06b2 }, { 5222, 0x00d8 },
-  { 5226, 0x0380 }, { 5229, 0x45a7 }, { 5237, 0xa6b0 }, { 5244, 0xa45b },
-  { 5252, 0xad07 }, { 5260, 0x4924 }, { 5265, 0x0b5a }, { 5272, 0x0470 },
-  { 5276, 0x3ef2 }, { 5286, 0xd208 }, { 5291, 0x00c4 }, { 5294, 0x2f80 },
-  /* 0x9400 */
-  { 5300, 0xe316 }, { 5308, 0x80e0 }, { 5312, 0xc000 }, { 5314, 0xa81e },
-  { 5321, 0x1528 }, { 5326, 0x9220 }, { 5330, 0xe90a }, { 5337, 0x0006 },
-  { 5339, 0x0018 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 },
-  { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 },
-  /* 0x9500 */
-  { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 },
-  { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x4300 },
-  { 5344, 0x7110 }, { 5349, 0xe000 }, { 5352, 0x1a42 }, { 5357, 0xa450 },
-  { 5362, 0x0b40 }, { 5366, 0xe60f }, { 5375, 0x0051 }, { 5378, 0x0000 },
-  /* 0x9600 */
-  { 5378, 0x0000 }, { 5378, 0x6000 }, { 5380, 0x1074 }, { 5385, 0x378a },
-  { 5393, 0x0002 }, { 5394, 0x01d4 }, { 5399, 0x4002 }, { 5401, 0xd810 },
-  { 5406, 0x021e }, { 5411, 0xa442 }, { 5416, 0xc270 }, { 5422, 0x0408 },
-  { 5424, 0x0400 }, { 5425, 0xe504 }, { 5431, 0x8200 }, { 5433, 0x0402 },
-  /* 0x9700 */
-  { 5435, 0x022c }, { 5439, 0x2c00 }, { 5442, 0x010e }, { 5446, 0x000a },
-  { 5448, 0xc40a }, { 5453, 0x0da0 }, { 5458, 0x4488 }, { 5462, 0xa9c8 },
-  { 5469, 0x0201 }, { 5471, 0xc6e0 }, { 5478, 0x5004 }, { 5481, 0xd766 },
-  { 5491, 0x76b2 }, { 5500, 0x6b93 }, { 5509, 0x8013 }, { 5513, 0x0592 },
-  /* 0x9800 */
-  { 5518, 0x6480 }, { 5522, 0x5250 }, { 5527, 0xc869 }, { 5534, 0x402d },
-  { 5539, 0x0490 }, { 5542, 0x06ce }, { 5549, 0x146c }, { 5555, 0x0000 },
-  { 5555, 0x0000 }, { 5555, 0x0000 }, { 5555, 0x6800 }, { 5558, 0x8d91 },
-  { 5565, 0x1124 }, { 5569, 0x0000 }, { 5569, 0x04ea }, { 5575, 0x0048 },
-  /* 0x9900 */
-  { 5577, 0x0184 }, { 5580, 0x9ce2 }, { 5588, 0x08c4 }, { 5592, 0x1e3e },
-  { 5601, 0x61c3 }, { 5608, 0xdb10 }, { 5615, 0x0001 }, { 5616, 0x0000 },
-  { 5616, 0x0000 }, { 5616, 0xa800 }, { 5619, 0x0040 }, { 5620, 0xa627 },
-  { 5628, 0x0208 }, { 5630, 0x5618 }, { 5636, 0x1c80 }, { 5640, 0x6231 },
-  /* 0x9a00 */
-  { 5646, 0x181c }, { 5651, 0x4043 }, { 5655, 0x609d }, { 5662, 0x0168 },
-  { 5666, 0x5c92 }, { 5673, 0x2052 }, { 5677, 0x0000 }, { 5677, 0x0000 },
-  { 5677, 0x0000 }, { 5677, 0x0000 }, { 5677, 0xd400 }, { 5681, 0xca74 },
-  { 5689, 0x414a }, { 5694, 0x18e5 }, { 5701, 0x12b1 }, { 5707, 0xa62c },
-  /* 0x9b00 */
-  { 5714, 0x7b3f }, { 5726, 0x1a45 }, { 5732, 0x2841 }, { 5736, 0x26b8 },
-  { 5743, 0x1900 }, { 5746, 0x48e0 }, { 5751, 0x7d6a }, { 5761, 0x83a8 },
-  { 5767, 0xaef1 }, { 5777, 0x6411 }, { 5782, 0x12c0 }, { 5786, 0xd987 },
-  { 5795, 0x4182 }, { 5799, 0xa181 }, { 5804, 0x8ca0 }, { 5809, 0xa788 },
-  /* 0x9c00 */
-  { 5816, 0x8805 }, { 5820, 0x5742 }, { 5827, 0x07cc }, { 5834, 0x20e2 },
-  { 5839, 0xc63a }, { 5847, 0xf959 }, { 5857, 0x4f08 }, { 5863, 0x08a5 },
-  { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 },
-  { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0040 }, { 5869, 0x0284 },
-  /* 0x9d00 */
-  { 5872, 0x0804 }, { 5874, 0x7182 }, { 5880, 0x8000 }, { 5881, 0x341d },
-  { 5888, 0x04ac }, { 5893, 0x8018 }, { 5896, 0x0e2c }, { 5902, 0x58c1 },
-  { 5908, 0x6458 }, { 5914, 0x01ec }, { 5920, 0x5402 }, { 5924, 0x9222 },
-  { 5929, 0x0688 }, { 5933, 0xc4f0 }, { 5940, 0x4aa1 }, { 5946, 0x4019 },
-  /* 0x9e00 */
-  { 5950, 0x4484 }, { 5954, 0x3267 }, { 5962, 0x0000 }, { 5962, 0x0000 },
-  { 5962, 0x0000 }, { 5962, 0x0000 }, { 5962, 0x0000 }, { 5962, 0x1c00 },
-  { 5965, 0xc0bd }, { 5973, 0x4940 }, { 5977, 0xd110 }, { 5982, 0x0039 },
-  { 5986, 0x0940 }, { 5989, 0x8020 }, { 5991, 0x7090 }, { 5996, 0x8127 },
-  /* 0x9f00 */
-  { 6002, 0x820c }, { 6006, 0x8ed7 }, { 6016, 0x8c44 }, { 6021, 0xb696 },
-  { 6030, 0x00fa }, { 6036, 0x65e8 }, { 6044, 0xe300 }, { 6049, 0x242b },
-  { 6055, 0x8000 }, { 6056, 0x40d7 }, { 6063, 0x002e },
-};
-
-static int
-jisx0212_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0460)
-      summary = &jisx0212_uni2indx_page00[(wc>>4)];
-    else if (wc >= 0x2100 && wc < 0x2130)
-      summary = &jisx0212_uni2indx_page21[(wc>>4)-0x210];
-    else if (wc >= 0x4e00 && wc < 0x9fb0)
-      summary = &jisx0212_uni2indx_page4e[(wc>>4)-0x4e0];
-    if (summary) {
-      unsigned short used = summary->used;
-      unsigned int i = wc & 0x0f;
-      if (used & ((unsigned short) 1 << i)) {
-        unsigned short c;
-        /* Keep in `used' only the bits 0..i-1. */
-        used &= ((unsigned short) 1 << i) - 1;
-        /* Add `summary->indx' and the number of bits set in `used'. */
-        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-        used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-        used = (used & 0x00ff) + (used >> 8);
-        c = jisx0212_2charset[summary->indx + used];
-        r[0] = (c >> 8); r[1] = (c & 0xff);
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/koi8_c.h b/common/fltk/src/xutf8/lcUniConv/koi8_c.h
deleted file mode 100644
index e31c368..0000000
--- a/common/fltk/src/xutf8/lcUniConv/koi8_c.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/koi8_c.h,v 1.2 2000/11/28 16:10:29 dawes Exp $ */
-
-/*
- * KOI8-C
- */
-
-static const unsigned short koi8_c_2uni[128] = {
-  /* 0x80 */
-  0x0493, 0x0497, 0x049b, 0x049d, 0x04a3, 0x04af, 0x04b1, 0x04b3,
-  0x04b7, 0x04b9, 0x04bb, 0x2580, 0x04d9, 0x04e3, 0x04e9, 0x04ef,
-  /* 0x90 */
-  0x0492, 0x0496, 0x049a, 0x049c, 0x04a2, 0x04ae, 0x04b0, 0x04b2,
-  0x04b6, 0x04b8, 0x04ba, 0x2321, 0x04d8, 0x04e2, 0x04e8, 0x04ee,
-  /* 0xa0 */
-  0x00a0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457,
-  0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0491, 0x045e, 0x045f,
-  /* 0xb0 */
-  0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,
-  0x0486, 0x0409, 0x040a, 0x040b, 0x040c, 0x0490, 0x040e, 0x040f,
-  /* 0xc0 */
-  0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
-  0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  /* 0xd0 */
-  0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
-  0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
-  /* 0xe0 */
-  0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
-  0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  /* 0xf0 */
-  0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
-  0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a,
-};
-
-static int
-koi8_c_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) koi8_c_2uni[c-0x80];
-  return 1;
-}
-
-static const unsigned char koi8_c_page00[1] = {
-  0xa0,                                           /* 0xa0-0xa7 */
-};
-static const unsigned char koi8_c_page04[240] = {
-  0x00, 0xb3, 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x00-0x07 */
-  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0x00, 0xbe, 0xbf, /* 0x08-0x0f */
-  0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */
-  0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */
-  0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */
-  0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */
-  0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */
-  0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */
-  0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */
-  0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */
-  0x00, 0xa3, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x50-0x57 */
-  0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0xbd, 0xad, 0x90, 0x80, 0x00, 0x00, 0x91, 0x81, /* 0x90-0x97 */
-  0x00, 0x00, 0x92, 0x82, 0x93, 0x83, 0x00, 0x00, /* 0x98-0x9f */
-  0x00, 0x00, 0x94, 0x84, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x85, /* 0xa8-0xaf */
-  0x96, 0x86, 0x97, 0x87, 0x00, 0x00, 0x98, 0x88, /* 0xb0-0xb7 */
-  0x99, 0x89, 0x9a, 0x8a, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x9c, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x9d, 0x8d, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x9e, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x8f, /* 0xe8-0xef */
-};
-static const unsigned char koi8_c_page22[1] = {
-                                      0xb0,       /* 0x16-0x16 */
-};
-
-static int
-koi8_c_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00a1)
-    c = koi8_c_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x04ef)
-    c = koi8_c_page04[wc-0x0400];
-  else if (wc >= 0x2216 && wc < 0x2217)
-    c = koi8_c_page22[wc-0x2216];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/koi8_r.h b/common/fltk/src/xutf8/lcUniConv/koi8_r.h
deleted file mode 100644
index d85f41a..0000000
--- a/common/fltk/src/xutf8/lcUniConv/koi8_r.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/koi8_r.h,v 1.3 2000/11/29 17:40:34 dawes Exp $ */
-
-/*
- * KOI8-R
- */
-
-/* Specification: RFC 1489 */
-
-#ifdef NEED_TOWC
-static const unsigned short koi8_r_2uni[128] = {
-  /* 0x80 */
-  0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
-  0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
-  /* 0x90 */
-  0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
-  0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
-  /* 0xa0 */
-  0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
-  0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
-  /* 0xb0 */
-  0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
-  0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9,
-  /* 0xc0 */
-  0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
-  0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  /* 0xd0 */
-  0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
-  0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
-  /* 0xe0 */
-  0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
-  0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  /* 0xf0 */
-  0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
-  0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a,
-};
-
-static int
-koi8_r_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) koi8_r_2uni[c-0x80];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char koi8_r_page00[88] = {
-  0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
-  0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */
-};
-static const unsigned char koi8_r_page04[88] = {
-  0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */
-  0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */
-  0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */
-  0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */
-  0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */
-  0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */
-  0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */
-  0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */
-  0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-};
-static const unsigned char koi8_r_page22[80] = {
-  0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */
-};
-static const unsigned char koi8_r_page23[8] = {
-  0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-};
-static const unsigned char koi8_r_page25[168] = {
-  0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, /* 0x50-0x57 */
-  0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */
-  0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, /* 0x60-0x67 */
-  0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-};
-
-static int
-koi8_r_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00f8)
-    c = koi8_r_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x0458)
-    c = koi8_r_page04[wc-0x0400];
-  else if (wc >= 0x2218 && wc < 0x2268)
-    c = koi8_r_page22[wc-0x2218];
-  else if (wc >= 0x2320 && wc < 0x2328)
-    c = koi8_r_page23[wc-0x2320];
-  else if (wc >= 0x2500 && wc < 0x25a8)
-    c = koi8_r_page25[wc-0x2500];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/koi8_u.h b/common/fltk/src/xutf8/lcUniConv/koi8_u.h
deleted file mode 100644
index abb6c89..0000000
--- a/common/fltk/src/xutf8/lcUniConv/koi8_u.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/koi8_u.h,v 1.3 2000/11/29 17:40:34 dawes Exp $ */
-
-/*
- * KOI8-U
- */
-
-/* Specification: RFC 2319 */
-#ifdef NEED_TOWC
-static const unsigned short koi8_u_2uni[128] = {
-  /* 0x80 */
-  0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
-  0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
-  /* 0x90 */
-  0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
-  0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
-  /* 0xa0 */
-  0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457,
-  0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x0491, 0x255d, 0x255e,
-  /* 0xb0 */
-  0x255f, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407,
-  0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x0490, 0x256c, 0x00a9,
-  /* 0xc0 */
-  0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
-  0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  /* 0xd0 */
-  0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
-  0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
-  /* 0xe0 */
-  0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
-  0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  /* 0xf0 */
-  0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
-  0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a,
-};
-
-static int
-koi8_u_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) koi8_u_2uni[c-0x80];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char koi8_u_page00[88] = {
-  0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
-  0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */
-};
-static const unsigned char koi8_u_page04[152] = {
-  0x00, 0xb3, 0x00, 0x00, 0xb4, 0x00, 0xb6, 0xb7, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */
-  0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */
-  0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */
-  0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */
-  0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */
-  0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */
-  0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */
-  0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */
-  0x00, 0xa3, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0xbd, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-};
-static const unsigned char koi8_u_page22[80] = {
-  0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */
-};
-static const unsigned char koi8_u_page23[8] = {
-  0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-};
-static const unsigned char koi8_u_page25[168] = {
-  0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0xa0, 0xa1, 0xa2, 0x00, 0xa5, 0x00, 0x00, 0xa8, /* 0x50-0x57 */
-  0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */
-  0xb1, 0xb2, 0x00, 0xb5, 0x00, 0x00, 0xb8, 0xb9, /* 0x60-0x67 */
-  0xba, 0xbb, 0xbc, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-};
-
-static int
-koi8_u_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00f8)
-    c = koi8_u_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x0498)
-    c = koi8_u_page04[wc-0x0400];
-  else if (wc >= 0x2218 && wc < 0x2268)
-    c = koi8_u_page22[wc-0x2218];
-  else if (wc >= 0x2320 && wc < 0x2328)
-    c = koi8_u_page23[wc-0x2320];
-  else if (wc >= 0x2500 && wc < 0x25a8)
-    c = koi8_u_page25[wc-0x2500];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/ksc5601.h b/common/fltk/src/xutf8/lcUniConv/ksc5601.h
deleted file mode 100644
index 277c8d4..0000000
--- a/common/fltk/src/xutf8/lcUniConv/ksc5601.h
+++ /dev/null
@@ -1,3006 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/ksc5601.h,v 1.5 2003/05/27 22:26:34 tsi Exp $ */
-
-/*
- * KSC5601.1987-0
- */
-#ifdef NEED_TOWC
-static const unsigned short ksc5601_2uni_page21[1115] = {
-  /* 0x21 */
-  0x3000, 0x3001, 0x3002, 0x00b7, 0x2025, 0x2026, 0x00a8, 0x3003,
-  0x00ad, 0x2015, 0x2225, 0xff3c, 0x223c, 0x2018, 0x2019, 0x201c,
-  0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c,
-  0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x00b1, 0x00d7, 0x00f7,
-  0x2260, 0x2264, 0x2265, 0x221e, 0x2234, 0x00b0, 0x2032, 0x2033,
-  0x2103, 0x212b, 0xffe0, 0xffe1, 0xffe5, 0x2642, 0x2640, 0x2220,
-  0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00a7, 0x203b,
-  0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1,
-  0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x2192, 0x2190, 0x2191,
-  0x2193, 0x2194, 0x3013, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d,
-  0x2235, 0x222b, 0x222c, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282,
-  0x2283, 0x222a, 0x2229, 0x2227, 0x2228, 0xffe2,
-  /* 0x22 */
-  0x21d2, 0x21d4, 0x2200, 0x2203, 0x00b4, 0xff5e, 0x02c7, 0x02d8,
-  0x02dd, 0x02da, 0x02d9, 0x00b8, 0x02db, 0x00a1, 0x00bf, 0x02d0,
-  0x222e, 0x2211, 0x220f, 0x00a4, 0x2109, 0x2030, 0x25c1, 0x25c0,
-  0x25b7, 0x25b6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, 0x2663,
-  0x2299, 0x25c8, 0x25a3, 0x25d0, 0x25d1, 0x2592, 0x25a4, 0x25a5,
-  0x25a8, 0x25a7, 0x25a6, 0x25a9, 0x2668, 0x260f, 0x260e, 0x261c,
-  0x261e, 0x00b6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, 0x2196,
-  0x2198, 0x266d, 0x2669, 0x266a, 0x266c, 0x327f, 0x321c, 0x2116,
-  0x33c7, 0x2122, 0x33c2, 0x33d8, 0x2121, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x23 */
-  0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, 0xff08,
-  0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10,
-  0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18,
-  0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20,
-  0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28,
-  0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
-  0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38,
-  0xff39, 0xff3a, 0xff3b, 0xffe6, 0xff3d, 0xff3e, 0xff3f, 0xff40,
-  0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48,
-  0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50,
-  0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58,
-  0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3,
-  /* 0x24 */
-  0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138,
-  0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140,
-  0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148,
-  0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150,
-  0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158,
-  0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160,
-  0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168,
-  0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, 0x3170,
-  0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, 0x3178,
-  0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x317f, 0x3180,
-  0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, 0x3188,
-  0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e,
-  /* 0x25 */
-  0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
-  0x2178, 0x2179, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2160,
-  0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168,
-  0x2169, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
-  0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
-  0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
-  0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
-  0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x26 */
-  0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c,
-  0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b,
-  0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f,
-  0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542,
-  0x2512, 0x2511, 0x251a, 0x2519, 0x2516, 0x2515, 0x250e, 0x250d,
-  0x251e, 0x251f, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, 0x252a,
-  0x252d, 0x252e, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, 0x253a,
-  0x253d, 0x253e, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, 0x2546,
-  0x2547, 0x2548, 0x2549, 0x254a, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x27 */
-  0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33c4, 0x33a3, 0x33a4,
-  0x33a5, 0x33a6, 0x3399, 0x339a, 0x339b, 0x339c, 0x339d, 0x339e,
-  0x339f, 0x33a0, 0x33a1, 0x33a2, 0x33ca, 0x338d, 0x338e, 0x338f,
-  0x33cf, 0x3388, 0x3389, 0x33c8, 0x33a7, 0x33a8, 0x33b0, 0x33b1,
-  0x33b2, 0x33b3, 0x33b4, 0x33b5, 0x33b6, 0x33b7, 0x33b8, 0x33b9,
-  0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33ba, 0x33bb, 0x33bc,
-  0x33bd, 0x33be, 0x33bf, 0x3390, 0x3391, 0x3392, 0x3393, 0x3394,
-  0x2126, 0x33c0, 0x33c1, 0x338a, 0x338b, 0x338c, 0x33d6, 0x33c5,
-  0x33ad, 0x33ae, 0x33af, 0x33db, 0x33a9, 0x33aa, 0x33ab, 0x33ac,
-  0x33dd, 0x33d0, 0x33d3, 0x33c3, 0x33c9, 0x33dc, 0x33c6, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x28 */
-  0x00c6, 0x00d0, 0x00aa, 0x0126, 0xfffd, 0x0132, 0xfffd, 0x013f,
-  0x0141, 0x00d8, 0x0152, 0x00ba, 0x00de, 0x0166, 0x014a, 0xfffd,
-  0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267,
-  0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e, 0x326f,
-  0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, 0x3277,
-  0x3278, 0x3279, 0x327a, 0x327b, 0x24d0, 0x24d1, 0x24d2, 0x24d3,
-  0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da, 0x24db,
-  0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2, 0x24e3,
-  0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2460, 0x2461,
-  0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469,
-  0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x00bd, 0x2153, 0x2154,
-  0x00bc, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e,
-  /* 0x29 */
-  0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0140,
-  0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe, 0x0167, 0x014b, 0x0149,
-  0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, 0x3207,
-  0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e, 0x320f,
-  0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, 0x3217,
-  0x3218, 0x3219, 0x321a, 0x321b, 0x249c, 0x249d, 0x249e, 0x249f,
-  0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7,
-  0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, 0x24af,
-  0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x2474, 0x2475,
-  0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d,
-  0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x00b9, 0x00b2, 0x00b3,
-  0x2074, 0x207f, 0x2081, 0x2082, 0x2083, 0x2084,
-  /* 0x2a */
-  0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
-  0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050,
-  0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
-  0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060,
-  0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
-  0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070,
-  0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
-  0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080,
-  0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
-  0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090,
-  0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x2b */
-  0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8,
-  0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
-  0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8,
-  0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
-  0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8,
-  0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
-  0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8,
-  0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
-  0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8,
-  0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
-  0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x2c */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
-  0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
-  0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e,
-  0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
-  0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
-  0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e,
-  0x044f,
-};
-static const unsigned short ksc5601_2uni_page30[2350] = {
-  /* 0x30 */
-  0xac00, 0xac01, 0xac04, 0xac07, 0xac08, 0xac09, 0xac0a, 0xac10,
-  0xac11, 0xac12, 0xac13, 0xac14, 0xac15, 0xac16, 0xac17, 0xac19,
-  0xac1a, 0xac1b, 0xac1c, 0xac1d, 0xac20, 0xac24, 0xac2c, 0xac2d,
-  0xac2f, 0xac30, 0xac31, 0xac38, 0xac39, 0xac3c, 0xac40, 0xac4b,
-  0xac4d, 0xac54, 0xac58, 0xac5c, 0xac70, 0xac71, 0xac74, 0xac77,
-  0xac78, 0xac7a, 0xac80, 0xac81, 0xac83, 0xac84, 0xac85, 0xac86,
-  0xac89, 0xac8a, 0xac8b, 0xac8c, 0xac90, 0xac94, 0xac9c, 0xac9d,
-  0xac9f, 0xaca0, 0xaca1, 0xaca8, 0xaca9, 0xacaa, 0xacac, 0xacaf,
-  0xacb0, 0xacb8, 0xacb9, 0xacbb, 0xacbc, 0xacbd, 0xacc1, 0xacc4,
-  0xacc8, 0xaccc, 0xacd5, 0xacd7, 0xace0, 0xace1, 0xace4, 0xace7,
-  0xace8, 0xacea, 0xacec, 0xacef, 0xacf0, 0xacf1, 0xacf3, 0xacf5,
-  0xacf6, 0xacfc, 0xacfd, 0xad00, 0xad04, 0xad06,
-  /* 0x31 */
-  0xad0c, 0xad0d, 0xad0f, 0xad11, 0xad18, 0xad1c, 0xad20, 0xad29,
-  0xad2c, 0xad2d, 0xad34, 0xad35, 0xad38, 0xad3c, 0xad44, 0xad45,
-  0xad47, 0xad49, 0xad50, 0xad54, 0xad58, 0xad61, 0xad63, 0xad6c,
-  0xad6d, 0xad70, 0xad73, 0xad74, 0xad75, 0xad76, 0xad7b, 0xad7c,
-  0xad7d, 0xad7f, 0xad81, 0xad82, 0xad88, 0xad89, 0xad8c, 0xad90,
-  0xad9c, 0xad9d, 0xada4, 0xadb7, 0xadc0, 0xadc1, 0xadc4, 0xadc8,
-  0xadd0, 0xadd1, 0xadd3, 0xaddc, 0xade0, 0xade4, 0xadf8, 0xadf9,
-  0xadfc, 0xadff, 0xae00, 0xae01, 0xae08, 0xae09, 0xae0b, 0xae0d,
-  0xae14, 0xae30, 0xae31, 0xae34, 0xae37, 0xae38, 0xae3a, 0xae40,
-  0xae41, 0xae43, 0xae45, 0xae46, 0xae4a, 0xae4c, 0xae4d, 0xae4e,
-  0xae50, 0xae54, 0xae56, 0xae5c, 0xae5d, 0xae5f, 0xae60, 0xae61,
-  0xae65, 0xae68, 0xae69, 0xae6c, 0xae70, 0xae78,
-  /* 0x32 */
-  0xae79, 0xae7b, 0xae7c, 0xae7d, 0xae84, 0xae85, 0xae8c, 0xaebc,
-  0xaebd, 0xaebe, 0xaec0, 0xaec4, 0xaecc, 0xaecd, 0xaecf, 0xaed0,
-  0xaed1, 0xaed8, 0xaed9, 0xaedc, 0xaee8, 0xaeeb, 0xaeed, 0xaef4,
-  0xaef8, 0xaefc, 0xaf07, 0xaf08, 0xaf0d, 0xaf10, 0xaf2c, 0xaf2d,
-  0xaf30, 0xaf32, 0xaf34, 0xaf3c, 0xaf3d, 0xaf3f, 0xaf41, 0xaf42,
-  0xaf43, 0xaf48, 0xaf49, 0xaf50, 0xaf5c, 0xaf5d, 0xaf64, 0xaf65,
-  0xaf79, 0xaf80, 0xaf84, 0xaf88, 0xaf90, 0xaf91, 0xaf95, 0xaf9c,
-  0xafb8, 0xafb9, 0xafbc, 0xafc0, 0xafc7, 0xafc8, 0xafc9, 0xafcb,
-  0xafcd, 0xafce, 0xafd4, 0xafdc, 0xafe8, 0xafe9, 0xaff0, 0xaff1,
-  0xaff4, 0xaff8, 0xb000, 0xb001, 0xb004, 0xb00c, 0xb010, 0xb014,
-  0xb01c, 0xb01d, 0xb028, 0xb044, 0xb045, 0xb048, 0xb04a, 0xb04c,
-  0xb04e, 0xb053, 0xb054, 0xb055, 0xb057, 0xb059,
-  /* 0x33 */
-  0xb05d, 0xb07c, 0xb07d, 0xb080, 0xb084, 0xb08c, 0xb08d, 0xb08f,
-  0xb091, 0xb098, 0xb099, 0xb09a, 0xb09c, 0xb09f, 0xb0a0, 0xb0a1,
-  0xb0a2, 0xb0a8, 0xb0a9, 0xb0ab, 0xb0ac, 0xb0ad, 0xb0ae, 0xb0af,
-  0xb0b1, 0xb0b3, 0xb0b4, 0xb0b5, 0xb0b8, 0xb0bc, 0xb0c4, 0xb0c5,
-  0xb0c7, 0xb0c8, 0xb0c9, 0xb0d0, 0xb0d1, 0xb0d4, 0xb0d8, 0xb0e0,
-  0xb0e5, 0xb108, 0xb109, 0xb10b, 0xb10c, 0xb110, 0xb112, 0xb113,
-  0xb118, 0xb119, 0xb11b, 0xb11c, 0xb11d, 0xb123, 0xb124, 0xb125,
-  0xb128, 0xb12c, 0xb134, 0xb135, 0xb137, 0xb138, 0xb139, 0xb140,
-  0xb141, 0xb144, 0xb148, 0xb150, 0xb151, 0xb154, 0xb155, 0xb158,
-  0xb15c, 0xb160, 0xb178, 0xb179, 0xb17c, 0xb180, 0xb182, 0xb188,
-  0xb189, 0xb18b, 0xb18d, 0xb192, 0xb193, 0xb194, 0xb198, 0xb19c,
-  0xb1a8, 0xb1cc, 0xb1d0, 0xb1d4, 0xb1dc, 0xb1dd,
-  /* 0x34 */
-  0xb1df, 0xb1e8, 0xb1e9, 0xb1ec, 0xb1f0, 0xb1f9, 0xb1fb, 0xb1fd,
-  0xb204, 0xb205, 0xb208, 0xb20b, 0xb20c, 0xb214, 0xb215, 0xb217,
-  0xb219, 0xb220, 0xb234, 0xb23c, 0xb258, 0xb25c, 0xb260, 0xb268,
-  0xb269, 0xb274, 0xb275, 0xb27c, 0xb284, 0xb285, 0xb289, 0xb290,
-  0xb291, 0xb294, 0xb298, 0xb299, 0xb29a, 0xb2a0, 0xb2a1, 0xb2a3,
-  0xb2a5, 0xb2a6, 0xb2aa, 0xb2ac, 0xb2b0, 0xb2b4, 0xb2c8, 0xb2c9,
-  0xb2cc, 0xb2d0, 0xb2d2, 0xb2d8, 0xb2d9, 0xb2db, 0xb2dd, 0xb2e2,
-  0xb2e4, 0xb2e5, 0xb2e6, 0xb2e8, 0xb2eb, 0xb2ec, 0xb2ed, 0xb2ee,
-  0xb2ef, 0xb2f3, 0xb2f4, 0xb2f5, 0xb2f7, 0xb2f8, 0xb2f9, 0xb2fa,
-  0xb2fb, 0xb2ff, 0xb300, 0xb301, 0xb304, 0xb308, 0xb310, 0xb311,
-  0xb313, 0xb314, 0xb315, 0xb31c, 0xb354, 0xb355, 0xb356, 0xb358,
-  0xb35b, 0xb35c, 0xb35e, 0xb35f, 0xb364, 0xb365,
-  /* 0x35 */
-  0xb367, 0xb369, 0xb36b, 0xb36e, 0xb370, 0xb371, 0xb374, 0xb378,
-  0xb380, 0xb381, 0xb383, 0xb384, 0xb385, 0xb38c, 0xb390, 0xb394,
-  0xb3a0, 0xb3a1, 0xb3a8, 0xb3ac, 0xb3c4, 0xb3c5, 0xb3c8, 0xb3cb,
-  0xb3cc, 0xb3ce, 0xb3d0, 0xb3d4, 0xb3d5, 0xb3d7, 0xb3d9, 0xb3db,
-  0xb3dd, 0xb3e0, 0xb3e4, 0xb3e8, 0xb3fc, 0xb410, 0xb418, 0xb41c,
-  0xb420, 0xb428, 0xb429, 0xb42b, 0xb434, 0xb450, 0xb451, 0xb454,
-  0xb458, 0xb460, 0xb461, 0xb463, 0xb465, 0xb46c, 0xb480, 0xb488,
-  0xb49d, 0xb4a4, 0xb4a8, 0xb4ac, 0xb4b5, 0xb4b7, 0xb4b9, 0xb4c0,
-  0xb4c4, 0xb4c8, 0xb4d0, 0xb4d5, 0xb4dc, 0xb4dd, 0xb4e0, 0xb4e3,
-  0xb4e4, 0xb4e6, 0xb4ec, 0xb4ed, 0xb4ef, 0xb4f1, 0xb4f8, 0xb514,
-  0xb515, 0xb518, 0xb51b, 0xb51c, 0xb524, 0xb525, 0xb527, 0xb528,
-  0xb529, 0xb52a, 0xb530, 0xb531, 0xb534, 0xb538,
-  /* 0x36 */
-  0xb540, 0xb541, 0xb543, 0xb544, 0xb545, 0xb54b, 0xb54c, 0xb54d,
-  0xb550, 0xb554, 0xb55c, 0xb55d, 0xb55f, 0xb560, 0xb561, 0xb5a0,
-  0xb5a1, 0xb5a4, 0xb5a8, 0xb5aa, 0xb5ab, 0xb5b0, 0xb5b1, 0xb5b3,
-  0xb5b4, 0xb5b5, 0xb5bb, 0xb5bc, 0xb5bd, 0xb5c0, 0xb5c4, 0xb5cc,
-  0xb5cd, 0xb5cf, 0xb5d0, 0xb5d1, 0xb5d8, 0xb5ec, 0xb610, 0xb611,
-  0xb614, 0xb618, 0xb625, 0xb62c, 0xb634, 0xb648, 0xb664, 0xb668,
-  0xb69c, 0xb69d, 0xb6a0, 0xb6a4, 0xb6ab, 0xb6ac, 0xb6b1, 0xb6d4,
-  0xb6f0, 0xb6f4, 0xb6f8, 0xb700, 0xb701, 0xb705, 0xb728, 0xb729,
-  0xb72c, 0xb72f, 0xb730, 0xb738, 0xb739, 0xb73b, 0xb744, 0xb748,
-  0xb74c, 0xb754, 0xb755, 0xb760, 0xb764, 0xb768, 0xb770, 0xb771,
-  0xb773, 0xb775, 0xb77c, 0xb77d, 0xb780, 0xb784, 0xb78c, 0xb78d,
-  0xb78f, 0xb790, 0xb791, 0xb792, 0xb796, 0xb797,
-  /* 0x37 */
-  0xb798, 0xb799, 0xb79c, 0xb7a0, 0xb7a8, 0xb7a9, 0xb7ab, 0xb7ac,
-  0xb7ad, 0xb7b4, 0xb7b5, 0xb7b8, 0xb7c7, 0xb7c9, 0xb7ec, 0xb7ed,
-  0xb7f0, 0xb7f4, 0xb7fc, 0xb7fd, 0xb7ff, 0xb800, 0xb801, 0xb807,
-  0xb808, 0xb809, 0xb80c, 0xb810, 0xb818, 0xb819, 0xb81b, 0xb81d,
-  0xb824, 0xb825, 0xb828, 0xb82c, 0xb834, 0xb835, 0xb837, 0xb838,
-  0xb839, 0xb840, 0xb844, 0xb851, 0xb853, 0xb85c, 0xb85d, 0xb860,
-  0xb864, 0xb86c, 0xb86d, 0xb86f, 0xb871, 0xb878, 0xb87c, 0xb88d,
-  0xb8a8, 0xb8b0, 0xb8b4, 0xb8b8, 0xb8c0, 0xb8c1, 0xb8c3, 0xb8c5,
-  0xb8cc, 0xb8d0, 0xb8d4, 0xb8dd, 0xb8df, 0xb8e1, 0xb8e8, 0xb8e9,
-  0xb8ec, 0xb8f0, 0xb8f8, 0xb8f9, 0xb8fb, 0xb8fd, 0xb904, 0xb918,
-  0xb920, 0xb93c, 0xb93d, 0xb940, 0xb944, 0xb94c, 0xb94f, 0xb951,
-  0xb958, 0xb959, 0xb95c, 0xb960, 0xb968, 0xb969,
-  /* 0x38 */
-  0xb96b, 0xb96d, 0xb974, 0xb975, 0xb978, 0xb97c, 0xb984, 0xb985,
-  0xb987, 0xb989, 0xb98a, 0xb98d, 0xb98e, 0xb9ac, 0xb9ad, 0xb9b0,
-  0xb9b4, 0xb9bc, 0xb9bd, 0xb9bf, 0xb9c1, 0xb9c8, 0xb9c9, 0xb9cc,
-  0xb9ce, 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d8, 0xb9d9, 0xb9db,
-  0xb9dd, 0xb9de, 0xb9e1, 0xb9e3, 0xb9e4, 0xb9e5, 0xb9e8, 0xb9ec,
-  0xb9f4, 0xb9f5, 0xb9f7, 0xb9f8, 0xb9f9, 0xb9fa, 0xba00, 0xba01,
-  0xba08, 0xba15, 0xba38, 0xba39, 0xba3c, 0xba40, 0xba42, 0xba48,
-  0xba49, 0xba4b, 0xba4d, 0xba4e, 0xba53, 0xba54, 0xba55, 0xba58,
-  0xba5c, 0xba64, 0xba65, 0xba67, 0xba68, 0xba69, 0xba70, 0xba71,
-  0xba74, 0xba78, 0xba83, 0xba84, 0xba85, 0xba87, 0xba8c, 0xbaa8,
-  0xbaa9, 0xbaab, 0xbaac, 0xbab0, 0xbab2, 0xbab8, 0xbab9, 0xbabb,
-  0xbabd, 0xbac4, 0xbac8, 0xbad8, 0xbad9, 0xbafc,
-  /* 0x39 */
-  0xbb00, 0xbb04, 0xbb0d, 0xbb0f, 0xbb11, 0xbb18, 0xbb1c, 0xbb20,
-  0xbb29, 0xbb2b, 0xbb34, 0xbb35, 0xbb36, 0xbb38, 0xbb3b, 0xbb3c,
-  0xbb3d, 0xbb3e, 0xbb44, 0xbb45, 0xbb47, 0xbb49, 0xbb4d, 0xbb4f,
-  0xbb50, 0xbb54, 0xbb58, 0xbb61, 0xbb63, 0xbb6c, 0xbb88, 0xbb8c,
-  0xbb90, 0xbba4, 0xbba8, 0xbbac, 0xbbb4, 0xbbb7, 0xbbc0, 0xbbc4,
-  0xbbc8, 0xbbd0, 0xbbd3, 0xbbf8, 0xbbf9, 0xbbfc, 0xbbff, 0xbc00,
-  0xbc02, 0xbc08, 0xbc09, 0xbc0b, 0xbc0c, 0xbc0d, 0xbc0f, 0xbc11,
-  0xbc14, 0xbc15, 0xbc16, 0xbc17, 0xbc18, 0xbc1b, 0xbc1c, 0xbc1d,
-  0xbc1e, 0xbc1f, 0xbc24, 0xbc25, 0xbc27, 0xbc29, 0xbc2d, 0xbc30,
-  0xbc31, 0xbc34, 0xbc38, 0xbc40, 0xbc41, 0xbc43, 0xbc44, 0xbc45,
-  0xbc49, 0xbc4c, 0xbc4d, 0xbc50, 0xbc5d, 0xbc84, 0xbc85, 0xbc88,
-  0xbc8b, 0xbc8c, 0xbc8e, 0xbc94, 0xbc95, 0xbc97,
-  /* 0x3a */
-  0xbc99, 0xbc9a, 0xbca0, 0xbca1, 0xbca4, 0xbca7, 0xbca8, 0xbcb0,
-  0xbcb1, 0xbcb3, 0xbcb4, 0xbcb5, 0xbcbc, 0xbcbd, 0xbcc0, 0xbcc4,
-  0xbccd, 0xbccf, 0xbcd0, 0xbcd1, 0xbcd5, 0xbcd8, 0xbcdc, 0xbcf4,
-  0xbcf5, 0xbcf6, 0xbcf8, 0xbcfc, 0xbd04, 0xbd05, 0xbd07, 0xbd09,
-  0xbd10, 0xbd14, 0xbd24, 0xbd2c, 0xbd40, 0xbd48, 0xbd49, 0xbd4c,
-  0xbd50, 0xbd58, 0xbd59, 0xbd64, 0xbd68, 0xbd80, 0xbd81, 0xbd84,
-  0xbd87, 0xbd88, 0xbd89, 0xbd8a, 0xbd90, 0xbd91, 0xbd93, 0xbd95,
-  0xbd99, 0xbd9a, 0xbd9c, 0xbda4, 0xbdb0, 0xbdb8, 0xbdd4, 0xbdd5,
-  0xbdd8, 0xbddc, 0xbde9, 0xbdf0, 0xbdf4, 0xbdf8, 0xbe00, 0xbe03,
-  0xbe05, 0xbe0c, 0xbe0d, 0xbe10, 0xbe14, 0xbe1c, 0xbe1d, 0xbe1f,
-  0xbe44, 0xbe45, 0xbe48, 0xbe4c, 0xbe4e, 0xbe54, 0xbe55, 0xbe57,
-  0xbe59, 0xbe5a, 0xbe5b, 0xbe60, 0xbe61, 0xbe64,
-  /* 0x3b */
-  0xbe68, 0xbe6a, 0xbe70, 0xbe71, 0xbe73, 0xbe74, 0xbe75, 0xbe7b,
-  0xbe7c, 0xbe7d, 0xbe80, 0xbe84, 0xbe8c, 0xbe8d, 0xbe8f, 0xbe90,
-  0xbe91, 0xbe98, 0xbe99, 0xbea8, 0xbed0, 0xbed1, 0xbed4, 0xbed7,
-  0xbed8, 0xbee0, 0xbee3, 0xbee4, 0xbee5, 0xbeec, 0xbf01, 0xbf08,
-  0xbf09, 0xbf18, 0xbf19, 0xbf1b, 0xbf1c, 0xbf1d, 0xbf40, 0xbf41,
-  0xbf44, 0xbf48, 0xbf50, 0xbf51, 0xbf55, 0xbf94, 0xbfb0, 0xbfc5,
-  0xbfcc, 0xbfcd, 0xbfd0, 0xbfd4, 0xbfdc, 0xbfdf, 0xbfe1, 0xc03c,
-  0xc051, 0xc058, 0xc05c, 0xc060, 0xc068, 0xc069, 0xc090, 0xc091,
-  0xc094, 0xc098, 0xc0a0, 0xc0a1, 0xc0a3, 0xc0a5, 0xc0ac, 0xc0ad,
-  0xc0af, 0xc0b0, 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0bc, 0xc0bd,
-  0xc0bf, 0xc0c0, 0xc0c1, 0xc0c5, 0xc0c8, 0xc0c9, 0xc0cc, 0xc0d0,
-  0xc0d8, 0xc0d9, 0xc0db, 0xc0dc, 0xc0dd, 0xc0e4,
-  /* 0x3c */
-  0xc0e5, 0xc0e8, 0xc0ec, 0xc0f4, 0xc0f5, 0xc0f7, 0xc0f9, 0xc100,
-  0xc104, 0xc108, 0xc110, 0xc115, 0xc11c, 0xc11d, 0xc11e, 0xc11f,
-  0xc120, 0xc123, 0xc124, 0xc126, 0xc127, 0xc12c, 0xc12d, 0xc12f,
-  0xc130, 0xc131, 0xc136, 0xc138, 0xc139, 0xc13c, 0xc140, 0xc148,
-  0xc149, 0xc14b, 0xc14c, 0xc14d, 0xc154, 0xc155, 0xc158, 0xc15c,
-  0xc164, 0xc165, 0xc167, 0xc168, 0xc169, 0xc170, 0xc174, 0xc178,
-  0xc185, 0xc18c, 0xc18d, 0xc18e, 0xc190, 0xc194, 0xc196, 0xc19c,
-  0xc19d, 0xc19f, 0xc1a1, 0xc1a5, 0xc1a8, 0xc1a9, 0xc1ac, 0xc1b0,
-  0xc1bd, 0xc1c4, 0xc1c8, 0xc1cc, 0xc1d4, 0xc1d7, 0xc1d8, 0xc1e0,
-  0xc1e4, 0xc1e8, 0xc1f0, 0xc1f1, 0xc1f3, 0xc1fc, 0xc1fd, 0xc200,
-  0xc204, 0xc20c, 0xc20d, 0xc20f, 0xc211, 0xc218, 0xc219, 0xc21c,
-  0xc21f, 0xc220, 0xc228, 0xc229, 0xc22b, 0xc22d,
-  /* 0x3d */
-  0xc22f, 0xc231, 0xc232, 0xc234, 0xc248, 0xc250, 0xc251, 0xc254,
-  0xc258, 0xc260, 0xc265, 0xc26c, 0xc26d, 0xc270, 0xc274, 0xc27c,
-  0xc27d, 0xc27f, 0xc281, 0xc288, 0xc289, 0xc290, 0xc298, 0xc29b,
-  0xc29d, 0xc2a4, 0xc2a5, 0xc2a8, 0xc2ac, 0xc2ad, 0xc2b4, 0xc2b5,
-  0xc2b7, 0xc2b9, 0xc2dc, 0xc2dd, 0xc2e0, 0xc2e3, 0xc2e4, 0xc2eb,
-  0xc2ec, 0xc2ed, 0xc2ef, 0xc2f1, 0xc2f6, 0xc2f8, 0xc2f9, 0xc2fb,
-  0xc2fc, 0xc300, 0xc308, 0xc309, 0xc30c, 0xc30d, 0xc313, 0xc314,
-  0xc315, 0xc318, 0xc31c, 0xc324, 0xc325, 0xc328, 0xc329, 0xc345,
-  0xc368, 0xc369, 0xc36c, 0xc370, 0xc372, 0xc378, 0xc379, 0xc37c,
-  0xc37d, 0xc384, 0xc388, 0xc38c, 0xc3c0, 0xc3d8, 0xc3d9, 0xc3dc,
-  0xc3df, 0xc3e0, 0xc3e2, 0xc3e8, 0xc3e9, 0xc3ed, 0xc3f4, 0xc3f5,
-  0xc3f8, 0xc408, 0xc410, 0xc424, 0xc42c, 0xc430,
-  /* 0x3e */
-  0xc434, 0xc43c, 0xc43d, 0xc448, 0xc464, 0xc465, 0xc468, 0xc46c,
-  0xc474, 0xc475, 0xc479, 0xc480, 0xc494, 0xc49c, 0xc4b8, 0xc4bc,
-  0xc4e9, 0xc4f0, 0xc4f1, 0xc4f4, 0xc4f8, 0xc4fa, 0xc4ff, 0xc500,
-  0xc501, 0xc50c, 0xc510, 0xc514, 0xc51c, 0xc528, 0xc529, 0xc52c,
-  0xc530, 0xc538, 0xc539, 0xc53b, 0xc53d, 0xc544, 0xc545, 0xc548,
-  0xc549, 0xc54a, 0xc54c, 0xc54d, 0xc54e, 0xc553, 0xc554, 0xc555,
-  0xc557, 0xc558, 0xc559, 0xc55d, 0xc55e, 0xc560, 0xc561, 0xc564,
-  0xc568, 0xc570, 0xc571, 0xc573, 0xc574, 0xc575, 0xc57c, 0xc57d,
-  0xc580, 0xc584, 0xc587, 0xc58c, 0xc58d, 0xc58f, 0xc591, 0xc595,
-  0xc597, 0xc598, 0xc59c, 0xc5a0, 0xc5a9, 0xc5b4, 0xc5b5, 0xc5b8,
-  0xc5b9, 0xc5bb, 0xc5bc, 0xc5bd, 0xc5be, 0xc5c4, 0xc5c5, 0xc5c6,
-  0xc5c7, 0xc5c8, 0xc5c9, 0xc5ca, 0xc5cc, 0xc5ce,
-  /* 0x3f */
-  0xc5d0, 0xc5d1, 0xc5d4, 0xc5d8, 0xc5e0, 0xc5e1, 0xc5e3, 0xc5e5,
-  0xc5ec, 0xc5ed, 0xc5ee, 0xc5f0, 0xc5f4, 0xc5f6, 0xc5f7, 0xc5fc,
-  0xc5fd, 0xc5fe, 0xc5ff, 0xc600, 0xc601, 0xc605, 0xc606, 0xc607,
-  0xc608, 0xc60c, 0xc610, 0xc618, 0xc619, 0xc61b, 0xc61c, 0xc624,
-  0xc625, 0xc628, 0xc62c, 0xc62d, 0xc62e, 0xc630, 0xc633, 0xc634,
-  0xc635, 0xc637, 0xc639, 0xc63b, 0xc640, 0xc641, 0xc644, 0xc648,
-  0xc650, 0xc651, 0xc653, 0xc654, 0xc655, 0xc65c, 0xc65d, 0xc660,
-  0xc66c, 0xc66f, 0xc671, 0xc678, 0xc679, 0xc67c, 0xc680, 0xc688,
-  0xc689, 0xc68b, 0xc68d, 0xc694, 0xc695, 0xc698, 0xc69c, 0xc6a4,
-  0xc6a5, 0xc6a7, 0xc6a9, 0xc6b0, 0xc6b1, 0xc6b4, 0xc6b8, 0xc6b9,
-  0xc6ba, 0xc6c0, 0xc6c1, 0xc6c3, 0xc6c5, 0xc6cc, 0xc6cd, 0xc6d0,
-  0xc6d4, 0xc6dc, 0xc6dd, 0xc6e0, 0xc6e1, 0xc6e8,
-  /* 0x40 */
-  0xc6e9, 0xc6ec, 0xc6f0, 0xc6f8, 0xc6f9, 0xc6fd, 0xc704, 0xc705,
-  0xc708, 0xc70c, 0xc714, 0xc715, 0xc717, 0xc719, 0xc720, 0xc721,
-  0xc724, 0xc728, 0xc730, 0xc731, 0xc733, 0xc735, 0xc737, 0xc73c,
-  0xc73d, 0xc740, 0xc744, 0xc74a, 0xc74c, 0xc74d, 0xc74f, 0xc751,
-  0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc75c,
-  0xc760, 0xc768, 0xc76b, 0xc774, 0xc775, 0xc778, 0xc77c, 0xc77d,
-  0xc77e, 0xc783, 0xc784, 0xc785, 0xc787, 0xc788, 0xc789, 0xc78a,
-  0xc78e, 0xc790, 0xc791, 0xc794, 0xc796, 0xc797, 0xc798, 0xc79a,
-  0xc7a0, 0xc7a1, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7ac, 0xc7ad,
-  0xc7b0, 0xc7b4, 0xc7bc, 0xc7bd, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c8,
-  0xc7c9, 0xc7cc, 0xc7ce, 0xc7d0, 0xc7d8, 0xc7dd, 0xc7e4, 0xc7e8,
-  0xc7ec, 0xc800, 0xc801, 0xc804, 0xc808, 0xc80a,
-  /* 0x41 */
-  0xc810, 0xc811, 0xc813, 0xc815, 0xc816, 0xc81c, 0xc81d, 0xc820,
-  0xc824, 0xc82c, 0xc82d, 0xc82f, 0xc831, 0xc838, 0xc83c, 0xc840,
-  0xc848, 0xc849, 0xc84c, 0xc84d, 0xc854, 0xc870, 0xc871, 0xc874,
-  0xc878, 0xc87a, 0xc880, 0xc881, 0xc883, 0xc885, 0xc886, 0xc887,
-  0xc88b, 0xc88c, 0xc88d, 0xc894, 0xc89d, 0xc89f, 0xc8a1, 0xc8a8,
-  0xc8bc, 0xc8bd, 0xc8c4, 0xc8c8, 0xc8cc, 0xc8d4, 0xc8d5, 0xc8d7,
-  0xc8d9, 0xc8e0, 0xc8e1, 0xc8e4, 0xc8f5, 0xc8fc, 0xc8fd, 0xc900,
-  0xc904, 0xc905, 0xc906, 0xc90c, 0xc90d, 0xc90f, 0xc911, 0xc918,
-  0xc92c, 0xc934, 0xc950, 0xc951, 0xc954, 0xc958, 0xc960, 0xc961,
-  0xc963, 0xc96c, 0xc970, 0xc974, 0xc97c, 0xc988, 0xc989, 0xc98c,
-  0xc990, 0xc998, 0xc999, 0xc99b, 0xc99d, 0xc9c0, 0xc9c1, 0xc9c4,
-  0xc9c7, 0xc9c8, 0xc9ca, 0xc9d0, 0xc9d1, 0xc9d3,
-  /* 0x42 */
-  0xc9d5, 0xc9d6, 0xc9d9, 0xc9da, 0xc9dc, 0xc9dd, 0xc9e0, 0xc9e2,
-  0xc9e4, 0xc9e7, 0xc9ec, 0xc9ed, 0xc9ef, 0xc9f0, 0xc9f1, 0xc9f8,
-  0xc9f9, 0xc9fc, 0xca00, 0xca08, 0xca09, 0xca0b, 0xca0c, 0xca0d,
-  0xca14, 0xca18, 0xca29, 0xca4c, 0xca4d, 0xca50, 0xca54, 0xca5c,
-  0xca5d, 0xca5f, 0xca60, 0xca61, 0xca68, 0xca7d, 0xca84, 0xca98,
-  0xcabc, 0xcabd, 0xcac0, 0xcac4, 0xcacc, 0xcacd, 0xcacf, 0xcad1,
-  0xcad3, 0xcad8, 0xcad9, 0xcae0, 0xcaec, 0xcaf4, 0xcb08, 0xcb10,
-  0xcb14, 0xcb18, 0xcb20, 0xcb21, 0xcb41, 0xcb48, 0xcb49, 0xcb4c,
-  0xcb50, 0xcb58, 0xcb59, 0xcb5d, 0xcb64, 0xcb78, 0xcb79, 0xcb9c,
-  0xcbb8, 0xcbd4, 0xcbe4, 0xcbe7, 0xcbe9, 0xcc0c, 0xcc0d, 0xcc10,
-  0xcc14, 0xcc1c, 0xcc1d, 0xcc21, 0xcc22, 0xcc27, 0xcc28, 0xcc29,
-  0xcc2c, 0xcc2e, 0xcc30, 0xcc38, 0xcc39, 0xcc3b,
-  /* 0x43 */
-  0xcc3c, 0xcc3d, 0xcc3e, 0xcc44, 0xcc45, 0xcc48, 0xcc4c, 0xcc54,
-  0xcc55, 0xcc57, 0xcc58, 0xcc59, 0xcc60, 0xcc64, 0xcc66, 0xcc68,
-  0xcc70, 0xcc75, 0xcc98, 0xcc99, 0xcc9c, 0xcca0, 0xcca8, 0xcca9,
-  0xccab, 0xccac, 0xccad, 0xccb4, 0xccb5, 0xccb8, 0xccbc, 0xccc4,
-  0xccc5, 0xccc7, 0xccc9, 0xccd0, 0xccd4, 0xcce4, 0xccec, 0xccf0,
-  0xcd01, 0xcd08, 0xcd09, 0xcd0c, 0xcd10, 0xcd18, 0xcd19, 0xcd1b,
-  0xcd1d, 0xcd24, 0xcd28, 0xcd2c, 0xcd39, 0xcd5c, 0xcd60, 0xcd64,
-  0xcd6c, 0xcd6d, 0xcd6f, 0xcd71, 0xcd78, 0xcd88, 0xcd94, 0xcd95,
-  0xcd98, 0xcd9c, 0xcda4, 0xcda5, 0xcda7, 0xcda9, 0xcdb0, 0xcdc4,
-  0xcdcc, 0xcdd0, 0xcde8, 0xcdec, 0xcdf0, 0xcdf8, 0xcdf9, 0xcdfb,
-  0xcdfd, 0xce04, 0xce08, 0xce0c, 0xce14, 0xce19, 0xce20, 0xce21,
-  0xce24, 0xce28, 0xce30, 0xce31, 0xce33, 0xce35,
-  /* 0x44 */
-  0xce58, 0xce59, 0xce5c, 0xce5f, 0xce60, 0xce61, 0xce68, 0xce69,
-  0xce6b, 0xce6d, 0xce74, 0xce75, 0xce78, 0xce7c, 0xce84, 0xce85,
-  0xce87, 0xce89, 0xce90, 0xce91, 0xce94, 0xce98, 0xcea0, 0xcea1,
-  0xcea3, 0xcea4, 0xcea5, 0xceac, 0xcead, 0xcec1, 0xcee4, 0xcee5,
-  0xcee8, 0xceeb, 0xceec, 0xcef4, 0xcef5, 0xcef7, 0xcef8, 0xcef9,
-  0xcf00, 0xcf01, 0xcf04, 0xcf08, 0xcf10, 0xcf11, 0xcf13, 0xcf15,
-  0xcf1c, 0xcf20, 0xcf24, 0xcf2c, 0xcf2d, 0xcf2f, 0xcf30, 0xcf31,
-  0xcf38, 0xcf54, 0xcf55, 0xcf58, 0xcf5c, 0xcf64, 0xcf65, 0xcf67,
-  0xcf69, 0xcf70, 0xcf71, 0xcf74, 0xcf78, 0xcf80, 0xcf85, 0xcf8c,
-  0xcfa1, 0xcfa8, 0xcfb0, 0xcfc4, 0xcfe0, 0xcfe1, 0xcfe4, 0xcfe8,
-  0xcff0, 0xcff1, 0xcff3, 0xcff5, 0xcffc, 0xd000, 0xd004, 0xd011,
-  0xd018, 0xd02d, 0xd034, 0xd035, 0xd038, 0xd03c,
-  /* 0x45 */
-  0xd044, 0xd045, 0xd047, 0xd049, 0xd050, 0xd054, 0xd058, 0xd060,
-  0xd06c, 0xd06d, 0xd070, 0xd074, 0xd07c, 0xd07d, 0xd081, 0xd0a4,
-  0xd0a5, 0xd0a8, 0xd0ac, 0xd0b4, 0xd0b5, 0xd0b7, 0xd0b9, 0xd0c0,
-  0xd0c1, 0xd0c4, 0xd0c8, 0xd0c9, 0xd0d0, 0xd0d1, 0xd0d3, 0xd0d4,
-  0xd0d5, 0xd0dc, 0xd0dd, 0xd0e0, 0xd0e4, 0xd0ec, 0xd0ed, 0xd0ef,
-  0xd0f0, 0xd0f1, 0xd0f8, 0xd10d, 0xd130, 0xd131, 0xd134, 0xd138,
-  0xd13a, 0xd140, 0xd141, 0xd143, 0xd144, 0xd145, 0xd14c, 0xd14d,
-  0xd150, 0xd154, 0xd15c, 0xd15d, 0xd15f, 0xd161, 0xd168, 0xd16c,
-  0xd17c, 0xd184, 0xd188, 0xd1a0, 0xd1a1, 0xd1a4, 0xd1a8, 0xd1b0,
-  0xd1b1, 0xd1b3, 0xd1b5, 0xd1ba, 0xd1bc, 0xd1c0, 0xd1d8, 0xd1f4,
-  0xd1f8, 0xd207, 0xd209, 0xd210, 0xd22c, 0xd22d, 0xd230, 0xd234,
-  0xd23c, 0xd23d, 0xd23f, 0xd241, 0xd248, 0xd25c,
-  /* 0x46 */
-  0xd264, 0xd280, 0xd281, 0xd284, 0xd288, 0xd290, 0xd291, 0xd295,
-  0xd29c, 0xd2a0, 0xd2a4, 0xd2ac, 0xd2b1, 0xd2b8, 0xd2b9, 0xd2bc,
-  0xd2bf, 0xd2c0, 0xd2c2, 0xd2c8, 0xd2c9, 0xd2cb, 0xd2d4, 0xd2d8,
-  0xd2dc, 0xd2e4, 0xd2e5, 0xd2f0, 0xd2f1, 0xd2f4, 0xd2f8, 0xd300,
-  0xd301, 0xd303, 0xd305, 0xd30c, 0xd30d, 0xd30e, 0xd310, 0xd314,
-  0xd316, 0xd31c, 0xd31d, 0xd31f, 0xd320, 0xd321, 0xd325, 0xd328,
-  0xd329, 0xd32c, 0xd330, 0xd338, 0xd339, 0xd33b, 0xd33c, 0xd33d,
-  0xd344, 0xd345, 0xd37c, 0xd37d, 0xd380, 0xd384, 0xd38c, 0xd38d,
-  0xd38f, 0xd390, 0xd391, 0xd398, 0xd399, 0xd39c, 0xd3a0, 0xd3a8,
-  0xd3a9, 0xd3ab, 0xd3ad, 0xd3b4, 0xd3b8, 0xd3bc, 0xd3c4, 0xd3c5,
-  0xd3c8, 0xd3c9, 0xd3d0, 0xd3d8, 0xd3e1, 0xd3e3, 0xd3ec, 0xd3ed,
-  0xd3f0, 0xd3f4, 0xd3fc, 0xd3fd, 0xd3ff, 0xd401,
-  /* 0x47 */
-  0xd408, 0xd41d, 0xd440, 0xd444, 0xd45c, 0xd460, 0xd464, 0xd46d,
-  0xd46f, 0xd478, 0xd479, 0xd47c, 0xd47f, 0xd480, 0xd482, 0xd488,
-  0xd489, 0xd48b, 0xd48d, 0xd494, 0xd4a9, 0xd4cc, 0xd4d0, 0xd4d4,
-  0xd4dc, 0xd4df, 0xd4e8, 0xd4ec, 0xd4f0, 0xd4f8, 0xd4fb, 0xd4fd,
-  0xd504, 0xd508, 0xd50c, 0xd514, 0xd515, 0xd517, 0xd53c, 0xd53d,
-  0xd540, 0xd544, 0xd54c, 0xd54d, 0xd54f, 0xd551, 0xd558, 0xd559,
-  0xd55c, 0xd560, 0xd565, 0xd568, 0xd569, 0xd56b, 0xd56d, 0xd574,
-  0xd575, 0xd578, 0xd57c, 0xd584, 0xd585, 0xd587, 0xd588, 0xd589,
-  0xd590, 0xd5a5, 0xd5c8, 0xd5c9, 0xd5cc, 0xd5d0, 0xd5d2, 0xd5d8,
-  0xd5d9, 0xd5db, 0xd5dd, 0xd5e4, 0xd5e5, 0xd5e8, 0xd5ec, 0xd5f4,
-  0xd5f5, 0xd5f7, 0xd5f9, 0xd600, 0xd601, 0xd604, 0xd608, 0xd610,
-  0xd611, 0xd613, 0xd614, 0xd615, 0xd61c, 0xd620,
-  /* 0x48 */
-  0xd624, 0xd62d, 0xd638, 0xd639, 0xd63c, 0xd640, 0xd645, 0xd648,
-  0xd649, 0xd64b, 0xd64d, 0xd651, 0xd654, 0xd655, 0xd658, 0xd65c,
-  0xd667, 0xd669, 0xd670, 0xd671, 0xd674, 0xd683, 0xd685, 0xd68c,
-  0xd68d, 0xd690, 0xd694, 0xd69d, 0xd69f, 0xd6a1, 0xd6a8, 0xd6ac,
-  0xd6b0, 0xd6b9, 0xd6bb, 0xd6c4, 0xd6c5, 0xd6c8, 0xd6cc, 0xd6d1,
-  0xd6d4, 0xd6d7, 0xd6d9, 0xd6e0, 0xd6e4, 0xd6e8, 0xd6f0, 0xd6f5,
-  0xd6fc, 0xd6fd, 0xd700, 0xd704, 0xd711, 0xd718, 0xd719, 0xd71c,
-  0xd720, 0xd728, 0xd729, 0xd72b, 0xd72d, 0xd734, 0xd735, 0xd738,
-  0xd73c, 0xd744, 0xd747, 0xd749, 0xd750, 0xd751, 0xd754, 0xd756,
-  0xd757, 0xd758, 0xd759, 0xd760, 0xd761, 0xd763, 0xd765, 0xd769,
-  0xd76c, 0xd770, 0xd774, 0xd77c, 0xd77d, 0xd781, 0xd788, 0xd789,
-  0xd78c, 0xd790, 0xd798, 0xd799, 0xd79b, 0xd79d,
-};
-static const unsigned short ksc5601_2uni_page4a[4888] = {
-  /* 0x4a */
-  0x4f3d, 0x4f73, 0x5047, 0x50f9, 0x52a0, 0x53ef, 0x5475, 0x54e5,
-  0x5609, 0x5ac1, 0x5bb6, 0x6687, 0x67b6, 0x67b7, 0x67ef, 0x6b4c,
-  0x73c2, 0x75c2, 0x7a3c, 0x82db, 0x8304, 0x8857, 0x8888, 0x8a36,
-  0x8cc8, 0x8dcf, 0x8efb, 0x8fe6, 0x99d5, 0x523b, 0x5374, 0x5404,
-  0x606a, 0x6164, 0x6bbc, 0x73cf, 0x811a, 0x89ba, 0x89d2, 0x95a3,
-  0x4f83, 0x520a, 0x58be, 0x5978, 0x59e6, 0x5e72, 0x5e79, 0x61c7,
-  0x63c0, 0x6746, 0x67ec, 0x687f, 0x6f97, 0x764e, 0x770b, 0x78f5,
-  0x7a08, 0x7aff, 0x7c21, 0x809d, 0x826e, 0x8271, 0x8aeb, 0x9593,
-  0x4e6b, 0x559d, 0x66f7, 0x6e34, 0x78a3, 0x7aed, 0x845b, 0x8910,
-  0x874e, 0x97a8, 0x52d8, 0x574e, 0x582a, 0x5d4c, 0x611f, 0x61be,
-  0x6221, 0x6562, 0x67d1, 0x6a44, 0x6e1b, 0x7518, 0x75b3, 0x76e3,
-  0x77b0, 0x7d3a, 0x90af, 0x9451, 0x9452, 0x9f95,
-  /* 0x4b */
-  0x5323, 0x5cac, 0x7532, 0x80db, 0x9240, 0x9598, 0x525b, 0x5808,
-  0x59dc, 0x5ca1, 0x5d17, 0x5eb7, 0x5f3a, 0x5f4a, 0x6177, 0x6c5f,
-  0x757a, 0x7586, 0x7ce0, 0x7d73, 0x7db1, 0x7f8c, 0x8154, 0x8221,
-  0x8591, 0x8941, 0x8b1b, 0x92fc, 0x964d, 0x9c47, 0x4ecb, 0x4ef7,
-  0x500b, 0x51f1, 0x584f, 0x6137, 0x613e, 0x6168, 0x6539, 0x69ea,
-  0x6f11, 0x75a5, 0x7686, 0x76d6, 0x7b87, 0x82a5, 0x84cb, 0xf900,
-  0x93a7, 0x958b, 0x5580, 0x5ba2, 0x5751, 0xf901, 0x7cb3, 0x7fb9,
-  0x91b5, 0x5028, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x636e, 0x64da,
-  0x64e7, 0x6e20, 0x70ac, 0x795b, 0x8ddd, 0x8e1e, 0xf902, 0x907d,
-  0x9245, 0x92f8, 0x4e7e, 0x4ef6, 0x5065, 0x5dfe, 0x5efa, 0x6106,
-  0x6957, 0x8171, 0x8654, 0x8e47, 0x9375, 0x9a2b, 0x4e5e, 0x5091,
-  0x6770, 0x6840, 0x5109, 0x528d, 0x5292, 0x6aa2,
-  /* 0x4c */
-  0x77bc, 0x9210, 0x9ed4, 0x52ab, 0x602f, 0x8ff2, 0x5048, 0x61a9,
-  0x63ed, 0x64ca, 0x683c, 0x6a84, 0x6fc0, 0x8188, 0x89a1, 0x9694,
-  0x5805, 0x727d, 0x72ac, 0x7504, 0x7d79, 0x7e6d, 0x80a9, 0x898b,
-  0x8b74, 0x9063, 0x9d51, 0x6289, 0x6c7a, 0x6f54, 0x7d50, 0x7f3a,
-  0x8a23, 0x517c, 0x614a, 0x7b9d, 0x8b19, 0x9257, 0x938c, 0x4eac,
-  0x4fd3, 0x501e, 0x50be, 0x5106, 0x52c1, 0x52cd, 0x537f, 0x5770,
-  0x5883, 0x5e9a, 0x5f91, 0x6176, 0x61ac, 0x64ce, 0x656c, 0x666f,
-  0x66bb, 0x66f4, 0x6897, 0x6d87, 0x7085, 0x70f1, 0x749f, 0x74a5,
-  0x74ca, 0x75d9, 0x786c, 0x78ec, 0x7adf, 0x7af6, 0x7d45, 0x7d93,
-  0x8015, 0x803f, 0x811b, 0x8396, 0x8b66, 0x8f15, 0x9015, 0x93e1,
-  0x9803, 0x9838, 0x9a5a, 0x9be8, 0x4fc2, 0x5553, 0x583a, 0x5951,
-  0x5b63, 0x5c46, 0x60b8, 0x6212, 0x6842, 0x68b0,
-  /* 0x4d */
-  0x68e8, 0x6eaa, 0x754c, 0x7678, 0x78ce, 0x7a3d, 0x7cfb, 0x7e6b,
-  0x7e7c, 0x8a08, 0x8aa1, 0x8c3f, 0x968e, 0x9dc4, 0x53e4, 0x53e9,
-  0x544a, 0x5471, 0x56fa, 0x59d1, 0x5b64, 0x5c3b, 0x5eab, 0x62f7,
-  0x6537, 0x6545, 0x6572, 0x66a0, 0x67af, 0x69c1, 0x6cbd, 0x75fc,
-  0x7690, 0x777e, 0x7a3f, 0x7f94, 0x8003, 0x80a1, 0x818f, 0x82e6,
-  0x82fd, 0x83f0, 0x85c1, 0x8831, 0x88b4, 0x8aa5, 0xf903, 0x8f9c,
-  0x932e, 0x96c7, 0x9867, 0x9ad8, 0x9f13, 0x54ed, 0x659b, 0x66f2,
-  0x688f, 0x7a40, 0x8c37, 0x9d60, 0x56f0, 0x5764, 0x5d11, 0x6606,
-  0x68b1, 0x68cd, 0x6efe, 0x7428, 0x889e, 0x9be4, 0x6c68, 0xf904,
-  0x9aa8, 0x4f9b, 0x516c, 0x5171, 0x529f, 0x5b54, 0x5de5, 0x6050,
-  0x606d, 0x62f1, 0x63a7, 0x653b, 0x73d9, 0x7a7a, 0x86a3, 0x8ca2,
-  0x978f, 0x4e32, 0x5be1, 0x6208, 0x679c, 0x74dc,
-  /* 0x4e */
-  0x79d1, 0x83d3, 0x8a87, 0x8ab2, 0x8de8, 0x904e, 0x934b, 0x9846,
-  0x5ed3, 0x69e8, 0x85ff, 0x90ed, 0xf905, 0x51a0, 0x5b98, 0x5bec,
-  0x6163, 0x68fa, 0x6b3e, 0x704c, 0x742f, 0x74d8, 0x7ba1, 0x7f50,
-  0x83c5, 0x89c0, 0x8cab, 0x95dc, 0x9928, 0x522e, 0x605d, 0x62ec,
-  0x9002, 0x4f8a, 0x5149, 0x5321, 0x58d9, 0x5ee3, 0x66e0, 0x6d38,
-  0x709a, 0x72c2, 0x73d6, 0x7b50, 0x80f1, 0x945b, 0x5366, 0x639b,
-  0x7f6b, 0x4e56, 0x5080, 0x584a, 0x58de, 0x602a, 0x6127, 0x62d0,
-  0x69d0, 0x9b41, 0x5b8f, 0x7d18, 0x80b1, 0x8f5f, 0x4ea4, 0x50d1,
-  0x54ac, 0x55ac, 0x5b0c, 0x5da0, 0x5de7, 0x652a, 0x654e, 0x6821,
-  0x6a4b, 0x72e1, 0x768e, 0x77ef, 0x7d5e, 0x7ff9, 0x81a0, 0x854e,
-  0x86df, 0x8f03, 0x8f4e, 0x90ca, 0x9903, 0x9a55, 0x9bab, 0x4e18,
-  0x4e45, 0x4e5d, 0x4ec7, 0x4ff1, 0x5177, 0x52fe,
-  /* 0x4f */
-  0x5340, 0x53e3, 0x53e5, 0x548e, 0x5614, 0x5775, 0x57a2, 0x5bc7,
-  0x5d87, 0x5ed0, 0x61fc, 0x62d8, 0x6551, 0x67b8, 0x67e9, 0x69cb,
-  0x6b50, 0x6bc6, 0x6bec, 0x6c42, 0x6e9d, 0x7078, 0x72d7, 0x7396,
-  0x7403, 0x77bf, 0x77e9, 0x7a76, 0x7d7f, 0x8009, 0x81fc, 0x8205,
-  0x820a, 0x82df, 0x8862, 0x8b33, 0x8cfc, 0x8ec0, 0x9011, 0x90b1,
-  0x9264, 0x92b6, 0x99d2, 0x9a45, 0x9ce9, 0x9dd7, 0x9f9c, 0x570b,
-  0x5c40, 0x83ca, 0x97a0, 0x97ab, 0x9eb4, 0x541b, 0x7a98, 0x7fa4,
-  0x88d9, 0x8ecd, 0x90e1, 0x5800, 0x5c48, 0x6398, 0x7a9f, 0x5bae,
-  0x5f13, 0x7a79, 0x7aae, 0x828e, 0x8eac, 0x5026, 0x5238, 0x52f8,
-  0x5377, 0x5708, 0x62f3, 0x6372, 0x6b0a, 0x6dc3, 0x7737, 0x53a5,
-  0x7357, 0x8568, 0x8e76, 0x95d5, 0x673a, 0x6ac3, 0x6f70, 0x8a6d,
-  0x8ecc, 0x994b, 0xf906, 0x6677, 0x6b78, 0x8cb4,
-  /* 0x50 */
-  0x9b3c, 0xf907, 0x53eb, 0x572d, 0x594e, 0x63c6, 0x69fb, 0x73ea,
-  0x7845, 0x7aba, 0x7ac5, 0x7cfe, 0x8475, 0x898f, 0x8d73, 0x9035,
-  0x95a8, 0x52fb, 0x5747, 0x7547, 0x7b60, 0x83cc, 0x921e, 0xf908,
-  0x6a58, 0x514b, 0x524b, 0x5287, 0x621f, 0x68d8, 0x6975, 0x9699,
-  0x50c5, 0x52a4, 0x52e4, 0x61c3, 0x65a4, 0x6839, 0x69ff, 0x747e,
-  0x7b4b, 0x82b9, 0x83eb, 0x89b2, 0x8b39, 0x8fd1, 0x9949, 0xf909,
-  0x4eca, 0x5997, 0x64d2, 0x6611, 0x6a8e, 0x7434, 0x7981, 0x79bd,
-  0x82a9, 0x887e, 0x887f, 0x895f, 0xf90a, 0x9326, 0x4f0b, 0x53ca,
-  0x6025, 0x6271, 0x6c72, 0x7d1a, 0x7d66, 0x4e98, 0x5162, 0x77dc,
-  0x80af, 0x4f01, 0x4f0e, 0x5176, 0x5180, 0x55dc, 0x5668, 0x573b,
-  0x57fa, 0x57fc, 0x5914, 0x5947, 0x5993, 0x5bc4, 0x5c90, 0x5d0e,
-  0x5df1, 0x5e7e, 0x5fcc, 0x6280, 0x65d7, 0x65e3,
-  /* 0x51 */
-  0x671e, 0x671f, 0x675e, 0x68cb, 0x68c4, 0x6a5f, 0x6b3a, 0x6c23,
-  0x6c7d, 0x6c82, 0x6dc7, 0x7398, 0x7426, 0x742a, 0x7482, 0x74a3,
-  0x7578, 0x757f, 0x7881, 0x78ef, 0x7941, 0x7947, 0x7948, 0x797a,
-  0x7b95, 0x7d00, 0x7dba, 0x7f88, 0x8006, 0x802d, 0x808c, 0x8a18,
-  0x8b4f, 0x8c48, 0x8d77, 0x9321, 0x9324, 0x98e2, 0x9951, 0x9a0e,
-  0x9a0f, 0x9a65, 0x9e92, 0x7dca, 0x4f76, 0x5409, 0x62ee, 0x6854,
-  0x91d1, 0x55ab, 0x513a, 0xf90b, 0xf90c, 0x5a1c, 0x61e6, 0xf90d,
-  0x62cf, 0x62ff, 0xf90e, 0xf90f, 0xf910, 0xf911, 0xf912, 0xf913,
-  0x90a3, 0xf914, 0xf915, 0xf916, 0xf917, 0xf918, 0x8afe, 0xf919,
-  0xf91a, 0xf91b, 0xf91c, 0x6696, 0xf91d, 0x7156, 0xf91e, 0xf91f,
-  0x96e3, 0xf920, 0x634f, 0x637a, 0x5357, 0xf921, 0x678f, 0x6960,
-  0x6e73, 0xf922, 0x7537, 0xf923, 0xf924, 0xf925,
-  /* 0x52 */
-  0x7d0d, 0xf926, 0xf927, 0x8872, 0x56ca, 0x5a18, 0xf928, 0xf929,
-  0xf92a, 0xf92b, 0xf92c, 0x4e43, 0xf92d, 0x5167, 0x5948, 0x67f0,
-  0x8010, 0xf92e, 0x5973, 0x5e74, 0x649a, 0x79ca, 0x5ff5, 0x606c,
-  0x62c8, 0x637b, 0x5be7, 0x5bd7, 0x52aa, 0xf92f, 0x5974, 0x5f29,
-  0x6012, 0xf930, 0xf931, 0xf932, 0x7459, 0xf933, 0xf934, 0xf935,
-  0xf936, 0xf937, 0xf938, 0x99d1, 0xf939, 0xf93a, 0xf93b, 0xf93c,
-  0xf93d, 0xf93e, 0xf93f, 0xf940, 0xf941, 0xf942, 0xf943, 0x6fc3,
-  0xf944, 0xf945, 0x81bf, 0x8fb2, 0x60f1, 0xf946, 0xf947, 0x8166,
-  0xf948, 0xf949, 0x5c3f, 0xf94a, 0xf94b, 0xf94c, 0xf94d, 0xf94e,
-  0xf94f, 0xf950, 0xf951, 0x5ae9, 0x8a25, 0x677b, 0x7d10, 0xf952,
-  0xf953, 0xf954, 0xf955, 0xf956, 0xf957, 0x80fd, 0xf958, 0xf959,
-  0x5c3c, 0x6ce5, 0x533f, 0x6eba, 0x591a, 0x8336,
-  /* 0x53 */
-  0x4e39, 0x4eb6, 0x4f46, 0x55ae, 0x5718, 0x58c7, 0x5f56, 0x65b7,
-  0x65e6, 0x6a80, 0x6bb5, 0x6e4d, 0x77ed, 0x7aef, 0x7c1e, 0x7dde,
-  0x86cb, 0x8892, 0x9132, 0x935b, 0x64bb, 0x6fbe, 0x737a, 0x75b8,
-  0x9054, 0x5556, 0x574d, 0x61ba, 0x64d4, 0x66c7, 0x6de1, 0x6e5b,
-  0x6f6d, 0x6fb9, 0x75f0, 0x8043, 0x81bd, 0x8541, 0x8983, 0x8ac7,
-  0x8b5a, 0x931f, 0x6c93, 0x7553, 0x7b54, 0x8e0f, 0x905d, 0x5510,
-  0x5802, 0x5858, 0x5e62, 0x6207, 0x649e, 0x68e0, 0x7576, 0x7cd6,
-  0x87b3, 0x9ee8, 0x4ee3, 0x5788, 0x576e, 0x5927, 0x5c0d, 0x5cb1,
-  0x5e36, 0x5f85, 0x6234, 0x64e1, 0x73b3, 0x81fa, 0x888b, 0x8cb8,
-  0x968a, 0x9edb, 0x5b85, 0x5fb7, 0x60b3, 0x5012, 0x5200, 0x5230,
-  0x5716, 0x5835, 0x5857, 0x5c0e, 0x5c60, 0x5cf6, 0x5d8b, 0x5ea6,
-  0x5f92, 0x60bc, 0x6311, 0x6389, 0x6417, 0x6843,
-  /* 0x54 */
-  0x68f9, 0x6ac2, 0x6dd8, 0x6e21, 0x6ed4, 0x6fe4, 0x71fe, 0x76dc,
-  0x7779, 0x79b1, 0x7a3b, 0x8404, 0x89a9, 0x8ced, 0x8df3, 0x8e48,
-  0x9003, 0x9014, 0x9053, 0x90fd, 0x934d, 0x9676, 0x97dc, 0x6bd2,
-  0x7006, 0x7258, 0x72a2, 0x7368, 0x7763, 0x79bf, 0x7be4, 0x7e9b,
-  0x8b80, 0x58a9, 0x60c7, 0x6566, 0x65fd, 0x66be, 0x6c8c, 0x711e,
-  0x71c9, 0x8c5a, 0x9813, 0x4e6d, 0x7a81, 0x4edd, 0x51ac, 0x51cd,
-  0x52d5, 0x540c, 0x61a7, 0x6771, 0x6850, 0x68df, 0x6d1e, 0x6f7c,
-  0x75bc, 0x77b3, 0x7ae5, 0x80f4, 0x8463, 0x9285, 0x515c, 0x6597,
-  0x675c, 0x6793, 0x75d8, 0x7ac7, 0x8373, 0xf95a, 0x8c46, 0x9017,
-  0x982d, 0x5c6f, 0x81c0, 0x829a, 0x9041, 0x906f, 0x920d, 0x5f97,
-  0x5d9d, 0x6a59, 0x71c8, 0x767b, 0x7b49, 0x85e4, 0x8b04, 0x9127,
-  0x9a30, 0x5587, 0x61f6, 0xf95b, 0x7669, 0x7f85,
-  /* 0x55 */
-  0x863f, 0x87ba, 0x88f8, 0x908f, 0xf95c, 0x6d1b, 0x70d9, 0x73de,
-  0x7d61, 0x843d, 0xf95d, 0x916a, 0x99f1, 0xf95e, 0x4e82, 0x5375,
-  0x6b04, 0x6b12, 0x703e, 0x721b, 0x862d, 0x9e1e, 0x524c, 0x8fa3,
-  0x5d50, 0x64e5, 0x652c, 0x6b16, 0x6feb, 0x7c43, 0x7e9c, 0x85cd,
-  0x8964, 0x89bd, 0x62c9, 0x81d8, 0x881f, 0x5eca, 0x6717, 0x6d6a,
-  0x72fc, 0x7405, 0x746f, 0x8782, 0x90de, 0x4f86, 0x5d0d, 0x5fa0,
-  0x840a, 0x51b7, 0x63a0, 0x7565, 0x4eae, 0x5006, 0x5169, 0x51c9,
-  0x6881, 0x6a11, 0x7cae, 0x7cb1, 0x7ce7, 0x826f, 0x8ad2, 0x8f1b,
-  0x91cf, 0x4fb6, 0x5137, 0x52f5, 0x5442, 0x5eec, 0x616e, 0x623e,
-  0x65c5, 0x6ada, 0x6ffe, 0x792a, 0x85dc, 0x8823, 0x95ad, 0x9a62,
-  0x9a6a, 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x701d, 0x792b,
-  0x8f62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6f23,
-  /* 0x56 */
-  0x7149, 0x7489, 0x7df4, 0x806f, 0x84ee, 0x8f26, 0x9023, 0x934a,
-  0x51bd, 0x5217, 0x52a3, 0x6d0c, 0x70c8, 0x88c2, 0x5ec9, 0x6582,
-  0x6bae, 0x6fc2, 0x7c3e, 0x7375, 0x4ee4, 0x4f36, 0x56f9, 0xf95f,
-  0x5cba, 0x5dba, 0x601c, 0x73b2, 0x7b2d, 0x7f9a, 0x7fce, 0x8046,
-  0x901e, 0x9234, 0x96f6, 0x9748, 0x9818, 0x9f61, 0x4f8b, 0x6fa7,
-  0x79ae, 0x91b4, 0x96b7, 0x52de, 0xf960, 0x6488, 0x64c4, 0x6ad3,
-  0x6f5e, 0x7018, 0x7210, 0x76e7, 0x8001, 0x8606, 0x865c, 0x8def,
-  0x8f05, 0x9732, 0x9b6f, 0x9dfa, 0x9e75, 0x788c, 0x797f, 0x7da0,
-  0x83c9, 0x9304, 0x9e7f, 0x9e93, 0x8ad6, 0x58df, 0x5f04, 0x6727,
-  0x7027, 0x74cf, 0x7c60, 0x807e, 0x5121, 0x7028, 0x7262, 0x78ca,
-  0x8cc2, 0x8cda, 0x8cf4, 0x96f7, 0x4e86, 0x50da, 0x5bee, 0x5ed6,
-  0x6599, 0x71ce, 0x7642, 0x77ad, 0x804a, 0x84fc,
-  /* 0x57 */
-  0x907c, 0x9b27, 0x9f8d, 0x58d8, 0x5a41, 0x5c62, 0x6a13, 0x6dda,
-  0x6f0f, 0x763b, 0x7d2f, 0x7e37, 0x851e, 0x8938, 0x93e4, 0x964b,
-  0x5289, 0x65d2, 0x67f3, 0x69b4, 0x6d41, 0x6e9c, 0x700f, 0x7409,
-  0x7460, 0x7559, 0x7624, 0x786b, 0x8b2c, 0x985e, 0x516d, 0x622e,
-  0x9678, 0x4f96, 0x502b, 0x5d19, 0x6dea, 0x7db8, 0x8f2a, 0x5f8b,
-  0x6144, 0x6817, 0xf961, 0x9686, 0x52d2, 0x808b, 0x51dc, 0x51cc,
-  0x695e, 0x7a1c, 0x7dbe, 0x83f1, 0x9675, 0x4fda, 0x5229, 0x5398,
-  0x540f, 0x550e, 0x5c65, 0x60a7, 0x674e, 0x68a8, 0x6d6c, 0x7281,
-  0x72f8, 0x7406, 0x7483, 0xf962, 0x75e2, 0x7c6c, 0x7f79, 0x7fb8,
-  0x8389, 0x88cf, 0x88e1, 0x91cc, 0x91d0, 0x96e2, 0x9bc9, 0x541d,
-  0x6f7e, 0x71d0, 0x7498, 0x85fa, 0x8eaa, 0x96a3, 0x9c57, 0x9e9f,
-  0x6797, 0x6dcb, 0x7433, 0x81e8, 0x9716, 0x782c,
-  /* 0x58 */
-  0x7acb, 0x7b20, 0x7c92, 0x6469, 0x746a, 0x75f2, 0x78bc, 0x78e8,
-  0x99ac, 0x9b54, 0x9ebb, 0x5bde, 0x5e55, 0x6f20, 0x819c, 0x83ab,
-  0x9088, 0x4e07, 0x534d, 0x5a29, 0x5dd2, 0x5f4e, 0x6162, 0x633d,
-  0x6669, 0x66fc, 0x6eff, 0x6f2b, 0x7063, 0x779e, 0x842c, 0x8513,
-  0x883b, 0x8f13, 0x9945, 0x9c3b, 0x551c, 0x62b9, 0x672b, 0x6cab,
-  0x8309, 0x896a, 0x977a, 0x4ea1, 0x5984, 0x5fd8, 0x5fd9, 0x671b,
-  0x7db2, 0x7f54, 0x8292, 0x832b, 0x83bd, 0x8f1e, 0x9099, 0x57cb,
-  0x59b9, 0x5a92, 0x5bd0, 0x6627, 0x679a, 0x6885, 0x6bcf, 0x7164,
-  0x7f75, 0x8cb7, 0x8ce3, 0x9081, 0x9b45, 0x8108, 0x8c8a, 0x964c,
-  0x9a40, 0x9ea5, 0x5b5f, 0x6c13, 0x731b, 0x76f2, 0x76df, 0x840c,
-  0x51aa, 0x8993, 0x514d, 0x5195, 0x52c9, 0x68c9, 0x6c94, 0x7704,
-  0x7720, 0x7dbf, 0x7dec, 0x9762, 0x9eb5, 0x6ec5,
-  /* 0x59 */
-  0x8511, 0x51a5, 0x540d, 0x547d, 0x660e, 0x669d, 0x6927, 0x6e9f,
-  0x76bf, 0x7791, 0x8317, 0x84c2, 0x879f, 0x9169, 0x9298, 0x9cf4,
-  0x8882, 0x4fae, 0x5192, 0x52df, 0x59c6, 0x5e3d, 0x6155, 0x6478,
-  0x6479, 0x66ae, 0x67d0, 0x6a21, 0x6bcd, 0x6bdb, 0x725f, 0x7261,
-  0x7441, 0x7738, 0x77db, 0x8017, 0x82bc, 0x8305, 0x8b00, 0x8b28,
-  0x8c8c, 0x6728, 0x6c90, 0x7267, 0x76ee, 0x7766, 0x7a46, 0x9da9,
-  0x6b7f, 0x6c92, 0x5922, 0x6726, 0x8499, 0x536f, 0x5893, 0x5999,
-  0x5edf, 0x63cf, 0x6634, 0x6773, 0x6e3a, 0x732b, 0x7ad7, 0x82d7,
-  0x9328, 0x52d9, 0x5deb, 0x61ae, 0x61cb, 0x620a, 0x62c7, 0x64ab,
-  0x65e0, 0x6959, 0x6b66, 0x6bcb, 0x7121, 0x73f7, 0x755d, 0x7e46,
-  0x821e, 0x8302, 0x856a, 0x8aa3, 0x8cbf, 0x9727, 0x9d61, 0x58a8,
-  0x9ed8, 0x5011, 0x520e, 0x543b, 0x554f, 0x6587,
-  /* 0x5a */
-  0x6c76, 0x7d0a, 0x7d0b, 0x805e, 0x868a, 0x9580, 0x96ef, 0x52ff,
-  0x6c95, 0x7269, 0x5473, 0x5a9a, 0x5c3e, 0x5d4b, 0x5f4c, 0x5fae,
-  0x672a, 0x68b6, 0x6963, 0x6e3c, 0x6e44, 0x7709, 0x7c73, 0x7f8e,
-  0x8587, 0x8b0e, 0x8ff7, 0x9761, 0x9ef4, 0x5cb7, 0x60b6, 0x610d,
-  0x61ab, 0x654f, 0x65fb, 0x65fc, 0x6c11, 0x6cef, 0x739f, 0x73c9,
-  0x7de1, 0x9594, 0x5bc6, 0x871c, 0x8b10, 0x525d, 0x535a, 0x62cd,
-  0x640f, 0x64b2, 0x6734, 0x6a38, 0x6cca, 0x73c0, 0x749e, 0x7b94,
-  0x7c95, 0x7e1b, 0x818a, 0x8236, 0x8584, 0x8feb, 0x96f9, 0x99c1,
-  0x4f34, 0x534a, 0x53cd, 0x53db, 0x62cc, 0x642c, 0x6500, 0x6591,
-  0x69c3, 0x6cee, 0x6f58, 0x73ed, 0x7554, 0x7622, 0x76e4, 0x76fc,
-  0x78d0, 0x78fb, 0x792c, 0x7d46, 0x822c, 0x87e0, 0x8fd4, 0x9812,
-  0x98ef, 0x52c3, 0x62d4, 0x64a5, 0x6e24, 0x6f51,
-  /* 0x5b */
-  0x767c, 0x8dcb, 0x91b1, 0x9262, 0x9aee, 0x9b43, 0x5023, 0x508d,
-  0x574a, 0x59a8, 0x5c28, 0x5e47, 0x5f77, 0x623f, 0x653e, 0x65b9,
-  0x65c1, 0x6609, 0x678b, 0x699c, 0x6ec2, 0x78c5, 0x7d21, 0x80aa,
-  0x8180, 0x822b, 0x82b3, 0x84a1, 0x868c, 0x8a2a, 0x8b17, 0x90a6,
-  0x9632, 0x9f90, 0x500d, 0x4ff3, 0xf963, 0x57f9, 0x5f98, 0x62dc,
-  0x6392, 0x676f, 0x6e43, 0x7119, 0x76c3, 0x80cc, 0x80da, 0x88f4,
-  0x88f5, 0x8919, 0x8ce0, 0x8f29, 0x914d, 0x966a, 0x4f2f, 0x4f70,
-  0x5e1b, 0x67cf, 0x6822, 0x767d, 0x767e, 0x9b44, 0x5e61, 0x6a0a,
-  0x7169, 0x71d4, 0x756a, 0xf964, 0x7e41, 0x8543, 0x85e9, 0x98dc,
-  0x4f10, 0x7b4f, 0x7f70, 0x95a5, 0x51e1, 0x5e06, 0x68b5, 0x6c3e,
-  0x6c4e, 0x6cdb, 0x72af, 0x7bc4, 0x8303, 0x6cd5, 0x743a, 0x50fb,
-  0x5288, 0x58c1, 0x64d8, 0x6a97, 0x74a7, 0x7656,
-  /* 0x5c */
-  0x78a7, 0x8617, 0x95e2, 0x9739, 0xf965, 0x535e, 0x5f01, 0x8b8a,
-  0x8fa8, 0x8faf, 0x908a, 0x5225, 0x77a5, 0x9c49, 0x9f08, 0x4e19,
-  0x5002, 0x5175, 0x5c5b, 0x5e77, 0x661e, 0x663a, 0x67c4, 0x68c5,
-  0x70b3, 0x7501, 0x75c5, 0x79c9, 0x7add, 0x8f27, 0x9920, 0x9a08,
-  0x4fdd, 0x5821, 0x5831, 0x5bf6, 0x666e, 0x6b65, 0x6d11, 0x6e7a,
-  0x6f7d, 0x73e4, 0x752b, 0x83e9, 0x88dc, 0x8913, 0x8b5c, 0x8f14,
-  0x4f0f, 0x50d5, 0x5310, 0x535c, 0x5b93, 0x5fa9, 0x670d, 0x798f,
-  0x8179, 0x832f, 0x8514, 0x8907, 0x8986, 0x8f39, 0x8f3b, 0x99a5,
-  0x9c12, 0x672c, 0x4e76, 0x4ff8, 0x5949, 0x5c01, 0x5cef, 0x5cf0,
-  0x6367, 0x68d2, 0x70fd, 0x71a2, 0x742b, 0x7e2b, 0x84ec, 0x8702,
-  0x9022, 0x92d2, 0x9cf3, 0x4e0d, 0x4ed8, 0x4fef, 0x5085, 0x5256,
-  0x526f, 0x5426, 0x5490, 0x57e0, 0x592b, 0x5a66,
-  /* 0x5d */
-  0x5b5a, 0x5b75, 0x5bcc, 0x5e9c, 0xf966, 0x6276, 0x6577, 0x65a7,
-  0x6d6e, 0x6ea5, 0x7236, 0x7b26, 0x7c3f, 0x7f36, 0x8150, 0x8151,
-  0x819a, 0x8240, 0x8299, 0x83a9, 0x8a03, 0x8ca0, 0x8ce6, 0x8cfb,
-  0x8d74, 0x8dba, 0x90e8, 0x91dc, 0x961c, 0x9644, 0x99d9, 0x9ce7,
-  0x5317, 0x5206, 0x5429, 0x5674, 0x58b3, 0x5954, 0x596e, 0x5fff,
-  0x61a4, 0x626e, 0x6610, 0x6c7e, 0x711a, 0x76c6, 0x7c89, 0x7cde,
-  0x7d1b, 0x82ac, 0x8cc1, 0x96f0, 0xf967, 0x4f5b, 0x5f17, 0x5f7f,
-  0x62c2, 0x5d29, 0x670b, 0x68da, 0x787c, 0x7e43, 0x9d6c, 0x4e15,
-  0x5099, 0x5315, 0x532a, 0x5351, 0x5983, 0x5a62, 0x5e87, 0x60b2,
-  0x618a, 0x6249, 0x6279, 0x6590, 0x6787, 0x69a7, 0x6bd4, 0x6bd6,
-  0x6bd7, 0x6bd8, 0x6cb8, 0xf968, 0x7435, 0x75fa, 0x7812, 0x7891,
-  0x79d5, 0x79d8, 0x7c83, 0x7dcb, 0x7fe1, 0x80a5,
-  /* 0x5e */
-  0x813e, 0x81c2, 0x83f2, 0x871a, 0x88e8, 0x8ab9, 0x8b6c, 0x8cbb,
-  0x9119, 0x975e, 0x98db, 0x9f3b, 0x56ac, 0x5b2a, 0x5f6c, 0x658c,
-  0x6ab3, 0x6baf, 0x6d5c, 0x6ff1, 0x7015, 0x725d, 0x73ad, 0x8ca7,
-  0x8cd3, 0x983b, 0x6191, 0x6c37, 0x8058, 0x9a01, 0x4e4d, 0x4e8b,
-  0x4e9b, 0x4ed5, 0x4f3a, 0x4f3c, 0x4f7f, 0x4fdf, 0x50ff, 0x53f2,
-  0x53f8, 0x5506, 0x55e3, 0x56db, 0x58eb, 0x5962, 0x5a11, 0x5beb,
-  0x5bfa, 0x5c04, 0x5df3, 0x5e2b, 0x5f99, 0x601d, 0x6368, 0x659c,
-  0x65af, 0x67f6, 0x67fb, 0x68ad, 0x6b7b, 0x6c99, 0x6cd7, 0x6e23,
-  0x7009, 0x7345, 0x7802, 0x793e, 0x7940, 0x7960, 0x79c1, 0x7be9,
-  0x7d17, 0x7d72, 0x8086, 0x820d, 0x838e, 0x84d1, 0x86c7, 0x88df,
-  0x8a50, 0x8a5e, 0x8b1d, 0x8cdc, 0x8d66, 0x8fad, 0x90aa, 0x98fc,
-  0x99df, 0x9e9d, 0x524a, 0xf969, 0x6714, 0xf96a,
-  /* 0x5f */
-  0x5098, 0x522a, 0x5c71, 0x6563, 0x6c55, 0x73ca, 0x7523, 0x759d,
-  0x7b97, 0x849c, 0x9178, 0x9730, 0x4e77, 0x6492, 0x6bba, 0x715e,
-  0x85a9, 0x4e09, 0xf96b, 0x6749, 0x68ee, 0x6e17, 0x829f, 0x8518,
-  0x886b, 0x63f7, 0x6f81, 0x9212, 0x98af, 0x4e0a, 0x50b7, 0x50cf,
-  0x511f, 0x5546, 0x55aa, 0x5617, 0x5b40, 0x5c19, 0x5ce0, 0x5e38,
-  0x5e8a, 0x5ea0, 0x5ec2, 0x60f3, 0x6851, 0x6a61, 0x6e58, 0x723d,
-  0x7240, 0x72c0, 0x76f8, 0x7965, 0x7bb1, 0x7fd4, 0x88f3, 0x89f4,
-  0x8a73, 0x8c61, 0x8cde, 0x971c, 0x585e, 0x74bd, 0x8cfd, 0x55c7,
-  0xf96c, 0x7a61, 0x7d22, 0x8272, 0x7272, 0x751f, 0x7525, 0xf96d,
-  0x7b19, 0x5885, 0x58fb, 0x5dbc, 0x5e8f, 0x5eb6, 0x5f90, 0x6055,
-  0x6292, 0x637f, 0x654d, 0x6691, 0x66d9, 0x66f8, 0x6816, 0x68f2,
-  0x7280, 0x745e, 0x7b6e, 0x7d6e, 0x7dd6, 0x7f72,
-  /* 0x60 */
-  0x80e5, 0x8212, 0x85af, 0x897f, 0x8a93, 0x901d, 0x92e4, 0x9ecd,
-  0x9f20, 0x5915, 0x596d, 0x5e2d, 0x60dc, 0x6614, 0x6673, 0x6790,
-  0x6c50, 0x6dc5, 0x6f5f, 0x77f3, 0x78a9, 0x84c6, 0x91cb, 0x932b,
-  0x4ed9, 0x50ca, 0x5148, 0x5584, 0x5b0b, 0x5ba3, 0x6247, 0x657e,
-  0x65cb, 0x6e32, 0x717d, 0x7401, 0x7444, 0x7487, 0x74bf, 0x766c,
-  0x79aa, 0x7dda, 0x7e55, 0x7fa8, 0x817a, 0x81b3, 0x8239, 0x861a,
-  0x87ec, 0x8a75, 0x8de3, 0x9078, 0x9291, 0x9425, 0x994d, 0x9bae,
-  0x5368, 0x5c51, 0x6954, 0x6cc4, 0x6d29, 0x6e2b, 0x820c, 0x859b,
-  0x893b, 0x8a2d, 0x8aaa, 0x96ea, 0x9f67, 0x5261, 0x66b9, 0x6bb2,
-  0x7e96, 0x87fe, 0x8d0d, 0x9583, 0x965d, 0x651d, 0x6d89, 0x71ee,
-  0xf96e, 0x57ce, 0x59d3, 0x5bac, 0x6027, 0x60fa, 0x6210, 0x661f,
-  0x665f, 0x7329, 0x73f9, 0x76db, 0x7701, 0x7b6c,
-  /* 0x61 */
-  0x8056, 0x8072, 0x8165, 0x8aa0, 0x9192, 0x4e16, 0x52e2, 0x6b72,
-  0x6d17, 0x7a05, 0x7b39, 0x7d30, 0xf96f, 0x8cb0, 0x53ec, 0x562f,
-  0x5851, 0x5bb5, 0x5c0f, 0x5c11, 0x5de2, 0x6240, 0x6383, 0x6414,
-  0x662d, 0x68b3, 0x6cbc, 0x6d88, 0x6eaf, 0x701f, 0x70a4, 0x71d2,
-  0x7526, 0x758f, 0x758e, 0x7619, 0x7b11, 0x7be0, 0x7c2b, 0x7d20,
-  0x7d39, 0x852c, 0x856d, 0x8607, 0x8a34, 0x900d, 0x9061, 0x90b5,
-  0x92b7, 0x97f6, 0x9a37, 0x4fd7, 0x5c6c, 0x675f, 0x6d91, 0x7c9f,
-  0x7e8c, 0x8b16, 0x8d16, 0x901f, 0x5b6b, 0x5dfd, 0x640d, 0x84c0,
-  0x905c, 0x98e1, 0x7387, 0x5b8b, 0x609a, 0x677e, 0x6dde, 0x8a1f,
-  0x8aa6, 0x9001, 0x980c, 0x5237, 0xf970, 0x7051, 0x788e, 0x9396,
-  0x8870, 0x91d7, 0x4fee, 0x53d7, 0x55fd, 0x56da, 0x5782, 0x58fd,
-  0x5ac2, 0x5b88, 0x5cab, 0x5cc0, 0x5e25, 0x6101,
-  /* 0x62 */
-  0x620d, 0x624b, 0x6388, 0x641c, 0x6536, 0x6578, 0x6a39, 0x6b8a,
-  0x6c34, 0x6d19, 0x6f31, 0x71e7, 0x72e9, 0x7378, 0x7407, 0x74b2,
-  0x7626, 0x7761, 0x79c0, 0x7a57, 0x7aea, 0x7cb9, 0x7d8f, 0x7dac,
-  0x7e61, 0x7f9e, 0x8129, 0x8331, 0x8490, 0x84da, 0x85ea, 0x8896,
-  0x8ab0, 0x8b90, 0x8f38, 0x9042, 0x9083, 0x916c, 0x9296, 0x92b9,
-  0x968b, 0x96a7, 0x96a8, 0x96d6, 0x9700, 0x9808, 0x9996, 0x9ad3,
-  0x9b1a, 0x53d4, 0x587e, 0x5919, 0x5b70, 0x5bbf, 0x6dd1, 0x6f5a,
-  0x719f, 0x7421, 0x74b9, 0x8085, 0x83fd, 0x5de1, 0x5f87, 0x5faa,
-  0x6042, 0x65ec, 0x6812, 0x696f, 0x6a53, 0x6b89, 0x6d35, 0x6df3,
-  0x73e3, 0x76fe, 0x77ac, 0x7b4d, 0x7d14, 0x8123, 0x821c, 0x8340,
-  0x84f4, 0x8563, 0x8a62, 0x8ac4, 0x9187, 0x931e, 0x9806, 0x99b4,
-  0x620c, 0x8853, 0x8ff0, 0x9265, 0x5d07, 0x5d27,
-  /* 0x63 */
-  0x5d69, 0x745f, 0x819d, 0x8768, 0x6fd5, 0x62fe, 0x7fd2, 0x8936,
-  0x8972, 0x4e1e, 0x4e58, 0x50e7, 0x52dd, 0x5347, 0x627f, 0x6607,
-  0x7e69, 0x8805, 0x965e, 0x4f8d, 0x5319, 0x5636, 0x59cb, 0x5aa4,
-  0x5c38, 0x5c4e, 0x5c4d, 0x5e02, 0x5f11, 0x6043, 0x65bd, 0x662f,
-  0x6642, 0x67be, 0x67f4, 0x731c, 0x77e2, 0x793a, 0x7fc5, 0x8494,
-  0x84cd, 0x8996, 0x8a66, 0x8a69, 0x8ae1, 0x8c55, 0x8c7a, 0x57f4,
-  0x5bd4, 0x5f0f, 0x606f, 0x62ed, 0x690d, 0x6b96, 0x6e5c, 0x7184,
-  0x7bd2, 0x8755, 0x8b58, 0x8efe, 0x98df, 0x98fe, 0x4f38, 0x4f81,
-  0x4fe1, 0x547b, 0x5a20, 0x5bb8, 0x613c, 0x65b0, 0x6668, 0x71fc,
-  0x7533, 0x795e, 0x7d33, 0x814e, 0x81e3, 0x8398, 0x85aa, 0x85ce,
-  0x8703, 0x8a0a, 0x8eab, 0x8f9b, 0xf971, 0x8fc5, 0x5931, 0x5ba4,
-  0x5be6, 0x6089, 0x5be9, 0x5c0b, 0x5fc3, 0x6c81,
-  /* 0x64 */
-  0xf972, 0x6df1, 0x700b, 0x751a, 0x82af, 0x8af6, 0x4ec0, 0x5341,
-  0xf973, 0x96d9, 0x6c0f, 0x4e9e, 0x4fc4, 0x5152, 0x555e, 0x5a25,
-  0x5ce8, 0x6211, 0x7259, 0x82bd, 0x83aa, 0x86fe, 0x8859, 0x8a1d,
-  0x963f, 0x96c5, 0x9913, 0x9d09, 0x9d5d, 0x580a, 0x5cb3, 0x5dbd,
-  0x5e44, 0x60e1, 0x6115, 0x63e1, 0x6a02, 0x6e25, 0x9102, 0x9354,
-  0x984e, 0x9c10, 0x9f77, 0x5b89, 0x5cb8, 0x6309, 0x664f, 0x6848,
-  0x773c, 0x96c1, 0x978d, 0x9854, 0x9b9f, 0x65a1, 0x8b01, 0x8ecb,
-  0x95bc, 0x5535, 0x5ca9, 0x5dd6, 0x5eb5, 0x6697, 0x764c, 0x83f4,
-  0x95c7, 0x58d3, 0x62bc, 0x72ce, 0x9d28, 0x4ef0, 0x592e, 0x600f,
-  0x663b, 0x6b83, 0x79e7, 0x9d26, 0x5393, 0x54c0, 0x57c3, 0x5d16,
-  0x611b, 0x66d6, 0x6daf, 0x788d, 0x827e, 0x9698, 0x9744, 0x5384,
-  0x627c, 0x6396, 0x6db2, 0x7e0a, 0x814b, 0x984d,
-  /* 0x65 */
-  0x6afb, 0x7f4c, 0x9daf, 0x9e1a, 0x4e5f, 0x503b, 0x51b6, 0x591c,
-  0x60f9, 0x63f6, 0x6930, 0x723a, 0x8036, 0xf974, 0x91ce, 0x5f31,
-  0xf975, 0xf976, 0x7d04, 0x82e5, 0x846f, 0x84bb, 0x85e5, 0x8e8d,
-  0xf977, 0x4f6f, 0xf978, 0xf979, 0x58e4, 0x5b43, 0x6059, 0x63da,
-  0x6518, 0x656d, 0x6698, 0xf97a, 0x694a, 0x6a23, 0x6d0b, 0x7001,
-  0x716c, 0x75d2, 0x760d, 0x79b3, 0x7a70, 0xf97b, 0x7f8a, 0xf97c,
-  0x8944, 0xf97d, 0x8b93, 0x91c0, 0x967d, 0xf97e, 0x990a, 0x5704,
-  0x5fa1, 0x65bc, 0x6f01, 0x7600, 0x79a6, 0x8a9e, 0x99ad, 0x9b5a,
-  0x9f6c, 0x5104, 0x61b6, 0x6291, 0x6a8d, 0x81c6, 0x5043, 0x5830,
-  0x5f66, 0x7109, 0x8a00, 0x8afa, 0x5b7c, 0x8616, 0x4ffa, 0x513c,
-  0x56b4, 0x5944, 0x63a9, 0x6df9, 0x5daa, 0x696d, 0x5186, 0x4e88,
-  0x4f59, 0xf97f, 0xf980, 0xf981, 0x5982, 0xf982,
-  /* 0x66 */
-  0xf983, 0x6b5f, 0x6c5d, 0xf984, 0x74b5, 0x7916, 0xf985, 0x8207,
-  0x8245, 0x8339, 0x8f3f, 0x8f5d, 0xf986, 0x9918, 0xf987, 0xf988,
-  0xf989, 0x4ea6, 0xf98a, 0x57df, 0x5f79, 0x6613, 0xf98b, 0xf98c,
-  0x75ab, 0x7e79, 0x8b6f, 0xf98d, 0x9006, 0x9a5b, 0x56a5, 0x5827,
-  0x59f8, 0x5a1f, 0x5bb4, 0xf98e, 0x5ef6, 0xf98f, 0xf990, 0x6350,
-  0x633b, 0xf991, 0x693d, 0x6c87, 0x6cbf, 0x6d8e, 0x6d93, 0x6df5,
-  0x6f14, 0xf992, 0x70df, 0x7136, 0x7159, 0xf993, 0x71c3, 0x71d5,
-  0xf994, 0x784f, 0x786f, 0xf995, 0x7b75, 0x7de3, 0xf996, 0x7e2f,
-  0xf997, 0x884d, 0x8edf, 0xf998, 0xf999, 0xf99a, 0x925b, 0xf99b,
-  0x9cf6, 0xf99c, 0xf99d, 0xf99e, 0x6085, 0x6d85, 0xf99f, 0x71b1,
-  0xf9a0, 0xf9a1, 0x95b1, 0x53ad, 0xf9a2, 0xf9a3, 0xf9a4, 0x67d3,
-  0xf9a5, 0x708e, 0x7130, 0x7430, 0x8276, 0x82d2,
-  /* 0x67 */
-  0xf9a6, 0x95bb, 0x9ae5, 0x9e7d, 0x66c4, 0xf9a7, 0x71c1, 0x8449,
-  0xf9a8, 0xf9a9, 0x584b, 0xf9aa, 0xf9ab, 0x5db8, 0x5f71, 0xf9ac,
-  0x6620, 0x668e, 0x6979, 0x69ae, 0x6c38, 0x6cf3, 0x6e36, 0x6f41,
-  0x6fda, 0x701b, 0x702f, 0x7150, 0x71df, 0x7370, 0xf9ad, 0x745b,
-  0xf9ae, 0x74d4, 0x76c8, 0x7a4e, 0x7e93, 0xf9af, 0xf9b0, 0x82f1,
-  0x8a60, 0x8fce, 0xf9b1, 0x9348, 0xf9b2, 0x9719, 0xf9b3, 0xf9b4,
-  0x4e42, 0x502a, 0xf9b5, 0x5208, 0x53e1, 0x66f3, 0x6c6d, 0x6fca,
-  0x730a, 0x777f, 0x7a62, 0x82ae, 0x85dd, 0x8602, 0xf9b6, 0x88d4,
-  0x8a63, 0x8b7d, 0x8c6b, 0xf9b7, 0x92b3, 0xf9b8, 0x9713, 0x9810,
-  0x4e94, 0x4f0d, 0x4fc9, 0x50b2, 0x5348, 0x543e, 0x5433, 0x55da,
-  0x5862, 0x58ba, 0x5967, 0x5a1b, 0x5be4, 0x609f, 0xf9b9, 0x61ca,
-  0x6556, 0x65ff, 0x6664, 0x68a7, 0x6c5a, 0x6fb3,
-  /* 0x68 */
-  0x70cf, 0x71ac, 0x7352, 0x7b7d, 0x8708, 0x8aa4, 0x9c32, 0x9f07,
-  0x5c4b, 0x6c83, 0x7344, 0x7389, 0x923a, 0x6eab, 0x7465, 0x761f,
-  0x7a69, 0x7e15, 0x860a, 0x5140, 0x58c5, 0x64c1, 0x74ee, 0x7515,
-  0x7670, 0x7fc1, 0x9095, 0x96cd, 0x9954, 0x6e26, 0x74e6, 0x7aa9,
-  0x7aaa, 0x81e5, 0x86d9, 0x8778, 0x8a1b, 0x5a49, 0x5b8c, 0x5b9b,
-  0x68a1, 0x6900, 0x6d63, 0x73a9, 0x7413, 0x742c, 0x7897, 0x7de9,
-  0x7feb, 0x8118, 0x8155, 0x839e, 0x8c4c, 0x962e, 0x9811, 0x66f0,
-  0x5f80, 0x65fa, 0x6789, 0x6c6a, 0x738b, 0x502d, 0x5a03, 0x6b6a,
-  0x77ee, 0x5916, 0x5d6c, 0x5dcd, 0x7325, 0x754f, 0xf9ba, 0xf9bb,
-  0x50e5, 0x51f9, 0x582f, 0x592d, 0x5996, 0x59da, 0x5be5, 0xf9bc,
-  0xf9bd, 0x5da2, 0x62d7, 0x6416, 0x6493, 0x64fe, 0xf9be, 0x66dc,
-  0xf9bf, 0x6a48, 0xf9c0, 0x71ff, 0x7464, 0xf9c1,
-  /* 0x69 */
-  0x7a88, 0x7aaf, 0x7e47, 0x7e5e, 0x8000, 0x8170, 0xf9c2, 0x87ef,
-  0x8981, 0x8b20, 0x9059, 0xf9c3, 0x9080, 0x9952, 0x617e, 0x6b32,
-  0x6d74, 0x7e1f, 0x8925, 0x8fb1, 0x4fd1, 0x50ad, 0x5197, 0x52c7,
-  0x57c7, 0x5889, 0x5bb9, 0x5eb8, 0x6142, 0x6995, 0x6d8c, 0x6e67,
-  0x6eb6, 0x7194, 0x7462, 0x7528, 0x752c, 0x8073, 0x8338, 0x84c9,
-  0x8e0a, 0x9394, 0x93de, 0xf9c4, 0x4e8e, 0x4f51, 0x5076, 0x512a,
-  0x53c8, 0x53cb, 0x53f3, 0x5b87, 0x5bd3, 0x5c24, 0x611a, 0x6182,
-  0x65f4, 0x725b, 0x7397, 0x7440, 0x76c2, 0x7950, 0x7991, 0x79b9,
-  0x7d06, 0x7fbd, 0x828b, 0x85d5, 0x865e, 0x8fc2, 0x9047, 0x90f5,
-  0x91ea, 0x9685, 0x96e8, 0x96e9, 0x52d6, 0x5f67, 0x65ed, 0x6631,
-  0x682f, 0x715c, 0x7a36, 0x90c1, 0x980a, 0x4e91, 0xf9c5, 0x6a52,
-  0x6b9e, 0x6f90, 0x7189, 0x8018, 0x82b8, 0x8553,
-  /* 0x6a */
-  0x904b, 0x9695, 0x96f2, 0x97fb, 0x851a, 0x9b31, 0x4e90, 0x718a,
-  0x96c4, 0x5143, 0x539f, 0x54e1, 0x5713, 0x5712, 0x57a3, 0x5a9b,
-  0x5ac4, 0x5bc3, 0x6028, 0x613f, 0x63f4, 0x6c85, 0x6d39, 0x6e72,
-  0x6e90, 0x7230, 0x733f, 0x7457, 0x82d1, 0x8881, 0x8f45, 0x9060,
-  0xf9c6, 0x9662, 0x9858, 0x9d1b, 0x6708, 0x8d8a, 0x925e, 0x4f4d,
-  0x5049, 0x50de, 0x5371, 0x570d, 0x59d4, 0x5a01, 0x5c09, 0x6170,
-  0x6690, 0x6e2d, 0x7232, 0x744b, 0x7def, 0x80c3, 0x840e, 0x8466,
-  0x853f, 0x875f, 0x885b, 0x8918, 0x8b02, 0x9055, 0x97cb, 0x9b4f,
-  0x4e73, 0x4f91, 0x5112, 0x516a, 0xf9c7, 0x552f, 0x55a9, 0x5b7a,
-  0x5ba5, 0x5e7c, 0x5e7d, 0x5ebe, 0x60a0, 0x60df, 0x6108, 0x6109,
-  0x63c4, 0x6538, 0x6709, 0xf9c8, 0x67d4, 0x67da, 0xf9c9, 0x6961,
-  0x6962, 0x6cb9, 0x6d27, 0xf9ca, 0x6e38, 0xf9cb,
-  /* 0x6b */
-  0x6fe1, 0x7336, 0x7337, 0xf9cc, 0x745c, 0x7531, 0xf9cd, 0x7652,
-  0xf9ce, 0xf9cf, 0x7dad, 0x81fe, 0x8438, 0x88d5, 0x8a98, 0x8adb,
-  0x8aed, 0x8e30, 0x8e42, 0x904a, 0x903e, 0x907a, 0x9149, 0x91c9,
-  0x936e, 0xf9d0, 0xf9d1, 0x5809, 0xf9d2, 0x6bd3, 0x8089, 0x80b2,
-  0xf9d3, 0xf9d4, 0x5141, 0x596b, 0x5c39, 0xf9d5, 0xf9d6, 0x6f64,
-  0x73a7, 0x80e4, 0x8d07, 0xf9d7, 0x9217, 0x958f, 0xf9d8, 0xf9d9,
-  0xf9da, 0xf9db, 0x807f, 0x620e, 0x701c, 0x7d68, 0x878d, 0xf9dc,
-  0x57a0, 0x6069, 0x6147, 0x6bb7, 0x8abe, 0x9280, 0x96b1, 0x4e59,
-  0x541f, 0x6deb, 0x852d, 0x9670, 0x97f3, 0x98ee, 0x63d6, 0x6ce3,
-  0x9091, 0x51dd, 0x61c9, 0x81ba, 0x9df9, 0x4f9d, 0x501a, 0x5100,
-  0x5b9c, 0x610f, 0x61ff, 0x64ec, 0x6905, 0x6bc5, 0x7591, 0x77e3,
-  0x7fa9, 0x8264, 0x858f, 0x87fb, 0x8863, 0x8abc,
-  /* 0x6c */
-  0x8b70, 0x91ab, 0x4e8c, 0x4ee5, 0x4f0a, 0xf9dd, 0xf9de, 0x5937,
-  0x59e8, 0xf9df, 0x5df2, 0x5f1b, 0x5f5b, 0x6021, 0xf9e0, 0xf9e1,
-  0xf9e2, 0xf9e3, 0x723e, 0x73e5, 0xf9e4, 0x7570, 0x75cd, 0xf9e5,
-  0x79fb, 0xf9e6, 0x800c, 0x8033, 0x8084, 0x82e1, 0x8351, 0xf9e7,
-  0xf9e8, 0x8cbd, 0x8cb3, 0x9087, 0xf9e9, 0xf9ea, 0x98f4, 0x990c,
-  0xf9eb, 0xf9ec, 0x7037, 0x76ca, 0x7fca, 0x7fcc, 0x7ffc, 0x8b1a,
-  0x4eba, 0x4ec1, 0x5203, 0x5370, 0xf9ed, 0x54bd, 0x56e0, 0x59fb,
-  0x5bc5, 0x5f15, 0x5fcd, 0x6e6e, 0xf9ee, 0xf9ef, 0x7d6a, 0x8335,
-  0xf9f0, 0x8693, 0x8a8d, 0xf9f1, 0x976d, 0x9777, 0xf9f2, 0xf9f3,
-  0x4e00, 0x4f5a, 0x4f7e, 0x58f9, 0x65e5, 0x6ea2, 0x9038, 0x93b0,
-  0x99b9, 0x4efb, 0x58ec, 0x598a, 0x59d9, 0x6041, 0xf9f4, 0xf9f5,
-  0x7a14, 0xf9f6, 0x834f, 0x8cc3, 0x5165, 0x5344,
-  /* 0x6d */
-  0xf9f7, 0xf9f8, 0xf9f9, 0x4ecd, 0x5269, 0x5b55, 0x82bf, 0x4ed4,
-  0x523a, 0x54a8, 0x59c9, 0x59ff, 0x5b50, 0x5b57, 0x5b5c, 0x6063,
-  0x6148, 0x6ecb, 0x7099, 0x716e, 0x7386, 0x74f7, 0x75b5, 0x78c1,
-  0x7d2b, 0x8005, 0x81ea, 0x8328, 0x8517, 0x85c9, 0x8aee, 0x8cc7,
-  0x96cc, 0x4f5c, 0x52fa, 0x56bc, 0x65ab, 0x6628, 0x707c, 0x70b8,
-  0x7235, 0x7dbd, 0x828d, 0x914c, 0x96c0, 0x9d72, 0x5b71, 0x68e7,
-  0x6b98, 0x6f7a, 0x76de, 0x5c91, 0x66ab, 0x6f5b, 0x7bb4, 0x7c2a,
-  0x8836, 0x96dc, 0x4e08, 0x4ed7, 0x5320, 0x5834, 0x58bb, 0x58ef,
-  0x596c, 0x5c07, 0x5e33, 0x5e84, 0x5f35, 0x638c, 0x66b2, 0x6756,
-  0x6a1f, 0x6aa3, 0x6b0c, 0x6f3f, 0x7246, 0xf9fa, 0x7350, 0x748b,
-  0x7ae0, 0x7ca7, 0x8178, 0x81df, 0x81e7, 0x838a, 0x846c, 0x8523,
-  0x8594, 0x85cf, 0x88dd, 0x8d13, 0x91ac, 0x9577,
-  /* 0x6e */
-  0x969c, 0x518d, 0x54c9, 0x5728, 0x5bb0, 0x624d, 0x6750, 0x683d,
-  0x6893, 0x6e3d, 0x6ed3, 0x707d, 0x7e21, 0x88c1, 0x8ca1, 0x8f09,
-  0x9f4b, 0x9f4e, 0x722d, 0x7b8f, 0x8acd, 0x931a, 0x4f47, 0x4f4e,
-  0x5132, 0x5480, 0x59d0, 0x5e95, 0x62b5, 0x6775, 0x696e, 0x6a17,
-  0x6cae, 0x6e1a, 0x72d9, 0x732a, 0x75bd, 0x7bb8, 0x7d35, 0x82e7,
-  0x83f9, 0x8457, 0x85f7, 0x8a5b, 0x8caf, 0x8e87, 0x9019, 0x90b8,
-  0x96ce, 0x9f5f, 0x52e3, 0x540a, 0x5ae1, 0x5bc2, 0x6458, 0x6575,
-  0x6ef4, 0x72c4, 0xf9fb, 0x7684, 0x7a4d, 0x7b1b, 0x7c4d, 0x7e3e,
-  0x7fdf, 0x837b, 0x8b2b, 0x8cca, 0x8d64, 0x8de1, 0x8e5f, 0x8fea,
-  0x8ff9, 0x9069, 0x93d1, 0x4f43, 0x4f7a, 0x50b3, 0x5168, 0x5178,
-  0x524d, 0x526a, 0x5861, 0x587c, 0x5960, 0x5c08, 0x5c55, 0x5edb,
-  0x609b, 0x6230, 0x6813, 0x6bbf, 0x6c08, 0x6fb1,
-  /* 0x6f */
-  0x714e, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7b4c, 0x7b8b,
-  0x7bad, 0x7bc6, 0x7e8f, 0x8a6e, 0x8f3e, 0x8f49, 0x923f, 0x9293,
-  0x9322, 0x942b, 0x96fb, 0x985a, 0x986b, 0x991e, 0x5207, 0x622a,
-  0x6298, 0x6d59, 0x7664, 0x7aca, 0x7bc0, 0x7d76, 0x5360, 0x5cbe,
-  0x5e97, 0x6f38, 0x70b9, 0x7c98, 0x9711, 0x9b8e, 0x9ede, 0x63a5,
-  0x647a, 0x8776, 0x4e01, 0x4e95, 0x4ead, 0x505c, 0x5075, 0x5448,
-  0x59c3, 0x5b9a, 0x5e40, 0x5ead, 0x5ef7, 0x5f81, 0x60c5, 0x633a,
-  0x653f, 0x6574, 0x65cc, 0x6676, 0x6678, 0x67fe, 0x6968, 0x6a89,
-  0x6b63, 0x6c40, 0x6dc0, 0x6de8, 0x6e1f, 0x6e5e, 0x701e, 0x70a1,
-  0x738e, 0x73fd, 0x753a, 0x775b, 0x7887, 0x798e, 0x7a0b, 0x7a7d,
-  0x7cbe, 0x7d8e, 0x8247, 0x8a02, 0x8aea, 0x8c9e, 0x912d, 0x914a,
-  0x91d8, 0x9266, 0x92cc, 0x9320, 0x9706, 0x9756,
-  /* 0x70 */
-  0x975c, 0x9802, 0x9f0e, 0x5236, 0x5291, 0x557c, 0x5824, 0x5e1d,
-  0x5f1f, 0x608c, 0x63d0, 0x68af, 0x6fdf, 0x796d, 0x7b2c, 0x81cd,
-  0x85ba, 0x88fd, 0x8af8, 0x8e44, 0x918d, 0x9664, 0x969b, 0x973d,
-  0x984c, 0x9f4a, 0x4fce, 0x5146, 0x51cb, 0x52a9, 0x5632, 0x5f14,
-  0x5f6b, 0x63aa, 0x64cd, 0x65e9, 0x6641, 0x66fa, 0x66f9, 0x671d,
-  0x689d, 0x68d7, 0x69fd, 0x6f15, 0x6f6e, 0x7167, 0x71e5, 0x722a,
-  0x74aa, 0x773a, 0x7956, 0x795a, 0x79df, 0x7a20, 0x7a95, 0x7c97,
-  0x7cdf, 0x7d44, 0x7e70, 0x8087, 0x85fb, 0x86a4, 0x8a54, 0x8abf,
-  0x8d99, 0x8e81, 0x9020, 0x906d, 0x91e3, 0x963b, 0x96d5, 0x9ce5,
-  0x65cf, 0x7c07, 0x8db3, 0x93c3, 0x5b58, 0x5c0a, 0x5352, 0x62d9,
-  0x731d, 0x5027, 0x5b97, 0x5f9e, 0x60b0, 0x616b, 0x68d5, 0x6dd9,
-  0x742e, 0x7a2e, 0x7d42, 0x7d9c, 0x7e31, 0x816b,
-  /* 0x71 */
-  0x8e2a, 0x8e35, 0x937e, 0x9418, 0x4f50, 0x5750, 0x5de6, 0x5ea7,
-  0x632b, 0x7f6a, 0x4e3b, 0x4f4f, 0x4f8f, 0x505a, 0x59dd, 0x80c4,
-  0x546a, 0x5468, 0x55fe, 0x594f, 0x5b99, 0x5dde, 0x5eda, 0x665d,
-  0x6731, 0x67f1, 0x682a, 0x6ce8, 0x6d32, 0x6e4a, 0x6f8d, 0x70b7,
-  0x73e0, 0x7587, 0x7c4c, 0x7d02, 0x7d2c, 0x7da2, 0x821f, 0x86db,
-  0x8a3b, 0x8a85, 0x8d70, 0x8e8a, 0x8f33, 0x9031, 0x914e, 0x9152,
-  0x9444, 0x99d0, 0x7af9, 0x7ca5, 0x4fca, 0x5101, 0x51c6, 0x57c8,
-  0x5bef, 0x5cfb, 0x6659, 0x6a3d, 0x6d5a, 0x6e96, 0x6fec, 0x710c,
-  0x756f, 0x7ae3, 0x8822, 0x9021, 0x9075, 0x96cb, 0x99ff, 0x8301,
-  0x4e2d, 0x4ef2, 0x8846, 0x91cd, 0x537d, 0x6adb, 0x696b, 0x6c41,
-  0x847a, 0x589e, 0x618e, 0x66fe, 0x62ef, 0x70dd, 0x7511, 0x75c7,
-  0x7e52, 0x84b8, 0x8b49, 0x8d08, 0x4e4b, 0x53ea,
-  /* 0x72 */
-  0x54ab, 0x5730, 0x5740, 0x5fd7, 0x6301, 0x6307, 0x646f, 0x652f,
-  0x65e8, 0x667a, 0x679d, 0x67b3, 0x6b62, 0x6c60, 0x6c9a, 0x6f2c,
-  0x77e5, 0x7825, 0x7949, 0x7957, 0x7d19, 0x80a2, 0x8102, 0x81f3,
-  0x829d, 0x82b7, 0x8718, 0x8a8c, 0xf9fc, 0x8d04, 0x8dbe, 0x9072,
-  0x76f4, 0x7a19, 0x7a37, 0x7e54, 0x8077, 0x5507, 0x55d4, 0x5875,
-  0x632f, 0x6422, 0x6649, 0x664b, 0x686d, 0x699b, 0x6b84, 0x6d25,
-  0x6eb1, 0x73cd, 0x7468, 0x74a1, 0x755b, 0x75b9, 0x76e1, 0x771e,
-  0x778b, 0x79e6, 0x7e09, 0x7e1d, 0x81fb, 0x852f, 0x8897, 0x8a3a,
-  0x8cd1, 0x8eeb, 0x8fb0, 0x9032, 0x93ad, 0x9663, 0x9673, 0x9707,
-  0x4f84, 0x53f1, 0x59ea, 0x5ac9, 0x5e19, 0x684e, 0x74c6, 0x75be,
-  0x79e9, 0x7a92, 0x81a3, 0x86ed, 0x8cea, 0x8dcc, 0x8fed, 0x659f,
-  0x6715, 0xf9fd, 0x57f7, 0x6f57, 0x7ddd, 0x8f2f,
-  /* 0x73 */
-  0x93f6, 0x96c6, 0x5fb5, 0x61f2, 0x6f84, 0x4e14, 0x4f98, 0x501f,
-  0x53c9, 0x55df, 0x5d6f, 0x5dee, 0x6b21, 0x6b64, 0x78cb, 0x7b9a,
-  0xf9fe, 0x8e49, 0x8eca, 0x906e, 0x6349, 0x643e, 0x7740, 0x7a84,
-  0x932f, 0x947f, 0x9f6a, 0x64b0, 0x6faf, 0x71e6, 0x74a8, 0x74da,
-  0x7ac4, 0x7c12, 0x7e82, 0x7cb2, 0x7e98, 0x8b9a, 0x8d0a, 0x947d,
-  0x9910, 0x994c, 0x5239, 0x5bdf, 0x64e6, 0x672d, 0x7d2e, 0x50ed,
-  0x53c3, 0x5879, 0x6158, 0x6159, 0x61fa, 0x65ac, 0x7ad9, 0x8b92,
-  0x8b96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5a3c, 0x5ee0, 0x5f70,
-  0x6134, 0x655e, 0x660c, 0x6636, 0x66a2, 0x69cd, 0x6ec4, 0x6f32,
-  0x7316, 0x7621, 0x7a93, 0x8139, 0x8259, 0x83d6, 0x84bc, 0x50b5,
-  0x57f0, 0x5bc0, 0x5be8, 0x5f69, 0x63a1, 0x7826, 0x7db5, 0x83dc,
-  0x8521, 0x91c7, 0x91f5, 0x518a, 0x67f5, 0x7b56,
-  /* 0x74 */
-  0x8cac, 0x51c4, 0x59bb, 0x60bd, 0x8655, 0x501c, 0xf9ff, 0x5254,
-  0x5c3a, 0x617d, 0x621a, 0x62d3, 0x64f2, 0x65a5, 0x6ecc, 0x7620,
-  0x810a, 0x8e60, 0x965f, 0x96bb, 0x4edf, 0x5343, 0x5598, 0x5929,
-  0x5ddd, 0x64c5, 0x6cc9, 0x6dfa, 0x7394, 0x7a7f, 0x821b, 0x85a6,
-  0x8ce4, 0x8e10, 0x9077, 0x91e7, 0x95e1, 0x9621, 0x97c6, 0x51f8,
-  0x54f2, 0x5586, 0x5fb9, 0x64a4, 0x6f88, 0x7db4, 0x8f1f, 0x8f4d,
-  0x9435, 0x50c9, 0x5c16, 0x6cbe, 0x6dfb, 0x751b, 0x77bb, 0x7c3d,
-  0x7c64, 0x8a79, 0x8ac2, 0x581e, 0x59be, 0x5e16, 0x6377, 0x7252,
-  0x758a, 0x776b, 0x8adc, 0x8cbc, 0x8f12, 0x5ef3, 0x6674, 0x6df8,
-  0x807d, 0x83c1, 0x8acb, 0x9751, 0x9bd6, 0xfa00, 0x5243, 0x66ff,
-  0x6d95, 0x6eef, 0x7de0, 0x8ae6, 0x902e, 0x905e, 0x9ad4, 0x521d,
-  0x527f, 0x54e8, 0x6194, 0x6284, 0x62db, 0x68a2,
-  /* 0x75 */
-  0x6912, 0x695a, 0x6a35, 0x7092, 0x7126, 0x785d, 0x7901, 0x790e,
-  0x79d2, 0x7a0d, 0x8096, 0x8278, 0x82d5, 0x8349, 0x8549, 0x8c82,
-  0x8d85, 0x9162, 0x918b, 0x91ae, 0x4fc3, 0x56d1, 0x71ed, 0x77d7,
-  0x8700, 0x89f8, 0x5bf8, 0x5fd6, 0x6751, 0x90a8, 0x53e2, 0x585a,
-  0x5bf5, 0x60a4, 0x6181, 0x6460, 0x7e3d, 0x8070, 0x8525, 0x9283,
-  0x64ae, 0x50ac, 0x5d14, 0x6700, 0x589c, 0x62bd, 0x63a8, 0x690e,
-  0x6978, 0x6a1e, 0x6e6b, 0x76ba, 0x79cb, 0x82bb, 0x8429, 0x8acf,
-  0x8da8, 0x8ffd, 0x9112, 0x914b, 0x919c, 0x9310, 0x9318, 0x939a,
-  0x96db, 0x9a36, 0x9c0d, 0x4e11, 0x755c, 0x795d, 0x7afa, 0x7b51,
-  0x7bc9, 0x7e2e, 0x84c4, 0x8e59, 0x8e74, 0x8ef8, 0x9010, 0x6625,
-  0x693f, 0x7443, 0x51fa, 0x672e, 0x9edc, 0x5145, 0x5fe0, 0x6c96,
-  0x87f2, 0x885d, 0x8877, 0x60b4, 0x81b5, 0x8403,
-  /* 0x76 */
-  0x8d05, 0x53d6, 0x5439, 0x5634, 0x5a36, 0x5c31, 0x708a, 0x7fe0,
-  0x805a, 0x8106, 0x81ed, 0x8da3, 0x9189, 0x9a5f, 0x9df2, 0x5074,
-  0x4ec4, 0x53a0, 0x60fb, 0x6e2c, 0x5c64, 0x4f88, 0x5024, 0x55e4,
-  0x5cd9, 0x5e5f, 0x6065, 0x6894, 0x6cbb, 0x6dc4, 0x71be, 0x75d4,
-  0x75f4, 0x7661, 0x7a1a, 0x7a49, 0x7dc7, 0x7dfb, 0x7f6e, 0x81f4,
-  0x86a9, 0x8f1c, 0x96c9, 0x99b3, 0x9f52, 0x5247, 0x52c5, 0x98ed,
-  0x89aa, 0x4e03, 0x67d2, 0x6f06, 0x4fb5, 0x5be2, 0x6795, 0x6c88,
-  0x6d78, 0x741b, 0x7827, 0x91dd, 0x937c, 0x87c4, 0x79e4, 0x7a31,
-  0x5feb, 0x4ed6, 0x54a4, 0x553e, 0x58ae, 0x59a5, 0x60f0, 0x6253,
-  0x62d6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99b1, 0x99dd, 0x502c,
-  0x5353, 0x5544, 0x577c, 0xfa01, 0x6258, 0xfa02, 0x64e2, 0x666b,
-  0x67dd, 0x6fc1, 0x6fef, 0x7422, 0x7438, 0x8a17,
-  /* 0x77 */
-  0x9438, 0x5451, 0x5606, 0x5766, 0x5f48, 0x619a, 0x6b4e, 0x7058,
-  0x70ad, 0x7dbb, 0x8a95, 0x596a, 0x812b, 0x63a2, 0x7708, 0x803d,
-  0x8caa, 0x5854, 0x642d, 0x69bb, 0x5b95, 0x5e11, 0x6e6f, 0xfa03,
-  0x8569, 0x514c, 0x53f0, 0x592a, 0x6020, 0x614b, 0x6b86, 0x6c70,
-  0x6cf0, 0x7b1e, 0x80ce, 0x82d4, 0x8dc6, 0x90b0, 0x98b1, 0xfa04,
-  0x64c7, 0x6fa4, 0x6491, 0x6504, 0x514e, 0x5410, 0x571f, 0x8a0e,
-  0x615f, 0x6876, 0xfa05, 0x75db, 0x7b52, 0x7d71, 0x901a, 0x5806,
-  0x69cc, 0x817f, 0x892a, 0x9000, 0x9839, 0x5078, 0x5957, 0x59ac,
-  0x6295, 0x900f, 0x9b2a, 0x615d, 0x7279, 0x95d6, 0x5761, 0x5a46,
-  0x5df4, 0x628a, 0x64ad, 0x64fa, 0x6777, 0x6ce2, 0x6d3e, 0x722c,
-  0x7436, 0x7834, 0x7f77, 0x82ad, 0x8ddb, 0x9817, 0x5224, 0x5742,
-  0x677f, 0x7248, 0x74e3, 0x8ca9, 0x8fa6, 0x9211,
-  /* 0x78 */
-  0x962a, 0x516b, 0x53ed, 0x634c, 0x4f69, 0x5504, 0x6096, 0x6557,
-  0x6c9b, 0x6d7f, 0x724c, 0x72fd, 0x7a17, 0x8987, 0x8c9d, 0x5f6d,
-  0x6f8e, 0x70f9, 0x81a8, 0x610e, 0x4fbf, 0x504f, 0x6241, 0x7247,
-  0x7bc7, 0x7de8, 0x7fe9, 0x904d, 0x97ad, 0x9a19, 0x8cb6, 0x576a,
-  0x5e73, 0x67b0, 0x840d, 0x8a55, 0x5420, 0x5b16, 0x5e63, 0x5ee2,
-  0x5f0a, 0x6583, 0x80ba, 0x853d, 0x9589, 0x965b, 0x4f48, 0x5305,
-  0x530d, 0x530f, 0x5486, 0x54fa, 0x5703, 0x5e03, 0x6016, 0x629b,
-  0x62b1, 0x6355, 0xfa06, 0x6ce1, 0x6d66, 0x75b1, 0x7832, 0x80de,
-  0x812f, 0x82de, 0x8461, 0x84b2, 0x888d, 0x8912, 0x900b, 0x92ea,
-  0x98fd, 0x9b91, 0x5e45, 0x66b4, 0x66dd, 0x7011, 0x7206, 0xfa07,
-  0x4ff5, 0x527d, 0x5f6a, 0x6153, 0x6753, 0x6a19, 0x6f02, 0x74e2,
-  0x7968, 0x8868, 0x8c79, 0x98c7, 0x98c4, 0x9a43,
-  /* 0x79 */
-  0x54c1, 0x7a1f, 0x6953, 0x8af7, 0x8c4a, 0x98a8, 0x99ae, 0x5f7c,
-  0x62ab, 0x75b2, 0x76ae, 0x88ab, 0x907f, 0x9642, 0x5339, 0x5f3c,
-  0x5fc5, 0x6ccc, 0x73cc, 0x7562, 0x758b, 0x7b46, 0x82fe, 0x999d,
-  0x4e4f, 0x903c, 0x4e0b, 0x4f55, 0x53a6, 0x590f, 0x5ec8, 0x6630,
-  0x6cb3, 0x7455, 0x8377, 0x8766, 0x8cc0, 0x9050, 0x971e, 0x9c15,
-  0x58d1, 0x5b78, 0x8650, 0x8b14, 0x9db4, 0x5bd2, 0x6068, 0x608d,
-  0x65f1, 0x6c57, 0x6f22, 0x6fa3, 0x701a, 0x7f55, 0x7ff0, 0x9591,
-  0x9592, 0x9650, 0x97d3, 0x5272, 0x8f44, 0x51fd, 0x542b, 0x54b8,
-  0x5563, 0x558a, 0x6abb, 0x6db5, 0x7dd8, 0x8266, 0x929c, 0x9677,
-  0x9e79, 0x5408, 0x54c8, 0x76d2, 0x86e4, 0x95a4, 0x95d4, 0x965c,
-  0x4ea2, 0x4f09, 0x59ee, 0x5ae6, 0x5df7, 0x6052, 0x6297, 0x676d,
-  0x6841, 0x6c86, 0x6e2f, 0x7f38, 0x809b, 0x822a,
-  /* 0x7a */
-  0xfa08, 0xfa09, 0x9805, 0x4ea5, 0x5055, 0x54b3, 0x5793, 0x595a,
-  0x5b69, 0x5bb3, 0x61c8, 0x6977, 0x6d77, 0x7023, 0x87f9, 0x89e3,
-  0x8a72, 0x8ae7, 0x9082, 0x99ed, 0x9ab8, 0x52be, 0x6838, 0x5016,
-  0x5e78, 0x674f, 0x8347, 0x884c, 0x4eab, 0x5411, 0x56ae, 0x73e6,
-  0x9115, 0x97ff, 0x9909, 0x9957, 0x9999, 0x5653, 0x589f, 0x865b,
-  0x8a31, 0x61b2, 0x6af6, 0x737b, 0x8ed2, 0x6b47, 0x96aa, 0x9a57,
-  0x5955, 0x7200, 0x8d6b, 0x9769, 0x4fd4, 0x5cf4, 0x5f26, 0x61f8,
-  0x665b, 0x6ceb, 0x70ab, 0x7384, 0x73b9, 0x73fe, 0x7729, 0x774d,
-  0x7d43, 0x7d62, 0x7e23, 0x8237, 0x8852, 0xfa0a, 0x8ce2, 0x9249,
-  0x986f, 0x5b51, 0x7a74, 0x8840, 0x9801, 0x5acc, 0x4fe0, 0x5354,
-  0x593e, 0x5cfd, 0x633e, 0x6d79, 0x72f9, 0x8105, 0x8107, 0x83a2,
-  0x92cf, 0x9830, 0x4ea8, 0x5144, 0x5211, 0x578b,
-  /* 0x7b */
-  0x5f62, 0x6cc2, 0x6ece, 0x7005, 0x7050, 0x70af, 0x7192, 0x73e9,
-  0x7469, 0x834a, 0x87a2, 0x8861, 0x9008, 0x90a2, 0x93a3, 0x99a8,
-  0x516e, 0x5f57, 0x60e0, 0x6167, 0x66b3, 0x8559, 0x8e4a, 0x91af,
-  0x978b, 0x4e4e, 0x4e92, 0x547c, 0x58d5, 0x58fa, 0x597d, 0x5cb5,
-  0x5f27, 0x6236, 0x6248, 0x660a, 0x6667, 0x6beb, 0x6d69, 0x6dcf,
-  0x6e56, 0x6ef8, 0x6f94, 0x6fe0, 0x6fe9, 0x705d, 0x72d0, 0x7425,
-  0x745a, 0x74e0, 0x7693, 0x795c, 0x7cca, 0x7e1e, 0x80e1, 0x82a6,
-  0x846b, 0x84bf, 0x864e, 0x865f, 0x8774, 0x8b77, 0x8c6a, 0x93ac,
-  0x9800, 0x9865, 0x60d1, 0x6216, 0x9177, 0x5a5a, 0x660f, 0x6df7,
-  0x6e3e, 0x743f, 0x9b42, 0x5ffd, 0x60da, 0x7b0f, 0x54c4, 0x5f18,
-  0x6c5e, 0x6cd3, 0x6d2a, 0x70d8, 0x7d05, 0x8679, 0x8a0c, 0x9d3b,
-  0x5316, 0x548c, 0x5b05, 0x6a3a, 0x706b, 0x7575,
-  /* 0x7c */
-  0x798d, 0x79be, 0x82b1, 0x83ef, 0x8a71, 0x8b41, 0x8ca8, 0x9774,
-  0xfa0b, 0x64f4, 0x652b, 0x78ba, 0x78bb, 0x7a6b, 0x4e38, 0x559a,
-  0x5950, 0x5ba6, 0x5e7b, 0x60a3, 0x63db, 0x6b61, 0x6665, 0x6853,
-  0x6e19, 0x7165, 0x74b0, 0x7d08, 0x9084, 0x9a69, 0x9c25, 0x6d3b,
-  0x6ed1, 0x733e, 0x8c41, 0x95ca, 0x51f0, 0x5e4c, 0x5fa8, 0x604d,
-  0x60f6, 0x6130, 0x614c, 0x6643, 0x6644, 0x69a5, 0x6cc1, 0x6e5f,
-  0x6ec9, 0x6f62, 0x714c, 0x749c, 0x7687, 0x7bc1, 0x7c27, 0x8352,
-  0x8757, 0x9051, 0x968d, 0x9ec3, 0x532f, 0x56de, 0x5efb, 0x5f8a,
-  0x6062, 0x6094, 0x61f7, 0x6666, 0x6703, 0x6a9c, 0x6dee, 0x6fae,
-  0x7070, 0x736a, 0x7e6a, 0x81be, 0x8334, 0x86d4, 0x8aa8, 0x8cc4,
-  0x5283, 0x7372, 0x5b96, 0x6a6b, 0x9404, 0x54ee, 0x5686, 0x5b5d,
-  0x6548, 0x6585, 0x66c9, 0x689f, 0x6d8d, 0x6dc6,
-  /* 0x7d */
-  0x723b, 0x80b4, 0x9175, 0x9a4d, 0x4faf, 0x5019, 0x539a, 0x540e,
-  0x543c, 0x5589, 0x55c5, 0x5e3f, 0x5f8c, 0x673d, 0x7166, 0x73dd,
-  0x9005, 0x52db, 0x52f3, 0x5864, 0x58ce, 0x7104, 0x718f, 0x71fb,
-  0x85b0, 0x8a13, 0x6688, 0x85a8, 0x55a7, 0x6684, 0x714a, 0x8431,
-  0x5349, 0x5599, 0x6bc1, 0x5f59, 0x5fbd, 0x63ee, 0x6689, 0x7147,
-  0x8af1, 0x8f1d, 0x9ebe, 0x4f11, 0x643a, 0x70cb, 0x7566, 0x8667,
-  0x6064, 0x8b4e, 0x9df8, 0x5147, 0x51f6, 0x5308, 0x6d36, 0x80f8,
-  0x9ed1, 0x6615, 0x6b23, 0x7098, 0x75d5, 0x5403, 0x5c79, 0x7d07,
-  0x8a16, 0x6b20, 0x6b3d, 0x6b46, 0x5438, 0x6070, 0x6d3d, 0x7fd5,
-  0x8208, 0x50d6, 0x51de, 0x559c, 0x566b, 0x56cd, 0x59ec, 0x5b09,
-  0x5e0c, 0x6199, 0x6198, 0x6231, 0x665e, 0x66e6, 0x7199, 0x71b9,
-  0x71ba, 0x72a7, 0x79a7, 0x7a00, 0x7fb2, 0x8a70,
-};
-
-static int
-ksc5601_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = (s[0] & 0x7F);
-  if ((c1 >= 0x21 && c1 <= 0x2c) || (c1 >= 0x30 && c1 <= 0x48) || (c1 >= 0x4a && c1 <= 0x7d)) {
-    if (n >= 2) {
-      unsigned char c2 = (s[1] & 0x7F);
-      if (c2 >= 0x21 && c2 < 0x7f) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        unsigned short wc = 0xfffd;
-        if (i < 1410) {
-          if (i < 1115)
-            wc = ksc5601_2uni_page21[i];
-        } else if (i < 3854) {
-          if (i < 3760)
-            wc = ksc5601_2uni_page30[i-1410];
-        } else {
-          if (i < 8742)
-            wc = ksc5601_2uni_page4a[i-3854];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-static const unsigned short ksc5601_2charset[8224] = {
-  0x222e, 0x2234, 0x2157, 0x2127, 0x2823, 0x2129, 0x2146, 0x213e,
-  0x2977, 0x2978, 0x2225, 0x2252, 0x2124, 0x222c, 0x2976, 0x282c,
-  0x2879, 0x2876, 0x287a, 0x222f, 0x2821, 0x2822, 0x213f, 0x282a,
-  0x282d, 0x292c, 0x2921, 0x2923, 0x2140, 0x292a, 0x292d, 0x2922,
-  0x2824, 0x2924, 0x2925, 0x2826, 0x2926, 0x2927, 0x2828, 0x2928,
-  0x2829, 0x2929, 0x2930, 0x282f, 0x292f, 0x282b, 0x292b, 0x282e,
-  0x292e, 0x2227, 0x2230, 0x2228, 0x222b, 0x222a, 0x222d, 0x2229,
-  0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548,
-  0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e, 0x254f, 0x2550,
-  0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558,
-  0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568,
-  0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e, 0x256f, 0x2570,
-  0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0x2577, 0x2578,
-  0x2c27, 0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c28,
-  0x2c29, 0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x2c2f, 0x2c30,
-  0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37, 0x2c38,
-  0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f, 0x2c40,
-  0x2c41, 0x2c51, 0x2c52, 0x2c53, 0x2c54, 0x2c55, 0x2c56, 0x2c58,
-  0x2c59, 0x2c5a, 0x2c5b, 0x2c5c, 0x2c5d, 0x2c5e, 0x2c5f, 0x2c60,
-  0x2c61, 0x2c62, 0x2c63, 0x2c64, 0x2c65, 0x2c66, 0x2c67, 0x2c68,
-  0x2c69, 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c6f, 0x2c70,
-  0x2c71, 0x2c57, 0x212a, 0x212e, 0x212f, 0x2130, 0x2131, 0x2253,
-  0x2254, 0x2125, 0x2126, 0x2236, 0x2147, 0x2148, 0x2158, 0x2979,
-  0x297a, 0x297b, 0x297c, 0x297d, 0x297e, 0x2149, 0x2235, 0x2724,
-  0x2260, 0x2265, 0x2262, 0x2759, 0x214a, 0x2877, 0x2878, 0x287b,
-  0x287c, 0x287d, 0x287e, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534,
-  0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x2521, 0x2522, 0x2523,
-  0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x2167,
-  0x2168, 0x2166, 0x2169, 0x216a, 0x2255, 0x2258, 0x2256, 0x2259,
-  0x2257, 0x2221, 0x2222, 0x2223, 0x2153, 0x2224, 0x2154, 0x2174,
-  0x2175, 0x2233, 0x2232, 0x216e, 0x2170, 0x2144, 0x2150, 0x212b,
-  0x217c, 0x217d, 0x217b, 0x217a, 0x2172, 0x2173, 0x2231, 0x2145,
-  0x2171, 0x212d, 0x216f, 0x2156, 0x2141, 0x2155, 0x2142, 0x2143,
-  0x216c, 0x216d, 0x2178, 0x2179, 0x2176, 0x2177, 0x2241, 0x2151,
-  0x2152, 0x2867, 0x2868, 0x2869, 0x286a, 0x286b, 0x286c, 0x286d,
-  0x286e, 0x286f, 0x2870, 0x2871, 0x2872, 0x2873, 0x2874, 0x2875,
-  0x2967, 0x2968, 0x2969, 0x296a, 0x296b, 0x296c, 0x296d, 0x296e,
-  0x296f, 0x2970, 0x2971, 0x2972, 0x2973, 0x2974, 0x2975, 0x294d,
-  0x294e, 0x294f, 0x2950, 0x2951, 0x2952, 0x2953, 0x2954, 0x2955,
-  0x2956, 0x2957, 0x2958, 0x2959, 0x295a, 0x295b, 0x295c, 0x295d,
-  0x295e, 0x295f, 0x2960, 0x2961, 0x2962, 0x2963, 0x2964, 0x2965,
-  0x2966, 0x284d, 0x284e, 0x284f, 0x2850, 0x2851, 0x2852, 0x2853,
-  0x2854, 0x2855, 0x2856, 0x2857, 0x2858, 0x2859, 0x285a, 0x285b,
-  0x285c, 0x285d, 0x285e, 0x285f, 0x2860, 0x2861, 0x2862, 0x2863,
-  0x2864, 0x2865, 0x2866, 0x2621, 0x262c, 0x2622, 0x262d, 0x2623,
-  0x2648, 0x2647, 0x262e, 0x2624, 0x2642, 0x2641, 0x262f, 0x2626,
-  0x2646, 0x2645, 0x2631, 0x2625, 0x2644, 0x2643, 0x2630, 0x2627,
-  0x263c, 0x2649, 0x264a, 0x2637, 0x264b, 0x264c, 0x2632, 0x2629,
-  0x263e, 0x264d, 0x264e, 0x2639, 0x264f, 0x2650, 0x2634, 0x2628,
-  0x2651, 0x2652, 0x2638, 0x263d, 0x2653, 0x2654, 0x2633, 0x262a,
-  0x2655, 0x2656, 0x263a, 0x263f, 0x2657, 0x2658, 0x2635, 0x262b,
-  0x2659, 0x265a, 0x263b, 0x265b, 0x265c, 0x2640, 0x265d, 0x265e,
-  0x265f, 0x2660, 0x2661, 0x2662, 0x2663, 0x2664, 0x2636, 0x2246,
-  0x2161, 0x2160, 0x2243, 0x2247, 0x2248, 0x224b, 0x224a, 0x2249,
-  0x224c, 0x2163, 0x2162, 0x223a, 0x2239, 0x2165, 0x2164, 0x2238,
-  0x2237, 0x215f, 0x215e, 0x2242, 0x215b, 0x215d, 0x215c, 0x2244,
-  0x2245, 0x215a, 0x2159, 0x224f, 0x224e, 0x2250, 0x2251, 0x214f,
-  0x214e, 0x223c, 0x223d, 0x2240, 0x223b, 0x223e, 0x223f, 0x224d,
-  0x225b, 0x225c, 0x225d, 0x225a, 0x2121, 0x2122, 0x2123, 0x2128,
-  0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, 0x213a, 0x213b,
-  0x213c, 0x213d, 0x216b, 0x2132, 0x2133, 0x2a21, 0x2a22, 0x2a23,
-  0x2a24, 0x2a25, 0x2a26, 0x2a27, 0x2a28, 0x2a29, 0x2a2a, 0x2a2b,
-  0x2a2c, 0x2a2d, 0x2a2e, 0x2a2f, 0x2a30, 0x2a31, 0x2a32, 0x2a33,
-  0x2a34, 0x2a35, 0x2a36, 0x2a37, 0x2a38, 0x2a39, 0x2a3a, 0x2a3b,
-  0x2a3c, 0x2a3d, 0x2a3e, 0x2a3f, 0x2a40, 0x2a41, 0x2a42, 0x2a43,
-  0x2a44, 0x2a45, 0x2a46, 0x2a47, 0x2a48, 0x2a49, 0x2a4a, 0x2a4b,
-  0x2a4c, 0x2a4d, 0x2a4e, 0x2a4f, 0x2a50, 0x2a51, 0x2a52, 0x2a53,
-  0x2a54, 0x2a55, 0x2a56, 0x2a57, 0x2a58, 0x2a59, 0x2a5a, 0x2a5b,
-  0x2a5c, 0x2a5d, 0x2a5e, 0x2a5f, 0x2a60, 0x2a61, 0x2a62, 0x2a63,
-  0x2a64, 0x2a65, 0x2a66, 0x2a67, 0x2a68, 0x2a69, 0x2a6a, 0x2a6b,
-  0x2a6c, 0x2a6d, 0x2a6e, 0x2a6f, 0x2a70, 0x2a71, 0x2a72, 0x2a73,
-  0x2b21, 0x2b22, 0x2b23, 0x2b24, 0x2b25, 0x2b26, 0x2b27, 0x2b28,
-  0x2b29, 0x2b2a, 0x2b2b, 0x2b2c, 0x2b2d, 0x2b2e, 0x2b2f, 0x2b30,
-  0x2b31, 0x2b32, 0x2b33, 0x2b34, 0x2b35, 0x2b36, 0x2b37, 0x2b38,
-  0x2b39, 0x2b3a, 0x2b3b, 0x2b3c, 0x2b3d, 0x2b3e, 0x2b3f, 0x2b40,
-  0x2b41, 0x2b42, 0x2b43, 0x2b44, 0x2b45, 0x2b46, 0x2b47, 0x2b48,
-  0x2b49, 0x2b4a, 0x2b4b, 0x2b4c, 0x2b4d, 0x2b4e, 0x2b4f, 0x2b50,
-  0x2b51, 0x2b52, 0x2b53, 0x2b54, 0x2b55, 0x2b56, 0x2b57, 0x2b58,
-  0x2b59, 0x2b5a, 0x2b5b, 0x2b5c, 0x2b5d, 0x2b5e, 0x2b5f, 0x2b60,
-  0x2b61, 0x2b62, 0x2b63, 0x2b64, 0x2b65, 0x2b66, 0x2b67, 0x2b68,
-  0x2b69, 0x2b6a, 0x2b6b, 0x2b6c, 0x2b6d, 0x2b6e, 0x2b6f, 0x2b70,
-  0x2b71, 0x2b72, 0x2b73, 0x2b74, 0x2b75, 0x2b76, 0x2421, 0x2422,
-  0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, 0x242a,
-  0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431, 0x2432,
-  0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439, 0x243a,
-  0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441, 0x2442,
-  0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, 0x244a,
-  0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451, 0x2452,
-  0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459, 0x245a,
-  0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461, 0x2462,
-  0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a,
-  0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471, 0x2472,
-  0x2473, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a,
-  0x247b, 0x247c, 0x247d, 0x247e, 0x2931, 0x2932, 0x2933, 0x2934,
-  0x2935, 0x2936, 0x2937, 0x2938, 0x2939, 0x293a, 0x293b, 0x293c,
-  0x293d, 0x293e, 0x293f, 0x2940, 0x2941, 0x2942, 0x2943, 0x2944,
-  0x2945, 0x2946, 0x2947, 0x2948, 0x2949, 0x294a, 0x294b, 0x294c,
-  0x225f, 0x2831, 0x2832, 0x2833, 0x2834, 0x2835, 0x2836, 0x2837,
-  0x2838, 0x2839, 0x283a, 0x283b, 0x283c, 0x283d, 0x283e, 0x283f,
-  0x2840, 0x2841, 0x2842, 0x2843, 0x2844, 0x2845, 0x2846, 0x2847,
-  0x2848, 0x2849, 0x284a, 0x284b, 0x284c, 0x225e, 0x2749, 0x274a,
-  0x274b, 0x274c, 0x274d, 0x273a, 0x273b, 0x275c, 0x275d, 0x275e,
-  0x2736, 0x2737, 0x2738, 0x2754, 0x2755, 0x2756, 0x2757, 0x2758,
-  0x2721, 0x2722, 0x2723, 0x2725, 0x272b, 0x272c, 0x272d, 0x272e,
-  0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2727, 0x2728,
-  0x2729, 0x272a, 0x273d, 0x273e, 0x2765, 0x2766, 0x2767, 0x2768,
-  0x2761, 0x2762, 0x2763, 0x273f, 0x2740, 0x2741, 0x2742, 0x2743,
-  0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x274e, 0x274f, 0x2750,
-  0x2751, 0x2752, 0x2753, 0x275a, 0x275b, 0x2263, 0x276c, 0x2726,
-  0x2760, 0x276f, 0x2261, 0x273c, 0x276d, 0x2735, 0x2739, 0x276a,
-  0x276b, 0x275f, 0x2264, 0x2764, 0x276e, 0x2769, 0x6c69, 0x6f4b,
-  0x7652, 0x5832, 0x6d5b, 0x5f32, 0x5f3e, 0x793b, 0x5c74, 0x7564,
-  0x7326, 0x5d60, 0x6126, 0x4e78, 0x5c30, 0x632a, 0x7169, 0x4d7a,
-  0x7c2f, 0x5321, 0x712b, 0x6751, 0x522c, 0x4e79, 0x717d, 0x5e3f,
-  0x7b3a, 0x7939, 0x4e52, 0x632b, 0x6b60, 0x4e7a, 0x4b77, 0x6525,
-  0x4a61, 0x544c, 0x6a61, 0x5c63, 0x5f2d, 0x4b6b, 0x552f, 0x5675,
-  0x6578, 0x5e40, 0x6c23, 0x694d, 0x6a27, 0x6976, 0x7b3b, 0x6769,
-  0x6f4c, 0x5066, 0x5e41, 0x642c, 0x584c, 0x7971, 0x4e5f, 0x7a24,
-  0x6632, 0x7a7b, 0x7a3d, 0x4c48, 0x6f4d, 0x5555, 0x5322, 0x6c51,
-  0x6427, 0x6c52, 0x7631, 0x4e7b, 0x5051, 0x4b3f, 0x6d24, 0x6d28,
-  0x5e42, 0x7662, 0x6d5c, 0x5c75, 0x6039, 0x544e, 0x7435, 0x535b,
-  0x5635, 0x6c24, 0x6466, 0x716a, 0x4b6c, 0x4b40, 0x6c72, 0x506a,
-  0x7972, 0x6c25, 0x505f, 0x676a, 0x506b, 0x5c51, 0x5b69, 0x7d4c,
-  0x5b57, 0x5a61, 0x5636, 0x635f, 0x5e43, 0x5e44, 0x4a21, 0x6e6c,
-  0x5323, 0x6e37, 0x784f, 0x6a48, 0x6e38, 0x712c, 0x7125, 0x694e,
-  0x793c, 0x6579, 0x6c6a, 0x5d56, 0x6d42, 0x7825, 0x653a, 0x5b58,
-  0x4a22, 0x514d, 0x6e6d, 0x6c6b, 0x5e45, 0x6360, 0x4a49, 0x7269,
-  0x554e, 0x7636, 0x4e42, 0x5647, 0x6334, 0x712d, 0x6a62, 0x5742,
-  0x7327, 0x4d6a, 0x6b6e, 0x5932, 0x7d25, 0x7655, 0x5562, 0x7835,
-  0x4c75, 0x7535, 0x642d, 0x676b, 0x7155, 0x703b, 0x6935, 0x4c49,
-  0x7a55, 0x6154, 0x5756, 0x5c41, 0x5e46, 0x7a6f, 0x6361, 0x6173,
-  0x5c76, 0x4e7c, 0x5b44, 0x7871, 0x5c64, 0x656f, 0x5c31, 0x5556,
-  0x735a, 0x4b41, 0x5b43, 0x597a, 0x536e, 0x7a38, 0x7d26, 0x6b6f,
-  0x7426, 0x4c4a, 0x7328, 0x735b, 0x5b27, 0x7637, 0x4f66, 0x7072,
-  0x4b5a, 0x6752, 0x5743, 0x7670, 0x685e, 0x6526, 0x6567, 0x4a23,
-  0x4c27, 0x6a49, 0x7836, 0x7a25, 0x712e, 0x6f4e, 0x4b6d, 0x7630,
-  0x6f4f, 0x694f, 0x775e, 0x4e53, 0x5c77, 0x5b28, 0x4b78, 0x5f21,
-  0x5d61, 0x754a, 0x6936, 0x676c, 0x6e6e, 0x7370, 0x5f3f, 0x4c4b,
-  0x5041, 0x7452, 0x603a, 0x5f40, 0x4e60, 0x5c52, 0x7d6a, 0x5676,
-  0x6a4a, 0x6869, 0x632c, 0x7350, 0x4a24, 0x5b78, 0x5e47, 0x6b70,
-  0x7156, 0x6562, 0x4c4c, 0x4b7b, 0x6a63, 0x5f41, 0x566d, 0x6950,
-  0x6e39, 0x5563, 0x5153, 0x6570, 0x6834, 0x6b43, 0x6a2a, 0x7a7c,
-  0x7576, 0x703c, 0x7d54, 0x603b, 0x4e43, 0x503a, 0x773a, 0x5873,
-  0x774d, 0x642e, 0x545f, 0x5067, 0x6c7d, 0x522e, 0x6e6f, 0x5557,
-  0x6a64, 0x7822, 0x4d6b, 0x573f, 0x7b31, 0x4d6c, 0x5c32, 0x506c,
-  0x4e7d, 0x6e70, 0x4c42, 0x506d, 0x6577, 0x737c, 0x6e22, 0x5933,
-  0x5874, 0x6937, 0x4e2e, 0x5922, 0x5871, 0x544f, 0x6527, 0x5552,
-  0x5629, 0x7422, 0x7157, 0x5558, 0x703d, 0x5750, 0x5450, 0x574f,
-  0x6b6a, 0x7d6b, 0x5b6d, 0x7c45, 0x4b42, 0x7d55, 0x7448, 0x686a,
-  0x7573, 0x795e, 0x536f, 0x6c53, 0x5d42, 0x6f37, 0x6754, 0x4a4a,
-  0x597b, 0x7a7d, 0x562a, 0x7478, 0x7777, 0x5c2c, 0x5757, 0x5f22,
-  0x4e3e, 0x5370, 0x7024, 0x616c, 0x4f67, 0x734b, 0x6d29, 0x4a3e,
-  0x746f, 0x764e, 0x5e7b, 0x503b, 0x5537, 0x6e71, 0x7428, 0x5c78,
-  0x4b27, 0x5a4e, 0x6066, 0x6d25, 0x6e72, 0x5c79, 0x795c, 0x735c,
-  0x7872, 0x7479, 0x7c71, 0x503c, 0x5b79, 0x5731, 0x4b7c, 0x7025,
-  0x4b7d, 0x5574, 0x4d6d, 0x4a25, 0x562b, 0x5042, 0x703e, 0x523d,
-  0x4c24, 0x7a36, 0x4c4d, 0x5a7a, 0x764f, 0x6938, 0x5875, 0x4c4e,
-  0x574d, 0x5451, 0x696d, 0x4a6b, 0x5962, 0x7d32, 0x632d, 0x564c,
-  0x5934, 0x6127, 0x6e53, 0x5043, 0x7d33, 0x5564, 0x4f68, 0x6d43,
-  0x5032, 0x4e7e, 0x5a28, 0x7850, 0x7d56, 0x7851, 0x7852, 0x5c53,
-  0x5d62, 0x7b79, 0x5d41, 0x6335, 0x6d5d, 0x4e44, 0x4b21, 0x5d63,
-  0x7c5d, 0x792f, 0x527b, 0x4f21, 0x6428, 0x7436, 0x6c7e, 0x632e,
-  0x676d, 0x7d41, 0x5a62, 0x5833, 0x5d64, 0x706f, 0x7671, 0x7a70,
-  0x5175, 0x5a4f, 0x5c54, 0x5c26, 0x6f3f, 0x4e4f, 0x6059, 0x5956,
-  0x6c54, 0x6a4b, 0x4a3f, 0x5530, 0x4f69, 0x716d, 0x4c4f, 0x6478,
-  0x646d, 0x5758, 0x7d27, 0x6a2b, 0x7632, 0x4f70, 0x793d, 0x6674,
-  0x4b5b, 0x7351, 0x6951, 0x7329, 0x5060, 0x6952, 0x5a63, 0x6252,
-  0x7622, 0x6174, 0x5a64, 0x6755, 0x753f, 0x4f22, 0x4d2f, 0x4f23,
-  0x4d30, 0x717e, 0x5023, 0x612f, 0x7823, 0x4a26, 0x773b, 0x726a,
-  0x5e48, 0x6953, 0x5e49, 0x7d5e, 0x4a40, 0x796a, 0x514e, 0x6e54,
-  0x5452, 0x5923, 0x7d28, 0x5759, 0x774e, 0x7a3e, 0x4f56, 0x5770,
-  0x6b61, 0x7845, 0x5c7a, 0x5d43, 0x795f, 0x676f, 0x7d65, 0x7623,
-  0x597c, 0x7d29, 0x676e, 0x5565, 0x6f50, 0x4d31, 0x7722, 0x7132,
-  0x7131, 0x4d32, 0x5a2b, 0x4a27, 0x6362, 0x7b3c, 0x5924, 0x6e3a,
-  0x7853, 0x7b7a, 0x4f24, 0x5c7b, 0x7663, 0x6d2a, 0x7221, 0x4e61,
-  0x7a26, 0x7960, 0x6c56, 0x646e, 0x7921, 0x7b6f, 0x796b, 0x6e23,
-  0x6a2c, 0x4a28, 0x747a, 0x4d56, 0x7c76, 0x7449, 0x7854, 0x7826,
-  0x5e4a, 0x7246, 0x575a, 0x5350, 0x5845, 0x6a66, 0x735d, 0x645a,
-  0x7664, 0x7672, 0x5f42, 0x597d, 0x4c76, 0x533a, 0x642f, 0x7961,
-  0x7026, 0x4b53, 0x603c, 0x744a, 0x547a, 0x7d2a, 0x7962, 0x7437,
-  0x7d42, 0x7c30, 0x7d6c, 0x4a62, 0x7d3d, 0x6a67, 0x5f43, 0x5152,
-  0x4e62, 0x5324, 0x7d2b, 0x5f60, 0x7247, 0x6770, 0x506e, 0x732a,
-  0x5e4b, 0x7638, 0x6175, 0x7133, 0x7723, 0x4a29, 0x4f25, 0x5f44,
-  0x6130, 0x703f, 0x7624, 0x6336, 0x7a46, 0x506f, 0x7d6d, 0x5d44,
-  0x7c77, 0x663f, 0x5e2d, 0x7a3f, 0x6571, 0x6d44, 0x5225, 0x7d6e,
-  0x7536, 0x6176, 0x5e4c, 0x7c5e, 0x6c57, 0x4d5d, 0x5637, 0x4d33,
-  0x7855, 0x6558, 0x4f6a, 0x4f50, 0x6a4c, 0x6a2e, 0x6a2d, 0x5371,
-  0x5325, 0x774f, 0x6e24, 0x5024, 0x7222, 0x5070, 0x7223, 0x7778,
-  0x5033, 0x5b29, 0x533b, 0x4a6c, 0x7126, 0x4b55, 0x7767, 0x4d5e,
-  0x7724, 0x7840, 0x535d, 0x4c50, 0x4f26, 0x7673, 0x6177, 0x535c,
-  0x7a7e, 0x7a27, 0x6b59, 0x4f27, 0x6a2f, 0x646f, 0x6939, 0x7158,
-  0x5858, 0x6072, 0x6634, 0x5c7c, 0x7371, 0x6350, 0x727b, 0x5b46,
-  0x5071, 0x5072, 0x4f5c, 0x5351, 0x4c31, 0x7758, 0x4b28, 0x6b3c,
-  0x643e, 0x745c, 0x5c42, 0x7027, 0x6640, 0x4a6d, 0x686b, 0x6568,
-  0x5c43, 0x6d5e, 0x5372, 0x4c77, 0x4e54, 0x672b, 0x4b43, 0x6131,
-  0x7732, 0x5373, 0x5352, 0x7540, 0x5f5d, 0x6e73, 0x6771, 0x7d34,
-  0x7248, 0x7352, 0x6e74, 0x6253, 0x4c51, 0x5f6a, 0x693a, 0x5957,
-  0x754d, 0x7172, 0x7a47, 0x5978, 0x5442, 0x7665, 0x5d45, 0x6772,
-  0x6d5f, 0x4a4b, 0x5b7a, 0x6835, 0x5326, 0x7d35, 0x7949, 0x6462,
-  0x7b3d, 0x5724, 0x4e45, 0x4e55, 0x5666, 0x653d, 0x5e4d, 0x6c73,
-  0x6d60, 0x6c6c, 0x7b3e, 0x5f6b, 0x6178, 0x793e, 0x5073, 0x602a,
-  0x6862, 0x6254, 0x527d, 0x6528, 0x5953, 0x535e, 0x7438, 0x773c,
-  0x5c7d, 0x686c, 0x6467, 0x6377, 0x6c28, 0x7a71, 0x6572, 0x5074,
-  0x522f, 0x5c65, 0x5025, 0x7134, 0x7c31, 0x4c78, 0x5d46, 0x7a51,
-  0x775f, 0x7a28, 0x6e75, 0x5e4e, 0x6773, 0x772c, 0x6b44, 0x6d61,
-  0x602b, 0x5d47, 0x5233, 0x523f, 0x4a4c, 0x7b3f, 0x657d, 0x5d65,
-  0x584d, 0x6c74, 0x5075, 0x686d, 0x5052, 0x5958, 0x7666, 0x5b2a,
-  0x7760, 0x5859, 0x7423, 0x745d, 0x6f51, 0x5935, 0x6d2b, 0x6337,
-  0x6e3b, 0x4d34, 0x6073, 0x6a4d, 0x6c75, 0x686e, 0x4b29, 0x712f,
-  0x4a4d, 0x6c29, 0x726b, 0x7d6f, 0x7973, 0x6641, 0x6c58, 0x6d2c,
-  0x6a4e, 0x685f, 0x5e4f, 0x5226, 0x6774, 0x5156, 0x6642, 0x6363,
-  0x6430, 0x5834, 0x7625, 0x735e, 0x5725, 0x7768, 0x6846, 0x7b66,
-  0x5d66, 0x5c7e, 0x585a, 0x5a2c, 0x6a30, 0x6338, 0x4a2a, 0x6179,
-  0x6a31, 0x726c, 0x7a6e, 0x6e55, 0x7974, 0x526c, 0x7b7b, 0x7d70,
-  0x603d, 0x4e63, 0x7846, 0x5e2e, 0x5f45, 0x653e, 0x6d2d, 0x7a6a,
-  0x4d6e, 0x6d26, 0x6d2e, 0x706d, 0x5d21, 0x6d2f, 0x7c78, 0x586b,
-  0x4c79, 0x4d35, 0x7a29, 0x615d, 0x6255, 0x6d4f, 0x5d22, 0x794a,
-  0x6a68, 0x656d, 0x536b, 0x6954, 0x617a, 0x644c, 0x6164, 0x6847,
-  0x4e5b, 0x5c55, 0x7735, 0x7c73, 0x7073, 0x4e2f, 0x7135, 0x6f52,
-  0x6848, 0x6b71, 0x4b54, 0x603e, 0x6378, 0x6a69, 0x7c32, 0x6074,
-  0x4f60, 0x6e25, 0x7a2a, 0x6643, 0x6132, 0x4a2b, 0x6364, 0x693b,
-  0x6256, 0x7372, 0x6e56, 0x6a32, 0x5076, 0x6c59, 0x5a4b, 0x4f28,
-  0x5d23, 0x585b, 0x794e, 0x6955, 0x6351, 0x523c, 0x582c, 0x734c,
-  0x4d7b, 0x7656, 0x6775, 0x686f, 0x6379, 0x523b, 0x7373, 0x637b,
-  0x5e50, 0x4e30, 0x5677, 0x7159, 0x7541, 0x5c44, 0x753b, 0x5e51,
-  0x5c66, 0x5e52, 0x6d62, 0x6e76, 0x6a4f, 0x706e, 0x637c, 0x535f,
-  0x5374, 0x6133, 0x6134, 0x7453, 0x5f46, 0x6956, 0x5b2b, 0x7626,
-  0x6339, 0x6b45, 0x7429, 0x4d36, 0x5279, 0x5a2d, 0x5263, 0x4f51,
-  0x4b5c, 0x4c7a, 0x4f5d, 0x6829, 0x633b, 0x633a, 0x605a, 0x6e77,
-  0x5c33, 0x5375, 0x5726, 0x7635, 0x575b, 0x6155, 0x546a, 0x5f23,
-  0x7d5f, 0x5077, 0x6d54, 0x4b2a, 0x645b, 0x617b, 0x4b22, 0x5360,
-  0x643f, 0x7b40, 0x5a3e, 0x644d, 0x5639, 0x6f40, 0x617c, 0x7639,
-  0x5f47, 0x6431, 0x5c67, 0x5c68, 0x7a56, 0x5376, 0x715a, 0x7a72,
-  0x627d, 0x554f, 0x5078, 0x4d5f, 0x754b, 0x6470, 0x4b2b, 0x5744,
-  0x627e, 0x5d5a, 0x5a2e, 0x4a6e, 0x5539, 0x6321, 0x6863, 0x732b,
-  0x4f29, 0x5377, 0x5471, 0x4e64, 0x6872, 0x6575, 0x672e, 0x563a,
-  0x5f6c, 0x6440, 0x6864, 0x5835, 0x645c, 0x7439, 0x7136, 0x625e,
-  0x6135, 0x4d6f, 0x7127, 0x4e65, 0x4b5d, 0x5963, 0x732c, 0x5079,
-  0x6c2b, 0x5e53, 0x7769, 0x7975, 0x615e, 0x4b6e, 0x633c, 0x7856,
-  0x5b6e, 0x7d71, 0x7736, 0x745e, 0x726d, 0x5b59, 0x7028, 0x617d,
-  0x5e54, 0x602c, 0x6d63, 0x5361, 0x5f48, 0x5936, 0x7d2c, 0x6f53,
-  0x6441, 0x786b, 0x5b2c, 0x7c46, 0x582d, 0x763a, 0x5b5f, 0x5353,
-  0x7847, 0x4a4e, 0x7841, 0x5234, 0x5c34, 0x7a39, 0x4a4f, 0x7c33,
-  0x6a6a, 0x6a6b, 0x507a, 0x6d64, 0x5d67, 0x5f49, 0x5f6d, 0x6e3c,
-  0x6f41, 0x4c52, 0x5d24, 0x5f4a, 0x5378, 0x7128, 0x4d37, 0x6f54,
-  0x645d, 0x5f6e, 0x4b2c, 0x693c, 0x6a6c, 0x5f4b, 0x793f, 0x562f,
-  0x5546, 0x4f2a, 0x4e29, 0x5678, 0x7137, 0x6e78, 0x5959, 0x735f,
-  0x7848, 0x4e46, 0x5566, 0x7466, 0x6645, 0x6f55, 0x4b6f, 0x7c5f,
-  0x5c27, 0x5667, 0x7849, 0x6352, 0x633d, 0x4f61, 0x7040, 0x6c5a,
-  0x5d57, 0x7b70, 0x6c2c, 0x7029, 0x7a57, 0x7b41, 0x5240, 0x6530,
-  0x6d65, 0x4b2d, 0x7930, 0x7725, 0x4b2e, 0x5a2f, 0x5836, 0x5327,
-  0x7b32, 0x7d44, 0x6c2d, 0x7b21, 0x6569, 0x696e, 0x7374, 0x7873,
-  0x7041, 0x5e2f, 0x7830, 0x7360, 0x672f, 0x5b2d, 0x6635, 0x7928,
-  0x5d58, 0x6859, 0x6f56, 0x5362, 0x625f, 0x7c60, 0x5748, 0x7d2d,
-  0x5f6f, 0x4c53, 0x5379, 0x5470, 0x5b47, 0x5e55, 0x7074, 0x5550,
-  0x6559, 0x7c47, 0x5c56, 0x6260, 0x5a30, 0x7323, 0x536c, 0x744b,
-  0x7d45, 0x637d, 0x7931, 0x507b, 0x6c5b, 0x753c, 0x7224, 0x584e,
-  0x584f, 0x7577, 0x7661, 0x5237, 0x7b6c, 0x5d48, 0x6468, 0x5241,
-  0x7857, 0x563b, 0x5e56, 0x773d, 0x6c2e, 0x5061, 0x6075, 0x6a33,
-  0x4e56, 0x4c25, 0x6c76, 0x6261, 0x633e, 0x7c48, 0x4d70, 0x7976,
-  0x5f70, 0x653f, 0x4e3f, 0x7c61, 0x6d30, 0x7d51, 0x763b, 0x794f,
-  0x6b5a, 0x4a41, 0x5238, 0x4d71, 0x6353, 0x7d66, 0x666d, 0x637a,
-  0x702a, 0x7950, 0x7c62, 0x7827, 0x6165, 0x6e79, 0x6776, 0x6a6d,
-  0x7c34, 0x7542, 0x575c, 0x7075, 0x5d68, 0x536d, 0x757c, 0x5a3f,
-  0x4c7b, 0x537a, 0x7424, 0x6f57, 0x5443, 0x7b63, 0x7b6d, 0x602d,
-  0x6a6e, 0x7b33, 0x6442, 0x7667, 0x525d, 0x5f4c, 0x7c49, 0x6529,
-  0x6076, 0x7633, 0x617e, 0x4b70, 0x6a6f, 0x6a70, 0x5a40, 0x7834,
-  0x6b72, 0x6443, 0x6957, 0x6471, 0x4a6f, 0x4e57, 0x7c4a, 0x7361,
-  0x4b44, 0x6365, 0x4b45, 0x6a34, 0x693d, 0x5749, 0x6b5b, 0x6d31,
-  0x4c43, 0x773e, 0x7c4b, 0x7874, 0x5937, 0x7353, 0x7354, 0x7764,
-  0x7751, 0x5837, 0x4e31, 0x4a42, 0x7b34, 0x4b46, 0x7076, 0x5567,
-  0x6a50, 0x4c54, 0x4b2f, 0x742a, 0x692f, 0x7543, 0x6958, 0x5d69,
-  0x7173, 0x557b, 0x5e3b, 0x747b, 0x7d73, 0x7d72, 0x7726, 0x5d49,
-  0x5453, 0x4c28, 0x5a41, 0x4c55, 0x5964, 0x7a4a, 0x6563, 0x533c,
-  0x4a70, 0x5044, 0x4a50, 0x7a2b, 0x6b6b, 0x6778, 0x5965, 0x5157,
-  0x7324, 0x547b, 0x7c63, 0x7a58, 0x7355, 0x4f2b, 0x6b73, 0x557c,
-  0x5354, 0x4d7c, 0x5966, 0x6279, 0x6221, 0x6b54, 0x6077, 0x6432,
-  0x4c7c, 0x7b64, 0x742b, 0x503d, 0x4a71, 0x6f38, 0x5740, 0x6e7a,
-  0x7d74, 0x5363, 0x7b42, 0x5568, 0x5b2e, 0x6136, 0x7837, 0x603f,
-  0x7b43, 0x5d6a, 0x6222, 0x6e26, 0x7668, 0x7675, 0x5d4a, 0x5062,
-  0x5d26, 0x5d6b, 0x6479, 0x632f, 0x507c, 0x747c, 0x4c3c, 0x776a,
-  0x6564, 0x5f71, 0x7761, 0x7977, 0x6f39, 0x7858, 0x7929, 0x7859,
-  0x6e3d, 0x5846, 0x6463, 0x754e, 0x5d59, 0x5967, 0x5239, 0x5543,
-  0x5a65, 0x5a50, 0x5159, 0x4e58, 0x4b5e, 0x742c, 0x5a7b, 0x7669,
-  0x6873, 0x4f2c, 0x7070, 0x747d, 0x5b48, 0x4e40, 0x6354, 0x514f,
-  0x7175, 0x4d72, 0x4f6b, 0x4d38, 0x6326, 0x515a, 0x7225, 0x7226,
-  0x644e, 0x537b, 0x7129, 0x7249, 0x6f58, 0x6649, 0x5838, 0x7a73,
-  0x7335, 0x7824, 0x5173, 0x6648, 0x785a, 0x5c69, 0x5e57, 0x4b5f,
-  0x4f6c, 0x745f, 0x5174, 0x523a, 0x5f72, 0x6137, 0x6223, 0x537c,
-  0x6d66, 0x5b49, 0x647a, 0x4f5e, 0x4e50, 0x5553, 0x7375, 0x772e,
-  0x6f48, 0x4d73, 0x754f, 0x6573, 0x7042, 0x4a51, 0x6a71, 0x5026,
-  0x595a, 0x702b, 0x6b67, 0x6540, 0x7c35, 0x6444, 0x4c29, 0x7d46,
-  0x6a35, 0x652a, 0x5f3a, 0x615f, 0x5a51, 0x6138, 0x6874, 0x537d,
-  0x6224, 0x724a, 0x5a66, 0x7733, 0x7d4d, 0x7336, 0x6e57, 0x7544,
-  0x5824, 0x7227, 0x5938, 0x5939, 0x6f49, 0x564e, 0x774b, 0x5f2e,
-  0x6875, 0x5235, 0x5355, 0x744c, 0x5a7c, 0x5968, 0x776b, 0x7549,
-  0x733c, 0x5a52, 0x5335, 0x6836, 0x564f, 0x743a, 0x7749, 0x4c2a,
-  0x7043, 0x4c56, 0x5053, 0x533d, 0x5b7b, 0x4b60, 0x5364, 0x7677,
-  0x553a, 0x734d, 0x4b61, 0x6b74, 0x742d, 0x7c2a, 0x776c, 0x6876,
-  0x5a67, 0x774c, 0x6541, 0x606e, 0x557d, 0x4e66, 0x7c2b, 0x553b,
-  0x7228, 0x6225, 0x4d39, 0x6a72, 0x4b47, 0x4d74, 0x5b2f, 0x6f59,
-  0x4d3a, 0x7c79, 0x5f73, 0x4e67, 0x5a42, 0x4f2d, 0x6779, 0x7828,
-  0x7362, 0x4a72, 0x5f24, 0x5444, 0x4c57, 0x6542, 0x4d3b, 0x6f5a,
-  0x6e58, 0x5d27, 0x6226, 0x6040, 0x5630, 0x784a, 0x7c7a, 0x597e,
-  0x5e30, 0x5d6c, 0x5a68, 0x5460, 0x5679, 0x4d57, 0x5e58, 0x7278,
-  0x6456, 0x5045, 0x742e, 0x5d28, 0x6d45, 0x7356, 0x5e59, 0x6366,
-  0x5328, 0x5b30, 0x655a, 0x633f, 0x5b31, 0x5569, 0x6041, 0x6f5b,
-  0x7069, 0x5732, 0x507d, 0x5969, 0x507e, 0x6c6d, 0x5329, 0x7229,
-  0x7044, 0x6262, 0x696f, 0x7951, 0x6959, 0x685a, 0x5a43, 0x5a44,
-  0x5445, 0x677a, 0x4d60, 0x6330, 0x5b32, 0x7b44, 0x7363, 0x5925,
-  0x7b67, 0x5d4b, 0x5054, 0x6636, 0x602e, 0x7d5a, 0x5c35, 0x6078,
-  0x6731, 0x7570, 0x585c, 0x6d46, 0x6139, 0x6340, 0x7940, 0x6970,
-  0x595b, 0x7364, 0x5c36, 0x6469, 0x7045, 0x6341, 0x7c4c, 0x7c4d,
-  0x724b, 0x724c, 0x644f, 0x715b, 0x7a59, 0x7138, 0x7d75, 0x6079,
-  0x677b, 0x7c37, 0x7c64, 0x7b45, 0x6367, 0x5839, 0x7678, 0x5c45,
-  0x4c58, 0x602f, 0x7467, 0x6f5c, 0x4f7c, 0x6f5d, 0x722a, 0x7d3e,
-  0x4a2c, 0x7d3b, 0x7d47, 0x6732, 0x6a51, 0x5f74, 0x516c, 0x645e,
-  0x6543, 0x5926, 0x4d3c, 0x7365, 0x6d55, 0x593a, 0x6d67, 0x7b35,
-  0x786c, 0x6067, 0x4c59, 0x5446, 0x6725, 0x5575, 0x533e, 0x7c7b,
-  0x6472, 0x5f75, 0x6878, 0x786d, 0x4e47, 0x7d76, 0x6858, 0x4d58,
-  0x6756, 0x4c5a, 0x4a63, 0x5f76, 0x7047, 0x7046, 0x583a, 0x7174,
-  0x7470, 0x754c, 0x7c65, 0x6a45, 0x6a73, 0x5d5b, 0x5c57, 0x5e7d,
-  0x7279, 0x5547, 0x5850, 0x7048, 0x5121, 0x5122, 0x5954, 0x5668,
-  0x594a, 0x5a31, 0x5847, 0x5c62, 0x734e, 0x7574, 0x7139, 0x5a53,
-  0x766a, 0x4f75, 0x7d2e, 0x4a52, 0x5f34, 0x575d, 0x7a3a, 0x6e27,
-  0x753d, 0x7875, 0x6d68, 0x5461, 0x5123, 0x6156, 0x7978, 0x5b4a,
-  0x4b79, 0x5454, 0x595c, 0x6e3e, 0x776d, 0x526e, 0x6166, 0x7779,
-  0x5d6d, 0x685b, 0x5b33, 0x5177, 0x6030, 0x5462, 0x7657, 0x5779,
-  0x585d, 0x4d7d, 0x722b, 0x4d3d, 0x7842, 0x722c, 0x4a2d, 0x4a2e,
-  0x4f2e, 0x6342, 0x5c37, 0x5b5a, 0x593b, 0x4a73, 0x7653, 0x6678,
-  0x6a75, 0x6a76, 0x7679, 0x4f2f, 0x4a53, 0x4a2f, 0x5230, 0x713a,
-  0x5733, 0x6343, 0x737d, 0x5e5a, 0x5e5b, 0x6f5e, 0x6263, 0x6e7b,
-  0x5f77, 0x574a, 0x4e68, 0x5b5b, 0x713b, 0x6971, 0x7a37, 0x5046,
-  0x4c2b, 0x6e28, 0x4b7a, 0x7979, 0x4c7d, 0x537e, 0x6450, 0x726e,
-  0x5455, 0x5f4d, 0x7c38, 0x5150, 0x724d, 0x7752, 0x4a54, 0x5559,
-  0x585e, 0x4d59, 0x6e29, 0x763c, 0x4c5b, 0x7049, 0x7c7c, 0x6849,
-  0x747e, 0x677c, 0x575e, 0x5e5c, 0x702c, 0x4c7e, 0x4d61, 0x613a,
-  0x5b6f, 0x5a32, 0x5125, 0x5c38, 0x5876, 0x5124, 0x4d62, 0x5c6a,
-  0x7077, 0x704a, 0x503e, 0x5d5c, 0x5456, 0x5356, 0x6d50, 0x4d21,
-  0x5f35, 0x5f78, 0x5421, 0x4e32, 0x684a, 0x6b75, 0x6355, 0x7550,
-  0x7521, 0x5927, 0x652b, 0x664b, 0x7571, 0x6545, 0x7923, 0x605b,
-  0x766b, 0x4b71, 0x596a, 0x7522, 0x5751, 0x5178, 0x6a78, 0x6a79,
-  0x5a33, 0x6f5f, 0x716f, 0x6576, 0x6e3f, 0x6264, 0x503f, 0x7a2c,
-  0x7551, 0x6733, 0x693e, 0x724e, 0x5b34, 0x7c4e, 0x5d6e, 0x6734,
-  0x5734, 0x7734, 0x4d3e, 0x5a69, 0x4f30, 0x7759, 0x7366, 0x4e59,
-  0x4e2a, 0x4b48, 0x5027, 0x704b, 0x5047, 0x6445, 0x5b60, 0x555a,
-  0x5727, 0x6e40, 0x7876, 0x7552, 0x6d69, 0x593c, 0x6546, 0x7523,
-  0x5a54, 0x6227, 0x7b7c, 0x715c, 0x4a74, 0x687a, 0x4e69, 0x6978,
-  0x6265, 0x5039, 0x5472, 0x5126, 0x5f4e, 0x7c74, 0x532a, 0x4c2c,
-  0x6f60, 0x6565, 0x5055, 0x5b7c, 0x7c66, 0x4b7e, 0x6d6a, 0x5e31,
-  0x7963, 0x5422, 0x4f76, 0x5650, 0x556a, 0x716e, 0x7a4b, 0x6521,
-  0x5531, 0x4f6d, 0x6d6b, 0x5532, 0x553c, 0x7d62, 0x732d, 0x7d5b,
-  0x6930, 0x5127, 0x7d63, 0x4e33, 0x7d64, 0x7a4e, 0x4a30, 0x7727,
-  0x4f31, 0x6622, 0x7c36, 0x722d, 0x6f61, 0x732e, 0x5c46, 0x596b,
-  0x6860, 0x6128, 0x5576, 0x4f7d, 0x5e5d, 0x5951, 0x646a, 0x724f,
-  0x773f, 0x6266, 0x6228, 0x6356, 0x6d51, 0x6979, 0x5631, 0x5e32,
-  0x6068, 0x532b, 0x6b5c, 0x5f2f, 0x4a43, 0x6e7c, 0x7d43, 0x6b76,
-  0x4f32, 0x596c, 0x593d, 0x585f, 0x5438, 0x6b3e, 0x5d6f, 0x5d70,
-  0x5d71, 0x5d72, 0x593e, 0x7b46, 0x4f33, 0x6e7d, 0x642b, 0x5a45,
-  0x586c, 0x5128, 0x6229, 0x5e3c, 0x6735, 0x5b70, 0x6f62, 0x7170,
-  0x4f34, 0x5b71, 0x6031, 0x5f25, 0x7952, 0x677d, 0x6623, 0x7b71,
-  0x4b30, 0x722e, 0x4d67, 0x685c, 0x6757, 0x7740, 0x5063, 0x5a21,
-  0x4c3d, 0x5129, 0x5d4c, 0x637e, 0x512a, 0x682a, 0x6a36, 0x797a,
-  0x664c, 0x7658, 0x5447, 0x594b, 0x5952, 0x534b, 0x5877, 0x5a29,
-  0x7578, 0x5e5e, 0x722f, 0x7829, 0x5848, 0x6e41, 0x7941, 0x5d73,
-  0x6a7a, 0x763d, 0x613b, 0x4d3f, 0x7454, 0x664d, 0x7c4f, 0x7b22,
-  0x605c, 0x743b, 0x5a55, 0x7932, 0x7b72, 0x5b76, 0x5e5f, 0x5b72,
-  0x785c, 0x776e, 0x6b68, 0x527a, 0x713c, 0x7a5a, 0x5a6a, 0x5a46,
-  0x7741, 0x6736, 0x6547, 0x562c, 0x5c47, 0x6129, 0x622a, 0x5526,
-  0x5457, 0x7250, 0x6a7b, 0x605d, 0x7b73, 0x713d, 0x6267, 0x7d57,
-  0x4e48, 0x6a37, 0x7c40, 0x7d67, 0x776f, 0x5735, 0x6f3a, 0x715d,
-  0x5e33, 0x684b, 0x785d, 0x7b47, 0x5548, 0x575f, 0x5d29, 0x6931,
-  0x7a2d, 0x7659, 0x7a74, 0x782a, 0x666e, 0x4c5c, 0x613c, 0x606f,
-  0x693f, 0x7c7d, 0x664e, 0x6157, 0x664f, 0x7471, 0x6473, 0x647b,
-  0x7964, 0x6f63, 0x4f6e, 0x763e, 0x6032, 0x7c7e, 0x512b, 0x577a,
-  0x7b48, 0x6257, 0x5423, 0x7078, 0x5728, 0x6167, 0x533f, 0x6f64,
-  0x5745, 0x6b62, 0x7c67, 0x6422, 0x6268, 0x6650, 0x7b68, 0x7468,
-  0x6574, 0x743c, 0x7455, 0x5f36, 0x7c39, 0x6e42, 0x4a75, 0x6f65,
-  0x4b62, 0x5424, 0x5e60, 0x5a7d, 0x6446, 0x683e, 0x605e, 0x7634,
-  0x6a52, 0x797b, 0x6042, 0x4a64, 0x6737, 0x6a7d, 0x595d, 0x5a34,
-  0x6e2a, 0x7b69, 0x5b4b, 0x5a35, 0x713e, 0x532c, 0x7b49, 0x5f4f,
-  0x5340, 0x6357, 0x6f66, 0x7c50, 0x6940, 0x7553, 0x6c5c, 0x7737,
-  0x6a38, 0x5179, 0x5c48, 0x6a39, 0x715e, 0x5736, 0x4f35, 0x5928,
-  0x6c6e, 0x5d2a, 0x4d22, 0x682e, 0x613d, 0x7251, 0x6941, 0x527c,
-  0x5b35, 0x7367, 0x587e, 0x7c51, 0x6d32, 0x742f, 0x7b23, 0x7c41,
-  0x6e2b, 0x5425, 0x7472, 0x6e59, 0x7b4a, 0x4d63, 0x583b, 0x655b,
-  0x7877, 0x7654, 0x5729, 0x4b49, 0x6651, 0x704c, 0x582e, 0x7953,
-  0x557e, 0x583c, 0x7230, 0x622b, 0x7368, 0x6f42, 0x6d6c, 0x6738,
-  0x5a7e, 0x4c3e, 0x727c, 0x5a6b, 0x6258, 0x6d56, 0x5651, 0x6033,
-  0x7c52, 0x6b48, 0x5341, 0x704d, 0x4f77, 0x6d52, 0x5458, 0x5c49,
-  0x5771, 0x5f3b, 0x7325, 0x744d, 0x713f, 0x7831, 0x697a, 0x7b4b,
-  0x4a55, 0x7954, 0x774a, 0x5648, 0x7c68, 0x733d, 0x6e7e, 0x677e,
-  0x5342, 0x5336, 0x4c2d, 0x767a, 0x5632, 0x5258, 0x6758, 0x6325,
-  0x6739, 0x702d, 0x7b4c, 0x6b21, 0x5426, 0x7b4d, 0x553d, 0x715f,
-  0x767b, 0x5e34, 0x556b, 0x6548, 0x7b24, 0x5439, 0x5e61, 0x6423,
-  0x5737, 0x786e, 0x5e35, 0x5652, 0x7955, 0x673a, 0x6b55, 0x5577,
-  0x6f67, 0x613e, 0x7a2e, 0x5669, 0x566e, 0x673b, 0x6c4b, 0x5533,
-  0x4e34, 0x7b25, 0x616e, 0x7728, 0x7b4e, 0x583d, 0x7b7d, 0x7c69,
-  0x4f36, 0x6d47, 0x6e2c, 0x4c5d, 0x7627, 0x667a, 0x7524, 0x7d5c,
-  0x6d33, 0x4e49, 0x6f68, 0x613f, 0x7a5b, 0x4b63, 0x7729, 0x7b26,
-  0x5c39, 0x7140, 0x6d48, 0x6f43, 0x562d, 0x7d4e, 0x6821, 0x7b74,
-  0x5527, 0x7176, 0x6653, 0x4c5e, 0x7832, 0x5c6b, 0x7d36, 0x656a,
-  0x7160, 0x5b4c, 0x5d4d, 0x5448, 0x596d, 0x7525, 0x667b, 0x6654,
-  0x7d48, 0x5621, 0x7d3f, 0x7c53, 0x6f21, 0x673c, 0x516e, 0x6655,
-  0x6972, 0x5f30, 0x5860, 0x7c3a, 0x7d2f, 0x704e, 0x5b61, 0x6549,
-  0x6d34, 0x6043, 0x6358, 0x697b, 0x6a28, 0x7d37, 0x7b27, 0x6942,
-  0x7d77, 0x6259, 0x5c6c, 0x6822, 0x6670, 0x7d78, 0x7d79, 0x763f,
-  0x6727, 0x6657, 0x5473, 0x5449, 0x567a, 0x5772, 0x6140, 0x5b62,
-  0x6658, 0x673d, 0x704f, 0x733e, 0x622c, 0x7537, 0x6070, 0x7d38,
-  0x6368, 0x5427, 0x687c, 0x7a52, 0x786f, 0x5653, 0x5534, 0x7050,
-  0x7770, 0x6e33, 0x6a3a, 0x6a53, 0x6d49, 0x5d2b, 0x652c, 0x7d21,
-  0x5f50, 0x6c33, 0x5f51, 0x6d6d, 0x7838, 0x777a, 0x782b, 0x7460,
-  0x543a, 0x6433, 0x695a, 0x5e36, 0x593f, 0x5940, 0x566f, 0x594c,
-  0x5a2a, 0x5f65, 0x7765, 0x4c32, 0x5f79, 0x5760, 0x543b, 0x7d7a,
-  0x4c33, 0x5b73, 0x5f52, 0x4e4a, 0x6e5a, 0x6464, 0x7b4f, 0x4f37,
-  0x6e43, 0x4e6a, 0x622d, 0x5761, 0x7a75, 0x5549, 0x782c, 0x6759,
-  0x7369, 0x586d, 0x6344, 0x7071, 0x6865, 0x607a, 0x6e44, 0x595e,
-  0x6b22, 0x6b23, 0x7c42, 0x6a3b, 0x682b, 0x5e62, 0x6d6f, 0x6823,
-  0x4f71, 0x543c, 0x7c6a, 0x673e, 0x7c72, 0x5634, 0x622e, 0x5337,
-  0x7a4c, 0x7a5c, 0x6d35, 0x6163, 0x682c, 0x685d, 0x6f69, 0x743d,
-  0x4f38, 0x695b, 0x512c, 0x5a47, 0x6b49, 0x684c, 0x5e37, 0x563c,
-  0x5365, 0x7a5d, 0x5a56, 0x4a31, 0x5a48, 0x5f26, 0x7933, 0x7252,
-  0x4a44, 0x4e4b, 0x4d75, 0x7d30, 0x5528, 0x7141, 0x6269, 0x5c4a,
-  0x6c34, 0x7a40, 0x7b28, 0x5028, 0x5a6c, 0x596e, 0x607b, 0x6f6a,
-  0x7a5e, 0x6044, 0x4f39, 0x554a, 0x5762, 0x622f, 0x5738, 0x684d,
-  0x765a, 0x6f22, 0x625a, 0x767c, 0x7b50, 0x512d, 0x4d64, 0x512e,
-  0x5c6d, 0x684e, 0x7079, 0x4e35, 0x667c, 0x577b, 0x5056, 0x5d75,
-  0x7771, 0x767d, 0x5b77, 0x7b6a, 0x695c, 0x5941, 0x7572, 0x6045,
-  0x6a54, 0x7942, 0x6a3c, 0x5245, 0x7b51, 0x6740, 0x6b25, 0x5f7a,
-  0x6322, 0x5739, 0x6943, 0x687d, 0x682f, 0x7253, 0x7b29, 0x5825,
-  0x554b, 0x5048, 0x512f, 0x5763, 0x6046, 0x5622, 0x6d70, 0x5773,
-  0x7c54, 0x5a57, 0x4c5f, 0x7254, 0x5130, 0x4c60, 0x5b7d, 0x733f,
-  0x7051, 0x7c3b, 0x6230, 0x6625, 0x625b, 0x5f5e, 0x6047, 0x726f,
-  0x4c61, 0x566a, 0x6742, 0x4e36, 0x7340, 0x4d7e, 0x7b52, 0x7878,
-  0x777b, 0x683f, 0x6837, 0x6d36, 0x5c3a, 0x4c34, 0x7177, 0x6838,
-  0x4a76, 0x6424, 0x7456, 0x5f66, 0x5f27, 0x5f67, 0x6141, 0x6944,
-  0x5c4b, 0x6945, 0x6f23, 0x6b26, 0x4b23, 0x6369, 0x517b, 0x6f24,
-  0x6f6b, 0x5034, 0x4d23, 0x6866, 0x6f25, 0x534c, 0x5a6d, 0x573a,
-  0x7255, 0x7565, 0x596f, 0x7934, 0x5554, 0x7d4f, 0x5b63, 0x7161,
-  0x6c36, 0x7b7e, 0x5357, 0x5131, 0x4b31, 0x5132, 0x4b32, 0x7142,
-  0x7461, 0x7935, 0x6143, 0x6142, 0x6b77, 0x5f28, 0x4b4a, 0x6639,
-  0x785e, 0x792a, 0x4a77, 0x6d37, 0x5338, 0x7256, 0x5459, 0x6e45,
-  0x7270, 0x4a32, 0x5c3b, 0x7178, 0x6c37, 0x654a, 0x7640, 0x7d5d,
-  0x5463, 0x4c62, 0x7754, 0x5765, 0x5343, 0x5826, 0x7641, 0x5d76,
-  0x4d40, 0x655c, 0x654b, 0x6144, 0x6830, 0x7430, 0x736a, 0x5a6e,
-  0x573b, 0x6231, 0x572a, 0x567b, 0x645f, 0x4a56, 0x6b28, 0x5b7e,
-  0x7642, 0x6f3b, 0x547d, 0x6048, 0x6839, 0x6f26, 0x4d24, 0x5474,
-  0x5b21, 0x5b5c, 0x5b5d, 0x6e5c, 0x4b4b, 0x7c55, 0x4e6b, 0x4d41,
-  0x7b53, 0x792b, 0x7554, 0x5929, 0x695d, 0x5b4d, 0x5d4e, 0x6743,
-  0x6c4c, 0x796c, 0x4b4c, 0x607c, 0x5428, 0x6d53, 0x586f, 0x7257,
-  0x4a78, 0x5a6f, 0x5654, 0x594d, 0x586e, 0x7241, 0x5f53, 0x5a70,
-  0x626a, 0x607d, 0x5878, 0x772f, 0x5a36, 0x4a57, 0x7258, 0x5879,
-  0x7a5f, 0x4f6f, 0x5942, 0x7052, 0x6451, 0x7337, 0x7a60, 0x6f6c,
-  0x6232, 0x543d, 0x594e, 0x7462, 0x5429, 0x4d42, 0x675a, 0x7259,
-  0x592a, 0x583e, 0x5c2d, 0x626b, 0x567c, 0x4a79, 0x545a, 0x7457,
-  0x4c21, 0x4f3a, 0x7538, 0x5943, 0x5068, 0x6345, 0x6b78, 0x7231,
-  0x4f3b, 0x532d, 0x6861, 0x4e6c, 0x6034, 0x5e63, 0x5d77, 0x7232,
-  0x7376, 0x765b, 0x577e, 0x785f, 0x7772, 0x5029, 0x665a, 0x7526,
-  0x573c, 0x4c63, 0x665b, 0x5d5d, 0x5133, 0x6f6d, 0x565e, 0x6474,
-  0x616f, 0x5d78, 0x684f, 0x4a65, 0x5c21, 0x6035, 0x7c2c, 0x7c2d,
-  0x5827, 0x6d38, 0x5b36, 0x5670, 0x732f, 0x4d25, 0x5a71, 0x5828,
-  0x4c64, 0x5134, 0x4a58, 0x5a72, 0x7527, 0x7528, 0x6626, 0x556c,
-  0x5578, 0x5a73, 0x6346, 0x5e64, 0x5e65, 0x5135, 0x5136, 0x5137,
-  0x7233, 0x695e, 0x7053, 0x7234, 0x7054, 0x4b64, 0x7b54, 0x7566,
-  0x636a, 0x5e66, 0x5f54, 0x7879, 0x702e, 0x5138, 0x565f, 0x5057,
-  0x7c21, 0x6f6e, 0x5c58, 0x695f, 0x655d, 0x7d7b, 0x6049, 0x5649,
-  0x542a, 0x654c, 0x6960, 0x5058, 0x7c22, 0x543e, 0x6233, 0x5e67,
-  0x5c3c, 0x5236, 0x7555, 0x4e21, 0x7529, 0x5d79, 0x5d7a, 0x7055,
-  0x765f, 0x725a, 0x646b, 0x7271, 0x6c39, 0x7d7c, 0x612a, 0x4a59,
-  0x6f6f, 0x752a, 0x6c79, 0x782d, 0x7242, 0x7643, 0x5752, 0x7922,
-  0x7056, 0x707a, 0x7660, 0x6973, 0x7243, 0x542b, 0x4a33, 0x4d26,
-  0x4d43, 0x4d5a, 0x594f, 0x7644, 0x6e5d, 0x6744, 0x6234, 0x5f62,
-  0x675b, 0x6831, 0x7c2e, 0x654d, 0x7a6b, 0x4f3c, 0x4f62, 0x4d76,
-  0x6f70, 0x743e, 0x544d, 0x7338, 0x6921, 0x7272, 0x736b, 0x7057,
-  0x4f57, 0x4f5f, 0x6840, 0x6841, 0x4f63, 0x6922, 0x502a, 0x7341,
-  0x502b, 0x5464, 0x6f3c, 0x5821, 0x595f, 0x7357, 0x5c3d, 0x4c65,
-  0x6d71, 0x7162, 0x545b, 0x6235, 0x4a66, 0x532e, 0x4c66, 0x7153,
-  0x7567, 0x4a5a, 0x7b6e, 0x6145, 0x5f69, 0x6e5e, 0x7742, 0x5822,
-  0x5d2c, 0x702f, 0x563d, 0x612b, 0x7936, 0x5475, 0x5049, 0x6f27,
-  0x626c, 0x5b6a, 0x4e4c, 0x7568, 0x7755, 0x534d, 0x737e, 0x5035,
-  0x607e, 0x5f7b, 0x665d, 0x6824, 0x4b4d, 0x6f28, 0x6e34, 0x5a58,
-  0x5139, 0x5f29, 0x7330, 0x4c44, 0x4e37, 0x6f29, 0x5f55, 0x6d57,
-  0x6e46, 0x6f3d, 0x7c56, 0x5b74, 0x6f2a, 0x7839, 0x7569, 0x6359,
-  0x6146, 0x543f, 0x5e68, 0x706a, 0x7342, 0x532f, 0x4a5b, 0x7c57,
-  0x6d58, 0x6147, 0x7458, 0x5633, 0x5d2d, 0x553e, 0x7143, 0x6e5f,
-  0x566b, 0x7459, 0x5766, 0x5a37, 0x5d7b, 0x5d4f, 0x5823, 0x5a59,
-  0x7058, 0x6f44, 0x6158, 0x7154, 0x6d72, 0x555b, 0x555c, 0x7344,
-  0x4b57, 0x6236, 0x6f71, 0x7b55, 0x5358, 0x5d50, 0x7059, 0x4b33,
-  0x555d, 0x4d27, 0x502c, 0x513a, 0x7144, 0x6533, 0x7b75, 0x6961,
-  0x7d60, 0x7c3c, 0x5a22, 0x5a23, 0x5221, 0x526f, 0x626d, 0x5e69,
-  0x4e5c, 0x7235, 0x5064, 0x5d51, 0x6148, 0x5b37, 0x5f63, 0x6d39,
-  0x7145, 0x734f, 0x572b, 0x612c, 0x636b, 0x6e47, 0x6149, 0x4a7a,
-  0x707b, 0x7a61, 0x705a, 0x4c67, 0x5a74, 0x4c3f, 0x4e6d, 0x5529,
-  0x7a62, 0x5065, 0x6b56, 0x6c5f, 0x5f7c, 0x7756, 0x5e6a, 0x4b34,
-  0x6f3e, 0x4c35, 0x4f3d, 0x6f72, 0x6237, 0x4c68, 0x707c, 0x5660,
-  0x7146, 0x6238, 0x6b2b, 0x4b35, 0x5851, 0x744e, 0x7377, 0x5746,
-  0x513b, 0x772a, 0x6d4a, 0x5753, 0x587a, 0x7645, 0x514c, 0x5d7c,
-  0x5f7d, 0x7965, 0x604a, 0x727d, 0x5330, 0x7473, 0x5a49, 0x665e,
-  0x783a, 0x6850, 0x587b, 0x6a55, 0x5623, 0x7646, 0x725b, 0x647c,
-  0x6832, 0x5a5a, 0x725c, 0x7b56, 0x6932, 0x6e2d, 0x7a63, 0x5c6e,
-  0x756a, 0x6660, 0x707d, 0x572c, 0x7545, 0x6e60, 0x5b65, 0x5d5e,
-  0x5970, 0x6923, 0x7179, 0x7244, 0x604b, 0x6924, 0x6239, 0x6331,
-  0x7c6b, 0x4d28, 0x4c36, 0x705b, 0x663a, 0x4d29, 0x7343, 0x6159,
-  0x6f2b, 0x6745, 0x6069, 0x7345, 0x5440, 0x553f, 0x5d2e, 0x797c,
-  0x4c40, 0x6522, 0x4e38, 0x5852, 0x7956, 0x712a, 0x4e51, 0x7647,
-  0x5b6b, 0x5f7e, 0x5861, 0x7773, 0x5767, 0x547e, 0x513c, 0x654f,
-  0x4b36, 0x5a38, 0x4d44, 0x563e, 0x623a, 0x4f58, 0x604c, 0x6b79,
-  0x7d7d, 0x5768, 0x4b58, 0x6962, 0x683a, 0x6347, 0x6c4d, 0x6c4e,
-  0x563f, 0x6327, 0x5f56, 0x7d68, 0x6e61, 0x7628, 0x5d7d, 0x783b,
-  0x6851, 0x7957, 0x4e6e, 0x6c4f, 0x6925, 0x5655, 0x4d45, 0x6d3a,
-  0x513d, 0x4f3e, 0x6c3b, 0x5231, 0x4c69, 0x5944, 0x697c, 0x513e,
-  0x6c3c, 0x652d, 0x7730, 0x4c6a, 0x5344, 0x5640, 0x567d, 0x6121,
-  0x5e3d, 0x7629, 0x5a24, 0x5624, 0x7546, 0x6122, 0x6946, 0x7245,
-  0x7469, 0x566c, 0x6b53, 0x6c3d, 0x625c, 0x5e6b, 0x705c, 0x6b3f,
-  0x574e, 0x513f, 0x752b, 0x797d, 0x4a5c, 0x4d46, 0x7236, 0x5d7e,
-  0x4c37, 0x5b38, 0x5069, 0x4e5d, 0x6b40, 0x7d22, 0x784b, 0x6a56,
-  0x7130, 0x5b4e, 0x7743, 0x5b4f, 0x4b24, 0x7860, 0x7b57, 0x6b4a,
-  0x6021, 0x4e4d, 0x545c, 0x7d58, 0x5276, 0x7237, 0x7a76, 0x762a,
-  0x7a77, 0x5866, 0x7431, 0x6852, 0x4a45, 0x4c6b, 0x626e, 0x623b,
-  0x772d, 0x7861, 0x736c, 0x5e21, 0x647d, 0x636c, 0x5d2f, 0x5d30,
-  0x4b37, 0x6853, 0x6123, 0x5260, 0x707e, 0x6926, 0x4b72, 0x6d73,
-  0x5c59, 0x604d, 0x775a, 0x5b39, 0x4c2e, 0x5a5b, 0x4d47, 0x5d31,
-  0x582f, 0x6323, 0x4e6f, 0x7273, 0x7833, 0x604e, 0x757d, 0x6b6c,
-  0x5345, 0x7c6c, 0x525b, 0x546b, 0x5e22, 0x6566, 0x7030, 0x5544,
-  0x6d74, 0x636d, 0x6842, 0x6d75, 0x577c, 0x6d3b, 0x762b, 0x7238,
-  0x7648, 0x5366, 0x725d, 0x4f3f, 0x6b2c, 0x4f40, 0x6628, 0x7d69,
-  0x4f41, 0x605f, 0x5e6c, 0x6022, 0x743f, 0x626f, 0x5971, 0x7147,
-  0x4b38, 0x797e, 0x5b3a, 0x5a75, 0x766c, 0x5a5c, 0x7a64, 0x604f,
-  0x5d32, 0x6629, 0x6f73, 0x736d, 0x6b7a, 0x7966, 0x4a5d, 0x555e,
-  0x4a5e, 0x5f64, 0x667d, 0x752c, 0x6475, 0x6963, 0x6d4b, 0x4f64,
-  0x5853, 0x5d33, 0x546c, 0x7239, 0x5f37, 0x4b4e, 0x7b58, 0x5059,
-  0x5d52, 0x7774, 0x675c, 0x6425, 0x7c23, 0x5b3b, 0x723a, 0x697d,
-  0x504a, 0x7556, 0x5945, 0x6434, 0x6d27, 0x6a3d, 0x667e, 0x7744,
-  0x752d, 0x5960, 0x4a34, 0x7862, 0x4f42, 0x6c3e, 0x6534, 0x4d48,
-  0x6e48, 0x6748, 0x4d49, 0x7937, 0x7168, 0x5972, 0x5b75, 0x4a35,
-  0x5946, 0x5849, 0x592b, 0x6d3c, 0x5854, 0x5c5a, 0x623c, 0x7c6d,
-  0x6c60, 0x527e, 0x6947, 0x662a, 0x6270, 0x7a3b, 0x752e, 0x7b2a,
-  0x6c7b, 0x6c3f, 0x7c58, 0x5465, 0x7943, 0x6e62, 0x5769, 0x6d76,
-  0x5e6d, 0x4c6c, 0x636e, 0x6854, 0x7a78, 0x5d34, 0x6435, 0x5830,
-  0x5855, 0x746a, 0x4e39, 0x5661, 0x4f52, 0x5036, 0x4e22, 0x736e,
-  0x7378, 0x5c4c, 0x504b, 0x7c24, 0x4d4a, 0x5754, 0x5e23, 0x6460,
-  0x6e49, 0x625d, 0x757e, 0x542c, 0x5551, 0x5870, 0x7843, 0x6a57,
-  0x7557, 0x583f, 0x7d40, 0x6b2d, 0x552a, 0x6728, 0x6e4a, 0x4a67,
-  0x7863, 0x545d, 0x6a58, 0x7b59, 0x6d77, 0x6535, 0x502d, 0x7171,
-  0x623d, 0x6348, 0x5955, 0x5f2a, 0x5b3c, 0x7864, 0x717a, 0x6536,
-  0x736f, 0x7b5a, 0x6160, 0x592c, 0x756b, 0x6036, 0x6948, 0x4b4f,
-  0x6349, 0x5e6e, 0x623e, 0x5c6f, 0x5625, 0x6271, 0x567e, 0x5921,
-  0x5840, 0x5c5b, 0x6d3d, 0x5f38, 0x6a25, 0x572d, 0x7379, 0x6d78,
-  0x7547, 0x614a, 0x6b63, 0x725e, 0x784c, 0x6a59, 0x5346, 0x5b66,
-  0x752f, 0x4e70, 0x697e, 0x7b36, 0x6272, 0x4f72, 0x7739, 0x5973,
-  0x614b, 0x5a5d, 0x5a39, 0x6b7b, 0x4b39, 0x6d79, 0x6060, 0x7440,
-  0x7d3c, 0x5f31, 0x636f, 0x6023, 0x7d39, 0x7031, 0x4d4b, 0x6d3e,
-  0x5540, 0x6370, 0x6d7a, 0x6964, 0x556d, 0x675d, 0x5476, 0x6537,
-  0x5b67, 0x623f, 0x6e4b, 0x5774, 0x705d, 0x4e2b, 0x675e, 0x5656,
-  0x614c, 0x6833, 0x656e, 0x5c22, 0x6050, 0x5535, 0x5521, 0x7b5b,
-  0x794b, 0x4b73, 0x7425, 0x7a48, 0x5657, 0x6965, 0x7b5c, 0x7d50,
-  0x7b76, 0x5a25, 0x5b3d, 0x6c62, 0x4d77, 0x705e, 0x7649, 0x5e6f,
-  0x5331, 0x7c6e, 0x6843, 0x7148, 0x4e71, 0x796d, 0x7274, 0x6436,
-  0x7539, 0x5c70, 0x6371, 0x6825, 0x723b, 0x5e24, 0x5a4c, 0x4a69,
-  0x635a, 0x7c59, 0x6a5a, 0x7944, 0x6324, 0x7b5d, 0x6f4a, 0x6844,
-  0x554c, 0x6b57, 0x592d, 0x7b2b, 0x5359, 0x5522, 0x765e, 0x5a76,
-  0x6051, 0x6928, 0x7579, 0x7a2f, 0x6b7c, 0x606a, 0x6332, 0x5545,
-  0x7163, 0x556e, 0x4d4c, 0x6d59, 0x5841, 0x7a6c, 0x716b, 0x7a3c,
-  0x6662, 0x7a65, 0x627a, 0x4a36, 0x6437, 0x6a5b, 0x757a, 0x7b2c,
-  0x4f43, 0x6b7d, 0x787a, 0x5f39, 0x6171, 0x5224, 0x757b, 0x505a,
-  0x505b, 0x6a3e, 0x5931, 0x4a37, 0x5367, 0x7865, 0x5332, 0x6240,
-  0x725f, 0x4d65, 0x792c, 0x4d4d, 0x6e2e, 0x562e, 0x576a, 0x6760,
-  0x6b2e, 0x4f59, 0x5c4d, 0x6d7b, 0x5e70, 0x576b, 0x5e25, 0x5f57,
-  0x5b50, 0x5b51, 0x5523, 0x7032, 0x5c5c, 0x4a68, 0x7866, 0x5c4e,
-  0x6a5c, 0x5b52, 0x6933, 0x775b, 0x6328, 0x572e, 0x6061, 0x4b3a,
-  0x6551, 0x505c, 0x5541, 0x584a, 0x6329, 0x6024, 0x6929, 0x5347,
-  0x5c5d, 0x782e, 0x4c38, 0x502e, 0x5872, 0x634a, 0x4c2f, 0x542d,
-  0x7651, 0x504c, 0x4a46, 0x5542, 0x4e3a, 0x4a47, 0x7a30, 0x5f58,
-  0x753a, 0x656b, 0x6f74, 0x5d35, 0x4d2a, 0x6372, 0x7b77, 0x7750,
-  0x7d3a, 0x7d61, 0x767e, 0x5140, 0x6845, 0x6438, 0x6168, 0x4c41,
-  0x526d, 0x5b3e, 0x6062, 0x7a49, 0x614d, 0x4a38, 0x7260, 0x7149,
-  0x5e71, 0x705f, 0x7844, 0x6e4c, 0x5e72, 0x6749, 0x6273, 0x6761,
-  0x634b, 0x634c, 0x4f78, 0x6f2c, 0x7d7e, 0x7c25, 0x7a31, 0x5f59,
-  0x6052, 0x745a, 0x714a, 0x4e23, 0x723c, 0x6c63, 0x6025, 0x772b,
-  0x6b2f, 0x655e, 0x6124, 0x4d2b, 0x5974, 0x6826, 0x4d4e, 0x6169,
-  0x7c6f, 0x6063, 0x6241, 0x4e24, 0x5e26, 0x6b7e, 0x6b5d, 0x7060,
-  0x745b, 0x6274, 0x5348, 0x746b, 0x6e35, 0x7558, 0x555f, 0x5665,
-  0x6b30, 0x7463, 0x634d, 0x7474, 0x7a32, 0x6f75, 0x4a5f, 0x6b31,
-  0x6d3f, 0x7d49, 0x6426, 0x7924, 0x7033, 0x656c, 0x5167, 0x5947,
-  0x6457, 0x6a5d, 0x5477, 0x5a3a, 0x5a4d, 0x794c, 0x615a, 0x5b3f,
-  0x4c45, 0x6c50, 0x4b3b, 0x5e73, 0x692a, 0x5948, 0x6e63, 0x573d,
-  0x4f44, 0x504d, 0x7c26, 0x717b, 0x7d52, 0x5141, 0x635b, 0x5349,
-  0x5c4f, 0x4c6d, 0x5e27, 0x663b, 0x6c21, 0x4c39, 0x7b5e, 0x6762,
-  0x5441, 0x5c28, 0x6242, 0x7358, 0x6553, 0x7359, 0x7346, 0x4d5b,
-  0x4d2c, 0x7c43, 0x5467, 0x5142, 0x7925, 0x6855, 0x634e, 0x544a,
-  0x5f5a, 0x7b5f, 0x6763, 0x787b, 0x634f, 0x7530, 0x5867, 0x5949,
-  0x782f, 0x6f76, 0x5d36, 0x6e2f, 0x4d78, 0x5e38, 0x7c27, 0x777c,
-  0x7731, 0x4e3b, 0x7421, 0x6e4d, 0x612e, 0x6c43, 0x4f7e, 0x783f,
-  0x5862, 0x5368, 0x5e28, 0x7464, 0x6c42, 0x5975, 0x7945, 0x5d53,
-  0x5671, 0x6c7c, 0x7c70, 0x6d40, 0x4a39, 0x6e64, 0x7261, 0x5e39,
-  0x5672, 0x5e74, 0x5f5b, 0x5b53, 0x7a67, 0x5863, 0x7441, 0x5d37,
-  0x7275, 0x542e, 0x5673, 0x5d38, 0x4f45, 0x5f5f, 0x723e, 0x7621,
-  0x6b4b, 0x717c, 0x7347, 0x606b, 0x6d7c, 0x615b, 0x6e65, 0x5e75,
-  0x7a53, 0x714b, 0x502f, 0x5d39, 0x5143, 0x7531, 0x6a46, 0x7061,
-  0x762c, 0x7559, 0x706b, 0x5d3a, 0x723f, 0x7745, 0x5b22, 0x7276,
-  0x4a3a, 0x7775, 0x4b65, 0x6e66, 0x6053, 0x4e25, 0x5658, 0x542f,
-  0x6949, 0x534e, 0x7442, 0x4b66, 0x7121, 0x6b32, 0x7122, 0x6b33,
-  0x7034, 0x4b74, 0x5430, 0x7332, 0x7b37, 0x756c, 0x6e67, 0x7432,
-  0x756d, 0x4f73, 0x7062, 0x6e4e, 0x714c, 0x6538, 0x5775, 0x6373,
-  0x4f65, 0x4f46, 0x7333, 0x6458, 0x4f79, 0x4f5a, 0x7a4d, 0x6663,
-  0x7262, 0x756e, 0x4a3b, 0x635c, 0x4e72, 0x5659, 0x6e30, 0x7465,
-  0x5842, 0x5c50, 0x4c6e, 0x5560, 0x764a, 0x7d4a, 0x5856, 0x744f,
-  0x5626, 0x5c3e, 0x5b54, 0x5747, 0x727e, 0x714d, 0x6243, 0x5c5e,
-  0x5c5f, 0x6f2d, 0x662b, 0x795d, 0x6a3f, 0x6f2e, 0x7450, 0x4e73,
-  0x662c, 0x4e5e, 0x5579, 0x6374, 0x4d50, 0x5538, 0x777d, 0x5c29,
-  0x5e76, 0x5c2a, 0x7263, 0x6934, 0x525c, 0x6966, 0x6376, 0x674a,
-  0x504e, 0x5a77, 0x4a3c, 0x6e68, 0x5a5e, 0x7277, 0x627b, 0x4c26,
-  0x5a3b, 0x6e69, 0x755a, 0x775c, 0x616a, 0x4e41, 0x5431, 0x7d31,
-  0x663d, 0x7b2d, 0x7867, 0x614e, 0x7762, 0x756f, 0x4f47, 0x5432,
-  0x4c6f, 0x5468, 0x6e4f, 0x7757, 0x6026, 0x5641, 0x615c, 0x7063,
-  0x7164, 0x5c71, 0x5627, 0x7475, 0x714e, 0x7264, 0x5030, 0x6c6f,
-  0x793a, 0x6b35, 0x546d, 0x6244, 0x6967, 0x6b34, 0x6a21, 0x783c,
-  0x4e26, 0x7946, 0x7c5a, 0x5433, 0x5339, 0x6a5e, 0x692b, 0x6161,
-  0x534f, 0x7476, 0x6a40, 0x614f, 0x4c3a, 0x6e6a, 0x7064, 0x7334,
-  0x546e, 0x7240, 0x7165, 0x7443, 0x6054, 0x6b36, 0x5721, 0x4b68,
-  0x792d, 0x692d, 0x5864, 0x7a33, 0x6245, 0x7c3d, 0x6c44, 0x5831,
-  0x5c2b, 0x5524, 0x6b69, 0x683b, 0x5857, 0x7b2e, 0x5161, 0x5b40,
-  0x753e, 0x5e77, 0x4a7b, 0x7746, 0x4f48, 0x6150, 0x6e50, 0x6974,
-  0x4e74, 0x554d, 0x4f5b, 0x5d3b, 0x4e2c, 0x6968, 0x5434, 0x6447,
-  0x755b, 0x7a41, 0x5e29, 0x5478, 0x6f77, 0x5333, 0x6b37, 0x6f78,
-  0x755c, 0x6d4c, 0x5b55, 0x714f, 0x7150, 0x7532, 0x592e, 0x552c,
-  0x6246, 0x7d23, 0x7b65, 0x5f2b, 0x6275, 0x762d, 0x7533, 0x7035,
-  0x6125, 0x755d, 0x6c22, 0x6d7d, 0x7534, 0x7b38, 0x5b23, 0x564a,
-  0x4b59, 0x6554, 0x737a, 0x6b38, 0x6037, 0x576c, 0x716c, 0x652f,
-  0x5561, 0x576d, 0x5151, 0x6172, 0x6f79, 0x5d3c, 0x765c, 0x7065,
-  0x7444, 0x6969, 0x737b, 0x546f, 0x4c22, 0x777e, 0x5f3c, 0x6b4d,
-  0x5037, 0x5642, 0x682d, 0x6f2f, 0x4b25, 0x4b69, 0x7a68, 0x4c46,
-  0x6667, 0x6a47, 0x5b24, 0x4f49, 0x627c, 0x6f7a, 0x6b5e, 0x7548,
-  0x545e, 0x6055, 0x6f30, 0x6247, 0x592f, 0x7967, 0x6765, 0x4f4a,
-  0x6151, 0x6248, 0x6f7b, 0x7a79, 0x5c72, 0x6027, 0x7868, 0x4b6a,
-  0x4b3c, 0x5662, 0x755e, 0x755f, 0x6e36, 0x6276, 0x534a, 0x6f7c,
-  0x5144, 0x6f31, 0x5145, 0x505e, 0x5961, 0x6038, 0x4d51, 0x7339,
-  0x674c, 0x5628, 0x4e27, 0x5435, 0x6448, 0x5334, 0x6b39, 0x4b75,
-  0x765d, 0x7123, 0x4c47, 0x694a, 0x6170, 0x7560, 0x7b2f, 0x4b51,
-  0x7b60, 0x7265, 0x6c70, 0x706c, 0x6e6b, 0x694b, 0x4c70, 0x572f,
-  0x7321, 0x7c75, 0x7124, 0x6056, 0x6f32, 0x7451, 0x7721, 0x7151,
-  0x4a7c, 0x4a7d, 0x4e4e, 0x7348, 0x733a, 0x6d7e, 0x5a26, 0x606c,
-  0x784d, 0x4b52, 0x6b4e, 0x7958, 0x7959, 0x4a60, 0x5a4a, 0x4b26,
-  0x4a48, 0x796e, 0x5b6c, 0x5031, 0x556f, 0x6673, 0x6722, 0x6459,
-  0x6461, 0x7c44, 0x796f, 0x4f74, 0x7766, 0x4e3c, 0x7445, 0x5c23,
-  0x5d3d, 0x7446, 0x7821, 0x6856, 0x5b41, 0x7066, 0x6439, 0x766d,
-  0x792e, 0x5d3e, 0x5730, 0x5868, 0x4b3d, 0x795a, 0x784e, 0x7970,
-  0x606d, 0x6333, 0x7433, 0x6a42, 0x7266, 0x7036, 0x5b56, 0x6b64,
-  0x7267, 0x5755, 0x5436, 0x7968, 0x5741, 0x6555, 0x696a, 0x574c,
-  0x5369, 0x6249, 0x7c5b, 0x4d2d, 0x4c30, 0x6a22, 0x6476, 0x5040,
-  0x7037, 0x6e21, 0x5776, 0x624a, 0x624b, 0x7a4f, 0x6b5f, 0x564b,
-  0x7434, 0x6d4d, 0x6452, 0x6a29, 0x643a, 0x7322, 0x4d52, 0x764b,
-  0x7166, 0x6d41, 0x683c, 0x6e51, 0x7067, 0x624c, 0x642a, 0x7561,
-  0x6d5a, 0x576e, 0x5171, 0x696b, 0x696c, 0x6064, 0x5a27, 0x5d54,
-  0x6a23, 0x5643, 0x5674, 0x5a5f, 0x6f33, 0x624d, 0x6f7d, 0x7268,
-  0x6f45, 0x6767, 0x577d, 0x674e, 0x5f5c, 0x7947, 0x5976, 0x5f2c,
-  0x565a, 0x5c24, 0x7038, 0x557a, 0x6477, 0x5644, 0x746c, 0x6f7e,
-  0x7021, 0x5e2a, 0x5a3c, 0x587c, 0x7a54, 0x6c65, 0x7c28, 0x6c66,
-  0x584b, 0x7b39, 0x6453, 0x4d79, 0x4f53, 0x4a6a, 0x4f54, 0x783d,
-  0x7447, 0x6a5f, 0x795b, 0x5437, 0x6b65, 0x6152, 0x6a24, 0x7a42,
-  0x7b61, 0x7a6d, 0x7022, 0x4c71, 0x7a23, 0x6277, 0x624e, 0x6975,
-  0x616b, 0x6768, 0x6857, 0x5a78, 0x544b, 0x7776, 0x5645, 0x5469,
-  0x7a7a, 0x4c72, 0x775d, 0x5e3a, 0x4e28, 0x7039, 0x647e, 0x6449,
-  0x6454, 0x6a43, 0x6f34, 0x573e, 0x7b62, 0x4d53, 0x6f35, 0x7a69,
-  0x7926, 0x5f3d, 0x7747, 0x787d, 0x787c, 0x5e2b, 0x5b68, 0x635d,
-  0x6162, 0x5146, 0x7650, 0x6b66, 0x5a79, 0x6c47, 0x5e78, 0x7869,
-  0x635e, 0x4e75, 0x7a43, 0x6557, 0x6c48, 0x7349, 0x643b, 0x662e,
-  0x6f36, 0x5c3f, 0x4e3d, 0x5843, 0x504f, 0x4f7a, 0x734a, 0x6057,
-  0x5147, 0x692e, 0x683d, 0x7a44, 0x624f, 0x7a45, 0x7938, 0x5c60,
-  0x7b30, 0x5829, 0x655f, 0x7927, 0x766e, 0x764c, 0x6278, 0x6c71,
-  0x5a60, 0x7152, 0x524c, 0x4f4b, 0x4a3d, 0x5d3f, 0x766f, 0x5e79,
-  0x7a34, 0x552d, 0x7167, 0x5e3e, 0x5c40, 0x5148, 0x5149, 0x783e,
-  0x4b76, 0x5479, 0x7562, 0x6153, 0x5869, 0x787e, 0x4f4c, 0x7d24,
-  0x4e76, 0x7a50, 0x4c73, 0x663e, 0x762e, 0x5570, 0x514a, 0x7c3e,
-  0x5571, 0x4d69, 0x7a35, 0x6250, 0x7477, 0x4d54, 0x6723, 0x5b25,
-  0x6251, 0x5722, 0x7763, 0x6a26, 0x5021, 0x4e5a, 0x7b6b, 0x5b26,
-  0x5b5e, 0x5865, 0x6a60, 0x582a, 0x6560, 0x565b, 0x6f46, 0x786a,
-  0x6455, 0x4e77, 0x6058, 0x576f, 0x746d, 0x4d66, 0x4c74, 0x7563,
-  0x644a, 0x5c61, 0x7948, 0x7c3f, 0x6827, 0x5844, 0x4b3e, 0x5c2e,
-  0x5777, 0x7068, 0x5d40, 0x4f4d, 0x5c73, 0x5930, 0x6669, 0x643c,
-  0x6a44, 0x646c, 0x6465, 0x7b78, 0x4c3b, 0x643d, 0x4d5c, 0x5977,
-  0x5d5f, 0x6d4e, 0x5950, 0x6523, 0x794d, 0x4d2e, 0x4f4e, 0x762f,
-  0x7d53, 0x6b6d, 0x565c, 0x6524, 0x5536, 0x565d, 0x7969, 0x6724,
-  0x5663, 0x514b, 0x5664, 0x5572, 0x5e7a, 0x5778, 0x586a, 0x4f55,
-  0x587d, 0x582b, 0x7d4b, 0x7c5c, 0x6028, 0x5573, 0x7d59, 0x4c23,
-  0x5979, 0x536a, 0x7575, 0x6f47, 0x535a, 0x5a3d, 0x6828, 0x5c2f,
-  0x7023, 0x4d55, 0x6029, 0x5e2c, 0x703a, 0x6e31, 0x6e32, 0x764d,
-  0x6e52, 0x5646, 0x6065, 0x733b, 0x6561, 0x644b, 0x5723, 0x5b42,
-  0x4a7e, 0x4f4f, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026,
-  0x3027, 0x3028, 0x3029, 0x302a, 0x302b, 0x302c, 0x302d, 0x302e,
-  0x302f, 0x3030, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x3036,
-  0x3037, 0x3038, 0x3039, 0x303a, 0x303b, 0x303c, 0x303d, 0x303e,
-  0x303f, 0x3040, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046,
-  0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e,
-  0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056,
-  0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e,
-  0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066,
-  0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e,
-  0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076,
-  0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e,
-  0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128,
-  0x3129, 0x312a, 0x312b, 0x312c, 0x312d, 0x312e, 0x312f, 0x3130,
-  0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138,
-  0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140,
-  0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148,
-  0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150,
-  0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158,
-  0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160,
-  0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168,
-  0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, 0x3170,
-  0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, 0x3178,
-  0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x3221, 0x3222,
-  0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0x322a,
-  0x322b, 0x322c, 0x322d, 0x322e, 0x322f, 0x3230, 0x3231, 0x3232,
-  0x3233, 0x3234, 0x3235, 0x3236, 0x3237, 0x3238, 0x3239, 0x323a,
-  0x323b, 0x323c, 0x323d, 0x323e, 0x323f, 0x3240, 0x3241, 0x3242,
-  0x3243, 0x3244, 0x3245, 0x3246, 0x3247, 0x3248, 0x3249, 0x324a,
-  0x324b, 0x324c, 0x324d, 0x324e, 0x324f, 0x3250, 0x3251, 0x3252,
-  0x3253, 0x3254, 0x3255, 0x3256, 0x3257, 0x3258, 0x3259, 0x325a,
-  0x325b, 0x325c, 0x325d, 0x325e, 0x325f, 0x3260, 0x3261, 0x3262,
-  0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326a,
-  0x326b, 0x326c, 0x326d, 0x326e, 0x326f, 0x3270, 0x3271, 0x3272,
-  0x3273, 0x3274, 0x3275, 0x3276, 0x3277, 0x3278, 0x3279, 0x327a,
-  0x327b, 0x327c, 0x327d, 0x327e, 0x3321, 0x3322, 0x3323, 0x3324,
-  0x3325, 0x3326, 0x3327, 0x3328, 0x3329, 0x332a, 0x332b, 0x332c,
-  0x332d, 0x332e, 0x332f, 0x3330, 0x3331, 0x3332, 0x3333, 0x3334,
-  0x3335, 0x3336, 0x3337, 0x3338, 0x3339, 0x333a, 0x333b, 0x333c,
-  0x333d, 0x333e, 0x333f, 0x3340, 0x3341, 0x3342, 0x3343, 0x3344,
-  0x3345, 0x3346, 0x3347, 0x3348, 0x3349, 0x334a, 0x334b, 0x334c,
-  0x334d, 0x334e, 0x334f, 0x3350, 0x3351, 0x3352, 0x3353, 0x3354,
-  0x3355, 0x3356, 0x3357, 0x3358, 0x3359, 0x335a, 0x335b, 0x335c,
-  0x335d, 0x335e, 0x335f, 0x3360, 0x3361, 0x3362, 0x3363, 0x3364,
-  0x3365, 0x3366, 0x3367, 0x3368, 0x3369, 0x336a, 0x336b, 0x336c,
-  0x336d, 0x336e, 0x336f, 0x3370, 0x3371, 0x3372, 0x3373, 0x3374,
-  0x3375, 0x3376, 0x3377, 0x3378, 0x3379, 0x337a, 0x337b, 0x337c,
-  0x337d, 0x337e, 0x3421, 0x3422, 0x3423, 0x3424, 0x3425, 0x3426,
-  0x3427, 0x3428, 0x3429, 0x342a, 0x342b, 0x342c, 0x342d, 0x342e,
-  0x342f, 0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436,
-  0x3437, 0x3438, 0x3439, 0x343a, 0x343b, 0x343c, 0x343d, 0x343e,
-  0x343f, 0x3440, 0x3441, 0x3442, 0x3443, 0x3444, 0x3445, 0x3446,
-  0x3447, 0x3448, 0x3449, 0x344a, 0x344b, 0x344c, 0x344d, 0x344e,
-  0x344f, 0x3450, 0x3451, 0x3452, 0x3453, 0x3454, 0x3455, 0x3456,
-  0x3457, 0x3458, 0x3459, 0x345a, 0x345b, 0x345c, 0x345d, 0x345e,
-  0x345f, 0x3460, 0x3461, 0x3462, 0x3463, 0x3464, 0x3465, 0x3466,
-  0x3467, 0x3468, 0x3469, 0x346a, 0x346b, 0x346c, 0x346d, 0x346e,
-  0x346f, 0x3470, 0x3471, 0x3472, 0x3473, 0x3474, 0x3475, 0x3476,
-  0x3477, 0x3478, 0x3479, 0x347a, 0x347b, 0x347c, 0x347d, 0x347e,
-  0x3521, 0x3522, 0x3523, 0x3524, 0x3525, 0x3526, 0x3527, 0x3528,
-  0x3529, 0x352a, 0x352b, 0x352c, 0x352d, 0x352e, 0x352f, 0x3530,
-  0x3531, 0x3532, 0x3533, 0x3534, 0x3535, 0x3536, 0x3537, 0x3538,
-  0x3539, 0x353a, 0x353b, 0x353c, 0x353d, 0x353e, 0x353f, 0x3540,
-  0x3541, 0x3542, 0x3543, 0x3544, 0x3545, 0x3546, 0x3547, 0x3548,
-  0x3549, 0x354a, 0x354b, 0x354c, 0x354d, 0x354e, 0x354f, 0x3550,
-  0x3551, 0x3552, 0x3553, 0x3554, 0x3555, 0x3556, 0x3557, 0x3558,
-  0x3559, 0x355a, 0x355b, 0x355c, 0x355d, 0x355e, 0x355f, 0x3560,
-  0x3561, 0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567, 0x3568,
-  0x3569, 0x356a, 0x356b, 0x356c, 0x356d, 0x356e, 0x356f, 0x3570,
-  0x3571, 0x3572, 0x3573, 0x3574, 0x3575, 0x3576, 0x3577, 0x3578,
-  0x3579, 0x357a, 0x357b, 0x357c, 0x357d, 0x357e, 0x3621, 0x3622,
-  0x3623, 0x3624, 0x3625, 0x3626, 0x3627, 0x3628, 0x3629, 0x362a,
-  0x362b, 0x362c, 0x362d, 0x362e, 0x362f, 0x3630, 0x3631, 0x3632,
-  0x3633, 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639, 0x363a,
-  0x363b, 0x363c, 0x363d, 0x363e, 0x363f, 0x3640, 0x3641, 0x3642,
-  0x3643, 0x3644, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, 0x364a,
-  0x364b, 0x364c, 0x364d, 0x364e, 0x364f, 0x3650, 0x3651, 0x3652,
-  0x3653, 0x3654, 0x3655, 0x3656, 0x3657, 0x3658, 0x3659, 0x365a,
-  0x365b, 0x365c, 0x365d, 0x365e, 0x365f, 0x3660, 0x3661, 0x3662,
-  0x3663, 0x3664, 0x3665, 0x3666, 0x3667, 0x3668, 0x3669, 0x366a,
-  0x366b, 0x366c, 0x366d, 0x366e, 0x366f, 0x3670, 0x3671, 0x3672,
-  0x3673, 0x3674, 0x3675, 0x3676, 0x3677, 0x3678, 0x3679, 0x367a,
-  0x367b, 0x367c, 0x367d, 0x367e, 0x3721, 0x3722, 0x3723, 0x3724,
-  0x3725, 0x3726, 0x3727, 0x3728, 0x3729, 0x372a, 0x372b, 0x372c,
-  0x372d, 0x372e, 0x372f, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734,
-  0x3735, 0x3736, 0x3737, 0x3738, 0x3739, 0x373a, 0x373b, 0x373c,
-  0x373d, 0x373e, 0x373f, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744,
-  0x3745, 0x3746, 0x3747, 0x3748, 0x3749, 0x374a, 0x374b, 0x374c,
-  0x374d, 0x374e, 0x374f, 0x3750, 0x3751, 0x3752, 0x3753, 0x3754,
-  0x3755, 0x3756, 0x3757, 0x3758, 0x3759, 0x375a, 0x375b, 0x375c,
-  0x375d, 0x375e, 0x375f, 0x3760, 0x3761, 0x3762, 0x3763, 0x3764,
-  0x3765, 0x3766, 0x3767, 0x3768, 0x3769, 0x376a, 0x376b, 0x376c,
-  0x376d, 0x376e, 0x376f, 0x3770, 0x3771, 0x3772, 0x3773, 0x3774,
-  0x3775, 0x3776, 0x3777, 0x3778, 0x3779, 0x377a, 0x377b, 0x377c,
-  0x377d, 0x377e, 0x3821, 0x3822, 0x3823, 0x3824, 0x3825, 0x3826,
-  0x3827, 0x3828, 0x3829, 0x382a, 0x382b, 0x382c, 0x382d, 0x382e,
-  0x382f, 0x3830, 0x3831, 0x3832, 0x3833, 0x3834, 0x3835, 0x3836,
-  0x3837, 0x3838, 0x3839, 0x383a, 0x383b, 0x383c, 0x383d, 0x383e,
-  0x383f, 0x3840, 0x3841, 0x3842, 0x3843, 0x3844, 0x3845, 0x3846,
-  0x3847, 0x3848, 0x3849, 0x384a, 0x384b, 0x384c, 0x384d, 0x384e,
-  0x384f, 0x3850, 0x3851, 0x3852, 0x3853, 0x3854, 0x3855, 0x3856,
-  0x3857, 0x3858, 0x3859, 0x385a, 0x385b, 0x385c, 0x385d, 0x385e,
-  0x385f, 0x3860, 0x3861, 0x3862, 0x3863, 0x3864, 0x3865, 0x3866,
-  0x3867, 0x3868, 0x3869, 0x386a, 0x386b, 0x386c, 0x386d, 0x386e,
-  0x386f, 0x3870, 0x3871, 0x3872, 0x3873, 0x3874, 0x3875, 0x3876,
-  0x3877, 0x3878, 0x3879, 0x387a, 0x387b, 0x387c, 0x387d, 0x387e,
-  0x3921, 0x3922, 0x3923, 0x3924, 0x3925, 0x3926, 0x3927, 0x3928,
-  0x3929, 0x392a, 0x392b, 0x392c, 0x392d, 0x392e, 0x392f, 0x3930,
-  0x3931, 0x3932, 0x3933, 0x3934, 0x3935, 0x3936, 0x3937, 0x3938,
-  0x3939, 0x393a, 0x393b, 0x393c, 0x393d, 0x393e, 0x393f, 0x3940,
-  0x3941, 0x3942, 0x3943, 0x3944, 0x3945, 0x3946, 0x3947, 0x3948,
-  0x3949, 0x394a, 0x394b, 0x394c, 0x394d, 0x394e, 0x394f, 0x3950,
-  0x3951, 0x3952, 0x3953, 0x3954, 0x3955, 0x3956, 0x3957, 0x3958,
-  0x3959, 0x395a, 0x395b, 0x395c, 0x395d, 0x395e, 0x395f, 0x3960,
-  0x3961, 0x3962, 0x3963, 0x3964, 0x3965, 0x3966, 0x3967, 0x3968,
-  0x3969, 0x396a, 0x396b, 0x396c, 0x396d, 0x396e, 0x396f, 0x3970,
-  0x3971, 0x3972, 0x3973, 0x3974, 0x3975, 0x3976, 0x3977, 0x3978,
-  0x3979, 0x397a, 0x397b, 0x397c, 0x397d, 0x397e, 0x3a21, 0x3a22,
-  0x3a23, 0x3a24, 0x3a25, 0x3a26, 0x3a27, 0x3a28, 0x3a29, 0x3a2a,
-  0x3a2b, 0x3a2c, 0x3a2d, 0x3a2e, 0x3a2f, 0x3a30, 0x3a31, 0x3a32,
-  0x3a33, 0x3a34, 0x3a35, 0x3a36, 0x3a37, 0x3a38, 0x3a39, 0x3a3a,
-  0x3a3b, 0x3a3c, 0x3a3d, 0x3a3e, 0x3a3f, 0x3a40, 0x3a41, 0x3a42,
-  0x3a43, 0x3a44, 0x3a45, 0x3a46, 0x3a47, 0x3a48, 0x3a49, 0x3a4a,
-  0x3a4b, 0x3a4c, 0x3a4d, 0x3a4e, 0x3a4f, 0x3a50, 0x3a51, 0x3a52,
-  0x3a53, 0x3a54, 0x3a55, 0x3a56, 0x3a57, 0x3a58, 0x3a59, 0x3a5a,
-  0x3a5b, 0x3a5c, 0x3a5d, 0x3a5e, 0x3a5f, 0x3a60, 0x3a61, 0x3a62,
-  0x3a63, 0x3a64, 0x3a65, 0x3a66, 0x3a67, 0x3a68, 0x3a69, 0x3a6a,
-  0x3a6b, 0x3a6c, 0x3a6d, 0x3a6e, 0x3a6f, 0x3a70, 0x3a71, 0x3a72,
-  0x3a73, 0x3a74, 0x3a75, 0x3a76, 0x3a77, 0x3a78, 0x3a79, 0x3a7a,
-  0x3a7b, 0x3a7c, 0x3a7d, 0x3a7e, 0x3b21, 0x3b22, 0x3b23, 0x3b24,
-  0x3b25, 0x3b26, 0x3b27, 0x3b28, 0x3b29, 0x3b2a, 0x3b2b, 0x3b2c,
-  0x3b2d, 0x3b2e, 0x3b2f, 0x3b30, 0x3b31, 0x3b32, 0x3b33, 0x3b34,
-  0x3b35, 0x3b36, 0x3b37, 0x3b38, 0x3b39, 0x3b3a, 0x3b3b, 0x3b3c,
-  0x3b3d, 0x3b3e, 0x3b3f, 0x3b40, 0x3b41, 0x3b42, 0x3b43, 0x3b44,
-  0x3b45, 0x3b46, 0x3b47, 0x3b48, 0x3b49, 0x3b4a, 0x3b4b, 0x3b4c,
-  0x3b4d, 0x3b4e, 0x3b4f, 0x3b50, 0x3b51, 0x3b52, 0x3b53, 0x3b54,
-  0x3b55, 0x3b56, 0x3b57, 0x3b58, 0x3b59, 0x3b5a, 0x3b5b, 0x3b5c,
-  0x3b5d, 0x3b5e, 0x3b5f, 0x3b60, 0x3b61, 0x3b62, 0x3b63, 0x3b64,
-  0x3b65, 0x3b66, 0x3b67, 0x3b68, 0x3b69, 0x3b6a, 0x3b6b, 0x3b6c,
-  0x3b6d, 0x3b6e, 0x3b6f, 0x3b70, 0x3b71, 0x3b72, 0x3b73, 0x3b74,
-  0x3b75, 0x3b76, 0x3b77, 0x3b78, 0x3b79, 0x3b7a, 0x3b7b, 0x3b7c,
-  0x3b7d, 0x3b7e, 0x3c21, 0x3c22, 0x3c23, 0x3c24, 0x3c25, 0x3c26,
-  0x3c27, 0x3c28, 0x3c29, 0x3c2a, 0x3c2b, 0x3c2c, 0x3c2d, 0x3c2e,
-  0x3c2f, 0x3c30, 0x3c31, 0x3c32, 0x3c33, 0x3c34, 0x3c35, 0x3c36,
-  0x3c37, 0x3c38, 0x3c39, 0x3c3a, 0x3c3b, 0x3c3c, 0x3c3d, 0x3c3e,
-  0x3c3f, 0x3c40, 0x3c41, 0x3c42, 0x3c43, 0x3c44, 0x3c45, 0x3c46,
-  0x3c47, 0x3c48, 0x3c49, 0x3c4a, 0x3c4b, 0x3c4c, 0x3c4d, 0x3c4e,
-  0x3c4f, 0x3c50, 0x3c51, 0x3c52, 0x3c53, 0x3c54, 0x3c55, 0x3c56,
-  0x3c57, 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0x3c5c, 0x3c5d, 0x3c5e,
-  0x3c5f, 0x3c60, 0x3c61, 0x3c62, 0x3c63, 0x3c64, 0x3c65, 0x3c66,
-  0x3c67, 0x3c68, 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c6d, 0x3c6e,
-  0x3c6f, 0x3c70, 0x3c71, 0x3c72, 0x3c73, 0x3c74, 0x3c75, 0x3c76,
-  0x3c77, 0x3c78, 0x3c79, 0x3c7a, 0x3c7b, 0x3c7c, 0x3c7d, 0x3c7e,
-  0x3d21, 0x3d22, 0x3d23, 0x3d24, 0x3d25, 0x3d26, 0x3d27, 0x3d28,
-  0x3d29, 0x3d2a, 0x3d2b, 0x3d2c, 0x3d2d, 0x3d2e, 0x3d2f, 0x3d30,
-  0x3d31, 0x3d32, 0x3d33, 0x3d34, 0x3d35, 0x3d36, 0x3d37, 0x3d38,
-  0x3d39, 0x3d3a, 0x3d3b, 0x3d3c, 0x3d3d, 0x3d3e, 0x3d3f, 0x3d40,
-  0x3d41, 0x3d42, 0x3d43, 0x3d44, 0x3d45, 0x3d46, 0x3d47, 0x3d48,
-  0x3d49, 0x3d4a, 0x3d4b, 0x3d4c, 0x3d4d, 0x3d4e, 0x3d4f, 0x3d50,
-  0x3d51, 0x3d52, 0x3d53, 0x3d54, 0x3d55, 0x3d56, 0x3d57, 0x3d58,
-  0x3d59, 0x3d5a, 0x3d5b, 0x3d5c, 0x3d5d, 0x3d5e, 0x3d5f, 0x3d60,
-  0x3d61, 0x3d62, 0x3d63, 0x3d64, 0x3d65, 0x3d66, 0x3d67, 0x3d68,
-  0x3d69, 0x3d6a, 0x3d6b, 0x3d6c, 0x3d6d, 0x3d6e, 0x3d6f, 0x3d70,
-  0x3d71, 0x3d72, 0x3d73, 0x3d74, 0x3d75, 0x3d76, 0x3d77, 0x3d78,
-  0x3d79, 0x3d7a, 0x3d7b, 0x3d7c, 0x3d7d, 0x3d7e, 0x3e21, 0x3e22,
-  0x3e23, 0x3e24, 0x3e25, 0x3e26, 0x3e27, 0x3e28, 0x3e29, 0x3e2a,
-  0x3e2b, 0x3e2c, 0x3e2d, 0x3e2e, 0x3e2f, 0x3e30, 0x3e31, 0x3e32,
-  0x3e33, 0x3e34, 0x3e35, 0x3e36, 0x3e37, 0x3e38, 0x3e39, 0x3e3a,
-  0x3e3b, 0x3e3c, 0x3e3d, 0x3e3e, 0x3e3f, 0x3e40, 0x3e41, 0x3e42,
-  0x3e43, 0x3e44, 0x3e45, 0x3e46, 0x3e47, 0x3e48, 0x3e49, 0x3e4a,
-  0x3e4b, 0x3e4c, 0x3e4d, 0x3e4e, 0x3e4f, 0x3e50, 0x3e51, 0x3e52,
-  0x3e53, 0x3e54, 0x3e55, 0x3e56, 0x3e57, 0x3e58, 0x3e59, 0x3e5a,
-  0x3e5b, 0x3e5c, 0x3e5d, 0x3e5e, 0x3e5f, 0x3e60, 0x3e61, 0x3e62,
-  0x3e63, 0x3e64, 0x3e65, 0x3e66, 0x3e67, 0x3e68, 0x3e69, 0x3e6a,
-  0x3e6b, 0x3e6c, 0x3e6d, 0x3e6e, 0x3e6f, 0x3e70, 0x3e71, 0x3e72,
-  0x3e73, 0x3e74, 0x3e75, 0x3e76, 0x3e77, 0x3e78, 0x3e79, 0x3e7a,
-  0x3e7b, 0x3e7c, 0x3e7d, 0x3e7e, 0x3f21, 0x3f22, 0x3f23, 0x3f24,
-  0x3f25, 0x3f26, 0x3f27, 0x3f28, 0x3f29, 0x3f2a, 0x3f2b, 0x3f2c,
-  0x3f2d, 0x3f2e, 0x3f2f, 0x3f30, 0x3f31, 0x3f32, 0x3f33, 0x3f34,
-  0x3f35, 0x3f36, 0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c,
-  0x3f3d, 0x3f3e, 0x3f3f, 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44,
-  0x3f45, 0x3f46, 0x3f47, 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c,
-  0x3f4d, 0x3f4e, 0x3f4f, 0x3f50, 0x3f51, 0x3f52, 0x3f53, 0x3f54,
-  0x3f55, 0x3f56, 0x3f57, 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 0x3f5c,
-  0x3f5d, 0x3f5e, 0x3f5f, 0x3f60, 0x3f61, 0x3f62, 0x3f63, 0x3f64,
-  0x3f65, 0x3f66, 0x3f67, 0x3f68, 0x3f69, 0x3f6a, 0x3f6b, 0x3f6c,
-  0x3f6d, 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, 0x3f72, 0x3f73, 0x3f74,
-  0x3f75, 0x3f76, 0x3f77, 0x3f78, 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c,
-  0x3f7d, 0x3f7e, 0x4021, 0x4022, 0x4023, 0x4024, 0x4025, 0x4026,
-  0x4027, 0x4028, 0x4029, 0x402a, 0x402b, 0x402c, 0x402d, 0x402e,
-  0x402f, 0x4030, 0x4031, 0x4032, 0x4033, 0x4034, 0x4035, 0x4036,
-  0x4037, 0x4038, 0x4039, 0x403a, 0x403b, 0x403c, 0x403d, 0x403e,
-  0x403f, 0x4040, 0x4041, 0x4042, 0x4043, 0x4044, 0x4045, 0x4046,
-  0x4047, 0x4048, 0x4049, 0x404a, 0x404b, 0x404c, 0x404d, 0x404e,
-  0x404f, 0x4050, 0x4051, 0x4052, 0x4053, 0x4054, 0x4055, 0x4056,
-  0x4057, 0x4058, 0x4059, 0x405a, 0x405b, 0x405c, 0x405d, 0x405e,
-  0x405f, 0x4060, 0x4061, 0x4062, 0x4063, 0x4064, 0x4065, 0x4066,
-  0x4067, 0x4068, 0x4069, 0x406a, 0x406b, 0x406c, 0x406d, 0x406e,
-  0x406f, 0x4070, 0x4071, 0x4072, 0x4073, 0x4074, 0x4075, 0x4076,
-  0x4077, 0x4078, 0x4079, 0x407a, 0x407b, 0x407c, 0x407d, 0x407e,
-  0x4121, 0x4122, 0x4123, 0x4124, 0x4125, 0x4126, 0x4127, 0x4128,
-  0x4129, 0x412a, 0x412b, 0x412c, 0x412d, 0x412e, 0x412f, 0x4130,
-  0x4131, 0x4132, 0x4133, 0x4134, 0x4135, 0x4136, 0x4137, 0x4138,
-  0x4139, 0x413a, 0x413b, 0x413c, 0x413d, 0x413e, 0x413f, 0x4140,
-  0x4141, 0x4142, 0x4143, 0x4144, 0x4145, 0x4146, 0x4147, 0x4148,
-  0x4149, 0x414a, 0x414b, 0x414c, 0x414d, 0x414e, 0x414f, 0x4150,
-  0x4151, 0x4152, 0x4153, 0x4154, 0x4155, 0x4156, 0x4157, 0x4158,
-  0x4159, 0x415a, 0x415b, 0x415c, 0x415d, 0x415e, 0x415f, 0x4160,
-  0x4161, 0x4162, 0x4163, 0x4164, 0x4165, 0x4166, 0x4167, 0x4168,
-  0x4169, 0x416a, 0x416b, 0x416c, 0x416d, 0x416e, 0x416f, 0x4170,
-  0x4171, 0x4172, 0x4173, 0x4174, 0x4175, 0x4176, 0x4177, 0x4178,
-  0x4179, 0x417a, 0x417b, 0x417c, 0x417d, 0x417e, 0x4221, 0x4222,
-  0x4223, 0x4224, 0x4225, 0x4226, 0x4227, 0x4228, 0x4229, 0x422a,
-  0x422b, 0x422c, 0x422d, 0x422e, 0x422f, 0x4230, 0x4231, 0x4232,
-  0x4233, 0x4234, 0x4235, 0x4236, 0x4237, 0x4238, 0x4239, 0x423a,
-  0x423b, 0x423c, 0x423d, 0x423e, 0x423f, 0x4240, 0x4241, 0x4242,
-  0x4243, 0x4244, 0x4245, 0x4246, 0x4247, 0x4248, 0x4249, 0x424a,
-  0x424b, 0x424c, 0x424d, 0x424e, 0x424f, 0x4250, 0x4251, 0x4252,
-  0x4253, 0x4254, 0x4255, 0x4256, 0x4257, 0x4258, 0x4259, 0x425a,
-  0x425b, 0x425c, 0x425d, 0x425e, 0x425f, 0x4260, 0x4261, 0x4262,
-  0x4263, 0x4264, 0x4265, 0x4266, 0x4267, 0x4268, 0x4269, 0x426a,
-  0x426b, 0x426c, 0x426d, 0x426e, 0x426f, 0x4270, 0x4271, 0x4272,
-  0x4273, 0x4274, 0x4275, 0x4276, 0x4277, 0x4278, 0x4279, 0x427a,
-  0x427b, 0x427c, 0x427d, 0x427e, 0x4321, 0x4322, 0x4323, 0x4324,
-  0x4325, 0x4326, 0x4327, 0x4328, 0x4329, 0x432a, 0x432b, 0x432c,
-  0x432d, 0x432e, 0x432f, 0x4330, 0x4331, 0x4332, 0x4333, 0x4334,
-  0x4335, 0x4336, 0x4337, 0x4338, 0x4339, 0x433a, 0x433b, 0x433c,
-  0x433d, 0x433e, 0x433f, 0x4340, 0x4341, 0x4342, 0x4343, 0x4344,
-  0x4345, 0x4346, 0x4347, 0x4348, 0x4349, 0x434a, 0x434b, 0x434c,
-  0x434d, 0x434e, 0x434f, 0x4350, 0x4351, 0x4352, 0x4353, 0x4354,
-  0x4355, 0x4356, 0x4357, 0x4358, 0x4359, 0x435a, 0x435b, 0x435c,
-  0x435d, 0x435e, 0x435f, 0x4360, 0x4361, 0x4362, 0x4363, 0x4364,
-  0x4365, 0x4366, 0x4367, 0x4368, 0x4369, 0x436a, 0x436b, 0x436c,
-  0x436d, 0x436e, 0x436f, 0x4370, 0x4371, 0x4372, 0x4373, 0x4374,
-  0x4375, 0x4376, 0x4377, 0x4378, 0x4379, 0x437a, 0x437b, 0x437c,
-  0x437d, 0x437e, 0x4421, 0x4422, 0x4423, 0x4424, 0x4425, 0x4426,
-  0x4427, 0x4428, 0x4429, 0x442a, 0x442b, 0x442c, 0x442d, 0x442e,
-  0x442f, 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4435, 0x4436,
-  0x4437, 0x4438, 0x4439, 0x443a, 0x443b, 0x443c, 0x443d, 0x443e,
-  0x443f, 0x4440, 0x4441, 0x4442, 0x4443, 0x4444, 0x4445, 0x4446,
-  0x4447, 0x4448, 0x4449, 0x444a, 0x444b, 0x444c, 0x444d, 0x444e,
-  0x444f, 0x4450, 0x4451, 0x4452, 0x4453, 0x4454, 0x4455, 0x4456,
-  0x4457, 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 0x445e,
-  0x445f, 0x4460, 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4466,
-  0x4467, 0x4468, 0x4469, 0x446a, 0x446b, 0x446c, 0x446d, 0x446e,
-  0x446f, 0x4470, 0x4471, 0x4472, 0x4473, 0x4474, 0x4475, 0x4476,
-  0x4477, 0x4478, 0x4479, 0x447a, 0x447b, 0x447c, 0x447d, 0x447e,
-  0x4521, 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527, 0x4528,
-  0x4529, 0x452a, 0x452b, 0x452c, 0x452d, 0x452e, 0x452f, 0x4530,
-  0x4531, 0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537, 0x4538,
-  0x4539, 0x453a, 0x453b, 0x453c, 0x453d, 0x453e, 0x453f, 0x4540,
-  0x4541, 0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, 0x4548,
-  0x4549, 0x454a, 0x454b, 0x454c, 0x454d, 0x454e, 0x454f, 0x4550,
-  0x4551, 0x4552, 0x4553, 0x4554, 0x4555, 0x4556, 0x4557, 0x4558,
-  0x4559, 0x455a, 0x455b, 0x455c, 0x455d, 0x455e, 0x455f, 0x4560,
-  0x4561, 0x4562, 0x4563, 0x4564, 0x4565, 0x4566, 0x4567, 0x4568,
-  0x4569, 0x456a, 0x456b, 0x456c, 0x456d, 0x456e, 0x456f, 0x4570,
-  0x4571, 0x4572, 0x4573, 0x4574, 0x4575, 0x4576, 0x4577, 0x4578,
-  0x4579, 0x457a, 0x457b, 0x457c, 0x457d, 0x457e, 0x4621, 0x4622,
-  0x4623, 0x4624, 0x4625, 0x4626, 0x4627, 0x4628, 0x4629, 0x462a,
-  0x462b, 0x462c, 0x462d, 0x462e, 0x462f, 0x4630, 0x4631, 0x4632,
-  0x4633, 0x4634, 0x4635, 0x4636, 0x4637, 0x4638, 0x4639, 0x463a,
-  0x463b, 0x463c, 0x463d, 0x463e, 0x463f, 0x4640, 0x4641, 0x4642,
-  0x4643, 0x4644, 0x4645, 0x4646, 0x4647, 0x4648, 0x4649, 0x464a,
-  0x464b, 0x464c, 0x464d, 0x464e, 0x464f, 0x4650, 0x4651, 0x4652,
-  0x4653, 0x4654, 0x4655, 0x4656, 0x4657, 0x4658, 0x4659, 0x465a,
-  0x465b, 0x465c, 0x465d, 0x465e, 0x465f, 0x4660, 0x4661, 0x4662,
-  0x4663, 0x4664, 0x4665, 0x4666, 0x4667, 0x4668, 0x4669, 0x466a,
-  0x466b, 0x466c, 0x466d, 0x466e, 0x466f, 0x4670, 0x4671, 0x4672,
-  0x4673, 0x4674, 0x4675, 0x4676, 0x4677, 0x4678, 0x4679, 0x467a,
-  0x467b, 0x467c, 0x467d, 0x467e, 0x4721, 0x4722, 0x4723, 0x4724,
-  0x4725, 0x4726, 0x4727, 0x4728, 0x4729, 0x472a, 0x472b, 0x472c,
-  0x472d, 0x472e, 0x472f, 0x4730, 0x4731, 0x4732, 0x4733, 0x4734,
-  0x4735, 0x4736, 0x4737, 0x4738, 0x4739, 0x473a, 0x473b, 0x473c,
-  0x473d, 0x473e, 0x473f, 0x4740, 0x4741, 0x4742, 0x4743, 0x4744,
-  0x4745, 0x4746, 0x4747, 0x4748, 0x4749, 0x474a, 0x474b, 0x474c,
-  0x474d, 0x474e, 0x474f, 0x4750, 0x4751, 0x4752, 0x4753, 0x4754,
-  0x4755, 0x4756, 0x4757, 0x4758, 0x4759, 0x475a, 0x475b, 0x475c,
-  0x475d, 0x475e, 0x475f, 0x4760, 0x4761, 0x4762, 0x4763, 0x4764,
-  0x4765, 0x4766, 0x4767, 0x4768, 0x4769, 0x476a, 0x476b, 0x476c,
-  0x476d, 0x476e, 0x476f, 0x4770, 0x4771, 0x4772, 0x4773, 0x4774,
-  0x4775, 0x4776, 0x4777, 0x4778, 0x4779, 0x477a, 0x477b, 0x477c,
-  0x477d, 0x477e, 0x4821, 0x4822, 0x4823, 0x4824, 0x4825, 0x4826,
-  0x4827, 0x4828, 0x4829, 0x482a, 0x482b, 0x482c, 0x482d, 0x482e,
-  0x482f, 0x4830, 0x4831, 0x4832, 0x4833, 0x4834, 0x4835, 0x4836,
-  0x4837, 0x4838, 0x4839, 0x483a, 0x483b, 0x483c, 0x483d, 0x483e,
-  0x483f, 0x4840, 0x4841, 0x4842, 0x4843, 0x4844, 0x4845, 0x4846,
-  0x4847, 0x4848, 0x4849, 0x484a, 0x484b, 0x484c, 0x484d, 0x484e,
-  0x484f, 0x4850, 0x4851, 0x4852, 0x4853, 0x4854, 0x4855, 0x4856,
-  0x4857, 0x4858, 0x4859, 0x485a, 0x485b, 0x485c, 0x485d, 0x485e,
-  0x485f, 0x4860, 0x4861, 0x4862, 0x4863, 0x4864, 0x4865, 0x4866,
-  0x4867, 0x4868, 0x4869, 0x486a, 0x486b, 0x486c, 0x486d, 0x486e,
-  0x486f, 0x4870, 0x4871, 0x4872, 0x4873, 0x4874, 0x4875, 0x4876,
-  0x4877, 0x4878, 0x4879, 0x487a, 0x487b, 0x487c, 0x487d, 0x487e,
-  0x4b50, 0x4b56, 0x4b67, 0x4d4f, 0x4d68, 0x4e2d, 0x4f7b, 0x5022,
-  0x5038, 0x5050, 0x505d, 0x5154, 0x5155, 0x5158, 0x515b, 0x515c,
-  0x515d, 0x515e, 0x515f, 0x5160, 0x5162, 0x5163, 0x5164, 0x5165,
-  0x5166, 0x5168, 0x5169, 0x516a, 0x516b, 0x516d, 0x516f, 0x5170,
-  0x5172, 0x5176, 0x517a, 0x517c, 0x517d, 0x517e, 0x5222, 0x5223,
-  0x5227, 0x5228, 0x5229, 0x522a, 0x522b, 0x522d, 0x5232, 0x523e,
-  0x5242, 0x5243, 0x5244, 0x5246, 0x5247, 0x5248, 0x5249, 0x524a,
-  0x524b, 0x524d, 0x524e, 0x524f, 0x5250, 0x5251, 0x5252, 0x5253,
-  0x5254, 0x5255, 0x5256, 0x5257, 0x5259, 0x525a, 0x525e, 0x525f,
-  0x5261, 0x5262, 0x5264, 0x5265, 0x5266, 0x5267, 0x5268, 0x5269,
-  0x526a, 0x526b, 0x5270, 0x5271, 0x5272, 0x5273, 0x5274, 0x5275,
-  0x5277, 0x5278, 0x5466, 0x547c, 0x5525, 0x552b, 0x552e, 0x5638,
-  0x564d, 0x574b, 0x5764, 0x5b45, 0x5b64, 0x5c25, 0x5d25, 0x5d55,
-  0x5d74, 0x5e7c, 0x5e7e, 0x5f33, 0x5f61, 0x5f68, 0x6071, 0x612d,
-  0x616d, 0x6375, 0x6421, 0x6429, 0x652e, 0x6531, 0x6532, 0x6539,
-  0x653b, 0x653c, 0x6544, 0x654e, 0x6550, 0x6552, 0x6556, 0x657a,
-  0x657b, 0x657c, 0x657e, 0x6621, 0x6624, 0x6627, 0x662d, 0x662f,
-  0x6630, 0x6631, 0x6633, 0x6637, 0x6638, 0x663c, 0x6644, 0x6646,
-  0x6647, 0x664a, 0x6652, 0x6656, 0x6659, 0x665c, 0x665f, 0x6661,
-  0x6664, 0x6665, 0x6666, 0x6668, 0x666a, 0x666b, 0x666c, 0x666f,
-  0x6671, 0x6672, 0x6675, 0x6676, 0x6677, 0x6679, 0x6721, 0x6726,
-  0x6729, 0x672a, 0x672c, 0x672d, 0x6730, 0x673f, 0x6741, 0x6746,
-  0x6747, 0x674b, 0x674d, 0x674f, 0x6750, 0x6753, 0x675f, 0x6764,
-  0x6766, 0x6777, 0x6867, 0x6868, 0x6870, 0x6871, 0x6877, 0x6879,
-  0x687b, 0x687e, 0x6927, 0x692c, 0x694c, 0x6977, 0x6a41, 0x6a65,
-  0x6a74, 0x6a77, 0x6a7c, 0x6a7e, 0x6b24, 0x6b27, 0x6b29, 0x6b2a,
-  0x6b3a, 0x6b3b, 0x6b3d, 0x6b41, 0x6b42, 0x6b46, 0x6b47, 0x6b4c,
-  0x6b4f, 0x6b50, 0x6b51, 0x6b52, 0x6b58, 0x6c26, 0x6c27, 0x6c2a,
-  0x6c2f, 0x6c30, 0x6c31, 0x6c32, 0x6c35, 0x6c38, 0x6c3a, 0x6c40,
-  0x6c41, 0x6c45, 0x6c46, 0x6c49, 0x6c4a, 0x6c55, 0x6c5d, 0x6c5e,
-  0x6c61, 0x6c64, 0x6c67, 0x6c68, 0x6c77, 0x6c78, 0x6c7a, 0x6d21,
-  0x6d22, 0x6d23, 0x6d6e, 0x6e5b, 0x723d, 0x727a, 0x7331, 0x7427,
-  0x746e, 0x7674, 0x7676, 0x7738, 0x7748, 0x7753, 0x785b, 0x7870,
-  0x7a21, 0x7a22, 0x7a66, 0x7c29, 0x2321, 0x2322, 0x2323, 0x2324,
-  0x2325, 0x2326, 0x2327, 0x2328, 0x2329, 0x232a, 0x232b, 0x232c,
-  0x232d, 0x232e, 0x232f, 0x2330, 0x2331, 0x2332, 0x2333, 0x2334,
-  0x2335, 0x2336, 0x2337, 0x2338, 0x2339, 0x233a, 0x233b, 0x233c,
-  0x233d, 0x233e, 0x233f, 0x2340, 0x2341, 0x2342, 0x2343, 0x2344,
-  0x2345, 0x2346, 0x2347, 0x2348, 0x2349, 0x234a, 0x234b, 0x234c,
-  0x234d, 0x234e, 0x234f, 0x2350, 0x2351, 0x2352, 0x2353, 0x2354,
-  0x2355, 0x2356, 0x2357, 0x2358, 0x2359, 0x235a, 0x235b, 0x212c,
-  0x235d, 0x235e, 0x235f, 0x2360, 0x2361, 0x2362, 0x2363, 0x2364,
-  0x2365, 0x2366, 0x2367, 0x2368, 0x2369, 0x236a, 0x236b, 0x236c,
-  0x236d, 0x236e, 0x236f, 0x2370, 0x2371, 0x2372, 0x2373, 0x2374,
-  0x2375, 0x2376, 0x2377, 0x2378, 0x2379, 0x237a, 0x237b, 0x237c,
-  0x237d, 0x2226, 0x214b, 0x214c, 0x217e, 0x237e, 0x214d, 0x235c,
-};
-
-static const Summary16 ksc5601_uni2indx_page00[70] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x2592 }, {    6, 0xf7df },
-  {   20, 0x0040 }, {   21, 0xc181 }, {   26, 0x0040 }, {   27, 0x4181 },
-  /* 0x0100 */
-  {   31, 0x0000 }, {   31, 0x0002 }, {   32, 0x00c0 }, {   34, 0x810e },
-  {   39, 0x0e07 }, {   45, 0x000c }, {   47, 0x00c0 }, {   49, 0x0000 },
-  {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 },
-  {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 },
-  /* 0x0200 */
-  {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 },
-  {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 },
-  {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 },
-  {   49, 0x0080 }, {   50, 0x2f01 }, {   56, 0x0000 }, {   56, 0x0000 },
-  /* 0x0300 */
-  {   56, 0x0000 }, {   56, 0x0000 }, {   56, 0x0000 }, {   56, 0x0000 },
-  {   56, 0x0000 }, {   56, 0x0000 }, {   56, 0x0000 }, {   56, 0x0000 },
-  {   56, 0x0000 }, {   56, 0xfffe }, {   71, 0x03fb }, {   80, 0xfffe },
-  {   95, 0x03fb }, {  104, 0x0000 }, {  104, 0x0000 }, {  104, 0x0000 },
-  /* 0x0400 */
-  {  104, 0x0002 }, {  105, 0xffff }, {  121, 0xffff }, {  137, 0xffff },
-  {  153, 0xffff }, {  169, 0x0002 },
-};
-static const Summary16 ksc5601_uni2indx_page20[103] = {
-  /* 0x2000 */
-  {  170, 0x0000 }, {  170, 0x3320 }, {  175, 0x0063 }, {  179, 0x080d },
-  {  183, 0x0000 }, {  183, 0x0000 }, {  183, 0x0000 }, {  183, 0x8010 },
-  {  185, 0x001e }, {  189, 0x0000 }, {  189, 0x0000 }, {  189, 0x0000 },
-  {  189, 0x0000 }, {  189, 0x0000 }, {  189, 0x0000 }, {  189, 0x0000 },
-  /* 0x2100 */
-  {  189, 0x0208 }, {  191, 0x0048 }, {  193, 0x0846 }, {  197, 0x0000 },
-  {  197, 0x0000 }, {  197, 0x7818 }, {  203, 0x03ff }, {  213, 0x03ff },
-  {  223, 0x0000 }, {  223, 0x03ff }, {  233, 0x0000 }, {  233, 0x0000 },
-  {  233, 0x0000 }, {  233, 0x0014 }, {  235, 0x0000 }, {  235, 0x0000 },
-  /* 0x2200 */
-  {  235, 0x898d }, {  242, 0x6402 }, {  246, 0x5fa1 }, {  255, 0x3030 },
-  {  259, 0x0000 }, {  259, 0x0004 }, {  260, 0x0c33 }, {  266, 0x0000 },
-  {  266, 0x00cc }, {  270, 0x0200 }, {  271, 0x0020 }, {  272, 0x0000 },
-  {  272, 0x0000 }, {  272, 0x0000 }, {  272, 0x0000 }, {  272, 0x0000 },
-  /* 0x2300 */
-  {  272, 0x0000 }, {  272, 0x0004 }, {  273, 0x0000 }, {  273, 0x0000 },
-  {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 },
-  {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 },
-  {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 },
-  /* 0x2400 */
-  {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 },
-  {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x7fff }, {  288, 0xfff0 },
-  {  300, 0x0007 }, {  303, 0xf000 }, {  307, 0xffff }, {  323, 0x003f },
-  {  329, 0x0000 }, {  329, 0xffff }, {  345, 0x03ff }, {  355, 0x0000 },
-  /* 0x2500 */
-  {  355, 0xf00f }, {  363, 0xffff }, {  379, 0xffff }, {  395, 0xffff },
-  {  411, 0x0fff }, {  423, 0x0000 }, {  423, 0x0000 }, {  423, 0x0000 },
-  {  423, 0x0000 }, {  423, 0x0004 }, {  424, 0x03fb }, {  433, 0x30cc },
-  {  439, 0xc9c3 }, {  447, 0x0003 }, {  449, 0x0000 }, {  449, 0x0000 },
-  /* 0x2600 */
-  {  449, 0xc060 }, {  453, 0x5000 }, {  455, 0x0000 }, {  455, 0x0000 },
-  {  455, 0x0005 }, {  457, 0x0000 }, {  457, 0x37bb },
-};
-static const Summary16 ksc5601_uni2indx_page30[62] = {
-  /* 0x3000 */
-  {  468, 0xff0f }, {  480, 0x003b }, {  485, 0x0000 }, {  485, 0x0000 },
-  {  485, 0xfffe }, {  500, 0xffff }, {  516, 0xffff }, {  532, 0xffff },
-  {  548, 0xffff }, {  564, 0x000f }, {  568, 0xfffe }, {  583, 0xffff },
-  {  599, 0xffff }, {  615, 0xffff }, {  631, 0xffff }, {  647, 0x007f },
-  /* 0x3100 */
-  {  654, 0x0000 }, {  654, 0x0000 }, {  654, 0x0000 }, {  654, 0xfffe },
-  {  669, 0xffff }, {  685, 0xffff }, {  701, 0xffff }, {  717, 0xffff },
-  {  733, 0x7fff }, {  748, 0x0000 }, {  748, 0x0000 }, {  748, 0x0000 },
-  {  748, 0x0000 }, {  748, 0x0000 }, {  748, 0x0000 }, {  748, 0x0000 },
-  /* 0x3200 */
-  {  748, 0xffff }, {  764, 0x1fff }, {  777, 0x0000 }, {  777, 0x0000 },
-  {  777, 0x0000 }, {  777, 0x0000 }, {  777, 0xffff }, {  793, 0x8fff },
-  {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 },
-  {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 },
-  /* 0x3300 */
-  {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 },
-  {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 },
-  {  806, 0xff1f }, {  819, 0xffff }, {  835, 0xffff }, {  851, 0xffff },
-  {  867, 0x87ff }, {  879, 0x3949 },
-};
-static const Summary16 ksc5601_uni2indx_page4e[1306] = {
-  /* 0x4e00 */
-  {  886, 0x2f8b }, {  895, 0x4372 }, {  902, 0x2000 }, {  903, 0x0b04 },
-  {  907, 0xe82c }, {  914, 0xe340 }, {  920, 0x2800 }, {  922, 0x40c8 },
-  {  926, 0x5944 }, {  932, 0x4937 }, {  940, 0x7976 }, {  950, 0x0440 },
-  {  952, 0x2c93 }, {  959, 0xa3f0 }, {  967, 0x0038 }, {  970, 0x08c5 },
-  /* 0x4f00 */
-  {  975, 0xee02 }, {  982, 0x0003 }, {  984, 0x8000 }, {  985, 0x3550 },
-  {  991, 0xe1c8 }, {  998, 0x1e23 }, { 1005, 0x8200 }, { 1007, 0xc449 },
-  { 1013, 0xad5a }, { 1022, 0x2942 }, { 1027, 0xc000 }, { 1029, 0x8060 },
-  { 1032, 0x461c }, { 1038, 0xa49a }, { 1045, 0xc003 }, { 1049, 0x052a },
-  /* 0x5000 */
-  { 1054, 0x2a44 }, { 1059, 0xd646 }, { 1067, 0x3dda }, { 1077, 0x0800 },
-  { 1078, 0x8388 }, { 1083, 0x1420 }, { 1086, 0x0020 }, { 1087, 0x0170 },
-  { 1091, 0x2021 }, { 1094, 0x0302 }, { 1097, 0x3000 }, { 1099, 0x40ac },
-  { 1104, 0x8620 }, { 1108, 0x4462 }, { 1113, 0x20a0 }, { 1116, 0x8a00 },
-  /* 0x5100 */
-  { 1119, 0x0253 }, { 1124, 0x8004 }, { 1126, 0x0402 }, { 1128, 0x1484 },
-  { 1132, 0x7bfb }, { 1145, 0x1004 }, { 1147, 0x7fa4 }, { 1157, 0x11e2 },
-  { 1163, 0x2441 }, { 1167, 0x00a4 }, { 1170, 0x1421 }, { 1174, 0x20c0 },
-  { 1177, 0x3a50 }, { 1183, 0x7000 }, { 1186, 0x0002 }, { 1187, 0x2743 },
-  /* 0x5200 */
-  { 1194, 0x45c9 }, { 1201, 0x2082 }, { 1204, 0x4630 }, { 1209, 0x0fc1 },
-  { 1216, 0x3c88 }, { 1222, 0x2850 }, { 1226, 0x8602 }, { 1230, 0xa024 },
-  { 1234, 0x2388 }, { 1239, 0x8806 }, { 1243, 0x0e19 }, { 1249, 0x4000 },
-  { 1250, 0x22aa }, { 1256, 0xeb64 }, { 1265, 0x001c }, { 1268, 0xcd28 },
-  /* 0x5300 */
-  { 1275, 0xa120 }, { 1279, 0x02e1 }, { 1284, 0x840b }, { 1289, 0x8200 },
-  { 1291, 0x279b }, { 1300, 0x549e }, { 1308, 0x8141 }, { 1312, 0xa0b3 },
-  { 1319, 0x0010 }, { 1320, 0x8508 }, { 1324, 0x2061 }, { 1328, 0x0800 },
-  { 1329, 0x2f08 }, { 1335, 0x08d0 }, { 1339, 0xbe3e }, { 1350, 0x010f },
-  /* 0x5400 */
-  { 1355, 0xf718 }, { 1364, 0xa803 }, { 1369, 0x0a41 }, { 1373, 0x5b08 },
-  { 1379, 0x0504 }, { 1382, 0x0002 }, { 1383, 0x0500 }, { 1385, 0x382a },
-  { 1391, 0x5041 }, { 1395, 0x0001 }, { 1396, 0x1910 }, { 1400, 0x2108 },
-  { 1403, 0x0313 }, { 1408, 0x0000 }, { 1408, 0x6122 }, { 1413, 0x0404 },
-  /* 0x5500 */
-  { 1415, 0x40d0 }, { 1419, 0x1001 }, { 1421, 0x8000 }, { 1422, 0x4022 },
-  { 1425, 0x8050 }, { 1428, 0x4048 }, { 1431, 0x0008 }, { 1432, 0x1000 },
-  { 1433, 0x06d1 }, { 1439, 0x3700 }, { 1444, 0x5e80 }, { 1450, 0x0000 },
-  { 1450, 0x00a0 }, { 1452, 0x9410 }, { 1456, 0x0018 }, { 1458, 0x6000 },
-  /* 0x5600 */
-  { 1460, 0x0240 }, { 1462, 0x0090 }, { 1464, 0x8000 }, { 1465, 0x0054 },
-  { 1468, 0x0000 }, { 1468, 0x0008 }, { 1469, 0x0900 }, { 1471, 0x0010 },
-  { 1472, 0x0040 }, { 1473, 0x0000 }, { 1473, 0x5020 }, { 1476, 0x1010 },
-  { 1478, 0x2400 }, { 1480, 0x4c02 }, { 1484, 0x0001 }, { 1485, 0x0601 },
-  /* 0x5700 */
-  { 1488, 0x2918 }, { 1493, 0x814c }, { 1498, 0x2100 }, { 1500, 0x0801 },
-  { 1502, 0x6485 }, { 1508, 0x0003 }, { 1510, 0x4452 }, { 1515, 0x1021 },
-  { 1518, 0x0904 }, { 1521, 0x0008 }, { 1522, 0x000d }, { 1525, 0x0000 },
-  { 1525, 0x4988 }, { 1530, 0x8000 }, { 1531, 0x0001 }, { 1532, 0x1691 },
-  /* 0x5800 */
-  { 1538, 0x0765 }, { 1545, 0x4000 }, { 1546, 0x8492 }, { 1551, 0x0433 },
-  { 1556, 0x8c00 }, { 1559, 0x4592 }, { 1565, 0x0016 }, { 1568, 0x5220 },
-  { 1572, 0x0228 }, { 1575, 0xd008 }, { 1579, 0x4300 }, { 1582, 0x4c08 },
-  { 1586, 0x40a2 }, { 1590, 0xc32a }, { 1597, 0x9810 }, { 1601, 0x2e00 },
-  /* 0x5900 */
-  { 1605, 0x8000 }, { 1606, 0x1670 }, { 1612, 0x6e84 }, { 1619, 0x4082 },
-  { 1622, 0xc390 }, { 1628, 0x04b3 }, { 1634, 0x7c85 }, { 1642, 0x2118 },
-  { 1646, 0x041c }, { 1650, 0x02c8 }, { 1654, 0x1120 }, { 1657, 0x4a00 },
-  { 1660, 0x0a48 }, { 1664, 0x361b }, { 1672, 0x5540 }, { 1677, 0x8900 },
-  /* 0x5a00 */
-  { 1680, 0x000a }, { 1682, 0x9902 }, { 1687, 0x0221 }, { 1690, 0x1040 },
-  { 1692, 0x0242 }, { 1695, 0x0400 }, { 1696, 0x0044 }, { 1698, 0x0000 },
-  { 1698, 0x0000 }, { 1698, 0x0c04 }, { 1701, 0x0010 }, { 1702, 0x0000 },
-  { 1702, 0x1216 }, { 1707, 0x0000 }, { 1707, 0x0242 }, { 1710, 0x0000 },
-  /* 0x5b00 */
-  { 1710, 0x1a20 }, { 1714, 0x0040 }, { 1715, 0x0400 }, { 1716, 0x0000 },
-  { 1716, 0x0009 }, { 1718, 0xb5b3 }, { 1728, 0x0a18 }, { 1732, 0x1523 },
-  { 1738, 0x9ba0 }, { 1745, 0x1fe8 }, { 1754, 0x507c }, { 1761, 0x8379 },
-  { 1769, 0x10fd }, { 1777, 0xc09d }, { 1784, 0xdbf6 }, { 1796, 0x0560 },
-  /* 0x5c00 */
-  { 1800, 0xef92 }, { 1810, 0x0242 }, { 1813, 0x0110 }, { 1815, 0xdf02 },
-  { 1823, 0x6961 }, { 1830, 0x0822 }, { 1833, 0x9035 }, { 1839, 0x0202 },
-  { 1841, 0x0000 }, { 1841, 0x0003 }, { 1843, 0x1a02 }, { 1847, 0x45aa },
-  { 1854, 0x0001 }, { 1855, 0x0200 }, { 1856, 0x8101 }, { 1859, 0x2851 },
-  /* 0x5d00 */
-  { 1864, 0x6080 }, { 1867, 0x02d2 }, { 1872, 0x0280 }, { 1874, 0x0000 },
-  { 1874, 0x1800 }, { 1876, 0x0001 }, { 1877, 0x9200 }, { 1880, 0x0000 },
-  { 1880, 0x0880 }, { 1882, 0x2000 }, { 1883, 0x0405 }, { 1886, 0x3500 },
-  { 1890, 0x2000 }, { 1891, 0x6044 }, { 1895, 0x49e6 }, { 1903, 0x609e },
-  /* 0x5e00 */
-  { 1910, 0x104c }, { 1914, 0x2a42 }, { 1919, 0x2820 }, { 1922, 0xa148 },
-  { 1927, 0x10b1 }, { 1932, 0x8020 }, { 1934, 0x000e }, { 1937, 0x7b9c },
-  { 1947, 0x8490 }, { 1951, 0x14a0 }, { 1955, 0x28c1 }, { 1960, 0x41e0 },
-  { 1965, 0x0704 }, { 1969, 0x8c49 }, { 1975, 0x100d }, { 1979, 0x0cc8 },
-  /* 0x5f00 */
-  { 1984, 0x8412 }, { 1988, 0x89ba }, { 1996, 0x02c0 }, { 1999, 0x1422 },
-  { 2003, 0x5500 }, { 2007, 0x0ac0 }, { 2011, 0x3ec4 }, { 2019, 0x9283 },
-  { 2025, 0x1ca3 }, { 2032, 0x4387 }, { 2039, 0x4703 }, { 2045, 0x22a0 },
-  { 2049, 0x3028 }, { 2053, 0x03c0 }, { 2057, 0x0801 }, { 2059, 0xa020 },
-  /* 0x6000 */
-  { 2062, 0x8000 }, { 2063, 0x3044 }, { 2067, 0x85a3 }, { 2074, 0x0000 },
-  { 2074, 0x200e }, { 2078, 0x2225 }, { 2083, 0xb73c }, { 2093, 0x0001 },
-  { 2094, 0x3220 }, { 2098, 0x8c50 }, { 2103, 0x0099 }, { 2107, 0x315d },
-  { 2115, 0x00a0 }, { 2117, 0x9402 }, { 2121, 0x0003 }, { 2123, 0x0e4b },
-  /* 0x6100 */
-  { 2130, 0xe342 }, { 2137, 0x8c20 }, { 2141, 0x0080 }, { 2142, 0xd091 },
-  { 2148, 0x1d94 }, { 2155, 0xa328 }, { 2161, 0x499c }, { 2168, 0x60c1 },
-  { 2173, 0x4406 }, { 2177, 0x0713 }, { 2183, 0x5a90 }, { 2189, 0x4444 },
-  { 2193, 0x0f88 }, { 2199, 0x0000 }, { 2199, 0x0040 }, { 2200, 0x95c4 },
-  /* 0x6200 */
-  { 2207, 0x7581 }, { 2214, 0x8447 }, { 2220, 0x4402 }, { 2223, 0xc053 },
-  { 2229, 0x2b83 }, { 2236, 0x0108 }, { 2238, 0x4000 }, { 2239, 0x9242 },
-  { 2244, 0x0611 }, { 2248, 0x09a6 }, { 2254, 0x0800 }, { 2255, 0x3222 },
-  { 2260, 0xb384 }, { 2267, 0x1bdd }, { 2277, 0xf000 }, { 2281, 0xc08a },
-  /* 0x6300 */
-  { 2286, 0x0282 }, { 2289, 0x0002 }, { 2290, 0x8800 }, { 2292, 0x6c00 },
-  { 2296, 0x9200 }, { 2299, 0x0021 }, { 2301, 0x4180 }, { 2304, 0x8c84 },
-  { 2309, 0x1308 }, { 2313, 0x0944 }, { 2317, 0x07a7 }, { 2325, 0x0000 },
-  { 2325, 0x8051 }, { 2329, 0x0c41 }, { 2333, 0x6002 }, { 2336, 0x00d0 },
-  /* 0x6400 */
-  { 2339, 0xa000 }, { 2341, 0x10d0 }, { 2345, 0x3004 }, { 2348, 0x4400 },
-  { 2350, 0x0000 }, { 2350, 0x0100 }, { 2351, 0x8201 }, { 2354, 0x0700 },
-  { 2357, 0x0100 }, { 2358, 0x440e }, { 2363, 0x6830 }, { 2368, 0x0805 },
-  { 2371, 0x64b2 }, { 2378, 0x0514 }, { 2382, 0x10e6 }, { 2388, 0x4414 },
-  /* 0x6500 */
-  { 2392, 0x0011 }, { 2394, 0x2100 }, { 2396, 0x9c08 }, { 2401, 0xcbc0 },
-  { 2408, 0xe120 }, { 2413, 0x40c2 }, { 2417, 0x304c }, { 2422, 0x41b4 },
-  { 2428, 0x10ac }, { 2433, 0x9a83 }, { 2440, 0x98b2 }, { 2447, 0x3281 },
-  { 2452, 0x9822 }, { 2457, 0x0084 }, { 2459, 0x3369 }, { 2467, 0xbc12 },
-  /* 0x6600 */
-  { 2474, 0xd6c0 }, { 2481, 0xc03b }, { 2488, 0xa1a1 }, { 2494, 0x0c53 },
-  { 2500, 0x8a1e }, { 2507, 0xea00 }, { 2512, 0xcbf0 }, { 2521, 0x05d8 },
-  { 2527, 0x4390 }, { 2532, 0x21c3 }, { 2538, 0x4805 }, { 2542, 0x4a1c },
-  { 2548, 0x02d0 }, { 2552, 0x3240 }, { 2556, 0x0041 }, { 2558, 0xd79d },
-  /* 0x6700 */
-  { 2569, 0x2b09 }, { 2575, 0xe8b0 }, { 2582, 0x7dc0 }, { 2590, 0x2452 },
-  { 2595, 0xc240 }, { 2599, 0xd04b }, { 2606, 0xa000 }, { 2608, 0xc8ab },
-  { 2616, 0x8a80 }, { 2620, 0x34a9 }, { 2627, 0x8000 }, { 2628, 0x41c9 },
-  { 2634, 0x8010 }, { 2636, 0x241f }, { 2643, 0x9200 }, { 2646, 0x487b },
-  /* 0x6800 */
-  { 2654, 0x0000 }, { 2654, 0x00cc }, { 2658, 0x8406 }, { 2662, 0x3300 },
-  { 2666, 0x410f }, { 2672, 0x001b }, { 2676, 0x2000 }, { 2677, 0x8040 },
-  { 2679, 0x8022 }, { 2682, 0xa098 }, { 2687, 0xa186 }, { 2693, 0x006b },
-  { 2698, 0x2a30 }, { 2703, 0x85a4 }, { 2709, 0x4181 }, { 2713, 0x0604 },
-  /* 0x6900 */
-  { 2716, 0x6021 }, { 2720, 0x0004 }, { 2721, 0x0080 }, { 2722, 0xa001 },
-  { 2725, 0x0400 }, { 2726, 0x46b8 }, { 2733, 0xe90f }, { 2742, 0x03a0 },
-  { 2746, 0x0000 }, { 2746, 0x1820 }, { 2749, 0x40a0 }, { 2752, 0x0810 },
-  { 2754, 0x380a }, { 2759, 0x0001 }, { 2760, 0x0500 }, { 2762, 0xa800 },
-  /* 0x6a00 */
-  { 2765, 0x0404 }, { 2767, 0xc28a }, { 2773, 0x000a }, { 2775, 0x2720 },
-  { 2780, 0x0910 }, { 2783, 0x830c }, { 2788, 0x0802 }, { 2790, 0x0000 },
-  { 2790, 0x6211 }, { 2795, 0x1080 }, { 2797, 0x000c }, { 2799, 0x0808 },
-  { 2801, 0x000c }, { 2803, 0x0c08 }, { 2806, 0x0000 }, { 2806, 0x0840 },
-  /* 0x6b00 */
-  { 2808, 0x1410 }, { 2811, 0x0044 }, { 2813, 0x000b }, { 2816, 0x6404 },
-  { 2820, 0x50c0 }, { 2824, 0x8001 }, { 2826, 0x047e }, { 2833, 0x8984 },
-  { 2838, 0x0658 }, { 2843, 0x4140 }, { 2846, 0xc000 }, { 2848, 0x94a4 },
-  { 2854, 0xa862 }, { 2860, 0x09dc }, { 2867, 0x1800 }, { 2869, 0x0000 },
-  /* 0x6c00 */
-  { 2869, 0x8100 }, { 2871, 0x000a }, { 2873, 0x0008 }, { 2874, 0x4190 },
-  { 2878, 0x4007 }, { 2882, 0xe4a1 }, { 2889, 0x2501 }, { 2893, 0x6445 },
-  { 2899, 0x11ee }, { 2907, 0x0e7d }, { 2916, 0x4800 }, { 2918, 0xfb08 },
-  { 2926, 0x1616 }, { 2932, 0x08a8 }, { 2936, 0xc92e }, { 2944, 0x0009 },
-  /* 0x6d00 */
-  { 2946, 0x1800 }, { 2948, 0x4a82 }, { 2953, 0x06a0 }, { 2957, 0x6b64 },
-  { 2965, 0x0002 }, { 2966, 0x1600 }, { 2969, 0x5648 }, { 2975, 0x8390 },
-  { 2980, 0x73a0 }, { 2987, 0x002a }, { 2990, 0x8000 }, { 2991, 0x0024 },
-  { 2993, 0x88f9 }, { 3001, 0x4702 }, { 3006, 0x4d02 }, { 3011, 0x0faa },
-  /* 0x6e00 */
-  { 3019, 0x0000 }, { 3019, 0x8e80 }, { 3024, 0xb87b }, { 3034, 0x7554 },
-  { 3042, 0x2418 }, { 3046, 0xd940 }, { 3052, 0xc880 }, { 3056, 0x040c },
-  { 3059, 0x0000 }, { 3059, 0xb041 }, { 3064, 0x8c24 }, { 3069, 0x0442 },
-  { 3072, 0x5a34 }, { 3079, 0x001a }, { 3082, 0x8000 }, { 3083, 0xc110 },
-  /* 0x6f00 */
-  { 3087, 0x8046 }, { 3091, 0x0032 }, { 3094, 0x180d }, { 3099, 0x8106 },
-  { 3103, 0x0002 }, { 3104, 0xcd92 }, { 3112, 0x6014 }, { 3116, 0x7401 },
-  { 3121, 0x6112 }, { 3126, 0x0091 }, { 3129, 0xc098 }, { 3134, 0x420a },
-  { 3138, 0x040f }, { 3143, 0x8420 }, { 3146, 0x9a13 }, { 3153, 0x4002 },
-  /* 0x7000 */
-  { 3155, 0x8a62 }, { 3161, 0xfd22 }, { 3170, 0x8188 }, { 3174, 0x4080 },
-  { 3176, 0x1000 }, { 3177, 0x2103 }, { 3181, 0x0808 }, { 3183, 0x3101 },
-  { 3187, 0x4420 }, { 3190, 0x0704 }, { 3194, 0xb812 }, { 3200, 0x0388 },
-  { 3204, 0x8900 }, { 3207, 0xa300 }, { 3211, 0x0000 }, { 3211, 0x2202 },
-  /* 0x7100 */
-  { 3214, 0x1210 }, { 3217, 0x4600 }, { 3220, 0x0042 }, { 3222, 0x0041 },
-  { 3224, 0x5680 }, { 3229, 0x5241 }, { 3234, 0x52f0 }, { 3241, 0x2000 },
-  { 3242, 0x8610 }, { 3246, 0x8214 }, { 3250, 0x1004 }, { 3252, 0x4602 },
-  { 3256, 0x430a }, { 3261, 0x8035 }, { 3266, 0x60e0 }, { 3271, 0xd800 },
-  /* 0x7200 */
-  { 3275, 0x0041 }, { 3277, 0x0801 }, { 3279, 0x3400 }, { 3282, 0x6c65 },
-  { 3290, 0x11c1 }, { 3295, 0xab04 }, { 3301, 0x0286 }, { 3305, 0x2204 },
-  { 3308, 0x0003 }, { 3310, 0x0000 }, { 3310, 0x9084 }, { 3314, 0x0000 },
-  { 3314, 0x4015 }, { 3318, 0x0281 }, { 3321, 0x0202 }, { 3323, 0x3300 },
-  /* 0x7300 */
-  { 3327, 0x0400 }, { 3328, 0x3840 }, { 3332, 0x0e20 }, { 3336, 0xc0c0 },
-  { 3340, 0x0030 }, { 3342, 0x0085 }, { 3345, 0x0500 }, { 3347, 0x0d25 },
-  { 3353, 0x4ad0 }, { 3359, 0x81d0 }, { 3364, 0x2280 }, { 3367, 0x020c },
-  { 3370, 0xb605 }, { 3377, 0x6240 }, { 3381, 0x2679 }, { 3389, 0x6280 },
-  /* 0x7400 */
-  { 3393, 0x02ea }, { 3399, 0x0808 }, { 3401, 0xdd67 }, { 3412, 0x8579 },
-  { 3420, 0x081b }, { 3425, 0xdea0 }, { 3433, 0x8735 }, { 3441, 0x4000 },
-  { 3442, 0x0a8c }, { 3447, 0xd100 }, { 3451, 0x05aa }, { 3457, 0xa225 },
-  { 3463, 0x8440 }, { 3466, 0x1510 }, { 3470, 0x404d }, { 3475, 0x0080 },
-  /* 0x7500 */
-  { 3476, 0x0012 }, { 3478, 0x8d22 }, { 3484, 0x1968 }, { 3490, 0x058f },
-  { 3497, 0x9080 }, { 3500, 0x3a1a }, { 3507, 0x8464 }, { 3512, 0x8561 },
-  { 3518, 0xccc0 }, { 3524, 0x2002 }, { 3526, 0x0820 }, { 3528, 0x732e },
-  { 3537, 0x20a4 }, { 3541, 0x0b34 }, { 3547, 0x0004 }, { 3548, 0x1415 },
-  /* 0x7600 */
-  { 3553, 0x2001 }, { 3555, 0x8200 }, { 3557, 0x0057 }, { 3562, 0x0800 },
-  { 3563, 0x5004 }, { 3566, 0x0044 }, { 3568, 0x1212 }, { 3572, 0x7905 },
-  { 3579, 0x40d0 }, { 3583, 0x0009 }, { 3585, 0x4000 }, { 3586, 0x8400 },
-  { 3588, 0x054c }, { 3593, 0xd844 }, { 3599, 0x409a }, { 3604, 0x5114 },
-  /* 0x7700 */
-  { 3609, 0x0b12 }, { 3614, 0x4000 }, { 3615, 0x0201 }, { 3617, 0x1580 },
-  { 3621, 0x2001 }, { 3623, 0x0800 }, { 3624, 0x084a }, { 3628, 0xc200 },
-  { 3631, 0x0800 }, { 3632, 0x4002 }, { 3634, 0x3020 }, { 3637, 0x9809 },
-  { 3642, 0x0000 }, { 3642, 0x1880 }, { 3645, 0xe22c }, { 3652, 0x0008 },
-  /* 0x7800 */
-  { 3653, 0x0004 }, { 3654, 0x0004 }, { 3655, 0x10e0 }, { 3659, 0x0014 },
-  { 3661, 0x8020 }, { 3663, 0x2000 }, { 3664, 0x9800 }, { 3667, 0x1000 },
-  { 3668, 0x7082 }, { 3673, 0x0082 }, { 3675, 0x0288 }, { 3678, 0x1c00 },
-  { 3681, 0x4c22 }, { 3686, 0x0001 }, { 3687, 0x9100 }, { 3690, 0x0820 },
-  /* 0x7900 */
-  { 3692, 0x4002 }, { 3694, 0x0040 }, { 3695, 0x1c00 }, { 3698, 0x4400 },
-  { 3700, 0x0383 }, { 3705, 0x7cc1 }, { 3713, 0x2121 }, { 3717, 0x8400 },
-  { 3719, 0xe002 }, { 3723, 0x0002 }, { 3724, 0x44c0 }, { 3728, 0xe20a },
-  { 3734, 0x0e03 }, { 3739, 0x8126 }, { 3744, 0x02d0 }, { 3748, 0x0800 },
-  /* 0x7a00 */
-  { 3749, 0x2921 }, { 3754, 0x9690 }, { 3760, 0x4001 }, { 3762, 0xb8c2 },
-  { 3769, 0x6241 }, { 3774, 0x0080 }, { 3775, 0x0a06 }, { 3779, 0xa651 },
-  { 3786, 0x0112 }, { 3789, 0x812c }, { 3794, 0xc600 }, { 3798, 0x0400 },
-  { 3799, 0x0cb0 }, { 3804, 0xa280 }, { 3808, 0xa429 }, { 3814, 0x8640 },
-  /* 0x7b00 */
-  { 3818, 0x8000 }, { 3819, 0x4a02 }, { 3823, 0x3041 }, { 3827, 0x0200 },
-  { 3828, 0xba40 }, { 3834, 0x0057 }, { 3839, 0x5001 }, { 3842, 0x2020 },
-  { 3844, 0x8880 }, { 3847, 0x24b0 }, { 3852, 0x2002 }, { 3854, 0x0112 },
-  { 3857, 0x02d3 }, { 3863, 0x0004 }, { 3864, 0x0211 }, { 3867, 0x0000 },
-  /* 0x7c00 */
-  { 3867, 0x0080 }, { 3868, 0x4004 }, { 3870, 0x0c82 }, { 3874, 0xe000 },
-  { 3877, 0x3008 }, { 3880, 0x0000 }, { 3880, 0x1011 }, { 3883, 0x0008 },
-  { 3884, 0x0208 }, { 3886, 0x81a4 }, { 3891, 0x40a0 }, { 3894, 0x420e },
-  { 3899, 0x0400 }, { 3900, 0xc040 }, { 3903, 0x0081 }, { 3905, 0x4800 },
-  /* 0x7d00 */
-  { 3907, 0x2df5 }, { 3917, 0x0f91 }, { 3924, 0xd807 }, { 3931, 0x0629 },
-  { 3936, 0x007c }, { 3941, 0x4001 }, { 3943, 0x4546 }, { 3949, 0x824e },
-  { 3955, 0xc000 }, { 3957, 0x1008 }, { 3959, 0x3005 }, { 3963, 0xed36 },
-  { 3973, 0x0c80 }, { 3976, 0x6540 }, { 3981, 0x930b }, { 3988, 0x0810 },
-  /* 0x7e00 */
-  { 3990, 0x0600 }, { 3992, 0xe820 }, { 3997, 0xc80a }, { 4002, 0x6082 },
-  { 4006, 0x00ca }, { 4010, 0x4034 }, { 4014, 0x2e02 }, { 4019, 0x1201 },
-  { 4022, 0x9004 }, { 4025, 0x1948 }, { 4030, 0x0000 }, { 4030, 0x0000 },
-  { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 },
-  /* 0x7f00 */
-  { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0540 },
-  { 4033, 0x1000 }, { 4034, 0x0031 }, { 4037, 0x4c00 }, { 4040, 0x02a5 },
-  { 4045, 0x5520 }, { 4050, 0x4410 }, { 4053, 0x0310 }, { 4056, 0x2304 },
-  { 4060, 0x5422 }, { 4065, 0x8034 }, { 4069, 0x0a03 }, { 4073, 0x1201 },
-  /* 0x8000 */
-  { 4076, 0x126b }, { 4083, 0x01a1 }, { 4087, 0x2000 }, { 4088, 0xa048 },
-  { 4092, 0x0448 }, { 4095, 0x4540 }, { 4099, 0x8000 }, { 4100, 0xe08d },
-  { 4107, 0x1af0 }, { 4114, 0x2840 }, { 4117, 0x8626 }, { 4123, 0x0416 },
-  { 4127, 0x5018 }, { 4131, 0x4c00 }, { 4134, 0x0032 }, { 4137, 0x2112 },
-  /* 0x8100 */
-  { 4141, 0x05e4 }, { 4147, 0x0d00 }, { 4150, 0x8a08 }, { 4154, 0x4200 },
-  { 4156, 0x4800 }, { 4158, 0x0033 }, { 4162, 0x0860 }, { 4165, 0x8703 },
-  { 4171, 0x8501 }, { 4175, 0x3400 }, { 4178, 0x0109 }, { 4181, 0xe428 },
-  { 4187, 0x2045 }, { 4191, 0x8100 }, { 4193, 0x25a8 }, { 4199, 0x5c18 },
-  /* 0x8200 */
-  { 4205, 0x35a0 }, { 4211, 0xd804 }, { 4216, 0x1c02 }, { 4220, 0x02e0 },
-  { 4224, 0x00a1 }, { 4227, 0x0200 }, { 4228, 0xc050 }, { 4232, 0x4146 },
-  { 4237, 0x6800 }, { 4240, 0xa604 }, { 4245, 0xf260 }, { 4252, 0xbb8a },
-  { 4261, 0x0000 }, { 4261, 0xc8b6 }, { 4269, 0x00e2 }, { 4273, 0x6002 },
-  /* 0x8300 */
-  { 4276, 0x023e }, { 4282, 0x0080 }, { 4283, 0x8900 }, { 4286, 0x0372 },
-  { 4292, 0x8681 }, { 4297, 0x0006 }, { 4299, 0x0000 }, { 4299, 0x0888 },
-  { 4302, 0x4600 }, { 4305, 0x4140 }, { 4308, 0x0e04 }, { 4312, 0x2000 },
-  { 4313, 0x1622 }, { 4318, 0x1048 }, { 4321, 0x8a00 }, { 4324, 0x2217 },
-  /* 0x8400 */
-  { 4330, 0x7418 }, { 4336, 0x0000 }, { 4336, 0x1200 }, { 4338, 0x2102 },
-  { 4341, 0x0200 }, { 4342, 0x0880 }, { 4344, 0x984a }, { 4350, 0x0420 },
-  { 4352, 0x0000 }, { 4352, 0x1211 }, { 4356, 0x0002 }, { 4357, 0x9904 },
-  { 4362, 0x2a55 }, { 4369, 0x0402 }, { 4371, 0x5000 }, { 4373, 0x1010 },
-  /* 0x8500 */
-  { 4375, 0x0000 }, { 4375, 0x459a }, { 4382, 0xb02a }, { 4388, 0xa000 },
-  { 4390, 0x420a }, { 4394, 0x0208 }, { 4396, 0x2708 }, { 4401, 0x0000 },
-  { 4401, 0x8090 }, { 4404, 0x0812 }, { 4407, 0x8740 }, { 4412, 0x0401 },
-  { 4414, 0xe202 }, { 4419, 0x3020 }, { 4422, 0x0630 }, { 4426, 0x8c80 },
-  /* 0x8600 */
-  { 4430, 0x04c4 }, { 4434, 0x04c0 }, { 4437, 0x2000 }, { 4438, 0x8000 },
-  { 4439, 0x4000 }, { 4440, 0xd831 }, { 4447, 0x0080 }, { 4448, 0x0200 },
-  { 4449, 0x1400 }, { 4451, 0x0008 }, { 4452, 0x0218 }, { 4455, 0x0000 },
-  { 4455, 0x0880 }, { 4457, 0x8a10 }, { 4461, 0x2010 }, { 4463, 0x4000 },
-  /* 0x8700 */
-  { 4464, 0x010d }, { 4468, 0x1500 }, { 4471, 0x0000 }, { 4471, 0x0000 },
-  { 4471, 0x4000 }, { 4472, 0x80a0 }, { 4475, 0x0140 }, { 4477, 0x0150 },
-  { 4480, 0x2004 }, { 4482, 0x8000 }, { 4483, 0x0004 }, { 4484, 0x0408 },
-  { 4486, 0x0010 }, { 4487, 0x0000 }, { 4487, 0x9001 }, { 4490, 0x4a04 },
-  /* 0x8800 */
-  { 4494, 0x0020 }, { 4495, 0x8000 }, { 4496, 0x000c }, { 4498, 0x0842 },
-  { 4501, 0x3041 }, { 4505, 0x2a8c }, { 4511, 0x090e }, { 4516, 0xc085 },
-  { 4521, 0x2906 }, { 4526, 0x40c4 }, { 4530, 0x0800 }, { 4531, 0x0010 },
-  { 4532, 0x8006 }, { 4535, 0xb230 }, { 4541, 0x0102 }, { 4543, 0x2138 },
-  /* 0x8900 */
-  { 4548, 0x0080 }, { 4549, 0x030d }, { 4554, 0x0420 }, { 4556, 0x0940 },
-  { 4559, 0x0012 }, { 4561, 0x8000 }, { 4562, 0x0410 }, { 4564, 0x8004 },
-  { 4566, 0x88ca }, { 4572, 0x0048 }, { 4574, 0x0602 }, { 4577, 0x2404 },
-  { 4580, 0x0001 }, { 4581, 0x0004 }, { 4582, 0x0008 }, { 4583, 0x0110 },
-  /* 0x8a00 */
-  { 4585, 0x550d }, { 4592, 0xa9c8 }, { 4599, 0x2428 }, { 4603, 0x0c52 },
-  { 4608, 0x0000 }, { 4608, 0x4831 }, { 4613, 0x624d }, { 4620, 0x022f },
-  { 4626, 0x30a0 }, { 4630, 0x4128 }, { 4634, 0x057b }, { 4642, 0xd205 },
-  { 4648, 0xa894 }, { 4654, 0x1844 }, { 4658, 0x6cc2 }, { 4665, 0x45c2 },
-  /* 0x8b00 */
-  { 4671, 0x4017 }, { 4676, 0x2ed1 }, { 4684, 0x1901 }, { 4688, 0x0208 },
-  { 4690, 0xc202 }, { 4694, 0x1500 }, { 4697, 0x9040 }, { 4700, 0x2091 },
-  { 4704, 0x0401 }, { 4706, 0x044d }, { 4711, 0x0000 }, { 4711, 0x0000 },
-  { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 },
-  /* 0x8c00 */
-  { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x8080 },
-  { 4713, 0x1542 }, { 4718, 0x0420 }, { 4720, 0x0c02 }, { 4723, 0x0600 },
-  { 4725, 0x1404 }, { 4728, 0x6000 }, { 4730, 0x9f87 }, { 4740, 0xb9d9 },
-  { 4750, 0x059f }, { 4758, 0x540a }, { 4763, 0x245d }, { 4770, 0x3810 },
-  /* 0x8d00 */
-  { 4774, 0x25b0 }, { 4780, 0x0048 }, { 4782, 0x0000 }, { 4782, 0x0000 },
-  { 4782, 0x0000 }, { 4782, 0x0000 }, { 4782, 0x0850 }, { 4785, 0x0099 },
-  { 4789, 0x0420 }, { 4791, 0x0200 }, { 4792, 0x0108 }, { 4794, 0x4408 },
-  { 4797, 0x9840 }, { 4801, 0x2800 }, { 4803, 0x810a }, { 4807, 0x0008 },
-  /* 0x8e00 */
-  { 4808, 0x8400 }, { 4810, 0x4001 }, { 4812, 0x0400 }, { 4813, 0x0021 },
-  { 4815, 0x0794 }, { 4821, 0x8200 }, { 4823, 0x0001 }, { 4824, 0x0050 },
-  { 4826, 0x2482 }, { 4830, 0x0000 }, { 4830, 0x1c00 }, { 4833, 0x0000 },
-  { 4833, 0x3c01 }, { 4838, 0x8004 }, { 4840, 0x0800 }, { 4841, 0x4900 },
-  /* 0x8f00 */
-  { 4844, 0x0228 }, { 4847, 0xf83c }, { 4856, 0x86c0 }, { 4861, 0xcb08 },
-  { 4867, 0x6230 }, { 4872, 0xa000 }, { 4874, 0x0004 }, { 4875, 0x0000 },
-  { 4875, 0x0000 }, { 4875, 0x1800 }, { 4877, 0xa148 }, { 4882, 0x0007 },
-  { 4885, 0x4024 }, { 4888, 0x0012 }, { 4890, 0x2c40 }, { 4894, 0x2285 },
-  /* 0x9000 */
-  { 4899, 0xa96f }, { 4909, 0xe6b3 }, { 4919, 0x400f }, { 4924, 0x5126 },
-  { 4930, 0x6c86 }, { 4937, 0x723b }, { 4946, 0xe20b }, { 4953, 0xb5a4 },
-  { 4961, 0x859f }, { 4970, 0x0222 }, { 4973, 0x854c }, { 4979, 0x0123 },
-  { 4983, 0x0402 }, { 4985, 0x4000 }, { 4986, 0x2102 }, { 4989, 0x2020 },
-  /* 0x9100 */
-  { 4991, 0x0004 }, { 4992, 0x0224 }, { 4995, 0x2080 }, { 4997, 0x0004 },
-  { 4998, 0x7e00 }, { 5004, 0x0004 }, { 5005, 0x1604 }, { 5009, 0x01a0 },
-  { 5012, 0x2a80 }, { 5016, 0x1004 }, { 5018, 0xd800 }, { 5022, 0x0032 },
-  { 5025, 0xfa81 }, { 5033, 0x3183 }, { 5039, 0x0488 }, { 5042, 0x0020 },
-  /* 0x9200 */
-  { 5043, 0x2000 }, { 5044, 0x4087 }, { 5049, 0x0000 }, { 5049, 0x8410 },
-  { 5052, 0x0221 }, { 5055, 0x4880 }, { 5058, 0x0074 }, { 5062, 0x0000 },
-  { 5062, 0x0029 }, { 5065, 0x114a }, { 5070, 0x0000 }, { 5070, 0x02c8 },
-  { 5074, 0x9000 }, { 5076, 0x0004 }, { 5077, 0x0410 }, { 5079, 0x1100 },
-  /* 0x9300 */
-  { 5081, 0x0010 }, { 5082, 0xc501 }, { 5087, 0xc957 }, { 5096, 0x0000 },
-  { 5096, 0x2d00 }, { 5100, 0x0810 }, { 5102, 0x4000 }, { 5103, 0x5020 },
-  { 5106, 0x1000 }, { 5107, 0x0450 }, { 5110, 0x3088 }, { 5114, 0x0001 },
-  { 5115, 0x0008 }, { 5116, 0x4002 }, { 5118, 0x0012 }, { 5120, 0x0040 },
-  /* 0x9400 */
-  { 5121, 0x0010 }, { 5122, 0x0100 }, { 5123, 0x0820 }, { 5125, 0x0120 },
-  { 5127, 0x0010 }, { 5128, 0x0806 }, { 5131, 0x0000 }, { 5131, 0xa000 },
-  { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 },
-  { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 },
-  /* 0x9500 */
-  { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 },
-  { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0080 },
-  { 5134, 0x8a09 }, { 5139, 0x011e }, { 5144, 0x2138 }, { 5149, 0x1802 },
-  { 5152, 0x0480 }, { 5154, 0x1070 }, { 5158, 0x0006 }, { 5160, 0x0000 },
-  /* 0x9600 */
-  { 5160, 0x0000 }, { 5160, 0x1000 }, { 5161, 0x4402 }, { 5164, 0x8804 },
-  { 5167, 0x3815 }, { 5173, 0xf801 }, { 5179, 0x041c }, { 5183, 0x21e9 },
-  { 5190, 0x6c60 }, { 5196, 0x1b30 }, { 5202, 0x0588 }, { 5206, 0x0882 },
-  { 5209, 0x7af3 }, { 5220, 0x1a60 }, { 5225, 0x870c }, { 5231, 0x0ac5 },
-  /* 0x9700 */
-  { 5237, 0x00c1 }, { 5240, 0x524a }, { 5246, 0x0080 }, { 5247, 0x2205 },
-  { 5251, 0x0114 }, { 5254, 0x5042 }, { 5258, 0x2206 }, { 5262, 0x0490 },
-  { 5265, 0xa800 }, { 5268, 0x0000 }, { 5268, 0x2901 }, { 5272, 0x0000 },
-  { 5272, 0x0840 }, { 5274, 0x1008 }, { 5276, 0x0000 }, { 5276, 0x8848 },
-  /* 0x9800 */
-  { 5280, 0x156f }, { 5289, 0x018f }, { 5295, 0x2000 }, { 5296, 0x0b01 },
-  { 5300, 0x7040 }, { 5304, 0x4510 }, { 5308, 0x88a0 }, { 5312, 0x0000 },
-  { 5312, 0x0000 }, { 5312, 0x0000 }, { 5312, 0x8100 }, { 5314, 0x0002 },
-  { 5315, 0x0090 }, { 5317, 0x9800 }, { 5320, 0xe006 }, { 5325, 0x7010 },
-  /* 0x9900 */
-  { 5329, 0x1608 }, { 5333, 0x4109 }, { 5337, 0x0101 }, { 5339, 0x0000 },
-  { 5339, 0x3a20 }, { 5344, 0x0096 }, { 5348, 0x0000 }, { 5348, 0x0000 },
-  { 5348, 0x0000 }, { 5348, 0x2240 }, { 5351, 0x7120 }, { 5356, 0x021a },
-  { 5360, 0x0002 }, { 5361, 0xa227 }, { 5368, 0x2000 }, { 5369, 0x8002 },
-  /* 0x9a00 */
-  { 5371, 0xc102 }, { 5375, 0x0200 }, { 5376, 0x0800 }, { 5377, 0x00c1 },
-  { 5380, 0x2029 }, { 5384, 0x8ca0 }, { 5389, 0x0624 }, { 5393, 0x0000 },
-  { 5393, 0x0000 }, { 5393, 0x0000 }, { 5393, 0x0100 }, { 5394, 0x0100 },
-  { 5395, 0x0000 }, { 5395, 0x0118 }, { 5398, 0x4020 }, { 5400, 0x0000 },
-  /* 0x9b00 */
-  { 5400, 0x0000 }, { 5400, 0x0400 }, { 5401, 0x0480 }, { 5403, 0x1002 },
-  { 5405, 0x803e }, { 5411, 0x0410 }, { 5413, 0x8000 }, { 5414, 0x0000 },
-  { 5414, 0x4000 }, { 5415, 0x8002 }, { 5417, 0x4800 }, { 5419, 0x0000 },
-  { 5419, 0x0200 }, { 5420, 0x0040 }, { 5421, 0x0110 }, { 5423, 0x0000 },
-  /* 0x9c00 */
-  { 5423, 0x2000 }, { 5424, 0x0025 }, { 5427, 0x0020 }, { 5428, 0x0804 },
-  { 5430, 0x0280 }, { 5432, 0x0080 }, { 5433, 0x0000 }, { 5433, 0x0000 },
-  { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x0000 },
-  { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x02a0 }, { 5436, 0x0058 },
-  /* 0x9d00 */
-  { 5439, 0x0200 }, { 5440, 0x0800 }, { 5441, 0x0140 }, { 5443, 0x0800 },
-  { 5444, 0x0000 }, { 5444, 0x2002 }, { 5446, 0x1003 }, { 5449, 0x0004 },
-  { 5450, 0x0000 }, { 5450, 0x0000 }, { 5450, 0x8200 }, { 5452, 0x0010 },
-  { 5453, 0x0010 }, { 5454, 0x0080 }, { 5455, 0x0000 }, { 5455, 0x0704 },
-  /* 0x9e00 */
-  { 5459, 0x0000 }, { 5459, 0x4400 }, { 5461, 0x0000 }, { 5461, 0x0000 },
-  { 5461, 0x0000 }, { 5461, 0x0000 }, { 5461, 0x0000 }, { 5461, 0xa220 },
-  { 5465, 0x0000 }, { 5465, 0xa08c }, { 5470, 0x0020 }, { 5471, 0x4830 },
-  { 5475, 0x6008 }, { 5478, 0x5912 }, { 5484, 0x0100 }, { 5485, 0x0010 },
-  /* 0x9f00 */
-  { 5486, 0x4180 }, { 5489, 0x0008 }, { 5490, 0x0001 }, { 5491, 0x0800 },
-  { 5492, 0x4c00 }, { 5495, 0x8004 }, { 5497, 0x1482 }, { 5501, 0x0080 },
-  { 5502, 0x2000 }, { 5503, 0x1021 },
-};
-static const Summary16 ksc5601_uni2indx_pageac[698] = {
-  /* 0xac00 */
-  { 5506, 0x0793 }, { 5513, 0x3eff }, { 5526, 0xb011 }, { 5531, 0x1303 },
-  { 5536, 0x2801 }, { 5539, 0x1110 }, { 5542, 0x0000 }, { 5542, 0x0593 },
-  { 5548, 0x1e7b }, { 5558, 0xb011 }, { 5563, 0x9703 }, { 5570, 0x3b01 },
-  { 5576, 0x1112 }, { 5580, 0x00a0 }, { 5582, 0x9593 }, { 5590, 0x306b },
-  /* 0xad00 */
-  { 5597, 0xb051 }, { 5603, 0x1102 }, { 5606, 0x3201 }, { 5610, 0x1130 },
-  { 5614, 0x02b0 }, { 5618, 0x0111 }, { 5621, 0x300a }, { 5625, 0xb879 },
-  { 5634, 0x1306 }, { 5639, 0x3001 }, { 5642, 0x0010 }, { 5643, 0x0080 },
-  { 5644, 0x0113 }, { 5648, 0x100b }, { 5652, 0x0011 }, { 5654, 0x9300 },
-  /* 0xae00 */
-  { 5658, 0x2b03 }, { 5664, 0x0010 }, { 5665, 0x0000 }, { 5665, 0x0593 },
-  { 5671, 0x746b }, { 5680, 0xb051 }, { 5686, 0x1323 }, { 5692, 0x3b01 },
-  { 5698, 0x1030 }, { 5701, 0x0000 }, { 5701, 0x0000 }, { 5701, 0x7000 },
-  { 5704, 0xb011 }, { 5709, 0x1303 }, { 5714, 0x2900 }, { 5717, 0x1110 },
-  /* 0xaf00 */
-  { 5720, 0x2180 }, { 5723, 0x0001 }, { 5724, 0x3000 }, { 5726, 0xb015 },
-  { 5732, 0x030e }, { 5737, 0x3001 }, { 5740, 0x0030 }, { 5742, 0x0200 },
-  { 5743, 0x0111 }, { 5746, 0x1023 }, { 5750, 0x0000 }, { 5750, 0x1300 },
-  { 5753, 0x6b81 }, { 5760, 0x1010 }, { 5762, 0x0300 }, { 5764, 0x0113 },
-  /* 0xb000 */
-  { 5768, 0x1013 }, { 5772, 0x3011 }, { 5776, 0x0100 }, { 5777, 0x0000 },
-  { 5777, 0x5530 }, { 5783, 0x22b8 }, { 5789, 0x0000 }, { 5789, 0x3000 },
-  { 5791, 0xb011 }, { 5796, 0x9702 }, { 5802, 0xfb07 }, { 5812, 0x113a },
-  { 5818, 0x03b0 }, { 5823, 0x0113 }, { 5827, 0x0021 }, { 5829, 0x0000 },
-  /* 0xb100 */
-  { 5829, 0x1b00 }, { 5833, 0x3b0d }, { 5841, 0x1138 }, { 5846, 0x03b0 },
-  { 5851, 0x0113 }, { 5855, 0x1133 }, { 5861, 0x0001 }, { 5862, 0x1300 },
-  { 5865, 0x2b05 }, { 5871, 0x111c }, { 5876, 0x0100 }, { 5877, 0x0000 },
-  { 5877, 0x1000 }, { 5878, 0xb011 }, { 5883, 0x1300 }, { 5886, 0x2a01 },
-  /* 0xb200 */
-  { 5890, 0x1930 }, { 5895, 0x02b0 }, { 5899, 0x0001 }, { 5900, 0x1010 },
-  { 5902, 0x0000 }, { 5902, 0x1100 }, { 5904, 0x0301 }, { 5907, 0x1030 },
-  { 5910, 0x0230 }, { 5913, 0x0713 }, { 5919, 0x146b }, { 5926, 0x0011 },
-  { 5928, 0x1300 }, { 5931, 0x2b05 }, { 5937, 0xf974 }, { 5947, 0x8fb8 },
-  /* 0xb300 */
-  { 5956, 0x0113 }, { 5960, 0x103b }, { 5966, 0x0000 }, { 5966, 0x0000 },
-  { 5966, 0x0000 }, { 5966, 0xd970 }, { 5974, 0x4ab0 }, { 5980, 0x0113 },
-  { 5984, 0x103b }, { 5990, 0x0011 }, { 5992, 0x1103 }, { 5996, 0x0000 },
-  { 5996, 0x5930 }, { 6002, 0x2ab1 }, { 6009, 0x0111 }, { 6012, 0x1000 },
-  /* 0xb400 */
-  { 6013, 0x0000 }, { 6013, 0x1101 }, { 6016, 0x0b01 }, { 6020, 0x0010 },
-  { 6021, 0x0000 }, { 6021, 0x0113 }, { 6025, 0x102b }, { 6030, 0x0000 },
-  { 6030, 0x0101 }, { 6032, 0x2000 }, { 6033, 0x1110 }, { 6036, 0x02a0 },
-  { 6039, 0x0111 }, { 6042, 0x3021 }, { 6046, 0xb059 }, { 6053, 0x0102 },
-  /* 0xb500 */
-  { 6055, 0x0000 }, { 6055, 0x1930 }, { 6060, 0x07b0 }, { 6066, 0x0113 },
-  { 6070, 0x383b }, { 6078, 0xb011 }, { 6083, 0x0003 }, { 6085, 0x0000 },
-  { 6085, 0x0000 }, { 6085, 0x0000 }, { 6085, 0x0d13 }, { 6091, 0x383b },
-  { 6099, 0xb011 }, { 6104, 0x0103 }, { 6107, 0x1000 }, { 6108, 0x0000 },
-  /* 0xb600 */
-  { 6108, 0x0000 }, { 6108, 0x0113 }, { 6112, 0x1020 }, { 6114, 0x0010 },
-  { 6115, 0x0100 }, { 6116, 0x0000 }, { 6116, 0x0110 }, { 6118, 0x0000 },
-  { 6118, 0x0000 }, { 6118, 0x3000 }, { 6120, 0x1811 }, { 6124, 0x0002 },
-  { 6125, 0x0000 }, { 6125, 0x0010 }, { 6126, 0x0000 }, { 6126, 0x0111 },
-  /* 0xb700 */
-  { 6129, 0x0023 }, { 6132, 0x0000 }, { 6132, 0x9300 }, { 6136, 0x0b01 },
-  { 6140, 0x1110 }, { 6143, 0x0030 }, { 6145, 0x0111 }, { 6148, 0x302b },
-  { 6154, 0xb011 }, { 6159, 0x13c7 }, { 6167, 0x3b01 }, { 6173, 0x0130 },
-  { 6176, 0x0280 }, { 6178, 0x0000 }, { 6178, 0x3000 }, { 6180, 0xb011 },
-  /* 0xb800 */
-  { 6185, 0x1383 }, { 6191, 0x2b01 }, { 6196, 0x1130 }, { 6200, 0x03b0 },
-  { 6205, 0x0011 }, { 6207, 0x300a }, { 6211, 0xb011 }, { 6216, 0x1102 },
-  { 6219, 0x2000 }, { 6220, 0x0000 }, { 6220, 0x0100 }, { 6221, 0x0111 },
-  { 6224, 0x102b }, { 6229, 0xa011 }, { 6233, 0x1302 }, { 6237, 0x2b01 },
-  /* 0xb900 */
-  { 6242, 0x0010 }, { 6243, 0x0100 }, { 6244, 0x0001 }, { 6245, 0x3000 },
-  { 6247, 0x9011 }, { 6251, 0x1302 }, { 6255, 0x2b01 }, { 6260, 0x1130 },
-  { 6264, 0x66b0 }, { 6271, 0x0000 }, { 6271, 0x3000 }, { 6273, 0xb011 },
-  { 6278, 0xd302 }, { 6284, 0x6b07 }, { 6292, 0x113a }, { 6298, 0x07b0 },
-  /* 0xba00 */
-  { 6304, 0x0103 }, { 6307, 0x0020 }, { 6308, 0x0000 }, { 6308, 0x1300 },
-  { 6311, 0x6b05 }, { 6318, 0x1138 }, { 6323, 0x03b0 }, { 6328, 0x0113 },
-  { 6332, 0x10b8 }, { 6337, 0x0000 }, { 6337, 0x1b00 }, { 6341, 0x2b05 },
-  { 6347, 0x0110 }, { 6349, 0x0300 }, { 6351, 0x0000 }, { 6351, 0x1000 },
-  /* 0xbb00 */
-  { 6352, 0xa011 }, { 6356, 0x1102 }, { 6359, 0x0a01 }, { 6362, 0x7970 },
-  { 6370, 0xa2b0 }, { 6376, 0x0111 }, { 6379, 0x100a }, { 6382, 0x0000 },
-  { 6382, 0x1100 }, { 6384, 0x0001 }, { 6385, 0x1110 }, { 6388, 0x0090 },
-  { 6390, 0x0111 }, { 6393, 0x0009 }, { 6395, 0x0000 }, { 6395, 0x9300 },
-  /* 0xbc00 */
-  { 6399, 0xbb05 }, { 6407, 0xf9f2 }, { 6418, 0x22b0 }, { 6423, 0x0113 },
-  { 6427, 0x323b }, { 6435, 0x2001 }, { 6437, 0x0000 }, { 6437, 0x0000 },
-  { 6437, 0x5930 }, { 6443, 0x06b0 }, { 6448, 0x0193 }, { 6453, 0x303b },
-  { 6460, 0xa011 }, { 6464, 0x1123 }, { 6469, 0x0000 }, { 6469, 0x1170 },
-  /* 0xbd00 */
-  { 6474, 0x02b0 }, { 6478, 0x0011 }, { 6480, 0x1010 }, { 6482, 0x0000 },
-  { 6482, 0x1301 }, { 6486, 0x0301 }, { 6489, 0x0110 }, { 6491, 0x0000 },
-  { 6491, 0x0793 }, { 6498, 0x162b }, { 6505, 0x0010 }, { 6506, 0x0101 },
-  { 6508, 0x0000 }, { 6508, 0x1130 }, { 6512, 0x0200 }, { 6513, 0x0111 },
-  /* 0xbe00 */
-  { 6516, 0x3029 }, { 6521, 0xb011 }, { 6526, 0x0000 }, { 6526, 0x0000 },
-  { 6526, 0x5130 }, { 6531, 0x0eb0 }, { 6537, 0x0513 }, { 6542, 0x383b },
-  { 6550, 0xb011 }, { 6555, 0x0303 }, { 6559, 0x0100 }, { 6560, 0x0000 },
-  { 6560, 0x0000 }, { 6560, 0x0193 }, { 6565, 0x1039 }, { 6570, 0x0000 },
-  /* 0xbf00 */
-  { 6570, 0x0302 }, { 6573, 0x3b00 }, { 6578, 0x0000 }, { 6578, 0x0000 },
-  { 6578, 0x0113 }, { 6582, 0x0023 }, { 6585, 0x0000 }, { 6585, 0x0000 },
-  { 6585, 0x0000 }, { 6585, 0x0010 }, { 6586, 0x0000 }, { 6586, 0x0001 },
-  { 6587, 0x3020 }, { 6590, 0x9011 }, { 6594, 0x0002 }, { 6595, 0x0000 },
-  /* 0xc000 */
-  { 6595, 0x0000 }, { 6595, 0x0000 }, { 6595, 0x0000 }, { 6595, 0x1000 },
-  { 6596, 0x0000 }, { 6596, 0x1102 }, { 6599, 0x0301 }, { 6602, 0x0000 },
-  { 6602, 0x0000 }, { 6602, 0x0113 }, { 6606, 0xb02b }, { 6613, 0xb079 },
-  { 6621, 0x1323 }, { 6627, 0x3b01 }, { 6633, 0x1130 }, { 6637, 0x02b0 },
-  /* 0xc100 */
-  { 6641, 0x0111 }, { 6644, 0xf021 }, { 6650, 0xb0d9 }, { 6658, 0x1343 },
-  { 6664, 0x3b01 }, { 6670, 0x1130 }, { 6674, 0x03b0 }, { 6679, 0x0111 },
-  { 6682, 0x7020 }, { 6686, 0xb051 }, { 6692, 0x1322 }, { 6697, 0x2001 },
-  { 6699, 0x1110 }, { 6702, 0x0190 }, { 6705, 0x0111 }, { 6708, 0x300b },
-  /* 0xc200 */
-  { 6713, 0xb011 }, { 6718, 0x9302 }, { 6723, 0xab01 }, { 6729, 0x0016 },
-  { 6732, 0x0100 }, { 6733, 0x0113 }, { 6737, 0x3021 }, { 6741, 0xb011 },
-  { 6746, 0x0302 }, { 6749, 0x2901 }, { 6753, 0x3130 }, { 6758, 0x02b0 },
-  { 6762, 0x0000 }, { 6762, 0x3000 }, { 6764, 0xb819 }, { 6771, 0x1b42 },
-  /* 0xc300 */
-  { 6777, 0x3301 }, { 6782, 0x1138 }, { 6787, 0x0330 }, { 6791, 0x0000 },
-  { 6791, 0x0020 }, { 6792, 0x0000 }, { 6792, 0x1300 }, { 6795, 0x3305 },
-  { 6801, 0x1110 }, { 6804, 0x0000 }, { 6804, 0x0000 }, { 6804, 0x0000 },
-  { 6804, 0x0001 }, { 6805, 0x9300 }, { 6809, 0x2305 }, { 6814, 0x0130 },
-  /* 0xc400 */
-  { 6817, 0x0100 }, { 6818, 0x0001 }, { 6819, 0x1010 }, { 6821, 0x3011 },
-  { 6825, 0x0100 }, { 6826, 0x0000 }, { 6826, 0x1130 }, { 6830, 0x0230 },
-  { 6833, 0x0001 }, { 6834, 0x1010 }, { 6836, 0x0000 }, { 6836, 0x1100 },
-  { 6838, 0x0000 }, { 6838, 0x0000 }, { 6838, 0x0200 }, { 6839, 0x8513 },
-  /* 0xc500 */
-  { 6845, 0x1003 }, { 6848, 0x1011 }, { 6851, 0x1300 }, { 6854, 0x2b01 },
-  { 6859, 0x7730 }, { 6867, 0x63b8 }, { 6875, 0x0113 }, { 6879, 0x303b },
-  { 6886, 0xb091 }, { 6892, 0x11a2 }, { 6897, 0x0201 }, { 6899, 0x7b30 },
-  { 6907, 0x57f0 }, { 6916, 0x0113 }, { 6920, 0x702b }, { 6927, 0xf0d1 },
-  /* 0xc600 */
-  { 6935, 0x11e3 }, { 6942, 0x1b01 }, { 6947, 0x7130 }, { 6953, 0x0ab9 },
-  { 6960, 0x0113 }, { 6964, 0x303b }, { 6971, 0x9001 }, { 6974, 0x1302 },
-  { 6978, 0x2b01 }, { 6983, 0x1130 }, { 6987, 0x02b0 }, { 6991, 0x0713 },
-  { 6997, 0x302b }, { 7003, 0x3011 }, { 7007, 0x1303 }, { 7012, 0x2301 },
-  /* 0xc700 */
-  { 7016, 0x1130 }, { 7020, 0x02b0 }, { 7024, 0x0113 }, { 7028, 0x30ab },
-  { 7035, 0xb411 }, { 7041, 0x11fe }, { 7050, 0x0901 }, { 7053, 0x7130 },
-  { 7059, 0x47b8 }, { 7067, 0x05d3 }, { 7074, 0x307b }, { 7082, 0xb011 },
-  { 7087, 0x5303 }, { 7093, 0x2101 }, { 7096, 0x1110 }, { 7099, 0x0000 },
-  /* 0xc800 */
-  { 7099, 0x0513 }, { 7104, 0x306b }, { 7111, 0xb011 }, { 7116, 0x1102 },
-  { 7119, 0x3301 }, { 7124, 0x0010 }, { 7125, 0x0000 }, { 7125, 0x0513 },
-  { 7130, 0x38eb }, { 7139, 0xa010 }, { 7142, 0x0102 }, { 7144, 0x3000 },
-  { 7146, 0x1110 }, { 7149, 0x02b0 }, { 7153, 0x0013 }, { 7156, 0x3020 },
-  /* 0xc900 */
-  { 7159, 0xb071 }, { 7166, 0x0102 }, { 7168, 0x1000 }, { 7169, 0x0010 },
-  { 7170, 0x0000 }, { 7170, 0x0113 }, { 7174, 0x100b }, { 7178, 0x1011 },
-  { 7181, 0x1300 }, { 7184, 0x2b01 }, { 7189, 0x0000 }, { 7189, 0x0000 },
-  { 7189, 0x0593 }, { 7195, 0x366b }, { 7204, 0xb095 }, { 7211, 0x1303 },
-  /* 0xca00 */
-  { 7216, 0x3b01 }, { 7222, 0x0110 }, { 7224, 0x0200 }, { 7225, 0x0000 },
-  { 7225, 0x3000 }, { 7227, 0xb011 }, { 7232, 0x0103 }, { 7235, 0x2000 },
-  { 7236, 0x0010 }, { 7237, 0x0100 }, { 7238, 0x0000 }, { 7238, 0x3000 },
-  { 7240, 0xb011 }, { 7245, 0x030a }, { 7249, 0x1001 }, { 7251, 0x0010 },
-  /* 0xcb00 */
-  { 7252, 0x0100 }, { 7253, 0x0111 }, { 7256, 0x0003 }, { 7258, 0x0000 },
-  { 7258, 0x1302 }, { 7262, 0x2301 }, { 7266, 0x0010 }, { 7267, 0x0300 },
-  { 7269, 0x0000 }, { 7269, 0x1000 }, { 7270, 0x0000 }, { 7270, 0x0100 },
-  { 7271, 0x0000 }, { 7271, 0x0010 }, { 7272, 0x0290 }, { 7275, 0x0000 },
-  /* 0xcc00 */
-  { 7275, 0x3000 }, { 7277, 0x3011 }, { 7281, 0x5386 }, { 7288, 0x7b01 },
-  { 7295, 0x1130 }, { 7299, 0x03b0 }, { 7304, 0x0151 }, { 7308, 0x0021 },
-  { 7310, 0x0000 }, { 7310, 0x1300 }, { 7313, 0x3b01 }, { 7319, 0x1130 },
-  { 7323, 0x02b0 }, { 7327, 0x0011 }, { 7329, 0x1010 }, { 7331, 0x0001 },
-  /* 0xcd00 */
-  { 7332, 0x1302 }, { 7336, 0x2b01 }, { 7341, 0x1110 }, { 7344, 0x0200 },
-  { 7345, 0x0000 }, { 7345, 0x1000 }, { 7346, 0xb011 }, { 7351, 0x0102 },
-  { 7353, 0x0100 }, { 7354, 0x1130 }, { 7358, 0x02b0 }, { 7362, 0x0001 },
-  { 7363, 0x1010 }, { 7365, 0x0001 }, { 7366, 0x1100 }, { 7368, 0x2b01 },
-  /* 0xce00 */
-  { 7373, 0x1110 }, { 7376, 0x0210 }, { 7378, 0x0113 }, { 7382, 0x002b },
-  { 7386, 0x0000 }, { 7386, 0x9300 }, { 7390, 0x2b03 }, { 7396, 0x1130 },
-  { 7400, 0x02b0 }, { 7404, 0x0113 }, { 7408, 0x303b }, { 7415, 0x0000 },
-  { 7415, 0x0002 }, { 7416, 0x0000 }, { 7416, 0x1930 }, { 7421, 0x03b0 },
-  /* 0xcf00 */
-  { 7426, 0x0113 }, { 7430, 0x102b }, { 7435, 0xb011 }, { 7440, 0x0103 },
-  { 7443, 0x0000 }, { 7443, 0x1130 }, { 7447, 0x02b0 }, { 7451, 0x0113 },
-  { 7455, 0x1021 }, { 7458, 0x0000 }, { 7458, 0x0102 }, { 7460, 0x0001 },
-  { 7461, 0x0010 }, { 7462, 0x0000 }, { 7462, 0x0113 }, { 7466, 0x102b },
-  /* 0xd000 */
-  { 7471, 0x0011 }, { 7473, 0x0102 }, { 7475, 0x2000 }, { 7476, 0x1130 },
-  { 7480, 0x02b0 }, { 7484, 0x0111 }, { 7487, 0x3001 }, { 7490, 0x3011 },
-  { 7494, 0x0002 }, { 7495, 0x0000 }, { 7495, 0x1130 }, { 7499, 0x02b0 },
-  { 7503, 0x0313 }, { 7508, 0x303b }, { 7515, 0xb011 }, { 7520, 0x0103 },
-  /* 0xd100 */
-  { 7523, 0x2000 }, { 7524, 0x0000 }, { 7524, 0x0000 }, { 7524, 0x0513 },
-  { 7529, 0x303b }, { 7536, 0xb011 }, { 7541, 0x1102 }, { 7544, 0x1000 },
-  { 7545, 0x0110 }, { 7547, 0x0000 }, { 7547, 0x0113 }, { 7551, 0x142b },
-  { 7557, 0x0001 }, { 7558, 0x0100 }, { 7559, 0x0000 }, { 7559, 0x0110 },
-  /* 0xd200 */
-  { 7561, 0x0280 }, { 7563, 0x0001 }, { 7564, 0x3000 }, { 7566, 0xb011 },
-  { 7571, 0x0102 }, { 7573, 0x1000 }, { 7574, 0x0010 }, { 7575, 0x0000 },
-  { 7575, 0x0113 }, { 7579, 0x1023 }, { 7583, 0x1011 }, { 7586, 0x9302 },
-  { 7591, 0x0b05 }, { 7596, 0x1110 }, { 7599, 0x0030 }, { 7601, 0x0113 },
-  /* 0xd300 */
-  { 7605, 0x702b }, { 7612, 0xb051 }, { 7618, 0x1323 }, { 7624, 0x3b01 },
-  { 7630, 0x0030 }, { 7632, 0x0000 }, { 7632, 0x0000 }, { 7632, 0x3000 },
-  { 7634, 0xb011 }, { 7639, 0x1303 }, { 7644, 0x2b01 }, { 7649, 0x1110 },
-  { 7652, 0x0330 }, { 7656, 0x0101 }, { 7658, 0x300a }, { 7662, 0xb011 },
-  /* 0xd400 */
-  { 7667, 0x0102 }, { 7669, 0x2000 }, { 7670, 0x0000 }, { 7670, 0x0000 },
-  { 7670, 0x0011 }, { 7672, 0x1000 }, { 7673, 0xa011 }, { 7677, 0x9300 },
-  { 7681, 0x2b05 }, { 7687, 0x0010 }, { 7688, 0x0200 }, { 7689, 0x0000 },
-  { 7689, 0x1000 }, { 7690, 0x9011 }, { 7694, 0x1100 }, { 7696, 0x2901 },
-  /* 0xd500 */
-  { 7700, 0x1110 }, { 7703, 0x00b0 }, { 7706, 0x0000 }, { 7706, 0x3000 },
-  { 7708, 0xb011 }, { 7713, 0x1302 }, { 7717, 0x2b21 }, { 7723, 0x1130 },
-  { 7727, 0x03b0 }, { 7732, 0x0001 }, { 7733, 0x0020 }, { 7734, 0x0000 },
-  { 7734, 0x1300 }, { 7737, 0x2b05 }, { 7743, 0x1130 }, { 7747, 0x02b0 },
-  /* 0xd600 */
-  { 7751, 0x0113 }, { 7755, 0x103b }, { 7761, 0x2011 }, { 7764, 0x1300 },
-  { 7767, 0x2b21 }, { 7773, 0x1132 }, { 7778, 0x0280 }, { 7780, 0x0013 },
-  { 7783, 0x3028 }, { 7787, 0xa011 }, { 7791, 0x1102 }, { 7794, 0x0a01 },
-  { 7797, 0x1130 }, { 7801, 0x0292 }, { 7805, 0x0111 }, { 7808, 0x3021 },
-  /* 0xd700 */
-  { 7812, 0x0011 }, { 7814, 0x1302 }, { 7818, 0x2b01 }, { 7823, 0x1130 },
-  { 7827, 0x0290 }, { 7830, 0x03d3 }, { 7837, 0x122b }, { 7843, 0x3011 },
-  { 7847, 0x1302 }, { 7851, 0x2b01 },
-};
-static const Summary16 ksc5601_uni2indx_pagef9[17] = {
-  /* 0xf900 */
-  { 7856, 0xffff }, { 7872, 0xffff }, { 7888, 0xffff }, { 7904, 0xffff },
-  { 7920, 0xffff }, { 7936, 0xffff }, { 7952, 0xffff }, { 7968, 0xffff },
-  { 7984, 0xffff }, { 8000, 0xffff }, { 8016, 0xffff }, { 8032, 0xffff },
-  { 8048, 0xffff }, { 8064, 0xffff }, { 8080, 0xffff }, { 8096, 0xffff },
-  /* 0xfa00 */
-  { 8112, 0x0fff },
-};
-static const Summary16 ksc5601_uni2indx_pageff[15] = {
-  /* 0xff00 */
-  { 8124, 0xfffe }, { 8139, 0xffff }, { 8155, 0xffff }, { 8171, 0xffff },
-  { 8187, 0xffff }, { 8203, 0x7fff }, { 8218, 0x0000 }, { 8218, 0x0000 },
-  { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x0000 },
-  { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x006f },
-};
-
-static int
-ksc5601_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0460)
-      summary = &ksc5601_uni2indx_page00[(wc>>4)];
-    else if (wc >= 0x2000 && wc < 0x2670)
-      summary = &ksc5601_uni2indx_page20[(wc>>4)-0x200];
-    else if (wc >= 0x3000 && wc < 0x33e0)
-      summary = &ksc5601_uni2indx_page30[(wc>>4)-0x300];
-    else if (wc >= 0x4e00 && wc < 0x9fa0)
-      summary = &ksc5601_uni2indx_page4e[(wc>>4)-0x4e0];
-    else if (wc >= 0xac00 && wc < 0xd7a0)
-      summary = &ksc5601_uni2indx_pageac[(wc>>4)-0xac0];
-    else if (wc >= 0xf900 && wc < 0xfa10)
-      summary = &ksc5601_uni2indx_pagef9[(wc>>4)-0xf90];
-    else if (wc >= 0xff00 && wc < 0xfff0)
-      summary = &ksc5601_uni2indx_pageff[(wc>>4)-0xff0];
-    if (summary) {
-      unsigned short used = summary->used;
-      unsigned int i = wc & 0x0f;
-      if (used & ((unsigned short) 1 << i)) {
-        unsigned short c;
-        /* Keep in `used' only the bits 0..i-1. */
-        used &= ((unsigned short) 1 << i) - 1;
-        /* Add `summary->indx' and the number of bits set in `used'. */
-        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-        used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-        used = (used & 0x00ff) + (used >> 8);
-        c = ksc5601_2charset[summary->indx + used];
-        r[0] = (c >> 8); r[1] = (c & 0xff);
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
diff --git a/common/fltk/src/xutf8/lcUniConv/mulelao.h b/common/fltk/src/xutf8/lcUniConv/mulelao.h
deleted file mode 100644
index 2afd7b5..0000000
--- a/common/fltk/src/xutf8/lcUniConv/mulelao.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/mulelao.h,v 1.3 2000/11/29 17:40:35 dawes Exp $ */
-
-/*
- * MULELAO-1
- */
-
-static const unsigned short mulelao_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0e81, 0x0e82, 0xfffd, 0x0e84, 0xfffd, 0xfffd, 0x0e87,
-  0x0e88, 0xfffd, 0x0e8a, 0xfffd, 0xfffd, 0x0e8d, 0xfffd, 0xfffd,
-  /* 0xb0 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e94, 0x0e95, 0x0e96, 0x0e97,
-  0xfffd, 0x0e99, 0x0e9a, 0x0e9b, 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f,
-  /* 0xc0 */
-  0xfffd, 0x0ea1, 0x0ea2, 0x0ea3, 0xfffd, 0x0ea5, 0xfffd, 0x0ea7,
-  0xfffd, 0xfffd, 0x0eaa, 0x0eab, 0xfffd, 0x0ead, 0x0eae, 0x0eaf,
-  /* 0xd0 */
-  0x0eb0, 0x0eb1, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7,
-  0x0eb8, 0x0eb9, 0xfffd, 0x0ebb, 0x0ebc, 0x0ebd, 0xfffd, 0xfffd,
-  /* 0xe0 */
-  0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, 0xfffd, 0x0ec6, 0xfffd,
-  0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc, 0x0ecd, 0xfffd, 0xfffd,
-  /* 0xf0 */
-  0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7,
-  0x0ed8, 0x0ed9, 0xfffd, 0xfffd, 0x0edc, 0x0edd, 0xfffd, 0xfffd,
-};
-
-static int
-mulelao_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = mulelao_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-
-static const unsigned char mulelao_page0e[96] = {
-  0x00, 0xa1, 0xa2, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0x80-0x87 */
-  0xa8, 0x00, 0xaa, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x90-0x97 */
-  0x00, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x98-0x9f */
-  0x00, 0xc1, 0xc2, 0xc3, 0x00, 0xc5, 0x00, 0xc7, /* 0xa0-0xa7 */
-  0x00, 0x00, 0xca, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0xa8-0xaf */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xb0-0xb7 */
-  0xd8, 0xd9, 0x00, 0xdb, 0xdc, 0xdd, 0x00, 0x00, /* 0xb8-0xbf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0x00, 0xe6, 0x00, /* 0xc0-0xc7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x00, 0x00, /* 0xc8-0xcf */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */
-  0xf8, 0xf9, 0x00, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xd8-0xdf */
-};
-
-static int
-mulelao_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc == 0x00a0)
-    c = 0xa0;
-  else if (wc >= 0x0e80 && wc < 0x0ee0)
-    c = mulelao_page0e[wc-0x0e80];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/tatar_cyr.h b/common/fltk/src/xutf8/lcUniConv/tatar_cyr.h
deleted file mode 100644
index 5360700..0000000
--- a/common/fltk/src/xutf8/lcUniConv/tatar_cyr.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/tatar_cyr.h,v 1.3 2000/12/04 18:49:42 dawes Exp $ */
-
-/*
- * TATAR-CYR
- */
-
-static const unsigned short tatar_cyr_2uni[128] = {
-  /* 0x80 */
-  0x04d8, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x20ac, 0x2030, 0x04e8, 0x2039, 0x04ae, 0x0496, 0x04a2, 0x04ba,
-  /* 0x90 */
-  0x04d9, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-    0x98, 0x2122, 0x04e9, 0x203a, 0x04af, 0x0497, 0x04a3, 0x04bb,
-  /* 0xa0 */
-  0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7,
-  0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7,
-  0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457,
-  /* 0xc0 */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
-  0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
-  /* 0xd0 */
-  0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
-  0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
-  /* 0xe0 */
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
-  0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
-  /* 0xf0 */
-  0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
-  0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
-};
-
-static int
-tatar_cyr_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) tatar_cyr_2uni[c-0x80];
-  return 1;
-}
-
-static const unsigned char tatar_cyr_page00[32] = {
-  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-};
-static const unsigned char tatar_cyr_page04[240] = {
-  0x00, 0xa8, 0x00, 0x81, 0xaa, 0xbd, 0xb2, 0xaf, /* 0x00-0x07 */
-  0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, /* 0x08-0x0f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */
-  0x00, 0xb8, 0x00, 0x83, 0xba, 0xbe, 0xb3, 0xbf, /* 0x50-0x57 */
-  0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x9d, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0x00, 0x00, 0x8e, 0x9e, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x9c, /* 0xa8-0xaf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x8f, 0x9f, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x80, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-};
-static const unsigned char tatar_cyr_page20[48] = {
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-static const unsigned char tatar_cyr_page21[24] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-};
-static const unsigned char tatar_cyr_page22[1] = {
-                                      0xb0,       /* 0x16-0x16 */
-};
-
-static int
-tatar_cyr_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00bc)
-    c = tatar_cyr_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x04ef)
-    c = tatar_cyr_page04[wc-0x0400];
-  else if (wc >= 0x2010 && wc < 0x203b)
-    c = tatar_cyr_page20[wc-0x2010];
-  else if (wc == 0x20ac)
-    c = 0x88;
-  else if (wc >= 0x2110 && wc < 0x2123)
-    c = tatar_cyr_page21[wc-0x2110];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/tcvn.h b/common/fltk/src/xutf8/lcUniConv/tcvn.h
deleted file mode 100644
index f3d4975..0000000
--- a/common/fltk/src/xutf8/lcUniConv/tcvn.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/tcvn.h,v 1.3 2000/11/29 17:40:35 dawes Exp $ */
-
-/*
- * TCVN-5712
- */
-
-static const unsigned short tcvn_2uni_1[32] = {
-  /* 0x00 */
-  0x0000, 0x00da, 0x1ee4, 0x0003, 0x1eea, 0x1eec, 0x1eee, 0x0007,
-  0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
-  /* 0x10 */
-  0x0010, 0x1ee8, 0x1ef0, 0x1ef2, 0x1ef6, 0x1ef8, 0x00dd, 0x1ef4,
-  0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
-};
-static const unsigned short tcvn_2uni_2[128] = {
-  /* 0x80 */
-  0x00c0, 0x1ea2, 0x00c3, 0x00c1, 0x1ea0, 0x1eb6, 0x1eac, 0x00c8,
-  0x1eba, 0x1ebc, 0x00c9, 0x1eb8, 0x1ec6, 0x00cc, 0x1ec8, 0x0128,
-  /* 0x90 */
-  0x00cd, 0x1eca, 0x00d2, 0x1ece, 0x00d5, 0x00d3, 0x1ecc, 0x1ed8,
-  0x1edc, 0x1ede, 0x1ee0, 0x1eda, 0x1ee2, 0x00d9, 0x1ee6, 0x0168,
-  /* 0xa0 */
-  0x00a0, 0x0102, 0x00c2, 0x00ca, 0x00d4, 0x01a0, 0x01af, 0x0110,
-  0x0103, 0x00e2, 0x00ea, 0x00f4, 0x01a1, 0x01b0, 0x0111, 0x1eb0,
-  /* 0xb0 */
-  0x0300, 0x0309, 0x0303, 0x0301, 0x0323, 0x00e0, 0x1ea3, 0x00e3,
-  0x00e1, 0x1ea1, 0x1eb2, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eaf, 0x1eb4,
-  /* 0xc0 */
-  0x1eae, 0x1ea6, 0x1ea8, 0x1eaa, 0x1ea4, 0x1ec0, 0x1eb7, 0x1ea7,
-  0x1ea9, 0x1eab, 0x1ea5, 0x1ead, 0x00e8, 0x1ec2, 0x1ebb, 0x1ebd,
-  /* 0xd0 */
-  0x00e9, 0x1eb9, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ebf, 0x1ec7, 0x00ec,
-  0x1ec9, 0x1ec4, 0x1ebe, 0x1ed2, 0x0129, 0x00ed, 0x1ecb, 0x00f2,
-  /* 0xe0 */
-  0x1ed4, 0x1ecf, 0x00f5, 0x00f3, 0x1ecd, 0x1ed3, 0x1ed5, 0x1ed7,
-  0x1ed1, 0x1ed9, 0x1edd, 0x1edf, 0x1ee1, 0x1edb, 0x1ee3, 0x00f9,
-  /* 0xf0 */
-  0x1ed6, 0x1ee7, 0x0169, 0x00fa, 0x1ee5, 0x1eeb, 0x1eed, 0x1eef,
-  0x1ee9, 0x1ef1, 0x1ef3, 0x1ef7, 0x1ef9, 0x00fd, 0x1ef5, 0x1ed0,
-};
-
-static int
-tcvn_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x20)
-    *pwc = (ucs4_t) tcvn_2uni_1[c];
-  else if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) tcvn_2uni_2[c-0x80];
-  return 1;
-}
-
-static const unsigned char tcvn_page00[96+184] = {
-  0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x80, 0x83, 0xa2, 0x82, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x87, 0x8a, 0xa3, 0x00, 0x8d, 0x90, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x92, 0x95, 0xa4, 0x94, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x9d, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, /* 0xd8-0xdf */
-  0xb5, 0xb8, 0xa9, 0xb7, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0xcc, 0xd0, 0xaa, 0x00, 0xd7, 0xdd, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0xdf, 0xe3, 0xab, 0xe2, 0x00, 0x00, /* 0xf0-0xf7 */
-  0x00, 0xef, 0xf3, 0x00, 0x00, 0xfd, 0x00, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0x00, 0x00, 0xa1, 0xa8, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0xa7, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x8f, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x9f, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0xa5, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, /* 0xa8-0xaf */
-  0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-};
-static const unsigned char tcvn_page03[40] = {
-  0xb0, 0xb3, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-};
-static const unsigned char tcvn_page1e[96] = {
-  0x84, 0xb9, 0x81, 0xb6, 0xc4, 0xca, 0xc1, 0xc7, /* 0xa0-0xa7 */
-  0xc2, 0xc8, 0xc3, 0xc9, 0x86, 0xcb, 0xc0, 0xbe, /* 0xa8-0xaf */
-  0xaf, 0xbb, 0xba, 0xbc, 0xbf, 0xbd, 0x85, 0xc6, /* 0xb0-0xb7 */
-  0x8b, 0xd1, 0x88, 0xce, 0x89, 0xcf, 0xda, 0xd5, /* 0xb8-0xbf */
-  0xc5, 0xd2, 0xcd, 0xd3, 0xd9, 0xd4, 0x8c, 0xd6, /* 0xc0-0xc7 */
-  0x8e, 0xd8, 0x91, 0xde, 0x96, 0xe4, 0x93, 0xe1, /* 0xc8-0xcf */
-  0xff, 0xe8, 0xdb, 0xe5, 0xe0, 0xe6, 0xf0, 0xe7, /* 0xd0-0xd7 */
-  0x97, 0xe9, 0x9b, 0xed, 0x98, 0xea, 0x99, 0xeb, /* 0xd8-0xdf */
-  0x9a, 0xec, 0x9c, 0xee, 0x02, 0xf4, 0x9e, 0xf1, /* 0xe0-0xe7 */
-  0x11, 0xf8, 0x04, 0xf5, 0x05, 0xf6, 0x06, 0xf7, /* 0xe8-0xef */
-  0x12, 0xf9, 0x13, 0xfa, 0x17, 0xfe, 0x14, 0xfb, /* 0xf0-0xf7 */
-  0x15, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-};
-
-static int
-tcvn_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080 && (wc >= 0x0020 || (0x00fe0076 & (1 << wc)) == 0)) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x01b8)
-    c = tcvn_page00[wc-0x00a0];
-  else if (wc >= 0x0300 && wc < 0x0328)
-    c = tcvn_page03[wc-0x0300];
-  else if (wc >= 0x1ea0 && wc < 0x1f00)
-    c = tcvn_page1e[wc-0x1ea0];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/tis620.h b/common/fltk/src/xutf8/lcUniConv/tis620.h
deleted file mode 100644
index beb7cd9..0000000
--- a/common/fltk/src/xutf8/lcUniConv/tis620.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/tis620.h,v 1.4 2001/02/09 00:02:54 dawes Exp $ */
-
-/*
- * TIS620-0
- */
-
-static const unsigned short tis620_2uni[96] = {
-  /* 0xa0 */
-  0xfffd, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
-  0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
-  /* 0xb0 */
-  0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
-  0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
-  /* 0xc0 */
-  0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
-  0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
-  /* 0xd0 */
-  0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
-  0x0e38, 0x0e39, 0x0e3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e3f,
-  /* 0xe0 */
-  0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
-  0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
-  /* 0xf0 */
-  0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
-  0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-};
-
-static int
-tis620_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else if (c < 0xa0) {
-  }
-  else {
-    unsigned short wc = tis620_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-
-static const unsigned char tis620_page0e[96] = {
-  0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */
-  0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */
-  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */
-  0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-};
-
-static int
-tis620_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x0e00 && wc < 0x0e60)
-    c = tis620_page0e[wc-0x0e00];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/ucs2be.h b/common/fltk/src/xutf8/lcUniConv/ucs2be.h
deleted file mode 100644
index af2a586..0000000
--- a/common/fltk/src/xutf8/lcUniConv/ucs2be.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * UCS-2BE = UCS-2 big endian
- */
-/* $XFree86: xc/lib/X11/lcUniConv/ucs2be.h,v 1.1 2000/11/28 17:25:09 dawes Exp $ */
-
-static int
-ucs2be_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  if (n >= 2) {
-    if (s[0] >= 0xd8 && s[0] < 0xe0) {
-      return RET_ILSEQ;
-    } else {
-      *pwc = (s[0] << 8) + s[1];
-      return 2;
-    }
-  }
-  return RET_TOOFEW(0);
-}
-
-static int
-ucs2be_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (wc < 0x10000 && !(wc >= 0xd800 && wc < 0xe000)) {
-    if (n >= 2) {
-      r[0] = (unsigned char) (wc >> 8);
-      r[1] = (unsigned char) wc;
-      return 2;
-    } else
-      return RET_TOOSMALL;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/utf8.h b/common/fltk/src/xutf8/lcUniConv/utf8.h
deleted file mode 100644
index fe189cc..0000000
--- a/common/fltk/src/xutf8/lcUniConv/utf8.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/utf8.h,v 1.3 2000/11/28 18:50:07 dawes Exp $ */
-
-/*
- * UTF-8
- */
-
-/* Specification: RFC 2279 */
-
-static int
-utf8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = s[0];
-
-  if (c < 0x80) {
-    *pwc = c;
-    return 1;
-  } else if (c < 0xc2) {
-    return RET_ILSEQ;
-  } else if (c < 0xe0) {
-    if (n < 2)
-      return RET_TOOFEW(0);
-    if (!((s[1] ^ 0x80) < 0x40))
-      return RET_ILSEQ;
-    *pwc = ((ucs4_t) (c & 0x1f) << 6)
-           | (ucs4_t) (s[1] ^ 0x80);
-    return 2;
-  } else if (c < 0xf0) {
-    if (n < 3)
-      return RET_TOOFEW(0);
-    if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-          && (c >= 0xe1 || s[1] >= 0xa0)))
-      return RET_ILSEQ;
-    *pwc = ((ucs4_t) (c & 0x0f) << 12)
-           | ((ucs4_t) (s[1] ^ 0x80) << 6)
-           | (ucs4_t) (s[2] ^ 0x80);
-    return 3;
-  } else if (c < 0xf8) {
-    if (n < 4)
-      return RET_TOOFEW(0);
-    if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-          && (s[3] ^ 0x80) < 0x40
-          && (c >= 0xf1 || s[1] >= 0x90)))
-      return RET_ILSEQ;
-    *pwc = ((ucs4_t) (c & 0x07) << 18)
-           | ((ucs4_t) (s[1] ^ 0x80) << 12)
-           | ((ucs4_t) (s[2] ^ 0x80) << 6)
-           | (ucs4_t) (s[3] ^ 0x80);
-    return 4;
-  } else if (c < 0xfc) {
-    if (n < 5)
-      return RET_TOOFEW(0);
-    if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-          && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-          && (c >= 0xf9 || s[1] >= 0x88)))
-      return RET_ILSEQ;
-    *pwc = ((ucs4_t) (c & 0x03) << 24)
-           | ((ucs4_t) (s[1] ^ 0x80) << 18)
-           | ((ucs4_t) (s[2] ^ 0x80) << 12)
-           | ((ucs4_t) (s[3] ^ 0x80) << 6)
-           | (ucs4_t) (s[4] ^ 0x80);
-    return 5;
-  } else if (c < 0xfe) {
-    if (n < 6)
-      return RET_TOOFEW(0);
-    if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-          && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-          && (s[5] ^ 0x80) < 0x40
-          && (c >= 0xfd || s[1] >= 0x84)))
-      return RET_ILSEQ;
-    *pwc = ((ucs4_t) (c & 0x01) << 30)
-           | ((ucs4_t) (s[1] ^ 0x80) << 24)
-           | ((ucs4_t) (s[2] ^ 0x80) << 18)
-           | ((ucs4_t) (s[3] ^ 0x80) << 12)
-           | ((ucs4_t) (s[4] ^ 0x80) << 6)
-           | (ucs4_t) (s[5] ^ 0x80);
-    return 6;
-  } else
-    return RET_ILSEQ;
-}
-
-static int
-utf8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) /* n == 0 is acceptable */
-{
-  int count;
-  if (wc < 0x80)
-    count = 1;
-  else if (wc < 0x800)
-    count = 2;
-  else if (wc < 0x10000)
-    count = 3;
-  else if (wc < 0x200000)
-    count = 4;
-  else if (wc < 0x4000000)
-    count = 5;
-  else if (wc <= 0x7fffffff)
-    count = 6;
-  else
-    return RET_ILSEQ;
-  if (n < count)
-    return RET_TOOSMALL;
-  switch (count) { /* note: code falls through cases! */
-    case 6: r[5] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x4000000;
-    case 5: r[4] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x200000;
-    case 4: r[3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000;
-    case 3: r[2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800;
-    case 2: r[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0;
-    case 1: r[0] = wc;
-  }
-  return count;
-}
diff --git a/common/fltk/src/xutf8/lcUniConv/viscii.h b/common/fltk/src/xutf8/lcUniConv/viscii.h
deleted file mode 100644
index 9dffbf0..0000000
--- a/common/fltk/src/xutf8/lcUniConv/viscii.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/viscii.h,v 1.3 2000/11/29 17:40:35 dawes Exp $ */
-
-/*
- * VISCII1.1-1
- */
-
-/* Specification: RFC 1456 */
-
-static const unsigned short viscii_2uni_1[32] = {
-  /* 0x00 */
-  0x0000, 0x0001, 0x1eb2, 0x0003, 0x0004, 0x1eb4, 0x1eaa, 0x0007,
-  0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
-  /* 0x10 */
-  0x0010, 0x0011, 0x0012, 0x0013, 0x1ef6, 0x0015, 0x0016, 0x0017,
-  0x0018, 0x1ef8, 0x001a, 0x001b, 0x001c, 0x001d, 0x1ef4, 0x001f,
-};
-static const unsigned short viscii_2uni_2[128] = {
-  /* 0x80 */
-  0x1ea0, 0x1eae, 0x1eb0, 0x1eb6, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eac,
-  0x1ebc, 0x1eb8, 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, 0x1ed0,
-  /* 0x90 */
-  0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, 0x1ee2, 0x1eda, 0x1edc, 0x1ede,
-  0x1eca, 0x1ece, 0x1ecc, 0x1ec8, 0x1ee6, 0x0168, 0x1ee4, 0x1ef2,
-  /* 0xa0 */
-  0x00d5, 0x1eaf, 0x1eb1, 0x1eb7, 0x1ea5, 0x1ea7, 0x1ea9, 0x1ead,
-  0x1ebd, 0x1eb9, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, 0x1ed1,
-  /* 0xb0 */
-  0x1ed3, 0x1ed5, 0x1ed7, 0x1ee0, 0x01a0, 0x1ed9, 0x1edd, 0x1edf,
-  0x1ecb, 0x1ef0, 0x1ee8, 0x1eea, 0x1eec, 0x01a1, 0x1edb, 0x01af,
-  /* 0xc0 */
-  0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x1ea2, 0x0102, 0x1eb3, 0x1eb5,
-  0x00c8, 0x00c9, 0x00ca, 0x1eba, 0x00cc, 0x00cd, 0x0128, 0x1ef3,
-  /* 0xd0 */
-  0x0110, 0x1ee9, 0x00d2, 0x00d3, 0x00d4, 0x1ea1, 0x1ef7, 0x1eeb,
-  0x1eed, 0x00d9, 0x00da, 0x1ef9, 0x1ef5, 0x00dd, 0x1ee1, 0x01b0,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x1ea3, 0x0103, 0x1eef, 0x1eab,
-  0x00e8, 0x00e9, 0x00ea, 0x1ebb, 0x00ec, 0x00ed, 0x0129, 0x1ec9,
-  /* 0xf0 */
-  0x0111, 0x1ef1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x1ecf, 0x1ecd,
-  0x1ee5, 0x00f9, 0x00fa, 0x0169, 0x1ee7, 0x00fd, 0x1ee3, 0x1eee,
-};
-
-static int
-viscii_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x20)
-    *pwc = (ucs4_t) viscii_2uni_1[c];
-  else if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) viscii_2uni_2[c-0x80];
-  return 1;
-}
-
-static const unsigned char viscii_page00[64+184] = {
-  0xc0, 0xc1, 0xc2, 0xc3, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0xc8, 0xc9, 0xca, 0x00, 0xcc, 0xcd, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0xd2, 0xd3, 0xd4, 0xa0, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0xd9, 0xda, 0x00, 0x00, 0xdd, 0x00, 0x00, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0x00, 0xec, 0xed, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0xf2, 0xf3, 0xf4, 0xf5, 0x00, 0x00, /* 0xf0-0xf7 */
-  0x00, 0xf9, 0xfa, 0x00, 0x00, 0xfd, 0x00, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0x00, 0x00, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0xce, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x9d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0xb4, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, /* 0xa8-0xaf */
-  0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-};
-static const unsigned char viscii_page1e[96] = {
-  0x80, 0xd5, 0xc4, 0xe4, 0x84, 0xa4, 0x85, 0xa5, /* 0xa0-0xa7 */
-  0x86, 0xa6, 0x06, 0xe7, 0x87, 0xa7, 0x81, 0xa1, /* 0xa8-0xaf */
-  0x82, 0xa2, 0x02, 0xc6, 0x05, 0xc7, 0x83, 0xa3, /* 0xb0-0xb7 */
-  0x89, 0xa9, 0xcb, 0xeb, 0x88, 0xa8, 0x8a, 0xaa, /* 0xb8-0xbf */
-  0x8b, 0xab, 0x8c, 0xac, 0x8d, 0xad, 0x8e, 0xae, /* 0xc0-0xc7 */
-  0x9b, 0xef, 0x98, 0xb8, 0x9a, 0xf7, 0x99, 0xf6, /* 0xc8-0xcf */
-  0x8f, 0xaf, 0x90, 0xb0, 0x91, 0xb1, 0x92, 0xb2, /* 0xd0-0xd7 */
-  0x93, 0xb5, 0x95, 0xbe, 0x96, 0xb6, 0x97, 0xb7, /* 0xd8-0xdf */
-  0xb3, 0xde, 0x94, 0xfe, 0x9e, 0xf8, 0x9c, 0xfc, /* 0xe0-0xe7 */
-  0xba, 0xd1, 0xbb, 0xd7, 0xbc, 0xd8, 0xff, 0xe6, /* 0xe8-0xef */
-  0xb9, 0xf1, 0x9f, 0xcf, 0x1e, 0xdc, 0x14, 0xd6, /* 0xf0-0xf7 */
-  0x19, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-};
-
-static int
-viscii_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080 && (wc >= 0x0020 || (0x42100064 & (1 << wc)) == 0)) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00c0 && wc < 0x01b8)
-    c = viscii_page00[wc-0x00c0];
-  else if (wc >= 0x1ea0 && wc < 0x1f00)
-    c = viscii_page1e[wc-0x1ea0];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
diff --git a/common/fltk/src/xutf8/mk_wcwidth.c b/common/fltk/src/xutf8/mk_wcwidth.c
deleted file mode 100644
index 0c4eb2c..0000000
--- a/common/fltk/src/xutf8/mk_wcwidth.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * FLTK: Important!
- * This file should remain as close to Markus Kuhn's original source
- * as possible for easy checking for changes later, however unlikely.
- * All customisations to work with FLTK shall be annotated!
- */
-
-/*
- * This is an implementation of wcwidth() and wcswidth() (defined in
- * IEEE Std 1002.1-2001) for Unicode.
- *
- * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html
- * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html
- *
- * In fixed-width output devices, Latin characters all occupy a single
- * "cell" position of equal width, whereas ideographic CJK characters
- * occupy two such cells. Interoperability between terminal-line
- * applications and (teletype-style) character terminals using the
- * UTF-8 encoding requires agreement on which character should advance
- * the cursor by how many cell positions. No established formal
- * standards exist at present on which Unicode character shall occupy
- * how many cell positions on character terminals. These routines are
- * a first attempt of defining such behavior based on simple rules
- * applied to data provided by the Unicode Consortium.
- *
- * For some graphical characters, the Unicode standard explicitly
- * defines a character-cell width via the definition of the East Asian
- * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes.
- * In all these cases, there is no ambiguity about which width a
- * terminal shall use. For characters in the East Asian Ambiguous (A)
- * class, the width choice depends purely on a preference of backward
- * compatibility with either historic CJK or Western practice.
- * Choosing single-width for these characters is easy to justify as
- * the appropriate long-term solution, as the CJK practice of
- * displaying these characters as double-width comes from historic
- * implementation simplicity (8-bit encoded characters were displayed
- * single-width and 16-bit ones double-width, even for Greek,
- * Cyrillic, etc.) and not any typographic considerations.
- *
- * Much less clear is the choice of width for the Not East Asian
- * (Neutral) class. Existing practice does not dictate a width for any
- * of these characters. It would nevertheless make sense
- * typographically to allocate two character cells to characters such
- * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be
- * represented adequately with a single-width glyph. The following
- * routines at present merely assign a single-cell width to all
- * neutral characters, in the interest of simplicity. This is not
- * entirely satisfactory and should be reconsidered before
- * establishing a formal standard in this area. At the moment, the
- * decision which Not East Asian (Neutral) characters should be
- * represented by double-width glyphs cannot yet be answered by
- * applying a simple rule from the Unicode database content. Setting
- * up a proper standard for the behavior of UTF-8 character terminals
- * will require a careful analysis not only of each Unicode character,
- * but also of each presentation form, something the author of these
- * routines has avoided to do so far.
- *
- * http://www.unicode.org/unicode/reports/tr11/
- *
- * Markus Kuhn -- 2007-05-26 (Unicode 5.0)
- *
- * Permission to use, copy, modify, and distribute this software
- * for any purpose and without fee is hereby granted. The author
- * disclaims all warranties with regard to this software.
- *
- * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
- */
-
-/*
- * FLTK - avoid possible problems on systems with 32-bit wchar_t.
- *        Don't include wchar.h, and change wchar_t to unsigned int.
- *        Can we guarantee sizeof(unsigned int) >= 4 ?
- */
-#if 0
-#include <wchar.h>
-#endif
-
-struct interval {
-  int first;
-  int last;
-};
-
-/* auxiliary function for binary search in interval table */
-/*
- * FLTK: was
-static int bisearch(wchar_t ucs, const struct interval *table, int max) {
- */
-static int bisearch(unsigned int ucs, const struct interval *table, int max) {
-  int min = 0;
-  int mid;
-
-  if (ucs < table[0].first || ucs > table[max].last)
-    return 0;
-  while (max >= min) {
-    mid = (min + max) / 2;
-    if (ucs > table[mid].last)
-      min = mid + 1;
-    else if (ucs < table[mid].first)
-      max = mid - 1;
-    else
-      return 1;
-  }
-
-  return 0;
-}
-
-
-/* The following two functions define the column width of an ISO 10646
- * character as follows:
- *
- *    - The null character (U+0000) has a column width of 0.
- *
- *    - Other C0/C1 control characters and DEL will lead to a return
- *      value of -1.
- *
- *    - Non-spacing and enclosing combining characters (general
- *      category code Mn or Me in the Unicode database) have a
- *      column width of 0.
- *
- *    - SOFT HYPHEN (U+00AD) has a column width of 1.
- *
- *    - Other format characters (general category code Cf in the Unicode
- *      database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.
- *
- *    - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
- *      have a column width of 0.
- *
- *    - Spacing characters in the East Asian Wide (W) or East Asian
- *      Full-width (F) category as defined in Unicode Technical
- *      Report #11 have a column width of 2.
- *
- *    - All remaining characters (including all printable
- *      ISO 8859-1 and WGL4 characters, Unicode control characters,
- *      etc.) have a column width of 1.
- *
- * This implementation assumes that wchar_t characters are encoded
- * in ISO 10646.
- */
-
-/*
- * FLTK: was
-int mk_wcwidth(wchar_t ucs)
- */
-int mk_wcwidth(unsigned int ucs)
-{
-  /* sorted list of non-overlapping intervals of non-spacing characters */
-  /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */
-  static const struct interval combining[] = {
-    { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 },
-    { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 },
-    { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 },
-    { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 },
-    { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED },
-    { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A },
-    { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 },
-    { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D },
-    { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 },
-    { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD },
-    { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C },
-    { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D },
-    { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC },
-    { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD },
-    { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C },
-    { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D },
-    { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 },
-    { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 },
-    { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC },
-    { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD },
-    { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D },
-    { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 },
-    { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E },
-    { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC },
-    { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 },
-    { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E },
-    { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 },
-    { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 },
-    { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 },
-    { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F },
-    { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 },
-    { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD },
-    { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD },
-    { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 },
-    { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B },
-    { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 },
-    { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 },
-    { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF },
-    { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 },
-    { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F },
-    { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B },
-    { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F },
-    { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB },
-    { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F },
-    { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 },
-    { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD },
-    { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F },
-    { 0xE0100, 0xE01EF }
-  };
-
-  /* test for 8-bit control characters */
-  if (ucs == 0)
-    return 0;
-  if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))
-    return -1;
-
-  /* binary search in table of non-spacing characters */
-  if (bisearch(ucs, combining,
-	       sizeof(combining) / sizeof(struct interval) - 1))
-    return 0;
-
-  /* if we arrive here, ucs is not a combining or C0/C1 control character */
-
-  return 1 + 
-    (ucs >= 0x1100 &&
-     (ucs <= 0x115f ||                    /* Hangul Jamo init. consonants */
-      ucs == 0x2329 || ucs == 0x232a ||
-      (ucs >= 0x2e80 && ucs <= 0xa4cf &&
-       ucs != 0x303f) ||                  /* CJK ... Yi */
-      (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
-      (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */
-      (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */
-      (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
-      (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */
-      (ucs >= 0xffe0 && ucs <= 0xffe6) ||
-      (ucs >= 0x20000 && ucs <= 0x2fffd) ||
-      (ucs >= 0x30000 && ucs <= 0x3fffd)));
-}
-
-
-/*
- * FLTK: comment out the remaining functions, as we don't need themm.
- */
-#if 0
-
-/*
- * FLTK: was
-int mk_wcswidth(const wchar_t *pwcs, size_t n)
- */
-int mk_wcswidth(const unsigned int *pwcs, size_t n)
-{
-  int w, width = 0;
-
-  for (;*pwcs && n-- > 0; pwcs++)
-    if ((w = mk_wcwidth(*pwcs)) < 0)
-      return -1;
-    else
-      width += w;
-
-  return width;
-}
-
-
-/*
- * The following functions are the same as mk_wcwidth() and
- * mk_wcswidth(), except that spacing characters in the East Asian
- * Ambiguous (A) category as defined in Unicode Technical Report #11
- * have a column width of 2. This variant might be useful for users of
- * CJK legacy encodings who want to migrate to UCS without changing
- * the traditional terminal character-width behaviour. It is not
- * otherwise recommended for general use.
- */
-/*
- * FLTK: was
-int mk_wcwidth_cjk(wchar_t ucs)
- */
-int mk_wcwidth_cjk(unsigned int ucs)
-{
-  /* sorted list of non-overlapping intervals of East Asian Ambiguous
-   * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */
-  static const struct interval ambiguous[] = {
-    { 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 },
-    { 0x00AA, 0x00AA }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B4 },
-    { 0x00B6, 0x00BA }, { 0x00BC, 0x00BF }, { 0x00C6, 0x00C6 },
-    { 0x00D0, 0x00D0 }, { 0x00D7, 0x00D8 }, { 0x00DE, 0x00E1 },
-    { 0x00E6, 0x00E6 }, { 0x00E8, 0x00EA }, { 0x00EC, 0x00ED },
-    { 0x00F0, 0x00F0 }, { 0x00F2, 0x00F3 }, { 0x00F7, 0x00FA },
-    { 0x00FC, 0x00FC }, { 0x00FE, 0x00FE }, { 0x0101, 0x0101 },
-    { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x011B, 0x011B },
-    { 0x0126, 0x0127 }, { 0x012B, 0x012B }, { 0x0131, 0x0133 },
-    { 0x0138, 0x0138 }, { 0x013F, 0x0142 }, { 0x0144, 0x0144 },
-    { 0x0148, 0x014B }, { 0x014D, 0x014D }, { 0x0152, 0x0153 },
-    { 0x0166, 0x0167 }, { 0x016B, 0x016B }, { 0x01CE, 0x01CE },
-    { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 },
-    { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA },
-    { 0x01DC, 0x01DC }, { 0x0251, 0x0251 }, { 0x0261, 0x0261 },
-    { 0x02C4, 0x02C4 }, { 0x02C7, 0x02C7 }, { 0x02C9, 0x02CB },
-    { 0x02CD, 0x02CD }, { 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB },
-    { 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0391, 0x03A1 },
-    { 0x03A3, 0x03A9 }, { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 },
-    { 0x0401, 0x0401 }, { 0x0410, 0x044F }, { 0x0451, 0x0451 },
-    { 0x2010, 0x2010 }, { 0x2013, 0x2016 }, { 0x2018, 0x2019 },
-    { 0x201C, 0x201D }, { 0x2020, 0x2022 }, { 0x2024, 0x2027 },
-    { 0x2030, 0x2030 }, { 0x2032, 0x2033 }, { 0x2035, 0x2035 },
-    { 0x203B, 0x203B }, { 0x203E, 0x203E }, { 0x2074, 0x2074 },
-    { 0x207F, 0x207F }, { 0x2081, 0x2084 }, { 0x20AC, 0x20AC },
-    { 0x2103, 0x2103 }, { 0x2105, 0x2105 }, { 0x2109, 0x2109 },
-    { 0x2113, 0x2113 }, { 0x2116, 0x2116 }, { 0x2121, 0x2122 },
-    { 0x2126, 0x2126 }, { 0x212B, 0x212B }, { 0x2153, 0x2154 },
-    { 0x215B, 0x215E }, { 0x2160, 0x216B }, { 0x2170, 0x2179 },
-    { 0x2190, 0x2199 }, { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 },
-    { 0x21D4, 0x21D4 }, { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 },
-    { 0x2202, 0x2203 }, { 0x2207, 0x2208 }, { 0x220B, 0x220B },
-    { 0x220F, 0x220F }, { 0x2211, 0x2211 }, { 0x2215, 0x2215 },
-    { 0x221A, 0x221A }, { 0x221D, 0x2220 }, { 0x2223, 0x2223 },
-    { 0x2225, 0x2225 }, { 0x2227, 0x222C }, { 0x222E, 0x222E },
-    { 0x2234, 0x2237 }, { 0x223C, 0x223D }, { 0x2248, 0x2248 },
-    { 0x224C, 0x224C }, { 0x2252, 0x2252 }, { 0x2260, 0x2261 },
-    { 0x2264, 0x2267 }, { 0x226A, 0x226B }, { 0x226E, 0x226F },
-    { 0x2282, 0x2283 }, { 0x2286, 0x2287 }, { 0x2295, 0x2295 },
-    { 0x2299, 0x2299 }, { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF },
-    { 0x2312, 0x2312 }, { 0x2460, 0x24E9 }, { 0x24EB, 0x254B },
-    { 0x2550, 0x2573 }, { 0x2580, 0x258F }, { 0x2592, 0x2595 },
-    { 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 }, { 0x25B2, 0x25B3 },
-    { 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD }, { 0x25C0, 0x25C1 },
-    { 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB }, { 0x25CE, 0x25D1 },
-    { 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF }, { 0x2605, 0x2606 },
-    { 0x2609, 0x2609 }, { 0x260E, 0x260F }, { 0x2614, 0x2615 },
-    { 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 },
-    { 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 },
-    { 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F },
-    { 0x273D, 0x273D }, { 0x2776, 0x277F }, { 0xE000, 0xF8FF },
-    { 0xFFFD, 0xFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD }
-  };
-
-  /* binary search in table of non-spacing characters */
-  if (bisearch(ucs, ambiguous,
-	       sizeof(ambiguous) / sizeof(struct interval) - 1))
-    return 2;
-
-  return mk_wcwidth(ucs);
-}
-
-
-/*
- * FLTK: was
-int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n)
- */
-int mk_wcswidth_cjk(const unsigned int *pwcs, size_t n)
-{
-  int w, width = 0;
-
-  for (;*pwcs && n-- > 0; pwcs++)
-    if ((w = mk_wcwidth_cjk(*pwcs)) < 0)
-      return -1;
-    else
-      width += w;
-
-  return width;
-}
-
-/*
- * FLTK: end of commented out functions
- */
-#endif
diff --git a/common/fltk/src/xutf8/ucs2fontmap.c b/common/fltk/src/xutf8/ucs2fontmap.c
deleted file mode 100644
index fe3150b..0000000
--- a/common/fltk/src/xutf8/ucs2fontmap.c
+++ /dev/null
@@ -1,380 +0,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#define RET_ILSEQ -1
-#define RET_TOOFEW(x) (-10 - x)
-#define RET_TOOSMALL -2
-#define conv_t void*
-#define ucs4_t unsigned int
-typedef struct {
-  unsigned short indx;
-  unsigned short used;
-} Summary16;
-
-#define NEED_TOMB /* indicates what part of these include files is needed here (avoid compilation warnings) */
-#include "lcUniConv/cp936ext.h"
-#include "lcUniConv/big5.h"
-#include "lcUniConv/gb2312.h"
-#include "lcUniConv/iso8859_10.h"
-#include "lcUniConv/iso8859_11.h"
-#include "lcUniConv/iso8859_13.h"
-#include "lcUniConv/iso8859_14.h"
-#include "lcUniConv/iso8859_15.h"
-#include "lcUniConv/iso8859_2.h"
-#include "lcUniConv/iso8859_3.h"
-#include "lcUniConv/iso8859_4.h"
-#include "lcUniConv/iso8859_5.h"
-#include "lcUniConv/iso8859_6.h"
-#include "lcUniConv/iso8859_7.h"
-#include "lcUniConv/iso8859_8.h"
-#include "lcUniConv/iso8859_9.h"
-#include "lcUniConv/jisx0201.h"
-#include "lcUniConv/jisx0208.h"
-#include "lcUniConv/jisx0212.h"
-#include "lcUniConv/koi8_r.h"
-#include "lcUniConv/koi8_u.h"
-#include "lcUniConv/ksc5601.h"
-#include "lcUniConv/cp1251.h"
-#include "headers/symbol_.h"
-#include "headers/dingbats_.h"
-  
-/*************** conv_gen.c ************/
-
-/*const*/
-int ucs2fontmap(char *s, unsigned int ucs, int enc) {
-  switch(enc) {
-  case 0:	/* iso10646-1 */
-    s[0] = (char) ((ucs & 0xFF00) >> 8);
-    s[1] = (char) (ucs & 0xFF);
-    return 0;
-    break;
-  case 1:	/* iso8859-1 */
-    if (ucs <= 0x00FF) {
-      if (ucs >= 0x0001) {
-        s[0] = 0;
-        s[1] = (char) (ucs & 0xFF);
-        return 1;
-      }
-    }
-    break;
-  case 2:	/* iso8859-2 */
-    if (ucs <= 0x00a0) {
-      s[0] = 0;
-      s[1] = (char) ucs;
-      return 2;
-    } else if (ucs < 0x0180) {
-      if (ucs >= 0x00a0) {
-	s[0] = 0;
-	s[1] = (char)  iso8859_2_page00[ucs-0x00a0];
-        if (s[1]) return 2;
-      }
-    } else if (ucs < 0x02e0) {
-      if (ucs >= 0x02c0) {
-        s[0] = 0;
-        s[1] = (char) iso8859_2_page02[ucs-0x02c0];
-        if (s[1]) return 2;
-      }	
-    }
-    break;
-  case 3:	/* iso8859-3 */
-    if (iso8859_3_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 3;
-    } 
-    break;
-  case 4:	/* iso8859-4 */
-    if (iso8859_4_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 4;
-    } 
-    break;
-  case 5:	/* iso8859-5 */
-    if (iso8859_5_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 5;
-    } 
-    break;
-  case 6:	/* iso8859-6 */
-    if (iso8859_6_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 6;
-    } 
-    break;
-  case 7:	/* iso8859-7 */
-    if (iso8859_7_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 7;
-    } 
-    break;
-  case 8:	/* iso8859-8 */
-    if (iso8859_8_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 8;
-    } 
-    break;
-  case 9:	/* iso8859-9 */
-    if (iso8859_9_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 9;
-    } 
-    break;
-  case 10:	/* iso8859-10 */
-    if (iso8859_10_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 10;
-    } 
-    break;
-  case 25:	/* iso8859-11 */
-    if (iso8859_11_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 25;
-    } 
-    break;
-  case 11:	/* iso8859-13 */
-    if (iso8859_13_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 11;
-    } 
-    break;
-  case 12:	/* iso8859-14 */
-    if (iso8859_14_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 12;
-    } 
-    break;
-  case 13:	/* iso8859-15 */
-    if (iso8859_15_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 13;
-    } 
-    break;
-  case 14:	/* koi8-r */
-    if (koi8_r_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 14;
-    } 
-    break;
-  case 15:	/* big5 */
-    if (big5_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 15;
-    } 
-    break;
-  case 16:	/* ksc5601.1987-0 */
-    if (ksc5601_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 16;
-    } 
-    break;
-  case 17:	/* gb2312.1980-0 */
-    if (gb2312_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 17;
-    } 
-    break;
-  case 18:	/* jisx0201.1976-0 */
-    if (jisx0201_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 18;
-    } 
-    break;
-  case 19:	/* jisx0208.1983-0 */
-    if (jisx0208_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 19;
-    } 
-    break;
-  case 20:	/* jisx0212.1990-0 */
-    if (jisx0212_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 20;
-    } 
-    break;
-  case 21:	/* symbol */
-    if (ucs <= 0x00F7) {
-      if (ucs >= 0x0020) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_0020[ucs - 0x0020];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0x0192) {
-      if (ucs >= 0x0192) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_0192[ucs - 0x0192];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0x03D6) {
-      if (ucs >= 0x0391) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_0391[ucs - 0x0391];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0x232A) {
-      if (ucs >= 0x2022) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_2022[ucs - 0x2022];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0x25CA) {
-      if (ucs >= 0x25CA) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_25CA[ucs - 0x25CA];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0x2666) {
-      if (ucs >= 0x2660) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_2660[ucs - 0x2660];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0xF6DB) {
-      if (ucs >= 0xF6D9) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_F6D9[ucs - 0xF6D9];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0xF8FE) {
-      if (ucs >= 0xF8E5) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_F8E5[ucs - 0xF8E5];
-        if (s[1]) return 21;
-      }
-    }
-    break;
-  case 22:	/* dingbats */
-    if (ucs <= 0x00A0) {
-      if (ucs >= 0x0020) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_0020[ucs - 0x0020];
-        if (s[1]) return 22;
-      }
-    } else if (ucs <= 0x2195) {
-      if (ucs >= 0x2192) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_2192[ucs - 0x2192];
-        if (s[1]) return 22;
-      }
-    } else if (ucs <= 0x2469) {
-      if (ucs >= 0x2460) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_2460[ucs - 0x2460];
-        if (s[1]) return 22;
-      }
-    } else if (ucs <= 0x2666) {
-      if (ucs >= 0x25A0) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_25A0[ucs - 0x25A0];
-        if (s[1]) return 22;
-      }
-    } else if (ucs <= 0x27BE) {
-      if (ucs >= 0x2701) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_2701[ucs - 0x2701];
-        if (s[1]) return 22;
-      }
-    } else if (ucs <= 0xF8E4) {
-      if (ucs >= 0xF8D7) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_F8D7[ucs - 0xF8D7];
-        if (s[1]) return 22;
-      }
-    }
-    break;
-  case 23:	/* koi8-u */
-    if (koi8_u_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 23;
-    } 
-    break;
-  case 24:	/* microsoft-cp1251 */
-    if (cp1251_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 24;
-    } 
-    break;
-  case 26: /* gbk/cp936ext */
-    if (cp936ext_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 26;
-    }
-    break;
-  default:
-    break;
-  };
-  return -1;
-}
-
-/*const*/
-int encoding_number(const char *enc) {
-  if (!enc || !strncmp(enc, "iso10646-1", 10)) {
-    return 0;
-  } else if (!strcmp(enc, "iso8859-1")) {
-    return 1;
-  } else if (!strcmp(enc, "iso8859-2")) {
-    return 2;
-  } else if (!strcmp(enc, "iso8859-3")) {
-    return 3;
-  } else if (!strcmp(enc, "iso8859-4")) {
-    return 4;
-  } else if (!strcmp(enc, "iso8859-5")) {
-    return 5;
-  } else if (!strcmp(enc, "iso8859-6")) {
-    return 6;
-  } else if (!strcmp(enc, "iso8859-7")) {
-    return 7;
-  } else if (!strcmp(enc, "iso8859-8")) {
-    return 8;
-  } else if (!strcmp(enc, "iso8859-9")) {
-    return 9;
-  } else if (!strcmp(enc, "iso8859-10")) {
-    return 10;
-  } else if (!strcmp(enc, "iso8859-13")) {
-    return 11;
-  } else if (!strcmp(enc, "iso8859-14")) {
-    return 12;
-  } else if (!strcmp(enc, "iso8859-15")) {
-    return 13;
-  } else if (!strcmp(enc, "koi8-r")) {
-    return 14;
-  } else if (!strcmp(enc, "big5-0") || !strcmp(enc, "big5.eten-0") ||
-    !strcmp(enc, "big5p-0")) 
-  {
-    return 15;
-  } else if (!strcmp(enc, "ksc5601.1987-0")) {
-    return 16;
-  } else if (!strcmp(enc, "gb2312.1980-0") || !strcmp(enc, "gb2312.80-0") || 
-     !strcmp(enc, "gb2312.80&gb8565.88") ||  !strcmp(enc, "gb2312.80-0")) 
-  {
-    return 17;
-  } else if (!strcmp(enc, "jisx0201.1976-0")) {
-    return 18;
-  } else if (!strcmp(enc, "jisx0208.1983-0") || !strcmp(enc, "jisx0208.1990-0")
-    || !strcmp(enc, "jisx0208.1978-0")) 
-  {
-    return 19;
-  } else if (!strcmp(enc, "jisx0212.1990-0")) {
-    return 20;
-  } else if (!strcmp(enc, "symbol")) {
-    return 21;
-  } else if (!strcmp(enc, "dingbats") || !strcmp(enc, "zapfdingbats") || 
-    !strcmp(enc, "zapf dingbats") || !strcmp(enc, "itc zapf dingbats")) 
-  {
-    return 22;
-  } else if (!strcmp(enc, "koi8-u")) {
-    return 23;
-  } else if (!strcmp(enc, "microsoft-cp1251")) {
-    return 24;
-  } else if (!strcmp(enc, "iso8859-11")) {
-    return 25;
-  } else if (!strcmp(enc, "gbk-0") || !strcmp(enc, "cp936") || !strcmp(enc, "gbk")) {
-    return 26;
-  };
-  return -1;
-}
-
-/*
- * End of "$Id$".
- */
diff --git a/common/fltk/src/xutf8/utf8Input.c b/common/fltk/src/xutf8/utf8Input.c
deleted file mode 100644
index 2fb415b..0000000
--- a/common/fltk/src/xutf8/utf8Input.c
+++ /dev/null
@@ -1,459 +0,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-
-#include <config.h>
-#include "../../FL/Xutf8.h"
-#include <X11/X.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <string.h>
-#include <stdlib.h>
-
-#if HAVE_LIBC_ICONV
-#include <iconv.h>
-#endif
-/*
-  I haven't found much doc on the web about EUC encodings, so I've used
-  GNU libiconv source code as a reference.
-  http://clisp.cons.org/~haible/packages-libiconv.html
-*/
-
-#define RET_ILSEQ -1
-#define RET_TOOFEW(x) (-10 - x)
-#define RET_TOOSMALL -2
-#define conv_t void*
-#define ucs4_t unsigned int
-typedef struct {
-  unsigned short indx;
-  unsigned short used;
-} Summary16;
-
-#define NEED_TOWC /* indicates what part of these include files is needed here (avoid compilation warnings) */
-#include "lcUniConv/big5.h"
-#include "lcUniConv/gb2312.h"
-#include "lcUniConv/cp936ext.h"
-#include "lcUniConv/jisx0201.h"
-#include "lcUniConv/jisx0208.h"
-#include "lcUniConv/jisx0212.h"
-#include "lcUniConv/ksc5601.h"
-
-int 
-XConvertEucTwToUtf8(char* buffer_return, int len) {
-  /* FIXME */
-#if HAVE_LIBC_ICONV
-  iconv_t cd;
-  int cdl;
-#else
-  int i = 0;
-#endif
-  int l = 0;
-  char *buf, *b;
-
-  if (len < 1) return 0;
-  b = buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned) len);
-
-#if HAVE_LIBC_ICONV
-  l = cdl = len;
-  cd = iconv_open("EUC-TW", "UTF-8");
-  iconv(cd, &b, &len, &buffer_return, &cdl);
-  iconv_close(cd);
-  l -= cdl;	
-#else
-  while (i < len) {
-    unsigned int ucs;
-    unsigned char c; 
-    c = (unsigned char) buf[i];
-    if (c < 0x80) {
-      ucs = c;	
-      i++;
-    } else if (c >= 0xa1 && c < 0xff && len - i > 1 ) {
-      unsigned char b[2];
-      b[0] = (unsigned char) c - 0x80;
-      b[1] = (unsigned char) buf[i + 1] - 0x80;
-      ucs = ' '; i += 2;
-    } else if (c == 0x8e &&  len - i > 3) {
-      unsigned char b[2];
-      unsigned char c1 =  buf[i + 1];
-      unsigned char c2 =  buf[i + 2];
-      unsigned char c3 =  buf[i + 3];
-      b[0] = (unsigned char)  buf[i + 2] - 0x80;
-      b[1] = (unsigned char)  buf[i + 3] - 0x80;
-      if (c1 >= 0xa1 && c1 <= 0xb0) {
-	if (c2 >= 0xa1 && c2 < 0xff && c3 >= 0xa1 && c3 < 0xff) {
-	  ucs = ' '; i += 4;
-	} else {
-	  ucs = '?'; i++;
-	}
-      } else {
-	ucs = '?'; i++;
-      }
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-#endif
-  free(buf);
-  return l;
-}
-
-int 
-XConvertEucKrToUtf8(char* buffer_return, int len) {
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  while (i < len) {
-    unsigned int ucs;
-    unsigned char c, c1;
-    c = (unsigned char) buf[i];
-    if (c < 0x80) {
-      ucs = c;	
-      i++;
-    } else if (c >= 0xA1 && c < 0xFF && len - i > 1) {
-      c1 = (unsigned char) buf[i + 1];
-      if (c1 >= 0xa1 && c1 < 0xff) {
-	unsigned char b[2];
-	b[0] = c - 0x80;
-	b[1] = c1 - 0x80;
-	if (ksc5601_mbtowc(NULL, &ucs, b, 2) < 1) {
-	  ucs = '?';
-	}
-      } else {
-	ucs = '?';
-      }
-      i += 2;
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-int 
-XConvertBig5ToUtf8(char* buffer_return, int len) {
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  if (len == 1) {
-    l += XConvertUcsToUtf8((unsigned int)buf[i], buffer_return + l);
-  }
-  while (i + 1 < len) {
-    unsigned int ucs;
-    unsigned char b[2];
-    b[0] = (unsigned char) buf[i];
-    b[1] = (unsigned char) buf[i + 1];
-    if (big5_mbtowc(NULL, &ucs, b, 2) == 2) {
-      i += 2;
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-int 
-XConvertCp936extToUtf8(char* buffer_return, int len)
-{
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  if (len == 1) {
-	  l += XConvertUcsToUtf8((unsigned int)buf[i], buffer_return + l);
-  }
-  while (i + 1 < len) {
-	  unsigned int ucs;
-	  unsigned char b[2];
-	  b[0] = (unsigned char) buf[i];
-	  b[1] = (unsigned char) buf[i + 1];
-	  if (cp936ext_mbtowc(NULL, &ucs, b, 2) == 2) {
-		  i += 2;
-	  } else {
-	      if ( b[0] < 0x80) {
-		    ucs = b[0];
-		}else{
-			      ucs = '?';
-		  }
-			  i++;
-		  }
-	  l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  if(i + 1 == len) { 
-      l += XConvertUcsToUtf8((unsigned int)buf[i], buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-int 
-XConvertGb2312ToUtf8(char* buffer_return, int len) {
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  if (len == 1) {
-    l += XConvertUcsToUtf8((unsigned int)buf[i], buffer_return + l);
-  }
-  while (i + 1 < len) {
-    unsigned int ucs;
-    unsigned char b[2];
-    b[0] = (unsigned char) buf[i];
-    b[1] = (unsigned char) buf[i + 1];
-    if ( b[0] < 0x80 ) {
-      ucs = b[0];
-      i++;
-    } else if (gb2312_mbtowc(NULL, &ucs, b, 2) == 2) {
-      i += 2;
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  if (i + 1 == len) {
-    l += XConvertUcsToUtf8((unsigned int)buf[i], buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-int 
-XConvertEucCnToUtf8(char* buffer_return, int len) {
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  while (i < len) {
-    unsigned int ucs;
-    unsigned char c, c1;
-    c = (unsigned char) buf[i];
-    if (c < 0x80) {
-      ucs = c;	
-      i++;
-    } else if (c >= 0xA1 && c < 0xFF && len - i > 1) {
-      c1 = (unsigned char) buf[i + 1];
-      if (c1 >= 0xa1 && c1 < 0xff) {	
-	unsigned char b[2];
-	b[0] = (unsigned char) c;
-	b[1] = (unsigned char) c1;
-	if (gb2312_mbtowc(NULL, &ucs, b, 2) < 1) {
-	  ucs = '?';
-	}	
-      } else {
-	ucs = '?';
-      }
-      i += 2;
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-int 
-XConvertEucJpToUtf8(char* buffer_return, int len) {
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  while (i < len) {
-    unsigned int ucs;
-    unsigned char c, c1;
-    c = (unsigned char) buf[i];
-    if (c < 0x80) {
-      ucs = c;	
-      i++;
-    } else if (c >= 0xA1 && c < 0xFF && len - i > 1) {
-      c1 = (unsigned char) buf[i + 1];		
-      if (c < 0xF5 && c1 >= 0xa1) {
-	unsigned char b[2];
-	b[0] = c - 0x80;
-	b[1] = c1 - 0x80;
-	if (jisx0208_mbtowc(NULL, &ucs, b, 2) < 1) { 
-	  ucs = '?';
-	}
-      } else if (c1 >= 0xA1 && c1 < 0xFF) {
-	ucs = 0xE000 + 94 * (c - 0xF5) + (c1 - 0xA1);
-      } else {
-	ucs = '?';
-      }
-      i += 2;
-    } else if (c == 0x8E && len - i > 1) {
-      c1 = (unsigned char) buf[i + 1];		
-      if (c1 >= 0xa1 && c1 <= 0xe0) {
-	if (jisx0201_mbtowc(NULL, &ucs, &c1, 1) != 1) {
-	  ucs = '?';
-	}
-      } else {
-	ucs = '?';
-      }
-      i += 2;
-    } else if (c == 0x8F && len - i > 2) {
-      c = (unsigned char) buf[i + 1];		
-      c1 = (unsigned char) buf[i + 2];	
-      if (c >= 0xa1 && c < 0xff) {
-	if (c < 0xf5 && c1 >= 0xa1 && c1 < 0xff) {
-	  unsigned char b[2];
-	  b[0] = c - 0x80;
-	  b[1] = c1 - 0x80;
-	  if (jisx0212_mbtowc(NULL, &ucs, b, 2) < 1) {
-	    ucs = '?';
-	  }
-	} else {
-	  ucs = '?';
-	}
-      } else {
-	if (c1 >= 0xa1 && c1 < 0xff) {
-	  ucs = 0xe3ac + 94 * (c - 0xF5) + (c1 - 0xA1);
-	} else {
-	  ucs = '?';
-	}
-      }
-      i += 3;
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-int
-XConvertEucToUtf8(const char*	locale,
-		  char*		buffer_return, 
-		  int		len, 
-		  int		bytes_buffer) {
-
-  /* if (!locale) { */
-  /* if (!locale || strstr(locale, "UTF") || strstr(locale, "utf")) { */
-  if (!locale || strstr(locale, "UTF") || strstr(locale, "utf")) {
-    return len;
-  }
-
-  if (strstr(locale, "ja")) {	
-    return XConvertEucJpToUtf8(buffer_return, len);
-  } else if (strstr(locale, "Big5") || strstr(locale, "big5")) { /* BIG5 */
-    return XConvertBig5ToUtf8(buffer_return, len);
-  } else if (strstr(locale, "GBK") || strstr(locale, "gbk")) {
-    return XConvertCp936extToUtf8(buffer_return, len);
-  } else if (strstr(locale, "zh") || strstr(locale, "chinese-")) {
-    if (strstr(locale, "TW") || strstr(locale, "chinese-t")) {
-      if (strstr(locale, "EUC") || strstr(locale, "euc") || strstr(locale, "chinese-t")) {
-	return XConvertEucTwToUtf8(buffer_return, len);
-      }
-      return XConvertBig5ToUtf8(buffer_return, len);
-    }
-    if (strstr(locale, "EUC") || strstr(locale, "euc")) {
-      return XConvertEucCnToUtf8(buffer_return, len);
-    }
-    return XConvertGb2312ToUtf8(buffer_return, len);
-  } else if (strstr(locale, "ko")) { 
-    return XConvertEucKrToUtf8(buffer_return, len);
-  }
-  return len;
-}
-
-int
-XUtf8LookupString(XIC                 ic,
-		  XKeyPressedEvent*   event,
-		  char*               buffer_return,
-		  int                 bytes_buffer,
-		  KeySym*             keysym,
-		  Status*             status_return) {
-
-  long ucs = -1;
-  int len;
-  len = XmbLookupString(ic, event, buffer_return, bytes_buffer / 5,
-		        keysym, status_return);
-  if (*status_return == XBufferOverflow) {
-    return len * 5;
-  }
-  if (*keysym > 0 && *keysym < 0x100 && len == 1) {
-    if (*keysym < 0x80) {
-      ucs = (unsigned char)buffer_return[0];
-    } else {
-      ucs = *keysym;
-    }
-  } else  if (((*keysym >= 0x100 && *keysym <= 0xf000) ||
-	      (*keysym & 0xff000000U) == 0x01000000))
-  {
-    ucs = XKeysymToUcs(*keysym);
-  } else {
-    ucs = -2;
-  }
-
-  if (ucs > 0) {
-    len = XConvertUcsToUtf8((unsigned)ucs, (char *)buffer_return);
-  } else if (len > 0) {
-    XIM im;
-    if (!ic) return 0;
-    im = XIMOfIC(ic);
-    if (!im) return 0;
-    len = XConvertEucToUtf8(XLocaleOfIM(im), buffer_return, len, bytes_buffer);	
-  }
-  return len;
-}
-
-#endif /* X11 only */
-
-/*
- * End of "$Id$".
- */
diff --git a/common/fltk/src/xutf8/utf8Utils.c b/common/fltk/src/xutf8/utf8Utils.c
deleted file mode 100644
index 6c177a7..0000000
--- a/common/fltk/src/xutf8/utf8Utils.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * Unicode to UTF-8 conversion functions.
- */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-
-#include "../../FL/Xutf8.h"
-
-/*** NOTE : all functions are LIMITED to 24 bits Unicode values !!! ***/
-
-/* 
- * Converts the first char of the UTF-8 string to an Unicode value 
- * Returns the byte length of the converted UTF-8 char 
- * Returns -1 if the UTF-8 string is not valid 
- */
-int
-XConvertUtf8ToUcs(const unsigned char     *buf,
-		  int                     len,
-		  unsigned int         	  *ucs) {
-
-  if (buf[0] & 0x80) {
-    if (buf[0] & 0x40) {
-      if (buf[0] & 0x20) {
-	if (buf[0] & 0x10) {
-	  if (buf[0] & 0x08) {
-	    if (buf[0] & 0x04) {
-	      if (buf[0] & 0x02) {
-		/* bad UTF-8 string */
-	      } else {
-		/* 0x04000000 - 0x7FFFFFFF */
-	      }	
-	    } else if (len > 4 
-		       && (buf[1] & 0xC0) == 0x80
-		       && (buf[2] & 0xC0) == 0x80
-		       && (buf[3] & 0xC0) == 0x80
-		       && (buf[4] & 0xC0) == 0x80) {
-	      /* 0x00200000 - 0x03FFFFFF */
-	      *ucs =  ((buf[0] & ~0xF8) << 24) +
-		      ((buf[1] & ~0x80) << 18) +
-		      ((buf[2] & ~0x80) << 12) +
-		      ((buf[3] & ~0x80) << 6) +
-		       (buf[4] & ~0x80);
-	      if (*ucs > 0x001FFFFF && *ucs < 0x01000000) return 5;
-	    }
-	  } else if (len > 3 
-		     && (buf[1] & 0xC0) == 0x80
-		     && (buf[2] & 0xC0) == 0x80
-		     && (buf[3] & 0xC0) == 0x80) {
-	    /* 0x00010000 - 0x001FFFFF */
-	    *ucs =  ((buf[0] & ~0xF0) << 18) +
-		    ((buf[1] & ~0x80) << 12) +
-		    ((buf[2] & ~0x80) << 6) +
-		     (buf[3] & ~0x80);
-	    if (*ucs > 0x0000FFFF) return 4;
-	  }
-	} else if (len > 2
-	           && (buf[1] & 0xC0) == 0x80 
-		   && (buf[2] & 0xC0) == 0x80) {
-	  /* 0x00000800 - 0x0000FFFF */
-	  *ucs =  ((buf[0] & ~0xE0) << 12) +
-		  ((buf[1] & ~0x80) << 6) +
-		   (buf[2] & ~0x80);
-	  if (*ucs > 0x000007FF) return 3;
-	}	
-      } else if (len > 1 && (buf[1] & 0xC0) == 0x80) {
-	/* 0x00000080 - 0x000007FF */
-	*ucs = ((buf[0] & ~0xC0) << 6) +
-		(buf[1] & ~0x80);
-	if (*ucs > 0x0000007F) return 2;
-      }
-    }
-  } else if (len > 0) {
-    /* 0x00000000 - 0x0000007F */
-    *ucs = buf[0];
-    return 1;
-  } 
-
-  *ucs = (unsigned int) '?'; /* bad utf-8 string */
-  return -1;
-}
-
-/* 
- * Converts an Unicode value to an UTF-8 string 
- * NOTE : the buffer (buf) must be at least 5 bytes long !!!  
- */
-int 
-XConvertUcsToUtf8(unsigned int 	ucs, 
-		  char 		*buf) {
-
-  if (ucs < 0x000080) {
-    buf[0] = ucs;
-    return 1;
-  } else if (ucs < 0x000800) {
-    buf[0] = 0xC0 | (ucs >> 6);
-    buf[1] = 0x80 | (ucs & 0x3F);
-    return 2;
-  } else if (ucs < 0x010000) { 
-    buf[0] = 0xE0 | (ucs >> 12);
-    buf[1] = 0x80 | ((ucs >> 6) & 0x3F);
-    buf[2] = 0x80 | (ucs & 0x3F);
-    return 3;
-  } else if (ucs < 0x00200000) {
-    buf[0] = 0xF0 | (ucs >> 18);
-    buf[1] = 0x80 | ((ucs >> 12) & 0x3F);
-    buf[2] = 0x80 | ((ucs >> 6) & 0x3F);
-    buf[3] = 0x80 | (ucs & 0x3F);
-    return 4;
-  } else if (ucs < 0x01000000) {
-    buf[0] = 0xF8 | (ucs >> 24);
-    buf[1] = 0x80 | ((ucs >> 18) & 0x3F);
-    buf[2] = 0x80 | ((ucs >> 12) & 0x3F);
-    buf[3] = 0x80 | ((ucs >> 6) & 0x3F);
-    buf[4] = 0x80 | (ucs & 0x3F);
-    return 5;
-  }
-  buf[0] = '?';
-  return -1;
-}
-
-/* 
- * returns the byte length of the first UTF-8 char 
- * (returns -1 if not valid) 
- */
-int
-XUtf8CharByteLen(const unsigned char     *buf,
-		 int                     len) {
-  unsigned int ucs;
-  return XConvertUtf8ToUcs(buf, len, &ucs);
-}
-
-/*
- * returns the quantity of Unicode chars in the UTF-8 string 
- */
-int 
-XCountUtf8Char(const unsigned char 	*buf, 
-	       int 			len) {
-
-  int i = 0;
-  int nbc = 0;
-  while (i < len) {
-    int cl = XUtf8CharByteLen(buf + i, len - i);
-    if (cl < 1) cl = 1;
-    nbc++;
-    i += cl;
-  }
-  return nbc;
-}
-
-/* 
- * Same as XConvertUtf8ToUcs but no sanity check is done.
- */
-int
-XFastConvertUtf8ToUcs(const unsigned char     *buf,
-		      int                     len,
-		      unsigned int            *ucs) {
-
-  if (buf[0] & 0x80) {
-    if (buf[0] & 0x40) {
-      if (buf[0] & 0x20) {
-	if (buf[0] & 0x10) {
-	  if (buf[0] & 0x08) {
-	    if (buf[0] & 0x04) {
-	      if (buf[0] & 0x02) {
-		/* bad UTF-8 string */
-	      } else {
-		/* 0x04000000 - 0x7FFFFFFF */
-	      }	
-	    } else if (len > 4) {
-	      /* 0x00200000 - 0x03FFFFFF */
-	      *ucs =  ((buf[0] & ~0xF8) << 24) +
-		      ((buf[1] & ~0x80) << 18) +
-		      ((buf[2] & ~0x80) << 12) +
-		      ((buf[3] & ~0x80) << 6) +
-		       (buf[4] & ~0x80);
-	      return 5;
-	    }
-	  } else if (len > 3) {
-	    /* 0x00010000 - 0x001FFFFF */
-	    *ucs =  ((buf[0] & ~0xF0) << 18) +
-		    ((buf[1] & ~0x80) << 12) +
-		    ((buf[2] & ~0x80) << 6) +
-		     (buf[3] & ~0x80);
-	    return 4;
-	  }
-	} else if (len > 2) {
-	  /* 0x00000800 - 0x0000FFFF */
-	  *ucs =  ((buf[0] & ~0xE0) << 12) +
-		  ((buf[1] & ~0x80) << 6) +
-		   (buf[2] & ~0x80);
-	  return 3;
-	}	
-      } else if (len > 1) {
-	/* 0x00000080 - 0x000007FF */
-	*ucs = ((buf[0] & ~0xC0) << 6) +
-		(buf[1] & ~0x80);
-	return 2;
-      }
-    }
-  } else if (len > 0) {
-    /* 0x00000000 - 0x0000007F */
-    *ucs = buf[0];
-    return 1;
-  } 
-
-  *ucs = (unsigned int) '?'; /* bad utf-8 string */
-  return -1;
-}
-
-#endif /* X11 only */
-
-/*
- * End of "$Id: $".
- */
diff --git a/common/fltk/src/xutf8/utf8Wrap.c b/common/fltk/src/xutf8/utf8Wrap.c
deleted file mode 100644
index 1d7f523..0000000
--- a/common/fltk/src/xutf8/utf8Wrap.c
+++ /dev/null
@@ -1,1049 +0,0 @@
-/* "$Id: utf8Wrap.c 8401 2011-02-08 10:06:19Z ianmacarthur $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA.
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * X11 UTF-8 text drawing functions.
- */
-#if !defined(WIN32) && !defined(__APPLE__)
-
-#include "../../FL/Xutf8.h"
-#include <X11/Xlib.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-/* External auto generated functions : */
-#include "ucs2fontmap.c"
-/*
- * extern int ucs2fontmap(char *s, unsigned int ucs, int enc);
- * extern int encoding_number(const char *enc);
- * extern const char *encoding_name(int num);
- */
-
-/* The ARM header files have a bug by not taking into account that ARM cpu
- * likes pacing to 4 bytes. This little trick defines our own version of
- * XChar2b which does not have this problem
- */
-
-#if defined(__GNUC__) && defined(__arm__) && !defined(__ARM_EABI__)
-typedef struct {
-  unsigned char byte1;
-  unsigned char byte2;
-}
-__attribute__ ((packed))
-Fl_XChar2b;
-#else
-#define Fl_XChar2b XChar2b
-#endif
-
-
-/*********************************************************************/
-/** extract a list of font from the base font name list             **/
-/*********************************************************************/
-static int
-get_font_list(
-	const char	*base_font_name_list,
-	char 		***flist) {
-  const char *ptr;
-  const char *p;
-  int nb;
-  int nb_name;
-
-  ptr = base_font_name_list;
-  p = NULL;
-  nb = 0;
-  nb_name = 1;
-
-  while (*ptr) {
-    if (*ptr == ',') nb_name++;
-    ptr++;
-  }
-
-  *flist = (char **) malloc(sizeof(char*) * nb_name);
-  ptr = base_font_name_list;
-
-  while (*ptr) {
-    int l = 0, i = 0;
-
-    while(isspace(*ptr)) ptr++;
-    p = ptr;
-    while (*ptr && *ptr != ',') { ptr++; l++; }
-    if (l > 2) {
-      (*flist)[nb] = (char*) malloc((unsigned)l + 2);
-      while (p != ptr) { ((*flist)[nb])[i] = *p; i++; p++; }
-      (*flist)[nb][i] = '\0';
-      nb++;
-    }
-    if (*ptr) ptr++;
-  }
-  if (nb < 1) {
-    free(*flist);
-    *flist = (char**)NULL;
-  }
-  return nb;
-}
-
-/*********************************************************************/
-/** get the font name used as encoding for "fontspecific" encoding  **/
-/** (mainly used for adobe-symbol and adobe-zapfdingbats)	    **/
-/*********************************************************************/
-static int
-font_spec_enc(char *font) {
-  int ret;
-  char *enc;
-  char *end;
-
-  enc = font;
-  while (*enc != '-') enc++;
-  enc++;
-  while (*enc != '-') enc++;
-  enc++;
-  end = enc;
-  while (*end != '-') end++;
-  *end = '\0';
-
-  ret = encoding_number(enc);
-  *end = '-';
-
-  return ret;
-}
-
-
-/*********************************************************************/
-/** get the sub range of a iso10646-1 font			    **/
-/*********************************************************************/
-static void
-get_range(const char	*enc,
-	  int 		*min,
-	  int		*max) {
-
-  const char *ptr = enc;
-  const char *ptr1;
-
-  if (!enc) return;
-
-  while (*ptr && *ptr != '-') ptr++;
-  if (!*ptr) return;
-  while (*ptr && *ptr != '[') ptr++;
-  if (!*ptr) return;
-  *min = 0xFFFF;
-  *max = 0;
-  while (*ptr && *ptr != ']') {
-    int val;
-    ptr++;
-    ptr1 = ptr;
-    while (*ptr && *ptr != ']' && *ptr != ' ' && *ptr != '_') ptr++;
-    val = strtol(ptr1, NULL, 0);
-    if (val < *min) *min = val;
-    if (val > *max) *max = val;
-  }
-}
-
-/*********************************************************************/
-/** get the internal encoding number of each fonts 		    **/
-/*********************************************************************/
-static int *
-get_encodings(char	**font_name_list,
-	      int 	*ranges,
-	      int 	nb_font) {
-
-  int *font_encoding_list;
-  int i;
-  i = 0;
-
-  font_encoding_list = (int *) malloc(sizeof(int) * nb_font);
-  while (i < nb_font) {
-    char *ptr;
-    int ec;
-    ptr = font_name_list[i];
-    ec = 0;
-    font_encoding_list[i] = -1;
-    ranges[i * 2] = 0;
-    ranges[i * 2 + 1] = 0xFFFF;
-
-    if (ptr && strstr(ptr, "fontspecific")) {
-      font_encoding_list[i] = font_spec_enc(ptr);
-      ptr = NULL;
-    }
-    while (ptr && *ptr) {
-      if (*ptr == '-') {
-	ec++;
-	if (ec == 13) {
-	  font_encoding_list[i] = encoding_number(ptr + 1);
-	  if (font_encoding_list[i] == 0) {
-	    get_range(ptr + 1,
-		      ranges + i * 2,
-		      ranges + i * 2 + 1);
-	  }
-	  break;
-	}
-      }
-      ptr++;
-    }
-    if (font_encoding_list[i] < 0) font_encoding_list[i] = 1;
-    i++;
-  }
-  return font_encoding_list;
-}
-
-/*********************************************************************/
-/** find the first font which matches the name and load it.	    **/
-/*********************************************************************/
-XFontStruct *
-find_best_font(Display  *dpy,
-	       char     **name) {
-
-  char **list;
-  int cnt;
-  XFontStruct *s;
-
-  list = XListFonts(dpy, *name, 1, &cnt);
-  if (cnt && list) {
-    free(*name);
-    *name = strdup(list[0]);
-    s = XLoadQueryFont(dpy, *name);
-    XFreeFontNames(list);
-    return s;
-  }
-  return NULL;
-}
-
-/*********************************************************************/
-/** load all fonts 						    **/
-/*********************************************************************/
-static void
-load_fonts(Display 	   *dpy,
-	   XUtf8FontStruct *font_set) {
-
-  int i;
-  char **list;
-
-  i = 0;
-  list = NULL;
-
-  font_set->fonts = (XFontStruct**) malloc(sizeof(XFontStruct*) *
-                                           font_set->nb_font);
-
-  font_set->ranges = (int*) malloc(sizeof(int) *
-                                   font_set->nb_font * 2);
-
-  font_set->descent = 0;
-  font_set->ascent = 0;
-  font_set->fid = 0;
-
-  while (i < font_set->nb_font) {
-    XFontStruct *fnt;
-
-    fnt = font_set->fonts[i] =
-      find_best_font(dpy, &(font_set->font_name_list[i]));
-    if (fnt) {
-      font_set->fid = fnt->fid;
-      if (fnt->ascent > font_set->ascent) {
-	font_set->ascent = fnt->ascent;
-      }
-      if (fnt->descent > font_set->descent) {
-	font_set->descent = fnt->descent;
-      }
-    } else {
-      free(font_set->font_name_list[i]);
-      font_set->font_name_list[i] = NULL;
-    }
-    i++;
-  }
-
-  font_set->encodings =
-    get_encodings(font_set->font_name_list,
-      font_set->ranges, font_set->nb_font);
-
-  /* unload fonts with same encoding */
-  for (i = 0; i < font_set->nb_font; i++) {
-    if (font_set->font_name_list[i]) {
-      int j;
-      for (j = 0; j < i; j++) {
-	if (font_set->font_name_list[j] &&
-	    font_set->encodings[j] ==
-	    font_set->encodings[i] &&
-	    font_set->ranges[2*j] ==
-	    font_set->ranges[2*i] &&
-	    font_set->ranges[(2*j)+1] &&
-	    font_set->ranges[(2*i)+1]) {
-	  XFreeFont(dpy, font_set->fonts[i]);
-	  free(font_set->font_name_list[i]);
-	  font_set->font_name_list[i] = NULL;
-	  font_set->fonts[i] = 0;
-	}
-      }
-    }
-  }
-}
-
-/*********************************************************************/
-/** Creates an array of XFontStruct acording to the comma separated **/
-/** list of fonts. XLoad all fonts.				    **/
-/*********************************************************************/
-XUtf8FontStruct *
-XCreateUtf8FontStruct(Display    *dpy,
-		      const char *base_font_name_list) {
-
-  XUtf8FontStruct *font_set;
-
-  font_set = (XUtf8FontStruct*)malloc(sizeof(XUtf8FontStruct));
-
-  if (!font_set) {
-    return NULL;
-  }
-
-  font_set->nb_font = get_font_list(base_font_name_list,
-				    &font_set->font_name_list);
-
-  if (font_set->nb_font < 1) {
-    free(font_set);
-    return NULL;
-  }
-
-  load_fonts(dpy, font_set);
-
-  return font_set;
-}
-
-
-/*****************************************************************************/
-/** draw a Right To Left UTF-8 string using multiple fonts as needed.	    **/
-/*****************************************************************************/
-void
-XUtf8DrawRtlString(Display 		*display,
-		   Drawable 		d,
-		   XUtf8FontStruct 	*font_set,
-		   GC 			gc,
-		   int 			x,
-		   int 			y,
-		   const char		*string,
-		   int 			num_bytes) {
-
-  int 		*encodings;	/* encodings array */
-  XFontStruct 	**fonts;	/* fonts array */
-  Fl_XChar2b 	buf[128];	/* drawing buffer */
-  Fl_XChar2b	*ptr;		/* pointer to the drawing buffer */
-  int 		fnum;		/* index of the current font in the fonts array*/
-  int 		i;		/* current byte in the XChar2b buffer */
-  int 		first;		/* first valid font index */
-  int 		last_fnum;	/* font index of the previous char */
-  int 		nb_font;	/* quantity of fonts in the font array */
-  char 		glyph[2];	/* byte1 and byte2 value of the UTF-8 char */
-  int		*ranges;	/* sub range of iso10646 */
-
-  nb_font = font_set->nb_font;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return;
-  }
-
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  i = 0;
-  fnum = 0;
-  ptr = buf + 128;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return;
-  }
-
-  first = fnum;
-  last_fnum = fnum;
-
-  while (num_bytes > 0) {
-    int 	 ulen;   /* byte length of the UTF-8 char */
-    unsigned int ucs;    /* Unicode value of the UTF-8 char */
-    unsigned int no_spc; /* Spacing char equivalent of a non-spacing char */
-
-    if (i > 120) {
-      /*** draw the buffer **/
-      XSetFont(display, gc, fonts[fnum]->fid);
-      x -= XTextWidth16(fonts[fnum], ptr, i);
-      XDrawString16(display, d, gc, x, y, ptr, i);
-      i = 0;
-      ptr = buf + 128;
-    }
-
-    ulen = XFastConvertUtf8ToUcs((unsigned char*)string, num_bytes, &ucs);
-
-    if (ulen < 1) ulen = 1;
-
-    no_spc = XUtf8IsNonSpacing(ucs);
-    if (no_spc) ucs = no_spc;
-
-    /*
-     * find the first encoding which can be used to
-     * draw the glyph
-     */
-    fnum = first;
-    while (fnum < nb_font) {
-      if (fonts[fnum] && ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-	if (encodings[fnum] != 0 ||
-	    (ucs >= ranges[fnum * 2] && ucs <= ranges[fnum * 2 + 1])) {
-	  break;
-	}
-      }
-      fnum++;
-    }
-    if (fnum == nb_font) {
-      /* the char is not valid in all encodings ->
-       * draw it using the first font :-(
-       */
-      fnum = first;
-      ucs2fontmap(glyph, '?', encodings[fnum]);
-    }
-
-    if (last_fnum != fnum || no_spc) {
-      XSetFont(display, gc, fonts[last_fnum]->fid);
-      x -= XTextWidth16(fonts[last_fnum], ptr, i);
-      XDrawString16(display, d, gc, x, y, ptr, i);
-      i = 0;
-      ptr = buf + 127;
-      (*ptr).byte1 = glyph[0];
-      (*ptr).byte2 = glyph[1];
-      if (no_spc) {
-	x += XTextWidth16(fonts[fnum], ptr, 1);
-      }
-    } else {
-      ptr--;
-      (*ptr).byte1 = glyph[0];
-      (*ptr).byte2 = glyph[1];
-    }
-    last_fnum = fnum;
-    i++;
-    string += ulen;
-    num_bytes -= ulen;
-  }
-
-  if (i < 1) return;
-
-  XSetFont(display, gc, fonts[fnum]->fid);
-  x -= XTextWidth16(fonts[last_fnum], ptr, i);
-  XDrawString16(display, d, gc, x, y, ptr, i);
-}
-
-
-/*****************************************************************************/
-/** draw an UTF-8 string using multiple fonts as needed.		    **/
-/*****************************************************************************/
-void
-XUtf8DrawString(Display 	*display,
-	        Drawable 	d,
-                XUtf8FontStruct *font_set,
-	        GC 		gc,
-	        int 		x,
-	        int 		y,
-	        const char	*string,
-                int 		num_bytes) {
-
-  int 		*encodings; /* encodings array */
-  XFontStruct 	**fonts;    /* fonts array */
-  Fl_XChar2b 	buf[128];   /* drawing buffer */
-  int 		fnum;       /* index of the current font in the fonts array*/
-  int 		i;          /* current byte in the XChar2b buffer */
-  int 		first;      /* first valid font index */
-  int 		last_fnum;  /* font index of the previous char */
-  int 		nb_font;    /* quantity of fonts in the font array */
-  char 		glyph[2];   /* byte1 and byte2 value of the UTF-8 char */
-  int		*ranges;    /* sub range of iso10646 */
-
-  nb_font = font_set->nb_font;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return;
-  }
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  i = 0;
-  fnum = 0;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return;
-  }
-
-  first = fnum;
-  last_fnum = fnum;
-
-  while (num_bytes > 0) {
-    int 	 ulen;   /* byte length of the UTF-8 char */
-    unsigned int ucs;    /* Unicode value of the UTF-8 char */
-    unsigned int no_spc; /* Spacing char equivalent of a non-spacing char */
-
-    if (i > 120) {
-      /*** draw the buffer **/
-      XSetFont(display, gc, fonts[fnum]->fid);
-      XDrawString16(display, d, gc, x, y, buf, i);
-      x += XTextWidth16(fonts[fnum], buf, i);
-      i = 0;
-    }
-
-    ulen = XFastConvertUtf8ToUcs((unsigned char*)string, num_bytes, &ucs);
-
-    if (ulen < 1) ulen = 1;
-
-    no_spc = XUtf8IsNonSpacing(ucs);
-    if (no_spc) ucs = no_spc;
-
-    /*
-     * find the first encoding which can be used to
-     * draw the glyph
-     */
-    fnum = first;
-    while (fnum < nb_font) {
-      if (fonts[fnum] && ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-	if (encodings[fnum] != 0 ||
-	    (ucs >= ranges[fnum * 2] &&
-	    ucs <= ranges[fnum * 2 + 1])) {
-	  break;
-	}
-      }
-      fnum++;
-    }
-    if (fnum == nb_font) {
-      /* the char is not valid in all encodings ->
-       * draw it using the first font :-(
-       */
-      fnum = first;
-      ucs2fontmap(glyph, '?', encodings[fnum]);
-    }
-
-    if (last_fnum != fnum || no_spc) {
-      XSetFont(display, gc, fonts[last_fnum]->fid);
-      XDrawString16(display, d, gc, x, y, buf, i);
-      x += XTextWidth16(fonts[last_fnum], buf, i);
-      i = 0;
-      (*buf).byte1 = glyph[0];
-      (*buf).byte2 = glyph[1];
-      if (no_spc) {
-	x -= XTextWidth16(fonts[fnum], buf, 1);
-      }
-    } else {
-      (*(buf + i)).byte1 = glyph[0];
-      (*(buf + i)).byte2 = glyph[1];
-    }
-    last_fnum = fnum;
-    i++;
-    string += ulen;
-    num_bytes -= ulen;
-  }
-
-  XSetFont(display, gc, fonts[fnum]->fid);
-  XDrawString16(display, d, gc, x, y, buf, i);
-}
-
-
-/*****************************************************************************/
-/** Measure the inked extents of a UTF-8 string using multiple fonts as     **/
-/** needed. Tries to mirror the behaviour of the draw function              **/
-/** XUtf8DrawString() as closely as possible to get consistent sizes.       **/
-/*****************************************************************************/
-void
-XUtf8_measure_extents(
-        Display         	*display,
-        Drawable        	d,
-        XUtf8FontStruct  *font_set,
-        GC              	gc,
-        int             	*xx,     /* x-offset from origin */
-        int             	*yy,     /* y-offset from origin */
-        int             	*ww,     /* overall inked width  */
-        int             	*hh,     /* maximum inked height */
-        const char      	*string, /* text to measure */
-        int             	num_bytes) {
-  int 		*encodings; /* encodings array */
-  XFontStruct 	**fonts;    /* fonts array */
-  Fl_XChar2b 	buf[128];   /* drawing buffer */
-  int 		fnum;       /* index of the current font in the fonts array*/
-  int 		i;          /* current byte in the XChar2b buffer */
-  int 		first;      /* first valid font index */
-  int 		last_fnum;  /* font index of the previous char */
-  int 		nb_font;    /* quantity of fonts in the font array */
-  char 		glyph[2];   /* byte1 and byte2 value of the UTF-8 char */
-  int		*ranges;    /* sub range of iso10646 */
-
-  int wd = 0; /* accumulates the width of the text */
-  int ht = 0; /* used to find max height in text */
-  int hs;     /* "height sum" of current text segment */
-  int yt = 0x7FFFFFFF; /* used to find bounding rectangle delta-y */
-  int res; /* result from calling XTextExtents16() - we should test this is OK! */
-
-  XCharStruct sizes;
-  int dir_ret = 0;
-  int fnt_asc = 0;
-  int fnt_dsc = 0;
-
-  nb_font = font_set->nb_font;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return;
-  }
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  i = 0;
-  fnum = 0;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return;
-  }
-
-  first = fnum;
-  last_fnum = fnum;
-
-  while (num_bytes > 0) {
-    int 	 ulen;   /* byte length of the UTF-8 char */
-    unsigned int ucs;    /* Unicode value of the UTF-8 char */
-    unsigned int no_spc; /* Spacing char equivalent of a non-spacing char */
-
-    if (i > 120) {
-      /*** draw the buffer **/
-      XSetFont(display, gc, fonts[fnum]->fid);
-      res = XTextExtents16(fonts[fnum], buf, i, &dir_ret, &fnt_asc, &fnt_dsc, &sizes);
-      /* recover the dimensions - should verify that res == 0 first! */
-      wd += sizes.width; /* accumulate the width */
-      hs = sizes.ascent + sizes.descent; /* total height */
-      if(hs > ht) ht = hs; /* new height exceeds previous height */
-      if(yt > (-sizes.ascent)) yt = -sizes.ascent; /* delta y offset */
-      i = 0;
-    }
-
-    ulen = XFastConvertUtf8ToUcs((unsigned char*)string, num_bytes, &ucs);
-
-    if (ulen < 1) ulen = 1;
-
-    no_spc = XUtf8IsNonSpacing(ucs);
-    if (no_spc) ucs = no_spc;
-
-    /*
-     * find the first encoding which can be used to
-     * draw the glyph
-     */
-    fnum = first;
-    while (fnum < nb_font) {
-      if (fonts[fnum] && ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-	if (encodings[fnum] != 0 ||
-	    (ucs >= ranges[fnum * 2] &&
-	    ucs <= ranges[fnum * 2 + 1])) {
-	  break;
-	}
-      }
-      fnum++;
-    }
-    if (fnum == nb_font) {
-      /* the char is not valid in all encodings ->
-       * draw it using the first font :-(
-       */
-      fnum = first;
-      ucs2fontmap(glyph, '?', encodings[fnum]);
-    }
-
-    if (last_fnum != fnum || no_spc) {
-      XSetFont(display, gc, fonts[last_fnum]->fid);
-      res = XTextExtents16(fonts[last_fnum], buf, i, &dir_ret, &fnt_asc, &fnt_dsc, &sizes);
-      /* recover the dimensions - should verify that res == 0 first! */
-      wd += sizes.width; /* accumulate the width */
-      hs = sizes.ascent + sizes.descent; /* total height */
-      if(hs > ht) ht = hs; /* new height exceeds previous height */
-      if(yt > (-sizes.ascent)) yt = -sizes.ascent; /* delta y offset */
-      i = 0;
-      (*buf).byte1 = glyph[0];
-      (*buf).byte2 = glyph[1];
-      if (no_spc) {
-	wd -= XTextWidth16(fonts[fnum], buf, 1);
-      }
-    } else {
-      (*(buf + i)).byte1 = glyph[0];
-      (*(buf + i)).byte2 = glyph[1];
-    }
-    last_fnum = fnum;
-    i++;
-    string += ulen;
-    num_bytes -= ulen;
-  }
-
-  XSetFont(display, gc, fonts[fnum]->fid);
-  res = XTextExtents16(fonts[fnum], buf, i, &dir_ret, &fnt_asc, &fnt_dsc, &sizes);
-  /* recover the dimensions - should verify that res == 0 first! */
-  wd += sizes.width; /* accumulate the width */
-  hs = sizes.ascent + sizes.descent; /* total height */
-  if(hs > ht) ht = hs; /* new height exceeds previous height */
-  if(yt > (-sizes.ascent)) yt = -sizes.ascent; /* delta y offset */
-  /* return values */
-  *ww = wd; /* width of inked area rectangle */
-  *hh = ht; /* max height of inked area rectangle */
-  *xx = 0;  /* x-offset from origin to start of inked area - this is wrong! */
-  *yy = yt; /* y-offset from origin to start of inked rectangle */
-}
-
-
-/*****************************************************************************/
-/** returns the pixel width of a UTF-8 string				    **/
-/*****************************************************************************/
-int
-XUtf8TextWidth(XUtf8FontStruct 	*font_set,
-	       const char 	*string,
-	       int 		num_bytes) {
-
-  int		x;
-  int 		*encodings; /* encodings array */
-  XFontStruct 	**fonts;    /* fonts array */
-  Fl_XChar2b 	buf[128];   /* drawing buffer */
-  int 		fnum;       /* index of the current font in the fonts array*/
-  int 		i;          /* current byte in the XChar2b buffer */
-  int 		first;      /* first valid font index */
-  int 		last_fnum;  /* font index of the previous char */
-  int 		nb_font;    /* quantity of fonts in the font array */
-  char 		glyph[2];   /* byte1 and byte2 value of the UTF-8 char */
-  int		*ranges;    /* sub range of iso10646 */
-
-  nb_font = font_set->nb_font;
-  x = 0;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return x;
-  }
-
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  i = 0;
-  fnum = 0;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return x;
-  }
-
-  first = fnum;
-  last_fnum = fnum;
-
-  while (num_bytes > 0) {
-    int 	 ulen;   /* byte length of the UTF-8 char */
-    unsigned int ucs;    /* Unicode value of the UTF-8 char */
-    unsigned int no_spc; /* Spacing char equivalent of a non-spacing char */
-
-    if (i > 120) {
-      /*** measure the buffer **/
-      x += XTextWidth16(fonts[fnum], buf, i);
-      i = 0;
-    }
-
-    ulen = XFastConvertUtf8ToUcs((unsigned char*)string, num_bytes, &ucs);
-
-    if (ulen < 1) ulen = 1;
-
-    no_spc = XUtf8IsNonSpacing(ucs);
-    if (no_spc) {
-      ucs = no_spc;
-    }
-
-    /*
-     * find the first encoding which can be used to
-     * draw the glyph
-     */
-    fnum = first;
-    while (fnum < nb_font) {
-      if (fonts[fnum] && ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-	if (encodings[fnum] != 0 ||
-		(ucs >= ranges[fnum * 2] &&
-		ucs <= ranges[fnum * 2 + 1])) {
-	  break;
-	}
-      }
-      fnum++;
-    }
-    if (fnum == nb_font) {
-      /* the char is not valid in all encodings ->
-       * draw it using the first font :-(
-       */
-      fnum = first;
-      ucs2fontmap(glyph, '?', encodings[fnum]);
-    }
-
-    if (last_fnum != fnum || no_spc) {
-      x += XTextWidth16(fonts[last_fnum], buf, i);
-      i = 0;
-      (*buf).byte1 = glyph[0];
-      (*buf).byte2 = glyph[1];
-      if (no_spc) {
-	/* go back to draw the non-spacing char over the previous char */
-	x -= XTextWidth16(fonts[fnum], buf, 1);
-      }
-    } else {
-      (*(buf + i)).byte1 = glyph[0];
-      (*(buf + i)).byte2 = glyph[1];
-    }
-    last_fnum = fnum;
-    i++;
-    string += ulen;
-    num_bytes -= ulen;
-  }
-
-  x += XTextWidth16(fonts[last_fnum], buf, i);
-
-  return x;
-}
-
-/*****************************************************************************/
-/**  get the X font and glyph ID of a UCS char                              **/
-/*****************************************************************************/
-int
-XGetUtf8FontAndGlyph(XUtf8FontStruct  *font_set,
-		     unsigned int     ucs,
-		     XFontStruct      **fnt,
-		     unsigned short   *id) {
-
-  int             x;
-  int             *encodings; /* encodings array */
-  XFontStruct     **fonts;    /* fonts array */
-  int             fnum;       /* index of the current font in the fonts array*/
-  int             i;          /* current byte in the XChar2b buffer */
-  int             first;      /* first valid font index */
-  int             last_fnum;  /* font index of the previous char */
-  int             nb_font;    /* quantity of fonts in the font array */
-  char 		  glyph[2];   /* byte1 and byte2 value of the UTF-8 char */
-  int             *ranges;    /* sub range of iso10646 */
-
-  nb_font = font_set->nb_font;
-  x = 0;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return -1;
-  }
-
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  i = 0;
-  fnum = 0;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return -1;
-  }
-
-  first = fnum;
-  last_fnum = fnum;
-
-  /*
-   * find the first encoding which can be used to
-   * draw the glyph
-   */
-  fnum = first;
-  while (fnum < nb_font) {
-    if (fonts[fnum] && ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-      if (encodings[fnum] != 0 ||
-          (ucs >= ranges[fnum * 2] &&
-	  ucs <= ranges[fnum * 2 + 1])) {
-	break;
-      }
-    }
-    fnum++;
-  }
-  if (fnum == nb_font) {
-    /* the char is not valid in all encodings ->
-     * draw it using the first font :-(
-     */
-    fnum = first;
-    ucs2fontmap(glyph, '?', encodings[fnum]);
-  }
-
-  *id = ((unsigned char)glyph[0] << 8) | (unsigned char)glyph[1] ;
-  *fnt = fonts[fnum];
-  return 0;
-}
-
-/*****************************************************************************/
-/** returns the pixel width of a UCS char				    **/
-/*****************************************************************************/
-int
-XUtf8UcsWidth(XUtf8FontStruct  *font_set,
-	      unsigned int     ucs) {
-
-  int		x;
-  int 		*encodings; /* encodings array */
-  XFontStruct 	**fonts;    /* fonts array */
-  Fl_XChar2b 	buf[8];     /* drawing buffer */
-  int 		fnum;       /* index of the current font in the fonts array*/
-  int 		i;          /* current byte in the XChar2b buffer */
-  int 		first;      /* first valid font index */
-  int 		last_fnum;  /* font index of the previous char */
-  int 		nb_font;    /* quantity of fonts in the font array */
-  char 		glyph[2];   /* byte1 and byte2 value of the UTF-8 char */
-  int		*ranges;    /* sub range of iso10646 */
-
-  nb_font = font_set->nb_font;
-  x = 0;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return x;
-  }
-
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  i = 0;
-  fnum = 0;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return x;
-  }
-
-  first = fnum;
-  last_fnum = fnum;
-
-  ucs = XUtf8IsNonSpacing(ucs);
-
-  /*
-   * find the first encoding which can be used to
-   * draw the glyph
-   */
-  fnum = first;
-  while (fnum < nb_font) {
-    if (fonts[fnum] &&
-	ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-      if (encodings[fnum] != 0 || (ucs >= ranges[fnum * 2] &&
-	  ucs <= ranges[fnum * 2 + 1])) {
-	break;
-      }
-    }
-    fnum++;
-  }
-  if (fnum == nb_font) {
-    /* the char is not valid in all encodings ->
-     * draw it using the first font :-(
-     */
-    fnum = first;
-    ucs2fontmap(glyph, '?', encodings[fnum]);
-  }
-
-  (*buf).byte1 = glyph[0];
-  (*buf).byte2 = glyph[1];
-
-  x += XTextWidth16(fonts[fnum], buf, 1);
-
-  return x;
-}
-
-/*****************************************************************************/
-/** draw an UTF-8 string and clear the background.	 		    **/
-/*****************************************************************************/
-void
-XUtf8DrawImageString(Display         *display,
-		     Drawable        d,
-		     XUtf8FontStruct *font_set,
-		     GC              gc,
-		     int             x,
-		     int             y,
-		     const char      *string,
-		     int             num_bytes) {
-
-  /* FIXME: must be improved ! */
-  int w;
-  int fill_style;
-  unsigned long foreground;
-  unsigned long background;
-  int function;
-  XGCValues xgcv;
-
-  w = XUtf8TextWidth(font_set, string, num_bytes);
-
-  XGetGCValues(display, gc,
-	       GCFunction|GCForeground|GCBackground|GCFillStyle, &xgcv);
-
-  function = xgcv.function;
-  fill_style = xgcv.fill_style;
-  foreground = xgcv.foreground;
-  background = xgcv.background;
-
-  xgcv.function = GXcopy;
-  xgcv.foreground = background;
-  xgcv.background = foreground;
-  xgcv.fill_style = FillSolid;
-
-  XChangeGC(display, gc,
-	    GCFunction|GCForeground|GCBackground|GCFillStyle, &xgcv);
-
-  XFillRectangle(display, d, gc, x, y - font_set->ascent,
-	         (unsigned)w, (unsigned)(font_set->ascent + font_set->descent));
-
-  xgcv.function = function;
-  xgcv.foreground = foreground;
-  xgcv.background = background;
-  xgcv.fill_style = fill_style;
-
-  XChangeGC(display, gc,
-	    GCFunction|GCForeground|GCBackground|GCFillStyle, &xgcv);
-
-  XUtf8DrawString(display, d, font_set, gc, x, y, string, num_bytes);
-}
-
-/*****************************************************************************/
-/** free the XFontSet and others things created by XCreateUtf8FontSet       **/
-/*****************************************************************************/
-void
-XFreeUtf8FontStruct(Display 	    *dpy,
-		    XUtf8FontStruct *font_set) {
-
-  int i;
-  i = 0;
-  while (i < font_set->nb_font) {
-    if (font_set->fonts[i]) {
-	XFreeFont(dpy, font_set->fonts[i]);
-	free(font_set->font_name_list[i]);
-    }
-    i++;
-  }
-  free(font_set->ranges);
-  free(font_set->font_name_list);
-  free(font_set->fonts);
-  free(font_set->encodings);
-  free(font_set);
-}
-
-#endif /* X11 only */
-
-/*
- *  End of "$Id: utf8Wrap.c 8401 2011-02-08 10:06:19Z ianmacarthur $".
- */
diff --git a/unix/build-xorg b/unix/build-xorg
index c771a05..2908e48 100755
--- a/unix/build-xorg
+++ b/unix/build-xorg
@@ -117,7 +117,7 @@
 
     # Build VNC
     echo "*** Building VNC ***"
-    cmake -G"Unix Makefiles" ${1+"$@"} -DUSE_INCLUDED_ZLIB=1 -DUSE_INCLUDED_FLTK=1 -DBUILD_STATIC=1 $SRCDIR
+    cmake -G"Unix Makefiles" ${1+"$@"} -DUSE_INCLUDED_ZLIB=1 -DBUILD_STATIC=1 $SRCDIR
     $MAKE
 
     # Build Xorg
diff --git a/vncviewer/CMakeLists.txt b/vncviewer/CMakeLists.txt
index f6b6d0b..c1facc6 100644
--- a/vncviewer/CMakeLists.txt
+++ b/vncviewer/CMakeLists.txt
@@ -45,9 +45,6 @@
   add_executable(vncviewer ${VNCVIEWER_SOURCES})
 endif()
 
-if(USE_INCLUDED_FLTK)
-  target_link_libraries(vncviewer fltk_static)
-endif()
 target_link_libraries(vncviewer rfb network rdr os Xregion ${FLTK_LIBRARIES} ${GETTEXT_LIBRARIES})
 
 # When building with GnuTLS, librdr depends on ws2_32, so in order to make