From c1f0ee65630842e6ff92a60b4e688d10b054f330 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Fri, 15 Oct 1999 15:17:43 +0000 Subject: [PATCH] 15ef57d3c831c615082697db964731fc xv-3.10a-FLmask.v2.1.patch c8cbe14db6e2104ed4eb5330cdaba420 xv-3.10a-png-1.2d.tar.gz 7a26b6d62ad59e14cce049697f430a0f xv-3.10a.JPEG-patch 305f2f0273368bb6e029c3f212a14249 xv-3.10a.TIFF-patch 2d4fbeec1561304362781cc8e2f7f72d xv-3.10a.tar.gz 03ebab2b331322f07f50b208c251804c xv-PLD.patch 75c44ef08903167ef19a89a8e9c4fd74 xv-croppad.patch bc81180d9e9dce234d092ff4334cafc0 xv-deepcolor.patch a97c5823b4e1b05581afd21781276353 xv-exceed_grab_patch.txt 476a786f60fee70812a4b59588db2049 xv-gifpatch fd9b9e735a1ed68e3792d904f1df422a xv-grabpatch 04f2f162a2f66c8eca6bd6e2e1e9777d xv-longname.patch acc754bea43bf957c37d2df293ed41e7 xv-mp-tiff-patch f057517331a6cb9b231c828d57514295 xv-pdf.patch 672f2f82c94828d91b6929ed87139937 xv-png-fix2.patch 4bc978d266bf1af9e29e8f21fc21e9d7 xv-vispatch 05fd4380bddf77b94edb6f193ea6a79a xv-xpm.patch af7614a734c6576499044234f7130093 xv.desktop 78dce344e3e85faf01e1f13014aa659b xvman310a-html.tar.gz Changed files: xv-FLmask.v2.1.patch -> 1.1 xv-JPEG.patch -> 1.1 xv-PLD.patch -> 1.1 xv-TIFF.patch -> 1.1 xv-croppad.patch -> 1.1 xv-deepcolor.patch -> 1.1 xv-exceed_grab_patch.txt -> 1.1 xv-gifpatch -> 1.1 xv-grabpatch -> 1.1 xv-longname.patch -> 1.1 xv-mp-tiff-patch -> 1.1 xv-pdf.patch -> 1.1 xv-png-fix2.patch -> 1.1 xv-vispatch -> 1.1 xv.desktop -> 1.1 --- xv-FLmask.v2.1.patch | 2728 ++++++++++++++++++++++++++++++++++++++ xv-JPEG.patch | 107 ++ xv-PLD.patch | 137 ++ xv-TIFF.patch | 101 ++ xv-croppad.patch | 89 ++ xv-deepcolor.patch | 54 + xv-exceed_grab_patch.txt | 108 ++ xv-gifpatch | 49 + xv-grabpatch | 40 + xv-longname.patch | 81 ++ xv-mp-tiff-patch | 570 ++++++++ xv-pdf.patch | 24 + xv-png-fix2.patch | 218 +++ xv-vispatch | 118 ++ xv.desktop | 7 + 15 files changed, 4431 insertions(+) create mode 100644 xv-FLmask.v2.1.patch create mode 100644 xv-JPEG.patch create mode 100644 xv-PLD.patch create mode 100644 xv-TIFF.patch create mode 100644 xv-croppad.patch create mode 100644 xv-deepcolor.patch create mode 100644 xv-exceed_grab_patch.txt create mode 100644 xv-gifpatch create mode 100644 xv-grabpatch create mode 100644 xv-longname.patch create mode 100644 xv-mp-tiff-patch create mode 100644 xv-pdf.patch create mode 100644 xv-png-fix2.patch create mode 100644 xv-vispatch create mode 100644 xv.desktop diff --git a/xv-FLmask.v2.1.patch b/xv-FLmask.v2.1.patch new file mode 100644 index 0000000..0abd444 --- /dev/null +++ b/xv-FLmask.v2.1.patch @@ -0,0 +1,2728 @@ +diff -c --new-file xv-3.10a.org/00_README xv+flmask/00_README +*** xv-3.10a.org/00_README Sun Sep 14 02:29:10 1997 +--- xv+flmask/00_README Sun Sep 14 03:18:49 1997 +*************** +*** 0 **** +--- 1,101 ---- ++ ++ XV+FLmask version 2.1. ++ ++ 97.09.14. ++ matu@alice.lb.u-tokai.ac.jp. ++ ¤Þ¤Ä¤à¤é¤·¤²¤ë¡£¡£ ++ ++ ++ [¤³¤Î¥Ñ¥Ã¥Á¤Ï²¿?] ++ ¤Ê¤ó¤À¤í¤¦¡£¤Ê¤Ë¤«¤·¤é¡£ ++ ¤­¤Ã¤Èµ¤¤Þ¤°¤ì¤Çºî¤é¤ì¤¿¤â¤Î¤Ç¤¹¡£(^^) ++ ++ ++ [¤³¤Î¥¢¡¼¥«¥¤¥Ö¤¬´Þ¤à¤â¤Î] ++ README ¤³¤Î¥Õ¥¡¥¤¥ë¡£ ++ XV+FLmask.v2.1.patch ¥Ñ¥Ã¥Á¡£ ++ ++ ++ [ºî¤êÊý] ++ (1)¤Þ¤º¡¢ºàÎÁ¤ò½¸¤á¤Þ¤·¤ç¤¦¡£ ++ xv-3.10a.tar.gz ++ libjpeg-6a.tar.gz ++ xv310a-jp-extension-rev5.3.3.tar.gz ++ ++ (2)¤³¤ì¤é¤Ë¡¢ ++ XV+FLmask.v2.1.patch ++ ¤ò²Ã¤¨¤Æ¤°¤Ä¤°¤Ä¼Ñ¹þ¤ß¤Þ¤·¤ç¤¦¡£(jvimÉ÷¡£) ++ ++ (3)°Ê¾å¡£(¤³¤ì¤À¤±¡Ë ++ ++ ++ [»ÈÍѤˤ¢¤¿¤Ã¤Æ] ++ FLmask menu ¤È Mask button ¤¬Áý¤¨¤Æ¤¤¤ë¤À¤±¤Ç¤¹¡£ ++ Æñ¤·¤¤¤È¤³¤í¤Ï̵¤¤¤Ç¤·¤ç¤¦¡£ ++ Mask button ¤Ï¾å¼ê¤Ë»È¤¦¤ÈÊØÍø¤Ç¤¹¡£ ++ ++ ++ [·Ù¹ð] ++ ¤³¤Î patch ¤Ï¤¢¤Ê¤¿¼«¿È¤ÎÀÕǤ¤Î¤â¤È¤Ë»ÈÍѤ·¤Æ²¼ ++ ¤µ¤¤¡£¤â¤·¡¢¤³¤Î patch ¤ò»ÈÍѤ¹¤ë»ö¤Ë¤è¤Ã¤Æ¡¢¤¢ ++ ¤Ê¤¿¤Î HDD ¤Î data ¤¬Á´Éô¾Ã¤¨¤Æ¤·¤Þ¤Ã¤¿¤ê¡¢¥Ï¡¼ ++ ¥É¥¦¥§¥¢¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤¿¤ê¡¢¤¢¤Ê¤¿¤Î¸¤¤¬»à¤ó¤Ç ++ ¤·¤Þ¤Ã¤Æ¤â¡¢ÅöÊý¤Ï°ìÀÚ´ØÃΤ·¤Þ¤»¤ó¡£(mgettyÉ÷¡£) ++ ++ ++ [Æ°ºî´Ä¶­] ++ ³«È¯´Ä¶­¤Ï Linux-2.0.30 ¤Ç¤¹¤¬¡¢¤¿¤Ö¤ó original ++ ¤Î xv ¤¬Æ°¤¯´Ä¶­¤Ç¤¢¤ì¤ÐÌäÂê̵¤¯Æ°¤¯¤Ç¤·¤ç¤¦¡£ ++ (¤¿¤Ö¤ó) ++ ++ ++ [¤½¤Î¾] ++ ¤³¤Î¥Ñ¥Ã¥Á¤Ï¥·¥§¥¢¥¦¥¨¥¢¤Ç¤¹¡£ ++ 500±ßÌé¡£ÉÏ˳¤Ê³ØÀ¸¤Ê¤Î¤Ç¡¢free ¤Ë¤·¤Þ¤»¤ó¤Ç¤·¤¿¡£ ++ Ʊ¤¸¤¯À¸³è¤Î¶ì¤·¤¤Êý¤Ï¡¢ÌȽüÃפ·¤Þ¤¹¡£¡£ ++ ¤½¤Î¾¡¢ software ¤Î¼«Í³¤ÊÇÛÉÕ¤¬¤¦¤ó¤¿¤é¤«¤ó¤¿¤é ++ ¤Ç¤É¤¦¤È¤«¤³¤¦¤È¤«¸À¤¦¿Í¤âʧ¤ï¤Ê¤¯¤Æ¤âÎɤ¤¤Ç¤¹¡£¡£ ++ (^^;;; ++ ++ ¤¤¤Ä¤ÎÆü¤«¤¦¤Á¤Ë¤âP¤«¤é»Ï¤Þ¤ëCPU¤òƳÆþ¤¹¤ë»ö¤òÌ´ ++ ¸«¤Æ¡£¡£(K¤Ç¤â¤è¤¤¡£D¤Ï¤â¤¦¤¤¤ä¡£¡£) ++ ++ ËÜÅö¤Ë»Ùʧ¤Ã¤Æ¤¯¤ì¤ëÊý¤Ï ++ E-mail: matu@alice.lb.u-tokai.ac.jp ++ ¤Þ¤Ç Mail ¤·¤Æ²¼¤µ¤¤¡£(^^) ++ ++ ++ ÉÔ¶ñ¹ç¤ä, Í×µá, ´¶Áۤʤɤʤó¤Ç¤â, ¾å¤Î¥¢¥É¥ì¥¹¤Þ¤Ç ++ ¤ª´ê¤¤¤·¤Þ¤¹¡£ ++ (v2.0 ¤Î»þ mail Á÷¤Ã¤Æ²¼¤µ¤Ã¤¿Âô»³¤ÎÊý¡¢Í­Æñ¤¦¤´¤¶ ++ ¤¤¤Þ¤¹¡£¸æ°Õ¸«È¿±Ç¤Ç¤­¤ë¤è¤¦ÅØÎϤ·¤Æ¤ß¤Þ¤¹¡£¡£) ++ ++ ++ ¤Þ¤¿¡ÖXV+FLmask Home Page.¡× ++ http://www.lb.u-tokai.ac.jp/~matu/flmask/ ++ ¤Ë¤Æ Version UP ¤Î¤ªÃΤ餻Åù¤¬¤¢¤ë¤«¤âÃΤì¤Þ¤»¤ó¡£ ++ ++ ++ [¼Õ¼­] ++ ¤³¤Î¥Ñ¥Ã¥Á¥­¥Ã¥È¤òºîÀ®¤¹¤ë¤Ë¤¢¤¿¤Ã¤Æ¡¢°Ê²¼¤ÎÊý¡¹ ++ ¤Î¸æ¶¨ÎϤòÆÀ¤Þ¤·¤¿¡£ ¿´¤è¤ê´¶¼ÕÃפ·¤Þ¤¹¡£ ++ ++ o Gmask ¤Îºî¼Ô¤Î¸Å¹Â ¹ä ÍÍ¡£ ++ o ¤¢¤Î¿Í¡£ ++ o ¤³¤Î¿Í¡£ ++ o ¤½¤Î¾¡£ ++ ++ ++ -- ++ o `XV'¤Ï, X Window System¾å¤Î²èÁüɽ¼¨¥×¥í¥°¥é¥à¤Ç¤¹. ++ XV is Copyright 1989, 1994 by John Bradley. ++ X Window System is a trademark of X Consortium, Inc. ++ o MEKOMASK ¤Ï ¸Þ½½Íò ÍÎÆ󤵤óºî¤Î¥Þ¥¹¥¯¥Ä¡¼¥ë¡£ ++ o WINMASK ¤Ï ³°Â¼ ¹â¾Ï¤µ¤óºî¤Î¥Þ¥¹¥¯¥Ä¡¼¥ë¡£ ++ o FLMASK ¤Ï £Çenesis ¤µ¤óºî¤Î¥Þ¥¹¥¯¥Ä¡¼¥ë¡£ ++ o CPMASK ¤Ï ÆâÌ¤ó¤È£Çenesis ¤µ¤ó¹çºî¤Î¥Þ¥¹¥¯µ»Ë¡¡£ ++ o Gmask ¤Ï ¸Å¹Â¹ä¤µ¤ó¤Î¥Þ¥¹¥¯¥Ä¡¼¥ë¡£ ++ ++ (jp-extensionÉ÷¤Î README) ++ ++ +diff -c --new-file xv-3.10a.org/CPMASK xv+flmask/CPMASK +*** xv-3.10a.org/CPMASK Sun Sep 14 02:29:10 1997 +--- xv+flmask/CPMASK Sun Sep 14 03:18:49 1997 +*************** +*** 0 **** +--- 1,21 ---- ++ [CPMASK¤Ë¤Ä¤¤¤Æ] ++ ¤³¤Î patch ¤Ë¤è¤Ã¤Æ¤«¤±¤é¤ì¤¿ CPmask ¤Ï FLMASK ¥×¥í¥°¥é¥àÅù ++ ¤Ç¤«¤±¤¿¤â¤Î¤È¤Ï°ã¤¤file ¤Ë passwd ¤Î¾ðÊó¤ò»Ä¤·¤Þ¤»¤ó¡£ ++ ++ xv ¤Ï jpeg file ¤ò save ¤¹¤ë»þ¤Ë ++ ¡ÖCREATOR: XV Version 3.10a Rev: 12/29/94 Quality = 75, ++ Smoothing = 0¡× ++ ¤È¤¤¤¦¤è¤¦¤Ê¾ðÊó¤ò²Ã¤¨¤Þ¤¹¡£ ++ ++ CPmask ¤Ï¤³¤ÎÉôʬ¤Ë¤³¤Ã¤½¤êpasswd¾ðÊó¤ò½ñ¤­¹þ¤à¤Î¤Ç¤¹¤¬¡¢¤³ ++ ¤ì¤¬¸¶°ø¤Ç CPmask ¤Î¤«¤±¤é¤ì¤¿ file ¤ò xv ¤ÇÆɤ߹þ¤ó¤Ç¤½¤Î ++ ¤Þ¤Þ save ¤·¤Ê¤ª¤¹¤È passwd ¤òÄ´¤Ù¤ë tool ¤È¤«¤ÇȽÄê¤Ç¤­¤Ê¤¤ ++ file ¤¬½ÐÍè¾å¤¬¤ë¤ï¤±¤Ç¤¹¡£ ++ ++ ¤½¤Î¤¿¤á¤Ë¡¢Á°¤Î version ¤Ç¤Ï CPmask ¤¬¤«¤±¤é¤ì¤Æ¤¤¤Ê¤¤ file ++ ¤Î¾ì¹ç¤Ï error pop up ¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤¿¤Î¤Ç¤¹¤¬¡¢ÉÔÊؤǤ¢¤ë ++ ¤È¤Î mail ¤òÂô»³¼õ¤±¤¿¤Î¤ÇÊѤ¨¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£ ++ ++ ¤Ç¤¹¤«¤é¡¢¤³¤Î patch ¤Ç¤Ï¿·¤·¤¯ CPmask ¤ò¤«¤±¤º¤Ë¡¢¤Ï¤º¤¹¤À ++ ¤±¤Ë¤·¤Æ²¼¤µ¤¤¡£ ++ +diff -c --new-file xv-3.10a.org/Makefile xv+flmask/Makefile +*** xv-3.10a.org/Makefile Sun Sep 14 02:29:10 1997 +--- xv+flmask/Makefile Sun Sep 14 03:18:49 1997 +*************** +*** 209,214 **** +--- 209,215 ---- + + OBJS = xv.o xvevent.o xvroot.o xvmisc.o xvimage.o xvcolor.o xvsmooth.o \ + xv24to8.o xvgif.o xvpm.o xvinfo.o xvctrl.o xvscrl.o xvalg.o \ ++ xvmask.o xvcpmask.o xvmeko.o \ + xvgifwr.o xvdir.o xvbutt.o xvpbm.o xvxbm.o xvgam.o xvbmp.o \ + xvdial.o xvgraf.o xvsunras.o xvjpeg.o xvps.o xvpopup.o xvdflt.o \ + xvtiff.o xvtiffwr.o xvpds.o xvrle.o xviris.o xvgrab.o vprintf.o \ +diff -c --new-file xv-3.10a.org/Imakefile xv+flmask/Imakefile +*** xv-3.10a.org/Imakefile Sun Sep 14 02:29:10 1997 +--- xv+flmask/Imakefile Sun Sep 14 03:18:49 1997 +*************** +*** 160,165 **** +--- 160,166 ---- + + SRCS1 = xv.c xvevent.c xvroot.c xvmisc.c xvimage.c xvcolor.c xvsmooth.c \ + xv24to8.c xvgif.c xvpm.c xvinfo.c xvctrl.c xvscrl.c xvalg.c \ ++ xvmask.c xvcpmask.c xvmeko.c \ + xvgifwr.c xvdir.c xvbutt.c xvpbm.c xvxbm.c xvgam.c xvbmp.c \ + xvdial.c xvgraf.c xvsunras.c xvjpeg.c xvps.c xvpopup.c xvdflt.c \ + xvtiff.c xvtiffwr.c xvpds.c xvrle.c xviris.c xvgrab.c vprintf.c \ +*************** +*** 170,175 **** +--- 171,177 ---- + + OBJS1 = xv.o xvevent.o xvroot.o xvmisc.o xvimage.o xvcolor.o xvsmooth.o \ + xv24to8.o xvgif.o xvpm.o xvinfo.o xvctrl.o xvscrl.o xvalg.o \ ++ xvmask.o xvcpmask.o xvmeko.o \ + xvgifwr.o xvdir.o xvbutt.o xvpbm.o xvxbm.o xvgam.o xvbmp.o \ + xvdial.o xvgraf.o xvsunras.o xvjpeg.o xvps.o xvpopup.o xvdflt.o \ + xvtiff.o xvtiffwr.o xvpds.o xvrle.o xviris.o xvgrab.o vprintf.o \ +diff -c --new-file xv-3.10a.org/xv.h xv+flmask/xv.h +*** xv-3.10a.org/xv.h Sun Sep 14 02:29:12 1997 +--- xv+flmask/xv.h Sun Sep 14 06:50:03 1997 +*************** +*** 8,15 **** + #include "config.h" + + +! #define REVDATE "Version 3.10a Rev: 12/29/94 (PNG patch 1.2)" +! #define VERSTR "3.10a(PNG)" + + /* + * uncomment the following, and modify for your site, but only if you've +--- 8,16 ---- + #include "config.h" + + +! #define REVDATE "Version 3.10a+FLmask Rev: 12/29/94" +! #define VERSTR "3.10a+FLmask" +! + + /* + * uncomment the following, and modify for your site, but only if you've +*************** +*** 415,424 **** + #define BCROP 19 + #define BUNCROP 20 + #define BACROP 21 +! #define BABOUT 22 +! #define BQUIT 23 +! #define BXV 24 +! #define NBUTTS 25 /* # of butts */ + + + /* buttons in the load/save window */ +--- 416,426 ---- + #define BCROP 19 + #define BUNCROP 20 + #define BACROP 21 +! #define BMASKS 22 +! #define BABOUT 23 +! #define BQUIT 24 +! #define BXV 25 +! #define NBUTTS 26 /* # of butts */ + + + /* buttons in the load/save window */ +*************** +*** 719,740 **** + #define PIC24 CONV24_24BIT + + /* indicies into algMB */ + #define ALG_NONE 0 +! #define ALG_SEP1 1 /* separator */ +! #define ALG_BLUR 2 +! #define ALG_SHARPEN 3 +! #define ALG_EDGE 4 +! #define ALG_TINF 5 +! #define ALG_OIL 6 +! #define ALG_BLEND 7 +! #define ALG_ROTATE 8 +! #define ALG_ROTATECLR 9 + #define ALG_PIXEL 10 + #define ALG_SPREAD 11 + #define ALG_MEDIAN 12 + #define ALG_MAX 13 + +- + /* indicies into sizeMB */ + #define SZMB_NORM 0 + #define SZMB_MAXPIC 1 +--- 721,753 ---- + #define PIC24 CONV24_24BIT + + /* indicies into algMB */ ++ #define MSK_NONE 0 ++ #define MSK_SEP1 1 /* separator */ ++ #define MSK_FLMASK 2 ++ #define MSK_Q0MASK 3 ++ #define MSK_WIN 4 ++ #define MSK_MEKO 5 ++ #define MSK_CPMASK 6 ++ #define MSK_RGB 7 ++ #define MSK_BITREV 8 ++ #define MSK_COLREV 9 ++ #define MSK_MAX 10 ++ + #define ALG_NONE 0 +! #define ALG_SEP1 1 /* separator */ +! #define ALG_BLUR 2 +! #define ALG_SHARPEN 3 +! #define ALG_EDGE 4 +! #define ALG_TINF 5 +! #define ALG_OIL 6 +! #define ALG_BLEND 7 +! #define ALG_ROTATE 8 +! #define ALG_ROTATECLR 9 + #define ALG_PIXEL 10 + #define ALG_SPREAD 11 + #define ALG_MEDIAN 12 + #define ALG_MAX 13 + + /* indicies into sizeMB */ + #define SZMB_NORM 0 + #define SZMB_MAXPIC 1 +*************** +*** 1209,1214 **** +--- 1222,1228 ---- + WHERE MBUTT dispMB; /* display mode menu button */ + WHERE MBUTT conv24MB; /* 24-to-8 conversion mode mbutt */ + WHERE MBUTT algMB; /* Algorithms mbutt */ ++ WHERE MBUTT flmaskMB; /* FLmask mbutt */ + WHERE MBUTT rootMB; + WHERE MBUTT sizeMB; + WHERE MBUTT windowMB; +diff -c --new-file xv-3.10a.org/xvalg.c xv+flmask/xvalg.c +*** xv-3.10a.org/xvalg.c Fri Dec 23 04:12:20 1994 +--- xv+flmask/xvalg.c Wed Sep 3 12:49:55 1997 +*************** +*** 26,32 **** + static void Pixelize PARM((void)); + static void Spread PARM((void)); + static void MedianFilter PARM((void)); +! static void saveOrigPic PARM((void)); + + static void doBlurConvolv PARM((byte *,int,int,byte *, int,int,int,int, int)); + static void doSharpConvolv PARM((byte *,int,int,byte *, int,int,int,int, int)); +--- 26,33 ---- + static void Pixelize PARM((void)); + static void Spread PARM((void)); + static void MedianFilter PARM((void)); +! +! void saveOrigPic PARM((void)); + + static void doBlurConvolv PARM((byte *,int,int,byte *, int,int,int,int, int)); + static void doSharpConvolv PARM((byte *,int,int,byte *, int,int,int,int, int)); +*************** +*** 41,47 **** + static void doSpread PARM((byte *,int,int,byte *, int,int,int,int, + int, int)); + static void doMedianFilter PARM((byte *,int,int,byte *, int,int,int,int, int)); +- + static void add2bb PARM((int *, int *, int *, int *, int, int)); + static void rotXfer PARM((int, int, double *,double *, + double,double, double)); +--- 42,47 ---- +*************** +*** 50,62 **** + static void intsort PARM((int *, int)); + #endif + +! static int start24bitAlg PARM((byte **, byte **)); +! static void end24bitAlg PARM((byte *, byte *)); +! +! static void printUTime PARM((char *)); + +! static byte *origPic = (byte *) NULL; +! static int origPicType; + static byte origrmap[256], origgmap[256], origbmap[256]; + + +--- 50,61 ---- + static void intsort PARM((int *, int)); + #endif + +! int start24bitAlg PARM((byte **, byte **)); +! void end24bitAlg PARM((byte *, byte *)); +! void printUTime PARM((char *)); + +! byte *origPic = (byte *) NULL; +! int origPicType; + static byte origrmap[256], origgmap[256], origbmap[256]; + + +*************** +*** 69,75 **** + + + /***************************/ +! static void printUTime(str) + char *str; + { + #ifdef TIMING_TEST +--- 68,74 ---- + + + /***************************/ +! void printUTime(str) + char *str; + { + #ifdef TIMING_TEST +*************** +*** 82,91 **** + } + + +- +- +- +- + /************************************************************/ + void AlgInit() + { +--- 81,86 ---- +*************** +*** 96,101 **** +--- 91,97 ---- + origPic = (byte *) NULL; + + algMB.dim[ALG_NONE] = 1; /* can't undo when init'ed already */ ++ flmaskMB.dim[MSK_NONE]=1; + } + + +*************** +*** 107,127 **** + algorithm */ + + switch (anum) { +! case ALG_NONE: NoAlg(); break; +! case ALG_BLUR: Blur(); break; +! case ALG_SHARPEN: Sharpen(); break; +! case ALG_EDGE: EdgeDetect(); break; +! case ALG_TINF: TinFoil(); break; +! case ALG_OIL: OilPaint(); break; +! case ALG_BLEND: Blend(); break; +! case ALG_ROTATE: FineRotate(0); break; +! case ALG_ROTATECLR: FineRotate(1); break; +! case ALG_PIXEL: Pixelize(); break; +! case ALG_SPREAD: Spread(); break; +! case ALG_MEDIAN: MedianFilter(); break; + } + + algMB.dim[ALG_NONE] = (origPic == (byte *) NULL); + } + + +--- 103,124 ---- + algorithm */ + + switch (anum) { +! case ALG_NONE: NoAlg(); break; +! case ALG_BLUR: Blur(); break; +! case ALG_SHARPEN: Sharpen(); break; +! case ALG_EDGE: EdgeDetect(); break; +! case ALG_TINF: TinFoil(); break; +! case ALG_OIL: OilPaint(); break; +! case ALG_BLEND: Blend(); break; +! case ALG_ROTATE: FineRotate(0); break; +! case ALG_ROTATECLR: FineRotate(1); break; +! case ALG_PIXEL: Pixelize(); break; +! case ALG_SPREAD: Spread(); break; +! case ALG_MEDIAN: MedianFilter(); break; + } + + algMB.dim[ALG_NONE] = (origPic == (byte *) NULL); ++ flmaskMB.dim[MSK_NONE] = (origPic == (byte *) NULL); + } + + +*************** +*** 1567,1573 **** + + + /***********************************************/ +! static int start24bitAlg(pic24, tmpPic) + byte **pic24, **tmpPic; + { + /* generates a 24-bit version of 'pic', if neccessary, and also mallocs +--- 1564,1570 ---- + + + /***********************************************/ +! int start24bitAlg(pic24, tmpPic) + byte **pic24, **tmpPic; + { + /* generates a 24-bit version of 'pic', if neccessary, and also mallocs +*************** +*** 1600,1606 **** + + + /***********************************************/ +! static void end24bitAlg(pic24, outPic) + byte *pic24, *outPic; + { + /* given pic24, and outPic, which has the new 24-bit image, installs it */ +--- 1597,1603 ---- + + + /***********************************************/ +! void end24bitAlg(pic24, outPic) + byte *pic24, *outPic; + { + /* given pic24, and outPic, which has the new 24-bit image, installs it */ +*************** +*** 1629,1635 **** + + + /************************/ +! static void saveOrigPic() + { + /* saves original picture into origPic, if it hasn't already been done. + This allows us to undo algorithms... +--- 1626,1632 ---- + + + /************************/ +! void saveOrigPic() + { + /* saves original picture into origPic, if it hasn't already been done. + This allows us to undo algorithms... +*************** +*** 1669,1674 **** + pic = NULL; + } + } +- +- + +--- 1666,1669 ---- +diff -c --new-file xv-3.10a.org/xvcpmask.c xv+flmask/xvcpmask.c +*** xv-3.10a.org/xvcpmask.c Thu Jan 1 09:00:00 1970 +--- xv+flmask/xvcpmask.c Sun Sep 14 07:17:54 1997 +*************** +*** 0 **** +--- 1,108 ---- ++ #include ++ #include ++ #include ++ #include ++ #include ++ #include ++ ++ #include "xv.h" ++ ++ typedef struct { int n; char flg; } CPS; ++ ++ static unsigned char CPTbl[] = { ++ 0x10, 0x17, 0x13, 0x15, 0x09, ++ 0x08, 0x0a, 0x14, 0x06, 0x05, ++ 0x16, 0x02, 0x0d, 0x03, 0x01, ++ 0x04, 0x19, 0x0c, 0x0f, 0x0e, ++ 0x12, 0x07, 0x0b, 0x18, 0x11, 0x1a ++ }; ++ ++ void cpcode(char *filename,unsigned char *buff,int code_num) ++ { ++ int i,j,fd; ++ unsigned char *wp, *cp; ++ unsigned char *CP_KEY = "kIUCHIuCHINO"; ++ ++ if(code_num>=3) return; ++ if((fd=open(filename,O_RDONLY))==-1) return; ++ ++ lseek(fd,20+16*code_num,SEEK_SET); ++ read(fd,buff,16); ++ ++ wp = buff; ++ cp = CP_KEY; ++ ++ for ( i = 0; i < 16; i++ ) { ++ *wp ^= *cp; ++ if ( *wp & 0x80 ) *wp = '\0'; ++ cp++; ++ wp++; ++ if ( *cp == '\0' ) cp = CP_KEY; ++ } ++ ++ for (i=0;i<16;i++) { ++ if (buff[i]<'A' || 'Z'= nTbl) vl1 %= nTbl; ++ while(tbl[vl1] != -1) { ++ if(k & 01) { ++ if(vl1 == 0) vl1 = nTbl; ++ vl1--; ++ } ++ else { ++ if(++vl1 >= nTbl) vl1 = 0; ++ } ++ } ++ tbl[vl1] = k; ++ vl2++; ++ } ++ for(i = 0, k = nTbl - 1; i < k; i++, k--) { ++ cps[tbl[i]].n = tbl[k]; ++ cps[tbl[k]].n = tbl[i]; ++ if((tbl[i] ^ tbl[k]) & 0x01) ++ cps[tbl[i]].flg = cps[tbl[k]].flg = 1; ++ } ++ } ++ ++ ++ CPS *calcCPmask(char *code, int ntbl) ++ { ++ int *tbl; ++ int len,i; ++ CPS *cps; ++ ++ len = strlen(code); ++ tbl = (int *)malloc(sizeof(int) * ntbl); ++ cps = (CPS *)malloc(sizeof(CPS) * ntbl); ++ if(!tbl || !cps) { ++ ErrPopUp ("Error: No memory!!", "\nOk"); ++ if(tbl) free(tbl); ++ exit(1); ++ } ++ GetCPTbl(ntbl, code, tbl, cps); ++ ++ free(tbl); ++ return(cps); ++ } ++ +diff -c --new-file xv-3.10a.org/xvctrl.c xv+flmask/xvctrl.c +*** xv-3.10a.org/xvctrl.c Fri Dec 23 04:12:16 1994 +--- xv+flmask/xvctrl.c Wed Sep 3 12:49:54 1997 +*************** +*** 112,117 **** +--- 112,128 ---- + "Slow 24->8", + "Best 24->8" }; + ++ static char *mskMList[] = { "Undo All\t\244u", ++ MBSEP, ++ "FLmask\t\244f", ++ "Q0mask\t\244g", ++ "WIN\t\244h", ++ "MEKO\t\244i", ++ "CPmask\t\244j", ++ "RGB\t\244l", ++ "BitRev.\t\244n", ++ "ColRev.\t\244w"}; ++ + static char *algMList[] = { "Undo All\t\244u", + MBSEP, + "Blur...\t\244b", +*************** +*** 303,311 **** + BTCreate(&but[BPAD], ctrlW,BX0, BY1,BUTTW/2,BUTTH,"",BCLS); + BTCreate(&but[BANNOT], ctrlW,BX0+BUTTW/2+1,BY1,BUTTW/2,BUTTH,"",BCLS); + +! BTCreate(&but[BCROP], ctrlW,BX1, BY1,BUTTW,BUTTH,"Crop", BCLS); +! BTCreate(&but[BUNCROP], ctrlW,BX2, BY1,BUTTW,BUTTH,"UnCrop", BCLS); +! BTCreate(&but[BACROP], ctrlW,BX3, BY1,BUTTW,BUTTH,"AutoCrop",BCLS); + BTCreate(&but[BABOUT], ctrlW,BX4, BY1,BUTTW,BUTTH,"About XV",BCLS); + BTCreate(&but[BQUIT], ctrlW,BX5, BY1,BUTTW,BUTTH,"Quit", BCLS); + +--- 314,324 ---- + BTCreate(&but[BPAD], ctrlW,BX0, BY1,BUTTW/2,BUTTH,"",BCLS); + BTCreate(&but[BANNOT], ctrlW,BX0+BUTTW/2+1,BY1,BUTTW/2,BUTTH,"",BCLS); + +! #define NEW_BUTW BUTTW*3/4 +! BTCreate(&but[BCROP], ctrlW,BX1 ,BY1,NEW_BUTW,BUTTH,"Crp", BCLS); +! BTCreate(&but[BUNCROP], ctrlW,BX1+NEW_BUTW+1 ,BY1,NEW_BUTW,BUTTH,"UCrp", BCLS); +! BTCreate(&but[BACROP], ctrlW,BX1+NEW_BUTW*2+2,BY1,NEW_BUTW,BUTTH,"ACrp",BCLS); +! BTCreate(&but[BMASKS], ctrlW,BX1+NEW_BUTW*3+3,BY1,NEW_BUTW,BUTTH,"Mask",BCLS); + BTCreate(&but[BABOUT], ctrlW,BX4, BY1,BUTTW,BUTTH,"About XV",BCLS); + BTCreate(&but[BQUIT], ctrlW,BX5, BY1,BUTTW,BUTTH,"Quit", BCLS); + +*************** +*** 341,356 **** + /* have to create menu buttons after XMapSubWindows, as we *don't* want + the popup menus mapped */ + +! MBCreate(&dispMB, ctrlW, CTRLWIDE - 8 - 112 - 2*(112+2), 5,112,19, + "Display", dispMList, DMB_MAX, BCLS); +! MBCreate(&conv24MB, ctrlW, CTRLWIDE - 8 - 112 - (112+2), 5,112,19, + "24/8 Bit", conv24MList, CONV24_MAX, BCLS); +! MBCreate(&algMB, ctrlW, CTRLWIDE - 8 - 112, 5,112,19, +! "Algorithms", algMList, ALG_MAX, BCLS); + +! MBCreate(&rootMB, ctrlW, CTRLWIDE - 8 - 112 - 2*(112+2), 5+21,112,19, + "Root", rootMList, RMB_MAX, BCLS); +! MBCreate(&windowMB, ctrlW, CTRLWIDE - 8 - 112 - (112+2), 5+21,112,19, + "Windows", windowMList, WMB_MAX, BCLS); + MBCreate(&sizeMB, ctrlW, CTRLWIDE - 8 - 112, 5+21,112,19, + "Image Size", sizeMList, SZMB_MAX, BCLS); +--- 354,371 ---- + /* have to create menu buttons after XMapSubWindows, as we *don't* want + the popup menus mapped */ + +! MBCreate(&dispMB, ctrlW, CTRLWIDE - 8 - 84 - 3*(84+2), 5,84,19, + "Display", dispMList, DMB_MAX, BCLS); +! MBCreate(&conv24MB, ctrlW, CTRLWIDE - 8 - 84 - 2*(84+2), 5,84,19, + "24/8 Bit", conv24MList, CONV24_MAX, BCLS); +! MBCreate(&algMB, ctrlW, CTRLWIDE - 8 - 84 - (84+2), 5,84,19, +! "Algo.", algMList, ALG_MAX, BCLS); +! MBCreate(&flmaskMB, ctrlW, CTRLWIDE - 8 - 84, 5,84,19, +! "FLmask", mskMList, MSK_MAX, BCLS); + +! MBCreate(&rootMB, ctrlW, CTRLWIDE - 8 - 112 - 2*(112+3), 5+21,112,19, + "Root", rootMList, RMB_MAX, BCLS); +! MBCreate(&windowMB, ctrlW, CTRLWIDE - 8 - 112 - (112+3), 5+21,112,19, + "Windows", windowMList, WMB_MAX, BCLS); + MBCreate(&sizeMB, ctrlW, CTRLWIDE - 8 - 112, 5+21,112,19, + "Image Size", sizeMList, SZMB_MAX, BCLS); +*************** +*** 437,442 **** +--- 452,458 ---- + MBRedraw(&dispMB); + MBRedraw(&conv24MB); + MBRedraw(&algMB); ++ MBRedraw(&flmaskMB); + MBRedraw(&rootMB); + MBRedraw(&windowMB); + MBRedraw(&sizeMB); +diff -c --new-file xv-3.10a.org/xvcut.c xv+flmask/xvcut.c +*** xv-3.10a.org/xvcut.c Fri Sep 5 21:12:32 1997 +--- xv+flmask/xvcut.c Wed Sep 3 12:49:55 1997 +*************** +*** 101,107 **** + static Cursor cutcurs = (Cursor) 0; + + +! + + /********************************************/ + int CutAllowed() +--- 101,108 ---- + static Cursor cutcurs = (Cursor) 0; + + +! /* FLmask: Mask Select. */ +! void MaskSelect (int,int,int,int); + + /********************************************/ + int CutAllowed() +*************** +*** 1859,1862 **** +--- 1860,1870 ---- + CoordC2P(cx, cy, px_ret, py_ret); + } + ++ ++ void MaskSelect (x1,x2,y1,y2) ++ int x1,x2,y1,y2; ++ { ++ selrx = x1; selry = y1; selrw = x2; selrh = y2; ++ EnableSelection(1); ++ } + +diff -c --new-file xv-3.10a.org/xvevent.c xv+flmask/xvevent.c +*** xv-3.10a.org/xvevent.c Sun Sep 14 02:29:13 1997 +--- xv+flmask/xvevent.c Wed Sep 3 12:51:25 1997 +*************** +*** 1245,1250 **** +--- 1245,1256 ---- + if (i>=0) DoAlg(i); + break; + } ++ ++ else if (MBClick(&flmaskMB, x,y)) { ++ i = MBTrack(&flmaskMB); ++ if (i>=0) DoMask(i); ++ break; ++ } + + i=ClickCtrl(x,y); + +*************** +*** 1271,1276 **** +--- 1277,1283 ---- + case BCROP: Crop(); break; + case BUNCROP: UnCrop(); break; + case BACROP: AutoCrop(); break; ++ case BMASKS: MaskCr(); break; + + case BPAD: + { +*************** +*** 1587,1592 **** +--- 1594,1609 ---- + else if (ks==XK_d) FakeButtonPress(&but[BCLEAR]); + + else if (ks==XK_u) DoAlg(ALG_NONE); ++ ++ else if (ks==XK_f) DoMask(MSK_FLMASK); ++ else if (ks==XK_g) DoMask(MSK_Q0MASK); ++ else if (ks==XK_h) DoMask(MSK_WIN); ++ else if (ks==XK_i) DoMask(MSK_MEKO); ++ else if (ks==XK_j) DoMask(MSK_CPMASK); ++ else if (ks==XK_l) DoMask(MSK_RGB); ++ else if (ks==XK_n) DoMask(MSK_BITREV); ++ else if (ks==XK_w) DoMask(MSK_COLREV); ++ + else if (ks==XK_b) DoAlg(ALG_BLUR); + else if (ks==XK_s) DoAlg(ALG_SHARPEN); + else if (ks==XK_e) DoAlg(ALG_EDGE); +*************** +*** 1625,1631 **** + } + else { /* commands valid in any window */ + switch (buf[0]) { +! + /* things in dispMB */ + case 'r': SelectDispMB(DMB_RAW); break; + case 'd': SelectDispMB(DMB_DITH); break; +--- 1642,1648 ---- + } + else { /* commands valid in any window */ + switch (buf[0]) { +! + /* things in dispMB */ + case 'r': SelectDispMB(DMB_RAW); break; + case 'd': SelectDispMB(DMB_DITH); break; +*************** +*** 1689,1694 **** +--- 1706,1712 ---- + case 'c': FakeButtonPress(&but[BCROP]); break; + case 'u': FakeButtonPress(&but[BUNCROP]); break; + case 'C': FakeButtonPress(&but[BACROP]); break; ++ case 'f': FakeButtonPress(&but[BMASKS]); break; + case 'P': FakeButtonPress(&but[BPAD]); break; + case 'A': FakeButtonPress(&but[BANNOT]); break; + +diff -c --new-file xv-3.10a.org/xvimage.c xv+flmask/xvimage.c +*** xv-3.10a.org/xvimage.c Fri Sep 5 21:12:33 1997 +--- xv+flmask/xvimage.c Wed Sep 3 12:49:54 1997 +*************** +*** 45,51 **** + static int doPadPaste PARM((byte *, int, int, int, int)); + static int ReadImageFile1 PARM((char *, PICINFO *)); + +! + + #define DO_CROP 0 + #define DO_ZOOM 1 +--- 45,52 ---- + static int doPadPaste PARM((byte *, int, int, int, int)); + static int ReadImageFile1 PARM((char *, PICINFO *)); + +! byte *origPic; +! int origPicType; + + #define DO_CROP 0 + #define DO_ZOOM 1 +*************** +*** 910,915 **** +--- 911,922 ---- + /* dir=0: 90 degrees clockwise, else 90 degrees counter-clockwise */ + WaitCursor(); + ++ if (origPic!=NULL) { ++ int tmp_pw,tmp_ph; ++ tmp_pw=pWIDE; ++ tmp_ph=pHIGH; ++ RotatePic(origPic,origPicType,&tmp_pw,&tmp_ph,dir); ++ } + RotatePic(pic, picType, &pWIDE, &pHIGH, dir); + + /* rotate clipped version and modify 'clip' coords */ +diff -c --new-file xv-3.10a.org/xvmask.c xv+flmask/xvmask.c +*** xv-3.10a.org/xvmask.c Thu Jan 1 09:00:00 1970 +--- xv+flmask/xvmask.c Sun Sep 14 07:17:12 1997 +*************** +*** 0 **** +--- 1,912 ---- ++ /* ++ * xvmask.c - image mask algorithms (FLmask, etc.) ++ * ++ * Contains: ++ * void DoMask(int algnum); ++ */ ++ ++ #include "copyright.h" ++ #include "xv.h" ++ ++ typedef struct { int n; char flg; } CPS; ++ typedef struct { int n; unsigned short int r; } MKT; ++ ++ /* Flmask */ ++ void cpcode PARM ((char *, unsigned char *, int)); ++ void MaskCr PARM ((void)); ++ static void FLmask PARM ((void)); ++ static void Q0mask PARM ((void)); ++ static void WINmask PARM ((void)); ++ static void MEKOmask PARM ((void)); ++ static void CPmask PARM ((void)); ++ static void XOR80 PARM ((void)); ++ static void RGBchange PARM ((void)); ++ static void BitReverse PARM ((void)); ++ static void ColReverse PARM ((void)); ++ ++ /***** Flmask *****/ ++ static void doMaskCr PARM ((byte *, int, int, int, int, int, int)); ++ static void doFLmask PARM ((byte *, int, int, byte *, int, int, int, int)); ++ static void doCPmask PARM ((byte *, int, int, byte *, int, int, int, int, char *)); ++ static void doMEKOmask PARM ((byte *, int, int, byte *, int, int, int, int, int)); ++ static void doColReverse PARM ((byte *, int, int, byte *, int, int, int, int, int)); ++ static void doRGBchange PARM ((byte *, int, int, byte *, int, int, int, int)); ++ static void doQ0mask PARM ((byte *, int, int, byte *, int, int, int, int, int, int)); ++ static int *calcFLmask PARM ((int, int)); ++ static void move8bit PARM ((byte *, byte *, int)); ++ static void move16bit PARM ((byte *, byte *, int)); ++ static void moveCP PARM ((byte *, byte *, int, int)); ++ static void doWINmask PARM ((byte *, int, int, byte *, int, int, int, int)); ++ static void wincp PARM ((int, int, byte *, byte *)); ++ ++ /******************/ ++ ++ int start24bitAlg PARM ((byte **, byte **)); ++ void end24bitAlg PARM ((byte *, byte *)); ++ void saveOrigPic PARM ((void)); ++ void printUTime PARM ((char *)); ++ ++ byte *origPic; ++ ++ #undef TIMING_TEST ++ ++ #ifdef TIMING_TEST ++ #include ++ #include ++ #endif ++ ++ /************************/ ++ void ++ DoMask (anum) ++ int anum; ++ { ++ switch (anum) ++ { ++ case MSK_NONE: DoAlg (ALG_NONE); break; ++ case MSK_FLMASK: FLmask (); break; ++ case MSK_Q0MASK: Q0mask (); break; ++ case MSK_WIN: WINmask (); break; ++ case MSK_MEKO: MEKOmask (); break; ++ case MSK_CPMASK: CPmask (); break; ++ case MSK_RGB: RGBchange (); break; ++ case MSK_BITREV: BitReverse (); break; ++ case MSK_COLREV: ColReverse (); break; ++ } ++ ++ algMB.dim[ALG_NONE] = (origPic == (byte *) NULL); ++ flmaskMB.dim[ALG_NONE] = (origPic == (byte *) NULL); ++ } ++ ++ ++ /****************************** ++ Flmask: FLMASK. ++ ******************************/ ++ static void ++ FLmask () ++ { ++ byte *pic24, *p24, *tmpPic, *tlp; ++ char *str; ++ int i, j, v, maxv, sx, sy, sw, sh; ++ ++ WaitCursor (); ++ ++ if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh); ++ else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; } ++ ++ CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH); ++ ++ str = "Doing FLMASK..."; ++ SetISTR (ISTR_INFO, str); ++ ++ if (start24bitAlg (&pic24, &tmpPic)) ++ return; ++ xvbcopy ((char *) pic24, (char *) tmpPic, ++ (size_t) (pWIDE * pHIGH * 3)); ++ ++ doFLmask (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh); ++ ++ end24bitAlg (pic24, tmpPic); ++ } ++ ++ /****************************** ++ Flmask: BitReverse. ++ ******************************/ ++ static void ++ BitReverse () ++ { ++ byte *pic24, *p24, *tmpPic, *tlp; ++ char *str; ++ int i, j, v, maxv, sx, sy, sw, sh; ++ ++ WaitCursor (); ++ ++ if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh); ++ else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; } ++ ++ CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH); ++ ++ str = "Doing reverse bit..."; ++ SetISTR (ISTR_INFO, str); ++ ++ if (start24bitAlg (&pic24, &tmpPic)) ++ return; ++ xvbcopy ((char *) pic24, (char *) tmpPic, ++ (size_t) (pWIDE * pHIGH * 3)); ++ ++ doColReverse (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh, 1); ++ ++ end24bitAlg (pic24, tmpPic); ++ } ++ ++ /****************************** ++ Flmask: ColReverse. ++ ******************************/ ++ static void ++ ColReverse () ++ { ++ byte *pic24, *p24, *tmpPic, *tlp; ++ char *str; ++ int i, j, v, maxv, sx, sy, sw, sh; ++ ++ WaitCursor (); ++ ++ if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh); ++ else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; } ++ ++ CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH); ++ ++ str = "Doing reverse colormap..."; ++ SetISTR (ISTR_INFO, str); ++ ++ if (start24bitAlg (&pic24, &tmpPic)) ++ return; ++ xvbcopy ((char *) pic24, (char *) tmpPic, ++ (size_t) (pWIDE * pHIGH * 3)); ++ ++ doColReverse (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh, 0); ++ end24bitAlg (pic24, tmpPic); ++ } ++ ++ ++ /****************************** ++ Flmask: Q0 MASK. ++ ******************************/ ++ static void ++ Q0mask () ++ { ++ int pixX, pixY, err; ++ static char *labels[] = {"\nOk", "\033Cancel"}; ++ char txt[256]; ++ static char buf[64] = {'8', '\0'}; ++ byte *pic24, *p24, *tmpPic, *tp, *tlp; ++ char *str; ++ int i, j, v, maxv, sx, sy, sw, sh; ++ ++ sprintf (txt, "FLmask: Q0mask \n\nEnter mask pixels size: %s\n", "(ex. '8', '8x16')"); ++ ++ i = GetStrPopUp (txt, labels, 2, buf, 64, "0123456789x", 1); ++ if (i == 1 || strlen (buf) == 0) return; ++ ++ pixX = pixY = err = 0; ++ ++ if (index (buf, 'x')) ++ { ++ if (sscanf (buf, "%d x %d", &pixX, &pixY) != 2) err++; ++ } ++ else ++ { ++ if (sscanf (buf, "%d", &pixX) != 1) err++; ++ pixY = pixX; ++ } ++ ++ if (pixX < 1 || pixY < 1 || err) ++ { ++ ErrPopUp ("Error: The entered string is not valid.", ++ "\nWho Cares!"); ++ return; ++ } ++ WaitCursor (); ++ ++ str = "Doing Q0 MASK..."; ++ SetISTR (ISTR_INFO, str); ++ ++ if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh); ++ else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; } ++ ++ CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH); ++ ++ if (start24bitAlg (&pic24, &tmpPic)) return; ++ xvbcopy ((char *) pic24, (char *) tmpPic, ++ (size_t) (pWIDE * pHIGH * 3)); ++ ++ doQ0mask (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh, pixX, pixY); ++ end24bitAlg (pic24, tmpPic); ++ } ++ ++ /****************************** ++ Flmask: RGBchange. ++ ******************************/ ++ static void ++ RGBchange () ++ { ++ byte *pic24, *p24, *tmpPic, *tlp; ++ char *str; ++ int i, j, v, maxv, sx, sy, sw, sh; ++ ++ WaitCursor (); ++ ++ if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh); ++ else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; } ++ ++ CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH); ++ ++ str = "Doing RGB change..."; ++ SetISTR (ISTR_INFO, str); ++ ++ if (start24bitAlg (&pic24, &tmpPic)) return; ++ xvbcopy ((char *) pic24, (char *) tmpPic, ++ (size_t) (pWIDE * pHIGH * 3)); ++ ++ doRGBchange (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh); ++ ++ end24bitAlg (pic24, tmpPic); ++ } ++ ++ /****************************** ++ Flmask: WINmask. ++ ******************************/ ++ static void ++ WINmask () ++ { ++ byte *pic24, *p24, *tmpPic, *tlp; ++ char *str; ++ int i, j, v, maxv, sx, sy, sw, sh; ++ ++ WaitCursor (); ++ ++ if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh); ++ else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; } ++ ++ CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH); ++ ++ str = "Doing WIN mask..."; ++ SetISTR (ISTR_INFO, str); ++ ++ if (start24bitAlg (&pic24, &tmpPic)) return; ++ xvbcopy ((char *) pic24, (char *) tmpPic, ++ (size_t) (pWIDE * pHIGH * 3)); ++ ++ doWINmask (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh); ++ ++ end24bitAlg (pic24, tmpPic); ++ } ++ ++ /****************************** ++ Flmask: MEKOmask. ++ ******************************/ ++ static ++ void ++ MEKOmask () ++ { ++ static char *labels[] = {"\nForward", "\nBackward"}; ++ char txt[256], key[48]; ++ byte *pic24, *p24, *tmpPic, *tp, *tlp; ++ char *str; ++ int i, j, v, maxv, sx, sy, sw, sh; ++ ++ memset (key, 0, 48); ++ ++ sprintf (txt, "FLmask: MEKO mask \n\n Select MEKOmask type ", ++ key); ++ i = PopUp (txt, labels, 2); ++ ++ WaitCursor (); ++ str = "Doing MEKOmask..."; ++ SetISTR (ISTR_INFO, str); ++ ++ if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh); ++ else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; } ++ ++ CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH); ++ ++ if (start24bitAlg (&pic24, &tmpPic)) return; ++ xvbcopy ((char *) pic24, (char *) tmpPic, ++ (size_t) (pWIDE * pHIGH * 3)); ++ doMEKOmask (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh, i); ++ end24bitAlg (pic24, tmpPic); ++ } ++ ++ /************************/ ++ static void ++ doMEKOmask (pic24, w, h, results, selx, sely, selw, selh, flag) ++ byte *pic24, *results; ++ int w, h, selx, sely, selw, selh, flag; ++ { ++ register byte *dst, *src; ++ register int x, y, i; ++ register int xmax, ymax; ++ MKT *mt; ++ ++ printUTime ("start of MEKOmask."); ++ ++ xmax = selw / 16; ++ ymax = selh / 16; ++ ++ mt = (MKT *) calcMEKO (xmax * ymax); ++ if (mt == NULL) ++ return; ++ ++ for (i = 0; i < xmax * ymax; i++) ++ { ++ ProgressMeter (1, (xmax * ymax) - 1, i, "MEKOmask"); ++ if ((i & 63) == 0) ++ WaitCursor (); ++ ++ if (flag == 0) ++ { ++ dst = results + ((sely + ((mt[i].n - 1) / xmax) * 16) * w ++ + selx + ((mt[i].n - 1) % xmax) * 16) * 3; ++ src = pic24 + ((sely + (i / xmax) * 16) * w ++ + selx + (i % xmax) * 16) * 3; ++ } ++ else ++ { ++ src = pic24 + ((sely + ((mt[i].n - 1) / xmax) * 16) * w ++ + selx + ((mt[i].n - 1) % xmax) * 16) * 3; ++ dst = results + ((sely + (i / xmax) * 16) * w ++ + selx + (i % xmax) * 16) * 3; ++ } ++ move16bit (dst, src, w); ++ } ++ ++ free (mt); ++ printUTime ("end of MEKOmask."); ++ } ++ ++ static void ++ move16bit (byte * dest, byte * src, int w) ++ { ++ int y, x; ++ byte *tmp1, *tmp2; ++ ++ for (y = 0; y < 16; y++) ++ { ++ tmp1 = dest + y * w * 3; ++ tmp2 = src + y * w * 3; ++ for (x = 0; x < 16 * 3; x++) ++ { ++ *tmp1 = *tmp2; ++ tmp1++; ++ tmp2++; ++ } ++ } ++ } ++ ++ /****************************** ++ Flmask: CP MASK. ++ ******************************/ ++ static void ++ CPmask () ++ { ++ static char *labels[] = {"\nOk", "\033Cancel"}; ++ char buf[64]; ++ char txt[256], key[48]; ++ byte *pic24, *p24, *tmpPic, *tp, *tlp; ++ char *str; ++ int i, j, v, maxv, sx, sy, sw, sh; ++ ++ memset (key, 0, 48); ++ cpcode (fullfname, key, 0); ++ if (key[0] == 0) ++ { ++ memset (key, 0, 48); ++ cpcode (fullfname, key, 1); ++ if (key[0] == 0) ++ { ++ memset (key, 0, 48); ++ cpcode (fullfname, key, 2); ++ } ++ } ++ ++ strcpy(buf,key); ++ if (strlen(buf)==0)strcpy(buf,"SAMPLE"); ++ sprintf (txt, "FLmask: CPmask \n\nEnter CPmask code: %s \n", ++ "(ex. 'SAMPLE')"); ++ ++ i = GetStrPopUp (txt, labels, 2, buf, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 1); ++ if (i == 1 || strlen (buf) == 0) return; ++ strcpy(key,buf); ++ ++ /* Old version. ++ sprintf (txt, "FLmask: CP mask \n\n CP code = %s ", key); ++ i = PopUp (txt, labels, 2); ++ if (i == 1) return; ++ */ ++ ++ WaitCursor (); ++ str = "Doing CP mask..."; ++ SetISTR (ISTR_INFO, str); ++ ++ if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh); ++ else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; } ++ ++ CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH); ++ ++ if (start24bitAlg (&pic24, &tmpPic)) return; ++ xvbcopy ((char *) pic24, (char *) tmpPic, ++ (size_t) (pWIDE * pHIGH * 3)); ++ doCPmask (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh, key); ++ end24bitAlg (pic24, tmpPic); ++ } ++ ++ /************************/ ++ static void ++ doCPmask (pic24, w, h, results, selx, sely, selw, selh, key) ++ byte *pic24, *results; ++ int w, h, selx, sely, selw, selh; ++ char *key; ++ { ++ register byte *dst, *src; ++ register int x, y, i; ++ register int xmax, ymax; ++ CPS *cps; ++ ++ printUTime ("start of CPmask."); ++ ++ xmax = selw / 8; ++ ymax = selh / 8; ++ ++ cps = (CPS *) calcCPmask (key, xmax * ymax); ++ ++ for (i = 0; i < xmax * ymax; i++) ++ { ++ ProgressMeter (1, (xmax * ymax) - 1, i, "CPmask"); ++ if ((i & 63) == 0) WaitCursor (); ++ ++ dst = results + ((sely + (cps[i].n / xmax) * 8) * w ++ + selx + (cps[i].n % xmax) * 8) * 3; ++ src = pic24 + ((sely + (i / xmax) * 8) * w ++ + selx + (i % xmax) * 8) * 3; ++ moveCP (dst, src, w, cps[i].flg); ++ } ++ ++ free (cps); ++ printUTime ("end of CPmask."); ++ } ++ ++ static void ++ moveCP (byte * dest, byte * src, int w, int cp_flag) ++ { ++ int y, x; ++ byte *tmp1, *tmp2; ++ ++ if (cp_flag == 0) ++ { ++ for (y = 0; y < 8; y++) ++ { ++ tmp1 = dest + y * w * 3; ++ tmp2 = src + y * w * 3; ++ for (x = 0; x < 8 * 3; x += 3) ++ { ++ tmp1[0] = (byte) ~ tmp2[1]; ++ tmp1[1] = (byte) ~ tmp2[0]; ++ tmp1[2] = (byte) ~ tmp2[2]; ++ tmp1 += 3; ++ tmp2 += 3; ++ } ++ } ++ } ++ else ++ { ++ for (y = 0; y < 8; y++) ++ { ++ tmp1 = dest + y * 3; ++ tmp2 = src + y * w * 3; ++ for (x = 0; x < 8 * 3; x += 3) ++ { ++ tmp1[0] = (byte) ~ tmp2[1]; ++ tmp1[1] = (byte) ~ tmp2[0]; ++ tmp1[2] = (byte) ~ tmp2[2]; ++ tmp1 += w * 3; ++ tmp2 += 3; ++ } ++ } ++ } ++ } ++ ++ /************************/ ++ static void ++ doFLmask (pic24, w, h, results, selx, sely, selw, selh) ++ byte *pic24, *results; ++ int w, h, selx, sely, selw, selh; ++ { ++ register byte *dst, *src; ++ register int x, y, i; ++ register int *ar, xmax, ymax; ++ ++ printUTime ("start of FLMASK."); ++ ++ xmax = selw / 8; ++ ymax = selh / 8; ++ ar = (int *) calcFLmask (xmax, ymax); ++ ++ for (i = 0; i < xmax * ymax; i++) ++ { ++ ProgressMeter (1, (xmax * ymax * 2) - 1, ++ i + xmax * ymax, "FLMASK"); ++ if ((i & 63) == 0) WaitCursor (); ++ ++ dst=results+((sely+(ar[xmax*ymax-i-1]/xmax)*8)*w ++ +selx+(ar[xmax*ymax-i-1]%xmax)*8)*3; ++ src=pic24+((sely+(ar[i]/xmax)*8)*w ++ +selx+(ar[i]%xmax)*8)*3; ++ if (ar[i] != ar[xmax * ymax - i - 1]) ++ move8bit (dst, src, w); ++ } ++ ++ free (ar); ++ printUTime ("end of FLMASK."); ++ } ++ ++ static int * ++ calcFLmask (int xmax, int ymax) ++ { ++ int *spc, *tmp_ar; ++ int i, l, x, y, c; ++ struct direction { int x; int y; } dir[4]; ++ ++ dir[0].x = 0; dir[0].y = -1; ++ dir[1].x = -1; dir[1].y = 0; ++ dir[2].x = 0; dir[2].y = 1; ++ dir[3].x = 1; dir[3].y = 0; ++ ++ spc = (int *) malloc (sizeof (int) * xmax * ymax); ++ tmp_ar = (int *) malloc (sizeof (int) * xmax * ymax); ++ ++ c = 0; ++ for (l = 0; l < ymax; l++) ++ { ++ for (i = 0; i < xmax; i++) ++ { ++ spc[c] = c; ++ c++; ++ } ++ } ++ ++ c = 3; ++ x = 0; ++ y = ymax - 1; ++ for (i = 0; i < xmax * ymax; i++) ++ { ++ ProgressMeter (1, (xmax * ymax * 2) - 1, i, "FLmask"); ++ if ((i & 63) == 0) WaitCursor (); ++ ++ tmp_ar[i] = spc[x + y * xmax]; ++ if ((x + dir[c].x) == xmax || (x + dir[c].x) < 0) ++ { ++ c++; ++ if (c == 4) c = 0; ++ } ++ if ((y + dir[c].y) == ymax || (y + dir[c].y) < 0) ++ { ++ c++; ++ if (c == 4) c = 0; ++ } ++ for (l = 0; l < i; l++) ++ { ++ if(spc[x+(dir[c].x)+(y+(dir[c].y))*xmax]==tmp_ar[l]) ++ { ++ c++; ++ if (c == 4) c = 0; ++ break; ++ } ++ } ++ x = x + dir[c].x; ++ y = y + dir[c].y; ++ } ++ free (spc); ++ return (tmp_ar); ++ } ++ ++ static void ++ move8bit (byte * dest, byte * src, int w) ++ { ++ int y, x; ++ byte *tmp1, *tmp2; ++ ++ for (y = 0; y < 8; y++) ++ { ++ tmp1 = dest + y * w * 3; ++ tmp2 = src + y * w * 3; ++ for (x = 0; x < 8 * 3; x++) ++ { ++ *tmp1 = (byte) ~ (*tmp2); ++ tmp1++; ++ tmp2++; ++ } ++ } ++ } ++ ++ /************************/ ++ static void ++ doColReverse (pic24, w, h, results, selx, sely, selw, selh, bit_flag) ++ byte *pic24, *results; ++ int w, h, selx, sely, selw, selh, bit_flag; ++ { ++ register byte *p24; ++ register byte *rp; ++ register int x, y; ++ ++ printUTime ("start of Reverse."); ++ ++ for (y = sely; y < sely + selh; y++) ++ { ++ ++ ProgressMeter (sely + 1, (sely + selh - 1) - 1, y, "Reverse"); ++ if ((y & 63) == 0) WaitCursor (); ++ ++ rp = results + (y * w + selx) * 3; ++ p24 = pic24 + (y * w + selx) * 3; ++ ++ if (bit_flag == 1) ++ { ++ /* BitReverse. */ ++ for (x = selx; x < selx + selw * 3; x++, p24++, rp++) ++ *rp = (byte) ~ (*p24); ++ ++ } ++ else ++ { ++ /* ColReverse. */ ++ for (x = selx; x < selx + selw * 3; x++, p24++, rp++) ++ *rp = *p24 ^ 0x80; ++ } ++ } ++ printUTime ("end of Reverse."); ++ } ++ ++ /************************/ ++ static void ++ doQ0mask (pic24, w, h, results, selx, sely, selw, selh, pixX, pixY) ++ byte *pic24, *results; ++ int w, h, selx, sely, selw, selh, pixX, pixY; ++ { ++ register byte *p24; ++ register int bperlin, rsum, gsum, bsum; ++ byte *rp; ++ int i, x, y; ++ int skip, y0, x0; ++ ++ printUTime ("start of Q0mask."); ++ ++ bperlin = w * 3; ++ ++ for (y = sely; y < sely + ((selh / pixY) * pixY); y++) ++ { ++ ProgressMeter(sely+1,(sely+((selh/pixY)*pixY))-1,y,"Q0mask"); ++ if ((y & 63) == 0) WaitCursor (); ++ ++ rp = results + (y * w + selx) * 3; ++ y0 = y - sely; ++ p24=pic24+((((y0/pixY+1)*pixY)-1-(y0%pixY)+sely)*w+selx)*3; ++ ++ for(x=selx;x maxX * tmp) { xp1 = x; break; } ++ } ++ for (x = selw - 1; x >= 1; x--) { ++ if (edgeX[x] > maxX * tmp) { xp2 = x; break; } ++ } ++ for (y = 1; y < selh - 1; y++) { ++ if (edgeY[y] >= maxY * tmp) { yp1 = y; break; } ++ } ++ for (y = selh - 1; y >= 1; y--) { ++ if (edgeY[y] >= maxY * tmp) { yp2 = y; break; } ++ } ++ if(xp2-xp1 > 4 && yp2-yp1 > 4 && xp1*xp2*yp1*yp2 != 0) break; ++ ++ if (tmp <= 0.01) return; ++ else tmp = tmp / 2.0; ++ } ++ ++ free (edgeY); ++ free (edgeX); ++ ++ x1 = xp1 + selx + 1; ++ x2 = xp2 - xp1; ++ y1 = yp1 + sely; ++ y2 = yp2 - yp1; ++ ++ /* crop1(x1,y1,x2,y2,0); <-- DO_CROP */ ++ MaskSelect (x1, x2, y1, y2); ++ ++ printUTime ("end of MaskSearch."); ++ } +diff -c --new-file xv-3.10a.org/xvmeko.c xv+flmask/xvmeko.c +*** xv-3.10a.org/xvmeko.c Thu Jan 1 09:00:00 1970 +--- xv+flmask/xvmeko.c Tue Sep 9 21:59:21 1997 +*************** +*** 0 **** +--- 1,962 ---- ++ #include ++ #include ++ ++ unsigned short int mekornd[9216] = { ++ 0x2064,0x16F2,0x0AD2,0x0E1F,0x0A31,0x17CE,0x0DE8,0x1C41,0x0878,0x1349, ++ 0x184B,0x1B51,0x0841,0x19A3,0x0820,0x0C12,0x1117,0x2117,0x1BC1,0x1F13, ++ 0x19ED,0x0230,0x040D,0x1957,0x116D,0x0FD6,0x1E4F,0x0C28,0x1D28,0x077A, ++ 0x205E,0x053D,0x0686,0x13AC,0x1A0E,0x16DE,0x1607,0x1504,0x0CED,0x088F, ++ 0x159D,0x0EF4,0x0C3F,0x1120,0x225D,0x0B43,0x1B2D,0x184C,0x043D,0x1221, ++ 0x0A12,0x225C,0x04F0,0x1399,0x1289,0x1899,0x1B0B,0x1A2B,0x1383,0x084A, ++ 0x1DEE,0x118C,0x2395,0x00F5,0x16CD,0x0A9C,0x0E73,0x1FF9,0x0288,0x0014, ++ 0x0EA9,0x17B3,0x13AF,0x03A7,0x0CE7,0x20AC,0x0E93,0x1F1E,0x207D,0x00B4, ++ 0x1833,0x1DD4,0x09FD,0x0819,0x052A,0x16C9,0x1893,0x2134,0x0D8F,0x1597, ++ 0x1573,0x22B5,0x1B55,0x04CE,0x0BB1,0x02FD,0x0685,0x0AAD,0x18DA,0x0A6C, ++ 0x0E92,0x15C5,0x0695,0x0A70,0x1D67,0x11D0,0x0CC9,0x1E8A,0x12AC,0x0EF1, ++ 0x220D,0x04FB,0x1034,0x00F4,0x0E6D,0x1F90,0x1649,0x108C,0x0AAA,0x1160, ++ 0x238F,0x056C,0x0E0C,0x20A7,0x0658,0x0502,0x1973,0x0FB2,0x12D8,0x0D94, ++ 0x1201,0x03BA,0x167E,0x237F,0x0D38,0x00E0,0x2183,0x201B,0x1192,0x08C1, ++ 0x1240,0x20CB,0x073F,0x10DE,0x1379,0x163A,0x1D2E,0x0A15,0x19DB,0x02CD, ++ 0x01BC,0x032C,0x23B9,0x1FD2,0x1E7D,0x1518,0x2148,0x0E72,0x235E,0x1DF0, ++ 0x0538,0x1BCB,0x0926,0x1C17,0x0134,0x175A,0x1872,0x0ECF,0x06EB,0x0045, ++ 0x100D,0x06EF,0x1EFE,0x0777,0x006C,0x0386,0x1DA4,0x1351,0x07AB,0x21EA, ++ 0x1FF2,0x1017,0x182B,0x047B,0x1531,0x19DE,0x0F3A,0x186C,0x052E,0x1A15, ++ 0x23E5,0x1901,0x0B44,0x0458,0x20E8,0x20AF,0x0793,0x23DD,0x1F3B,0x17D4, ++ 0x1879,0x2262,0x101D,0x224A,0x0D12,0x01F0,0x1B7D,0x1BEE,0x224F,0x04C7, ++ 0x1D8F,0x132F,0x1E94,0x0F26,0x2193,0x164A,0x1B0A,0x22F2,0x0393,0x00DA, ++ 0x0924,0x1DCD,0x17A2,0x038D,0x0263,0x10AA,0x2344,0x089B,0x0085,0x0C80, ++ 0x196A,0x16E7,0x09C5,0x0903,0x08D3,0x21AE,0x0255,0x049D,0x1F67,0x207C, ++ 0x0CCA,0x055C,0x0E8F,0x1FD3,0x15A9,0x1B9E,0x1640,0x0983,0x08CC,0x0CE6, ++ 0x0E5E,0x15CF,0x2248,0x0BDB,0x1FB4,0x1BD6,0x08B2,0x092B,0x10B7,0x1832, ++ 0x1558,0x214F,0x005A,0x1E9D,0x15DC,0x1DAB,0x0435,0x199F,0x0B42,0x23DA, ++ 0x1BCD,0x1339,0x095C,0x1A89,0x08FA,0x2379,0x0F74,0x060A,0x1408,0x0EB3, ++ 0x1559,0x00AC,0x0D0D,0x14D4,0x07B1,0x1ACC,0x1707,0x03C4,0x0FBE,0x0C76, ++ 0x21A8,0x0A0B,0x0D60,0x1E97,0x1625,0x117A,0x0415,0x008F,0x1F9C,0x00A6, ++ 0x19C5,0x04E7,0x21F2,0x0E08,0x17BA,0x10B9,0x0656,0x22C4,0x2048,0x070E, ++ 0x15CB,0x01F3,0x0488,0x1167,0x14A2,0x08CF,0x0AC2,0x12BE,0x20A1,0x0501, ++ 0x01B2,0x004B,0x10E2,0x09C9,0x01FA,0x05B7,0x0E20,0x0D55,0x003B,0x1413, ++ 0x1F7E,0x1A03,0x06CB,0x21C4,0x1FA5,0x1E15,0x0C14,0x0A93,0x133B,0x0498, ++ 0x1EB7,0x0BFB,0x1774,0x1F14,0x21D0,0x1930,0x04FF,0x0245,0x1B0C,0x2368, ++ 0x198C,0x1487,0x08C2,0x20A0,0x18BE,0x010B,0x16AE,0x1C65,0x08EA,0x23E8, ++ 0x09D0,0x158B,0x237D,0x1F72,0x2051,0x188E,0x04A7,0x2074,0x1E91,0x1557, ++ 0x07DC,0x2136,0x0F50,0x234C,0x1602,0x0572,0x20DB,0x00B8,0x1929,0x17A5, ++ 0x0E82,0x0D86,0x03BD,0x1B02,0x2323,0x0445,0x1AB6,0x02B4,0x0D1A,0x1524, ++ 0x03FE,0x1231,0x189A,0x18DE,0x15F6,0x17EB,0x0B89,0x14CA,0x0910,0x09B9, ++ 0x1380,0x0559,0x169D,0x22A0,0x00D0,0x0F7A,0x0FB7,0x1FFF,0x1996,0x06FF, ++ 0x0FA5,0x1C83,0x0C61,0x1ECE,0x061F,0x193E,0x232E,0x048E,0x0B5A,0x03D4, ++ 0x1CF9,0x0B0F,0x2274,0x18EF,0x1CB5,0x1CAF,0x18B1,0x0FF3,0x0712,0x19CD, ++ 0x1E6E,0x0A25,0x1375,0x0525,0x19DA,0x0042,0x0BF4,0x1FFC,0x03D0,0x1974, ++ 0x1C33,0x0DB3,0x0180,0x0E8C,0x22EB,0x1121,0x00A1,0x02FC,0x1B3C,0x1D68, ++ 0x15FD,0x22BF,0x1C5D,0x15AB,0x1BB7,0x00F6,0x2219,0x09FB,0x18DF,0x19D5, ++ 0x1396,0x044A,0x1381,0x218D,0x1AEF,0x0603,0x22E1,0x237B,0x0BD3,0x110B, ++ 0x171A,0x201F,0x0C92,0x059C,0x1B10,0x14AB,0x21E1,0x074B,0x1C8D,0x083E, ++ 0x1684,0x117C,0x0D73,0x1740,0x0F45,0x016C,0x153E,0x15FE,0x08C5,0x2080, ++ 0x166E,0x05A2,0x1897,0x18EB,0x0038,0x1F4B,0x1EBA,0x07F5,0x0DB4,0x22E9, ++ 0x0977,0x0724,0x0287,0x0DCB,0x0EFD,0x11A7,0x0C66,0x1393,0x078E,0x2017, ++ 0x1849,0x03B6,0x175F,0x1E05,0x1FB7,0x0AF6,0x03AC,0x02FF,0x10EE,0x07E6, ++ 0x1529,0x1EC1,0x005D,0x14BB,0x074F,0x098E,0x214B,0x0EB2,0x0B96,0x1940, ++ 0x11FB,0x0721,0x180F,0x2346,0x1163,0x1BE9,0x1BC4,0x1B7E,0x03D7,0x19C0, ++ 0x23F6,0x0C0C,0x1F60,0x0CD4,0x1882,0x22FB,0x21EB,0x0948,0x122B,0x0474, ++ 0x121B,0x09C2,0x17CF,0x1993,0x2112,0x2259,0x2292,0x142A,0x00D2,0x125B, ++ 0x0E63,0x0F81,0x0E2E,0x01EC,0x0D11,0x1791,0x2353,0x0BC5,0x239B,0x1B97, ++ 0x1F68,0x173C,0x1DAD,0x0778,0x165C,0x09E2,0x0D5D,0x0E9C,0x1FBB,0x22FF, ++ 0x14DF,0x0F96,0x1D08,0x1ECD,0x2114,0x10EF,0x21F4,0x0F04,0x040B,0x07D6, ++ 0x01E1,0x1C95,0x0441,0x163D,0x17EE,0x032B,0x0FE6,0x2273,0x18F5,0x21FA, ++ 0x0ED3,0x18DC,0x0001,0x014C,0x1144,0x032A,0x0717,0x1D14,0x04F1,0x0225, ++ 0x14E3,0x026F,0x147D,0x076C,0x135B,0x1966,0x15BF,0x12D3,0x0785,0x097D, ++ 0x036F,0x1B88,0x1CE2,0x1360,0x0A8B,0x1FBC,0x101F,0x005B,0x0A29,0x1303, ++ 0x1CD5,0x0706,0x066E,0x04D7,0x0D9C,0x1B25,0x014F,0x1182,0x1FF0,0x1452, ++ 0x0683,0x096C,0x0F79,0x0C1C,0x2394,0x1306,0x1FAD,0x081F,0x1A7D,0x181F, ++ 0x0D45,0x219A,0x167A,0x1813,0x0329,0x1876,0x126D,0x097C,0x0EB6,0x1820, ++ 0x1374,0x2121,0x11E4,0x0AB4,0x071E,0x03AB,0x0FA1,0x1E0A,0x1E59,0x1C85, ++ 0x0197,0x1CCA,0x1148,0x1A81,0x0D04,0x1955,0x1705,0x0ED9,0x01D9,0x102E, ++ 0x0480,0x0475,0x1641,0x0101,0x18A1,0x09B3,0x1B5F,0x1CFD,0x054E,0x06D5, ++ 0x1A95,0x0301,0x05F6,0x150C,0x0086,0x04DC,0x05BD,0x004E,0x043C,0x1020, ++ 0x136B,0x0B6D,0x00B3,0x0FCA,0x1CFC,0x16D4,0x1E32,0x09E3,0x1588,0x1B58, ++ 0x0A9A,0x036A,0x0C8B,0x11EF,0x1823,0x0AF3,0x1448,0x1DCA,0x1931,0x05D6, ++ 0x0CF9,0x1207,0x063F,0x0F88,0x0D46,0x1FCE,0x162F,0x08CD,0x13A6,0x181B, ++ 0x2107,0x2197,0x01AF,0x09A1,0x07AA,0x01BF,0x1932,0x118F,0x1EB0,0x0A7F, ++ 0x087D,0x0E2F,0x1FE0,0x12EF,0x1BEF,0x1D4D,0x1C19,0x1856,0x1D19,0x1294, ++ 0x1D57,0x176C,0x02DC,0x101C,0x22B7,0x0135,0x17B5,0x0310,0x1548,0x1D2A, ++ 0x1626,0x0B31,0x1E7C,0x1BE7,0x140C,0x1B81,0x019E,0x1F11,0x11C6,0x0939, ++ 0x2182,0x05BB,0x06C8,0x00E4,0x0529,0x1B26,0x13FC,0x1202,0x1A32,0x07F3, ++ 0x098D,0x0E58,0x01B7,0x1DB0,0x0152,0x189C,0x2073,0x0D56,0x1D5B,0x0D36, ++ 0x09CC,0x18A8,0x0E5D,0x143C,0x1063,0x16CA,0x13CA,0x1E38,0x2359,0x1B9C, ++ 0x0A8A,0x0A84,0x046C,0x0FF5,0x0D97,0x0A27,0x0E6B,0x10C2,0x1619,0x0DEE, ++ 0x1DDC,0x0576,0x01C8,0x1069,0x0D4F,0x20AD,0x198B,0x09D5,0x0B22,0x033F, ++ 0x20AA,0x1CCC,0x005F,0x0D68,0x19CB,0x1081,0x1D97,0x0AE2,0x1C5C,0x0F05, ++ 0x123C,0x0B20,0x2371,0x0CEB,0x00CB,0x1F06,0x00BB,0x191B,0x0117,0x2376, ++ 0x17BC,0x19CE,0x216D,0x1F07,0x1455,0x14B8,0x1C6A,0x1B80,0x0E5B,0x1851, ++ 0x0172,0x23AA,0x0A22,0x0D7F,0x0720,0x0136,0x0666,0x1019,0x13FE,0x1ACE, ++ 0x0B51,0x0C24,0x050E,0x1873,0x08AE,0x16AB,0x1A90,0x0A76,0x1552,0x19C4, ++ 0x0FAB,0x0ABC,0x06C1,0x050A,0x0E49,0x1FCB,0x11A1,0x1387,0x0C47,0x2174, ++ 0x0570,0x1BA2,0x1104,0x00AD,0x1444,0x2383,0x08C7,0x1127,0x056D,0x0D7E, ++ 0x1CB9,0x02FA,0x100A,0x0C51,0x0FBA,0x1A94,0x128B,0x1859,0x2190,0x1B20, ++ 0x1F56,0x186F,0x01D8,0x01F2,0x10A3,0x192C,0x0528,0x211B,0x1C92,0x0239, ++ 0x0334,0x14C0,0x1D5A,0x1DE9,0x12F2,0x0A44,0x17CA,0x0F62,0x15D8,0x069F, ++ 0x1D07,0x11FA,0x0816,0x153C,0x1C81,0x02F1,0x2342,0x23F7,0x0160,0x117F, ++ 0x1BB9,0x1039,0x2063,0x1E3B,0x0C57,0x13E1,0x139A,0x1F12,0x15EA,0x1D48, ++ 0x19C3,0x1A31,0x050C,0x13C5,0x0091,0x13A7,0x1765,0x01F8,0x1B75,0x0EA2, ++ 0x1B6D,0x09EC,0x0312,0x113D,0x012D,0x18C3,0x08A0,0x0452,0x0D87,0x167D, ++ 0x1DA9,0x0FF6,0x2340,0x19AD,0x007B,0x0CBC,0x1D1A,0x1AE4,0x09B4,0x11B2, ++ 0x1B2C,0x14CE,0x1C5E,0x0222,0x162D,0x0C63,0x0584,0x0040,0x1D1F,0x1AF7, ++ 0x0C96,0x132C,0x086B,0x136F,0x19E1,0x0DDA,0x22A5,0x22F7,0x2249,0x20C5, ++ 0x0A19,0x0FDC,0x1834,0x0C58,0x1C56,0x01DC,0x1D84,0x0A66,0x2336,0x0955, ++ 0x0900,0x1ED6,0x0361,0x0D58,0x1D4B,0x10C0,0x1852,0x040E,0x0F0B,0x1978, ++ 0x12E8,0x2261,0x05FE,0x0BD2,0x13C8,0x0F3C,0x07A4,0x18CC,0x0A00,0x0642, ++ 0x0D65,0x1DA8,0x0D15,0x2168,0x05B5,0x0DF8,0x2352,0x0408,0x07D9,0x15FA, ++ 0x0E88,0x0C85,0x1FAB,0x16F5,0x1798,0x12BD,0x1FB3,0x09B6,0x12C2,0x17FA, ++ 0x1BE6,0x1434,0x1DD6,0x0E18,0x08F5,0x07A7,0x0AA9,0x0099,0x1E5B,0x09F4, ++ 0x1C02,0x0737,0x08B9,0x0504,0x0C05,0x0813,0x1716,0x06BE,0x1ECA,0x1995, ++ 0x0D63,0x0745,0x1870,0x221D,0x0C6E,0x20D2,0x23C0,0x11D8,0x0D23,0x1924, ++ 0x0D34,0x10AF,0x2339,0x1F37,0x0ACC,0x228E,0x20B1,0x127E,0x0293,0x0294, ++ 0x18D2,0x0F77,0x1C89,0x035F,0x1441,0x0143,0x219C,0x042F,0x092E,0x1AC0, ++ 0x0932,0x1D93,0x1AE6,0x1E03,0x0F87,0x16B4,0x15B1,0x066F,0x07A1,0x21A6, ++ 0x20BD,0x201C,0x10F2,0x16B2,0x13B8,0x0C90,0x013E,0x191C,0x1ACA,0x10E0, ++ 0x12DA,0x0047,0x15B8,0x1E51,0x0693,0x02CF,0x169A,0x1571,0x2167,0x022F, ++ 0x2150,0x11A0,0x137D,0x143A,0x02D9,0x07AC,0x0B18,0x1730,0x0E1B,0x0BC3, ++ 0x2178,0x1656,0x1041,0x1FDE,0x044C,0x21EC,0x1CF0,0x04A0,0x17F2,0x1D8B, ++ 0x172B,0x0826,0x0B38,0x1FB6,0x07BA,0x1632,0x0BFF,0x12B8,0x0073,0x1D94, ++ 0x0457,0x05B8,0x0CA6,0x08EC,0x1663,0x07CF,0x0E04,0x2116,0x23D6,0x1F6F, ++ 0x0884,0x17D1,0x0B14,0x1222,0x0774,0x16C8,0x16A8,0x1DCF,0x1E21,0x1A42, ++ 0x0CF4,0x184F,0x1AD3,0x1DA5,0x04F9,0x0F39,0x2173,0x091B,0x0648,0x21A7, ++ 0x1481,0x15FB,0x0C69,0x064B,0x00BE,0x08D5,0x211D,0x07E5,0x22F6,0x10A7, ++ 0x0791,0x1F88,0x0FB6,0x2004,0x014E,0x187E,0x17D7,0x2345,0x0C83,0x0DE6, ++ 0x12B6,0x0365,0x1D4A,0x1C43,0x1266,0x083D,0x1A5F,0x0029,0x223B,0x1809, ++ 0x0589,0x001C,0x0F90,0x1B77,0x10CC,0x12CB,0x0703,0x0471,0x0E6E,0x05E6, ++ 0x0E95,0x0912,0x18DD,0x1EEA,0x02CA,0x04C2,0x0BDC,0x0EE6,0x158A,0x189B, ++ 0x17AD,0x0CD8,0x1246,0x1457,0x0938,0x1D87,0x175C,0x0A85,0x1F20,0x17EC, ++ 0x08E7,0x0678,0x0978,0x145E,0x00CF,0x001F,0x0D90,0x09F6,0x20E4,0x217D, ++ 0x13E7,0x1CE0,0x1400,0x156D,0x084C,0x1881,0x0140,0x208B,0x21E5,0x041A, ++ 0x02A0,0x0F23,0x22CA,0x0520,0x087A,0x1FAC,0x0FE2,0x15CD,0x05CF,0x1C34, ++ 0x0BA3,0x033D,0x14DB,0x1251,0x0071,0x15FF,0x0139,0x21FB,0x003C,0x0629, ++ 0x008A,0x03ED,0x0EA7,0x018B,0x146D,0x19D4,0x167F,0x1F24,0x21FC,0x04E9, ++ 0x057F,0x0CB5,0x0F76,0x1B1A,0x19B0,0x1CDB,0x211E,0x0775,0x17D9,0x0494, ++ 0x0C1F,0x0DB6,0x2184,0x1702,0x1165,0x1C4A,0x1043,0x0A5A,0x1004,0x03BE, ++ 0x0B33,0x151A,0x038B,0x12ED,0x1287,0x2205,0x1F05,0x1AC8,0x19E3,0x1506, ++ 0x0891,0x05DA,0x1C04,0x1ED3,0x0A11,0x061C,0x0DC5,0x01D5,0x1459,0x032E, ++ 0x1A7B,0x12E3,0x1A8B,0x17D3,0x1391,0x0ADA,0x0A24,0x13E9,0x05DB,0x2050, ++ 0x12C9,0x216A,0x0A09,0x149D,0x142B,0x0FD3,0x229D,0x19FA,0x0547,0x1984, ++ 0x0E06,0x1827,0x0477,0x19D1,0x05DF,0x1248,0x12FF,0x01A2,0x10E8,0x095B, ++ 0x2227,0x1262,0x00DC,0x0354,0x07E8,0x03DF,0x01FC,0x1AC1,0x0272,0x1AED, ++ 0x090B,0x209E,0x1CCB,0x1AA5,0x218B,0x1D9C,0x1467,0x12B2,0x0D2C,0x1B3D, ++ 0x0EC1,0x13F3,0x1330,0x1629,0x1576,0x2275,0x0684,0x0C41,0x0CD9,0x1836, ++ 0x1280,0x104D,0x168D,0x1DE8,0x0E66,0x0A8C,0x2027,0x0448,0x0DA8,0x0A50, ++ 0x1A4F,0x1A1A,0x0CF1,0x2180,0x03C5,0x1CAA,0x0B84,0x18EE,0x026B,0x1E44, ++ 0x1F92,0x14F6,0x210E,0x0444,0x030A,0x140E,0x0F6B,0x0F44,0x0894,0x1407, ++ 0x085A,0x091E,0x02B7,0x0B83,0x2238,0x1E25,0x0A32,0x19F5,0x06A9,0x239E, ++ 0x10D9,0x2019,0x21A2,0x08A7,0x17DF,0x1A82,0x138F,0x08AA,0x12E6,0x074D, ++ 0x1CDD,0x1FE1,0x0691,0x1F89,0x0810,0x05A9,0x00AB,0x0AD4,0x0623,0x02D4, ++ 0x09D3,0x1232,0x2002,0x1FC3,0x1B73,0x0704,0x0150,0x197D,0x1646,0x0595, ++ 0x1BAD,0x2146,0x0AD5,0x074C,0x03FD,0x1018,0x1F08,0x0989,0x1204,0x0499, ++ 0x17E4,0x001E,0x0A23,0x13BC,0x1150,0x119C,0x056B,0x0BD7,0x0B8A,0x0AD7, ++ 0x05A1,0x0AA6,0x1B27,0x18D1,0x0D42,0x14E9,0x0779,0x027A,0x1C76,0x01A7, ++ 0x1FB0,0x1270,0x16C6,0x0142,0x1FF6,0x1172,0x11EB,0x212C,0x071D,0x1543, ++ 0x170C,0x0F2F,0x1F9D,0x0F95,0x1CC7,0x043B,0x12EA,0x0F10,0x1D6E,0x0722, ++ 0x00D6,0x1829,0x1244,0x1E0B,0x18CF,0x1C16,0x22DE,0x093B,0x01FD,0x15EF, ++ 0x2087,0x1E24,0x02FB,0x1F1A,0x009D,0x0C20,0x0A35,0x18F9,0x0363,0x16ED, ++ 0x0F4C,0x22B3,0x20A6,0x23C9,0x0C9D,0x10CF,0x0FC2,0x0AB1,0x1514,0x1D88, ++ 0x1637,0x0844,0x06AF,0x06A7,0x0400,0x1F96,0x15D3,0x1566,0x0A06,0x1A38, ++ 0x006A,0x03EA,0x1E4B,0x119F,0x1B8B,0x1049,0x1080,0x1B21,0x13BE,0x0F57, ++ 0x18F6,0x22E4,0x1E9F,0x1BE1,0x1353,0x1644,0x0A45,0x1AA3,0x01C9,0x06F7, ++ 0x10EB,0x0032,0x07F8,0x1CED,0x202C,0x0957,0x17B2,0x006B,0x1456,0x03DA, ++ 0x061B,0x1A60,0x1C9A,0x137B,0x1EA2,0x1D61,0x0000,0x17FB,0x1BE2,0x046A, ++ 0x1CBF,0x2192,0x1F0E,0x1968,0x0AE9,0x1508,0x0182,0x2324,0x2113,0x13CC, ++ 0x09F5,0x0B62,0x1283,0x0FFC,0x150B,0x0794,0x0A0D,0x236B,0x1590,0x0808, ++ 0x05D2,0x105A,0x1C80,0x207F,0x05CB,0x12FB,0x22BE,0x012A,0x0DC3,0x01CF, ++ 0x023C,0x063D,0x060F,0x0447,0x2257,0x01C2,0x050B,0x03A1,0x0780,0x1782, ++ 0x12E7,0x1E52,0x135C,0x151C,0x14EB,0x1B4E,0x2250,0x168C,0x118D,0x031D, ++ 0x0680,0x2088,0x12D7,0x2133,0x14E0,0x1BE5,0x201E,0x0C3B,0x23AC,0x1B22, ++ 0x01D0,0x0B17,0x1904,0x139F,0x1DAA,0x1418,0x0327,0x1527,0x0920,0x0715, ++ 0x03C3,0x052C,0x0E8A,0x0812,0x017D,0x0C1D,0x02AA,0x1A7F,0x1DE4,0x058F, ++ 0x194E,0x2343,0x0F11,0x1F18,0x0B05,0x2271,0x08E1,0x1CC6,0x1D38,0x20E7, ++ 0x12DE,0x00E5,0x180C,0x0AC7,0x0C27,0x1C97,0x2304,0x10E6,0x071F,0x0C03, ++ 0x0249,0x1FAA,0x0374,0x1E99,0x1FD5,0x2254,0x1B4C,0x0A92,0x2172,0x0B36, ++ 0x011B,0x1CB2,0x0560,0x18F4,0x0460,0x0B24,0x1910,0x0596,0x1C30,0x0BE5, ++ 0x1B79,0x1E40,0x21CA,0x0997,0x0F89,0x0173,0x215C,0x0D4E,0x1E14,0x1A45, ++ 0x227E,0x18F7,0x1314,0x0C71,0x1D55,0x02B8,0x0C45,0x2232,0x10DC,0x155A, ++ 0x1581,0x14A6,0x1683,0x108B,0x0247,0x2247,0x1F69,0x1EC7,0x0F1D,0x0A2A, ++ 0x10FA,0x1660,0x16CE,0x0D18,0x0DDD,0x0BC6,0x0269,0x1911,0x187B,0x16F7, ++ 0x188A,0x1FA0,0x1EA6,0x11B5,0x04C9,0x214E,0x065F,0x017A,0x05CE,0x1C32, ++ 0x194D,0x1C44,0x02C1,0x1BCF,0x235B,0x228D,0x1A2C,0x03A3,0x017B,0x12D0, ++ 0x19E8,0x08EF,0x1F25,0x1E65,0x0BA9,0x0DD9,0x1CF8,0x103A,0x1E22,0x15DD, ++ 0x03D3,0x1EDE,0x1CF7,0x03C1,0x04F3,0x2240,0x1FFE,0x03BB,0x0D7D,0x1EBF, ++ 0x1BA5,0x18E6,0x1CCF,0x1D8C,0x202E,0x0BA2,0x1A75,0x0065,0x104E,0x0661, ++ 0x1B85,0x1A7A,0x0DD5,0x0450,0x1CEE,0x026E,0x1C0C,0x10B2,0x20F2,0x0AA7, ++ 0x12F4,0x08EB,0x23AB,0x07B3,0x130B,0x094D,0x1EA3,0x18F2,0x0C9C,0x1363, ++ 0x2036,0x13A8,0x16B1,0x1428,0x1F02,0x01E8,0x039E,0x1BED,0x1D98,0x08E2, ++ 0x14D6,0x1E56,0x2388,0x0C1E,0x19EE,0x04AA,0x0EB8,0x09E5,0x233E,0x1D66, ++ 0x07C5,0x211A,0x1088,0x0954,0x0E2A,0x1BC8,0x07A3,0x1E1E,0x1D36,0x1B87, ++ 0x1544,0x0137,0x11DB,0x01C0,0x0845,0x216B,0x1BFC,0x08F6,0x0A5D,0x1EDF, ++ 0x0FDE,0x0731,0x110A,0x0FB9,0x0E86,0x1415,0x14E7,0x17A3,0x02BC,0x0C60, ++ 0x2111,0x0B41,0x234B,0x1C60,0x118A,0x0FDF,0x17CD,0x1323,0x087F,0x0025, ++ 0x165D,0x1606,0x0823,0x1368,0x07F2,0x0743,0x02E4,0x23D0,0x0803,0x14AE, ++ 0x1465,0x0FE3,0x02BB,0x0ACF,0x137F,0x2212,0x1272,0x01B6,0x0C07,0x08AB, ++ 0x11E1,0x0274,0x171F,0x1126,0x09D2,0x1C01,0x23C5,0x1AB0,0x0F3E,0x0DAC, ++ 0x00D5,0x14C2,0x17C1,0x028F,0x0DE9,0x06C3,0x0DE2,0x1A70,0x1AEC,0x1638, ++ 0x1727,0x15ED,0x1532,0x13FD,0x123F,0x207E,0x0825,0x0066,0x14EC,0x1EE4, ++ 0x1FE9,0x14B3,0x1692,0x0557,0x07A0,0x11D6,0x21DD,0x05FA,0x2014,0x0A0C, ++ 0x152B,0x0425,0x00D7,0x00F2,0x0316,0x0ECA,0x1B14,0x0896,0x15B3,0x0B80, ++ 0x1D20,0x0AF5,0x09C8,0x0BF6,0x134F,0x0E00,0x1B99,0x0953,0x2341,0x21C7, ++ 0x1811,0x1032,0x1898,0x1286,0x1998,0x06B0,0x19FB,0x0790,0x15A6,0x16FB, ++ 0x16C4,0x0B28,0x0C7B,0x0FED,0x19AC,0x113F,0x1EC3,0x0A52,0x132A,0x048D, ++ 0x1B07,0x11D1,0x1F75,0x0838,0x04A5,0x04CB,0x046E,0x0A58,0x076E,0x12DB, ++ 0x0AE8,0x185F,0x15E3,0x18A5,0x18CE,0x0236,0x0A46,0x1886,0x0B69,0x03CD, ++ 0x17E6,0x0A21,0x06D1,0x0964,0x0630,0x231B,0x1642,0x19FF,0x1880,0x1B6B, ++ 0x105C,0x0FCC,0x0043,0x1A4E,0x1554,0x0781,0x0034,0x1D16,0x1522,0x1ABF, ++ 0x0F03,0x1B47,0x1A21,0x1E8E,0x007A,0x1E3E,0x0EB0,0x0DD7,0x0534,0x0241, ++ 0x051D,0x0C8F,0x0B55,0x1589,0x0256,0x194B,0x1D31,0x0828,0x09AD,0x075F, ++ 0x02AF,0x0BAF,0x1C49,0x20ED,0x1D21,0x0E6A,0x1723,0x19F6,0x114E,0x1419, ++ 0x1952,0x0F40,0x0B0D,0x2201,0x1D29,0x19C9,0x0A2F,0x1515,0x1F27,0x1CDE, ++ 0x0DD3,0x1768,0x0E56,0x1A9C,0x12A4,0x11BE,0x0B46,0x0DAE,0x0AFC,0x164B, ++ 0x08D7,0x003A,0x0BDD,0x1E4E,0x0BCF,0x105E,0x2000,0x1BA1,0x19F4,0x2100, ++ 0x20D7,0x2398,0x1C2E,0x04BE,0x0199,0x221E,0x0532,0x07B7,0x155B,0x006D, ++ 0x16C1,0x1C74,0x0D61,0x17E2,0x0AFF,0x1AC4,0x00E9,0x09E4,0x11BB,0x0674, ++ 0x22BD,0x1186,0x0578,0x202A,0x123B,0x15E8,0x0E8B,0x0403,0x097A,0x0105, ++ 0x14ED,0x14CB,0x0FDD,0x03FF,0x17AF,0x1E39,0x02F3,0x13D3,0x0C89,0x20BC, ++ 0x20B2,0x15BC,0x1CAC,0x2372,0x1B48,0x08D2,0x0446,0x1177,0x0D1F,0x17C6, ++ 0x1989,0x0516,0x0DDC,0x024D,0x16AA,0x09EE,0x1062,0x0B50,0x1F77,0x037F, ++ 0x07D2,0x093C,0x238A,0x0583,0x2375,0x0CA3,0x18EA,0x182A,0x0621,0x1036, ++ 0x02B5,0x01E2,0x22DB,0x0963,0x2399,0x060C,0x1152,0x0F91,0x048A,0x1A7E, ++ 0x1E87,0x1BB0,0x15C4,0x1112,0x1021,0x11E2,0x0C56,0x07DD,0x1D46,0x0210, ++ 0x04F5,0x1C0E,0x0B8E,0x1040,0x1A6C,0x1AF8,0x08D8,0x1313,0x1C8A,0x20B8, ++ 0x0B54,0x08A4,0x0094,0x131E,0x0A86,0x0A28,0x0D10,0x0A74,0x1AD2,0x0653, ++ 0x172C,0x21C1,0x1490,0x04FC,0x0BFA,0x1347,0x0B2F,0x1DC4,0x23DB,0x0FB8, ++ 0x23BB,0x0C72,0x03E5,0x186A,0x0F9D,0x1295,0x1808,0x04C6,0x1960,0x1FA7, ++ 0x0DE0,0x239F,0x1D5F,0x0EED,0x1F79,0x2068,0x06B8,0x0D99,0x15F5,0x1028, ++ 0x0202,0x0BAD,0x0098,0x060D,0x0E84,0x18FB,0x1549,0x1E63,0x0ED6,0x009A, ++ 0x0B72,0x0B7B,0x06B1,0x0341,0x08F4,0x112A,0x18D5,0x0919,0x1731,0x19A5, ++ 0x16FA,0x0195,0x0F9C,0x123D,0x0968,0x0E17,0x0EBF,0x0D27,0x1A33,0x17FD, ++ 0x221B,0x208C,0x0694,0x1713,0x1696,0x0692,0x0006,0x1C3E,0x1617,0x0267, ++ 0x111D,0x2122,0x025E,0x200E,0x0D22,0x1627,0x1329,0x0048,0x1265,0x0D7A, ++ 0x1402,0x149C,0x02A1,0x022C,0x0F75,0x0783,0x124A,0x1134,0x0E1E,0x1C4C, ++ 0x1CB0,0x17F1,0x046F,0x0280,0x068B,0x1C46,0x1FDA,0x0D82,0x1CD1,0x0590, ++ 0x056E,0x015A,0x121F,0x0B1D,0x019D,0x1EB5,0x0A82,0x16E8,0x117D,0x098F, ++ 0x1513,0x122A,0x0C18,0x0FA0,0x1EB1,0x0DD0,0x0E4A,0x23F8,0x190B,0x2053, ++ 0x16C0,0x18A3,0x0127,0x0AE1,0x0F52,0x12AF,0x0E24,0x0C32,0x08A6,0x1D3F, ++ 0x00CA,0x229B,0x11F6,0x1A46,0x1BF3,0x1EC6,0x0275,0x13B4,0x1210,0x0A49, ++ 0x057C,0x0E3F,0x206B,0x05DC,0x21D5,0x18A7,0x14D3,0x1F57,0x1FF8,0x2220, ++ 0x0962,0x1BFF,0x2301,0x08AF,0x1EEC,0x20CF,0x17E9,0x2302,0x0FBD,0x1BC9, ++ 0x0585,0x0784,0x17BE,0x1B2B,0x111A,0x0AB3,0x1F1F,0x0505,0x0019,0x235F, ++ 0x0B59,0x039A,0x03F7,0x193C,0x1994,0x1C1E,0x0CBB,0x0D72,0x1706,0x1C37, ++ 0x0002,0x098B,0x2046,0x056A,0x0A1E,0x0A04,0x11C2,0x0883,0x06B3,0x0B48, ++ 0x07DF,0x1122,0x04EE,0x215D,0x11D7,0x12A9,0x0F9A,0x0104,0x1618,0x175E, ++ 0x1A28,0x1D13,0x1DC9,0x0111,0x110C,0x1779,0x146E,0x1928,0x15B0,0x072C, ++ 0x0773,0x1CA2,0x0C3C,0x0BF2,0x1587,0x2269,0x10B0,0x0A6F,0x214D,0x0EEC, ++ 0x1EF6,0x14EE,0x20C4,0x1A65,0x1A0B,0x23FA,0x0336,0x1603,0x0946,0x0D6B, ++ 0x0545,0x1B9A,0x0605,0x0C95,0x2185,0x0EE3,0x1F98,0x1EB3,0x0A39,0x05EC, ++ 0x1A5C,0x123A,0x0848,0x234E,0x023A,0x183E,0x16BD,0x014D,0x106A,0x0EF5, ++ 0x213C,0x0046,0x0395,0x2321,0x238D,0x1AEE,0x1170,0x03DD,0x1C70,0x1D65, ++ 0x0CF0,0x224D,0x1F87,0x1D0A,0x09A4,0x14CF,0x0A02,0x0093,0x121A,0x02EF, ++ 0x22CC,0x0B8D,0x1E00,0x0B58,0x0FF9,0x1D62,0x1E6B,0x2387,0x138B,0x052D, ++ 0x081C,0x10A0,0x0194,0x22F9,0x1E5F,0x1E3D,0x06C9,0x167C,0x0096,0x1570, ++ 0x19A7,0x0B98,0x18BA,0x12AA,0x11CC,0x22C7,0x0064,0x0440,0x0B7E,0x23BF, ++ 0x01A6,0x09ED,0x000B,0x0834,0x008E,0x0A7E,0x0D32,0x0744,0x207A,0x03AF, ++ 0x062B,0x21DB,0x1B37,0x1FB1,0x1653,0x1807,0x141F,0x18AF,0x1343,0x0D28, ++ 0x221A,0x1064,0x1BAB,0x199D,0x19E9,0x23FF,0x22EF,0x0CB1,0x0EC2,0x0958, ++ 0x09D7,0x20EE,0x1AAF,0x1267,0x020B,0x1E58,0x0F2A,0x1B2F,0x0A7B,0x0EF2, ++ 0x2334,0x0131,0x164D,0x238E,0x0352,0x1C71,0x1B9B,0x1F54,0x08DD,0x069C, ++ 0x0C65,0x1FEB,0x21C2,0x0C38,0x1743,0x23E1,0x10C1,0x110E,0x13EE,0x239A, ++ 0x125D,0x21DC,0x057B,0x1B1F,0x0D26,0x0121,0x02C5,0x0189,0x0867,0x190F, ++ 0x0A8E,0x064E,0x0C31,0x2149,0x0A5C,0x1B06,0x0A6D,0x2277,0x0DFC,0x1B2A, ++ 0x0FBC,0x051A,0x0767,0x00BF,0x1862,0x1414,0x1CDA,0x1484,0x1098,0x0657, ++ 0x1C29,0x1C9F,0x0DBF,0x1B28,0x1AAD,0x204C,0x077B,0x0888,0x0ACA,0x1575, ++ 0x1780,0x1AC5,0x085E,0x14CD,0x1CB3,0x033C,0x1E62,0x1650,0x0F7E,0x1CE4, ++ 0x059E,0x20D6,0x072D,0x1371,0x2332,0x115F,0x204E,0x0282,0x11BF,0x08CE, ++ 0x1C10,0x11AD,0x10FF,0x15BD,0x04E1,0x22D9,0x1634,0x048B,0x0346,0x185A, ++ 0x083B,0x06F9,0x2124,0x072E,0x1ABA,0x050D,0x18BC,0x003E,0x090A,0x1F2C, ++ 0x1734,0x0EE7,0x131A,0x0BB5,0x042E,0x12AD,0x1D5E,0x20EF,0x0C7F,0x1245, ++ 0x1AD5,0x0895,0x00ED,0x2314,0x19B9,0x055D,0x20A5,0x112C,0x0436,0x16DA, ++ 0x0E12,0x0276,0x178B,0x0EBD,0x0B2E,0x23D5,0x0941,0x1C14,0x1FA2,0x0A90, ++ 0x1A99,0x1891,0x02BF,0x1305,0x1B18,0x0E0F,0x0BC1,0x0CD7,0x05AB,0x1ED5, ++ 0x1D53,0x04D0,0x0D98,0x062F,0x0BCC,0x0B88,0x2031,0x0295,0x1F29,0x1ECB, ++ 0x0DB9,0x00C8,0x2396,0x0A17,0x1773,0x1AC9,0x0459,0x1AD6,0x22CF,0x1DC2, ++ 0x1BB8,0x1A23,0x1DFE,0x0604,0x213A,0x1357,0x1EA1,0x20D3,0x1137,0x1233, ++ 0x198D,0x1B04,0x041E,0x200D,0x233A,0x02A5,0x0CA7,0x0E15,0x17FE,0x216E, ++ 0x07C0,0x0BB0,0x0B9C,0x0A8F,0x0B15,0x0BDA,0x14B0,0x15CA,0x189E,0x19DC, ++ 0x1ED9,0x0076,0x0A97,0x0918,0x0BED,0x0B81,0x0E0A,0x11DC,0x165A,0x037D, ++ 0x1B74,0x1438,0x1129,0x22A2,0x0373,0x0D43,0x20F0,0x0DDE,0x0AB2,0x0771, ++ 0x22F5,0x05F5,0x0662,0x1B39,0x16B0,0x1EF3,0x0AF2,0x0E44,0x0221,0x0A6E, ++ 0x0D47,0x1DAC,0x18F1,0x10F6,0x2094,0x2294,0x0B21,0x0192,0x1A1E,0x03C9, ++ 0x1777,0x1462,0x2089,0x0A4F,0x1A12,0x1A6B,0x1737,0x1D18,0x0C98,0x2207, ++ 0x1FDD,0x2176,0x0109,0x0537,0x00BD,0x1916,0x1C2A,0x1377,0x1094,0x1D72, ++ 0x00EE,0x0057,0x1463,0x171B,0x00EB,0x1AF0,0x15B9,0x0368,0x04CC,0x05AC, ++ 0x07CA,0x1A62,0x0AFD,0x0C00,0x0548,0x153B,0x00AE,0x08F1,0x17C9,0x0428, ++ 0x07F0,0x23D8,0x0DD4,0x201D,0x0C4D,0x04EA,0x0161,0x0C02,0x016D,0x145D, ++ 0x1CA8,0x02F7,0x17F3,0x1FEC,0x1933,0x0E23,0x0639,0x1CD8,0x20B7,0x0284, ++ 0x1016,0x0DC7,0x05A5,0x0E70,0x1A43,0x1DCB,0x09E8,0x13A9,0x06F5,0x1454, ++ 0x033A,0x1E82,0x088D,0x0736,0x14C5,0x14FB,0x190E,0x0B60,0x13EA,0x1260, ++ 0x0F8D,0x140B,0x1EDC,0x1E93,0x1095,0x2258,0x088E,0x22F0,0x08F2,0x2364, ++ 0x1F97,0x1024,0x064F,0x0C5F,0x2052,0x1BE4,0x1EE9,0x1FE3,0x15A8,0x0DB1, ++ 0x0D1D,0x17F7,0x20D8,0x07F6,0x2077,0x15E0,0x1C2F,0x1709,0x05BE,0x1B1B, ++ 0x2162,0x1A39,0x1C2C,0x13F7,0x19EC,0x20D4,0x0655,0x049C,0x17AA,0x20E6, ++ 0x04F4,0x01DE,0x038F,0x21FF,0x12BB,0x14C3,0x1D23,0x0730,0x0E5A,0x1ADD, ++ 0x2300,0x1118,0x21D7,0x0FC5,0x0497,0x0390,0x11EA,0x18E5,0x1EF4,0x1EAE, ++ 0x028A,0x102B,0x1365,0x05B1,0x18ED,0x0016,0x0012,0x0887,0x1E68,0x0933, ++ 0x1166,0x0F5D,0x1297,0x06B9,0x18C5,0x0F80,0x2305,0x12A0,0x0AA8,0x1766, ++ 0x1E2C,0x021D,0x1B30,0x0D3C,0x1585,0x1815,0x1B8D,0x00C1,0x02DD,0x0BD6, ++ 0x06DC,0x06AD,0x025B,0x0A59,0x1D6B,0x15E2,0x1388,0x1AE3,0x1E26,0x21AF, ++ 0x1CAD,0x02B0,0x09B8,0x0CFA,0x1DED,0x2267,0x0ABA,0x21F9,0x0AB8,0x1278, ++ 0x1C58,0x1BCA,0x1042,0x1F4D,0x1F5B,0x1B09,0x0B08,0x0217,0x2097,0x05BC, ++ 0x1219,0x1C6B,0x1885,0x1A69,0x01D1,0x0246,0x077C,0x13C4,0x11E9,0x01DD, ++ 0x206F,0x0A41,0x16DD,0x08E9,0x1578,0x0846,0x0B99,0x0C4E,0x03A6,0x17F5, ++ 0x13AB,0x1D2D,0x1B03,0x1F7F,0x0A96,0x1726,0x1AD9,0x1180,0x0B0C,0x0796, ++ 0x1718,0x0CEA,0x0D8B,0x1B78,0x1C66,0x1BFA,0x07C3,0x1195,0x06C2,0x041C, ++ 0x11EC,0x148E,0x0E52,0x1987,0x08BC,0x0B7C,0x02C8,0x073D,0x23DE,0x1A8E, ++ 0x1D7C,0x220E,0x01E0,0x14C7,0x18B7,0x20E0,0x0739,0x088B,0x0CF5,0x1498, ++ 0x0487,0x1699,0x035D,0x0416,0x0406,0x0C67,0x1188,0x1A30,0x00F7,0x063C, ++ 0x09B7,0x030F,0x09BD,0x0D5F,0x022D,0x1D00,0x1C45,0x1AFA,0x0D16,0x0325, ++ 0x1794,0x21E0,0x18AD,0x09FC,0x0F48,0x1F49,0x0463,0x11E0,0x1BF4,0x2169, ++ 0x077D,0x0644,0x1497,0x1A51,0x0FC0,0x14DE,0x2049,0x0110,0x0A3D,0x062D, ++ 0x08BE,0x16B3,0x0021,0x20C3,0x0BA5,0x21B4,0x05AA,0x0B16,0x19C1,0x2128, ++ 0x0468,0x0E07,0x1F3A,0x052B,0x1161,0x0B9A,0x13FF,0x17D8,0x161B,0x2029, ++ 0x0FA3,0x0E29,0x0B70,0x1605,0x1A3F,0x1E78,0x1EC4,0x1429,0x1906,0x19BF, ++ 0x07EC,0x1DFA,0x2035,0x0A67,0x22A8,0x1863,0x21E4,0x04E2,0x1175,0x0411, ++ 0x1B56,0x037C,0x0262,0x0865,0x000A,0x2287,0x1279,0x1FD9,0x1667,0x1DC1, ++ 0x1AF3,0x0148,0x0C59,0x199A,0x0943,0x0D07,0x233C,0x073A,0x14AD,0x12CF, ++ 0x0971,0x19EB,0x1EF9,0x15F9,0x0ADC,0x1101,0x1AD4,0x0540,0x0727,0x0986, ++ 0x0D69,0x0A20,0x21A5,0x10CA,0x21C6,0x0EAA,0x06FC,0x0E47,0x15F4,0x222C, ++ 0x02C2,0x0580,0x05C0,0x11DA,0x10D4,0x0DCF,0x0451,0x021A,0x228C,0x2104, ++ 0x1E7A,0x150F,0x043F,0x1B4B,0x0B76,0x1384,0x0208,0x0F33,0x001B,0x1A04, ++ 0x21BD,0x006E,0x1889,0x00AA,0x12C5,0x03FC,0x11F8,0x0D2F,0x0CDF,0x1F8C, ++ 0x0526,0x1659,0x17EA,0x0BCA,0x119D,0x12B7,0x1392,0x0AB6,0x1331,0x1198, ++ 0x15EC,0x01C1,0x22AB,0x130C,0x14F0,0x227B,0x07E9,0x1E4C,0x016B,0x0A13, ++ 0x0E37,0x1136,0x1C8E,0x112F,0x1CE8,0x18D8,0x0372,0x011A,0x1411,0x07D1, ++ 0x076B,0x085C,0x0084,0x0714,0x0E3C,0x21F7,0x0F6C,0x23E9,0x0385,0x1B17, ++ 0x179C,0x159A,0x0506,0x135A,0x0882,0x1C36,0x1AA6,0x1E11,0x1A1F,0x1EF5, ++ 0x0E9D,0x0335,0x1658,0x04B8,0x06A2,0x061E,0x17B6,0x1DB6,0x12BF,0x0443, ++ 0x220A,0x1983,0x07B0,0x1890,0x177A,0x038A,0x1496,0x1220,0x18B3,0x1149, ++ 0x0FA4,0x10EA,0x0620,0x11B1,0x01B1,0x08BA,0x0081,0x0FEC,0x111C,0x0C1B, ++ 0x1382,0x0427,0x1582,0x1D54,0x0EE2,0x022A,0x0AAB,0x23EA,0x1922,0x0399, ++ 0x2127,0x06CA,0x12D5,0x0A0A,0x1745,0x1F8F,0x009B,0x21B6,0x1BC2,0x0EEE, ++ 0x00B6,0x0672,0x16D7,0x13E4,0x0ABF,0x0F29,0x03D2,0x20E3,0x185B,0x08FE, ++ 0x0FB0,0x1CBC,0x2024,0x0A16,0x0C2C,0x0B23,0x134A,0x0ADE,0x03E2,0x0A0F, ++ 0x2102,0x0CAA,0x19D0,0x220F,0x06E2,0x2391,0x13CF,0x1EDD,0x15B4,0x1012, ++ 0x1F15,0x23DF,0x0735,0x223F,0x144B,0x12FC,0x1C86,0x1CE7,0x0DA7,0x082F, ++ 0x1720,0x15C7,0x0212,0x22FD,0x133F,0x068C,0x169E,0x0C4F,0x1C31,0x139B, ++ 0x0DA6,0x1A91,0x1D99,0x1493,0x160A,0x0077,0x1F45,0x1473,0x1B1E,0x028E, ++ 0x0FAC,0x137C,0x2390,0x10A6,0x0129,0x0B67,0x1F53,0x0B97,0x21AC,0x0792, ++ 0x0758,0x1AB2,0x0C44,0x1482,0x1436,0x0036,0x1B3A,0x1CC9,0x1AF4,0x152A, ++ 0x2355,0x0519,0x1747,0x1275,0x10B3,0x2086,0x14D1,0x20E9,0x12CD,0x0EA4, ++ 0x1F48,0x0DBD,0x0265,0x0A55,0x145F,0x2216,0x0D0F,0x103B,0x2381,0x0994, ++ 0x1337,0x0CF7,0x06E8,0x2253,0x0936,0x1ECC,0x2208,0x10C3,0x0DE4,0x0A2D, ++ 0x09DD,0x1690,0x234D,0x031E,0x0824,0x04A2,0x0F46,0x17B9,0x1F81,0x02E2, ++ 0x04D5,0x13A2,0x0A10,0x01B3,0x1523,0x2013,0x0B06,0x1108,0x0244,0x06F6, ++ 0x041B,0x03A5,0x21EF,0x052F,0x08FF,0x0855,0x1FC4,0x1E1D,0x2385,0x0B77, ++ 0x1B86,0x2123,0x018C,0x2203,0x181A,0x01EB,0x07E1,0x1334,0x1D12,0x0A9D, ++ 0x01ED,0x1EDA,0x1A2E,0x18AA,0x0598,0x1A83,0x162A,0x1A84,0x072B,0x2397, ++ 0x0166,0x00C0,0x091C,0x2350,0x010A,0x157E,0x142C,0x1F4F,0x1B93,0x1355, ++ 0x08F9,0x218E,0x1C57,0x0627,0x06AE,0x2186,0x230D,0x0C6F,0x1229,0x02C9, ++ 0x0972,0x0F68,0x217B,0x1130,0x0CDB,0x06B5,0x1045,0x1321,0x0AA0,0x0CCE, ++ 0x121E,0x0C0A,0x07EF,0x02D8,0x061D,0x1003,0x0761,0x20FE,0x1519,0x027B, ++ 0x1105,0x174A,0x028B,0x0300,0x1EFD,0x1711,0x03BC,0x1FCC,0x1DFF,0x21FE, ++ 0x1AE0,0x12C0,0x2266,0x1DEC,0x15E4,0x036B,0x0382,0x01B5,0x2067,0x20C6, ++ 0x0B2C,0x0F7F,0x1BEB,0x0988,0x1491,0x0697,0x0F12,0x1096,0x0E78,0x103D, ++ 0x02A3,0x21BB,0x1563,0x11D2,0x150D,0x2308,0x21B3,0x0333,0x1213,0x009F, ++ 0x08A5,0x10EC,0x0E60,0x009E,0x1530,0x0FC6,0x110F,0x1BA3,0x027E,0x2223, ++ 0x009C,0x1B4D,0x1F62,0x1CF6,0x1E86,0x0FB1,0x0332,0x1BAF,0x0C1A,0x0E2C, ++ 0x0360,0x197A,0x01D3,0x10F3,0x1B76,0x02EB,0x18CA,0x065B,0x1164,0x103E, ++ 0x0C39,0x0F8C,0x073E,0x07CE,0x183C,0x04EC,0x0E9A,0x0BDE,0x0738,0x1093, ++ 0x0F0D,0x076A,0x0349,0x0DA9,0x19F9,0x1154,0x1DD0,0x0ED0,0x1D22,0x22D3, ++ 0x015B,0x0052,0x0A5B,0x0CE2,0x1D89,0x1565,0x1752,0x0254,0x028C,0x18FD, ++ 0x12B9,0x1CA4,0x1F73,0x0567,0x1B01,0x0414,0x1510,0x1ED8,0x05FD,0x1ACF, ++ 0x19EA,0x0163,0x0B73,0x1CBE,0x07B6,0x10D1,0x050F,0x1635,0x0413,0x17ED, ++ 0x1C40,0x1336,0x0EFF,0x1199,0x1236,0x07BD,0x2312,0x04B1,0x2163,0x1AD1, ++ 0x0764,0x21D1,0x14DD,0x0CE8,0x1728,0x0348,0x236D,0x1BA6,0x2119,0x1405, ++ 0x0625,0x034C,0x0A1F,0x09E0,0x231C,0x0D4C,0x0839,0x04AF,0x2153,0x12AB, ++ 0x0D8C,0x148F,0x03CE,0x2081,0x05A6,0x0F02,0x1D41,0x090F,0x0D8D,0x1CE5, ++ 0x0BF5,0x0358,0x0BBD,0x1981,0x1A5E,0x1312,0x103F,0x0347,0x23B0,0x0FAD, ++ 0x08D1,0x00D8,0x08E0,0x212A,0x0DC4,0x1EBE,0x169F,0x07A6,0x1BF5,0x1FA3, ++ 0x0EE8,0x17B1,0x14A8,0x0EC8,0x2057,0x0586,0x19AF,0x1C1A,0x1D10,0x15D7, ++ 0x06CD,0x0901,0x163C,0x1A20,0x1107,0x0879,0x1533,0x1EDB,0x0E94,0x1FC9, ++ 0x20F5,0x00A9,0x20BE,0x1011,0x1AFE,0x21DF,0x1D7E,0x0D25,0x13D1,0x099C, ++ 0x0A64,0x1729,0x113B,0x17C4,0x21DE,0x0D8A,0x0B4B,0x00E2,0x0C10,0x2358, ++ 0x162E,0x1470,0x1DDE,0x0050,0x1468,0x213B,0x106E,0x0490,0x09F2,0x0190, ++ 0x1F7A,0x03FB,0x215E,0x02EC,0x01CD,0x0F83,0x1503,0x00A0,0x17E8,0x0ABE, ++ 0x019F,0x053A,0x2278,0x1A66,0x12A3,0x0B04,0x23D7,0x144F,0x131B,0x2099, ++ 0x0159,0x1D3E,0x1FE4,0x14D8,0x0100,0x130F,0x23F0,0x1623,0x1F40,0x0F13, ++ 0x1082,0x221F,0x12FE,0x0B9D,0x080B,0x1EE6,0x14B9,0x2351,0x05D7,0x065E, ++ 0x09BB,0x0209,0x0FDA,0x03D5,0x1B82,0x204B,0x1073,0x131C,0x1358,0x230B, ++ 0x1BC0,0x1EB9,0x166A,0x11AA,0x1D85,0x08BB,0x1B7B,0x05F7,0x1B40,0x0E11, ++ 0x02DB,0x13A3,0x0C15,0x14EA,0x0AB9,0x22E7,0x013A,0x07F4,0x0696,0x1228, ++ 0x0FCF,0x1561,0x09E7,0x2221,0x039F,0x028D,0x1171,0x098C,0x1B5B,0x0F93, ++ 0x1789,0x1269,0x0A3C,0x14A4,0x1864,0x16A9,0x0493,0x0B5E,0x0BD1,0x0646, ++ 0x1A52,0x11FC,0x0934,0x0CA1,0x16C5,0x045B,0x0EAC,0x0EE1,0x1671,0x1918, ++ 0x0C4C,0x1D9A,0x2062,0x160D,0x1555,0x0677,0x0F58,0x1621,0x17AB,0x0DB7, ++ 0x0F63,0x094B,0x1902,0x23BE,0x0C35,0x0F51,0x149A,0x08FB,0x021F,0x1970, ++ 0x0995,0x19E2,0x1DBD,0x1E48,0x0B90,0x02CC,0x15DB,0x2022,0x0CEE,0x2161, ++ 0x0A57,0x11AE,0x0B6F,0x05CA,0x1450,0x19B8,0x0F4F,0x1F5A,0x1E2E,0x229A, ++ 0x15EB,0x074E,0x2317,0x0ECB,0x0B6C,0x0510,0x091F,0x0F85,0x101B,0x1BD3, ++ 0x0E7C,0x11FF,0x0F2C,0x1F9A,0x2382,0x232F,0x23DC,0x0DF7,0x01CB,0x0DCA, ++ 0x21D3,0x1857,0x0C6D,0x0FEE,0x0509,0x0543,0x2331,0x1424,0x08FD,0x01E9, ++ 0x1CA9,0x23EF,0x100C,0x029A,0x1065,0x1078,0x0F9B,0x14DA,0x0D09,0x0998, ++ 0x088C,0x019C,0x10C4,0x20AB,0x20E5,0x16A4,0x0682,0x0424,0x1C15,0x0C13, ++ 0x0A36,0x0856,0x07A5,0x1AD7,0x05D0,0x020C,0x16CC,0x1D8D,0x07DA,0x2204, ++ 0x1D9F,0x1797,0x1C67,0x09C0,0x0237,0x1BB6,0x10A9,0x0417,0x0949,0x1E49, ++ 0x017E,0x0979,0x1753,0x0AA2,0x0362,0x0B8B,0x0536,0x1EA7,0x0EE5,0x04CA, ++ 0x2285,0x0DEB,0x05A0,0x0853,0x12BA,0x0491,0x0423,0x11C0,0x0E36,0x1674, ++ 0x2010,0x1DC5,0x0709,0x125F,0x0C33,0x2349,0x0481,0x108A,0x0404,0x094F, ++ 0x09CB,0x0D3F,0x18C4,0x0EA3,0x060E,0x0654,0x1814,0x09CA,0x1CA3,0x0C34, ++ 0x1A17,0x1406,0x14FF,0x0F0E,0x0204,0x0C0F,0x11CB,0x1925,0x16B9,0x1488, ++ 0x1D01,0x0E96,0x0562,0x0C04,0x185E,0x0D2D,0x23D4,0x2328,0x030C,0x19A9, ++ 0x01EF,0x20FF,0x08F7,0x122E,0x1AC2,0x0C52,0x0296,0x1A59,0x0326,0x1089, ++ 0x1DD3,0x1C63,0x06BB,0x146F,0x1237,0x1950,0x203B,0x17A8,0x01A5,0x09D1, ++ 0x0591,0x1B15,0x0147,0x0F20,0x17B4,0x1A36,0x1FC5,0x1F5F,0x0C37,0x1BAE, ++ 0x06BC,0x12C1,0x10D2,0x0A14,0x0875,0x120A,0x182D,0x0D6D,0x0F1B,0x0FA2, ++ 0x1CC2,0x1A64,0x11C4,0x1CF3,0x1FBD,0x0027,0x0C49,0x21CB,0x0462,0x107C, ++ 0x0CFD,0x1398,0x0633,0x06A5,0x00B0,0x0BFD,0x1665,0x102A,0x1915,0x150E, ++ 0x23A0,0x1344,0x0F69,0x097B,0x023F,0x18BF,0x1423,0x1290,0x22DF,0x1060, ++ 0x0168,0x04FA,0x1B72,0x03C0,0x0B49,0x202D,0x227F,0x0D31,0x121C,0x0762, ++ 0x1980,0x05EE,0x20DA,0x04BB,0x06FB,0x16E5,0x117B,0x079F,0x1BF1,0x02A6, ++ 0x0A5F,0x22ED,0x1517,0x034E,0x1628,0x1A72,0x02F2,0x1761,0x1E2D,0x161C, ++ 0x05C1,0x0757,0x138C,0x0438,0x1193,0x1A68,0x0340,0x111F,0x1440,0x1CDF, ++ 0x0634,0x23F9,0x064A,0x0C8A,0x1059,0x13A5,0x1B23,0x13D4,0x2210,0x12E4, ++ 0x0E03,0x0CA0,0x0355,0x0E0D,0x1D24,0x2155,0x0B93,0x0531,0x0B1C,0x1CFE, ++ 0x22BB,0x1B64,0x1D02,0x1F83,0x0C2A,0x01D4,0x000C,0x2213,0x2151,0x1F3C, ++ 0x200F,0x0469,0x0B79,0x086F,0x139E,0x1ADA,0x00C4,0x07E0,0x1005,0x013C, ++ 0x1869,0x05B6,0x0944,0x0652,0x1EBB,0x047E,0x0D3A,0x05F0,0x2085,0x0342, ++ 0x0165,0x236A,0x03DB,0x1E69,0x120B,0x0EDB,0x156A,0x00CD,0x1F2F,0x0797, ++ 0x066C,0x0AE7,0x063A,0x1C7D,0x18A4,0x07B5,0x0E87,0x092F,0x213E,0x10D6, ++ 0x1F0A,0x1DD7,0x1B4F,0x0E68,0x1958,0x158D,0x14B6,0x0CB8,0x23E2,0x15D0, ++ 0x1249,0x1562,0x03D6,0x0513,0x1A3E,0x171E,0x1F09,0x0DF9,0x0A07,0x12AE, ++ 0x0690,0x05C6,0x120D,0x20D1,0x17A0,0x2189,0x1D34,0x1799,0x1E5E,0x20C7, ++ 0x1B45,0x1359,0x174B,0x0CCC,0x0187,0x21D9,0x15A7,0x1E1F,0x13B1,0x05FF, ++ 0x10D5,0x1905,0x01A8,0x0277,0x1FF4,0x0EB5,0x1476,0x1E1C,0x1390,0x018E, ++ 0x0484,0x0FCB,0x146B,0x151B,0x1DC6,0x1A76,0x169B,0x0B64,0x0024,0x187A, ++ 0x1230,0x2132,0x0ECE,0x149F,0x109A,0x1839,0x0568,0x1F84,0x0BF0,0x092D, ++ 0x0C77,0x13EF,0x14F9,0x138D,0x0832,0x0C68,0x0A37,0x0248,0x16EF,0x0125, ++ 0x087B,0x09A9,0x17C8,0x02DF,0x06A0,0x0FC3,0x0D75,0x1A10,0x0EAB,0x0D96, ++ 0x0CC2,0x1DA2,0x13AA,0x1760,0x0146,0x1636,0x0082,0x1255,0x1206,0x19DF, ++ 0x1D71,0x0D67,0x1DB4,0x0F15,0x065C,0x20C0,0x12F9,0x1796,0x1997,0x13B5, ++ 0x087E,0x19FC,0x173B,0x163F,0x06CC,0x05F1,0x19B1,0x1D1E,0x16E1,0x1A3B, ++ 0x0C3D,0x07C1,0x1A7C,0x00A5,0x181C,0x1593,0x0259,0x167B,0x0120,0x0889, ++ 0x0A51,0x0DA1,0x129D,0x1F76,0x045D,0x1471,0x03CC,0x07B2,0x07EE,0x16AF, ++ 0x0549,0x1046,0x2217,0x0BBF,0x12C6,0x0AA5,0x1C51,0x1C94,0x0DF4,0x22B8, ++ 0x0DBA,0x1284,0x1D15,0x1433,0x1D17,0x15AE,0x0387,0x1052,0x0880,0x107B, ++ 0x09E9,0x2012,0x1151,0x0641,0x0ECC,0x156E,0x1771,0x1972,0x09F9,0x12C3, ++ 0x0C42,0x0B9E,0x02A4,0x12EB,0x16B7,0x054D,0x1742,0x0600,0x0BF1,0x11C5, ++ 0x223E,0x0B35,0x1843,0x1A5D,0x081B,0x1DB2,0x0020,0x0BC7,0x155F,0x015E, ++ 0x1341,0x1FD0,0x136D,0x062A,0x1E6C,0x1DA3,0x00C3,0x12EC,0x03C2,0x10D7, ++ 0x15F3,0x1489,0x19FD,0x067D,0x12D6,0x1847,0x0F9F,0x0ED7,0x1D9E,0x1ADB, ++ 0x10A4,0x0710,0x1866,0x0F32,0x1EC0,0x2309,0x00E8,0x025F,0x135F,0x0C54, ++ 0x0FFF,0x0BF9,0x0959,0x14F3,0x17A1,0x0EE9,0x20F3,0x10BE,0x0DF6,0x1D49, ++ 0x1111,0x0D2B,0x0226,0x1AB4,0x2337,0x021B,0x019A,0x22C0,0x1C06,0x08E5, ++ 0x2047,0x07F9,0x1612,0x0822,0x0E31,0x00F3,0x134C,0x1919,0x189D,0x23FB, ++ 0x0EFE,0x07D8,0x10F5,0x1143,0x22D1,0x0476,0x10F9,0x16CB,0x0053,0x16D3, ++ 0x0366,0x1B6A,0x0074,0x1DF6,0x165B,0x0308,0x116E,0x0837,0x1A0D,0x15F8, ++ 0x0D57,0x1875,0x1A8C,0x0EC0,0x239C,0x0BBE,0x0FB4,0x0009,0x1698,0x0AFE, ++ 0x1992,0x23BA,0x0EE0,0x2096,0x00FE,0x1BF7,0x1239,0x23FD,0x1F8E,0x113C, ++ 0x084F,0x09B1,0x0931,0x1E2F,0x0976,0x07AF,0x0B45,0x0ABD,0x0F37,0x0C7E, ++ 0x06D3,0x238B,0x0759,0x17AC,0x0923,0x1D05,0x14FA,0x1755,0x187C,0x0E02, ++ 0x0B03,0x02AE,0x1735,0x0283,0x033B,0x1C77,0x23C1,0x185C,0x0010,0x1595, ++ 0x1C96,0x09E1,0x1055,0x19F7,0x1226,0x1790,0x01A9,0x1A8A,0x06B7,0x1A48, ++ 0x1A96,0x121D,0x14BE,0x1681,0x131D,0x00BC,0x0D52,0x1401,0x0610,0x1A6F, ++ 0x1354,0x0DD6,0x0155,0x07D4,0x017F,0x2154,0x1C9D,0x176B,0x1C4B,0x1C68, ++ 0x1F33,0x082D,0x0616,0x23A4,0x0C86,0x1B00,0x0097,0x2357,0x10E4,0x149B, ++ 0x0B8F,0x0E71,0x0636,0x062E,0x14AC,0x07C7,0x20FD,0x12BC,0x0228,0x106D, ++ 0x0AB0,0x140F,0x2214,0x0C30,0x143B,0x1D77,0x1241,0x1FDB,0x1757,0x17E3, ++ 0x0CB4,0x1F93,0x1C75,0x02B3,0x237A,0x0928,0x0CDE,0x12B4,0x11D4,0x1ADC, ++ 0x2105,0x1B5C,0x1DF5,0x22FC,0x085F,0x08BF,0x0E1A,0x1564,0x06BF,0x1D59, ++ 0x0B7A,0x22D7,0x0AED,0x10F8,0x0D48,0x1B33,0x20C2,0x205D,0x1801,0x228F, ++ 0x13BD,0x0F5C,0x062C,0x1F2B,0x1AB7,0x09BE,0x0914,0x0C97,0x1941,0x151E, ++ 0x0676,0x01BA,0x0207,0x09F3,0x1F4E,0x1B7A,0x07C2,0x0059,0x1BB4,0x1BA4, ++ 0x1025,0x1102,0x0617,0x074A,0x0AF9,0x0915,0x1D3C,0x0B1B,0x0E05,0x0D66, ++ 0x06C6,0x1C4D,0x0708,0x21C9,0x08E6,0x1DD9,0x235D,0x1D90,0x0095,0x0814, ++ 0x0E4D,0x21C5,0x1DC3,0x0430,0x1E0D,0x235A,0x15DE,0x1B89,0x0729,0x066B, ++ 0x23A3,0x2028,0x0398,0x229E,0x1845,0x212F,0x0740,0x029E,0x1D0F,0x1D11, ++ 0x151D,0x023E,0x1B05,0x188F,0x0185,0x1584,0x044F,0x0033,0x0133,0x178D, ++ 0x0C9A,0x10BC,0x0815,0x2206,0x1AC3,0x0CBA,0x115E,0x1772,0x0909,0x161A, ++ 0x015C,0x1E83,0x1E96,0x0A1A,0x1D75,0x179E,0x2175,0x143E,0x17C5,0x12E9, ++ 0x0F09,0x0885,0x0D71,0x18F8,0x0359,0x1615,0x0C6C,0x0809,0x1F10,0x1C18, ++ 0x199C,0x1553,0x0D1B,0x0C0B,0x1ADF,0x0E4B,0x1B35,0x0B66,0x1264,0x22CB, ++ 0x0181,0x154F,0x0D74,0x134D,0x18C1,0x0E43,0x13EC,0x1E37,0x01BE,0x0755, ++ 0x0579,0x154B,0x0893,0x19D6,0x2072,0x208E,0x22C2,0x0719,0x04E6,0x00D3, ++ 0x02C0,0x194A,0x0486,0x0DC1,0x06FD,0x1A86,0x0BEC,0x1191,0x0840,0x196C, ++ 0x1959,0x12A5,0x08F8,0x17B0,0x16CF,0x0602,0x0D85,0x1F21,0x13A4,0x1946, ++ 0x06E1,0x14BA,0x20F9,0x182C,0x0E09,0x13D8,0x159C,0x0881,0x0542,0x1948, ++ 0x0829,0x1668,0x2060,0x1138,0x172D,0x17C3,0x0013,0x08E8,0x034F,0x1D80, ++ 0x018D,0x0E90,0x0551,0x1CAE,0x0643,0x0ECD,0x005C,0x0223,0x0B29,0x10F1, ++ 0x0B5D,0x0C5B,0x132B,0x02D1,0x2316,0x147F,0x1335,0x0679,0x06C4,0x04A3, ++ 0x108D,0x02C3,0x075A,0x01EA,0x23AE,0x22B6,0x2138,0x232A,0x23EC,0x02AC, ++ 0x227C,0x0E39,0x168F,0x0F35,0x06DA,0x0782,0x0556,0x042D,0x11AB,0x224C, ++ 0x0F1E,0x0561,0x17A4,0x1B42,0x0AC6,0x1B91,0x0483,0x118B,0x1EED,0x0741, ++ 0x177C,0x21E8,0x1AFC,0x209D,0x0FE0,0x1AD0,0x13B2,0x0637,0x20A4,0x1C1D, ++ 0x0EAF,0x03E8,0x15F7,0x1686,0x21B2,0x2215,0x1091,0x01CE,0x135E,0x18C8, ++ 0x1E46,0x2322,0x0618,0x23CA,0x1795,0x1F03,0x1A3D,0x0C5D,0x2298,0x01AE, ++ 0x02E1,0x0D41,0x09D4,0x219D,0x2084,0x0F98,0x0375,0x13C9,0x0AC4,0x09FE, ++ 0x1D81,0x0FF0,0x11C7,0x1FA9,0x1301,0x0BEF,0x1031,0x0B07,0x1FBF,0x1370, ++ 0x1AA1,0x1956,0x15C0,0x1858,0x13BB,0x0937,0x1804,0x109D,0x03D8,0x0635, ++ 0x1E41,0x0999,0x1079,0x15CC,0x15FC,0x09A2,0x1DA7,0x142E,0x03EC,0x1954, ++ 0x1215,0x15E9,0x05C5,0x0831,0x13DA,0x14EF,0x22FE,0x1A54,0x06FE,0x23F1, ++ 0x17A6,0x1CD2,0x068A,0x0E4C,0x03C8,0x007C,0x02E5,0x0C25,0x0C48,0x0A26, ++ 0x1A9F,0x09B2,0x20F6,0x14AF,0x1B6F,0x233F,0x11F7,0x00B2,0x1076,0x1E70, ++ 0x0726,0x1F59,0x222D,0x175D,0x1986,0x0AD8,0x2095,0x0214,0x231F,0x10C6, ++ 0x1944,0x1816,0x093A,0x1EA5,0x0B4F,0x174E,0x1087,0x0C0E,0x1DDD,0x1CF2, ++ 0x15AA,0x2231,0x22E8,0x0B52,0x040C,0x1CE3,0x0B7D,0x197C,0x0234,0x05EF, ++ 0x1BDB,0x124E,0x1E95,0x03B4,0x226A,0x0149,0x137A,0x1AF5,0x20D5,0x1D4F, ++ 0x0CDA,0x145B,0x026A,0x0473,0x0FF1,0x168A,0x16A5,0x23E4,0x13C6,0x0EB7, ++ 0x0D7B,0x0D76,0x178E,0x23B7,0x05E2,0x16EB,0x0535,0x071B,0x2293,0x06E6, ++ 0x1903,0x1526,0x1C23,0x0EC7,0x0CCB,0x1F65,0x0D89,0x147C,0x23F5,0x1446, ++ 0x228B,0x0063,0x19DD,0x10FE,0x2023,0x0BAC,0x096A,0x22A4,0x1770,0x176D, ++ 0x01C7,0x0E83,0x1E08,0x213F,0x2365,0x1EBD,0x1A16,0x0818,0x11FD,0x0E30, ++ 0x024E,0x2256,0x0314,0x02D7,0x129B,0x0303,0x1BC7,0x01CC,0x1586,0x0752, ++ 0x194C,0x168E,0x1099,0x10A5,0x1009,0x016A,0x0BA6,0x0DCC,0x0124,0x15A3, ++ 0x2152,0x1072,0x0EBC,0x2018,0x1EEE,0x1139,0x0CCF,0x1FA1,0x035B,0x19D9, ++ 0x1029,0x1048,0x1397,0x18D0,0x075B,0x0C55,0x0188,0x19CA,0x2229,0x20D9, ++ 0x132D,0x0179,0x14A9,0x1A9D,0x1F6C,0x173F,0x18FF,0x12B0,0x00F8,0x14D9, ++ 0x0CE4,0x0732,0x0169,0x21AA,0x1F0B,0x1F0F,0x16AD,0x0869,0x1DB7,0x0BA8, ++ 0x1A55,0x0F6D,0x01BD,0x1DDA,0x1E1B,0x096B,0x09FF,0x2327,0x107D,0x0530, ++ 0x11E3,0x0558,0x16A1,0x0CB0,0x1C7E,0x160F,0x1840,0x187D,0x0EEB,0x14B1, ++ 0x079E,0x0C22,0x049E,0x0AE3,0x15BB,0x08E4,0x0F4A,0x1920,0x1ECF,0x12DD, ++ 0x1A01,0x0C2B,0x0507,0x0AF7,0x04B9,0x0E35,0x209F,0x1805,0x1E66,0x1169, ++ 0x2041,0x1EFC,0x1DDB,0x1E89,0x1EF2,0x1430,0x1DFC,0x1E98,0x0D9A,0x0D03, ++ 0x0BDF,0x09DC,0x15D5,0x08DB,0x1250,0x0DC6,0x099B,0x07ED,0x1FEE,0x0753, ++ 0x1C20,0x1EB8,0x17D2,0x23B2,0x1E34,0x22A3,0x0B5F,0x0ED1,0x0960,0x029B, ++ 0x1977,0x0A7D,0x12A1,0x00C9,0x04D3,0x1271,0x1A74,0x08B8,0x1035,0x231A, ++ 0x1300,0x047D,0x2202,0x0338,0x115C,0x01A3,0x2209,0x1CFB,0x193F,0x0BE3, ++ 0x1E1A,0x1445,0x06A8,0x1F9B,0x1307,0x0916,0x0E34,0x1806,0x23CC,0x144C, ++ 0x214A,0x1CE9,0x22B4,0x198A,0x126E,0x0F82,0x0D80,0x0167,0x0AC9,0x04A1, ++ 0x184D,0x0E8E,0x190A,0x0268,0x1395,0x20BA,0x170F,0x16E6,0x0601,0x1E81, ++ 0x1662,0x19B2,0x165E,0x0E3A,0x0D0B,0x0EDC,0x1235,0x23EE,0x0E28,0x0C88, ++ 0x0C8E,0x2196,0x10B5,0x0BEB,0x230F,0x2367,0x0392,0x1404,0x0AEA,0x1A9B, ++ 0x0439,0x03FA,0x1DB9,0x1100,0x11C1,0x222B,0x0787,0x007E,0x0E76,0x0261, ++ 0x06D4,0x18B5,0x1B4A,0x0647,0x0DDB,0x1976,0x05AE,0x0F34,0x0186,0x0068, ++ 0x1075,0x151F,0x0C3A,0x002C,0x233B,0x0A56,0x0DFA,0x0857,0x137E,0x12B1, ++ 0x100B,0x0C21,0x0AA4,0x08B4,0x11ED,0x0EEA,0x13EB,0x0614,0x1BD2,0x0356, ++ 0x16BA,0x1403,0x0AAE,0x0F00,0x1FFD,0x054A,0x01BB,0x2181,0x21CD,0x013B, ++ 0x1F8D,0x2369,0x08C3,0x1669,0x195B,0x1884,0x02EA,0x1090,0x053C,0x11F2, ++ 0x0472,0x034A,0x042A,0x223C,0x10AE,0x19A2,0x147E,0x0D6F,0x13AE,0x1CD0, ++ 0x1FB5,0x093D,0x19D2,0x10C7,0x0258,0x0106,0x1D44,0x1ABC,0x0B3D,0x1F86, ++ 0x1598,0x12E5,0x013D,0x1234,0x0F8A,0x0C6A,0x2318,0x0993,0x222E,0x1CC1, ++ 0x106F,0x1A61,0x05BF,0x19B4,0x0EA8,0x03B1,0x1C6C,0x2030,0x0725,0x0E62, ++ 0x064D,0x1469,0x2211,0x0004,0x1525,0x0B9F,0x0CB9,0x0EFC,0x0D02,0x1A1B, ++ 0x17C0,0x1C50,0x14C4,0x0C0D,0x1CF1,0x02D0,0x1A92,0x0B26,0x0FDB,0x109E, ++ 0x0905,0x0E8D,0x1D60,0x1C91,0x23F2,0x111E,0x06F2,0x1A88,0x22F3,0x0AB5, ++ 0x1D83,0x0FEA,0x05EB,0x1E55,0x056F,0x08B7,0x18E1,0x1CD3,0x0A94,0x0E3E, ++ 0x0E5F,0x1282,0x0CC7,0x0AB7,0x1DBF,0x0213,0x1BD1,0x044D,0x20EC,0x19E0, ++ 0x071A,0x0DF1,0x07D5,0x1311,0x0007,0x0F92,0x00C5,0x0433,0x0465,0x073B, ++ 0x0851,0x1542,0x05E9,0x0D39,0x0A1B,0x17F6,0x114D,0x0A9F,0x00A4,0x1A98, ++ 0x0ACD,0x1835,0x1D8A,0x0649,0x1002,0x1038,0x1E7B,0x0FF2,0x1CF4,0x21B8, ++ 0x1A58,0x0FE4,0x038E,0x1458,0x1538,0x1550,0x025A,0x0B82,0x16F0,0x0191, ++ 0x171D,0x081E,0x0BD4,0x15DA,0x0849,0x21E2,0x0B7F,0x1A0F,0x18B6,0x1FD7, ++ 0x02B9,0x04C1,0x0289,0x1F55,0x13DD,0x0FE1,0x1B1D,0x191D,0x17BB,0x0E4E, ++ 0x0175,0x1AC6,0x0044,0x23AD,0x1D03,0x210F,0x17C7,0x05E8,0x0CC0,0x00D1, ++ 0x0A60,0x0B3A,0x2299,0x2311,0x13E8,0x0BC8,0x0AC8,0x1E07,0x0380,0x0D50, ++ 0x0B56,0x0555,0x2143,0x0479,0x1545,0x1285,0x13E6,0x1926,0x2042,0x2075, ++ 0x1D79,0x2362,0x206A,0x187F,0x14B7,0x138E,0x1AA0,0x1C2D,0x0899,0x22CD, ++ 0x115B,0x00D4,0x1014,0x1701,0x02CB,0x0028,0x1A2F,0x1FFA,0x21EE,0x16C3, ++ 0x1158,0x15CE,0x1831,0x1639,0x04B7,0x00CE,0x0431,0x011F,0x1D35,0x23ED, ++ 0x093F,0x0B91,0x0ED2,0x0EDA,0x0369,0x1BC3,0x0B1A,0x21C3,0x040A,0x206C, ++ 0x17F9,0x1FB9,0x0CAD,0x1938,0x1661,0x0E19,0x1C1F,0x0A68,0x079B,0x1580, ++ 0x0005,0x1D56,0x0CBD,0x0306,0x1F3E,0x0872,0x1D2C,0x0A3A,0x06E9,0x1B43, ++ 0x0C8D,0x0113,0x0023,0x1675,0x0218,0x026D,0x1622,0x22A1,0x03F0,0x177F, ++ 0x20F4,0x0EF3,0x1D96,0x2281,0x053E,0x0CD2,0x0C70,0x159E,0x1691,0x0713, ++ 0x1F5E,0x205B,0x15C6,0x1C09,0x16E0,0x04CF,0x1C1C,0x0C74,0x15E5,0x12F7, ++ 0x16D8,0x2245,0x07E2,0x0566,0x0345,0x1FE2,0x2093,0x114B,0x19D8,0x0313, ++ 0x2108,0x1E09,0x2110,0x1FA8,0x03F6,0x0D93,0x0BD8,0x067F,0x06DE,0x2242, ++ 0x2282,0x120F,0x04E5,0x0E97,0x05DE,0x1D9B,0x09C1,0x19C8,0x029D,0x19A4, ++ 0x18BB,0x12F5,0x13D5,0x1AB3,0x11CF,0x0D59,0x094A,0x1574,0x16F6,0x0C08, ++ 0x22C3,0x20BB,0x18E3,0x0A73,0x1842,0x093E,0x1114,0x1211,0x1733,0x09DA, ++ 0x1ABE,0x1BD0,0x202F,0x0E41,0x222F,0x1F94,0x0D21,0x0553,0x08F0,0x10DA, ++ 0x0711,0x11FE,0x1B52,0x07BC,0x0BF3,0x076F,0x0AD1,0x0D1E,0x004F,0x170D, ++ 0x107A,0x1103,0x0681,0x02D2,0x0FA7,0x10DD,0x12D4,0x2083,0x0D9F,0x1DEB, ++ 0x0422,0x1776,0x1767,0x029F,0x0C7A,0x10E1,0x1C11,0x08D6,0x069A,0x1F47, ++ 0x14AA,0x1810,0x0CF6,0x09A3,0x0235,0x180A,0x1708,0x0A72,0x1BEC,0x1026, ++ 0x1754,0x0B0B,0x043A,0x2040,0x1119,0x0612,0x0628,0x1187,0x14B4,0x157F, ++ 0x1DB3,0x0156,0x01F9,0x082C,0x13FB,0x1218,0x0003,0x19CC,0x1764,0x14DC, ++ 0x1F30,0x0011,0x0AA1,0x096F,0x14FE,0x23C3,0x0CAE,0x04DB,0x0F18,0x1F4A, ++ 0x039B,0x15E1,0x08CB,0x0ADF,0x1FDF,0x1B50,0x08ED,0x1721,0x2296,0x040F, ++ 0x1A29,0x128E,0x0C84,0x218A,0x01CA,0x1D78,0x05D8,0x0D19,0x0B94,0x13C0, ++ 0x02E8,0x0426,0x2272,0x10ED,0x1179,0x1E4D,0x1781,0x0219,0x21A9,0x0088, ++ 0x2091,0x19E4,0x115A,0x1116,0x17D0,0x1A49,0x14B2,0x0DAD,0x0608,0x1F6E, ++ 0x2001,0x1BE0,0x17F0,0x0897,0x004C,0x11C3,0x22E3,0x05C8,0x06E5,0x1678, ++ 0x140D,0x1BA9,0x05FC,0x08E3,0x096D,0x03A9,0x092C,0x17F8,0x04BF,0x0902, ++ 0x16DB,0x1EE2,0x15E7,0x12E2,0x05AF,0x0C64,0x1345,0x03F2,0x128A,0x0811, ++ 0x0716,0x0582,0x031F,0x13DF,0x1E47,0x1B1C,0x0E77,0x1EE3,0x22B2,0x1FBA, ++ 0x0E2D,0x2082,0x1A8D,0x1596,0x11B4,0x129C,0x1F95,0x1710,0x1A57,0x1736, ++ 0x0D84,0x1B34,0x1D30,0x0D95,0x0B6E,0x1F2A,0x0E64,0x060B,0x0A91,0x0CE9, ++ 0x14A7,0x20B3,0x1442,0x1803,0x195C,0x06B2,0x11F9,0x10DF,0x1784,0x0B53, ++ 0x10BA,0x1317,0x1420,0x114F,0x1871,0x17C2,0x0742,0x16A2,0x06EC,0x19B7, ++ 0x0367,0x0C2E,0x129E,0x06CF,0x0D01,0x0FE7,0x03A8,0x08C4,0x124D,0x139C, ++ 0x04AB,0x1CC5,0x0574,0x082B,0x1C79,0x126C,0x216F,0x023B,0x17D5,0x066A, ++ 0x0F01,0x0AE6,0x06F0,0x13B6,0x1227,0x0A78,0x230E,0x2348,0x222A,0x0FF4, ++ 0x1E9B,0x1FD8,0x136A,0x2335,0x10AC,0x134B,0x1939,0x0273,0x0BC4,0x01E3, ++ 0x1D37,0x1AA8,0x0123,0x0609,0x069E,0x03B5,0x1874,0x1896,0x22DA,0x08B3, ++ 0x04B4,0x0304,0x1FCD,0x0F6F,0x04B6,0x0A77,0x02A2,0x2109,0x2393,0x23B5, ++ 0x21B5,0x2330,0x1CD7,0x15D6,0x0ACB,0x0F94,0x20DE,0x0836,0x1C7A,0x0FFE, ++ 0x1645,0x15AD,0x188B,0x184A,0x1B41,0x158E,0x046D,0x173E,0x0B40,0x0378, ++ 0x0281,0x0F3D,0x11AC,0x1D70,0x1BF9,0x101E,0x145C,0x0083,0x058E,0x160C, ++ 0x1FA6,0x1364,0x1FF1,0x0E48,0x0992,0x086C,0x16D6,0x08DA,0x0C40,0x0253, ++ 0x03F9,0x2065,0x2032,0x03B0,0x1281,0x2118,0x1F23,0x1722,0x22FA,0x0328, ++ 0x01AA,0x146A,0x12C4,0x2329,0x03EF,0x0DF3,0x0C53,0x09EA,0x01C4,0x1FCA, ++ 0x1792,0x09D9,0x1540,0x1F6A,0x0279,0x0145,0x1AA7,0x013F,0x1E19,0x15B6, ++ 0x000D,0x0A53,0x186E,0x217F,0x0CE3,0x1853,0x1A11,0x1936,0x1828,0x08BD, ++ 0x08DF,0x1EA8,0x12EE,0x1D0C,0x1664,0x20DF,0x04DE,0x083A,0x0D24,0x2361, ++ 0x0F2B,0x2354,0x126F,0x109B,0x1DF8,0x174F,0x09A0,0x0D53,0x00C2,0x06BA, ++ 0x087C,0x0CC3,0x21B9,0x128C,0x01A1,0x0688,0x1162,0x0C7C,0x1C27,0x20D0, ++ 0x0A6B,0x1B44,0x002D,0x119B,0x1855,0x102F,0x19BB,0x20FB,0x11C8,0x05FB, ++ 0x058A,0x1C5F,0x1CE6,0x09C7,0x192F,0x0E1D,0x03CB,0x20EA,0x1CC3,0x01DB, ++ 0x05C9,0x1B60,0x069B,0x001D,0x2295,0x1C4E,0x0A40,0x105F,0x0141,0x01AC, ++ 0x0640,0x032D,0x15B5,0x229F,0x1E17,0x19F0,0x194F,0x0102,0x0675,0x0B5B, ++ 0x203A,0x1010,0x1412,0x02E7,0x155C,0x176A,0x0866,0x21A1,0x18E9,0x0565, ++ 0x12CA,0x1F44,0x1274,0x1B32,0x0260,0x196F,0x1838,0x13C3,0x003F,0x19C6, ++ 0x01C6,0x1600,0x0EDF,0x0FD1,0x0A69,0x0062,0x1ED0,0x0F56,0x0377,0x2333, ++ 0x0EA5,0x0350,0x1DF1,0x19A6,0x224B,0x0EA0,0x112D,0x204D,0x04D2,0x1613, ++ 0x1793,0x0817,0x1D4E,0x1BF2,0x1913,0x0233,0x0B34,0x0A71,0x109C,0x1775, ++ 0x0CDD,0x02DE,0x1EB4,0x1C28,0x021C,0x1D1C,0x1C93,0x1189,0x1999,0x16AC, ++ 0x1670,0x1738,0x1E2A,0x2078,0x14BD,0x00EA,0x0898,0x1015,0x0EFA,0x19D7, ++ 0x113E,0x1630,0x1DBB,0x0EC9,0x1560,0x1FC8,0x16EC,0x10E3,0x0CF2,0x07C8, ++ 0x1174,0x0C5A,0x002E,0x1DB1,0x01D6,0x07E7,0x18CD,0x19A8,0x0CC5,0x0D5C, ++ 0x1541,0x12CC,0x0BE9,0x0A1C,0x21CF,0x0171,0x067B,0x1DE3,0x1EE8,0x022B, ++ 0x17A9,0x19AB,0x0D20,0x1C03,0x1E45,0x0E80,0x0B19,0x107F,0x124F,0x18AE, ++ 0x1907,0x1614,0x18BD,0x0A9B,0x059B,0x0D70,0x12F3,0x10C5,0x2140,0x0BB4, ++ 0x2384,0x01F7,0x0748,0x0FFB,0x13B3,0x01AD,0x076D,0x1083,0x1125,0x0018, ++ 0x1C39,0x0925,0x19EF,0x0E4F,0x210C,0x159F,0x037E,0x0A62,0x219E,0x211C, ++ 0x1C54,0x0BE0,0x1E02,0x09BA,0x1CBB,0x147B,0x1389,0x0B68,0x1023,0x23CB, ++ 0x0E75,0x1086,0x1145,0x0BE4,0x1BFD,0x2059,0x2007,0x0022,0x05D5,0x1BF6, ++ 0x02F0,0x1D1D,0x129A,0x06E4,0x0F47,0x0673,0x0ADD,0x0871,0x1C52,0x1449, ++ 0x232C,0x1E67,0x085B,0x20AE,0x0B74,0x16A7,0x0B85,0x1717,0x0FC7,0x0DFB, ++ 0x097F,0x0624,0x1CD6,0x15AF,0x0EFB,0x0E42,0x03B9,0x1369,0x0927,0x047C, ++ 0x0D5A,0x0982,0x0E7F,0x217C,0x02D5,0x06DD,0x1E79,0x0D9D,0x1964,0x1153, ++ 0x1F70,0x04CD,0x1123,0x22F1,0x1F2D,0x1EA4,0x19B6,0x1C3B,0x1356,0x0E01, ++ 0x16C7,0x11C9,0x191A,0x09AC,0x1DE6,0x1FDC,0x0581,0x1F04,0x1178,0x06AB, ++ 0x1D06,0x0A48,0x0F5B,0x1E4A,0x15D2,0x0FF8,0x01C3,0x1A14,0x0D17,0x086D, ++ 0x0CEF,0x1D50,0x03CF,0x0B3E,0x003D,0x06AC,0x008B,0x1185,0x1732,0x11BD, ++ 0x12F8,0x03B8,0x1068,0x18A2,0x1BA0,0x10F0,0x0868,0x03E6,0x1DC8,0x1AA2, ++ 0x1B13,0x1C82,0x0055,0x099F,0x2222,0x034B,0x179D,0x1E6F,0x1261,0x0FC8, ++ 0x166D,0x1F42,0x127F,0x0C9B,0x00B9,0x1D26,0x181D,0x1320,0x09AE,0x01DA, ++ 0x1A35,0x05E3,0x04D6,0x1141,0x1BB2,0x0669,0x1B70,0x1F22,0x1B9D,0x19BE, ++ 0x0D2A,0x1057,0x0A3B,0x11D3,0x157B,0x1B49,0x14F7,0x095D,0x0A88,0x0126, ++ 0x031B,0x03DE,0x1422,0x0BF8,0x1030,0x1F34,0x210B,0x1B12,0x0379,0x0806, ++ 0x1252,0x18A0,0x1778,0x1EE7,0x23C6,0x1611,0x22EC,0x0BE8,0x0950,0x1008, ++ 0x0906,0x1D51,0x10A2,0x1DAE,0x22D8,0x1499,0x152F,0x0D08,0x00DB,0x0860, ++ 0x0162,0x0AD3,0x2233,0x18A6,0x0DD2,0x1477,0x11B3,0x1CBD,0x2043,0x183A, ++ 0x1077,0x15E6,0x1FEA,0x0FE8,0x0396,0x0B0A,0x1296,0x0049,0x2303,0x1818, ++ 0x03A2,0x03F8,0x1225,0x05ED,0x15D4,0x030D,0x089D,0x107E,0x0A43,0x14A0, ++ 0x235C,0x1426,0x0733,0x0D1C,0x1B96,0x09CE,0x155D,0x0F6E,0x238C,0x0876, ++ 0x1DE0,0x1223,0x0FEF,0x078B,0x1EC2,0x09BF,0x1D52,0x1FA4,0x202B,0x14E1, ++ 0x0864,0x1F78,0x0FA9,0x1821,0x0E38,0x06A6,0x0211,0x1F9E,0x020A,0x1AF2, ++ 0x0981,0x1CC0,0x0766,0x1047,0x1EA9,0x0C16,0x1BE8,0x0464,0x22C8,0x183B, ++ 0x0B32,0x2106,0x0D79,0x14F5,0x0A33,0x18D4,0x0482,0x0158,0x13E2,0x1651, ++ 0x03C6,0x1750,0x1A5A,0x1C3C,0x1825,0x1DFB,0x1D76,0x2218,0x1F16,0x08EE, ++ 0x210A,0x0747,0x0DF5,0x0CD3,0x10D3,0x1BBA,0x1F5D,0x1A78,0x19C7,0x177E, ++ 0x13F0,0x2315,0x1F82,0x0922,0x22C6,0x17CC,0x1A50,0x1FE5,0x193D,0x122D, ++ 0x03E3,0x07C9,0x20B0,0x217A,0x23F4,0x0DFD,0x1268,0x080E,0x192D,0x0698, ++ 0x1EAF,0x170A,0x1E60,0x1947,0x1CE1,0x10BB,0x1505,0x016E,0x207B,0x11E7, ++ 0x1F85,0x0F72,0x191E,0x2015,0x04AD,0x0AC1,0x1D73,0x2003,0x02F9,0x1C26, ++ 0x1F64,0x0C7D,0x0B2D,0x004D,0x1E2B,0x1432,0x026C,0x1E04,0x218C,0x0CE1, ++ 0x000F,0x0A01,0x16D0,0x20C8,0x0E25,0x0C09,0x2199,0x091A,0x0E3B,0x0F5F, ++ 0x0D5E,0x223D,0x025D,0x0699,0x00DD,0x20EB,0x1352,0x1B92,0x21A4,0x1E10, ++ 0x05E5,0x1292,0x0750,0x0552,0x0061,0x0058,0x07CB,0x02B6,0x12F0,0x0F67, ++ 0x070D,0x1837,0x196B,0x09F7,0x153F,0x0BEE,0x1769,0x0B00,0x1142,0x1AE9, ++ 0x1B98,0x1B8A,0x11A8,0x1DD2,0x16D2,0x1C7C,0x0F38,0x0F3B,0x1601,0x0151, ++ 0x0320,0x1085,0x0B61,0x0DAF,0x1308,0x0E21,0x0371,0x1F7C,0x04DD,0x0F49, ++ 0x1146,0x169C,0x1E31,0x1258,0x1E50,0x1F8B,0x205F,0x145A,0x084D,0x23B8, ++ 0x0FAF,0x2055,0x160E,0x13D7,0x0908,0x0A7C,0x1022,0x0AC5,0x02DA,0x1962, ++ 0x1F9F,0x0467,0x1E9C,0x04E3,0x0F4E,0x1DF9,0x23A5,0x10E7,0x11A9,0x215F, ++ 0x117E,0x223A,0x149E,0x01E6,0x18D6,0x03B7,0x104B,0x0FBB,0x1273,0x18C9, ++ 0x0A4A,0x215A,0x024C,0x1378,0x1ED2,0x212D,0x0F22,0x1F99,0x212E,0x2044, ++ 0x10D0,0x22D2,0x20F7,0x19B5,0x1416,0x1741,0x20B6,0x1159,0x23A6,0x186D, ++ 0x0515,0x04A8,0x2171,0x0E9E,0x2325,0x111B,0x1EC8,0x1620,0x1687,0x22BC, ++ 0x059F,0x06E7,0x11DD,0x1C88,0x2125,0x0FAA,0x10DB,0x1854,0x1410,0x141C, ++ 0x23AF,0x21D6,0x0B8C,0x0AD9,0x0B6B,0x0597,0x0C06,0x0619,0x198F,0x0339, ++ 0x0802,0x0859,0x0107,0x0410,0x208A,0x2291,0x0E10,0x1DA6,0x19AA,0x0324, ++ 0x10FB,0x049A,0x0CAC,0x2252,0x0299,0x0FD0,0x1DE7,0x086E,0x0FFA,0x09FA, ++ 0x23C8,0x18C7,0x0489,0x2195,0x1802,0x19F2,0x1967,0x0FBF,0x02EE,0x0AE4, ++ 0x0B63,0x1509,0x178F,0x0843,0x05E7,0x0613,0x1739,0x065A,0x0201,0x06D7, ++ 0x21DA,0x11F4,0x0503,0x090D,0x0E32,0x09A8,0x1B5A,0x1EFB,0x20BF,0x11F1, ++ 0x1D40,0x1DF2,0x1E75,0x01B0,0x0BCE,0x1346,0x1D5C,0x0546,0x1B0E,0x07B4, ++ 0x11E8,0x018A,0x19E6,0x0177,0x134E,0x18E2,0x1546,0x0861,0x054C,0x0119, ++ 0x1A77,0x1CEF,0x1110,0x1953,0x1CD9,0x0B65,0x0CD0,0x1E5A,0x1E0F,0x07EB, ++ 0x13C2,0x1949,0x16E3,0x0409,0x007F,0x1CFF,0x0485,0x14D0,0x0CD1,0x0E46, ++ 0x055E,0x1C48,0x016F,0x1C7B,0x1109,0x18B2,0x0ED5,0x13B0,0x0DFF,0x2061, ++ 0x0795,0x2076,0x1A4A,0x029C,0x13BF,0x119A,0x1819,0x227A,0x0388,0x1C24, ++ 0x036E,0x1D82,0x0F4B,0x084E,0x23EB,0x13A1,0x0632,0x13DC,0x150A,0x0112, ++ 0x05A4,0x073C,0x161D,0x04AC,0x2283,0x0D0A,0x172E,0x2142,0x0319,0x1673, ++ 0x17D6,0x0F73,0x0E26,0x14E6,0x1F46,0x13E0,0x1841,0x130E,0x2363,0x10CE, ++ 0x0980,0x15A2,0x1FC7,0x04D9,0x11A2,0x0CA8,0x00EF,0x07BF,0x1C12,0x09DE, ++ 0x0AE0,0x00DF,0x0D49,0x06C0,0x206E,0x1EE1,0x0A38,0x22F8,0x1DC7,0x0A79, ++ 0x1800,0x179B,0x1386,0x1A22,0x01D2,0x094E,0x125C,0x2244,0x1746,0x0EDE, ++ 0x002A,0x1CA7,0x099A,0x07E4,0x0264,0x1C6F,0x2389,0x0987,0x1F3D,0x1E88, ++ 0x02E0,0x0D44,0x0E6C,0x1E8F,0x0F55,0x2066,0x1CC4,0x0917,0x1DB8,0x089F, ++ 0x0615,0x11A5,0x12C8,0x0A42,0x079C,0x0D13,0x0B6A,0x131F,0x136C,0x04AE, ++ 0x130D,0x16F8,0x01A0,0x13C7,0x0B4C,0x2279,0x0196,0x1464,0x0F60,0x0231, ++ 0x19A0,0x1E9A,0x0397,0x170B,0x133C,0x2265,0x017C,0x1C78,0x048C,0x08D0, ++ 0x06A4,0x071C,0x0BBA,0x0DE7,0x0B3F,0x0229,0x1EAD,0x140A,0x037B,0x0EC6, ++ 0x0E16,0x0442,0x1894,0x156C,0x0F8F,0x23A1,0x0DCE,0x13CD,0x1AA4,0x0E59, ++ 0x162B,0x1AA9,0x1BFB,0x09A7,0x1703,0x0A81,0x2056,0x21BC,0x078F,0x07AD, ++ 0x1A24,0x0F31,0x19F3,0x09E6,0x11CD,0x23B6,0x234F,0x0FD2,0x196D,0x06D6, ++ 0x035A,0x0AFA,0x005E,0x035C,0x1AB9,0x15A4,0x1318,0x0132,0x08D9,0x0512, ++ 0x1693,0x0DB0,0x16A6,0x07FC,0x0B02,0x1D0D,0x09F0,0x21F5,0x0799,0x13E3, ++ 0x0768,0x0EF9,0x1176,0x014A,0x15C1,0x0BA1,0x0E99,0x112B,0x1AAE,0x1C0B, ++ 0x0178,0x1C69,0x1C0F,0x0130,0x1FC2,0x0E45,0x1694,0x1F0D,0x1A79,0x0911, ++ 0x0FE9,0x09AF,0x18C2,0x1B67,0x1DF3,0x0B01,0x14B5,0x1DFD,0x0DCD,0x161E, ++ 0x19A1,0x19E5,0x1500,0x14C9,0x0B2A,0x2366,0x1B46,0x14F4,0x0B5C,0x063E, ++ 0x03E1,0x0CA5,0x04F7,0x1409,0x0EC3,0x1D5D,0x012C,0x1277,0x1310,0x1214, ++ 0x112E,0x1F80,0x0AD6,0x1FD6,0x105B,0x226C,0x1F41,0x19CF,0x2033,0x0D29, ++ 0x03CA,0x1A47,0x0756,0x125A,0x06F4,0x1B53,0x0527,0x1D91,0x20CE,0x1975, ++ 0x0072,0x1431,0x1EEF,0x0BD0,0x0BE1,0x0C01,0x00E1,0x0A7A,0x23E6,0x0323, ++ 0x219F,0x1367,0x07A2,0x1CB6,0x2191,0x0CB2,0x234A,0x1288,0x17DD,0x030B, ++ 0x15F2,0x02A8,0x0D83,0x04BD,0x2347,0x0522,0x051B,0x225A,0x228A,0x1B9F, ++ 0x13F9,0x1B7C,0x1D7F,0x0A30,0x0220,0x1C3F,0x22EA,0x1680,0x0FC9,0x1190, ++ 0x1EF1,0x21CC,0x155E,0x20DD,0x0F27,0x13F6,0x07FF,0x0F71,0x1E6A,0x05B9, ++ 0x0F0A,0x2228,0x02E9,0x0ACE,0x205C,0x01E5,0x200B,0x002F,0x1E27,0x0116, ++ 0x1B38,0x190C,0x2307,0x07EA,0x152C,0x04C8,0x01FE,0x199B,0x1001,0x1535, ++ 0x0930,0x1EC9,0x086A,0x0080,0x141E,0x1066,0x16DF,0x0C79,0x1E42,0x0A4C, ++ 0x0667,0x1B7F,0x1679,0x1A3C,0x1A25,0x00E6,0x0611,0x0518,0x0B87,0x16F9, ++ 0x22B0,0x1C3A,0x14FD,0x04BC,0x080F,0x21BF,0x1943,0x0266,0x1124,0x002B, ++ 0x0670,0x01AB,0x1EC5,0x08B6,0x091D,0x0FA6,0x0541,0x20DC,0x0E65,0x0128, ++ 0x08C9,0x11E5,0x1647,0x0D3D,0x01B8,0x1C61,0x2319,0x200C,0x1053,0x1027, ++ 0x05F8,0x1A27,0x1133,0x210D,0x11E6,0x0935,0x054B,0x0754,0x02C6,0x0723, ++ 0x0852,0x106B,0x161F,0x10B1,0x0E81,0x2054,0x156B,0x1113,0x22C5,0x21B7, ++ 0x0AC0,0x042B,0x17DB,0x01B9,0x0CA2,0x055B,0x1A87,0x0D62,0x0A47,0x077F, ++ 0x1D25,0x0FB5,0x1F3F,0x04E0,0x16C2,0x011D,0x158C,0x209C,0x0D6E,0x18FE, ++ 0x05DD,0x1C05,0x123E,0x1BC6,0x0892,0x232B,0x1E3F,0x11B6,0x10B6,0x144A, ++ 0x203F,0x02AD,0x2237,0x1BB3,0x03EB,0x0BBC,0x0311,0x1054,0x011E,0x1712, ++ 0x05C2,0x2129,0x0292,0x22D0,0x0E6F,0x1F17,0x2234,0x16B6,0x00B5,0x1502, ++ 0x0B0E,0x1299,0x2170,0x08C0,0x1BD4,0x1475,0x141B,0x0D00,0x2026,0x0318, ++ 0x1567,0x0A4E,0x03E9,0x1CDC,0x23A8,0x1D8E,0x0DD8,0x0470,0x0286,0x1C22, ++ 0x1315,0x1785,0x048F,0x1786,0x1EE0,0x0B37,0x0952,0x02BE,0x0873,0x04DF, ++ 0x2101,0x0FCD,0x04B0,0x059D,0x1FCF,0x05E0,0x1C7F,0x0CBE,0x0461,0x024A, ++ 0x027C,0x05F4,0x092A,0x0DC9,0x01E7,0x1147,0x03B2,0x1AB8,0x0238,0x174C, ++ 0x02B2,0x1C6E,0x04D8,0x0DBC,0x1AB1,0x17FF,0x1443,0x054F,0x1128,0x0370, ++ 0x14CC,0x1F35,0x1173,0x0A03,0x1D32,0x12D1,0x02AB,0x09DB,0x153D,0x1425, ++ 0x122F,0x06BD,0x17B8,0x1579,0x0890,0x1B0F,0x1050,0x0DDF,0x23E3,0x1860, ++ 0x1203,0x11D5,0x0EBB,0x0A80,0x00B7,0x1951,0x15B7,0x1FF3,0x0D14,0x143D, ++ 0x164C,0x0E67,0x0C91,0x01F4,0x2243,0x1474,0x03A4,0x2147,0x0270,0x10C9, ++ 0x116F,0x127D,0x0B1E,0x10FC,0x1A0A,0x1846,0x1F63,0x1067,0x0BB3,0x191F, ++ 0x0EA6,0x0EEF,0x1E29,0x18B9,0x2079,0x090C,0x16FD,0x0EB4,0x0BC9,0x2098, ++ 0x080A,0x0183,0x1BFE,0x1631,0x0769,0x1DD8,0x142F,0x0F66,0x1316,0x02A9, ++ 0x22EE,0x1C4F,0x0285,0x1013,0x065D,0x0C2D,0x0466,0x033E,0x00E7,0x1900, ++ 0x226F,0x1276,0x03AE,0x0EA1,0x23E7,0x174D,0x216C,0x1CA1,0x1A06,0x0665, ++ 0x1461,0x2260,0x1F7D,0x1156,0x14E8,0x1327,0x0257,0x089A,0x15DF,0x16F4, ++ 0x0EB9,0x03B3,0x0EAD,0x0FD9,0x085D,0x1259,0x1BA8,0x1E90,0x114C,0x2236, ++ 0x02C7,0x1E53,0x2115,0x1D33,0x1FF5,0x1AFD,0x185D,0x06EE,0x0DC0,0x078C, ++ 0x0AF4,0x15D1,0x0030,0x2131,0x1EB6,0x06E0,0x06B6,0x038C,0x05A8,0x080C, ++ 0x0E98,0x1682,0x1DC0,0x1340,0x13B7,0x1C1B,0x0434,0x1AB5,0x1CAB,0x1A1C, ++ 0x07D0,0x1ABB,0x22C1,0x0F08,0x027D,0x1238,0x1591,0x07F7,0x0D30,0x13F8, ++ 0x1909,0x212B,0x1826,0x0749,0x0D06,0x0D2E,0x104F,0x1F39,0x09EB,0x0EF6, ++ 0x22E6,0x16F1,0x0AEE,0x116B,0x17DE,0x0B12,0x0322,0x0BEA,0x064C,0x03D9, ++ 0x2374,0x0CA4,0x1293,0x0E5C,0x04B3,0x03A0,0x13AD,0x0E33,0x0353,0x081A, ++ 0x0BB2,0x0DA3,0x1E01,0x1322,0x0EBE,0x0D0E,0x0DBB,0x11A3,0x1B57,0x16FF, ++ 0x0298,0x1A8F,0x09EF,0x08AD,0x1877,0x22AC,0x147A,0x1B36,0x095A,0x1B08, ++ 0x0455,0x10AD,0x0343,0x1B16,0x0CF8,0x082E,0x144D,0x1A37,0x1B5D,0x0702, ++ 0x09C4,0x1E16,0x157A,0x1965,0x0A63,0x1C6D,0x0D9E,0x0ED8,0x1E57,0x05CC, ++ 0x1758,0x008D,0x0BFE,0x1168,0x04ED,0x1917,0x2251,0x1074,0x2356,0x1719, ++ 0x1D3B,0x1FBE,0x22AA,0x14C8,0x211F,0x16D1,0x124B,0x2241,0x1C08,0x0AAC, ++ 0x0F06,0x12B5,0x01FB,0x1C72,0x0089,0x23B3,0x02BA,0x15A5,0x1A00,0x1483, ++ 0x13F2,0x2016,0x1AEB,0x2187,0x0BF7,0x07FA,0x2005,0x1516,0x13D6,0x0122, ++ 0x0420,0x039D,0x0193,0x193B,0x2360,0x0453,0x0A75,0x0BD9,0x1197,0x1923, ++ 0x1DB5,0x2225,0x1194,0x2058,0x0E9F,0x1106,0x06A1,0x02F5,0x1B63,0x00FF, ++ 0x1F4C,0x2289,0x0CE0,0x1F1D,0x1247,0x19AE,0x1FC0,0x182E,0x05B3,0x0DB2, ++ 0x229C,0x0E3D,0x232D,0x1961,0x1B95,0x0CA9,0x1A9E,0x183F,0x0203,0x1E76, ++ 0x16BB,0x00B1,0x0A3F,0x237E,0x08A8,0x1B6E,0x0B2B,0x215B,0x119E,0x0945, ++ 0x0F86,0x0A4B,0x12C7,0x1616,0x046B,0x20A3,0x0454,0x0405,0x0C19,0x1A08, ++ 0x1E33,0x10BD,0x1861,0x2135,0x0C23,0x0F36,0x0C5C,0x049B,0x032F,0x1A19, ++ 0x03DC,0x1E84,0x011C,0x1E61,0x096E,0x1F66,0x0798,0x104C,0x1C62,0x1E73, ++ 0x03E4,0x0638,0x190D,0x1AF6,0x17EF,0x10FD,0x1B0D,0x1263,0x1512,0x09A5, ++ 0x1439,0x0EF7,0x041D,0x04BA,0x08D4,0x1714,0x1B62,0x164F,0x1787,0x114A, ++ 0x05B2,0x1812,0x0D33,0x176E,0x1480,0x12FA,0x0E61,0x084B,0x0801,0x079A, ++ 0x2034,0x154A,0x23BC,0x20A9,0x1985,0x2286,0x148C,0x0DC2,0x06D8,0x1D4C, ++ 0x183D,0x1A41,0x22DD,0x21F1,0x103C,0x14BC,0x0827,0x0850,0x157D,0x02BD, ++ 0x03BF,0x00DE,0x0C9E,0x1CB7,0x1BF8,0x0805,0x20A8,0x1DA1,0x1F50,0x1DA0, ++ 0x0DA0,0x068E,0x1979,0x0650,0x1F52,0x2239,0x0594,0x1534,0x1C38,0x0351, ++ 0x0DE3,0x1672,0x21E3,0x10AB,0x11BC,0x1788,0x1547,0x2071,0x07DE,0x012F, ++ 0x22AF,0x2377,0x179A,0x12B3,0x0CF3,0x0B92,0x0BB7,0x070F,0x11CA,0x2039, ++ 0x0DAA,0x1521,0x0278,0x0F4D,0x0C87,0x0956,0x0967,0x067E,0x08B0,0x11AF, ++ 0x051F,0x099E,0x0C78,0x0E27,0x19BD,0x1DCC,0x15F1,0x01F5,0x1453,0x043E, ++ 0x1E8C,0x018F,0x1B54,0x2166,0x1BBC,0x1FE8,0x059A,0x0C6B,0x00C7,0x1E92, ++ 0x13DE,0x0B3B,0x05E4,0x15EE,0x22A9,0x2090,0x2276,0x0631,0x105D,0x2038, ++ 0x195A,0x17E5,0x1AFF,0x10A8,0x0384,0x0886,0x0456,0x1599,0x0B4E,0x1D47, ++ 0x1830,0x051E,0x1C3D,0x20E1,0x1895,0x2092,0x10E9,0x07C6,0x23BD,0x201A, ++ 0x209A,0x04C4,0x0315,0x019B,0x237C,0x047A,0x23FC,0x11A6,0x195F,0x2006, ++ 0x1328,0x1CCE,0x1DEA,0x0970,0x0067,0x058D,0x1934,0x2120,0x01C5,0x2263, ++ 0x04FD,0x1AE1,0x125E,0x1CA0,0x19BC,0x226E,0x0734,0x0BB8,0x0A54,0x19FE, ++ 0x0E85,0x1FC6,0x0224,0x171C,0x1FFB,0x1115,0x0524,0x133E,0x0EDD,0x2280, ++ 0x1D2F,0x0200,0x0CB3,0x23FE,0x0F19,0x1569,0x1537,0x19C2,0x08DC,0x1F6D, ++ 0x068D,0x10F4,0x055A,0x1E30,0x21F0,0x1CF5,0x0D35,0x04A6,0x139D,0x23D3, ++ 0x0A8D,0x1D3D,0x0763,0x0575,0x1511,0x1676,0x1304,0x0E13,0x10CD,0x0E55, ++ 0x199E,0x236E,0x1257,0x2288,0x13E5,0x0037,0x1D04,0x04EF,0x100E,0x0FAE, ++ 0x1E9E,0x067A,0x2320,0x0539,0x21D8,0x07C4,0x045F,0x1D0B,0x1196,0x020E, ++ 0x1B68,0x04B5,0x031C,0x00FD,0x1184,0x0F7C,0x166C,0x23D2,0x0C9F,0x2380, ++ 0x0B78,0x0F14,0x18F0,0x05AD,0x0252,0x138A,0x13FA,0x1A93,0x1F01,0x126A, ++ 0x1D6A,0x11D9,0x182F,0x1492,0x1822,0x0D54,0x16E2,0x05D1,0x1155,0x0C4A, ++ 0x1F58,0x00A3,0x17E0,0x0CD6,0x1D43,0x0250,0x16F3,0x0CFB,0x0C29,0x0B86, ++ 0x11A4,0x1ED7,0x14FC,0x10D8,0x0F59,0x2338,0x1C5A,0x0F42,0x142D,0x12FD, ++ 0x2373,0x11CE,0x0800,0x23E0,0x2025,0x0FFD,0x0A99,0x2264,0x1FF7,0x04A9, ++ 0x1A67,0x1ED4,0x0BE2,0x21F3,0x1DF4,0x1927,0x04A4,0x1C84,0x0B09,0x11B9, ++ 0x21A0,0x1D7B,0x1EF7,0x006F,0x18C6,0x1478,0x0985,0x1E23,0x0039,0x1EBC, ++ 0x13D2,0x0391,0x039C,0x0118,0x1061,0x21C8,0x1A40,0x1EAA,0x175B,0x036C, ++ 0x204F,0x19BA,0x1F91,0x193A,0x197B,0x0F24,0x176F,0x1592,0x0854,0x0804, ++ 0x0FD4,0x0A2B,0x16FE,0x0D64,0x0587,0x1F00,0x1539,0x203C,0x1E54,0x01B4, ++ 0x02E6,0x1B11,0x0A98,0x157C,0x1868,0x0786,0x15C8,0x083C,0x0F84,0x1209, ++ 0x0B47,0x0F1C,0x0D77,0x188C,0x06C7,0x0521,0x203E,0x1921,0x0996,0x2020, ++ 0x1E5D,0x12CE,0x0940,0x0309,0x1991,0x12A7,0x1E77,0x0830,0x1B94,0x1C73, ++ 0x02C4,0x1D86,0x0F0F,0x192B,0x0BFC,0x1451,0x1969,0x09F1,0x010C,0x1865, ++ 0x09C6,0x1AE8,0x17B7,0x21F8,0x14A1,0x21F6,0x07D7,0x0C36,0x1CB4,0x1883, ++ 0x1655,0x1DDF,0x0863,0x00F0,0x0961,0x0687,0x1070,0x0FE5,0x072F,0x0BC2, ++ 0x08C8,0x1AAA,0x0645,0x09CF,0x0FA8,0x2130,0x23CF,0x2246,0x1990,0x1744, ++ 0x0D4B,0x0090,0x143F,0x166F,0x1DE5,0x0331,0x09CD,0x1447,0x1CEB,0x0D3B, ++ 0x0CCD,0x2159,0x0F78,0x0251,0x068F,0x07BB,0x0877,0x1A2A,0x0700,0x23C2, ++ 0x08A2,0x1C98,0x1427,0x0E79,0x15AC,0x0F8B,0x153A,0x0AEC,0x0DEC,0x03EE, ++ 0x1AE2,0x1F6B,0x13F4,0x1EFA,0x172F,0x1C87,0x1B3F,0x192A,0x1C53,0x1BB1, ++ 0x0297,0x0772,0x1385,0x173D,0x0707,0x17BD,0x007D,0x1A07,0x08C6,0x1D6F, ++ 0x09D8,0x1850,0x1C8B,0x180D,0x1CB1,0x148A,0x0492,0x0847,0x0D78,0x0DEF, ++ 0x0E7E,0x1D3A,0x0E91,0x1888,0x1C59,0x1AE7,0x1FC1,0x154C,0x058C,0x0078, ++ 0x22BA,0x225B,0x0F5E,0x1A4C,0x0D3E,0x195D,0x06DF,0x02A7,0x14E5,0x0CFC, ++ 0x16EE,0x0F7D,0x0321,0x178A,0x1097,0x0E0B,0x1479,0x079D,0x1C5B,0x1208, ++ 0x0B1F,0x0D7C,0x1963,0x0835,0x1C99,0x2226,0x1417,0x045E,0x18E0,0x0051, ++ 0x1243,0x181E,0x0659,0x172A,0x1373,0x1ABD,0x1F0C,0x1749,0x113A,0x06ED, ++ 0x09A6,0x027F,0x015D,0x1084,0x022E,0x1A5B,0x1685,0x1D1B,0x0054,0x0FB3, ++ 0x20CC,0x23A9,0x220B,0x045A,0x1B24,0x2145,0x148B,0x18EC,0x16BC,0x0B9B, ++ 0x120C,0x18B0,0x02E3,0x1A1D,0x0BE7,0x133D,0x0DE1,0x21D4,0x0357,0x1715, ++ 0x20A2,0x0A18,0x239D,0x22D6,0x0CD5,0x1942,0x16E9,0x0E54,0x1007,0x069D, ++ 0x1CB8,0x12DC,0x0381,0x0C93,0x1EFF,0x04E4,0x1C25,0x1FE7,0x20C1,0x0412, ++ 0x0215,0x1594,0x1BC5,0x217E,0x221C,0x173A,0x1F19,0x1183,0x0765,0x20F8, ++ 0x05F2,0x130A,0x036D,0x012E,0x06EA,0x0B3C,0x1C42,0x1F43,0x0A95,0x1B8C, ++ 0x1F36,0x0622,0x04DA,0x2070,0x089E,0x04D4,0x184E,0x1520,0x1CC8,0x127B, ++ 0x1302,0x13D0,0x0626,0x0429,0x004A,0x18C0,0x2144,0x0A34,0x1AEA,0x1212, ++ 0x12A2,0x06D2,0x0751,0x1D2B,0x104A,0x133A,0x1E80,0x12F6,0x1C9E,0x1460, ++ 0x13BA,0x16D9,0x1648,0x1E3A,0x1B29,0x0592,0x11BA,0x1D0E,0x0153,0x0ADB, ++ 0x15C3,0x1507,0x17FC,0x122C,0x14D7,0x21AD,0x1A53,0x14F2,0x16DC,0x20F1, ++ 0x118E,0x1AAB,0x04EB,0x0606,0x0D05,0x170E,0x05D9,0x0A83,0x10F7,0x070B, ++ 0x04F8,0x0B27,0x2224,0x0F97,0x075E,0x180E,0x2194,0x010E,0x0B57,0x1A80, ++ 0x1610,0x1B19,0x1BAC,0x0B30,0x0376,0x1697,0x0668,0x00EC,0x1256,0x1F74, ++ 0x110D,0x0807,0x03D1,0x1326,0x0577,0x067C,0x1E5C,0x1D6D,0x06F1,0x075C, ++ 0x0394,0x0184,0x1E7E,0x12F1,0x0216,0x0990,0x208D,0x1332,0x1044,0x0EF8, ++ 0x0F70,0x075D,0x042C,0x030E,0x17CB,0x0AA3,0x04B2,0x1A63,0x04FE,0x097E, ++ 0x213D,0x11DF,0x166B,0x0A2E,0x0664,0x0C75,0x21A3,0x102D,0x1F32,0x1D42, ++ 0x0A65,0x14BF,0x0B11,0x22B9,0x08AC,0x1394,0x11B7,0x1FAE,0x1CCD,0x1A05, ++ 0x177D,0x0D81,0x1E85,0x0D88,0x0A5E,0x0330,0x0EC4,0x13D9,0x1583,0x1CA6, ++ 0x2126,0x0F99,0x158F,0x00F9,0x0176,0x1528,0x1C2B,0x1D69,0x049F,0x0418, ++ 0x18B4,0x1ACB,0x236F,0x04C5,0x0705,0x0031,0x20B9,0x15B2,0x1FD4,0x18FC, ++ 0x1A6E,0x21B1,0x0DEA,0x0432,0x1F1B,0x0CB7,0x2011,0x07CC,0x21FD,0x1216, ++ 0x1F51,0x21AB,0x0974,0x0833,0x06F8,0x1935,0x10B4,0x0164,0x1421,0x1A4D, ++ 0x1824,0x07DB,0x1551,0x0E53,0x152D,0x23CE,0x0DFE,0x0D51,0x1A6A,0x1E3C, ++ 0x20B4,0x1BAA,0x0C62,0x0973,0x01E4,0x0035,0x01D7,0x0496,0x1A73,0x1435, ++ 0x2290,0x22F4,0x1E71,0x0F7B,0x066D,0x0874,0x0DB5,0x0F1A,0x0F2D,0x218F, ++ 0x17AE,0x0170,0x1BEA,0x1908,0x204A,0x0728,0x0746,0x18B8,0x0242,0x0F17, ++ 0x1F8A,0x0B10,0x0966,0x1DD5,0x0174,0x07AE,0x1485,0x146C,0x0975,0x1556, ++ 0x1783,0x2021,0x21E7,0x06DB,0x227D,0x19E7,0x22DC,0x2297,0x1FD1,0x1A26, ++ 0x07CD,0x233D,0x1B84,0x1E18,0x21CE,0x0EE4,0x2255,0x0862,0x1887,0x057A, ++ 0x20C9,0x17F4,0x1BDD,0x2284,0x1817,0x0929,0x0079,0x18F3,0x0E14,0x1131, ++ 0x16B8,0x144E,0x120E,0x16BF,0x058B,0x1C9B,0x05D4,0x0E7B,0x07D3,0x1D27, ++ 0x1051,0x1E12,0x2157,0x0A89,0x03E0,0x0DC8,0x219B,0x0495,0x04C0,0x090E, ++ 0x1914,0x1A13,0x05C4,0x1C0D,0x0564,0x178C,0x2069,0x0291,0x08B5,0x0138, ++ 0x1224,0x14C6,0x14C1,0x1AC7,0x0689,0x1E72,0x1751,0x1E0C,0x2270,0x080D, ++ 0x1C00,0x03AD,0x1EF8,0x15C9,0x0F28,0x0E40,0x0F9E,0x0344,0x1D58,0x11F5, ++ 0x1EAC,0x17A7,0x188D,0x05BA,0x1472,0x154E,0x0017,0x05C7,0x1ACD,0x2370, ++ 0x1140,0x2230,0x0F2E,0x1EB2,0x1CA5,0x1B5E,0x1633,0x09B5,0x08B1,0x1B3E, ++ 0x0CFE,0x02ED,0x1CEC,0x020F,0x2103,0x13ED,0x0C99,0x07E3,0x00D9,0x1342, ++ 0x2179,0x03AA,0x13F5,0x124C,0x1EAB,0x15BA,0x0F41,0x02F6,0x1652,0x057E, ++ 0x0157,0x0BE6,0x09AB,0x148D,0x072A,0x1071,0x09B0,0x0500,0x1B65,0x0A6A, ++ 0x13A0,0x0F65,0x21BE,0x01FF,0x19B3,0x1CBA,0x109F,0x1EF0,0x0517,0x0307, ++ 0x18AC,0x0FD5,0x1FEF,0x0F16,0x197E,0x1291,0x078A,0x1657,0x13C1,0x0E7A, ++ 0x1466,0x07BE,0x164E,0x0419,0x2158,0x0FC4,0x0E7D,0x18D9,0x0942,0x0AEF, ++ 0x163E,0x2200,0x226D,0x037A,0x1B66,0x0CAF,0x07FB,0x0CEC,0x0D4A,0x0CB6, ++ 0x000E,0x1ADE,0x1BD5,0x1892,0x15A1,0x1DD1,0x1DBC,0x01EE,0x12E0,0x0671, ++ 0x0ABB,0x1E0E,0x189F,0x1D9D,0x0DF2,0x0008,0x13CB,0x11B8,0x0571,0x00BA, ++ 0x0AC3,0x1568,0x070A,0x21B0,0x16EA,0x1000,0x10BF,0x0C8C,0x0AE5,0x186B, ++ 0x1366,0x12DF,0x2156,0x0C82,0x05CD,0x0B25,0x08CA,0x1695,0x0FCE,0x055F, ++ 0x0D37,0x1748,0x13DB,0x1E43,0x03E7,0x0D8E,0x095E,0x0AF1,0x0103,0x02F4, ++ 0x02F8,0x01F6,0x07FD,0x095F,0x1376,0x1643,0x1350,0x1372,0x06E3,0x14D5, ++ 0x0870,0x15D9,0x20CD,0x128D,0x1878,0x0FC1,0x0907,0x127C,0x0A2C,0x0041, ++ 0x03F4,0x116C,0x02B1,0x1CEA,0x1A18,0x00FB,0x08DE,0x0660,0x06AA,0x23D1, ++ 0x0092,0x230C,0x0D91,0x14A3,0x0478,0x0FF7,0x1AF1,0x001A,0x0E69,0x1F5C, ++ 0x162C,0x19F8,0x141A,0x1FE6,0x100F,0x047F,0x1DAF,0x231E,0x236C,0x1725, ++ 0x108E,0x0290,0x1006,0x0E74,0x1C0A,0x1E35,0x1B90,0x05A7,0x1C21,0x0F1F, ++ 0x0514,0x1937,0x22A6,0x0B4A,0x1A3A,0x1217,0x0E50,0x078D,0x2198,0x1B3B, ++ 0x1A44,0x0BAB,0x2268,0x16D5,0x03F3,0x06D0,0x0523,0x1D45,0x18DB,0x0BA7, ++ 0x1DBA,0x0776,0x1CFA,0x1E13,0x0271,0x200A,0x0D9B,0x0C4B,0x0588,0x0593, ++ 0x18E4,0x082A,0x0533,0x1988,0x0317,0x1848,0x0DAB,0x2177,0x1945,0x126B, ++ 0x0842,0x07B9,0x1DE1,0x06F3,0x224E,0x0AF0,0x0026,0x0240,0x010F,0x18E7, ++ 0x0E51,0x0947,0x1C35,0x1F28,0x1688,0x07A9,0x1759,0x1608,0x1437,0x0B39, ++ 0x2009,0x0389,0x0858,0x15BE,0x08A9,0x22D4,0x0EAE,0x015F,0x0337,0x034D, ++ 0x23D9,0x081D,0x1D74,0x0C26,0x1BD9,0x0651,0x1F7B,0x2008,0x16B5,0x23A2, ++ 0x05E1,0x1325,0x1E20,0x225F,0x0DED,0x101A,0x1254,0x00A8,0x1F1C,0x1F26, ++ 0x1C8C,0x0563,0x12D2,0x0821,0x2160,0x115D,0x11EE,0x0232,0x192E,0x1BDF, ++ 0x05F3,0x0E57,0x11F3,0x044E,0x20B5,0x1BDE,0x0F25,0x0DBE,0x1361,0x1971, ++ 0x17E7,0x0C46,0x16FC,0x1B2E,0x18CB,0x23C4,0x1912,0x214C,0x0BA4,0x2392, ++ 0x1037,0x1666,0x0BBB,0x180B,0x041F,0x20FA,0x1577,0x18D7,0x0115,0x0904, ++ 0x136E,0x1867,0x0F53,0x0E2B,0x1A02,0x1FB2,0x1A9A,0x1D6C,0x0EBA,0x0BD5, ++ 0x09F8,0x083F,0x0227,0x0E89,0x1495,0x1033,0x0F07,0x0D4D,0x0B4D,0x0F6A, ++ 0x07FE,0x1AFB,0x05B0,0x1205,0x06CE,0x02D6,0x09DF,0x1A0C,0x0C3E,0x22C9, ++ 0x22E5,0x0FEB,0x0A0E,0x21E6,0x088A,0x1C64,0x10B8,0x0383,0x14F8,0x0ED4, ++ 0x05B4,0x2188,0x226B,0x025C,0x020D,0x0D0C,0x0449,0x0C81,0x0965,0x1135, ++ 0x0CC1,0x08FC,0x16E4,0x1ED1,0x1BBD,0x1BE3,0x06D9,0x00A2,0x04C3,0x0CBF, ++ 0x1324,0x2235,0x116A,0x0789,0x0198,0x05C3,0x1181,0x106C,0x1C8F,0x0984, ++ 0x1A71,0x05F9,0x1F61,0x1298,0x2310,0x0075,0x063B,0x0B71,0x10C8,0x1E6D, ++ 0x08A3,0x045C,0x1157,0x1DCE,0x0A05,0x1AAC,0x03F5,0x0DD1,0x2137,0x1200, ++ 0x0CC4,0x17DA,0x1DF7,0x06C5,0x1C07,0x1B59,0x1AD8,0x0C43,0x15A0,0x0EF0, ++ 0x0243,0x1BDA,0x1338,0x0C2F,0x132E,0x1D63,0x0969,0x23F3,0x077E,0x0991, ++ 0x1DBE,0x23C7,0x05A3,0x1253,0x1FB8,0x1BCE,0x053B,0x1B8F,0x00E3,0x20E2, ++ 0x1B61,0x22CE,0x04E8,0x17E1,0x06A3,0x04D1,0x02D3,0x23B1,0x031A,0x2045, ++ 0x1319,0x1E7F,0x20CA,0x21E9,0x0C50,0x1E8D,0x209B,0x2306,0x0A1D,0x044B, ++ 0x08A1,0x0437,0x102C,0x11F0,0x159B,0x0913,0x0A08,0x1E36,0x128F,0x06FA, ++ 0x0DF0,0x160B,0x1F2E,0x094C,0x0788,0x1309,0x1CD4,0x0599,0x179F,0x0F54, ++ 0x1362,0x1763,0x1B6C,0x0302,0x0921,0x231D,0x13F1,0x09C3,0x1348,0x12E1, ++ 0x00FA,0x1689,0x16BE,0x18AB,0x1604,0x19F1,0x21BA,0x0D6A,0x20FC,0x21D2, ++ 0x21ED,0x0663,0x0421,0x0D92,0x061A,0x165F,0x1D92,0x152E,0x070C,0x12A8, ++ 0x1C90,0x0951,0x0CE5,0x1D39,0x0B75,0x168B,0x0A61,0x23B4,0x1572,0x1E06, ++ 0x1AF9,0x0F5A,0x00CC,0x2139,0x0114,0x18FA,0x1654,0x18A9,0x0B13,0x0AF8, ++ 0x14E4,0x051C,0x098A,0x1C9C,0x0554,0x1BBE,0x0DE5,0x198E,0x1BBB,0x0BCD, ++ 0x0511,0x0E22,0x1D95,0x0C11,0x14E2,0x0108,0x1A56,0x0401,0x11B0,0x00C6, ++ 0x2165,0x0F64,0x17BF,0x0154,0x0B95,0x14A5,0x0CC8,0x1B8E,0x1D7A,0x024F, ++ 0x1762,0x1F71,0x1501,0x1844,0x15C2,0x010D,0x1092,0x0060,0x00AF,0x154D, ++ 0x0DA5,0x0DB8,0x196E,0x1EE5,0x035E,0x05D3,0x00FC,0x0BCB,0x0364,0x0CAB, ++ 0x16A3,0x23A7,0x014B,0x1536,0x0550,0x0407,0x127A,0x0A9E,0x1D64,0x0FD8, ++ 0x14D2,0x0701,0x17DC,0x0BC0,0x1BA7,0x2141,0x0CFF,0x1B31,0x0205,0x22A7, ++ 0x0C5E,0x1A09,0x11DE,0x13CE,0x08F3,0x208F,0x0015,0x2037,0x0AAF,0x057D, ++ 0x0087,0x0AFB,0x1A85,0x1A97,0x0FD7,0x12D9,0x1FED,0x1DE2,0x197F,0x22B1, ++ 0x205A,0x0544,0x0AD0,0x01DF,0x1E64,0x0AEB,0x12A6,0x0F30,0x07F1,0x1BF0, ++ 0x230A,0x0573,0x0F61,0x2386,0x1242,0x1C55,0x0DA4,0x0F43,0x22AE,0x0CC6, ++ 0x1BB5,0x0CDC,0x16A0,0x02FE,0x053F,0x008C,0x18E8,0x02CE,0x0C17,0x1B71, ++ 0x1494,0x15F0,0x0D5B,0x089C,0x0F21,0x0A87,0x10CB,0x1EEB,0x1A2D,0x1F38, ++ 0x0508,0x1C13,0x09D6,0x1B83,0x03C7,0x177B,0x0BA0,0x0760,0x00A7,0x07B8, ++ 0x0F3F,0x0070,0x163B,0x0718,0x1609,0x2313,0x1058,0x10A1,0x0DA2,0x1BD8, ++ 0x19D3,0x203D,0x09AA,0x0F0C,0x0A4D,0x22AD,0x0E9B,0x07A8,0x14F1,0x1056, ++ 0x1E74,0x0402,0x0D40,0x0D6C,0x021E,0x1756,0x0056,0x0EB1,0x0E1C,0x0206, ++ 0x0C94,0x2326,0x1F31,0x23CD,0x1BBF,0x0BB6,0x0607,0x0E0E,0x13B9,0x1724, ++ 0x03F1,0x1BCC,0x01F1,0x1624,0x129F,0x1A6D,0x22E0,0x1132,0x1AE5,0x1B69, ++ 0x00F1,0x225E,0x1E28,0x05EA,0x0F8E,0x024B,0x108F,0x0A3E,0x135D,0x0C73, ++ 0x18D3,0x1BDC,0x1E8B,0x0BAA,0x1D09,0x0305,0x22E2,0x1D7D,0x012B,0x2164, ++ 0x156F,0x0069,0x1333,0x206D,0x04F2,0x1982,0x141D,0x023D,0x0144,0x1EA0, ++ 0x2378,0x1486,0x0EC5,0x1677,0x0770,0x06B4,0x04F6,0x09BC,0x1704,0x1DEF, ++ 0x1FAF,0x22D5,0x1A34,0x21C0,0x099D,0x1BD7,0x1C47,0x1A4B,0x195E,0x0569, ++ 0x10E5,0x0BAE,0x01A4,0x220C,0x0BB9,0x1700}; ++ ++ #define MX_MTBL (sizeof(mekornd) / sizeof(unsigned short)) ++ ++ typedef struct { int n; unsigned short int r; } MKT; ++ ++ static int comp_mt(const void *s, const void *d) ++ { ++ MKT *mt1 = (MKT *)s; ++ MKT *mt2 = (MKT *)d; ++ return (int)(short)(mt1->r - mt2->r); ++ } ++ ++ MKT *calcMEKO(int n) ++ { ++ int i; ++ MKT *mt; ++ ++ if(n <= 0 || n > MX_MTBL){ ++ ErrPopUp ("Error: Over max array.", "\nOk"); ++ return(NULL); ++ } ++ ++ mt = malloc(sizeof(MKT) * n); ++ ++ if(!mt) { ++ ErrPopUp ("Error: No memory.", "\nOk"); ++ return(NULL); ++ } ++ ++ for(i = 0; i < n; i++) { ++ mt[i].r = mekornd[i]; ++ mt[i].n = i + 1; ++ } ++ qsort(mt, n, sizeof(MKT), comp_mt); ++ return(mt); ++ } diff --git a/xv-JPEG.patch b/xv-JPEG.patch new file mode 100644 index 0000000..69dc247 --- /dev/null +++ b/xv-JPEG.patch @@ -0,0 +1,107 @@ +You'll need to apply the following (trivial) patch to get XV 3.10a to compile +with version 6 of the Independent JPEG Group's JPEG library, which +supports progressive JPEG and such. + +Note that XV 3.10a is still shipped with version 5a of said library. If +you'd like the newer library, it is available for anonymous ftp at this +location: ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz + +John Bradley +----------------------------------------------------------------------------- + + +*** xvjpeg.c.old Thu Jan 5 03:17:13 1995 +--- xvjpeg.c Tue Jul 23 16:37:01 1996 +*************** +*** 51,61 **** + static void clickJD PARM((int, int)); + static void doCmd PARM((int)); + static void writeJPEG PARM((void)); +! METHODDEF void xv_error_exit PARM((j_common_ptr)); +! METHODDEF void xv_error_output PARM((j_common_ptr)); +! METHODDEF void xv_prog_meter PARM((j_common_ptr)); + static unsigned int j_getc PARM((j_decompress_ptr)); +! METHODDEF boolean xv_process_comment PARM((j_decompress_ptr)); + static int writeJFIF PARM((FILE *, byte *, int,int,int)); + + +--- 51,61 ---- + static void clickJD PARM((int, int)); + static void doCmd PARM((int)); + static void writeJPEG PARM((void)); +! METHODDEF(void) xv_error_exit PARM((j_common_ptr)); +! METHODDEF(void) xv_error_output PARM((j_common_ptr)); +! METHODDEF(void) xv_prog_meter PARM((j_common_ptr)); + static unsigned int j_getc PARM((j_decompress_ptr)); +! METHODDEF(boolean) xv_process_comment PARM((j_decompress_ptr)); + static int writeJFIF PARM((FILE *, byte *, int,int,int)); + + +*************** +*** 400,406 **** + + + /**************************************************/ +! METHODDEF void xv_error_exit(cinfo) + j_common_ptr cinfo; + { + my_error_ptr myerr; +--- 400,406 ---- + + + /**************************************************/ +! METHODDEF(void) xv_error_exit(cinfo) + j_common_ptr cinfo; + { + my_error_ptr myerr; +*************** +*** 412,418 **** + + + /**************************************************/ +! METHODDEF void xv_error_output(cinfo) + j_common_ptr cinfo; + { + my_error_ptr myerr; +--- 412,418 ---- + + + /**************************************************/ +! METHODDEF(void) xv_error_output(cinfo) + j_common_ptr cinfo; + { + my_error_ptr myerr; +*************** +*** 426,432 **** + + + /**************************************************/ +! METHODDEF void xv_prog_meter(cinfo) + j_common_ptr cinfo; + { + struct jpeg_progress_mgr *prog; +--- 426,432 ---- + + + /**************************************************/ +! METHODDEF(void) xv_prog_meter(cinfo) + j_common_ptr cinfo; + { + struct jpeg_progress_mgr *prog; +*************** +*** 671,677 **** + + + /**************************************************/ +! METHODDEF boolean xv_process_comment(cinfo) + j_decompress_ptr cinfo; + { + int length, hasnull; +--- 671,677 ---- + + + /**************************************************/ +! METHODDEF(boolean) xv_process_comment(cinfo) + j_decompress_ptr cinfo; + { + int length, hasnull; diff --git a/xv-PLD.patch b/xv-PLD.patch new file mode 100644 index 0000000..bbf843c --- /dev/null +++ b/xv-PLD.patch @@ -0,0 +1,137 @@ +diff -urN xv-3.10a.orig/Makefile xv-3.10a/Makefile +--- xv-3.10a.orig/Makefile Fri Oct 15 17:27:01 1999 ++++ xv-3.10a/Makefile Fri Oct 15 17:36:01 1999 +@@ -1,7 +1,7 @@ + # Makefile for xv + + # your C compiler (and options) of choice +-CC = cc ++CC = gcc + # CC = gcc -ansi + + # use this if you're using 'cc' on a DEC Alpha (OSF/1) or MIPS (Ultrix) system: +@@ -14,7 +14,7 @@ + # -Wuninitialized -Wparentheses + + +-CCOPTS = -O ++CCOPTS = $(RPM_OPT_FLAGS) + + + ### NOTE: Sun running OpenWindows: +@@ -45,45 +45,49 @@ + ### if, for whatever reason, you're unable to get the JPEG library to compile + ### on your machine, *COMMENT OUT* the following lines + ### +-JPEG = -DDOJPEG +-JPEGDIR = jpeg +-JPEGINC = -I$(JPEGDIR) +-JPEGLIB = $(JPEGDIR)/libjpeg.a +-$(JPEGDIR)/jconfig.h: +- cd $(JPEGDIR) ; ./configure CC='$(CC)' +-$(JPEGLIB): $(JPEGDIR)/jconfig.h +- cd $(JPEGDIR) ; make ++#JPEG = -DDOJPEG ++#JPEGDIR = jpeg ++#JPEGINC = -I$(JPEGDIR) ++#JPEGLIB = $(JPEGDIR)/libjpeg.a ++#$(JPEGDIR)/jconfig.h: ++# cd $(JPEGDIR) ; ./configure CC='$(CC)' ++#$(JPEGLIB): $(JPEGDIR)/jconfig.h ++# cd $(JPEGDIR) ; make ++JPEGLIB = -ljpeg + + + ### + ### if, for whatever reason, you're unable to get the PNG library to compile + ### on your machine, *COMMENT OUT* the following lines + ### +-PNG = -DDOPNG +-PNGDIR = /usr/local/src/libpng +-PNGINC = -I$(PNGDIR) +-PNGLIB = -L$(PNGDIR) -lpng ++#PNG = -DDOPNG ++#PNGDIR = /usr/local/src/libpng ++#PNGINC = -I$(PNGDIR) ++#PNGLIB = -L$(PNGDIR) -lpng ++PNGLIB = -lpng + + + ### + ### if, for whatever reason, you're unable to get the PNG library to compile + ### on your machine, *COMMENT OUT* the following lines + ### +-ZLIBDIR = /usr/local/src/zlib +-ZLIBINC = -I$(ZLIBDIR) +-ZLIBLIB = -L$(ZLIBDIR) -lz ++#ZLIBDIR = /usr/local/src/zlib ++#ZLIBINC = -I$(ZLIBDIR) ++#ZLIBLIB = -L$(ZLIBDIR) -lz ++ZLIBLIB = -lz + + + ### + ### if, for whatever reason, you're unable to get the TIFF library to compile + ### on your machine, *COMMENT OUT* the following lines + ### +-TIFF = -DDOTIFF +-TIFFDIR = tiff +-TIFFINC = -I$(TIFFDIR) +-TIFFLIB = $(TIFFDIR)/libtiff.a +-$(TIFFLIB): +- ( cd $(TIFFDIR) ; make CC='$(CC)' ) ++#TIFF = -DDOTIFF ++#TIFFDIR = tiff ++#TIFFINC = -I$(TIFFDIR) ++#TIFFLIB = $(TIFFDIR)/libtiff.a ++#$(TIFFLIB): ++# ( cd $(TIFFDIR) ; make CC='$(CC)' ) ++TIFFLIB = -ltiff + + + ### +@@ -121,7 +125,7 @@ + + + ### for LINUX, uncomment the following line +-#MCHN = -DLINUX ++MCHN = -DLINUX + + + # For SCO 1.1 (UNIX 3.2v2) machines, uncomment the following: +@@ -207,7 +211,7 @@ + $(NODIRENT) $(VPRINTF) $(TIMERS) $(UNIX) $(BSDTYPES) $(RAND) \ + $(DXWM) $(MCHN) $(PNG) $(PNGINC) $(ZLIBINC) + +-LIBS = -lX11 $(JPEGLIB) $(TIFFLIB) $(PNGLIB) $(ZLIBLIB) -lm ++LIBS = -lX11 $(JPEGLIB) $(TIFFLIB) $(PNGLIB) $(ZLIBLIB) -lm -L/usr/X11R6/lib + + OBJS = xv.o xvevent.o xvroot.o xvmisc.o xvimage.o xvcolor.o xvsmooth.o \ + xv24to8.o xvgif.o xvpm.o xvinfo.o xvctrl.o xvscrl.o xvalg.o \ +@@ -226,10 +230,10 @@ + + + +-all: $(JPEGLIB) $(TIFFLIB) xv bggen vdcomp xcmap xvpictoppm ++all: xv bggen vdcomp xcmap xvpictoppm + + +-xv: $(OBJS) $(JPEGLIB) $(TIFFLIB) ++xv: $(OBJS) + $(CC) -o xv $(CFLAGS) $(OBJS) $(LIBS) + + bggen: bggen.c +diff -urN xv-3.10a.orig/xv.h xv-3.10a/xv.h +--- xv-3.10a.orig/xv.h Fri Oct 15 17:27:01 1999 ++++ xv-3.10a/xv.h Fri Oct 15 17:33:35 1999 +@@ -115,10 +115,6 @@ + + #ifndef VMS + # include +- extern int errno; /* SHOULD be in errno.h, but often isn't */ +-# ifndef __NetBSD__ +- extern char *sys_errlist[]; /* this too... */ +-# endif + #endif + + diff --git a/xv-TIFF.patch b/xv-TIFF.patch new file mode 100644 index 0000000..935baa7 --- /dev/null +++ b/xv-TIFF.patch @@ -0,0 +1,101 @@ +The following patch should allow you to compile XV 3.10a against the latest +version of Sam Leffler's TIFF Library (libtiff 3.4). + +You do *not* need to apply this patch to compile XV 3.10a against the +older version of the TIFF library (3.3) that is included in the XV +3.10a distribution. This is only necessary if you wish to upgrade to +the newer version of the TIFF library. + +You can get the latest version of the TIFF library via anonymous ftp on +ftp.sgi.com, in 'graphics/tiff'. + +Thanks to Dan McCoy (mccoy@pixar.com) for supplying this patch! + +John Bradley +----------------------------------------------------------------------- + + +*** xvtiff.c.orig Fri Jan 13 14:53:34 1995 +--- xvtiff.c Thu Sep 5 16:55:46 1996 +*************** +*** 301,306 **** +--- 301,310 ---- + static byte **BWmap; + static byte **PALmap; + ++ /* XXXX Work around some collisions with the new library. */ ++ #define tileContigRoutine _tileContigRoutine ++ #define tileSeparateRoutine _tileSeparateRoutine ++ + typedef void (*tileContigRoutine) PARM((byte*, u_char*, RGBvalue*, + uint32, uint32, int, int)); + +*************** +*** 340,346 **** + uint32, uint32, int, int)); + static void put4bitbwtile PARM((byte *, u_char *, RGBvalue *, + uint32, uint32, int, int)); +! static void put16bitbwtile PARM((byte *, u_char *, RGBvalue *, + uint32, uint32, int, int)); + + static void putRGBcontig8bittile PARM((byte *, u_char *, RGBvalue *, +--- 344,350 ---- + uint32, uint32, int, int)); + static void put4bitbwtile PARM((byte *, u_char *, RGBvalue *, + uint32, uint32, int, int)); +! static void put16bitbwtile PARM((byte *, u_short *, RGBvalue *, + uint32, uint32, int, int)); + + static void putRGBcontig8bittile PARM((byte *, u_char *, RGBvalue *, +*************** +*** 1218,1224 **** + */ + static void put16bitbwtile(cp, pp, Map, w, h, fromskew, toskew) + byte *cp; +! u_char *pp; + RGBvalue *Map; + uint32 w, h; + int fromskew, toskew; +--- 1222,1228 ---- + */ + static void put16bitbwtile(cp, pp, Map, w, h, fromskew, toskew) + byte *cp; +! u_short *pp; + RGBvalue *Map; + uint32 w, h; + int fromskew, toskew; +*************** +*** 1227,1234 **** + + while (h-- > 0) { + for (x=w; x>0; x--) { +! *cp++ = Map[(pp[0] << 8) + pp[1]]; +! pp += 2; + } + cp += toskew; + pp += fromskew; +--- 1231,1237 ---- + + while (h-- > 0) { + for (x=w; x>0; x--) { +! *cp++ = Map[*pp++]; + } + cp += toskew; + pp += fromskew; +*************** +*** 1514,1520 **** + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + switch (bitspersample) { +! case 16: put = put16bitbwtile; break; + case 8: put = putgreytile; break; + case 4: put = put4bitbwtile; break; + case 2: put = put2bitbwtile; break; +--- 1517,1523 ---- + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + switch (bitspersample) { +! case 16: put = (tileContigRoutine) put16bitbwtile; break; + case 8: put = putgreytile; break; + case 4: put = put4bitbwtile; break; + case 2: put = put2bitbwtile; break; diff --git a/xv-croppad.patch b/xv-croppad.patch new file mode 100644 index 0000000..85914c4 --- /dev/null +++ b/xv-croppad.patch @@ -0,0 +1,89 @@ +As pointed out by long-time Friend-of-XV Rick Dyson, the XV 3.10a does an +unexpected thing if you crop an image, and then 'pad' it. 3.10a would +effectively 'UnCrop' the image first, then pad it. There is a workaround +(save and reload the cropped image), but that's every bit as tedious as it +sounds. + +This should do the trick, with any luck. + +--jhb, 7/9/98 + + + + +*** xvimage.c.old Fri Jul 10 01:18:07 1998 +--- xvimage.c Fri Jul 10 01:21:57 1998 +*************** +*** 2530,2536 **** + + rv = 1; + +! if ((mode != PAD_LOAD) && (wide == pWIDE && high == pHIGH && opaque==100)) { + ErrPopUp("Padding to same size as pic while fully opaque has no effect.", + "\nI see"); + return 0; +--- 2530,2536 ---- + + rv = 1; + +! if ((mode != PAD_LOAD) && (wide == cWIDE && high == cHIGH && opaque==100)) { + ErrPopUp("Padding to same size as pic while fully opaque has no effect.", + "\nI see"); + return 0; +*************** +*** 2806,2832 **** + + /* copy 'pic' centered onto pic24. */ + +! sx = (wide - pWIDE) / 2; +! sy = (high - pHIGH) / 2; + +! for (py = 0; py= 0 && p24y < high) { +! for (px=0; px= 0 && p24x < wide) { + p24 = pic24 + (p24y*wide + p24x)*3; + + + if (picType == PIC24) { /* src is PIC24 */ +! pp = pic + (py * pWIDE + px) *3; + r = pp[0]; g = pp[1]; b = pp[2]; + } + else { /* src is PIC8 */ +! pp = pic + (py*pWIDE + px); + r = rMap[*pp]; g = gMap[*pp]; b = bMap[*pp]; + } + +--- 2806,2832 ---- + + /* copy 'pic' centered onto pic24. */ + +! sx = (wide - cWIDE) / 2; +! sy = (high - cHIGH) / 2; + +! for (py = 0; py= 0 && p24y < high) { +! for (px=0; px= 0 && p24x < wide) { + p24 = pic24 + (p24y*wide + p24x)*3; + + + if (picType == PIC24) { /* src is PIC24 */ +! pp = cpic + (py * cWIDE + px) *3; + r = pp[0]; g = pp[1]; b = pp[2]; + } + else { /* src is PIC8 */ +! pp = cpic + (py*cWIDE + px); + r = rMap[*pp]; g = gMap[*pp]; b = bMap[*pp]; + } + diff --git a/xv-deepcolor.patch b/xv-deepcolor.patch new file mode 100644 index 0000000..81aed78 --- /dev/null +++ b/xv-deepcolor.patch @@ -0,0 +1,54 @@ +This fixes a byte-ordering problem when displaying 8-bit colormapped images +on certain 12, 15, or 16-bit displays. + +Thanks to Mr. Ryo Shimizu for coming up with the patch, and to Yuuki Harano +for sending it to me. + +--jhb + +*** xvimage.c.old Fri Jan 13 19:11:36 1995 +--- xvimage.c Fri Oct 16 12:34:11 1998 +*************** +*** 1736,1745 **** + if (xim->byte_order == MSBFirst) { + for (i=wide*high, ip=imagedata; i>0; i--,pp++) { + if (((i+1)&0x1ffff) == 0) WaitCursor(); +! if (dithpic) { +! *ip++ = ((*pp) ? white : black) & 0xffff; +! } +! else *ip++ = xcolors[*pp] & 0xffff; + } + } + else { /* LSBFirst */ +--- 1736,1747 ---- + if (xim->byte_order == MSBFirst) { + for (i=wide*high, ip=imagedata; i>0; i--,pp++) { + if (((i+1)&0x1ffff) == 0) WaitCursor(); +! +! if (dithpic) xcol = ((*pp) ? white : black) & 0xffff; +! else xcol = xcolors[*pp] & 0xffff; +! +! *((unsigned char *)ip)++ = (xcol>>8) & 0xff; +! *((unsigned char *)ip)++ = (xcol) & 0xff; + } + } + else { /* LSBFirst */ +*************** +*** 1749,1756 **** + if (dithpic) xcol = ((*pp) ? white : black) & 0xffff; + else xcol = xcolors[*pp]; + +! /* WAS *ip++ = ((xcol>>8) & 0xff) | ((xcol&0xff) << 8); */ +! *ip++ = (unsigned short) (xcol); + } + } + } +--- 1751,1758 ---- + if (dithpic) xcol = ((*pp) ? white : black) & 0xffff; + else xcol = xcolors[*pp]; + +! *((unsigned char *)ip)++ = (xcol) & 0xff; +! *((unsigned char *)ip)++ = (xcol>>8) & 0xff; + } + } + } diff --git a/xv-exceed_grab_patch.txt b/xv-exceed_grab_patch.txt new file mode 100644 index 0000000..74a23d4 --- /dev/null +++ b/xv-exceed_grab_patch.txt @@ -0,0 +1,108 @@ +This patch fixes an inability to GRAB or display XWD files on the eXceed +X server running in 24-bits. It may also fix GRAB problems on other X +servers. It shouldn't *break* anything, and as such, can and should be +applied by everybody. + +The bits_per_item of the returned XImage is less than bits_per_pixel, which +is wrong, as far as I can tell. (Hard to really know, as the X11 docs aren't +at *all* clear on the subject.) I do know that it breaks my code, and the netpbm +code, and god only knows what else. + +Maybe they're wrong, maybe I'm wrong - who knows. In any event, this patch +fixes it, as far as XV is concerned. + +Thanks to Nadim Saeed (nadim@xlnt.com)! + +--jhb + + + +*** xvgrab.c.orig Thu Oct 7 10:41:15 1999 +--- xvgrab.c Thu Oct 7 12:03:36 1999 +*************** +*** 641,648 **** + + + bits_per_item = image->bitmap_unit; +- bits_used = bits_per_item; + bits_per_pixel = image->bits_per_pixel; + + if (bits_per_pixel == 32) pixmask = 0xffffffff; + else pixmask = (((CARD32) 1) << bits_per_pixel) - 1; +--- 641,667 ---- + + + bits_per_item = image->bitmap_unit; + bits_per_pixel = image->bits_per_pixel; ++ ++ ++ /* add code for freako 'exceed' server, where bitmapunit = 8 ++ and bitsperpix = 32 (and depth=24)... */ ++ ++ if (bits_per_item < bits_per_pixel) { ++ bits_per_item = bits_per_pixel; ++ ++ /* round bits_per_item up to next legal value, if necc */ ++ if (bits_per_item < 8) bits_per_item = 8; ++ else if (bits_per_item < 16) bits_per_item = 16; ++ else bits_per_item = 32; ++ } ++ ++ ++ /* which raises the question: how (can?) you ever have a 24 bits per pix, ++ (ie, 3 bytes, no alpha/padding) */ ++ ++ ++ bits_used = bits_per_item; /* so it will get a new item first time */ + + if (bits_per_pixel == 32) pixmask = 0xffffffff; + else pixmask = (((CARD32) 1) << bits_per_pixel) - 1; + + + +*** xvxwd.c.orig Thu Oct 7 12:13:09 1999 +--- xvxwd.c Thu Oct 7 12:13:13 1999 +*************** +*** 396,406 **** + h11P->pixmap_width; + + bits_per_item = h11P->bitmap_unit; +- bits_used = bits_per_item; + bits_per_pixel = h11P->bits_per_pixel; + byte_order = h11P->byte_order; + bit_order = h11P->bitmap_bit_order; + + if (bits_per_pixel == sizeof(pixel_mask) * 8) pixel_mask = (CARD32) -1; + else pixel_mask = (1 << bits_per_pixel) - 1; + +--- 396,425 ---- + h11P->pixmap_width; + + bits_per_item = h11P->bitmap_unit; + bits_per_pixel = h11P->bits_per_pixel; + byte_order = h11P->byte_order; + bit_order = h11P->bitmap_bit_order; + ++ ++ /* add sanity-code for freako 'exceed' server, where bitmapunit = 8 ++ and bitsperpix = 32 (and depth=24)... */ ++ ++ if (bits_per_item < bits_per_pixel) { ++ bits_per_item = bits_per_pixel; ++ ++ /* round bits_per_item up to next legal value, if necc */ ++ if (bits_per_item < 8) bits_per_item = 8; ++ else if (bits_per_item < 16) bits_per_item = 16; ++ else bits_per_item = 32; ++ } ++ ++ ++ /* which raises the question: how (can?) you ever have a 24 bits per pix, ++ (ie, 3 bytes, no alpha/padding) */ ++ ++ ++ bits_used = bits_per_item; ++ + if (bits_per_pixel == sizeof(pixel_mask) * 8) pixel_mask = (CARD32) -1; + else pixel_mask = (1 << bits_per_pixel) - 1; + diff --git a/xv-gifpatch b/xv-gifpatch new file mode 100644 index 0000000..dd30a8a --- /dev/null +++ b/xv-gifpatch @@ -0,0 +1,49 @@ +This patch fixes a bug in XVs gif-reading code. The bug could conceivably +hit when viewing a number of interlaced GIFs. Thanks to Mark Hanson + for spotting this one. + +--jhb, 10/29/98 + + +*** xvgif.c.old Tue Jan 10 14:54:41 1995 +--- xvgif.c Thu Oct 29 17:43:30 1998 +*************** +*** 113,119 **** + int aspect, gotimage; + + /* initialize variables */ +! BitOffset = XC = YC = Pass = OutCount = gotimage = 0; + RawGIF = Raster = pic8 = NULL; + gif89 = 0; + +--- 113,120 ---- + int aspect, gotimage; + + /* initialize variables */ +! BitOffset = XC = YC = OutCount = gotimage = 0; +! Pass = -1; + RawGIF = Raster = pic8 = NULL; + gif89 = 0; + +*************** +*** 692,698 **** + { + static byte *ptr = NULL; + static int oldYC = -1; +! + if (oldYC != YC) { ptr = pic8 + YC * Width; oldYC = YC; } + + if (YC +Subject: bug in xv visual schnauzer + +while using xv's visual schnauzer, I ran across some problems with rather +long file names. Namely these were (spurious) segmentation faults when +generation icons or selecting icons with the rubber-band. +The problem turned out to be a strncpy() without appending a terminating +null byte in case the limiting length was reached. Appended to this mail +you'll find a set of context diffs where this specific and other possible +occurances of the same bug are fixed. +I think it will be not too hard to integrate the patches into your actual +working version if patch should fail on them. Speaking of which, when do +you think we can expect a new (bigger, better, etc.) version of xv? + +Ciao + Michael + +---*snip*---*snip*---*snip*-- + +diff -ru /tmp/xv-3.10a.orig/xvbrowse.c xv-3.10a/xvbrowse.c +--- /tmp/xv-3.10a.orig/xvbrowse.c Thu Jan 19 18:49:17 1995 ++++ xv-3.10a/xvbrowse.c Mon Feb 5 23:46:28 1996 +@@ -956,6 +956,7 @@ + char *str; + { + strncpy(br->dispstr, str, (size_t) 256); ++ br->dispstr[255] = '\0'; + drawBrowStr(br); + XFlush(theDisp); + } +@@ -1490,6 +1491,7 @@ + if (StringWidth(str) > ISPACE_WIDE-6) { + int dotpos; + strncpy(tmpstr, str, (size_t) 56); ++ tmpstr[56] = '\0'; /* MR: otherwise it dies on long file names */ + dotpos = strlen(tmpstr); + strcat(tmpstr,"..."); + +@@ -1505,7 +1507,7 @@ + nstr = tmpstr; + } + else nstr = str; +- ++ + + /* draw the title */ + sw = StringWidth(nstr); +diff -ru /tmp/xv-3.10a.orig/xvdir.c xv-3.10a/xvdir.c +--- /tmp/xv-3.10a.orig/xvdir.c Tue Jan 3 22:21:39 1995 ++++ xv-3.10a/xvdir.c Mon Feb 5 21:49:21 1996 +@@ -1200,6 +1200,7 @@ + char *st; + { + strncpy(deffname, st, (size_t) MAXFNLEN-1); ++ deffname[MAXFNLEN-1] = '\0'; + setFName(st); + } + +diff -ru /tmp/xv-3.10a.orig/xvpopup.c xv-3.10a/xvpopup.c +--- /tmp/xv-3.10a.orig/xvpopup.c Thu Jan 19 19:09:31 1995 ++++ xv-3.10a/xvpopup.c Mon Feb 5 21:50:13 1996 +@@ -560,6 +560,7 @@ + nams[*lenp] = (char *) malloc((size_t) 32); + if (!nams[*lenp]) { free(vals[*lenp]); continue; } + strncpy(nams[*lenp], vals[*lenp], (size_t) 31); ++ nams[*lenp][31] = '\0'; + } + + if (strlen(nams[*lenp]) > (size_t) 20) { /* fix long names */ +diff -ru /tmp/xv-3.10a.orig/xvtext.c xv-3.10a/xvtext.c +--- /tmp/xv-3.10a.orig/xvtext.c Sat Jan 14 00:46:28 1995 ++++ xv-3.10a/xvtext.c Mon Feb 5 21:50:54 1996 +@@ -293,6 +293,7 @@ + tv->textlen = len; + tv->freeonclose = freeonclose; + strncpy(tv->title, title, (size_t) TITLELEN-1); ++ tv->title[TITLELEN-1] = '\0'; + + computeText(tv); /* compute # lines and linestarts array */ + +---*snap*---*snap*---*snap*-- diff --git a/xv-mp-tiff-patch b/xv-mp-tiff-patch new file mode 100644 index 0000000..cb0e298 --- /dev/null +++ b/xv-mp-tiff-patch @@ -0,0 +1,570 @@ +This patch adds multi-page TIFF support to XV 3.10a + + +diff -r -c ../xv-3.10a/xv.c ./xv.c +*** ../xv-3.10a/xv.c Thu Jan 19 13:08:43 1995 +--- ./xv.c Mon Apr 14 18:21:48 1997 +*************** +*** 2668,2674 **** + #endif + + #ifdef HAVE_TIFF +! case RFT_TIFF: rv = LoadTIFF (fname, pinfo); break; + #endif + + #ifdef HAVE_PDS +--- 2668,2674 ---- + #endif + + #ifdef HAVE_TIFF +! case RFT_TIFF: rv = LoadTIFF (fname, pinfo, quick); break; + #endif + + #ifdef HAVE_PDS + + +*** ../xv-3.10a/xv.h Mon Jan 23 15:22:23 1995 +--- ./xv.h Mon Apr 14 18:22:52 1997 +*************** +*** 1248,1253 **** +--- 1248,1254 ---- + void xv_getwd PARM((char *, size_t)); + char *xv_strstr PARM((char *, char *)); + FILE *xv_fopen PARM((char *, char *)); ++ void xv_mktemp PARM((char *, char *)); + void Timer PARM((int)); + + /*************************** XVCOLOR.C ***************************/ +*************** +*** 1607,1613 **** + void JPEGSaveParams PARM((char *, int)); + + /**************************** XVTIFF.C ***************************/ +! int LoadTIFF PARM((char *, PICINFO *)); + void CreateTIFFW PARM((void)); + void TIFFDialog PARM((int)); + int TIFFCheckEvent PARM((XEvent *)); +--- 1608,1614 ---- + void JPEGSaveParams PARM((char *, int)); + + /**************************** XVTIFF.C ***************************/ +! int LoadTIFF PARM((char *, PICINFO *, int)); + void CreateTIFFW PARM((void)); + void TIFFDialog PARM((int)); + int TIFFCheckEvent PARM((XEvent *)); + + +*** ../xv-3.10a/xvmisc.c Fri Jan 13 18:41:34 1995 +--- ./xvmisc.c Mon Apr 14 18:21:48 1997 +*************** +*** 28,33 **** +--- 28,35 ---- + * int xvbcmp (s1, s2, length) + * void xvbzero(s, length) + * char *xv_strstr(s1, s2) ++ * FILE *xv_fopen(str, str) ++ * void xv_mktemp(str) + * void Timer(milliseconds) + */ + +*************** +*** 1066,1071 **** +--- 1068,1083 ---- + } + + ++ /***************************************************/ ++ void xv_mktemp(buf, fname) ++ char *buf, *fname; ++ { ++ #ifndef VMS ++ sprintf(buf, "%s/%s", tmpdir, fname); ++ #else ++ sprintf(buf, "Sys$Disk:[]%s", fname); ++ #endif ++ } + + + /*******/ + + +*** ../xv-3.10a/xvtiff.c Fri Jan 13 14:53:34 1995 +--- ./xvtiff.c Mon Apr 14 18:21:48 1997 +*************** +*** 1,7 **** + /* + * xvtiff.c - load routine for 'TIFF' format pictures + * +! * LoadTIFF(fname, numcols) - load a TIFF file + */ + + #ifndef va_start +--- 1,7 ---- + /* + * xvtiff.c - load routine for 'TIFF' format pictures + * +! * LoadTIFF(fname, numcols, quick) - load a TIFF file + */ + + #ifndef va_start +*************** +*** 15,20 **** +--- 15,49 ---- + #include "tiffio.h" /* has to be after xv.h, as it needs varargs/stdarg */ + + ++ /* Portions fall under the following copyright: ++ * ++ * Copyright (c) 1992, 1993, 1994 Sam Leffler ++ * Copyright (c) 1992, 1993, 1994 Silicon Graphics, Inc. ++ * ++ * Permission to use, copy, modify, distribute, and sell this software and ++ * its documentation for any purpose is hereby granted without fee, provided ++ * that (i) the above copyright notices and this permission notice appear in ++ * all copies of the software and related documentation, and (ii) the names of ++ * Sam Leffler and Silicon Graphics may not be used in any advertising or ++ * publicity relating to the software without the specific, prior written ++ * permission of Sam Leffler and Silicon Graphics. ++ * ++ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY ++ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. ++ * ++ * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR ++ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, ++ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ++ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF ++ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE ++ * OF THIS SOFTWARE. ++ */ ++ ++ ++ static int copyTiff PARM((TIFF *, char *)); ++ static int cpStrips PARM((TIFF *, TIFF *)); ++ static int cpTiles PARM((TIFF *, TIFF *)); + static byte *loadPalette PARM((TIFF *, uint32, uint32, int, int, PICINFO *)); + static byte *loadColor PARM((TIFF *, uint32, uint32, int, int, PICINFO *)); + static int loadImage PARM((TIFF *, uint32, uint32, byte *, int)); +*************** +*** 28,46 **** + static int error_occurred; + + /*******************************************/ +! int LoadTIFF(fname, pinfo) +! char *fname; + PICINFO *pinfo; + /*******************************************/ + { + /* returns '1' on success, '0' on failure */ + + TIFF *tif; + uint32 w, h; + short bps, spp, photo, orient; + FILE *fp; + byte *pic8; + char *desc, oldpath[MAXPATHLEN+1], tmppath[MAXPATHLEN+1], *sp; + + error_occurred = 0; + +--- 57,79 ---- + static int error_occurred; + + /*******************************************/ +! int LoadTIFF(fname, pinfo, quick) +! char *fname; + PICINFO *pinfo; ++ int quick; + /*******************************************/ + { + /* returns '1' on success, '0' on failure */ + + TIFF *tif; + uint32 w, h; ++ float xres, yres; + short bps, spp, photo, orient; + FILE *fp; + byte *pic8; + char *desc, oldpath[MAXPATHLEN+1], tmppath[MAXPATHLEN+1], *sp; ++ char tmp[256], tmpname[256]; ++ int i, nump; + + error_occurred = 0; + +*************** +*** 60,65 **** +--- 93,100 ---- + filesize = ftell(fp); + fclose(fp); + ++ ++ + rmap = pinfo->r; gmap = pinfo->g; bmap = pinfo->b; + + /* a kludge: temporarily cd to the directory that the file is in (if +*************** +*** 81,89 **** + } + } + + + +! tif=TIFFOpen(filename,"r"); + if (!tif) return 0; + + /* flip orientation so that image comes in X order */ +--- 116,172 ---- + } + } + ++ ++ nump = 1; ++ ++ if (!quick) { ++ /* see if there's more than 1 image in tiff file, to determine if we ++ should do multi-page thing... */ ++ ++ tif = TIFFOpen(filename,"r"); ++ if (!tif) return 0; ++ while (TIFFReadDirectory(tif)) nump++; ++ TIFFClose(tif); ++ if (DEBUG) ++ fprintf(stderr,"LoadTIFF: %d page%s found\n", nump, nump==1 ? "" : "s"); ++ ++ ++ /* if there are multiple images, copy them out to multiple tmp files, ++ and load the first one... */ ++ ++ xv_mktemp(tmpname, "xvpgXXXXXX"); ++ ++ if (tmpname[0] == '\0') { /* mktemp() blew up */ ++ sprintf(str,"LoadTIFF: Unable to create temporary filename???"); ++ ErrPopUp(str, "\nHow unlikely!"); ++ return 0; ++ } + ++ if (nump>1) { ++ TIFF *in, *out; ++ ++ in = TIFFOpen(filename, "r"); ++ if (!in) return 0; ++ for (i=1; i<=nump; i++) { ++ sprintf(tmp, "%s%d", tmpname, i); ++ if (!copyTiff(in, tmp)) { ++ SetISTR(ISTR_WARNING, "LoadTIFF: Error writing page files!"); ++ break; ++ } ++ ++ if (!TIFFReadDirectory(in)) break; ++ } ++ if (DEBUG) ++ fprintf(stderr,"LoadTIFF: %d page%s written\n", ++ i-1, (i-1)==1 ? "" : "s"); ++ ++ sprintf(tmp, "%s%d", tmpname, 1); /* open page #1 */ ++ filename = tmp; ++ } ++ } /* if (!quick) ... */ + +! +! tif = TIFFOpen(filename,"r"); + if (!tif) return 0; + + /* flip orientation so that image comes in X order */ +*************** +*** 107,112 **** +--- 190,200 ---- + TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bps); + TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photo); + TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &spp); ++ if ((TIFFGetField(tif, TIFFTAG_XRESOLUTION, &xres) == 1) && ++ (TIFFGetField(tif, TIFFTAG_YRESOLUTION, &yres) == 1)) { ++ normaspect = yres / xres; ++ if (DEBUG) fprintf(stderr,"TIFF aspect = %f\n", normaspect); ++ } + + if (spp == 1) { + pic8 = loadPalette(tif, w, h, photo, bps, pinfo); +*************** +*** 139,144 **** +--- 227,234 ---- + if (pic8) free(pic8); + if (pinfo->comment) free(pinfo->comment); + pinfo->comment = (char *) NULL; ++ if (!quick && nump>1) KillPageFiles(tmpname, nump); ++ SetCursors(-1); + return 0; + } + +*************** +*** 148,164 **** +--- 238,404 ---- + pinfo->normw = pinfo->w; pinfo->normh = pinfo->h; + pinfo->frmType = F_TIFF; + ++ if (nump>1) strcpy(pinfo->pagebname, tmpname); ++ pinfo->numpages = nump; + + if (pinfo->pic) return 1; + ++ + /* failed. if we malloc'd a comment, free it */ + if (pinfo->comment) free(pinfo->comment); + pinfo->comment = (char *) NULL; + ++ if (!quick && nump>1) KillPageFiles(tmpname, nump); ++ SetCursors(-1); ++ + return 0; + } + + ++ ++ ++ /*******************************************/ ++ ++ #define CopyField(tag, v) \ ++ if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) ++ #define CopyField2(tag, v1, v2) \ ++ if (TIFFGetField(in, tag, &v1, &v2)) TIFFSetField(out, tag, v1, v2) ++ #define CopyField3(tag, v1, v2, v3) \ ++ if (TIFFGetField(in, tag, &v1, &v2, &v3)) TIFFSetField(out, tag, v1, v2, v3) ++ ++ ++ /*******************************************/ ++ static int copyTiff(in, fname) ++ TIFF *in; ++ char *fname; ++ { ++ /* copies tiff image to given filename. Returns 0 on error */ ++ ++ TIFF *out; ++ short bitspersample, samplesperpixel, shortv, *shortav; ++ uint32 w, l; ++ float floatv; ++ char *stringv; ++ uint32 longv; ++ uint16 *red, *green, *blue, shortv2; ++ int rv; ++ ++ out = TIFFOpen(fname, "w"); ++ if (!out) return 0; ++ ++ CopyField (TIFFTAG_SUBFILETYPE, longv); ++ CopyField (TIFFTAG_TILEWIDTH, w); ++ CopyField (TIFFTAG_TILELENGTH, l); ++ CopyField (TIFFTAG_IMAGEWIDTH, w); ++ CopyField (TIFFTAG_IMAGELENGTH, l); ++ CopyField (TIFFTAG_BITSPERSAMPLE, bitspersample); ++ CopyField (TIFFTAG_COMPRESSION, shortv); ++ CopyField (TIFFTAG_PREDICTOR, shortv); ++ CopyField (TIFFTAG_PHOTOMETRIC, shortv); ++ CopyField (TIFFTAG_THRESHHOLDING, shortv); ++ CopyField (TIFFTAG_FILLORDER, shortv); ++ CopyField (TIFFTAG_ORIENTATION, shortv); ++ CopyField (TIFFTAG_SAMPLESPERPIXEL, samplesperpixel); ++ CopyField (TIFFTAG_MINSAMPLEVALUE, shortv); ++ CopyField (TIFFTAG_MAXSAMPLEVALUE, shortv); ++ CopyField (TIFFTAG_XRESOLUTION, floatv); ++ CopyField (TIFFTAG_YRESOLUTION, floatv); ++ CopyField (TIFFTAG_GROUP3OPTIONS, longv); ++ CopyField (TIFFTAG_GROUP4OPTIONS, longv); ++ CopyField (TIFFTAG_RESOLUTIONUNIT, shortv); ++ CopyField (TIFFTAG_PLANARCONFIG, shortv); ++ CopyField (TIFFTAG_ROWSPERSTRIP, longv); ++ CopyField (TIFFTAG_XPOSITION, floatv); ++ CopyField (TIFFTAG_YPOSITION, floatv); ++ CopyField (TIFFTAG_IMAGEDEPTH, longv); ++ CopyField (TIFFTAG_TILEDEPTH, longv); ++ CopyField2(TIFFTAG_EXTRASAMPLES, shortv, shortav); ++ CopyField3(TIFFTAG_COLORMAP, red, green, blue); ++ CopyField2(TIFFTAG_PAGENUMBER, shortv, shortv2); ++ CopyField (TIFFTAG_ARTIST, stringv); ++ CopyField (TIFFTAG_IMAGEDESCRIPTION,stringv); ++ CopyField (TIFFTAG_MAKE, stringv); ++ CopyField (TIFFTAG_MODEL, stringv); ++ CopyField (TIFFTAG_SOFTWARE, stringv); ++ CopyField (TIFFTAG_DATETIME, stringv); ++ CopyField (TIFFTAG_HOSTCOMPUTER, stringv); ++ CopyField (TIFFTAG_PAGENAME, stringv); ++ CopyField (TIFFTAG_DOCUMENTNAME, stringv); ++ ++ if (TIFFIsTiled(in)) rv = cpTiles (in, out); ++ else rv = cpStrips(in, out); ++ ++ TIFFClose(out); ++ return rv; ++ } ++ ++ ++ /*******************************************/ ++ static int cpStrips(in, out) ++ TIFF *in, *out; ++ { ++ tsize_t bufsize; ++ byte *buf; ++ ++ bufsize = TIFFStripSize(in); ++ buf = (byte *) malloc((size_t) bufsize); ++ if (buf) { ++ tstrip_t s, ns = TIFFNumberOfStrips(in); ++ uint32 *bytecounts; ++ ++ TIFFGetField(in, TIFFTAG_STRIPBYTECOUNTS, &bytecounts); ++ for (s = 0; s < ns; s++) { ++ if (bytecounts[s] > bufsize) { ++ buf = (unsigned char *) realloc(buf, (size_t) bytecounts[s]); ++ if (!buf) return (0); ++ bufsize = bytecounts[s]; ++ } ++ if (TIFFReadRawStrip (in, s, buf, (tsize_t) bytecounts[s]) < 0 || ++ TIFFWriteRawStrip(out, s, buf, (tsize_t) bytecounts[s]) < 0) { ++ free(buf); ++ return 0; ++ } ++ } ++ free(buf); ++ return 1; ++ } ++ return 0; ++ } ++ ++ ++ /*******************************/ ++ static int cpTiles(in, out) ++ TIFF *in, *out; ++ { ++ tsize_t bufsize; ++ byte *buf; ++ ++ bufsize = TIFFTileSize(in); ++ buf = (unsigned char *) malloc((size_t) bufsize); ++ if (buf) { ++ ttile_t t, nt = TIFFNumberOfTiles(in); ++ uint32 *bytecounts; ++ ++ TIFFGetField(in, TIFFTAG_TILEBYTECOUNTS, &bytecounts); ++ for (t = 0; t < nt; t++) { ++ if (bytecounts[t] > bufsize) { ++ buf = (unsigned char *)realloc(buf, (size_t) bytecounts[t]); ++ if (!buf) return (0); ++ bufsize = bytecounts[t]; ++ } ++ if (TIFFReadRawTile (in, t, buf, (tsize_t) bytecounts[t]) < 0 || ++ TIFFWriteRawTile(out, t, buf, (tsize_t) bytecounts[t]) < 0) { ++ free(buf); ++ return 0; ++ } ++ } ++ free(buf); ++ return 1; ++ } ++ return 0; ++ } ++ ++ + /*******************************************/ + static byte *loadPalette(tif, w, h, photo, bps, pinfo) + TIFF *tif; +*************** +*** 186,192 **** + break; + } + +! sprintf(pinfo->shrtInfo, "%ux%u TIFF.",w,h); + + pic8 = (byte *) malloc((size_t) w*h); + if (!pic8) FatalError("loadPalette() - couldn't malloc 'pic8'"); +--- 426,432 ---- + break; + } + +! sprintf(pinfo->shrtInfo, "%ux%u TIFF.",(u_int) w, (u_int) h); + + pic8 = (byte *) malloc((size_t) w*h); + if (!pic8) FatalError("loadPalette() - couldn't malloc 'pic8'"); +*************** +*** 214,220 **** + "???"), + filesize); + +! sprintf(pinfo->shrtInfo, "%ux%u TIFF.",w,h); + + /* allocate 24-bit image */ + pic24 = (byte *) malloc((size_t) w*h*3); +--- 454,460 ---- + "???"), + filesize); + +! sprintf(pinfo->shrtInfo, "%ux%u TIFF.",(u_int) w, (u_int) h); + + /* allocate 24-bit image */ + pic24 = (byte *) malloc((size_t) w*h*3); +*************** +*** 1014,1020 **** + #define CASE4(x,op) switch (x) { case 3: op; case 2: op; case 1: op; } + + #define UNROLL8(w, op1, op2) { \ +! uint32 x; \ + for (x = w; x >= 8; x -= 8) { \ + op1; \ + REPEAT8(op2); \ +--- 1254,1260 ---- + #define CASE4(x,op) switch (x) { case 3: op; case 2: op; case 1: op; } + + #define UNROLL8(w, op1, op2) { \ +! uint32 x; \ + for (x = w; x >= 8; x -= 8) { \ + op1; \ + REPEAT8(op2); \ +*************** +*** 1026,1032 **** + } + + #define UNROLL4(w, op1, op2) { \ +! register uint32 x; \ + for (x = w; x >= 4; x -= 4) { \ + op1; \ + REPEAT4(op2); \ +--- 1266,1272 ---- + } + + #define UNROLL4(w, op1, op2) { \ +! uint32 x; \ + for (x = w; x >= 4; x -= 4) { \ + op1; \ + REPEAT4(op2); \ +*************** +*** 1038,1044 **** + } + + #define UNROLL2(w, op1, op2) { \ +! register uint32 x; \ + for (x = w; x >= 2; x -= 2) { \ + op1; \ + REPEAT2(op2); \ +--- 1278,1284 ---- + } + + #define UNROLL2(w, op1, op2) { \ +! uint32 x; \ + for (x = w; x >= 2; x -= 2) { \ + op1; \ + REPEAT2(op2); \ +*************** +*** 1381,1387 **** + } + } + +! #define Code2V(c, RB, RW, CR) ((((c)-(int)RB)*(float)CR)/(float)(RW-RB)) + + #define CLAMP(f,min,max) \ + (int)((f)+.5 < (min) ? (min) : (f)+.5 > (max) ? (max) : (f)+.5) +--- 1621,1627 ---- + } + } + +! #define Code2V(c, RB, RW, CR) (((((int)c)-(int)RB)*(float)CR)/(float)(RW-RB)) + + #define CLAMP(f,min,max) \ + (int)((f)+.5 < (min) ? (min) : (f)+.5 > (max) ? (max) : (f)+.5) + diff --git a/xv-pdf.patch b/xv-pdf.patch new file mode 100644 index 0000000..e97b9ff --- /dev/null +++ b/xv-pdf.patch @@ -0,0 +1,24 @@ +If you have one of the newer versions of GhostScript which can read PDF +files, then there's no reason you can't read PDF files in XV, either. + +All you need is this simple patch to detect PDF files as being +'PostScript-y'. + +--jhb, 4/1/98 + + +*** xv.c.orig Wed Apr 1 01:30:58 1998 +--- xv.c Wed Apr 1 01:31:52 1998 +*************** +*** 2625,2630 **** +--- 2625,2634 ---- + strncmp((char *) magicno, "\004%!", (size_t) 3)==0) rv = RFT_PS; + #endif + ++ #ifdef GS_PATH ++ else if (strncmp((char *) magicno, "%PDF", (size_t) 4)==0) rv = RFT_PS; ++ #endif ++ + return rv; + } + diff --git a/xv-png-fix2.patch b/xv-png-fix2.patch new file mode 100644 index 0000000..30b74ff --- /dev/null +++ b/xv-png-fix2.patch @@ -0,0 +1,218 @@ +This patch to Andreas Dilger's XV PNG patch 1.2d addresses the following +bugs, buglets and typos: + + - fixes a core-dump triggered by an unfortunate "feature" in libpng 0.97 + and later (i.e., libpng frees text buffers it didn't allocate) + + - forces text comments inherited from GIF or elsewhere to be in proper + PNG format (i.e., Unix-style "LF" line-endings); inherited PNG comments + are still assumed to be in proper format + + - corrects argument types for png_xv_error() and png_xv_warning() to + match what png_create_write_struct() and png_create_read_struct() + expect + + - changes default ">>" increment on compression dial from 2 to 3 so that + maximum compression (level 9) is one click away from default (level 6) + + - fixes some comment typos and removes overlooked debug code + +This code has been tested with various versions of libpng, most recently +version 1.0.1c4 (precursor to 1.0.2), with no apparent problems. + +Greg Roelofs, newt@pobox.com +10 May 1998 + + + +*** xvpng.c.stock Thu Jun 13 16:42:11 1996 +--- xvpng.c Sun May 10 13:02:07 1998 +*************** +*** 49,54 **** +--- 49,57 ---- + + #define BUTTH 24 + ++ #define LF 10 /* a.k.a. '\n' on ASCII machines */ ++ #define CR 13 /* a.k.a. '\r' on ASCII machines */ ++ + /*** local functions ***/ + static void drawPD PARM((int, int, int, int)); + static void clickPD PARM((int, int)); +*************** +*** 57,64 **** + static int WritePNG PARM((FILE *, byte *, int, int, int, + byte *, byte *, byte *, int)); + +! static void png_xv_error PARM((png_struct *png_ptr, char *message)); +! static void png_xv_warning PARM((png_struct *png_ptr, char *message)); + + /*** local variables ***/ + static char *filename; +--- 60,69 ---- + static int WritePNG PARM((FILE *, byte *, int, int, int, + byte *, byte *, byte *, int)); + +! static void png_xv_error PARM((png_structp png_ptr, +! png_const_charp message)); +! static void png_xv_warning PARM((png_structp png_ptr, +! png_const_charp message)); + + /*** local variables ***/ + static char *filename; +*************** +*** 87,93 **** + XSelectInput(theDisp, pngW, ExposureMask | ButtonPressMask | KeyPressMask); + + DCreate(&cDial, pngW, 12, 25, DWIDE, DHIGH, (double)Z_NO_COMPRESSION, +! (double)Z_BEST_COMPRESSION, COMPRESSION, 1.0, 2.0, + infofg, infobg, hicol, locol, "Compression", NULL); + + DCreate(&gDial, pngW, DWIDE+27, 25, DWIDE, DHIGH, 1.0, 3.5,DISPLAY_GAMMA,0.01,0.2, +--- 92,98 ---- + XSelectInput(theDisp, pngW, ExposureMask | ButtonPressMask | KeyPressMask); + + DCreate(&cDial, pngW, 12, 25, DWIDE, DHIGH, (double)Z_NO_COMPRESSION, +! (double)Z_BEST_COMPRESSION, COMPRESSION, 1.0, 3.0, + infofg, infobg, hicol, locol, "Compression", NULL); + + DCreate(&gDial, pngW, DWIDE+27, 25, DWIDE, DHIGH, 1.0, 3.5,DISPLAY_GAMMA,0.01,0.2, +*************** +*** 594,607 **** + int j; + p = pic; + for(j = 0; j < h; j++) { +- fflush(stdout); + if(info_ptr->color_type == PNG_COLOR_TYPE_GRAY) { + int k; + for(k = 0; k < w; k++) + png_line[k] = ptype==PIC24 ? MONO(p[k*3], p[k*3+1], p[k*3+2]) : + remap[p[k]]; + png_write_row(png_ptr, png_line); +! } else /* rbg or palette */ + png_write_row(png_ptr, p); + if((j & 0x1f) == 0) WaitCursor(); + p += linesize; +--- 606,618 ---- + int j; + p = pic; + for(j = 0; j < h; j++) { + if(info_ptr->color_type == PNG_COLOR_TYPE_GRAY) { + int k; + for(k = 0; k < w; k++) + png_line[k] = ptype==PIC24 ? MONO(p[k*3], p[k*3+1], p[k*3+2]) : + remap[p[k]]; + png_write_row(png_ptr, png_line); +! } else /* RGB or palette */ + png_write_row(png_ptr, p); + if((j & 0x1f) == 0) WaitCursor(); + p += linesize; +*************** +*** 690,700 **** + tp++; + } + } +! /* It is just a generic comment */ + else { + tp->key = "Comment"; + tp->text = key; +! tp->text_length = strlen(tp->text); + tp->compression = tp->text_length > 750 ? 0 : -1; + info_ptr->num_text++; + key = NULL; +--- 701,725 ---- + tp++; + } + } +! /* Just a generic comment: make sure line-endings are valid for PNG */ + else { ++ char *p=key, *q=key; /* only deleting chars, not adding any */ ++ ++ while (*p) { ++ if (*p == CR) { /* lone CR or CR/LF: EOL either way */ ++ *q++ = LF; /* LF is the only allowed PNG line-ending */ ++ if (p[1] == LF) /* get rid of any original LF */ ++ ++p; ++ } else if (*p == LF) /* lone LF */ ++ *q++ = LF; ++ else ++ *q++ = *p; ++ ++p; ++ } ++ *q = '\0'; /* unnecessary...but what the heck */ + tp->key = "Comment"; + tp->text = key; +! tp->text_length = q - key; + tp->compression = tp->text_length > 750 ? 0 : -1; + info_ptr->num_text++; + key = NULL; +*************** +*** 712,726 **** + info_ptr->valid |= PNG_INFO_tIME; + + png_write_end(png_ptr, info_ptr); +! png_destroy_write_struct(&png_ptr, &info_ptr); + + if (text) + { + free(text); + if (savecmnt) + free(savecmnt); + } + + return 0; + } + +--- 737,758 ---- + info_ptr->valid |= PNG_INFO_tIME; + + png_write_end(png_ptr, info_ptr); +! fflush(fp); /* just in case we core-dump before finishing... */ + + if (text) + { + free(text); ++ /* must do this or png_destroy_write_struct() 0.97+ will free text again: */ ++ info_ptr->text = (png_textp)NULL; + if (savecmnt) ++ { + free(savecmnt); ++ savecmnt = (char *)NULL; ++ } + } + ++ png_destroy_write_struct(&png_ptr, &info_ptr); ++ + return 0; + } + +*************** +*** 941,948 **** +--- 999,1010 ---- + /*******************************************/ + static void + png_xv_error(png_ptr, message) ++ /* + png_struct *png_ptr; + char *message; ++ */ ++ png_structp png_ptr; ++ png_const_charp message; + { + SetISTR(ISTR_WARNING,"%s: libpng error: %s", fbasename, message); + +*************** +*** 953,960 **** +--- 1015,1026 ---- + /*******************************************/ + static void + png_xv_warning(png_ptr, message) ++ /* + png_struct *png_ptr; + char *message; ++ */ ++ png_structp png_ptr; ++ png_const_charp message; + { + if (!png_ptr) + return; diff --git a/xv-vispatch b/xv-vispatch new file mode 100644 index 0000000..6343c8a --- /dev/null +++ b/xv-vispatch @@ -0,0 +1,118 @@ +This patch fixes problems with picking a good visual on certain 24-bit Sun +systems. + + +*** ../xv-3.10a/xv.c Thu Jan 19 13:08:43 1995 +--- xv.c Mon Mar 06 17:59:59 1995 +*************** +*** 326,363 **** + */ + + +- + /* if we *haven't* had a non-default visual specified, + see if we have a TrueColor or DirectColor visual of 24 or 32 bits, + and if so, use that as the default visual (prefer TrueColor) */ + + if (!visualstr && !useroot) { + XVisualInfo *vinfo, rvinfo; + int best, numvis; + long flags; + +! best = -1; + rvinfo.class = TrueColor; + rvinfo.screen = theScreen; +! flags = VisualClassMask | VisualScreenMask; + + vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis); +! if (vinfo) { /* look for a TrueColor, 24-bit or more (pref 24) */ +! for (i=0, best = -1; i24 && best<0) best = i; + } + } +! + if (best == -1) { /* look for a DirectColor, 24-bit or more (pref 24) */ + rvinfo.class = DirectColor; + if (vinfo) XFree((char *) vinfo); + vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis); + if (vinfo) { +! for (i=0, best = -1; i24 && best<0) best = i; + } + } + } + +--- 326,377 ---- + */ + + + /* if we *haven't* had a non-default visual specified, + see if we have a TrueColor or DirectColor visual of 24 or 32 bits, + and if so, use that as the default visual (prefer TrueColor) */ + + if (!visualstr && !useroot) { ++ VisualID defvid; + XVisualInfo *vinfo, rvinfo; + int best, numvis; + long flags; + +! best = -1; + rvinfo.class = TrueColor; + rvinfo.screen = theScreen; +! flags = VisualClassMask | VisualScreenMask; +! defvid = XVisualIDFromVisual(DefaultVisual(theDisp, +! DefaultScreen(theDisp))); + + vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis); +! if (vinfo) { +! /* Check list, use 'default', first 24-bit, or first >24-bit */ +! for (i=0; i= 24)) best=i; +! } +! for (i=0; i24-bit ? */ ++ if (vinfo[i].depth >= 24) best = i; ++ } + } +! + if (best == -1) { /* look for a DirectColor, 24-bit or more (pref 24) */ + rvinfo.class = DirectColor; + if (vinfo) XFree((char *) vinfo); ++ + vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis); + if (vinfo) { +! for (i=0; i= 24)) best=i; +! } +! for (i=0; i24-bit ? */ ++ if (vinfo[i].depth >= 24) best = i; ++ } + } + } + +*************** +*** 364,371 **** + if (best>=0 && best=0 && best